diff --git a/.dockerignore b/.dockerignore index 5c7bfad..1b6964a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -14,9 +14,12 @@ MemoryCaptures/ Recordings/ obj/ -# Host-side Node (not needed when image serves pre-built dist) +# Host-side Node (fresh install in the builder stage) **/node_modules/ +# Rebuilt inside the Docker builder; omit from context for smaller/faster uploads +Needle/*/dist/ + # OS .DS_Store Thumbs.db diff --git a/Assets/Needle/Components.codegen/MenuController.cs b/Assets/Needle/Components.codegen/MenuController.cs index 9be3082..38ac0a4 100644 --- a/Assets/Needle/Components.codegen/MenuController.cs +++ b/Assets/Needle/Components.codegen/MenuController.cs @@ -13,9 +13,9 @@ namespace Needle.Typescript.GeneratedComponents public UnityEngine.Transform[] @dishes; public UnityEngine.Transform @webXROrigin; [UnityEngine.Tooltip("Local-space vertical bob amplitude (meters). Set to 0 to disable.")] - public float @dishBobAmplitude = 0.05f; + public float @dishBobAmplitude = 0.004f; [UnityEngine.Tooltip("Bob angular speed (radians per second).")] - public float @dishBobSpeed = 2.5f; + public float @dishBobSpeed = 1f; public float @selectedDishIndex = 0f; public void OnEnable() {} public void onEnterXR(object @args) {} diff --git a/Dockerfile b/Dockerfile index cd1dd86..4a80c22 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,26 @@ -# Serves pre-built Needle/Vite output from the repo (Needle//dist). -# Build locally first: cd Needle/MenuScene && npm run build -# Optional: Needle/SampleScene && npm run build (for compose profile "sample") +# Multi-stage: Vite production build runs during `docker build` / `docker compose build` — +# no `npm run build` on the host first. The final image is nginx + freshly built `dist/`. +# +# Unity still exports into Needle//assets/ on your machine; include that folder in the +# build context when it exists (it is not listed in .dockerignore). Clones without `assets/` +# need a Unity export (or committed assets) before the image can bundle a valid scene. ARG NEEDLE_APP=MenuScene +FROM node:22-alpine AS builder +ARG NEEDLE_APP +WORKDIR /src + +COPY Needle/${NEEDLE_APP}/package.json Needle/${NEEDLE_APP}/package-lock.json ./ +RUN npm ci + +COPY Needle/${NEEDLE_APP}/ ./ +RUN npm run build + FROM nginx:1.27-alpine ARG NEEDLE_APP -COPY Needle/${NEEDLE_APP}/dist /usr/share/nginx/html +COPY --from=builder /src/dist /usr/share/nginx/html COPY docker/nginx-default.conf /etc/nginx/conf.d/default.conf EXPOSE 80 diff --git a/Needle/MenuScene/dist/assets/GenerateMeshBVHWorker.DMD7ZOpN.js b/Needle/MenuScene/dist/assets/GenerateMeshBVHWorker.DMD7ZOpN.js deleted file mode 100644 index 8c29bc6..0000000 --- a/Needle/MenuScene/dist/assets/GenerateMeshBVHWorker.DMD7ZOpN.js +++ /dev/null @@ -1 +0,0 @@ -import{t as e}from"./needle-engine@5.0.3.js";export{e as GenerateMeshBVHWorker}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/JsMaterialXCore.B97gKRq_.wasm b/Needle/MenuScene/dist/assets/JsMaterialXCore.B97gKRq_.wasm deleted file mode 100644 index 92f7caf..0000000 Binary files a/Needle/MenuScene/dist/assets/JsMaterialXCore.B97gKRq_.wasm and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/JsMaterialXCore.DGnKx6GJ.js b/Needle/MenuScene/dist/assets/JsMaterialXCore.DGnKx6GJ.js deleted file mode 100644 index 217251c..0000000 --- a/Needle/MenuScene/dist/assets/JsMaterialXCore.DGnKx6GJ.js +++ /dev/null @@ -1 +0,0 @@ -import{u as e}from"./materialx.CnHmG--Y.js";export{e as default}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/JsMaterialXGenShader.DFP9U7Gu.js b/Needle/MenuScene/dist/assets/JsMaterialXGenShader.DFP9U7Gu.js deleted file mode 100644 index 5fc3226..0000000 --- a/Needle/MenuScene/dist/assets/JsMaterialXGenShader.DFP9U7Gu.js +++ /dev/null @@ -1 +0,0 @@ -import{c as e}from"./materialx.CnHmG--Y.js";export{e as default}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/JsMaterialXGenShader.P2pWAaz9.wasm b/Needle/MenuScene/dist/assets/JsMaterialXGenShader.P2pWAaz9.wasm deleted file mode 100644 index 5726786..0000000 Binary files a/Needle/MenuScene/dist/assets/JsMaterialXGenShader.P2pWAaz9.wasm and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/JsMaterialXGenShader.data.DOxudtll.txt b/Needle/MenuScene/dist/assets/JsMaterialXGenShader.data.DOxudtll.txt deleted file mode 100644 index 6ce8341..0000000 --- a/Needle/MenuScene/dist/assets/JsMaterialXGenShader.data.DOxudtll.txt +++ /dev/null @@ -1,29044 +0,0 @@ -if(MATERIALX_BUILD_DATA_LIBRARY) - # Build generated products from the MaterialX data library. - # Initially, this step is a simple copy across folders, but our intent - # is for it to include meaningful work in the future. - - set(DATA_LIBRARY_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/DataLibraryBuild) - - file(GLOB_RECURSE MATERIALX_DATA_LIBRARY_SOURCE_FILES - RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - LIST_DIRECTORIES false - *.mtlx - *.md - *.glsl - *.osl - *.h - *.metal) - - foreach(SOURCE_FILE IN LISTS MATERIALX_DATA_LIBRARY_SOURCE_FILES) - set(SOURCE_FILEPATH ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE}) - set(DEST_FILEPATH ${DATA_LIBRARY_BUILD_DIR}/${SOURCE_FILE}) - add_custom_command( - OUTPUT ${DEST_FILEPATH} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SOURCE_FILEPATH} ${DEST_FILEPATH} - DEPENDS ${SOURCE_FILEPATH}) - list(APPEND MATERIALX_DATA_LIBRARY_BUILD_FILES ${DEST_FILEPATH}) - endforeach() - - add_custom_target(MaterialXBuildData ALL - DEPENDS ${MATERIALX_DATA_LIBRARY_BUILD_FILES}) - - set(DATA_LIBRARY_DIR ${DATA_LIBRARY_BUILD_DIR}) -else() - set(DATA_LIBRARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -endif() - -if(NOT SKBUILD) - install(DIRECTORY ${DATA_LIBRARY_DIR}/ - DESTINATION "${MATERIALX_INSTALL_STDLIB_PATH}" - PATTERN "CMakeLists.txt" EXCLUDE) -endif() - -if(MATERIALX_BUILD_PYTHON) - set(MATERIALX_PYTHON_LIBRARIES_PATH "${MATERIALX_PYTHON_FOLDER_NAME}/${MATERIALX_INSTALL_STDLIB_PATH}") - if(SKBUILD) - set(MATERIALX_PYTHON_LIBRARIES_PATH "${SKBUILD_PLATLIB_DIR}/MaterialX/libraries") - endif() - - install(DIRECTORY ${DATA_LIBRARY_DIR}/ - DESTINATION "${MATERIALX_PYTHON_LIBRARIES_PATH}" - PATTERN "CMakeLists.txt" EXCLUDE) -endif() - -set(MATERIALX_DATA_LIBRARY_DIR ${DATA_LIBRARY_DIR} PARENT_SCOPE) -# MaterialX Data Libraries - -This folder contains the standard data libraries for MaterialX, providing declarations and graph definitions for the MaterialX nodes, and source code for all supported shader generators. - -## Standard Pattern Library -- [stdlib](stdlib) - - [stdlib_defs.mtlx](stdlib/stdlib_defs.mtlx) : Nodedef declarations. - - [stdlib_ng.mtlx](stdlib/stdlib_ng.mtlx) : Nodegraph definitions. - - [genglsl](stdlib/genglsl): GLSL language support. - - [lib](stdlib/genglsl/lib) : Shader utility files. - - [stdlib_genglsl_impl.mtlx](stdlib/genglsl/stdlib_genglsl_impl.mtlx) : Mapping from declarations to implementations. - - [genosl](stdlib/genosl): OSL language support. - - [lib](stdlib/genosl/lib) : Shader utility files. - - [stdlib_genosl_impl.mtlx](stdlib/genosl/stdlib_genosl_impl.mtlx) : Mapping from declarations to implementations. - - [genmdl](stdlib/genmdl): MDL language support. - - [stdlib_genmdl_impl.mtlx](stdlib/genmdl/stdlib_genmdl_impl.mtlx) : Mapping from declarations to implementations. - - Additional MaterialX support libraries for MDL are located in the [source/MaterialXGenMdl/mdl/materialx](../source/MaterialXGenMdl/mdl/materialx) package folder - - [genmsl](stdlib/genmsl): MSL language support. - - [lib](stdlib/genmsl/lib) : Shader utility files. - - [stdlib_genmsl_impl.mtlx](stdlib/genmsl/stdlib_genmsl_impl.mtlx) : Mapping from declarations to implementations. - -## Physically Based Shading Library -- [pbrlib](pbrlib) - - [pbrlib_defs.mtlx](pbrlib/pbrlib_defs.mtlx) : Nodedef declarations. - - [pbrlib_ng.mtlx](pbrlib/pbrlib_ng.mtlx) : Nodegraph definitions. - - [genglsl](pbrlib/genglsl) : GLSL language support - - [lib](pbrlib/genglsl/lib) : Shader utility files. - - [pbrlib_genglsl_impl.mtlx](pbrlib/genglsl/pbrlib_genglsl_impl.mtlx) : Mapping from declarations to implementations. - - [genosl](pbrlib/genosl) : OSL language support - - [lib](pbrlib/genosl/lib) : Shader utility files. - - [pbrlib_genosl_impl.mtlx](pbrlib/genosl/pbrlib_genosl_impl.mtlx) : Mapping from declarations to implementations. - - [genmdl](pbrlib/genmdl) : MDL language support - - [pbrlib_genmdl_impl.mtlx](pbrlib/genmdl/pbrlib_genmdl_impl.mtlx) : Mapping from declarations to implementations. - - [genmsl](pbrlib/genmsl) : MSL language support - - [pbrlib_genmsl_impl.mtlx](pbrlib/genmsl/pbrlib_genmsl_impl.mtlx) : Mapping from declarations to implementations. - -## BxDF Graph Library -- [bxdf](bxdf) - - [standard_surface.mtlx](bxdf/standard_surface.mtlx) : Graph definition of the [Autodesk Standard Surface](https://autodesk.github.io/standard-surface/) shading model. - - [gltf_pbr.mtlx](bxdf/gltf_pbr.mtlx) : Graph definition of the [glTF PBR](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#appendix-b-brdf-implementation) shading model. - - [usd_preview_surface.mtlx](bxdf/usd_preview_surface.mtlx) : Graph definition of the [UsdPreviewSurface](https://openusd.org/release/spec_usdpreviewsurface.html) shading model. - - [lama](bxdf/lama) : Graph definitions of the [MaterialX Lama](https://rmanwiki.pixar.com/display/REN24/MaterialX+Lama) node set. - -## Color Management Library -- MaterialX shader generation natively supports a small set of common spaces for input colors, with all color transforms implemented as language-independent MaterialX graphs.The canonical definitions of these color transforms may be found in the OpenColorIO configuration for [ACES 1.2](https://github.com/colour-science/OpenColorIO-Configs/tree/feature/aces-1.2-config/aces_1.2). - - lin_rec709 - - g18_rec709 - - g22_rec709 - - rec709_display - - acescg (lin_ap1) - - g22_ap1 - - srgb_texture - - lin_adobergb - - adobergb - - srgb_displayp3 - - lin_displayp3 -- [cmlib](cmlib) - - [cmlib_defs.mtlx](cmlib/cmlib_defs.mtlx) : Nodedef declarations. - - [cmlib_ng.mtlx](cmlib/cmlib_ng.mtlx) : Nodegraph definitions. - -## Target Definitions -- Each target implementation requires a target definition for declaration / implementation correspondence to work. -- The [targets](targets) folder contains definition files for the following core targets: - - GLSL : `genglsl` - - OSL : `genosl` - - MDL : `genmdl` - - MSL : `genmsl` -- Any additional target files should be added under this folder and loaded in as required. - -### Target Support -- GLSL target support is for version 4.0 or higher. -- OSL target support is for version 1.12.6 or higher. -- MDL target support is for version 1.6 or higher. -- Basic GLSL and MSL `lightshader` node definitions and implementations are provided for the following light types: - - point, directional, spot -- Shader generation does not currently support: - - `displacementshader` and `volumeshader` nodes for hardware shading targets (GLSL, MSL). - - `hextiledimage` and `hextilednormalmap` for OSL and MDL. - - `blur` the implementation passes through `in` unmodified in all shading languages. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void mx_directional_light(LightData light, vec3 position, out lightshader result) -{ - result.direction = -light.direction; - result.intensity = light.color * light.intensity; -} -void mx_point_light(LightData light, vec3 position, out lightshader result) -{ - result.direction = light.position - position; - float distance = length(result.direction) + M_FLOAT_EPS; - float attenuation = pow(distance + 1.0, light.decay_rate + M_FLOAT_EPS); - result.intensity = light.color * light.intensity / attenuation; - result.direction /= distance; -} -void mx_spot_light(LightData light, vec3 position, out lightshader result) -{ - result.direction = light.position - position; - float distance = length(result.direction) + M_FLOAT_EPS; - float attenuation = pow(distance + 1.0, light.decay_rate + M_FLOAT_EPS); - result.intensity = light.color * light.intensity / attenuation; - result.direction /= distance; - float low = min(light.inner_angle, light.outer_angle); - float high = light.inner_angle; - float cosDir = dot(result.direction, -light.direction); - float spotAttenuation = smoothstep(low, high, cosDir); - result.intensity *= spotAttenuation; -} - - - - - - - - - - - - - -void mx_directional_light(LightData light, float3 position, thread lightshader& result) -{ - result.direction = -light.direction; - result.intensity = light.color * light.intensity; -} -void mx_point_light(LightData light, float3 position, thread lightshader& result) -{ - result.direction = light.position - position; - float distance = length(result.direction) + M_FLOAT_EPS; - float attenuation = pow(distance + 1.0, light.decay_rate + M_FLOAT_EPS); - result.intensity = light.color * light.intensity / attenuation; - result.direction /= distance; -} -void mx_spot_light(LightData light, float3 position, thread lightshader& result) -{ - result.direction = light.position - position; - float distance = length(result.direction) + M_FLOAT_EPS; - float attenuation = pow(distance + 1.0, light.decay_rate + M_FLOAT_EPS); - result.intensity = light.color * light.intensity / attenuation; - result.direction /= distance; - float low = min(light.inner_angle, light.outer_angle); - float high = light.inner_angle; - float cosDir = dot(result.direction, -light.direction); - float spotAttenuation = smoothstep(low, high, cosDir); - result.intensity *= spotAttenuation; -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// These are defined based on the HwShaderGenerator::ClosureContextType enum -// if that changes - these need to be updated accordingly. - -#define CLOSURE_TYPE_DEFAULT 0 -#define CLOSURE_TYPE_REFLECTION 1 -#define CLOSURE_TYPE_TRANSMISSION 2 -#define CLOSURE_TYPE_INDIRECT 3 -#define CLOSURE_TYPE_EMISSION 4 - -struct ClosureData { - int closureType; - vec3 L; - vec3 V; - vec3 N; - vec3 P; - float occlusion; -}; -#include "mx_microfacet_specular.glsl" - -vec3 mx_environment_radiance(vec3 N, vec3 V, vec3 X, vec2 alpha, int distribution, FresnelData fd) -{ - // Generate tangent frame. - X = normalize(X - dot(X, N) * N); - vec3 Y = cross(N, X); - mat3 tangentToWorld = mat3(X, Y, N); - - // Transform the view vector to tangent space. - V = vec3(dot(V, X), dot(V, Y), dot(V, N)); - - // Compute derived properties. - float NdotV = clamp(V.z, M_FLOAT_EPS, 1.0); - float avgAlpha = mx_average_alpha(alpha); - float G1V = mx_ggx_smith_G1(NdotV, avgAlpha); - - // Integrate outgoing radiance using filtered importance sampling. - // http://cgg.mff.cuni.cz/~jaroslav/papers/2008-egsr-fis/2008-egsr-fis-final-embedded.pdf - vec3 radiance = vec3(0.0); - int envRadianceSamples = $envRadianceSamples; - for (int i = 0; i < envRadianceSamples; i++) - { - vec2 Xi = mx_spherical_fibonacci(i, envRadianceSamples); - - // Compute the half vector and incoming light direction. - vec3 H = mx_ggx_importance_sample_VNDF(Xi, V, alpha); - vec3 L = fd.refraction ? mx_refraction_solid_sphere(-V, H, fd.ior.x) : -reflect(V, H); - - // Compute dot products for this sample. - float NdotL = clamp(L.z, M_FLOAT_EPS, 1.0); - float VdotH = clamp(dot(V, H), M_FLOAT_EPS, 1.0); - - // Sample the environment light from the given direction. - vec3 Lw = tangentToWorld * L; - float pdf = mx_ggx_NDF(H, alpha) * G1V / (4.0 * NdotV); - float lod = mx_latlong_compute_lod(Lw, pdf, float($envRadianceMips - 1), envRadianceSamples); - vec3 sampleColor = mx_latlong_map_lookup(Lw, $envMatrix, lod, $envRadiance); - - // Compute the Fresnel term. - vec3 F = mx_compute_fresnel(VdotH, fd); - - // Compute the geometric term. - float G = mx_ggx_smith_G2(NdotL, NdotV, avgAlpha); - - // Compute the combined FG term, which simplifies to inverted Fresnel for refraction. - vec3 FG = fd.refraction ? vec3(1.0) - F : F * G; - - // Add the radiance contribution of this sample. - // From https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf - // incidentLight = sampleColor * NdotL - // microfacetSpecular = D * F * G / (4 * NdotL * NdotV) - // pdf = D * G1V / (4 * NdotV); - // radiance = incidentLight * microfacetSpecular / pdf - radiance += sampleColor * FG; - } - - // Apply the global component of the geometric term and normalize. - radiance /= G1V * float(envRadianceSamples); - - // Return the final radiance. - return radiance * $envLightIntensity; -} - -vec3 mx_environment_irradiance(vec3 N) -{ - vec3 Li = mx_latlong_map_lookup(N, $envMatrix, 0.0, $envIrradiance); - return Li * $envLightIntensity; -} -#include "mx_microfacet_specular.glsl" - -vec3 mx_environment_radiance(vec3 N, vec3 V, vec3 X, vec2 roughness, int distribution, FresnelData fd) -{ - return vec3(0.0); -} - -vec3 mx_environment_irradiance(vec3 N) -{ - return vec3(0.0); -} -#include "mx_microfacet_specular.glsl" - -// Return the mip level associated with the given alpha in a prefiltered environment. -float mx_latlong_alpha_to_lod(float alpha) -{ - float lodBias = (alpha < 0.25) ? sqrt(alpha) : 0.5 * alpha + 0.375; - return lodBias * float($envRadianceMips - 1); -} - -vec3 mx_environment_radiance(vec3 N, vec3 V, vec3 X, vec2 alpha, int distribution, FresnelData fd) -{ - N = mx_forward_facing_normal(N, V); - vec3 L = fd.refraction ? mx_refraction_solid_sphere(-V, N, fd.ior.x) : -reflect(V, N); - - float NdotV = clamp(dot(N, V), M_FLOAT_EPS, 1.0); - - float avgAlpha = mx_average_alpha(alpha); - vec3 F = mx_compute_fresnel(NdotV, fd); - float G = mx_ggx_smith_G2(NdotV, NdotV, avgAlpha); - vec3 FG = fd.refraction ? vec3(1.0) - (F * G) : F * G; - - vec3 Li = mx_latlong_map_lookup(L, $envMatrix, mx_latlong_alpha_to_lod(avgAlpha), $envRadiance); - return Li * FG * $envLightIntensity; -} - -vec3 mx_environment_irradiance(vec3 N) -{ - vec3 Li = mx_latlong_map_lookup(N, $envMatrix, 0.0, $envIrradiance); - return Li * $envLightIntensity; -} -#include "mx_microfacet_sheen.glsl" -#include "mx_microfacet_specular.glsl" - -vec3 mx_generate_dir_albedo_table() -{ - vec2 uv = gl_FragCoord.xy / $albedoTableSize; - vec2 ggxDirAlbedo = mx_ggx_dir_albedo(uv.x, uv.y, vec3(1, 0, 0), vec3(0, 1, 0)).xy; - float sheenDirAlbedo = mx_imageworks_sheen_dir_albedo(uv.x, uv.y); - return vec3(ggxDirAlbedo, sheenDirAlbedo); -} -#include "mx_microfacet_specular.glsl" - -// Return the alpha associated with the given mip level in a prefiltered environment. -float mx_latlong_lod_to_alpha(float lod) -{ - float lodBias = lod / float($envRadianceMips - 1); - return (lodBias < 0.5) ? mx_square(lodBias) : 2.0 * (lodBias - 0.375); -} - -// The inverse of mx_latlong_projection. -vec3 mx_latlong_map_projection_inverse(vec2 uv) -{ - float latitude = (uv.y - 0.5) * M_PI; - float longitude = (uv.x - 0.5) * M_PI * 2.0; - - float x = -mx_cos(latitude) * mx_sin(longitude); - float y = -mx_sin(latitude); - float z = mx_cos(latitude) * mx_cos(longitude); - - return vec3(x, y, z); -} - -vec3 mx_generate_prefilter_env() -{ - // The tangent view vector is aligned with the normal. - vec3 V = vec3(0.0, 0.0, 1.0); - float NdotV = 1.0; - - // Compute derived properties. - vec2 uv = gl_FragCoord.xy * pow(2.0, $envPrefilterMip) / vec2(textureSize($envRadianceSampler2D, 0)); - vec3 worldN = mx_latlong_map_projection_inverse(uv); - mat3 tangentToWorld = mx_orthonormal_basis(worldN); - float alpha = mx_latlong_lod_to_alpha(float($envPrefilterMip)); - float G1V = mx_ggx_smith_G1(NdotV, alpha); - - // Integrate the LD term for the given environment and alpha. - vec3 radiance = vec3(0.0, 0.0, 0.0); - float weight = 0.0; - int envRadianceSamples = 1024; - for (int i = 0; i < envRadianceSamples; i++) - { - vec2 Xi = mx_spherical_fibonacci(i, envRadianceSamples); - - // Compute the half vector and incoming light direction. - vec3 H = mx_ggx_importance_sample_VNDF(Xi, V, vec2(alpha)); - vec3 L = -V + 2.0 * H.z * H; - - // Compute dot products for this sample. - float NdotL = clamp(L.z, M_FLOAT_EPS, 1.0); - - // Compute the geometric term. - float G = mx_ggx_smith_G2(NdotL, NdotV, alpha); - - // Sample the environment light from the given direction. - vec3 Lw = tangentToWorld * L; - float pdf = mx_ggx_NDF(H, vec2(alpha)) * G1V / (4.0 * NdotV); - float lod = mx_latlong_compute_lod(Lw, pdf, float($envRadianceMips - 1), envRadianceSamples); - vec3 sampleColor = mx_latlong_map_lookup(Lw, $envMatrix, lod, $envRadiance); - - // Add the radiance contribution of this sample. - radiance += G * sampleColor; - weight += G; - } - - return radiance / weight; -} -#define M_PI 3.1415926535897932 -#define M_PI_INV (1.0 / M_PI) - -float mx_pow5(float x) -{ - return mx_square(mx_square(x)) * x; -} - -float mx_pow6(float x) -{ - float x2 = mx_square(x); - return mx_square(x2) * x2; -} - -// Standard Schlick Fresnel -float mx_fresnel_schlick(float cosTheta, float F0) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - float x5 = mx_pow5(x); - return F0 + (1.0 - F0) * x5; -} -vec3 mx_fresnel_schlick(float cosTheta, vec3 F0) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - float x5 = mx_pow5(x); - return F0 + (1.0 - F0) * x5; -} - -// Generalized Schlick Fresnel -float mx_fresnel_schlick(float cosTheta, float F0, float F90) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - float x5 = mx_pow5(x); - return mix(F0, F90, x5); -} -vec3 mx_fresnel_schlick(float cosTheta, vec3 F0, vec3 F90) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - float x5 = mx_pow5(x); - return mix(F0, F90, x5); -} - -// Generalized Schlick Fresnel with a variable exponent -float mx_fresnel_schlick(float cosTheta, float F0, float F90, float exponent) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - return mix(F0, F90, pow(x, exponent)); -} -vec3 mx_fresnel_schlick(float cosTheta, vec3 F0, vec3 F90, float exponent) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - return mix(F0, F90, pow(x, exponent)); -} - -// Enforce that the given normal is forward-facing from the specified view direction. -vec3 mx_forward_facing_normal(vec3 N, vec3 V) -{ - return (dot(N, V) < 0.0) ? -N : N; -} - -// https://www.graphics.rwth-aachen.de/publication/2/jgt.pdf -float mx_golden_ratio_sequence(int i) -{ - const float GOLDEN_RATIO = 1.6180339887498948; - return fract((float(i) + 1.0) * GOLDEN_RATIO); -} - -// https://people.irisa.fr/Ricardo.Marques/articles/2013/SF_CGF.pdf -vec2 mx_spherical_fibonacci(int i, int numSamples) -{ - return vec2((float(i) + 0.5) / float(numSamples), mx_golden_ratio_sequence(i)); -} - -// Generate a uniform-weighted sample on the unit hemisphere. -vec3 mx_uniform_sample_hemisphere(vec2 Xi) -{ - float phi = 2.0 * M_PI * Xi.x; - float cosTheta = 1.0 - Xi.y; - float sinTheta = sqrt(1.0 - mx_square(cosTheta)); - return vec3(mx_cos(phi) * sinTheta, - mx_sin(phi) * sinTheta, - cosTheta); -} - -// Generate a cosine-weighted sample on the unit hemisphere. -vec3 mx_cosine_sample_hemisphere(vec2 Xi) -{ - float phi = 2.0 * M_PI * Xi.x; - float cosTheta = sqrt(Xi.y); - float sinTheta = sqrt(1.0 - Xi.y); - return vec3(mx_cos(phi) * sinTheta, - mx_sin(phi) * sinTheta, - cosTheta); -} - -// Construct an orthonormal basis from a unit vector. -// https://graphics.pixar.com/library/OrthonormalB/paper.pdf -mat3 mx_orthonormal_basis(vec3 N) -{ - float sign = (N.z < 0.0) ? -1.0 : 1.0; - float a = -1.0 / (sign + N.z); - float b = N.x * N.y * a; - vec3 X = vec3(1.0 + sign * N.x * N.x * a, sign * b, -sign * N.x); - vec3 Y = vec3(b, sign + N.y * N.y * a, -N.y); - return mat3(X, Y, N); -} -#include "mx_microfacet.glsl" - -const float FUJII_CONSTANT_1 = 0.5 - 2.0 / (3.0 * M_PI); -const float FUJII_CONSTANT_2 = 2.0 / 3.0 - 28.0 / (15.0 * M_PI); - -// Qualitative Oren-Nayar diffuse with simplified math: -// https://www1.cs.columbia.edu/CAVE/publications/pdfs/Oren_SIGGRAPH94.pdf -float mx_oren_nayar_diffuse(float NdotV, float NdotL, float LdotV, float roughness) -{ - float s = LdotV - NdotL * NdotV; - float stinv = (s > 0.0) ? s / max(NdotL, NdotV) : 0.0; - - float sigma2 = mx_square(roughness); - float A = 1.0 - 0.5 * (sigma2 / (sigma2 + 0.33)); - float B = 0.45 * sigma2 / (sigma2 + 0.09); - - return A + B * stinv; -} - -// Rational quadratic fit to Monte Carlo data for Oren-Nayar directional albedo. -float mx_oren_nayar_diffuse_dir_albedo_analytic(float NdotV, float roughness) -{ - vec2 r = vec2(1.0, 1.0) + - vec2(-0.4297, -0.6076) * roughness + - vec2(-0.7632, -0.4993) * NdotV * roughness + - vec2(1.4385, 2.0315) * mx_square(roughness); - return r.x / r.y; -} - -float mx_oren_nayar_diffuse_dir_albedo_table_lookup(float NdotV, float roughness) -{ -#if DIRECTIONAL_ALBEDO_METHOD == 1 - if (textureSize($albedoTable, 0).x > 1) - { - return texture($albedoTable, vec2(NdotV, roughness)).b; - } -#endif - return 0.0; -} - -float mx_oren_nayar_diffuse_dir_albedo_monte_carlo(float NdotV, float roughness) -{ - NdotV = clamp(NdotV, M_FLOAT_EPS, 1.0); - vec3 V = vec3(sqrt(1.0 - mx_square(NdotV)), 0, NdotV); - - float radiance = 0.0; - const int SAMPLE_COUNT = 64; - for (int i = 0; i < SAMPLE_COUNT; i++) - { - vec2 Xi = mx_spherical_fibonacci(i, SAMPLE_COUNT); - - // Compute the incoming light direction. - vec3 L = mx_uniform_sample_hemisphere(Xi); - - // Compute dot products for this sample. - float NdotL = clamp(L.z, M_FLOAT_EPS, 1.0); - float LdotV = clamp(dot(L, V), M_FLOAT_EPS, 1.0); - - // Compute diffuse reflectance. - float reflectance = mx_oren_nayar_diffuse(NdotV, NdotL, LdotV, roughness); - - // Add the radiance contribution of this sample. - // uniform_pdf = 1 / (2 * PI) - // radiance = (reflectance * NdotL) / (uniform_pdf * PI); - radiance += reflectance * NdotL; - } - - // Apply global components and normalize. - radiance *= 2.0 / float(SAMPLE_COUNT); - - // Return the final directional albedo. - return radiance; -} - -float mx_oren_nayar_diffuse_dir_albedo(float NdotV, float roughness) -{ -#if DIRECTIONAL_ALBEDO_METHOD == 2 - float dirAlbedo = mx_oren_nayar_diffuse_dir_albedo_monte_carlo(NdotV, roughness); -#else - float dirAlbedo = mx_oren_nayar_diffuse_dir_albedo_analytic(NdotV, roughness); -#endif - return clamp(dirAlbedo, 0.0, 1.0); -} - -// Improved Oren-Nayar diffuse from Fujii: -// https://mimosa-pudica.net/improved-oren-nayar.html -float mx_oren_nayar_fujii_diffuse_dir_albedo(float cosTheta, float roughness) -{ - float A = 1.0 / (1.0 + FUJII_CONSTANT_1 * roughness); - float B = roughness * A; - float Si = sqrt(max(0.0, 1.0 - mx_square(cosTheta))); - float G = Si * (mx_acos(clamp(cosTheta, -1.0, 1.0)) - Si * cosTheta) + - 2.0 * ((Si / cosTheta) * (1.0 - Si * Si * Si) - Si) / 3.0; - return A + (B * G * M_PI_INV); -} - -float mx_oren_nayar_fujii_diffuse_avg_albedo(float roughness) -{ - float A = 1.0 / (1.0 + FUJII_CONSTANT_1 * roughness); - return A * (1.0 + FUJII_CONSTANT_2 * roughness); -} - -// Energy-compensated Oren-Nayar diffuse from OpenPBR Surface: -// https://academysoftwarefoundation.github.io/OpenPBR/ -vec3 mx_oren_nayar_compensated_diffuse(float NdotV, float NdotL, float LdotV, float roughness, vec3 color) -{ - float s = LdotV - NdotL * NdotV; - float stinv = (s > 0.0) ? s / max(NdotL, NdotV) : s; - - // Compute the single-scatter lobe. - float A = 1.0 / (1.0 + FUJII_CONSTANT_1 * roughness); - vec3 lobeSingleScatter = color * A * (1.0 + roughness * stinv); - - // Compute the multi-scatter lobe. - float dirAlbedoV = mx_oren_nayar_fujii_diffuse_dir_albedo(NdotV, roughness); - float dirAlbedoL = mx_oren_nayar_fujii_diffuse_dir_albedo(NdotL, roughness); - float avgAlbedo = mx_oren_nayar_fujii_diffuse_avg_albedo(roughness); - vec3 colorMultiScatter = mx_square(color) * avgAlbedo / - (vec3(1.0) - color * max(0.0, 1.0 - avgAlbedo)); - vec3 lobeMultiScatter = colorMultiScatter * - max(M_FLOAT_EPS, 1.0 - dirAlbedoV) * - max(M_FLOAT_EPS, 1.0 - dirAlbedoL) / - max(M_FLOAT_EPS, 1.0 - avgAlbedo); - - // Return the sum. - return lobeSingleScatter + lobeMultiScatter; -} - -vec3 mx_oren_nayar_compensated_diffuse_dir_albedo(float cosTheta, float roughness, vec3 color) -{ - float dirAlbedo = mx_oren_nayar_fujii_diffuse_dir_albedo(cosTheta, roughness); - float avgAlbedo = mx_oren_nayar_fujii_diffuse_avg_albedo(roughness); - vec3 colorMultiScatter = mx_square(color) * avgAlbedo / - (vec3(1.0) - color * max(0.0, 1.0 - avgAlbedo)); - return mix(colorMultiScatter, color, dirAlbedo); -} - -// https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf -// Section 5.3 -float mx_burley_diffuse(float NdotV, float NdotL, float LdotH, float roughness) -{ - float F90 = 0.5 + (2.0 * roughness * mx_square(LdotH)); - float refL = mx_fresnel_schlick(NdotL, 1.0, F90); - float refV = mx_fresnel_schlick(NdotV, 1.0, F90); - return refL * refV; -} - -// Compute the directional albedo component of Burley diffuse for the given -// view angle and roughness. Curve fit provided by Stephen Hill. -float mx_burley_diffuse_dir_albedo(float NdotV, float roughness) -{ - float x = NdotV; - float fit0 = 0.97619 - 0.488095 * mx_pow5(1.0 - x); - float fit1 = 1.55754 + (-2.02221 + (2.56283 - 1.06244 * x) * x) * x; - return mix(fit0, fit1, roughness); -} - -// Evaluate the Burley diffusion profile for the given distance and diffusion shape. -// Based on https://graphics.pixar.com/library/ApproxBSSRDF/ -vec3 mx_burley_diffusion_profile(float dist, vec3 shape) -{ - vec3 num1 = exp(-shape * dist); - vec3 num2 = exp(-shape * dist / 3.0); - float denom = max(dist, M_FLOAT_EPS); - return (num1 + num2) / denom; -} - -// Integrate the Burley diffusion profile over a sphere of the given radius. -// Inspired by Eric Penner's presentation in http://advances.realtimerendering.com/s2011/ -vec3 mx_integrate_burley_diffusion(vec3 N, vec3 L, float radius, vec3 mfp) -{ - float theta = mx_acos(dot(N, L)); - - // Estimate the Burley diffusion shape from mean free path. - vec3 shape = vec3(1.0) / max(mfp, 0.1); - - // Integrate the profile over the sphere. - vec3 sumD = vec3(0.0); - vec3 sumR = vec3(0.0); - const int SAMPLE_COUNT = 32; - const float SAMPLE_WIDTH = (2.0 * M_PI) / float(SAMPLE_COUNT); - for (int i = 0; i < SAMPLE_COUNT; i++) - { - float x = -M_PI + (float(i) + 0.5) * SAMPLE_WIDTH; - float dist = radius * abs(2.0 * mx_sin(x * 0.5)); - vec3 R = mx_burley_diffusion_profile(dist, shape); - sumD += R * max(mx_cos(theta + x), 0.0); - sumR += R; - } - - return sumD / sumR; -} - -vec3 mx_subsurface_scattering_approx(vec3 N, vec3 L, vec3 P, vec3 albedo, vec3 mfp) -{ - float curvature = length(fwidth(N)) / length(fwidth(P)); - float radius = 1.0 / max(curvature, 0.01); - return albedo * mx_integrate_burley_diffusion(N, L, radius, mfp) / vec3(M_PI); -} -#include "mx_microfacet.glsl" - -// https://fpsunflower.github.io/ckulla/data/s2017_pbs_imageworks_sheen.pdf -// Equation 2 -float mx_imageworks_sheen_NDF(float NdotH, float roughness) -{ - float invRoughness = 1.0 / max(roughness, 0.005); - float cos2 = NdotH * NdotH; - float sin2 = 1.0 - cos2; - return (2.0 + invRoughness) * pow(sin2, invRoughness * 0.5) / (2.0 * M_PI); -} - -float mx_imageworks_sheen_brdf(float NdotL, float NdotV, float NdotH, float roughness) -{ - // Microfacet distribution. - float D = mx_imageworks_sheen_NDF(NdotH, roughness); - - // Fresnel and geometry terms are ignored. - float F = 1.0; - float G = 1.0; - - // We use a smoother denominator, as in: - // https://blog.selfshadow.com/publications/s2013-shading-course/rad/s2013_pbs_rad_notes.pdf - return D * F * G / (4.0 * (NdotL + NdotV - NdotL*NdotV)); -} - -// Rational quadratic fit to Monte Carlo data for Imageworks sheen directional albedo. -float mx_imageworks_sheen_dir_albedo_analytic(float NdotV, float roughness) -{ - vec2 r = vec2(13.67300, 1.0) + - vec2(-68.78018, 61.57746) * NdotV + - vec2(799.08825, 442.78211) * roughness + - vec2(-905.00061, 2597.49308) * NdotV * roughness + - vec2(60.28956, 121.81241) * mx_square(NdotV) + - vec2(1086.96473, 3045.55075) * mx_square(roughness); - return r.x / r.y; -} - -float mx_imageworks_sheen_dir_albedo_table_lookup(float NdotV, float roughness) -{ -#if DIRECTIONAL_ALBEDO_METHOD == 1 - if (textureSize($albedoTable, 0).x > 1) - { - return texture($albedoTable, vec2(NdotV, roughness)).b; - } -#endif - return 0.0; -} - -float mx_imageworks_sheen_dir_albedo_monte_carlo(float NdotV, float roughness) -{ - NdotV = clamp(NdotV, M_FLOAT_EPS, 1.0); - vec3 V = vec3(sqrt(1.0f - mx_square(NdotV)), 0, NdotV); - - float radiance = 0.0; - const int SAMPLE_COUNT = 64; - for (int i = 0; i < SAMPLE_COUNT; i++) - { - vec2 Xi = mx_spherical_fibonacci(i, SAMPLE_COUNT); - - // Compute the incoming light direction and half vector. - vec3 L = mx_uniform_sample_hemisphere(Xi); - vec3 H = normalize(L + V); - - // Compute dot products for this sample. - float NdotL = clamp(L.z, M_FLOAT_EPS, 1.0); - float NdotH = clamp(H.z, M_FLOAT_EPS, 1.0); - - // Compute sheen reflectance. - float reflectance = mx_imageworks_sheen_brdf(NdotL, NdotV, NdotH, roughness); - - // Add the radiance contribution of this sample. - // uniform_pdf = 1 / (2 * PI) - // radiance = reflectance * NdotL / uniform_pdf; - radiance += reflectance * NdotL * 2.0 * M_PI; - } - - // Return the final directional albedo. - return radiance / float(SAMPLE_COUNT); -} - -float mx_imageworks_sheen_dir_albedo(float NdotV, float roughness) -{ -#if DIRECTIONAL_ALBEDO_METHOD == 0 - float dirAlbedo = mx_imageworks_sheen_dir_albedo_analytic(NdotV, roughness); -#elif DIRECTIONAL_ALBEDO_METHOD == 1 - float dirAlbedo = mx_imageworks_sheen_dir_albedo_table_lookup(NdotV, roughness); -#else - float dirAlbedo = mx_imageworks_sheen_dir_albedo_monte_carlo(NdotV, roughness); -#endif - return clamp(dirAlbedo, 0.0, 1.0); -} - -// The following functions are adapted from https://github.com/tizian/ltc-sheen. -// "Practical Multiple-Scattering Sheen Using Linearly Transformed Cosines", Zeltner et al. - -// Gaussian fit to directional albedo table. -float mx_zeltner_sheen_dir_albedo(float x, float y) -{ - float s = y*(0.0206607 + 1.58491*y)/(0.0379424 + y*(1.32227 + y)); - float m = y*(-0.193854 + y*(-1.14885 + y*(1.7932 - 0.95943*y*y)))/(0.046391 + y); - float o = y*(0.000654023 + (-0.0207818 + 0.119681*y)*y)/(1.26264 + y*(-1.92021 + y)); - return exp(-0.5*mx_square((x - m)/s))/(s*sqrt(2.0*M_PI)) + o; -} - -// Rational fits to LTC matrix coefficients. -float mx_zeltner_sheen_ltc_aInv(float x, float y) -{ - return (2.58126*x + 0.813703*y)*y/(1.0 + 0.310327*x*x + 2.60994*x*y); -} - -float mx_zeltner_sheen_ltc_bInv(float x, float y) -{ - return sqrt(1.0 - x)*(y - 1.0)*y*y*y/(0.0000254053 + 1.71228*x - 1.71506*x*y + 1.34174*y*y); -} - -// V and N are assumed to be unit vectors. -mat3 mx_orthonormal_basis_ltc(vec3 V, vec3 N, float NdotV) -{ - // Generate a tangent vector in the plane of V and N. - // This required to correctly orient the LTC lobe. - vec3 X = V - N*NdotV; - float lenSqr = dot(X, X); - if (lenSqr > 0.0) - { - X *= mx_inversesqrt(lenSqr); - vec3 Y = cross(N, X); - return mat3(X, Y, N); - } - - // If lenSqr == 0, then V == N, so any orthonormal basis will do. - return mx_orthonormal_basis(N); -} - -// Multiplication by directional albedo is handled by the calling function. -float mx_zeltner_sheen_brdf(vec3 L, vec3 V, vec3 N, float NdotV, float roughness) -{ - mat3 toLTC = transpose(mx_orthonormal_basis_ltc(V, N, NdotV)); - vec3 w = toLTC * L; - - float aInv = mx_zeltner_sheen_ltc_aInv(NdotV, roughness); - float bInv = mx_zeltner_sheen_ltc_bInv(NdotV, roughness); - - // Transform w to original configuration (clamped cosine). - // |aInv 0 bInv| - // wo = M^-1 . w = | 0 aInv 0| . w - // | 0 0 1| - vec3 wo = vec3(aInv*w.x + bInv*w.z, aInv * w.y, w.z); - float lenSqr = dot(wo, wo); - - // D(w) = Do(M^-1.w / ||M^-1.w||) . |M^-1| / ||M^-1.w||^3 - // = Do(M^-1.w) . |M^-1| / ||M^-1.w||^4 - // = Do(wo) . |M^-1| / dot(wo, wo)^2 - // = Do(wo) . aInv^2 / dot(wo, wo)^2 - // = Do(wo) . (aInv / dot(wo, wo))^2 - return max(wo.z, 0.0) * M_PI_INV * mx_square(aInv / lenSqr); -} - -vec3 mx_zeltner_sheen_importance_sample(vec2 Xi, vec3 V, vec3 N, float roughness, out float pdf) -{ - float NdotV = clamp(dot(N, V), 0.0, 1.0); - roughness = clamp(roughness, 0.01, 1.0); // Clamp to range of original impl. - - vec3 wo = mx_cosine_sample_hemisphere(Xi); - - float aInv = mx_zeltner_sheen_ltc_aInv(NdotV, roughness); - float bInv = mx_zeltner_sheen_ltc_bInv(NdotV, roughness); - - // Transform wo from original configuration (clamped cosine). - // |1/aInv 0 -bInv/aInv| - // w = M . wo = | 0 1/aInv 0| . wo - // | 0 0 1| - vec3 w = vec3(wo.x/aInv - wo.z*bInv/aInv, wo.y / aInv, wo.z); - - float lenSqr = dot(w, w); - w *= mx_inversesqrt(lenSqr); - - // D(w) = Do(wo) . ||M.wo||^3 / |M| - // = Do(wo / ||M.wo||) . ||M.wo||^4 / |M| - // = Do(w) . ||M.wo||^4 / |M| (possible because M doesn't change z component) - // = Do(w) . dot(w, w)^2 * aInv^2 - // = Do(w) . (aInv * dot(w, w))^2 - pdf = max(w.z, 0.0) * M_PI_INV * mx_square(aInv * lenSqr); - - mat3 fromLTC = mx_orthonormal_basis_ltc(V, N, NdotV); - w = fromLTC * w; - - return w; -} -#include "mx_microfacet.glsl" - -const int FRESNEL_MODEL_DIELECTRIC = 0; -const int FRESNEL_MODEL_CONDUCTOR = 1; -const int FRESNEL_MODEL_SCHLICK = 2; - -// Parameters for Fresnel calculations -struct FresnelData -{ - // Fresnel model - int model; - bool airy; - - // Physical Fresnel - vec3 ior; - vec3 extinction; - - // Generalized Schlick Fresnel - vec3 F0; - vec3 F82; - vec3 F90; - float exponent; - - // Thin film - float tf_thickness; - float tf_ior; - - // Refraction - bool refraction; -}; - -// https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf -// Appendix B.2 Equation 13 -float mx_ggx_NDF(vec3 H, vec2 alpha) -{ - vec2 He = H.xy / alpha; - float denom = dot(He, He) + mx_square(H.z); - return 1.0 / (M_PI * alpha.x * alpha.y * mx_square(denom)); -} - -// https://ggx-research.github.io/publication/2023/06/09/publication-ggx.html -vec3 mx_ggx_importance_sample_VNDF(vec2 Xi, vec3 V, vec2 alpha) -{ - // Transform the view direction to the hemisphere configuration. - V = normalize(vec3(V.xy * alpha, V.z)); - - // Sample a spherical cap in (-V.z, 1]. - float phi = 2.0 * M_PI * Xi.x; - float z = (1.0 - Xi.y) * (1.0 + V.z) - V.z; - float sinTheta = sqrt(clamp(1.0 - z * z, 0.0, 1.0)); - float x = sinTheta * mx_cos(phi); - float y = sinTheta * mx_sin(phi); - vec3 c = vec3(x, y, z); - - // Compute the microfacet normal. - vec3 H = c + V; - - // Transform the microfacet normal back to the ellipsoid configuration. - H = normalize(vec3(H.xy * alpha, max(H.z, 0.0))); - - return H; -} - -// https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf -// Equation 34 -float mx_ggx_smith_G1(float cosTheta, float alpha) -{ - float cosTheta2 = mx_square(cosTheta); - float tanTheta2 = (1.0 - cosTheta2) / cosTheta2; - return 2.0 / (1.0 + sqrt(1.0 + mx_square(alpha) * tanTheta2)); -} - -// Height-correlated Smith masking-shadowing -// http://jcgt.org/published/0003/02/03/paper.pdf -// Equations 72 and 99 -float mx_ggx_smith_G2(float NdotL, float NdotV, float alpha) -{ - float alpha2 = mx_square(alpha); - float lambdaL = sqrt(alpha2 + (1.0 - alpha2) * mx_square(NdotL)); - float lambdaV = sqrt(alpha2 + (1.0 - alpha2) * mx_square(NdotV)); - return 2.0 * NdotL * NdotV / (lambdaL * NdotV + lambdaV * NdotL); -} - -// Rational quadratic fit to Monte Carlo data for GGX directional albedo. -vec3 mx_ggx_dir_albedo_analytic(float NdotV, float alpha, vec3 F0, vec3 F90) -{ - float x = NdotV; - float y = alpha; - float x2 = mx_square(x); - float y2 = mx_square(y); - vec4 r = vec4(0.1003, 0.9345, 1.0, 1.0) + - vec4(-0.6303, -2.323, -1.765, 0.2281) * x + - vec4(9.748, 2.229, 8.263, 15.94) * y + - vec4(-2.038, -3.748, 11.53, -55.83) * x * y + - vec4(29.34, 1.424, 28.96, 13.08) * x2 + - vec4(-8.245, -0.7684, -7.507, 41.26) * y2 + - vec4(-26.44, 1.436, -36.11, 54.9) * x2 * y + - vec4(19.99, 0.2913, 15.86, 300.2) * x * y2 + - vec4(-5.448, 0.6286, 33.37, -285.1) * x2 * y2; - vec2 AB = clamp(r.xy / r.zw, 0.0, 1.0); - return F0 * AB.x + F90 * AB.y; -} - -vec3 mx_ggx_dir_albedo_table_lookup(float NdotV, float alpha, vec3 F0, vec3 F90) -{ -#if DIRECTIONAL_ALBEDO_METHOD == 1 - if (textureSize($albedoTable, 0).x > 1) - { - vec2 AB = texture($albedoTable, vec2(NdotV, alpha)).rg; - return F0 * AB.x + F90 * AB.y; - } -#endif - return vec3(0.0); -} - -// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf -vec3 mx_ggx_dir_albedo_monte_carlo(float NdotV, float alpha, vec3 F0, vec3 F90) -{ - NdotV = clamp(NdotV, M_FLOAT_EPS, 1.0); - vec3 V = vec3(sqrt(1.0 - mx_square(NdotV)), 0, NdotV); - - vec2 AB = vec2(0.0); - const int SAMPLE_COUNT = 64; - for (int i = 0; i < SAMPLE_COUNT; i++) - { - vec2 Xi = mx_spherical_fibonacci(i, SAMPLE_COUNT); - - // Compute the half vector and incoming light direction. - vec3 H = mx_ggx_importance_sample_VNDF(Xi, V, vec2(alpha)); - vec3 L = -reflect(V, H); - - // Compute dot products for this sample. - float NdotL = clamp(L.z, M_FLOAT_EPS, 1.0); - float VdotH = clamp(dot(V, H), M_FLOAT_EPS, 1.0); - - // Compute the Fresnel term. - float Fc = mx_fresnel_schlick(VdotH, 0.0, 1.0); - - // Compute the per-sample geometric term. - // https://hal.inria.fr/hal-00996995v2/document, Algorithm 2 - float G2 = mx_ggx_smith_G2(NdotL, NdotV, alpha); - - // Add the contribution of this sample. - AB += vec2(G2 * (1.0 - Fc), G2 * Fc); - } - - // Apply the global component of the geometric term and normalize. - AB /= mx_ggx_smith_G1(NdotV, alpha) * float(SAMPLE_COUNT); - - // Return the final directional albedo. - return F0 * AB.x + F90 * AB.y; -} - -vec3 mx_ggx_dir_albedo(float NdotV, float alpha, vec3 F0, vec3 F90) -{ -#if DIRECTIONAL_ALBEDO_METHOD == 0 - return mx_ggx_dir_albedo_analytic(NdotV, alpha, F0, F90); -#elif DIRECTIONAL_ALBEDO_METHOD == 1 - return mx_ggx_dir_albedo_table_lookup(NdotV, alpha, F0, F90); -#else - return mx_ggx_dir_albedo_monte_carlo(NdotV, alpha, F0, F90); -#endif -} - -float mx_ggx_dir_albedo(float NdotV, float alpha, float F0, float F90) -{ - return mx_ggx_dir_albedo(NdotV, alpha, vec3(F0), vec3(F90)).x; -} - -// https://blog.selfshadow.com/publications/turquin/ms_comp_final.pdf -// Equations 14 and 16 -vec3 mx_ggx_energy_compensation(float NdotV, float alpha, vec3 Fss) -{ - float Ess = mx_ggx_dir_albedo(NdotV, alpha, 1.0, 1.0); - return 1.0 + Fss * (1.0 - Ess) / Ess; -} - -float mx_ggx_energy_compensation(float NdotV, float alpha, float Fss) -{ - return mx_ggx_energy_compensation(NdotV, alpha, vec3(Fss)).x; -} - -// Compute the average of an anisotropic alpha pair. -float mx_average_alpha(vec2 alpha) -{ - return sqrt(alpha.x * alpha.y); -} - -// Convert a real-valued index of refraction to normal-incidence reflectivity. -float mx_ior_to_f0(float ior) -{ - return mx_square((ior - 1.0) / (ior + 1.0)); -} - -// Convert normal-incidence reflectivity to real-valued index of refraction. -float mx_f0_to_ior(float F0) -{ - float sqrtF0 = sqrt(clamp(F0, 0.01, 0.99)); - return (1.0 + sqrtF0) / (1.0 - sqrtF0); -} -vec3 mx_f0_to_ior(vec3 F0) -{ - vec3 sqrtF0 = sqrt(clamp(F0, 0.01, 0.99)); - return (vec3(1.0) + sqrtF0) / (vec3(1.0) - sqrtF0); -} - -// https://renderwonk.com/publications/wp-generalization-adobe/gen-adobe.pdf -vec3 mx_fresnel_hoffman_schlick(float cosTheta, FresnelData fd) -{ - const float COS_THETA_MAX = 1.0 / 7.0; - const float COS_THETA_FACTOR = 1.0 / (COS_THETA_MAX * pow(1.0 - COS_THETA_MAX, 6.0)); - - float x = clamp(cosTheta, 0.0, 1.0); - vec3 a = mix(fd.F0, fd.F90, pow(1.0 - COS_THETA_MAX, fd.exponent)) * (vec3(1.0) - fd.F82) * COS_THETA_FACTOR; - return mix(fd.F0, fd.F90, pow(1.0 - x, fd.exponent)) - a * x * mx_pow6(1.0 - x); -} - -// https://seblagarde.wordpress.com/2013/04/29/memo-on-fresnel-equations/ -float mx_fresnel_dielectric(float cosTheta, float ior) -{ - float c = cosTheta; - float g2 = ior*ior + c*c - 1.0; - if (g2 < 0.0) - { - // Total internal reflection - return 1.0; - } - - float g = sqrt(g2); - return 0.5 * mx_square((g - c) / (g + c)) * - (1.0 + mx_square(((g + c) * c - 1.0) / ((g - c) * c + 1.0))); -} - -// https://seblagarde.wordpress.com/2013/04/29/memo-on-fresnel-equations/ -vec2 mx_fresnel_dielectric_polarized(float cosTheta, float ior) -{ - float cosTheta2 = mx_square(clamp(cosTheta, 0.0, 1.0)); - float sinTheta2 = 1.0 - cosTheta2; - - float t0 = max(ior * ior - sinTheta2, 0.0); - float t1 = t0 + cosTheta2; - float t2 = 2.0 * sqrt(t0) * cosTheta; - float Rs = (t1 - t2) / (t1 + t2); - - float t3 = cosTheta2 * t0 + sinTheta2 * sinTheta2; - float t4 = t2 * sinTheta2; - float Rp = Rs * (t3 - t4) / (t3 + t4); - - return vec2(Rp, Rs); -} - -// https://seblagarde.wordpress.com/2013/04/29/memo-on-fresnel-equations/ -void mx_fresnel_conductor_polarized(float cosTheta, vec3 n, vec3 k, out vec3 Rp, out vec3 Rs) -{ - float cosTheta2 = mx_square(clamp(cosTheta, 0.0, 1.0)); - float sinTheta2 = 1.0 - cosTheta2; - vec3 n2 = n * n; - vec3 k2 = k * k; - - vec3 t0 = n2 - k2 - vec3(sinTheta2); - vec3 a2plusb2 = sqrt(t0 * t0 + 4.0 * n2 * k2); - vec3 t1 = a2plusb2 + vec3(cosTheta2); - vec3 a = sqrt(max(0.5 * (a2plusb2 + t0), 0.0)); - vec3 t2 = 2.0 * a * cosTheta; - Rs = (t1 - t2) / (t1 + t2); - - vec3 t3 = cosTheta2 * a2plusb2 + vec3(sinTheta2 * sinTheta2); - vec3 t4 = t2 * sinTheta2; - Rp = Rs * (t3 - t4) / (t3 + t4); -} - -vec3 mx_fresnel_conductor(float cosTheta, vec3 n, vec3 k) -{ - vec3 Rp, Rs; - mx_fresnel_conductor_polarized(cosTheta, n, k, Rp, Rs); - return 0.5 * (Rp + Rs); -} - -// https://belcour.github.io/blog/research/publication/2017/05/01/brdf-thin-film.html -void mx_fresnel_conductor_phase_polarized(float cosTheta, float eta1, vec3 eta2, vec3 kappa2, out vec3 phiP, out vec3 phiS) -{ - vec3 k2 = kappa2 / eta2; - vec3 sinThetaSqr = vec3(1.0) - cosTheta * cosTheta; - vec3 A = eta2*eta2*(vec3(1.0)-k2*k2) - eta1*eta1*sinThetaSqr; - vec3 B = sqrt(A*A + mx_square(2.0*eta2*eta2*k2)); - vec3 U = sqrt((A+B)/2.0); - vec3 V = max(vec3(0.0), sqrt((B-A)/2.0)); - - phiS = mx_atan(2.0*eta1*V*cosTheta, U*U + V*V - mx_square(eta1*cosTheta)); - phiP = mx_atan(2.0*eta1*eta2*eta2*cosTheta * (2.0*k2*U - (vec3(1.0)-k2*k2) * V), - mx_square(eta2*eta2*(vec3(1.0)+k2*k2)*cosTheta) - eta1*eta1*(U*U+V*V)); -} - -// https://belcour.github.io/blog/research/publication/2017/05/01/brdf-thin-film.html -vec3 mx_eval_sensitivity(float opd, vec3 shift) -{ - // Use Gaussian fits, given by 3 parameters: val, pos and var - float phase = 2.0*M_PI * opd; - vec3 val = vec3(5.4856e-13, 4.4201e-13, 5.2481e-13); - vec3 pos = vec3(1.6810e+06, 1.7953e+06, 2.2084e+06); - vec3 var = vec3(4.3278e+09, 9.3046e+09, 6.6121e+09); - vec3 xyz = val * sqrt(2.0*M_PI * var) * mx_cos(pos * phase + shift) * exp(- var * phase*phase); - xyz.x += 9.7470e-14 * sqrt(2.0*M_PI * 4.5282e+09) * mx_cos(2.2399e+06 * phase + shift[0]) * exp(- 4.5282e+09 * phase*phase); - return xyz / 1.0685e-7; -} - -// A Practical Extension to Microfacet Theory for the Modeling of Varying Iridescence -// https://belcour.github.io/blog/research/publication/2017/05/01/brdf-thin-film.html -vec3 mx_fresnel_airy(float cosTheta, FresnelData fd) -{ - // XYZ to CIE 1931 RGB color space (using neutral E illuminant) - const mat3 XYZ_TO_RGB = mat3(2.3706743, -0.5138850, 0.0052982, -0.9000405, 1.4253036, -0.0146949, -0.4706338, 0.0885814, 1.0093968); - - // Assume vacuum on the outside - float eta1 = 1.0; - float eta2 = max(fd.tf_ior, eta1); - vec3 eta3 = (fd.model == FRESNEL_MODEL_SCHLICK) ? mx_f0_to_ior(fd.F0) : fd.ior; - vec3 kappa3 = (fd.model == FRESNEL_MODEL_SCHLICK) ? vec3(0.0) : fd.extinction; - float cosThetaT = sqrt(1.0 - (1.0 - mx_square(cosTheta)) * mx_square(eta1 / eta2)); - - // First interface - vec2 R12 = mx_fresnel_dielectric_polarized(cosTheta, eta2 / eta1); - if (cosThetaT <= 0.0) - { - // Total internal reflection - R12 = vec2(1.0); - } - vec2 T121 = vec2(1.0) - R12; - - // Second interface - vec3 R23p, R23s; - if (fd.model == FRESNEL_MODEL_SCHLICK) - { - vec3 f = mx_fresnel_hoffman_schlick(cosThetaT, fd); - R23p = 0.5 * f; - R23s = 0.5 * f; - } - else - { - mx_fresnel_conductor_polarized(cosThetaT, eta3 / eta2, kappa3 / eta2, R23p, R23s); - } - - // Phase shift - float cosB = mx_cos(mx_atan(eta2 / eta1)); - vec2 phi21 = vec2(cosTheta < cosB ? 0.0 : M_PI, M_PI); - vec3 phi23p, phi23s; - if (fd.model == FRESNEL_MODEL_SCHLICK) - { - phi23p = vec3((eta3[0] < eta2) ? M_PI : 0.0, - (eta3[1] < eta2) ? M_PI : 0.0, - (eta3[2] < eta2) ? M_PI : 0.0); - phi23s = phi23p; - } - else - { - mx_fresnel_conductor_phase_polarized(cosThetaT, eta2, eta3, kappa3, phi23p, phi23s); - } - vec3 r123p = max(sqrt(R12.x*R23p), 0.0); - vec3 r123s = max(sqrt(R12.y*R23s), 0.0); - - // Iridescence term - vec3 I = vec3(0.0); - vec3 Cm, Sm; - - // Optical path difference - float distMeters = fd.tf_thickness * 1.0e-9; - float opd = 2.0 * eta2 * cosThetaT * distMeters; - - // Iridescence term using spectral antialiasing for Parallel polarization - - // Reflectance term for m=0 (DC term amplitude) - vec3 Rs = (mx_square(T121.x) * R23p) / (vec3(1.0) - R12.x*R23p); - I += R12.x + Rs; - - // Reflectance term for m>0 (pairs of diracs) - Cm = Rs - T121.x; - for (int m=1; m<=2; m++) - { - Cm *= r123p; - Sm = 2.0 * mx_eval_sensitivity(float(m) * opd, float(m)*(phi23p+vec3(phi21.x))); - I += Cm*Sm; - } - - // Iridescence term using spectral antialiasing for Perpendicular polarization - - // Reflectance term for m=0 (DC term amplitude) - vec3 Rp = (mx_square(T121.y) * R23s) / (vec3(1.0) - R12.y*R23s); - I += R12.y + Rp; - - // Reflectance term for m>0 (pairs of diracs) - Cm = Rp - T121.y; - for (int m=1; m<=2; m++) - { - Cm *= r123s; - Sm = 2.0 * mx_eval_sensitivity(float(m) * opd, float(m)*(phi23s+vec3(phi21.y))); - I += Cm*Sm; - } - - // Average parallel and perpendicular polarization - I *= 0.5; - - // Convert back to RGB reflectance - I = clamp(XYZ_TO_RGB * I, 0.0, 1.0); - - return I; -} - -FresnelData mx_init_fresnel_dielectric(float ior, float tf_thickness, float tf_ior) -{ - FresnelData fd; - fd.model = FRESNEL_MODEL_DIELECTRIC; - fd.airy = tf_thickness > 0.0; - fd.ior = vec3(ior); - fd.extinction = vec3(0.0); - fd.F0 = vec3(0.0); - fd.F82 = vec3(0.0); - fd.F90 = vec3(0.0); - fd.exponent = 0.0; - fd.tf_thickness = tf_thickness; - fd.tf_ior = tf_ior; - fd.refraction = false; - return fd; -} - -FresnelData mx_init_fresnel_conductor(vec3 ior, vec3 extinction, float tf_thickness, float tf_ior) -{ - FresnelData fd; - fd.model = FRESNEL_MODEL_CONDUCTOR; - fd.airy = tf_thickness > 0.0; - fd.ior = ior; - fd.extinction = extinction; - fd.F0 = vec3(0.0); - fd.F82 = vec3(0.0); - fd.F90 = vec3(0.0); - fd.exponent = 0.0; - fd.tf_thickness = tf_thickness; - fd.tf_ior = tf_ior; - fd.refraction = false; - return fd; -} - -FresnelData mx_init_fresnel_schlick(vec3 F0, vec3 F82, vec3 F90, float exponent, float tf_thickness, float tf_ior) -{ - FresnelData fd; - fd.model = FRESNEL_MODEL_SCHLICK; - fd.airy = tf_thickness > 0.0; - fd.ior = vec3(0.0); - fd.extinction = vec3(0.0); - fd.F0 = F0; - fd.F82 = F82; - fd.F90 = F90; - fd.exponent = exponent; - fd.tf_thickness = tf_thickness; - fd.tf_ior = tf_ior; - fd.refraction = false; - return fd; -} - -vec3 mx_compute_fresnel(float cosTheta, FresnelData fd) -{ - if (fd.airy) - { - return mx_fresnel_airy(cosTheta, fd); - } - else if (fd.model == FRESNEL_MODEL_DIELECTRIC) - { - return vec3(mx_fresnel_dielectric(cosTheta, fd.ior.x)); - } - else if (fd.model == FRESNEL_MODEL_CONDUCTOR) - { - return mx_fresnel_conductor(cosTheta, fd.ior, fd.extinction); - } - else - { - return mx_fresnel_hoffman_schlick(cosTheta, fd); - } -} - -// Compute the refraction of a ray through a solid sphere. -vec3 mx_refraction_solid_sphere(vec3 R, vec3 N, float ior) -{ - R = refract(R, N, 1.0 / ior); - vec3 N1 = normalize(R * dot(R, N) - N * 0.5); - return refract(R, N1, ior); -} - -vec2 mx_latlong_projection(vec3 dir) -{ - float latitude = -mx_asin(dir.y) * M_PI_INV + 0.5; - float longitude = mx_atan(dir.x, -dir.z) * M_PI_INV * 0.5 + 0.5; - return vec2(longitude, latitude); -} - -vec3 mx_latlong_map_lookup(vec3 dir, mat4 transform, float lod, $texSamplerSignature) -{ - vec3 envDir = normalize((transform * vec4(dir,0.0)).xyz); - vec2 uv = mx_latlong_projection(envDir); - return textureLod($texSamplerSampler2D, uv, lod).rgb; -} - -// Return the mip level with the appropriate coverage for a filtered importance sample. -// https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch20.html -// Section 20.4 Equation 13 -float mx_latlong_compute_lod(vec3 dir, float pdf, float maxMipLevel, int envSamples) -{ - const float MIP_LEVEL_OFFSET = 1.5; - float effectiveMaxMipLevel = maxMipLevel - MIP_LEVEL_OFFSET; - float distortion = sqrt(1.0 - mx_square(dir.y)); - return max(effectiveMaxMipLevel - 0.5 * log2(float(envSamples) * pdf * distortion), 0.0); -} -// https://developer.nvidia.com/gpugems/gpugems3/part-ii-light-and-shadows/chapter-8-summed-area-variance-shadow-maps -float mx_variance_shadow_occlusion(vec2 moments, float fragmentDepth) -{ - const float MIN_VARIANCE = 0.00001; - - // One-tailed inequality valid if fragmentDepth > moments.x. - float p = (fragmentDepth <= moments.x) ? 1.0 : 0.0; - - // Compute variance. - float variance = moments.y - mx_square(moments.x); - variance = max(variance, MIN_VARIANCE); - - // Compute probabilistic upper bound. - float d = fragmentDepth - moments.x; - float pMax = variance / (variance + mx_square(d)); - return max(p, pMax); -} - -vec2 mx_compute_depth_moments() -{ - float depth = gl_FragCoord.z; - return vec2(depth, mx_square(depth)); -} -#include "mx_microfacet_specular.glsl" - -vec3 mx_surface_transmission(vec3 N, vec3 V, vec3 X, vec2 alpha, int distribution, FresnelData fd, vec3 tint) -{ - return tint; -} -#include "mx_microfacet_specular.glsl" - -vec3 mx_surface_transmission(vec3 N, vec3 V, vec3 X, vec2 alpha, int distribution, FresnelData fd, vec3 tint) -{ - // Approximate the appearance of surface transmission as glossy - // environment map refraction, ignoring any scene geometry that might - // be visible through the surface. - fd.refraction = true; - if ($refractionTwoSided) - { - tint = mx_square(tint); - } - return mx_environment_radiance(N, V, X, alpha, distribution, fd) * tint; -} -#include "lib/mx_closure_type.glsl" - -void mx_add_bsdf(ClosureData closureData, BSDF in1, BSDF in2, out BSDF result) -{ - result.response = in1.response + in2.response; - - // We derive the throughput for closure addition as follows: - // throughput_1 = 1 - dir_albedo_1 - // throughput_2 = 1 - dir_albedo_2 - // throughput_sum = 1 - (dir_albedo_1 + dir_albedo_2) - // = 1 - ((1 - throughput_1) + (1 - throughput_2)) - // = throughput_1 + throughput_2 - 1 - result.throughput = max(in1.throughput + in2.throughput - 1.0, 0.0); -} -#include "lib/mx_closure_type.glsl" - -void mx_add_edf(ClosureData closureData, EDF in1, EDF in2, out EDF result) -{ - result = in1 + in2; -} -#include "lib/mx_closure_type.glsl" - -void mx_anisotropic_vdf(ClosureData closureData, vec3 absorption, vec3 scattering, float anisotropy, inout BSDF bsdf) -{ - // TODO: Add some approximation for volumetric light absorption. -} -void mx_artistic_ior(vec3 reflectivity, vec3 edge_color, out vec3 ior, out vec3 extinction) -{ - // "Artist Friendly Metallic Fresnel", Ole Gulbrandsen, 2014 - // http://jcgt.org/published/0003/04/03/paper.pdf - - vec3 r = clamp(reflectivity, 0.0, 0.99); - vec3 r_sqrt = sqrt(r); - vec3 n_min = (1.0 - r) / (1.0 + r); - vec3 n_max = (1.0 + r_sqrt) / (1.0 - r_sqrt); - ior = mix(n_max, n_min, edge_color); - - vec3 np1 = ior + 1.0; - vec3 nm1 = ior - 1.0; - vec3 k2 = (np1*np1 * r - nm1*nm1) / (1.0 - r); - k2 = max(k2, 0.0); - extinction = sqrt(k2); -} -/// XYZ to Rec.709 RGB colorspace conversion -const mat3 XYZ_to_RGB = mat3( 3.2406, -0.9689, 0.0557, - -1.5372, 1.8758, -0.2040, - -0.4986, 0.0415, 1.0570); - -void mx_blackbody(float temperatureKelvin, out vec3 colorValue) -{ - float xc, yc; - float t, t2, t3, xc2, xc3; - - // if value outside valid range of approximation clamp to accepted temperature range - temperatureKelvin = clamp(temperatureKelvin, 1667.0, 25000.0); - - t = 1000.0 / temperatureKelvin; - t2 = t * t; - t3 = t * t * t; - - // Cubic spline approximation for Kelvin temperature to sRGB conversion - // (https://en.wikipedia.org/wiki/Planckian_locus#Approximation) - if (temperatureKelvin < 4000.0) { // 1667K <= temperatureKelvin < 4000K - xc = -0.2661239 * t3 - 0.2343580 * t2 + 0.8776956 * t + 0.179910; - } - else { // 4000K <= temperatureKelvin <= 25000K - xc = -3.0258469 * t3 + 2.1070379 * t2 + 0.2226347 * t + 0.240390; - } - xc2 = xc * xc; - xc3 = xc * xc * xc; - - if (temperatureKelvin < 2222.0) { // 1667K <= temperatureKelvin < 2222K - yc = -1.1063814 * xc3 - 1.34811020 * xc2 + 2.18555832 * xc - 0.20219683; - } - else if (temperatureKelvin < 4000.0) { // 2222K <= temperatureKelvin < 4000K - yc = -0.9549476 * xc3 - 1.37418593 * xc2 + 2.09137015 * xc - 0.16748867; - } - else { // 4000K <= temperatureKelvin <= 25000K - yc = 3.0817580 * xc3 - 5.87338670 * xc2 + 3.75112997 * xc - 0.37001483; - } - - if (yc <= 0.0) { // avoid division by zero - colorValue = vec3(1.0); - return; - } - - vec3 XYZ = vec3(xc / yc, 1.0, (1.0 - xc - yc) / yc); - - colorValue = XYZ_to_RGB * XYZ; - colorValue = max(colorValue, vec3(0.0)); -} -#include "lib/mx_closure_type.glsl" -#include "lib/mx_microfacet_diffuse.glsl" - -void mx_burley_diffuse_bsdf(ClosureData closureData, float weight, vec3 color, float roughness, vec3 N, inout BSDF bsdf) -{ - bsdf.throughput = vec3(0.0); - - if (weight < M_FLOAT_EPS) - { - return; - } - - vec3 V = closureData.V; - vec3 L = closureData.L; - - N = mx_forward_facing_normal(N, V); - float NdotV = clamp(dot(N, V), M_FLOAT_EPS, 1.0); - - if (closureData.closureType == CLOSURE_TYPE_REFLECTION) - { - float NdotL = clamp(dot(N, L), M_FLOAT_EPS, 1.0); - float LdotH = clamp(dot(L, normalize(L + V)), M_FLOAT_EPS, 1.0); - - bsdf.response = color * closureData.occlusion * weight * NdotL * M_PI_INV; - bsdf.response *= mx_burley_diffuse(NdotV, NdotL, LdotH, roughness); - } - else if (closureData.closureType == CLOSURE_TYPE_INDIRECT) - { - vec3 Li = mx_environment_irradiance(N) * - mx_burley_diffuse_dir_albedo(NdotV, roughness); - bsdf.response = Li * color * weight; - } -} -#include "lib/mx_closure_type.glsl" -#include "lib/mx_microfacet_specular.glsl" - -// https://eugenedeon.com/pdfs/egsrhair.pdf -void mx_deon_hair_absorption_from_melanin( - float melanin_concentration, - float melanin_redness, - // constants converted to color via exp(-c). the defaults are lin_rec709 colors, they may be - // transformed to scene-linear rendering color space. - vec3 eumelanin_color, // default: (0.657704, 0.498077, 0.254106) == exp(-(0.419, 0.697, 1.37)) - vec3 pheomelanin_color, // default: (0.829443, 0.670320, 0.349937) == exp(-(0.187, 0.4, 1.05)) - out vec3 absorption) -{ - float melanin = -log(max(1.0 - melanin_concentration, 0.0001)); - float eumelanin = melanin * (1.0 - melanin_redness); - float pheomelanin = melanin * melanin_redness; - absorption = max( - eumelanin * -log(eumelanin_color) + pheomelanin * -log(pheomelanin_color), - vec3(0.0) - ); -} - -// https://media.disneyanimation.com/uploads/production/publication_asset/152/asset/eurographics2016Fur_Smaller.pdf -void mx_chiang_hair_absorption_from_color(vec3 color, float betaN, out vec3 absorption) -{ - float b2 = betaN* betaN; - float b4 = b2 * b2; - float b_fac = - 5.969 - - (0.215 * betaN) + - (2.532 * b2) - - (10.73 * b2 * betaN) + - (5.574 * b4) + - (0.245 * b4 * betaN); - vec3 sigma = log(min(max(color, 0.001), vec3(1.0))) / b_fac; - absorption = sigma * sigma; -} - -void mx_chiang_hair_roughness( - float longitudinal, - float azimuthal, - float scale_TT, // empirical roughness scale from Marschner et al. (2003). - float scale_TRT, // default: scale_TT = 0.5, scale_TRT = 2.0 - out vec2 roughness_R, - out vec2 roughness_TT, - out vec2 roughness_TRT -) -{ - float lr = clamp(longitudinal, 0.001, 1.0); - float ar = clamp(azimuthal, 0.001, 1.0); - - // longitudinal variance - float v = 0.726 * lr + 0.812 * lr * lr + 3.7 * pow(lr, 20.0); - v = v * v; - - float s = 0.265 * ar + 1.194 * ar * ar + 5.372 * pow(ar, 22.0); - - roughness_R = vec2(v, s); - roughness_TT = vec2(v * scale_TT * scale_TT, s); - roughness_TRT = vec2(v * scale_TRT * scale_TRT, s); -} - -float mx_hair_transform_sin_cos(float x) -{ - return sqrt(max(1.0 - x * x, 0.0)); -} - -float mx_hair_I0(float x) -{ - float v = 1.0; - float n = 1.0; - float d = 1.0; - float f = 1.0; - float x2 = x * x; - for (int i = 0; i < 9 ; ++i) - { - d *= 4.0 * (f * f); - n *= x2; - v += n / d; - f += 1.0; - } - return v; -} - -float mx_hair_log_I0(float x) -{ - if (x > 12.0) - return x + 0.5 * (-log(2.0 * M_PI) + log(1.0 / x) + 1.0 / (8.0 * x)); - else - return log(mx_hair_I0(x)); -} - -float mx_hair_logistic(float x, float s) -{ - if (x > 0.0) - x = -x; - float f = exp(x / s); - return f / (s * (1.0 + f) * (1.0 + f)); -} - -float mx_hair_logistic_cdf(float x, float s) -{ - return 1.0 / (1.0 + exp(-x / s)); -} - -float mx_hair_trimmed_logistic(float x, float s, float a, float b) -{ - // the constant can be found in Chiang et al. (2016) Appendix A, eq. (12) - s *= 0.626657; // sqrt(M_PI/8) - return mx_hair_logistic(x, s) / (mx_hair_logistic_cdf(b, s) - mx_hair_logistic_cdf(a, s)); -} - -float mx_hair_phi(int p, float gammaO, float gammaT) -{ - float fP = float(p); - return 2.0 * fP * gammaT - 2.0 * gammaO + fP * M_PI; -} - -float mx_hair_longitudinal_scattering( // Mp - float sinThetaI, - float cosThetaI, - float sinThetaO, - float cosThetaO, - float v -) -{ - float inv_v = 1.0 / v; - float a = cosThetaO * cosThetaI * inv_v; - float b = sinThetaO * sinThetaI * inv_v; - if (v < 0.1) - return exp(mx_hair_log_I0(a) - b - inv_v + 0.6931 + log(0.5 * inv_v)); - else - return ((exp(-b) * mx_hair_I0(a)) / (2.0 * v * sinh(inv_v))); -} - -float mx_hair_azimuthal_scattering( // Np - float phi, - int p, - float s, - float gammaO, - float gammaT -) -{ - if (p >= 3) - return float(0.5 / M_PI); - - float dphi = phi - mx_hair_phi(p, gammaO, gammaT); - if (isinf(dphi)) - return float(0.5 / M_PI); - - while (dphi > M_PI) dphi -= (2.0 * M_PI); - while (dphi < (-M_PI)) dphi += (2.0 * M_PI); - - return mx_hair_trimmed_logistic(dphi, s, -M_PI, M_PI); -} - -void mx_hair_alpha_angles( - float alpha, - float sinThetaI, - float cosThetaI, - out vec2 angles[4] -) -{ - // 0:R, 1:TT, 2:TRT, 3:TRRT+ - for (int i = 0; i <= 3; ++i) - { - if (alpha == 0.0 || i == 3) - angles[i] = vec2(sinThetaI, cosThetaI); - else - { - float m = 2.0 - float(i) * 3.0; - float sa = sin(m * alpha); - float ca = cos(m * alpha); - angles[i].x = sinThetaI * ca + cosThetaI * sa; - angles[i].y = cosThetaI * ca - sinThetaI * sa; - } - } -} - -void mx_hair_attenuation(float f, vec3 T, out vec3 Ap[4]) // Ap -{ - // 0:R, 1:TT, 2:TRT, 3:TRRT+ - Ap[0] = vec3(f); - Ap[1] = (1.0 - f) * (1.0 - f) * T; - Ap[2] = Ap[1] * T * f; - Ap[3] = Ap[2] * T * f / (vec3(1.0) - T * f); -} - -void mx_chiang_hair_bsdf(ClosureData closureData, vec3 tint_R, vec3 tint_TT, vec3 tint_TRT, float ior, - vec2 roughness_R, vec2 roughness_TT, vec2 roughness_TRT, float cuticle_angle, - vec3 absorption_coefficient, vec3 N, vec3 X, inout BSDF bsdf) -{ - vec3 V = closureData.V; - vec3 L = closureData.L; - - N = mx_forward_facing_normal(N, V); - - bsdf.throughput = vec3(0.0); - - if (closureData.closureType == CLOSURE_TYPE_REFLECTION) - { - X = normalize(X - dot(X, N) * N); - vec3 Y = cross(N, X); - - float sinThetaO = dot(V, X); - float sinThetaI = dot(L, X); - float cosThetaO = mx_hair_transform_sin_cos(sinThetaO); - float cosThetaI = mx_hair_transform_sin_cos(sinThetaI); - - float y1 = dot(L, N); - float x1 = dot(L, Y); - float y2 = dot(V, N); - float x2 = dot(V, Y); - float phi = mx_atan(y1 * x2 - y2 * x1, x1 * x2 + y1 * y2); - - vec3 k1_p = normalize(V - X * dot(V, X)); - float cosGammaO = dot(N, k1_p); - float sinGammaO = mx_hair_transform_sin_cos(cosGammaO); - if (dot(k1_p, Y) > 0.0) - sinGammaO = -sinGammaO; - float gammaO = asin(sinGammaO); - - float sinThetaT = sinThetaO / ior; - float cosThetaT = mx_hair_transform_sin_cos(sinThetaT); - float etaP = sqrt(max(ior * ior - sinThetaO * sinThetaO, 0.0)) / max(cosThetaO, M_FLOAT_EPS); - float sinGammaT = max(min(sinGammaO / etaP, 1.0), -1.0); - float cosGammaT = sqrt(1.0 - sinGammaT * sinGammaT); - float gammaT = asin(sinGammaT); - - // attenuation - vec3 Ap[4]; - float fresnel = mx_fresnel_dielectric(cosThetaO * cosGammaO, ior); - vec3 T = exp(-absorption_coefficient * (2.0 * cosGammaT / cosThetaT)); - mx_hair_attenuation(fresnel, T, Ap); - - // parameters for each lobe - vec2 angles[4]; - float alpha = cuticle_angle * M_PI - (M_PI / 2.0); // remap [0, 1] to [-PI/2, PI/2] - mx_hair_alpha_angles(alpha, sinThetaI, cosThetaI, angles); - - vec3 tint[4]; - tint[0] = tint_R; - tint[1] = tint_TT; - tint[2] = tint_TRT; - tint[3] = tint_TRT; - - roughness_R = clamp(roughness_R, 0.001, 1.0); - roughness_TT = clamp(roughness_TT, 0.001, 1.0); - roughness_TRT = clamp(roughness_TRT, 0.001, 1.0); - - vec2 vs[4]; - vs[0] = roughness_R; - vs[1] = roughness_TT; - vs[2] = roughness_TRT; - vs[3] = roughness_TRT; - - // R, TT, TRT, TRRT+ - vec3 F = vec3(0.0); - for (int i = 0; i <= 3; ++i) - { - tint[i] = max(tint[i], vec3(0.0)); - float Mp = mx_hair_longitudinal_scattering(angles[i].x, angles[i].y, sinThetaO, cosThetaO, vs[i].x); - float Np = (i == 3) ? (1.0 / 2.0 * M_PI) : mx_hair_azimuthal_scattering(phi, i, vs[i].y, gammaO, gammaT); - F += Mp * Np * tint[i] * Ap[i]; - } - - bsdf.response = F * closureData.occlusion * M_PI_INV; - } - else if (closureData.closureType == CLOSURE_TYPE_INDIRECT) - { - // This indirect term is a *very* rough approximation. - - float NdotV = clamp(dot(N, V), M_FLOAT_EPS, 1.0); - FresnelData fd = mx_init_fresnel_dielectric(ior, 0.0, 1.0); - vec3 F = mx_compute_fresnel(NdotV, fd); - - vec2 roughness = (roughness_R + roughness_TT + roughness_TRT) / vec2(3.0); // ? - vec2 safeAlpha = clamp(roughness, M_FLOAT_EPS, 1.0); - float avgAlpha = mx_average_alpha(safeAlpha); - - // Use GGX to match the behavior of mx_environment_radiance. - float F0 = mx_ior_to_f0(ior); - vec3 comp = mx_ggx_energy_compensation(NdotV, avgAlpha, F); - vec3 dirAlbedo = mx_ggx_dir_albedo(NdotV, avgAlpha, F0, 1.0) * comp; - - vec3 Li = mx_environment_radiance(N, V, X, safeAlpha, 0, fd); - vec3 tint = (tint_R + tint_TT + tint_TRT) / vec3(3.0); // ? - - bsdf.response = Li * comp * tint; - } -} -#include "lib/mx_closure_type.glsl" -#include "lib/mx_microfacet_specular.glsl" - -void mx_conductor_bsdf(ClosureData closureData, float weight, vec3 ior_n, vec3 ior_k, vec2 roughness, float thinfilm_thickness, float thinfilm_ior, vec3 N, vec3 X, int distribution, inout BSDF bsdf) -{ - bsdf.throughput = vec3(0.0); - - if (weight < M_FLOAT_EPS) - { - return; - } - - vec3 V = closureData.V; - vec3 L = closureData.L; - - N = mx_forward_facing_normal(N, V); - float NdotV = clamp(dot(N, V), M_FLOAT_EPS, 1.0); - - FresnelData fd = mx_init_fresnel_conductor(ior_n, ior_k, thinfilm_thickness, thinfilm_ior); - - vec2 safeAlpha = clamp(roughness, M_FLOAT_EPS, 1.0); - float avgAlpha = mx_average_alpha(safeAlpha); - - if (closureData.closureType == CLOSURE_TYPE_REFLECTION) - { - X = normalize(X - dot(X, N) * N); - vec3 Y = cross(N, X); - vec3 H = normalize(L + V); - - float NdotL = clamp(dot(N, L), M_FLOAT_EPS, 1.0); - float VdotH = clamp(dot(V, H), M_FLOAT_EPS, 1.0); - - vec3 Ht = vec3(dot(H, X), dot(H, Y), dot(H, N)); - - vec3 F = mx_compute_fresnel(VdotH, fd); - float D = mx_ggx_NDF(Ht, safeAlpha); - float G = mx_ggx_smith_G2(NdotL, NdotV, avgAlpha); - - vec3 comp = mx_ggx_energy_compensation(NdotV, avgAlpha, F); - - // Note: NdotL is cancelled out - bsdf.response = D * F * G * comp * closureData.occlusion * weight / (4.0 * NdotV); - } - else if (closureData.closureType == CLOSURE_TYPE_INDIRECT) - { - vec3 F = mx_compute_fresnel(NdotV, fd); - vec3 comp = mx_ggx_energy_compensation(NdotV, avgAlpha, F); - vec3 Li = mx_environment_radiance(N, V, X, safeAlpha, distribution, fd); - bsdf.response = Li * comp * weight; - } -} -#include "lib/mx_closure_type.glsl" -#include "lib/mx_microfacet_specular.glsl" - -void mx_dielectric_bsdf(ClosureData closureData, float weight, vec3 tint, float ior, vec2 roughness, float thinfilm_thickness, float thinfilm_ior, vec3 N, vec3 X, int distribution, int scatter_mode, inout BSDF bsdf) -{ - if (weight < M_FLOAT_EPS) - { - return; - } - if (closureData.closureType != CLOSURE_TYPE_TRANSMISSION && scatter_mode == 1) - { - return; - } - - vec3 V = closureData.V; - vec3 L = closureData.L; - - N = mx_forward_facing_normal(N, V); - float NdotV = clamp(dot(N, V), M_FLOAT_EPS, 1.0); - - FresnelData fd = mx_init_fresnel_dielectric(ior, thinfilm_thickness, thinfilm_ior); - float F0 = mx_ior_to_f0(ior); - - vec2 safeAlpha = clamp(roughness, M_FLOAT_EPS, 1.0); - float avgAlpha = mx_average_alpha(safeAlpha); - vec3 safeTint = max(tint, 0.0); - - if (closureData.closureType == CLOSURE_TYPE_REFLECTION) - { - X = normalize(X - dot(X, N) * N); - vec3 Y = cross(N, X); - vec3 H = normalize(L + V); - - float NdotL = clamp(dot(N, L), M_FLOAT_EPS, 1.0); - float VdotH = clamp(dot(V, H), M_FLOAT_EPS, 1.0); - - vec3 Ht = vec3(dot(H, X), dot(H, Y), dot(H, N)); - - vec3 F = mx_compute_fresnel(VdotH, fd); - float D = mx_ggx_NDF(Ht, safeAlpha); - float G = mx_ggx_smith_G2(NdotL, NdotV, avgAlpha); - - vec3 comp = mx_ggx_energy_compensation(NdotV, avgAlpha, F); - vec3 dirAlbedo = mx_ggx_dir_albedo(NdotV, avgAlpha, F0, 1.0) * comp; - bsdf.throughput = 1.0 - dirAlbedo * weight; - - bsdf.response = D * F * G * comp * safeTint * closureData.occlusion * weight / (4.0 * NdotV); - } - else if (closureData.closureType == CLOSURE_TYPE_TRANSMISSION) - { - vec3 F = mx_compute_fresnel(NdotV, fd); - - vec3 comp = mx_ggx_energy_compensation(NdotV, avgAlpha, F); - vec3 dirAlbedo = mx_ggx_dir_albedo(NdotV, avgAlpha, F0, 1.0) * comp; - bsdf.throughput = 1.0 - dirAlbedo * weight; - - if (scatter_mode != 0) - { - bsdf.response = mx_surface_transmission(N, V, X, safeAlpha, distribution, fd, safeTint) * weight; - } - } - else if (closureData.closureType == CLOSURE_TYPE_INDIRECT) - { - vec3 F = mx_compute_fresnel(NdotV, fd); - - vec3 comp = mx_ggx_energy_compensation(NdotV, avgAlpha, F); - vec3 dirAlbedo = mx_ggx_dir_albedo(NdotV, avgAlpha, F0, 1.0) * comp; - bsdf.throughput = 1.0 - dirAlbedo * weight; - - vec3 Li = mx_environment_radiance(N, V, X, safeAlpha, distribution, fd); - bsdf.response = Li * safeTint * comp * weight; - } -} -void mx_displacement_float(float disp, float scale, out displacementshader result) -{ - result.offset = vec3(disp); - result.scale = scale; -} -void mx_displacement_vector3(vec3 disp, float scale, out displacementshader result) -{ - result.offset = disp; - result.scale = scale; -} -#include "lib/mx_closure_type.glsl" -#include "lib/mx_microfacet_specular.glsl" - -void mx_generalized_schlick_bsdf(ClosureData closureData, float weight, vec3 color0, vec3 color82, vec3 color90, float exponent, vec2 roughness, float thinfilm_thickness, float thinfilm_ior, vec3 N, vec3 X, int distribution, int scatter_mode, inout BSDF bsdf) -{ - if (weight < M_FLOAT_EPS) - { - return; - } - if (closureData.closureType != CLOSURE_TYPE_TRANSMISSION && scatter_mode == 1) - { - return; - } - - vec3 V = closureData.V; - vec3 L = closureData.L; - - N = mx_forward_facing_normal(N, V); - float NdotV = clamp(dot(N, V), M_FLOAT_EPS, 1.0); - - vec3 safeColor0 = max(color0, 0.0); - vec3 safeColor82 = max(color82, 0.0); - vec3 safeColor90 = max(color90, 0.0); - FresnelData fd = mx_init_fresnel_schlick(safeColor0, safeColor82, safeColor90, exponent, thinfilm_thickness, thinfilm_ior); - - vec2 safeAlpha = clamp(roughness, M_FLOAT_EPS, 1.0); - float avgAlpha = mx_average_alpha(safeAlpha); - - if (closureData.closureType == CLOSURE_TYPE_REFLECTION) - { - X = normalize(X - dot(X, N) * N); - vec3 Y = cross(N, X); - vec3 H = normalize(L + V); - - float NdotL = clamp(dot(N, L), M_FLOAT_EPS, 1.0); - float VdotH = clamp(dot(V, H), M_FLOAT_EPS, 1.0); - - vec3 Ht = vec3(dot(H, X), dot(H, Y), dot(H, N)); - - vec3 F = mx_compute_fresnel(VdotH, fd); - float D = mx_ggx_NDF(Ht, safeAlpha); - float G = mx_ggx_smith_G2(NdotL, NdotV, avgAlpha); - - vec3 comp = mx_ggx_energy_compensation(NdotV, avgAlpha, F); - vec3 dirAlbedo = mx_ggx_dir_albedo(NdotV, avgAlpha, safeColor0, safeColor90) * comp; - float avgDirAlbedo = dot(dirAlbedo, vec3(1.0 / 3.0)); - bsdf.throughput = vec3(1.0 - avgDirAlbedo * weight); - - // Note: NdotL is cancelled out - bsdf.response = D * F * G * comp * closureData.occlusion * weight / (4.0 * NdotV); - } - else if (closureData.closureType == CLOSURE_TYPE_TRANSMISSION) - { - vec3 F = mx_compute_fresnel(NdotV, fd); - - vec3 comp = mx_ggx_energy_compensation(NdotV, avgAlpha, F); - vec3 dirAlbedo = mx_ggx_dir_albedo(NdotV, avgAlpha, safeColor0, safeColor90) * comp; - float avgDirAlbedo = dot(dirAlbedo, vec3(1.0 / 3.0)); - bsdf.throughput = vec3(1.0 - avgDirAlbedo * weight); - - if (scatter_mode != 0) - { - float avgF0 = dot(safeColor0, vec3(1.0 / 3.0)); - fd.ior = vec3(mx_f0_to_ior(avgF0)); - bsdf.response = mx_surface_transmission(N, V, X, safeAlpha, distribution, fd, vec3(1.0)) * weight; - } - } - else if (closureData.closureType == CLOSURE_TYPE_INDIRECT) - { - vec3 F = mx_compute_fresnel(NdotV, fd); - - vec3 comp = mx_ggx_energy_compensation(NdotV, avgAlpha, F); - vec3 dirAlbedo = mx_ggx_dir_albedo(NdotV, avgAlpha, safeColor0, safeColor90) * comp; - float avgDirAlbedo = dot(dirAlbedo, vec3(1.0 / 3.0)); - bsdf.throughput = vec3(1.0 - avgDirAlbedo * weight); - - vec3 Li = mx_environment_radiance(N, V, X, safeAlpha, distribution, fd); - bsdf.response = Li * comp * weight; - } -} -#include "lib/mx_closure_type.glsl" -#include "lib/mx_microfacet.glsl" - -void mx_generalized_schlick_edf(ClosureData closureData, vec3 color0, vec3 color90, float exponent, EDF base, out EDF result) -{ - if (closureData.closureType == CLOSURE_TYPE_EMISSION) - { - vec3 N = mx_forward_facing_normal(closureData.N, closureData.V); - float NdotV = clamp(dot(N, closureData.V), M_FLOAT_EPS, 1.0); - vec3 f = mx_fresnel_schlick(NdotV, color0, color90, exponent); - result = base * f; - } -} -#include "lib/mx_closure_type.glsl" - -void mx_layer_bsdf(ClosureData closureData, BSDF top, BSDF base, out BSDF result) -{ - result.response = top.response + base.response * top.throughput; - result.throughput = top.throughput * base.throughput; -} -#include "lib/mx_closure_type.glsl" - -void mx_layer_vdf(ClosureData closureData, BSDF top, BSDF base, out BSDF result) -{ - result.response = top.response + base.response; - result.throughput = top.throughput + base.throughput; -} -#include "lib/mx_closure_type.glsl" - -void mx_mix_bsdf(ClosureData closureData, BSDF fg, BSDF bg, float mixValue, out BSDF result) -{ - result.response = mix(bg.response, fg.response, mixValue); - result.throughput = mix(bg.throughput, fg.throughput, mixValue); -} -#include "lib/mx_closure_type.glsl" - -void mx_mix_edf(ClosureData closureData, EDF fg, EDF bg, float mixValue, out EDF result) -{ - result = mix(bg, fg, mixValue); -} -#include "lib/mx_closure_type.glsl" - -void mx_multiply_bsdf_color3(ClosureData closureData, BSDF in1, vec3 in2, out BSDF result) -{ - vec3 tint = clamp(in2, 0.0, 1.0); - result.response = in1.response * tint; - result.throughput = in1.throughput; -} -#include "lib/mx_closure_type.glsl" - -void mx_multiply_bsdf_float(ClosureData closureData, BSDF in1, float in2, out BSDF result) -{ - float weight = clamp(in2, 0.0, 1.0); - result.response = in1.response * weight; - result.throughput = in1.throughput; -} -#include "lib/mx_closure_type.glsl" - -void mx_multiply_edf_color3(ClosureData closureData, EDF in1, vec3 in2, out EDF result) -{ - result = in1 * in2; -} -#include "lib/mx_closure_type.glsl" - -void mx_multiply_edf_float(ClosureData closureData, EDF in1, float in2, out EDF result) -{ - result = in1 * in2; -} -#include "lib/mx_closure_type.glsl" -#include "lib/mx_microfacet_diffuse.glsl" - -void mx_oren_nayar_diffuse_bsdf(ClosureData closureData, float weight, vec3 color, float roughness, vec3 N, bool energy_compensation, inout BSDF bsdf) -{ - bsdf.throughput = vec3(0.0); - - if (weight < M_FLOAT_EPS) - { - return; - } - - vec3 V = closureData.V; - vec3 L = closureData.L; - - N = mx_forward_facing_normal(N, V); - float NdotV = clamp(dot(N, V), M_FLOAT_EPS, 1.0); - - if (closureData.closureType == CLOSURE_TYPE_REFLECTION) - { - float NdotL = clamp(dot(N, L), M_FLOAT_EPS, 1.0); - float LdotV = clamp(dot(L, V), M_FLOAT_EPS, 1.0); - - vec3 diffuse = energy_compensation ? - mx_oren_nayar_compensated_diffuse(NdotV, NdotL, LdotV, roughness, color) : - mx_oren_nayar_diffuse(NdotV, NdotL, LdotV, roughness) * color; - bsdf.response = diffuse * closureData.occlusion * weight * NdotL * M_PI_INV; - } - else if (closureData.closureType == CLOSURE_TYPE_INDIRECT) - { - vec3 diffuse = energy_compensation ? - mx_oren_nayar_compensated_diffuse_dir_albedo(NdotV, roughness, color) : - mx_oren_nayar_diffuse_dir_albedo(NdotV, roughness) * color; - vec3 Li = mx_environment_irradiance(N); - bsdf.response = Li * diffuse * weight; - } -} -void mx_roughness_anisotropy(float roughness, float anisotropy, out vec2 result) -{ - float roughness_sqr = clamp(roughness*roughness, M_FLOAT_EPS, 1.0); - if (anisotropy > 0.0) - { - float aspect = sqrt(1.0 - clamp(anisotropy, 0.0, 0.98)); - result.x = min(roughness_sqr / aspect, 1.0); - result.y = roughness_sqr * aspect; - } - else - { - result.x = roughness_sqr; - result.y = roughness_sqr; - } -} -void mx_roughness_dual(vec2 roughness, out vec2 result) -{ - if (roughness.y < 0.0) - { - roughness.y = roughness.x; - } - result.x = clamp(roughness.x * roughness.x, M_FLOAT_EPS, 1.0); - result.y = clamp(roughness.y * roughness.y, M_FLOAT_EPS, 1.0); -} -#include "lib/mx_closure_type.glsl" -#include "lib/mx_microfacet_sheen.glsl" - -void mx_sheen_bsdf(ClosureData closureData, float weight, vec3 color, float roughness, vec3 N, int mode, inout BSDF bsdf) -{ - if (weight < M_FLOAT_EPS) - { - return; - } - - vec3 V = closureData.V; - vec3 L = closureData.L; - - N = mx_forward_facing_normal(N, V); - float NdotV = clamp(dot(N, V), M_FLOAT_EPS, 1.0); - - if (closureData.closureType == CLOSURE_TYPE_REFLECTION) - { - float dirAlbedo; - if (mode == 0) - { - vec3 H = normalize(L + V); - - float NdotL = clamp(dot(N, L), M_FLOAT_EPS, 1.0); - float NdotH = clamp(dot(N, H), M_FLOAT_EPS, 1.0); - - vec3 fr = color * mx_imageworks_sheen_brdf(NdotL, NdotV, NdotH, roughness); - dirAlbedo = mx_imageworks_sheen_dir_albedo(NdotV, roughness); - - // We need to include NdotL from the light integral here - // as in this case it's not cancelled out by the BRDF denominator. - bsdf.response = fr * NdotL * closureData.occlusion * weight; - } - else - { - roughness = clamp(roughness, 0.01, 1.0); // Clamp to range of original impl. - - vec3 fr = color * mx_zeltner_sheen_brdf(L, V, N, NdotV, roughness); - dirAlbedo = mx_zeltner_sheen_dir_albedo(NdotV, roughness); - bsdf.response = dirAlbedo * fr * closureData.occlusion * weight; - } - bsdf.throughput = vec3(1.0 - dirAlbedo * weight); - } - else if (closureData.closureType == CLOSURE_TYPE_INDIRECT) - { - float dirAlbedo; - if (mode == 0) - { - dirAlbedo = mx_imageworks_sheen_dir_albedo(NdotV, roughness); - } - else - { - roughness = clamp(roughness, 0.01, 1.0); // Clamp to range of original impl. - dirAlbedo = mx_zeltner_sheen_dir_albedo(NdotV, roughness); - } - - vec3 Li = mx_environment_irradiance(N); - bsdf.response = Li * color * dirAlbedo * weight; - bsdf.throughput = vec3(1.0 - dirAlbedo * weight); - } -} -#include "lib/mx_closure_type.glsl" -#include "lib/mx_microfacet_diffuse.glsl" - -void mx_subsurface_bsdf(ClosureData closureData, float weight, vec3 color, vec3 radius, float anisotropy, vec3 N, inout BSDF bsdf) -{ - bsdf.throughput = vec3(0.0); - - if (weight < M_FLOAT_EPS) - { - return; - } - - vec3 V = closureData.V; - vec3 L = closureData.L; - vec3 P = closureData.P; - float occlusion = closureData.occlusion; - - N = mx_forward_facing_normal(N, V); - - if (closureData.closureType == CLOSURE_TYPE_REFLECTION) - { - vec3 sss = mx_subsurface_scattering_approx(N, L, P, color, radius); - float NdotL = clamp(dot(N, L), M_FLOAT_EPS, 1.0); - float visibleOcclusion = 1.0 - NdotL * (1.0 - occlusion); - bsdf.response = sss * visibleOcclusion * weight; - } - else if (closureData.closureType == CLOSURE_TYPE_INDIRECT) - { - // For now, we render indirect subsurface as simple indirect diffuse. - vec3 Li = mx_environment_irradiance(N); - bsdf.response = Li * color * weight; - } -} -#include "lib/mx_closure_type.glsl" - -void mx_translucent_bsdf(ClosureData closureData, float weight, vec3 color, vec3 N, inout BSDF bsdf) -{ - bsdf.throughput = vec3(0.0); - - if (weight < M_FLOAT_EPS) - { - return; - } - - vec3 V = closureData.V; - vec3 L = closureData.L; - - // Invert normal since we're transmitting light from the other side - N = -N; - - if (closureData.closureType == CLOSURE_TYPE_REFLECTION) - { - float NdotL = clamp(dot(N, L), 0.0, 1.0); - bsdf.response = color * weight * NdotL * M_PI_INV; - } - else if (closureData.closureType == CLOSURE_TYPE_INDIRECT) - { - vec3 Li = mx_environment_irradiance(N); - bsdf.response = Li * color * weight; - } -} -#include "lib/mx_closure_type.glsl" - -void mx_uniform_edf(ClosureData closureData, vec3 color, out EDF result) -{ - if (closureData.closureType == CLOSURE_TYPE_EMISSION) - { - result = color; - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -float mx_square(float x) -{ - return x*x; -} - -vector2 mx_square(vector2 x) -{ - return x*x; -} - -vector mx_square(vector x) -{ - return x*x; -} - -vector4 mx_square(vector4 x) -{ - return x*x; -} - -float mx_pow5(float x) -{ - return mx_square(mx_square(x)) * x; -} - -color mx_fresnel_conductor(float cosTheta, vector n, vector k) -{ - float c2 = cosTheta*cosTheta; - vector n2_k2 = n*n + k*k; - vector nc2 = 2.0 * n * cosTheta; - - vector rs_a = n2_k2 + c2; - vector rp_a = n2_k2 * c2 + 1.0; - vector rs = (rs_a - nc2) / (rs_a + nc2); - vector rp = (rp_a - nc2) / (rp_a + nc2); - - return 0.5 * (rs + rp); -} - -// Standard Schlick Fresnel -float mx_fresnel_schlick(float cosTheta, float F0) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - float x5 = mx_pow5(x); - return F0 + (1.0 - F0) * x5; -} -color mx_fresnel_schlick(float cosTheta, color F0) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - float x5 = mx_pow5(x); - return F0 + (1.0 - F0) * x5; -} - -// Generalized Schlick Fresnel -float mx_fresnel_schlick(float cosTheta, float F0, float F90) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - float x5 = mx_pow5(x); - return mix(F0, F90, x5); -} -color mx_fresnel_schlick(float cosTheta, color F0, color F90) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - float x5 = mx_pow5(x); - return mix(F0, F90, x5); -} - -// Generalized Schlick Fresnel with a variable exponent -color mx_fresnel_schlick(float cosTheta, float f0, float f90, float exponent) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - return mix(f0, f90, pow(x, exponent)); -} -color mx_fresnel_schlick(float cosTheta, color f0, color f90, float exponent) -{ - float x = clamp(1.0 - cosTheta, 0.0, 1.0); - return mix(f0, f90, pow(x, exponent)); -} -void mx_anisotropic_vdf(color absorption, color scattering, float anisotropy, output VDF vdf) -{ - // Convert from absorption and scattering coefficients to - // extinction coefficient and single-scattering albedo. - color extinction = absorption + scattering; - color albedo = scattering / extinction; - vdf = anisotropic_vdf(albedo, extinction, anisotropy); -} -void mx_artistic_ior(color reflectivity, color edge_color, output vector ior, output vector extinction) -{ - // "Artist Friendly Metallic Fresnel", Ole Gulbrandsen, 2014 - // http://jcgt.org/published/0003/04/03/paper.pdf - - color r = clamp(reflectivity, 0.0, 0.99); - color r_sqrt = sqrt(r); - color n_min = (1.0 - r) / (1.0 + r); - color n_max = (1.0 + r_sqrt) / (1.0 - r_sqrt); - ior = mix(n_max, n_min, edge_color); - - color np1 = ior + 1.0; - color nm1 = ior - 1.0; - color k2 = (np1*np1 * r - nm1*nm1) / (1.0 - r); - k2 = max(k2, 0.0); - extinction = sqrt(k2); -} -void mx_blackbody(float temp, output color color_value) -{ - float xc, yc; - float t, t2, t3, xc2, xc3; - - // if value outside valid range of approximation clamp to accepted temperature range - float temperature = clamp(temp, 1667.0, 25000.0); - - t = 1000.0 / temperature; - t2 = t * t; - t3 = t * t * t; - - // Cubic spline approximation for Kelvin temperature to sRGB conversion - // (https://en.wikipedia.org/wiki/Planckian_locus#Approximation) - if (temperature < 4000.0) { // 1667K <= temperature < 4000K - xc = -0.2661239 * t3 - 0.2343580 * t2 + 0.8776956 * t + 0.179910; - } - else { // 4000K <= temperature <= 25000K - xc = -3.0258469 * t3 + 2.1070379 * t2 + 0.2226347 * t + 0.240390; - } - xc2 = xc * xc; - xc3 = xc * xc * xc; - - if (temperature < 2222.0) { // 1667K <= temperature < 2222K - yc = -1.1063814 * xc3 - 1.34811020 * xc2 + 2.18555832 * xc - 0.20219683; - } - else if (temperature < 4000.0) { // 2222K <= temperature < 4000K - yc = -0.9549476 * xc3 - 1.37418593 * xc2 + 2.09137015 * xc - 0.16748867; - } - else { // 4000K <= temperature <= 25000K - yc = 3.0817580 * xc3 - 5.87338670 * xc2 + 3.75112997 * xc - 0.37001483; - } - - if (yc <= 0.0) { // avoid division by zero - color_value = color(1.0); - return; - } - - vector XYZ = vector(xc / yc, 1.0, (1 - xc - yc) / yc); - - /// XYZ to Rec.709 RGB colorspace conversion - matrix XYZ_to_RGB = matrix( 3.2406, -0.9689, 0.0557, 0.0, - -1.5372, 1.8758, -0.2040, 0.0, - -0.4986, 0.0415, 1.0570, 0.0, - 0.0, 0.0, 0.0, 1.0); - - color_value = transform(XYZ_to_RGB, XYZ); - color_value = max(color_value, vector(0.0)); -} -void mx_chiang_hair_bsdf(color tint_R, color tint_TT, color tint_TRT, float ior, - vector2 roughness_R, vector2 roughness_TT, vector2 roughness_TRT, - float cuticle_angle, vector absorption_coefficient, normal N, vector U, output BSDF bsdf) -{ -#if OSL_VERSION_MAJOR >= 1 && OSL_VERSION_MINOR >= 14 - bsdf = chiang_hair_bsdf(N, U, tint_R, tint_TT, tint_TRT, ior, - roughness_R.x, roughness_TT.x, roughness_TRT.x, roughness_R.y, roughness_TT.y, roughness_TRT.y, - cuticle_angle, absorption_coefficient); -#else - bsdf = dielectric_bsdf(N, U, color(1), color(0), 0.1, 0.1, ior, "ggx"); -#endif -} -void mx_chiang_hair_roughness(float longitudinal, float azimuthal, float scale_TT, float scale_TRT, output vector2 roughness_R, output vector2 roughness_TT, output vector2 roughness_TRT) -{ - // TODO: Write OSL implementation of this node. - roughness_R = vector2(0.0, 0.0); - roughness_TT = vector2(0.0, 0.0); - roughness_TRT = vector2(0.0, 0.0); -} -void mx_dielectric_bsdf(float weight, color tint, float ior, vector2 roughness, float thinfilm_thickness, float thinfilm_ior, normal N, vector U, string distribution, string scatter_mode, output BSDF bsdf) -{ - color reflection_tint = (scatter_mode == "T") ? color(0.0) : tint; - color transmission_tint = (scatter_mode == "R") ? color(0.0) : tint; - bsdf = weight * dielectric_bsdf(N, U, reflection_tint, transmission_tint, roughness.x, roughness.y, ior, distribution, "thinfilm_thickness", thinfilm_thickness, "thinfilm_ior", thinfilm_ior); -} -void mx_generalized_schlick_bsdf(float weight, color color0, color color82, color color90, float exponent, vector2 roughness, float thinfilm_thickness, float thinfilm_ior, normal N, vector U, string distribution, string scatter_mode, output BSDF bsdf) -{ - color reflection_tint = (scatter_mode == "T") ? color(0.0) : color(1.0); - color transmission_tint = (scatter_mode == "R") ? color(0.0) : color(1.0); - bsdf = weight * generalized_schlick_bsdf(N, U, reflection_tint, transmission_tint, roughness.x, roughness.y, color0, color90, exponent, distribution, "thinfilm_thickness", thinfilm_thickness, "thinfilm_ior", thinfilm_ior); -} -#include "lib/mx_microfacet.osl" - -void mx_generalized_schlick_edf(color color0, color color90, float exponent, EDF base, output EDF result) -{ - float NdotV = fabs(dot(N,-I)); - color f = mx_fresnel_schlick(NdotV, color0, color90, exponent); - result = base * f; -} -void mx_roughness_anisotropy(float roughness, float anisotropy, output vector2 result) -{ - float roughness_sqr = clamp(roughness*roughness, M_FLOAT_EPS, 1.0); - if (anisotropy > 0.0) - { - float aspect = sqrt(1.0 - clamp(anisotropy, 0.0, 0.98)); - result.x = min(roughness_sqr / aspect, 1.0); - result.y = roughness_sqr * aspect; - } - else - { - result.x = roughness_sqr; - result.y = roughness_sqr; - } -} -void mx_roughness_dual(vector2 roughness, output vector2 result) -{ - result.x = clamp(roughness.x * roughness.x, M_FLOAT_EPS, 1.0); - if (roughness.y < 0.0) - { - result.y = result.x; - } - else - { - result.y = clamp(roughness.y * roughness.y, M_FLOAT_EPS, 1.0); - } -} -void mx_subsurface_bsdf(float weight, color albedo, color radius, float anisotropy, normal N, output BSDF bsdf) -{ -#if OSL_VERSION_MAJOR >= 1 && OSL_VERSION_MINOR >= 14 - bsdf = weight * subsurface_bssrdf(N, albedo, radius, anisotropy); -#else - bsdf = weight * subsurface_bssrdf(N, albedo, 1.0, radius, anisotropy); -#endif -} -void mx_surface(BSDF bsdf, EDF edf, float opacity, int thin_walled, output surfaceshader result) -{ - result.bsdf = bsdf; - result.edf = edf; - result.opacity = clamp(opacity, 0.0, 1.0); -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Blend 3 normals by blending the gradients -// Morten S. Mikkelsen, Surface Gradient–Based Bump Mapping Framework, Journal of -// Computer Graphics Techniques (JCGT), vol. 9, no. 3, 60–90, 2020 -// http://jcgt.org/published/0009/03/04/ -vec3 mx_normals_to_gradient(vec3 N, vec3 Np) -{ - float d = dot(N, Np); - vec3 g = (d * N - Np) / max(M_FLOAT_EPS, abs(d)); - return g; -} - -vec3 mx_gradient_blend_3_normals(vec3 N, vec3 N1, float N1_weight, vec3 N2, float N2_weight, vec3 N3, float N3_weight) -{ - float w1 = clamp(N1_weight, 0.0, 1.0); - float w2 = clamp(N2_weight, 0.0, 1.0); - float w3 = clamp(N3_weight, 0.0, 1.0); - - vec3 g1 = mx_normals_to_gradient(N, N1); - vec3 g2 = mx_normals_to_gradient(N, N2); - vec3 g3 = mx_normals_to_gradient(N, N3); - - // blend - vec3 gg = w1 * g1 + w2 * g2 + w3 * g3; - - // gradient to normal - return normalize(N - gg); -} - -// This function should be categorized in mx_math.glsl but it causes build errors in MSL -// so adding here for a workaround -mat3 mx_axis_rotation_matrix(vec3 a, float r) -{ - float s = sin(r); - float c = cos(r); - float omc = 1.0 - c; - return mat3( - a.x*a.x*omc + c, a.x*a.y*omc - a.z*s, a.x*a.z*omc + a.y*s, - a.y*a.x*omc + a.z*s, a.y*a.y*omc + c, a.y*a.z*omc - a.x*s, - a.z*a.x*omc - a.y*s, a.z*a.y*omc + a.x*s, a.z*a.z*omc + c - ); -} -// https://www.shadertoy.com/view/4djSRW -vec2 mx_hextile_hash(vec2 p) -{ - vec3 p3 = fract(vec3(p.x, p.y, p.x) * vec3(0.1031, 0.1030, 0.0973)); - p3 += dot(p3, vec3(p3.y, p3.z, p3.x) + 33.33); - return fract((vec2(p3.x, p3.x) + vec2(p3.y, p3.z)) * vec2(p3.z, p3.y)); -} - -// Christophe Schlick. “Fast Alternatives to Perlin’s Bias and Gain Functions”. -// In Graphics Gems IV, Morgan Kaufmann, 1994, pages 401–403. -// https://dept-info.labri.fr/~schlick/DOC/gem2.html -float mx_schlick_gain(float x, float r) -{ - float rr = clamp(r, 0.001, 0.999); // to avoid glitch - float a = (1.0 / rr - 2.0) * (1.0 - 2.0 * x); - return (x < 0.5) ? x / (a + 1.0) : (a - x) / (a - 1.0); -} - -struct HextileData -{ - vec2 coord1; - vec2 coord2; - vec2 coord3; - vec3 weights; - float rot_radian1; - float rot_radian2; - float rot_radian3; - vec2 ddx1; - vec2 ddx2; - vec2 ddx3; - vec2 ddy1; - vec2 ddy2; - vec2 ddy3; -}; - -// Morten S. Mikkelsen, Practical Real-Time Hex-Tiling, Journal of Computer Graphics -// Techniques (JCGT), vol. 11, no. 2, 77-94, 2022 -// http://jcgt.org/published/0011/03/05/ -HextileData mx_hextile_coord( - vec2 coord, - float rotation, - vec2 rotation_range, - float scale, - vec2 scale_range, - float offset, - vec2 offset_range) -{ - float sqrt3_2 = sqrt(3.0) * 2.0; - - // scale coord to maintain the original fit - vec2 st = coord * sqrt3_2; - - // skew input space into simplex triangle grid - // (1, 0, -tan(30), 2*tan(30)) - mat2 to_skewed = mat2(1.0, 0.0, -0.57735027, 1.15470054); - vec2 st_skewed = to_skewed * st; - - // barycentric weights - vec2 st_frac = fract(st_skewed); - vec3 temp = vec3(st_frac.x, st_frac.y, 0.0); - temp.z = 1.0 - temp.x - temp.y; - - float s = step(0.0, -temp.z); - float s2 = 2.0 * s - 1.0; - - float w1 = -temp.z * s2; - float w2 = s - temp.y * s2; - float w3 = s - temp.x * s2; - - // vertex IDs - ivec2 base_id = ivec2(floor(st_skewed)); - int si = int(s); - ivec2 id1 = base_id + ivec2(si, si); - ivec2 id2 = base_id + ivec2(si, 1 - si); - ivec2 id3 = base_id + ivec2(1 - si, si); - - // tile center - mat2 inv_skewed = mat2(1.0, 0.0, 0.5, 1.0 / 1.15470054); - vec2 ctr1 = inv_skewed * vec2(id1) / vec2(sqrt3_2); - vec2 ctr2 = inv_skewed * vec2(id2) / vec2(sqrt3_2); - vec2 ctr3 = inv_skewed * vec2(id3) / vec2(sqrt3_2); - - // reuse hash for performance - vec2 seed_offset = vec2(0.12345); // to avoid some zeros - vec2 rand1 = mx_hextile_hash(vec2(id1) + seed_offset); - vec2 rand2 = mx_hextile_hash(vec2(id2) + seed_offset); - vec2 rand3 = mx_hextile_hash(vec2(id3) + seed_offset); - - // randomized rotation matrix - vec2 rr = mx_radians(rotation_range); - float rv1 = mix(rr.x, rr.y, rand1.x * rotation); - float rv2 = mix(rr.x, rr.y, rand2.x * rotation); - float rv3 = mix(rr.x, rr.y, rand3.x * rotation); - float sin_r1 = sin(rv1); - float sin_r2 = sin(rv2); - float sin_r3 = sin(rv3); - float cos_r1 = cos(rv1); - float cos_r2 = cos(rv2); - float cos_r3 = cos(rv3); - mat2 rm1 = mat2(cos_r1, -sin_r1, sin_r1, cos_r1); - mat2 rm2 = mat2(cos_r2, -sin_r2, sin_r2, cos_r2); - mat2 rm3 = mat2(cos_r3, -sin_r3, sin_r3, cos_r3); - - // randomized scale - vec2 sr = scale_range; - vec2 scale1 = vec2(mix(1.0, mix(sr.x, sr.y, rand1.y), scale)); - vec2 scale2 = vec2(mix(1.0, mix(sr.x, sr.y, rand2.y), scale)); - vec2 scale3 = vec2(mix(1.0, mix(sr.x, sr.y, rand3.y), scale)); - - // randomized offset - vec2 offset1 = mix(vec2(offset_range.x), vec2(offset_range.y), rand1 * offset); - vec2 offset2 = mix(vec2(offset_range.x), vec2(offset_range.y), rand2 * offset); - vec2 offset3 = mix(vec2(offset_range.x), vec2(offset_range.y), rand3 * offset); - - HextileData tile_data; - tile_data.weights = vec3(w1, w2, w3); - tile_data.rot_radian1 = rv1; - tile_data.rot_radian2 = rv2; - tile_data.rot_radian3 = rv3; - - // get coord - tile_data.coord1 = ((coord - ctr1) * rm1 / scale1) + ctr1 + offset1; - tile_data.coord2 = ((coord - ctr2) * rm2 / scale2) + ctr2 + offset2; - tile_data.coord3 = ((coord - ctr3) * rm3 / scale3) + ctr3 + offset3; - - // derivatives - vec2 ddx = dFdx(coord); - vec2 ddy = dFdy(coord); - tile_data.ddx1 = ddx * rm1 / scale1; - tile_data.ddx2 = ddx * rm2 / scale2; - tile_data.ddx3 = ddx * rm3 / scale3; - tile_data.ddy1 = ddy * rm1 / scale1; - tile_data.ddy2 = ddy * rm2 / scale2; - tile_data.ddy3 = ddy * rm3 / scale3; - - return tile_data; -} -/* -Color transform functions. - -These functions are modified versions of the color operators found in Open Shading Language: -github.com/imageworks/OpenShadingLanguage/blob/master/src/liboslexec/opcolor.cpp - -It contains the subset of color operators needed to implement the MaterialX -standard library. The modifications are for conversions from C++ to GLSL. - -Original copyright notice: ------------------------------------------------------------------------- -Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al. -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -* Neither the name of Sony Pictures Imageworks nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------- -*/ - -vec3 mx_hsvtorgb(vec3 hsv) -{ - // Reference for this technique: Foley & van Dam - float h = hsv.x; float s = hsv.y; float v = hsv.z; - if (s < 0.0001f) { - return vec3 (v, v, v); - } else { - h = 6.0f * (h - floor(h)); // expand to [0..6) - int hi = int(trunc(h)); - float f = h - float(hi); - float p = v * (1.0f-s); - float q = v * (1.0f-s*f); - float t = v * (1.0f-s*(1.0f-f)); - if (hi == 0) - return vec3 (v, t, p); - else if (hi == 1) - return vec3 (q, v, p); - else if (hi == 2) - return vec3 (p, v, t); - else if (hi == 3) - return vec3 (p, q, v); - else if (hi == 4) - return vec3 (t, p, v); - return vec3 (v, p, q); - } -} - - -vec3 mx_rgbtohsv(vec3 c) -{ - // See Foley & van Dam - float r = c.x; float g = c.y; float b = c.z; - float mincomp = min (r, min(g, b)); - float maxcomp = max (r, max(g, b)); - float delta = maxcomp - mincomp; // chroma - float h, s, v; - v = maxcomp; - if (maxcomp > 0.0f) - s = delta / maxcomp; - else s = 0.0f; - if (s <= 0.0f) - h = 0.0f; - else { - if (r >= maxcomp) h = (g-b) / delta; - else if (g >= maxcomp) h = 2.0f + (b-r) / delta; - else h = 4.0f + (r-g) / delta; - h *= (1.0f/6.0f); - if (h < 0.0f) - h += 1.0f; - } - return vec3(h, s, v); -} -#define M_FLOAT_EPS 1e-8 - -#define mx_mod mod -#define mx_inverse inverse -#define mx_inversesqrt inversesqrt -#define mx_sin sin -#define mx_cos cos -#define mx_tan tan -#define mx_asin asin -#define mx_acos acos -#define mx_atan atan -#define mx_radians radians - -float mx_square(float x) -{ - return x*x; -} - -vec2 mx_square(vec2 x) -{ - return x*x; -} - -vec3 mx_square(vec3 x) -{ - return x*x; -} - -vec3 mx_srgb_encode(vec3 color) -{ - bvec3 isAbove = greaterThan(color, vec3(0.0031308)); - vec3 linSeg = color * 12.92; - vec3 powSeg = 1.055 * pow(max(color, vec3(0.0)), vec3(1.0 / 2.4)) - 0.055; - return mix(linSeg, powSeg, isAbove); -} -/* -Noise Library. - -This library is a modified version of the noise library found in -Open Shading Language: -github.com/imageworks/OpenShadingLanguage/blob/master/src/include/OSL/oslnoise.h - -It contains the subset of noise types needed to implement the MaterialX -standard library. The modifications are mainly conversions from C++ to GLSL. -Produced results should be identical to the OSL noise functions. - -Original copyright notice: ------------------------------------------------------------------------- -Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al. -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -* Neither the name of Sony Pictures Imageworks nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------- -*/ - -float mx_select(bool b, float t, float f) -{ - return b ? t : f; -} - -float mx_negate_if(float val, bool b) -{ - return b ? -val : val; -} - -int mx_floor(float x) -{ - return int(floor(x)); -} - -// return mx_floor as well as the fractional remainder -float mx_floorfrac(float x, out int i) -{ - i = mx_floor(x); - return x - float(i); -} - -float mx_bilerp(float v0, float v1, float v2, float v3, float s, float t) -{ - float s1 = 1.0 - s; - return (1.0 - t) * (v0*s1 + v1*s) + t * (v2*s1 + v3*s); -} -vec3 mx_bilerp(vec3 v0, vec3 v1, vec3 v2, vec3 v3, float s, float t) -{ - float s1 = 1.0 - s; - return (1.0 - t) * (v0*s1 + v1*s) + t * (v2*s1 + v3*s); -} -float mx_trilerp(float v0, float v1, float v2, float v3, float v4, float v5, float v6, float v7, float s, float t, float r) -{ - float s1 = 1.0 - s; - float t1 = 1.0 - t; - float r1 = 1.0 - r; - return (r1*(t1*(v0*s1 + v1*s) + t*(v2*s1 + v3*s)) + - r*(t1*(v4*s1 + v5*s) + t*(v6*s1 + v7*s))); -} -vec3 mx_trilerp(vec3 v0, vec3 v1, vec3 v2, vec3 v3, vec3 v4, vec3 v5, vec3 v6, vec3 v7, float s, float t, float r) -{ - float s1 = 1.0 - s; - float t1 = 1.0 - t; - float r1 = 1.0 - r; - return (r1*(t1*(v0*s1 + v1*s) + t*(v2*s1 + v3*s)) + - r*(t1*(v4*s1 + v5*s) + t*(v6*s1 + v7*s))); -} - -// 2 and 3 dimensional gradient functions - perform a dot product against a -// randomly chosen vector. Note that the gradient vector is not normalized, but -// this only affects the overall "scale" of the result, so we simply account for -// the scale by multiplying in the corresponding "perlin" function. -float mx_gradient_float(uint hash, float x, float y) -{ - // 8 possible directions (+-1,+-2) and (+-2,+-1) - uint h = hash & 7u; - float u = mx_select(h<4u, x, y); - float v = 2.0 * mx_select(h<4u, y, x); - // compute the dot product with (x,y). - return mx_negate_if(u, bool(h&1u)) + mx_negate_if(v, bool(h&2u)); -} -float mx_gradient_float(uint hash, float x, float y, float z) -{ - // use vectors pointing to the edges of the cube - uint h = hash & 15u; - float u = mx_select(h<8u, x, y); - float v = mx_select(h<4u, y, mx_select((h==12u)||(h==14u), x, z)); - return mx_negate_if(u, bool(h&1u)) + mx_negate_if(v, bool(h&2u)); -} -vec3 mx_gradient_vec3(uvec3 hash, float x, float y) -{ - return vec3(mx_gradient_float(hash.x, x, y), mx_gradient_float(hash.y, x, y), mx_gradient_float(hash.z, x, y)); -} -vec3 mx_gradient_vec3(uvec3 hash, float x, float y, float z) -{ - return vec3(mx_gradient_float(hash.x, x, y, z), mx_gradient_float(hash.y, x, y, z), mx_gradient_float(hash.z, x, y, z)); -} -// Scaling factors to normalize the result of gradients above. -// These factors were experimentally calculated to be: -// 2D: 0.6616 -// 3D: 0.9820 -float mx_gradient_scale2d(float v) { return 0.6616 * v; } -float mx_gradient_scale3d(float v) { return 0.9820 * v; } -vec3 mx_gradient_scale2d(vec3 v) { return 0.6616 * v; } -vec3 mx_gradient_scale3d(vec3 v) { return 0.9820 * v; } - -/// Bitwise circular rotation left by k bits (for 32 bit unsigned integers) -uint mx_rotl32(uint x, int k) -{ - return (x<>(32-k)); -} - -void mx_bjmix(inout uint a, inout uint b, inout uint c) -{ - a -= c; a ^= mx_rotl32(c, 4); c += b; - b -= a; b ^= mx_rotl32(a, 6); a += c; - c -= b; c ^= mx_rotl32(b, 8); b += a; - a -= c; a ^= mx_rotl32(c,16); c += b; - b -= a; b ^= mx_rotl32(a,19); a += c; - c -= b; c ^= mx_rotl32(b, 4); b += a; -} - -// Mix up and combine the bits of a, b, and c (doesn't change them, but -// returns a hash of those three original values). -uint mx_bjfinal(uint a, uint b, uint c) -{ - c ^= b; c -= mx_rotl32(b,14); - a ^= c; a -= mx_rotl32(c,11); - b ^= a; b -= mx_rotl32(a,25); - c ^= b; c -= mx_rotl32(b,16); - a ^= c; a -= mx_rotl32(c,4); - b ^= a; b -= mx_rotl32(a,14); - c ^= b; c -= mx_rotl32(b,24); - return c; -} - -// Convert a 32 bit integer into a floating point number in [0,1] -float mx_bits_to_01(uint bits) -{ - return float(bits) / float(uint(0xffffffff)); -} - -float mx_fade(float t) -{ - return t * t * t * (t * (t * 6.0 - 15.0) + 10.0); -} - -uint mx_hash_int(int x) -{ - uint len = 1u; - uint seed = uint(0xdeadbeef) + (len << 2u) + 13u; - return mx_bjfinal(seed+uint(x), seed, seed); -} - -uint mx_hash_int(int x, int y) -{ - uint len = 2u; - uint a, b, c; - a = b = c = uint(0xdeadbeef) + (len << 2u) + 13u; - a += uint(x); - b += uint(y); - return mx_bjfinal(a, b, c); -} - -uint mx_hash_int(int x, int y, int z) -{ - uint len = 3u; - uint a, b, c; - a = b = c = uint(0xdeadbeef) + (len << 2u) + 13u; - a += uint(x); - b += uint(y); - c += uint(z); - return mx_bjfinal(a, b, c); -} - -uint mx_hash_int(int x, int y, int z, int xx) -{ - uint len = 4u; - uint a, b, c; - a = b = c = uint(0xdeadbeef) + (len << 2u) + 13u; - a += uint(x); - b += uint(y); - c += uint(z); - mx_bjmix(a, b, c); - a += uint(xx); - return mx_bjfinal(a, b, c); -} - -uint mx_hash_int(int x, int y, int z, int xx, int yy) -{ - uint len = 5u; - uint a, b, c; - a = b = c = uint(0xdeadbeef) + (len << 2u) + 13u; - a += uint(x); - b += uint(y); - c += uint(z); - mx_bjmix(a, b, c); - a += uint(xx); - b += uint(yy); - return mx_bjfinal(a, b, c); -} - -uvec3 mx_hash_vec3(int x, int y) -{ - uint h = mx_hash_int(x, y); - // we only need the low-order bits to be random, so split out - // the 32 bit result into 3 parts for each channel - uvec3 result; - result.x = (h ) & 0xFFu; - result.y = (h >> 8 ) & 0xFFu; - result.z = (h >> 16) & 0xFFu; - return result; -} - -uvec3 mx_hash_vec3(int x, int y, int z) -{ - uint h = mx_hash_int(x, y, z); - // we only need the low-order bits to be random, so split out - // the 32 bit result into 3 parts for each channel - uvec3 result; - result.x = (h ) & 0xFFu; - result.y = (h >> 8 ) & 0xFFu; - result.z = (h >> 16) & 0xFFu; - return result; -} - -float mx_perlin_noise_float(vec2 p) -{ - int X, Y; - float fx = mx_floorfrac(p.x, X); - float fy = mx_floorfrac(p.y, Y); - float u = mx_fade(fx); - float v = mx_fade(fy); - float result = mx_bilerp( - mx_gradient_float(mx_hash_int(X , Y ), fx , fy ), - mx_gradient_float(mx_hash_int(X+1, Y ), fx-1.0, fy ), - mx_gradient_float(mx_hash_int(X , Y+1), fx , fy-1.0), - mx_gradient_float(mx_hash_int(X+1, Y+1), fx-1.0, fy-1.0), - u, v); - return mx_gradient_scale2d(result); -} - -float mx_perlin_noise_float(vec3 p) -{ - int X, Y, Z; - float fx = mx_floorfrac(p.x, X); - float fy = mx_floorfrac(p.y, Y); - float fz = mx_floorfrac(p.z, Z); - float u = mx_fade(fx); - float v = mx_fade(fy); - float w = mx_fade(fz); - float result = mx_trilerp( - mx_gradient_float(mx_hash_int(X , Y , Z ), fx , fy , fz ), - mx_gradient_float(mx_hash_int(X+1, Y , Z ), fx-1.0, fy , fz ), - mx_gradient_float(mx_hash_int(X , Y+1, Z ), fx , fy-1.0, fz ), - mx_gradient_float(mx_hash_int(X+1, Y+1, Z ), fx-1.0, fy-1.0, fz ), - mx_gradient_float(mx_hash_int(X , Y , Z+1), fx , fy , fz-1.0), - mx_gradient_float(mx_hash_int(X+1, Y , Z+1), fx-1.0, fy , fz-1.0), - mx_gradient_float(mx_hash_int(X , Y+1, Z+1), fx , fy-1.0, fz-1.0), - mx_gradient_float(mx_hash_int(X+1, Y+1, Z+1), fx-1.0, fy-1.0, fz-1.0), - u, v, w); - return mx_gradient_scale3d(result); -} - -vec3 mx_perlin_noise_vec3(vec2 p) -{ - int X, Y; - float fx = mx_floorfrac(p.x, X); - float fy = mx_floorfrac(p.y, Y); - float u = mx_fade(fx); - float v = mx_fade(fy); - vec3 result = mx_bilerp( - mx_gradient_vec3(mx_hash_vec3(X , Y ), fx , fy ), - mx_gradient_vec3(mx_hash_vec3(X+1, Y ), fx-1.0, fy ), - mx_gradient_vec3(mx_hash_vec3(X , Y+1), fx , fy-1.0), - mx_gradient_vec3(mx_hash_vec3(X+1, Y+1), fx-1.0, fy-1.0), - u, v); - return mx_gradient_scale2d(result); -} - -vec3 mx_perlin_noise_vec3(vec3 p) -{ - int X, Y, Z; - float fx = mx_floorfrac(p.x, X); - float fy = mx_floorfrac(p.y, Y); - float fz = mx_floorfrac(p.z, Z); - float u = mx_fade(fx); - float v = mx_fade(fy); - float w = mx_fade(fz); - vec3 result = mx_trilerp( - mx_gradient_vec3(mx_hash_vec3(X , Y , Z ), fx , fy , fz ), - mx_gradient_vec3(mx_hash_vec3(X+1, Y , Z ), fx-1.0, fy , fz ), - mx_gradient_vec3(mx_hash_vec3(X , Y+1, Z ), fx , fy-1.0, fz ), - mx_gradient_vec3(mx_hash_vec3(X+1, Y+1, Z ), fx-1.0, fy-1.0, fz ), - mx_gradient_vec3(mx_hash_vec3(X , Y , Z+1), fx , fy , fz-1.0), - mx_gradient_vec3(mx_hash_vec3(X+1, Y , Z+1), fx-1.0, fy , fz-1.0), - mx_gradient_vec3(mx_hash_vec3(X , Y+1, Z+1), fx , fy-1.0, fz-1.0), - mx_gradient_vec3(mx_hash_vec3(X+1, Y+1, Z+1), fx-1.0, fy-1.0, fz-1.0), - u, v, w); - return mx_gradient_scale3d(result); -} - -float mx_cell_noise_float(float p) -{ - int ix = mx_floor(p); - return mx_bits_to_01(mx_hash_int(ix)); -} - -float mx_cell_noise_float(vec2 p) -{ - int ix = mx_floor(p.x); - int iy = mx_floor(p.y); - return mx_bits_to_01(mx_hash_int(ix, iy)); -} - -float mx_cell_noise_float(vec3 p) -{ - int ix = mx_floor(p.x); - int iy = mx_floor(p.y); - int iz = mx_floor(p.z); - return mx_bits_to_01(mx_hash_int(ix, iy, iz)); -} - -float mx_cell_noise_float(vec4 p) -{ - int ix = mx_floor(p.x); - int iy = mx_floor(p.y); - int iz = mx_floor(p.z); - int iw = mx_floor(p.w); - return mx_bits_to_01(mx_hash_int(ix, iy, iz, iw)); -} - -vec3 mx_cell_noise_vec3(float p) -{ - int ix = mx_floor(p); - return vec3( - mx_bits_to_01(mx_hash_int(ix, 0)), - mx_bits_to_01(mx_hash_int(ix, 1)), - mx_bits_to_01(mx_hash_int(ix, 2)) - ); -} - -vec3 mx_cell_noise_vec3(vec2 p) -{ - int ix = mx_floor(p.x); - int iy = mx_floor(p.y); - return vec3( - mx_bits_to_01(mx_hash_int(ix, iy, 0)), - mx_bits_to_01(mx_hash_int(ix, iy, 1)), - mx_bits_to_01(mx_hash_int(ix, iy, 2)) - ); -} - -vec3 mx_cell_noise_vec3(vec3 p) -{ - int ix = mx_floor(p.x); - int iy = mx_floor(p.y); - int iz = mx_floor(p.z); - return vec3( - mx_bits_to_01(mx_hash_int(ix, iy, iz, 0)), - mx_bits_to_01(mx_hash_int(ix, iy, iz, 1)), - mx_bits_to_01(mx_hash_int(ix, iy, iz, 2)) - ); -} - -vec3 mx_cell_noise_vec3(vec4 p) -{ - int ix = mx_floor(p.x); - int iy = mx_floor(p.y); - int iz = mx_floor(p.z); - int iw = mx_floor(p.w); - return vec3( - mx_bits_to_01(mx_hash_int(ix, iy, iz, iw, 0)), - mx_bits_to_01(mx_hash_int(ix, iy, iz, iw, 1)), - mx_bits_to_01(mx_hash_int(ix, iy, iz, iw, 2)) - ); -} - -float mx_fractal2d_noise_float(vec2 p, int octaves, float lacunarity, float diminish) -{ - float result = 0.0; - float amplitude = 1.0; - for (int i = 0; i < octaves; ++i) - { - result += amplitude * mx_perlin_noise_float(p); - amplitude *= diminish; - p *= lacunarity; - } - return result; -} - -vec3 mx_fractal2d_noise_vec3(vec2 p, int octaves, float lacunarity, float diminish) -{ - vec3 result = vec3(0.0); - float amplitude = 1.0; - for (int i = 0; i < octaves; ++i) - { - result += amplitude * mx_perlin_noise_vec3(p); - amplitude *= diminish; - p *= lacunarity; - } - return result; -} - -vec2 mx_fractal2d_noise_vec2(vec2 p, int octaves, float lacunarity, float diminish) -{ - return vec2(mx_fractal2d_noise_float(p, octaves, lacunarity, diminish), - mx_fractal2d_noise_float(p+vec2(19, 193), octaves, lacunarity, diminish)); -} - -vec4 mx_fractal2d_noise_vec4(vec2 p, int octaves, float lacunarity, float diminish) -{ - vec3 c = mx_fractal2d_noise_vec3(p, octaves, lacunarity, diminish); - float f = mx_fractal2d_noise_float(p+vec2(19, 193), octaves, lacunarity, diminish); - return vec4(c, f); -} - -float mx_fractal3d_noise_float(vec3 p, int octaves, float lacunarity, float diminish) -{ - float result = 0.0; - float amplitude = 1.0; - for (int i = 0; i < octaves; ++i) - { - result += amplitude * mx_perlin_noise_float(p); - amplitude *= diminish; - p *= lacunarity; - } - return result; -} - -vec3 mx_fractal3d_noise_vec3(vec3 p, int octaves, float lacunarity, float diminish) -{ - vec3 result = vec3(0.0); - float amplitude = 1.0; - for (int i = 0; i < octaves; ++i) - { - result += amplitude * mx_perlin_noise_vec3(p); - amplitude *= diminish; - p *= lacunarity; - } - return result; -} - -vec2 mx_fractal3d_noise_vec2(vec3 p, int octaves, float lacunarity, float diminish) -{ - return vec2(mx_fractal3d_noise_float(p, octaves, lacunarity, diminish), - mx_fractal3d_noise_float(p+vec3(19, 193, 17), octaves, lacunarity, diminish)); -} - -vec4 mx_fractal3d_noise_vec4(vec3 p, int octaves, float lacunarity, float diminish) -{ - vec3 c = mx_fractal3d_noise_vec3(p, octaves, lacunarity, diminish); - float f = mx_fractal3d_noise_float(p+vec3(19, 193, 17), octaves, lacunarity, diminish); - return vec4(c, f); -} - -vec2 mx_worley_cell_position(int x, int y, int xoff, int yoff, float jitter) -{ - vec3 tmp = mx_cell_noise_vec3(vec2(x+xoff, y+yoff)); - vec2 off = vec2(tmp.x, tmp.y); - - off -= 0.5f; - off *= jitter; - off += 0.5f; - - return vec2(float(x), float(y)) + off; -} - -vec3 mx_worley_cell_position(int x, int y, int z, int xoff, int yoff, int zoff, float jitter) -{ - vec3 off = mx_cell_noise_vec3(vec3(x+xoff, y+yoff, z+zoff)); - - off -= 0.5f; - off *= jitter; - off += 0.5f; - - return vec3(float(x), float(y), float(z)) + off; -} - -float mx_worley_distance(vec2 p, int x, int y, int xoff, int yoff, float jitter, int metric) -{ - vec2 cellpos = mx_worley_cell_position(x, y, xoff, yoff, jitter); - vec2 diff = cellpos - p; - if (metric == 2) - return abs(diff.x) + abs(diff.y); // Manhattan distance - if (metric == 3) - return max(abs(diff.x), abs(diff.y)); // Chebyshev distance - // Either Euclidean or Distance^2 - return dot(diff, diff); -} - -float mx_worley_distance(vec3 p, int x, int y, int z, int xoff, int yoff, int zoff, float jitter, int metric) -{ - vec3 cellpos = mx_worley_cell_position(x, y, z, xoff, yoff, zoff, jitter); - vec3 diff = cellpos - p; - if (metric == 2) - return abs(diff.x) + abs(diff.y) + abs(diff.z); // Manhattan distance - if (metric == 3) - return max(max(abs(diff.x), abs(diff.y)), abs(diff.z)); // Chebyshev distance - // Either Euclidean or Distance^2 - return dot(diff, diff); -} - -float mx_worley_noise_float(vec2 p, float jitter, int style, int metric) -{ - int X, Y; - float dist; - vec2 localpos = vec2(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y)); - float sqdist = 1e6f; // Some big number for jitter > 1 (not all GPUs may be IEEE) - vec2 minpos = vec2(0,0); - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - float dist = mx_worley_distance(localpos, x, y, X, Y, jitter, metric); - vec2 cellpos = mx_worley_cell_position(x, y, X, Y, jitter) - localpos; - if(dist < sqdist) - { - sqdist = dist; - minpos = cellpos; - } - } - } - if (style == 1) - return mx_cell_noise_float(minpos + p); - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} - -vec2 mx_worley_noise_vec2(vec2 p, float jitter, int style, int metric) -{ - int X, Y; - vec2 localpos = vec2(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y)); - vec2 sqdist = vec2(1e6f, 1e6f); - vec2 minpos = vec2(0,0); - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - float dist = mx_worley_distance(localpos, x, y, X, Y, jitter, metric); - vec2 cellpos = mx_worley_cell_position(x, y, X, Y, jitter) - localpos; - if (dist < sqdist.x) - { - sqdist.y = sqdist.x; - sqdist.x = dist; - minpos = cellpos; - } - else if (dist < sqdist.y) - { - sqdist.y = dist; - } - } - } - if (style == 1) - { - vec3 tmp = mx_cell_noise_vec3(minpos + p); - return vec2(tmp.x,tmp.y); - } - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} - -vec3 mx_worley_noise_vec3(vec2 p, float jitter, int style, int metric) -{ - int X, Y; - vec2 localpos = vec2(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y)); - vec3 sqdist = vec3(1e6f, 1e6f, 1e6f); - vec2 minpos = vec2(0,0); - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - float dist = mx_worley_distance(localpos, x, y, X, Y, jitter, metric); - vec2 cellpos = mx_worley_cell_position(x, y, X, Y, jitter) - localpos; - if (dist < sqdist.x) - { - sqdist.z = sqdist.y; - sqdist.y = sqdist.x; - sqdist.x = dist; - minpos = cellpos; - } - else if (dist < sqdist.y) - { - sqdist.z = sqdist.y; - sqdist.y = dist; - } - else if (dist < sqdist.z) - { - sqdist.z = dist; - } - } - } - if (style == 1) - return mx_cell_noise_vec3(minpos + p); - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} - -float mx_worley_noise_float(vec3 p, float jitter, int style, int metric) -{ - int X, Y, Z; - vec3 localpos = vec3(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y), mx_floorfrac(p.z, Z)); - float sqdist = 1e6f; - vec3 minpos = vec3(0,0,0); - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - for (int z = -1; z <= 1; ++z) - { - float dist = mx_worley_distance(localpos, x, y, z, X, Y, Z, jitter, metric); - vec3 cellpos = mx_worley_cell_position(x, y, z, X, Y, Z, jitter) - localpos; - if(dist < sqdist) - { - sqdist = dist; - minpos = cellpos; - } - } - } - } - if (style == 1) - return mx_cell_noise_float(minpos + p); - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} - -vec2 mx_worley_noise_vec2(vec3 p, float jitter, int style, int metric) -{ - int X, Y, Z; - vec3 localpos = vec3(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y), mx_floorfrac(p.z, Z)); - vec2 sqdist = vec2(1e6f, 1e6f); - vec3 minpos = vec3(0,0,0); - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - for (int z = -1; z <= 1; ++z) - { - float dist = mx_worley_distance(localpos, x, y, z, X, Y, Z, jitter, metric); - vec3 cellpos = mx_worley_cell_position(x, y, z, X, Y, Z, jitter) - localpos; - if (dist < sqdist.x) - { - sqdist.y = sqdist.x; - sqdist.x = dist; - minpos = cellpos; - } - else if (dist < sqdist.y) - { - sqdist.y = dist; - } - } - } - } - if (style == 1) - { - vec3 tmp = mx_cell_noise_vec3(minpos + p); - return vec2(tmp.x,tmp.y); - } - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} - -vec3 mx_worley_noise_vec3(vec3 p, float jitter, int style, int metric) -{ - int X, Y, Z; - vec3 localpos = vec3(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y), mx_floorfrac(p.z, Z)); - vec3 sqdist = vec3(1e6f, 1e6f, 1e6f); - vec3 minpos = vec3(0,0,0); - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - for (int z = -1; z <= 1; ++z) - { - float dist = mx_worley_distance(localpos, x, y, z, X, Y, Z, jitter, metric); - vec3 cellpos = mx_worley_cell_position(x, y, z, X, Y, Z, jitter) - localpos; - if (dist < sqdist.x) - { - sqdist.z = sqdist.y; - sqdist.y = sqdist.x; - sqdist.x = dist; - minpos = cellpos; - } - else if (dist < sqdist.y) - { - sqdist.z = sqdist.y; - sqdist.y = dist; - } - else if (dist < sqdist.z) - { - sqdist.z = dist; - } - } - } - } - if (style == 1) - return mx_cell_noise_vec3(minpos + p); - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} -vec2 mx_transform_uv(vec2 uv, vec2 uv_scale, vec2 uv_offset) -{ - uv = uv * uv_scale + uv_offset; - return uv; -} -vec2 mx_transform_uv(vec2 uv, vec2 uv_scale, vec2 uv_offset) -{ - uv = uv * uv_scale + uv_offset; - return vec2(uv.x, 1.0 - uv.y); -} -float mx_aastep(float threshold, float value) -{ - float afwidth = length(vec2(dFdx(value), dFdy(value))) * 0.70710678118654757; - return smoothstep(threshold-afwidth, threshold+afwidth, value); -} -#include "mx_burn_float.glsl" - -void mx_burn_color3(vec3 fg, vec3 bg, float mixval, out vec3 result) -{ - float f; - mx_burn_float(fg.x, bg.x, mixval, f); result.x = f; - mx_burn_float(fg.y, bg.y, mixval, f); result.y = f; - mx_burn_float(fg.z, bg.z, mixval, f); result.z = f; -} -#include "mx_burn_float.glsl" - -void mx_burn_color4(vec4 fg, vec4 bg, float mixval, out vec4 result) -{ - float f; - mx_burn_float(fg.x, bg.x, mixval, f); result.x = f; - mx_burn_float(fg.y, bg.y, mixval, f); result.y = f; - mx_burn_float(fg.z, bg.z, mixval, f); result.z = f; - mx_burn_float(fg.w, bg.w, mixval, f); result.w = f; -} -void mx_burn_float(float fg, float bg, float mixval, out float result) -{ - if (abs(fg) < M_FLOAT_EPS) - { - result = 0.0; - return; - } - result = mixval*(1.0 - ((1.0 - bg) / fg)) + ((1.0-mixval)*bg); -} -#include "lib/mx_noise.glsl" - -void mx_cellnoise2d_float(vec2 texcoord, out float result) -{ - result = mx_cell_noise_float(texcoord); -} -#include "lib/mx_noise.glsl" - -void mx_cellnoise3d_float(vec3 position, out float result) -{ - result = mx_cell_noise_float(position); -} -void mx_creatematrix_vector3_matrix33(vec3 in1, vec3 in2, vec3 in3, out mat3 result) -{ - result = mat3(in1.x, in1.y, in1.z, - in2.x, in2.y, in2.z, - in3.x, in3.y, in3.z); -} -void mx_creatematrix_vector3_matrix44(vec3 in1, vec3 in2, vec3 in3, vec3 in4, out mat4 result) -{ - result = mat4(in1.x, in1.y, in1.z, 0.0, - in2.x, in2.y, in2.z, 0.0, - in3.x, in3.y, in3.z, 0.0, - in4.x, in4.y, in4.z, 1.0); -} -void mx_creatematrix_vector4_matrix44(vec4 in1, vec4 in2, vec4 in3, vec4 in4, out mat4 result) -{ - result = mat4(in1.x, in1.y, in1.z, in1.w, - in2.x, in2.y, in2.z, in2.w, - in3.x, in3.y, in3.z, in3.w, - in4.x, in4.y, in4.z, in4.w); -} -void mx_disjointover_color4(vec4 fg, vec4 bg, float mixval, out vec4 result) -{ - float summedAlpha = fg.w + bg.w; - - if (summedAlpha <= 1.0) - { - result.xyz = fg.xyz + bg.xyz; - } - else - { - if (abs(bg.w) < M_FLOAT_EPS) - { - result.xyz = vec3(0.0); - } - else - { - float x = (1.0 - fg.w) / bg.w; - result.xyz = fg.xyz + bg.xyz * x; - } - } - result.w = min(summedAlpha, 1.0); - - result.xyz = result.xyz * mixval + (1.0 - mixval) * bg.xyz; - result.w = result.w * mixval + (1.0 - mixval) * bg.w; -} -#include "mx_dodge_float.glsl" - -void mx_dodge_color3(vec3 fg, vec3 bg, float mixval, out vec3 result) -{ - float f; - mx_dodge_float(fg.x, bg.x, mixval, f); result.x = f; - mx_dodge_float(fg.y, bg.y, mixval, f); result.y = f; - mx_dodge_float(fg.z, bg.z, mixval, f); result.z = f; -} -#include "mx_dodge_float.glsl" - -void mx_dodge_color4(vec4 fg , vec4 bg , float mixval, out vec4 result) -{ - float f; - mx_dodge_float(fg.x, bg.x, mixval, f); result.x = f; - mx_dodge_float(fg.y, bg.y, mixval, f); result.y = f; - mx_dodge_float(fg.z, bg.z, mixval, f); result.z = f; - mx_dodge_float(fg.w, bg.w, mixval, f); result.w = f; -} -void mx_dodge_float(float fg, float bg, float mixval, out float result) -{ - if (abs(1.0 - fg) < M_FLOAT_EPS) - { - result = 0.0; - return; - } - result = mixval*(bg / (1.0 - fg)) + ((1.0-mixval)*bg); -} -#include "lib/mx_noise.glsl" - -void mx_fractal2d_float(float amplitude, int octaves, float lacunarity, float diminish, vec2 texcoord, out float result) -{ - float value = mx_fractal2d_noise_float(texcoord, octaves, lacunarity, diminish); - result = value * amplitude; -} -#include "lib/mx_noise.glsl" - -void mx_fractal2d_vector2(vec2 amplitude, int octaves, float lacunarity, float diminish, vec2 texcoord, out vec2 result) -{ - vec2 value = mx_fractal2d_noise_vec2(texcoord, octaves, lacunarity, diminish); - result = value * amplitude; -} -#include "lib/mx_noise.glsl" - -void mx_fractal2d_vector3(vec3 amplitude, int octaves, float lacunarity, float diminish, vec2 texcoord, out vec3 result) -{ - vec3 value = mx_fractal2d_noise_vec3(texcoord, octaves, lacunarity, diminish); - result = value * amplitude; -} -#include "lib/mx_noise.glsl" - -void mx_fractal2d_vector4(vec4 amplitude, int octaves, float lacunarity, float diminish, vec2 texcoord, out vec4 result) -{ - vec4 value = mx_fractal2d_noise_vec4(texcoord, octaves, lacunarity, diminish); - result = value * amplitude; -} -#include "lib/mx_noise.glsl" - -void mx_fractal3d_float(float amplitude, int octaves, float lacunarity, float diminish, vec3 position, out float result) -{ - float value = mx_fractal3d_noise_float(position, octaves, lacunarity, diminish); - result = value * amplitude; -} -#include "lib/mx_noise.glsl" - -void mx_fractal3d_vector2(vec2 amplitude, int octaves, float lacunarity, float diminish, vec3 position, out vec2 result) -{ - vec2 value = mx_fractal3d_noise_vec2(position, octaves, lacunarity, diminish); - result = value * amplitude; -} -#include "lib/mx_noise.glsl" - -void mx_fractal3d_vector3(vec3 amplitude, int octaves, float lacunarity, float diminish, vec3 position, out vec3 result) -{ - vec3 value = mx_fractal3d_noise_vec3(position, octaves, lacunarity, diminish); - result = value * amplitude; -} -#include "lib/mx_noise.glsl" - -void mx_fractal3d_vector4(vec4 amplitude, int octaves, float lacunarity, float diminish, vec3 position, out vec4 result) -{ - vec4 value = mx_fractal3d_noise_vec4(position, octaves, lacunarity, diminish); - result = value * amplitude; -} -void mx_heighttonormal_vector3(float height, float scale, vec2 texcoord, out vec3 result) -{ - // Scale factor for parity with traditional Sobel filtering. - const float SOBEL_SCALE_FACTOR = 1.0 / 16.0; - - // Compute screen-space gradients of the heightfield and texture coordinates. - vec2 dHdS = vec2(dFdx(height), dFdy(height)) * scale * SOBEL_SCALE_FACTOR; - vec2 dUdS = vec2(dFdx(texcoord.x), dFdy(texcoord.x)); - vec2 dVdS = vec2(dFdx(texcoord.y), dFdy(texcoord.y)); - - // Construct a screen-space tangent frame. - vec3 tangent = vec3(dUdS.x, dVdS.x, dHdS.x); - vec3 bitangent = vec3(dUdS.y, dVdS.y, dHdS.y); - vec3 n = cross(tangent, bitangent); - - // Handle invalid and mirrored texture coordinates. - if (dot(n, n) < M_FLOAT_EPS * M_FLOAT_EPS) - { - n = vec3(0, 0, 1); - } - else if (n.z < 0.0) - { - n *= -1.0; - } - - // Normalize and encode the results. - result = normalize(n) * 0.5 + 0.5; -} -#include "lib/$fileTransformUv" -#include "lib/mx_hextile.glsl" - -// Morten S. Mikkelsen, Practical Real-Time Hex-Tiling, Journal of Computer Graphics -// Techniques (JCGT), vol. 11, no. 2, 77-94, 2022 -// http://jcgt.org/published/0011/03/05/ -void mx_hextiledimage_color3( - $texSamplerSignature, - vec3 default_value, - vec2 tex_coord, - vec2 tiling, - float rotation, - vec2 rotation_range, - float scale, - vec2 scale_range, - float offset, - vec2 offset_range, - float falloff, - float falloff_contrast, - vec3 lumacoeffs, - out vec3 result -) -{ - vec2 coord = mx_transform_uv(tex_coord, tiling, vec2(0.0)); - - HextileData tile_data = mx_hextile_coord(coord, rotation, rotation_range, scale, scale_range, offset, offset_range); - - vec3 c1 = textureGrad($texSamplerSampler2D, tile_data.coord1, tile_data.ddx1, tile_data.ddy1).rgb; - vec3 c2 = textureGrad($texSamplerSampler2D, tile_data.coord2, tile_data.ddx2, tile_data.ddy2).rgb; - vec3 c3 = textureGrad($texSamplerSampler2D, tile_data.coord3, tile_data.ddx3, tile_data.ddy3).rgb; - - // luminance as weights - vec3 cw = vec3(dot(c1, lumacoeffs), dot(c2, lumacoeffs), dot(c3, lumacoeffs)); - cw = mix(vec3(1.0), cw, vec3(falloff_contrast)); - - // blend weights - vec3 w = cw * pow(tile_data.weights, vec3(7.0)); - w /= (w.x + w.y + w.z); - - // apply s-curve gain - if (falloff != 0.5) - { - w.x = mx_schlick_gain(w.x, falloff); - w.y = mx_schlick_gain(w.y, falloff); - w.z = mx_schlick_gain(w.z, falloff); - w /= (w.x + w.y + w.z); - } - - // blend - result = vec3(w.x * c1 + w.y * c2 + w.z * c3); -} - -void mx_hextiledimage_color4( - $texSamplerSignature, - vec4 default_value, - vec2 tex_coord, - vec2 tiling, - float rotation, - vec2 rotation_range, - float scale, - vec2 scale_range, - float offset, - vec2 offset_range, - float falloff, - float falloff_contrast, - vec3 lumacoeffs, - out vec4 result -) -{ - vec2 coord = mx_transform_uv(tex_coord, tiling, vec2(0.0)); - - HextileData tile_data = mx_hextile_coord(coord, rotation, rotation_range, scale, scale_range, offset, offset_range); - - vec4 c1 = textureGrad($texSamplerSampler2D, tile_data.coord1, tile_data.ddx1, tile_data.ddy1); - vec4 c2 = textureGrad($texSamplerSampler2D, tile_data.coord2, tile_data.ddx2, tile_data.ddy2); - vec4 c3 = textureGrad($texSamplerSampler2D, tile_data.coord3, tile_data.ddx3, tile_data.ddy3); - - // luminance as weights - vec3 cw = vec3(dot(c1.rgb, lumacoeffs), dot(c2.rgb, lumacoeffs), dot(c3.rgb, lumacoeffs)); - cw = mix(vec3(1.0), cw, vec3(falloff_contrast)); - - // blend weights - vec3 w = cw * pow(tile_data.weights, vec3(7.0)); - w /= (w.x + w.y + w.z); - - // alpha - float a = (c1.a + c2.a + c3.a) / 3.0; - - // apply s-curve gain - if (falloff != 0.5) - { - w.x = mx_schlick_gain(w.x, falloff); - w.y = mx_schlick_gain(w.y, falloff); - w.z = mx_schlick_gain(w.z, falloff); - w /= (w.x + w.y + w.z); - a = mx_schlick_gain(a, falloff); - } - - // blend - result.rgb = vec3(w.x * c1 + w.y * c2 + w.z * c3); - result.a = a; -} -#include "lib/$fileTransformUv" -#include "lib/mx_hextile.glsl" -#include "lib/mx_geometry.glsl" - -// Morten S. Mikkelsen, Practical Real-Time Hex-Tiling, Journal of Computer Graphics -// Techniques (JCGT), vol. 11, no. 2, 77-94, 2022 -// http://jcgt.org/published/0011/03/05/ -void mx_hextilednormalmap_vector3( - $texSamplerSignature, - vec3 default_value, - vec2 tex_coord, - vec2 tiling, - float rotation, - vec2 rotation_range, - float scale, - vec2 scale_range, - float offset, - vec2 offset_range, - float falloff, - float strength, - bool flip_g, - vec3 N, - vec3 T, - vec3 B, - out vec3 result -) -{ - vec2 coord = mx_transform_uv(tex_coord, tiling, vec2(0.0)); - - HextileData tile_data = mx_hextile_coord(coord, rotation, rotation_range, scale, scale_range, offset, offset_range); - - vec3 nm1 = textureGrad($texSamplerSampler2D, tile_data.coord1, tile_data.ddx1, tile_data.ddy1).xyz; - vec3 nm2 = textureGrad($texSamplerSampler2D, tile_data.coord2, tile_data.ddx2, tile_data.ddy2).xyz; - vec3 nm3 = textureGrad($texSamplerSampler2D, tile_data.coord3, tile_data.ddx3, tile_data.ddy3).xyz; - - nm1.y = flip_g ? 1.0 - nm1.y : nm1.y; - nm2.y = flip_g ? 1.0 - nm2.y : nm2.y; - nm3.y = flip_g ? 1.0 - nm3.y : nm3.y; - - // normalmap to shading normal - nm1 = 2.0 * nm1 - 1.0; - nm2 = 2.0 * nm2 - 1.0; - nm3 = 2.0 * nm3 - 1.0; - mat3 tangent_rot_mat1 = mx_axis_rotation_matrix(N, -tile_data.rot_radian1); - mat3 tangent_rot_mat2 = mx_axis_rotation_matrix(N, -tile_data.rot_radian2); - mat3 tangent_rot_mat3 = mx_axis_rotation_matrix(N, -tile_data.rot_radian3); - vec3 T1 = tangent_rot_mat1 * T * strength; - vec3 T2 = tangent_rot_mat2 * T * strength; - vec3 T3 = tangent_rot_mat3 * T * strength; - vec3 B1 = tangent_rot_mat1 * B * strength; - vec3 B2 = tangent_rot_mat2 * B * strength; - vec3 B3 = tangent_rot_mat3 * B * strength; - vec3 N1 = normalize(T1 * nm1.x + B1 * nm1.y + N * nm1.z); - vec3 N2 = normalize(T2 * nm2.x + B2 * nm2.y + N * nm2.z); - vec3 N3 = normalize(T3 * nm3.x + B3 * nm3.y + N * nm3.z); - - // blend weights - vec3 w = pow(tile_data.weights, vec3(7.0)); - w /= (w.x + w.y + w.z); - - // apply s-curve gain - if (falloff != 0.5) - { - w.x = mx_schlick_gain(w.x, falloff); - w.y = mx_schlick_gain(w.y, falloff); - w.z = mx_schlick_gain(w.z, falloff); - w /= (w.x + w.y + w.z); - } - - // blend - result = mx_gradient_blend_3_normals(N, N1, w.x, N2, w.y, N3, w.z); -} -#include "lib/mx_hsv.glsl" - -void mx_hsvtorgb_color3(vec3 _in, out vec3 result) -{ - result = mx_hsvtorgb(_in); -} -#include "lib/mx_hsv.glsl" - -void mx_hsvtorgb_color4(vec4 _in, out vec4 result) -{ - result = vec4(mx_hsvtorgb(_in.rgb), 1.0); -} -#include "lib/$fileTransformUv" - -void mx_image_color3($texSamplerSignature, int layer, vec3 defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out vec3 result) -{ - vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset); - result = texture($texSamplerSampler2D, uv).rgb; -} -#include "lib/$fileTransformUv" - -void mx_image_color4($texSamplerSignature, int layer, vec4 defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out vec4 result) -{ - vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset); - result = texture($texSamplerSampler2D, uv); -} -#include "lib/$fileTransformUv" - -void mx_image_float($texSamplerSignature, int layer, float defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out float result) -{ - vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset); - result = texture($texSamplerSampler2D, uv).r; -} -#include "lib/$fileTransformUv" - -void mx_image_vector2($texSamplerSignature, int layer, vec2 defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out vec2 result) -{ - vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset); - result = texture($texSamplerSampler2D, uv).rg; -} -#include "lib/$fileTransformUv" - -void mx_image_vector3($texSamplerSignature, int layer, vec3 defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out vec3 result) -{ - vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset); - result = texture($texSamplerSampler2D, uv).rgb; -} -#include "lib/$fileTransformUv" - -void mx_image_vector4($texSamplerSignature, int layer, vec4 defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out vec4 result) -{ - vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset); - result = texture($texSamplerSampler2D, uv); -} -void mx_luminance_color3(vec3 _in, vec3 lumacoeffs, out vec3 result) -{ - result = vec3(dot(_in, lumacoeffs)); -} -void mx_luminance_color4(vec4 _in, vec3 lumacoeffs, out vec4 result) -{ - result = vec4(vec3(dot(_in.rgb, lumacoeffs)), _in.a); -} -void mx_mix_surfaceshader(surfaceshader fg, surfaceshader bg, float w, out surfaceshader returnshader) -{ - returnshader.color = mix(bg.color, fg.color, w); - returnshader.transparency = mix(bg.transparency, fg.transparency, w); -} -#include "lib/mx_noise.glsl" - -void mx_noise2d_float(float amplitude, float pivot, vec2 texcoord, out float result) -{ - float value = mx_perlin_noise_float(texcoord); - result = value * amplitude + pivot; -} -#include "lib/mx_noise.glsl" - -void mx_noise2d_vector2(vec2 amplitude, float pivot, vec2 texcoord, out vec2 result) -{ - vec3 value = mx_perlin_noise_vec3(texcoord); - result = value.xy * amplitude + pivot; -} -#include "lib/mx_noise.glsl" - -void mx_noise2d_vector3(vec3 amplitude, float pivot, vec2 texcoord, out vec3 result) -{ - vec3 value = mx_perlin_noise_vec3(texcoord); - result = value * amplitude + pivot; -} -#include "lib/mx_noise.glsl" - -void mx_noise2d_vector4(vec4 amplitude, float pivot, vec2 texcoord, out vec4 result) -{ - vec3 xyz = mx_perlin_noise_vec3(texcoord); - float w = mx_perlin_noise_float(texcoord + vec2(19, 73)); - result = vec4(xyz, w) * amplitude + pivot; -} -#include "lib/mx_noise.glsl" - -void mx_noise3d_float(float amplitude, float pivot, vec3 position, out float result) -{ - float value = mx_perlin_noise_float(position); - result = value * amplitude + pivot; -} -#include "lib/mx_noise.glsl" - -void mx_noise3d_vector2(vec2 amplitude, float pivot, vec3 position, out vec2 result) -{ - vec3 value = mx_perlin_noise_vec3(position); - result = value.xy * amplitude + pivot; -} -#include "lib/mx_noise.glsl" - -void mx_noise3d_vector3(vec3 amplitude, float pivot, vec3 position, out vec3 result) -{ - vec3 value = mx_perlin_noise_vec3(position); - result = value * amplitude + pivot; -} -#include "lib/mx_noise.glsl" - -void mx_noise3d_vector4(vec4 amplitude, float pivot, vec3 position, out vec4 result) -{ - vec3 xyz = mx_perlin_noise_vec3(position); - float w = mx_perlin_noise_float(position + vec3(19, 73, 29)); - result = vec4(xyz, w) * amplitude + pivot; -} -void mx_normalmap_vector2(vec3 value, vec2 normal_scale, vec3 N, vec3 T, vec3 B, out vec3 result) -{ - value = (dot(value, value) == 0.0) ? vec3(0.0, 0.0, 1.0) : value * 2.0 - 1.0; - value = T * value.x * normal_scale.x + - B * value.y * normal_scale.y + - N * value.z; - result = normalize(value); -} - -void mx_normalmap_float(vec3 value, float normal_scale, vec3 N, vec3 T, vec3 B, out vec3 result) -{ - mx_normalmap_vector2(value, vec2(normal_scale), N, T, B, result); -} -void mx_premult_color4(vec4 _in, out vec4 result) -{ - result = vec4(_in.rgb * _in.a, _in.a); -} -void mx_ramplr_float(float valuel, float valuer, vec2 texcoord, out float result) -{ - result = mix (valuel, valuer, clamp(texcoord.x, 0.0, 1.0) ); -} -void mx_ramplr_vector2(vec2 valuel, vec2 valuer, vec2 texcoord, out vec2 result) -{ - result = mix (valuel, valuer, clamp(texcoord.x, 0.0, 1.0) ); -} -void mx_ramplr_vector3(vec3 valuel, vec3 valuer, vec2 texcoord, out vec3 result) -{ - result = mix (valuel, valuer, clamp(texcoord.x, 0.0, 1.0) ); -} -void mx_ramplr_vector4(vec4 valuel, vec4 valuer, vec2 texcoord, out vec4 result) -{ - result = mix (valuel, valuer, clamp(texcoord.x, 0.0, 1.0) ); -} -void mx_ramptb_float(float valuet, float valueb, vec2 texcoord, out float result) -{ - result = mix (valuet, valueb, clamp(texcoord.y, 0.0, 1.0) ); -} -void mx_ramptb_vector2(vec2 valuet, vec2 valueb, vec2 texcoord, out vec2 result) -{ - result = mix (valuet, valueb, clamp(texcoord.y, 0.0, 1.0) ); -} -void mx_ramptb_vector3(vec3 valuet, vec3 valueb, vec2 texcoord, out vec3 result) -{ - result = mix (valuet, valueb, clamp(texcoord.y, 0.0, 1.0) ); -} -void mx_ramptb_vector4(vec4 valuet, vec4 valueb, vec2 texcoord, out vec4 result) -{ - result = mix (valuet, valueb, clamp(texcoord.y, 0.0, 1.0) ); -} -#include "lib/mx_hsv.glsl" - -void mx_rgbtohsv_color3(vec3 _in, out vec3 result) -{ - result = mx_rgbtohsv(_in); -} -#include "lib/mx_hsv.glsl" - -void mx_rgbtohsv_color4(vec4 _in, out vec4 result) -{ - result = vec4(mx_rgbtohsv(_in.rgb), 1.0); -} -void mx_rotate_vector2(vec2 _in, float amount, out vec2 result) -{ - float rotationRadians = mx_radians(amount); - float sa = mx_sin(rotationRadians); - float ca = mx_cos(rotationRadians); - result = vec2(ca*_in.x + sa*_in.y, -sa*_in.x + ca*_in.y); -} -mat4 mx_rotationMatrix(vec3 axis, float angle) -{ - axis = normalize(axis); - float s = mx_sin(angle); - float c = mx_cos(angle); - float oc = 1.0 - c; - - return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, - oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, - oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, - 0.0, 0.0, 0.0, 1.0); -} - -void mx_rotate_vector3(vec3 _in, float amount, vec3 axis, out vec3 result) -{ - float rotationRadians = mx_radians(amount); - mat4 m = mx_rotationMatrix(axis, rotationRadians); - result = (m * vec4(_in, 1.0)).xyz; -} -void mx_smoothstep_float(float val, float low, float high, out float result) -{ - if (val >= high) - result = 1.0; - else if (val <= low) - result = 0.0; - else - result = smoothstep(low, high, val); -} -#include "mx_aastep.glsl" - -void mx_splitlr_float(float valuel, float valuer, float center, vec2 texcoord, out float result) -{ - result = mix(valuel, valuer, mx_aastep(center, texcoord.x)); -} -#include "mx_aastep.glsl" - -void mx_splitlr_vector2(vec2 valuel, vec2 valuer, float center, vec2 texcoord, out vec2 result) -{ - result = mix(valuel, valuer, mx_aastep(center, texcoord.x)); -} -#include "mx_aastep.glsl" - -void mx_splitlr_vector3(vec3 valuel, vec3 valuer, float center, vec2 texcoord, out vec3 result) -{ - result = mix(valuel, valuer, mx_aastep(center, texcoord.x)); -} -#include "mx_aastep.glsl" - -void mx_splitlr_vector4(vec4 valuel, vec4 valuer, float center, vec2 texcoord, out vec4 result) -{ - result = mix(valuel, valuer, mx_aastep(center, texcoord.x)); -} -#include "mx_aastep.glsl" - -void mx_splittb_float(float valuet, float valueb, float center, vec2 texcoord, out float result) -{ - result = mix(valuet, valueb, mx_aastep(center, texcoord.y)); -} -#include "mx_aastep.glsl" - -void mx_splittb_vector2(vec2 valuet, vec2 valueb, float center, vec2 texcoord, out vec2 result) -{ - result = mix(valuet, valueb, mx_aastep(center, texcoord.y)); -} -#include "mx_aastep.glsl" - -void mx_splittb_vector3(vec3 valuet, vec3 valueb, float center, vec2 texcoord, out vec3 result) -{ - result = mix(valuet, valueb, mx_aastep(center, texcoord.y)); -} -#include "mx_aastep.glsl" - -void mx_splittb_vector4(vec4 valuet, vec4 valueb, float center, vec2 texcoord, out vec4 result) -{ - result = mix(valuet, valueb, mx_aastep(center, texcoord.y)); -} - -void mx_surface_unlit(float emission, vec3 emission_color, float transmission, vec3 transmission_color, float opacity, out surfaceshader result) -{ - result.color = emission * emission_color * opacity; - result.transparency = mix(vec3(1.0), transmission * transmission_color, opacity); -} -void mx_transformmatrix_vector2M3(vec2 val, mat3 transform, out vec2 result) -{ - vec3 res = transform * vec3(val, 1.0); - result = res.xy; -} -void mx_transformmatrix_vector3M4(vec3 val, mat4 transform, out vec3 result) -{ - vec4 res = transform * vec4(val, 1.0); - result = res.xyz; -} -void mx_unpremult_color4(vec4 _in, out vec4 result) -{ - result = vec4(_in.rgb / _in.a, _in.a); -} -#include "lib/mx_noise.glsl" - -void mx_worleynoise2d_float(vec2 texcoord, float jitter, int style, out float result) -{ - result = mx_worley_noise_float(texcoord, jitter, style, 0); -} -#include "lib/mx_noise.glsl" - -void mx_worleynoise2d_vector2(vec2 texcoord, float jitter, int style, out vec2 result) -{ - result = mx_worley_noise_vec2(texcoord, jitter, style, 0); -} -#include "lib/mx_noise.glsl" - -void mx_worleynoise2d_vector3(vec2 texcoord, float jitter, int style, out vec3 result) -{ - result = mx_worley_noise_vec3(texcoord, jitter, style, 0); -} -#include "lib/mx_noise.glsl" - -void mx_worleynoise3d_float(vec3 position, float jitter, int style, out float result) -{ - result = mx_worley_noise_float(position, jitter, style, 0); -} -#include "lib/mx_noise.glsl" - -void mx_worleynoise3d_vector2(vec3 position, float jitter, int style, out vec2 result) -{ - result = mx_worley_noise_vec2(position, jitter, style, 0); -} -#include "lib/mx_noise.glsl" - -void mx_worleynoise3d_vector3(vec3 position, float jitter, int style, out vec3 result) -{ - result = mx_worley_noise_vec3(position, jitter, style, 0); -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#define M_FLOAT_EPS 1e-8 - -#define mx_sin metal::sin -#define mx_cos metal::cos -#define mx_tan metal::tan -#define mx_asin metal::asin -#define mx_acos metal::acos - -float mx_square(float x) -{ - return x*x; -} - -vec2 mx_square(vec2 x) -{ - return x*x; -} - -vec3 mx_square(vec3 x) -{ - return x*x; -} - -float mx_inversesqrt(float x) -{ - return metal::rsqrt(x); -} - -template -T1 mx_mod(T1 x, T2 y) -{ - return x - y * floor(x/y); -} - -float3x3 mx_inverse(float3x3 m) -{ - float n11 = m[0][0], n12 = m[1][0], n13 = m[2][0]; - float n21 = m[0][1], n22 = m[1][1], n23 = m[2][1]; - float n31 = m[0][2], n32 = m[1][2], n33 = m[2][2]; - - float det = metal::determinant(m); - float idet = 1.0f / det; - - float3x3 ret; - - ret[0][0] = idet * (n22 * n33 - n32 * n23); - ret[1][0] = idet * (n32 * n13 - n12 * n33); - ret[2][0] = idet * (n12 * n23 - n22 * n13); - - ret[0][1] = idet * (n31 * n23 - n21 * n33); - ret[1][1] = idet * (n11 * n33 - n31 * n13); - ret[2][1] = idet * (n21 * n13 - n11 * n23); - - ret[0][2] = idet * (n21 * n32 - n31 * n22); - ret[1][2] = idet * (n31 * n12 - n11 * n32); - ret[2][2] = idet * (n11 * n22 - n21 * n12); - - return ret; -} - -float4x4 mx_inverse(float4x4 m) -{ - float n11 = m[0][0], n12 = m[1][0], n13 = m[2][0], n14 = m[3][0]; - float n21 = m[0][1], n22 = m[1][1], n23 = m[2][1], n24 = m[3][1]; - float n31 = m[0][2], n32 = m[1][2], n33 = m[2][2], n34 = m[3][2]; - float n41 = m[0][3], n42 = m[1][3], n43 = m[2][3], n44 = m[3][3]; - - float t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44; - float t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44; - float t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44; - float t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; - - float det = metal::determinant(m); - float idet = 1.0f / det; - - float4x4 ret; - - ret[0][0] = t11 * idet; - ret[0][1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * idet; - ret[0][2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * idet; - ret[0][3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * idet; - - ret[1][0] = t12 * idet; - ret[1][1] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * idet; - ret[1][2] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * idet; - ret[1][3] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * idet; - - ret[2][0] = t13 * idet; - ret[2][1] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * idet; - ret[2][2] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * idet; - ret[2][3] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * idet; - - ret[3][0] = t14 * idet; - ret[3][1] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * idet; - ret[3][2] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * idet; - ret[3][3] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * idet; - - return ret; -} - -float mx_atan(float y_over_x) -{ - return metal::atan(y_over_x); -} - -float mx_atan(float y, float x) -{ - return metal::atan2(y, x); -} - -vec2 mx_atan(vec2 y, vec2 x) -{ - return metal::atan2(y, x); -} - -vec3 mx_atan(vec3 y, vec3 x) -{ - return metal::atan2(y, x); -} - -vec4 mx_atan(vec4 y, vec4 x) -{ - return metal::atan2(y, x); -} - -float mx_radians(float degree) -{ - return (degree * M_PI_F / 180.0f); -} - -vec2 mx_radians(vec2 degree) -{ - return (degree * M_PI_F / 180.0f); -} -float3x3 operator+(float3x3 a, float b) -{ - return a + float3x3(b,b,b,b,b,b,b,b,b); -} - -float4x4 operator+(float4x4 a, float b) -{ - return a + float4x4(b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b); -} - -float3x3 operator-(float3x3 a, float b) -{ - return a - float3x3(b,b,b,b,b,b,b,b,b); -} - -float4x4 operator-(float4x4 a, float b) -{ - return a - float4x4(b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b); -} - -float3x3 operator/(float3x3 a, float3x3 b) -{ - for(int i = 0; i < 3; ++i) - for(int j = 0; j < 3; ++j) - a[i][j] /= b[i][j]; - - return a; -} - -float4x4 operator/(float4x4 a, float4x4 b) -{ - for(int i = 0; i < 4; ++i) - for(int j = 0; j < 4; ++j) - a[i][j] /= b[i][j]; - - return a; -} - -float3x3 operator/(float3x3 a, float b) -{ - for(int i = 0; i < 3; ++i) - for(int j = 0; j < 3; ++j) - a[i][j] /= b; - - return a; -} - -float4x4 operator/(float4x4 a, float b) -{ - for(int i = 0; i < 4; ++i) - for(int j = 0; j < 4; ++j) - a[i][j] /= b; - - return a; -} -struct MetalTexture -{ - texture2d tex; - sampler s; - - // needed for Storm - int get_width() { return tex.get_width(); } - int get_height() { return tex.get_height(); } - int get_num_mip_levels() { return tex.get_num_mip_levels(); } -}; - -float4 texture(MetalTexture mtlTex, float2 uv) -{ - return mtlTex.tex.sample(mtlTex.s, uv); -} - -float4 textureLod(MetalTexture mtlTex, float2 uv, float lod) -{ - return mtlTex.tex.sample(mtlTex.s, uv, level(lod)); -} - -float4 textureGrad(MetalTexture mtlTex, float2 uv, float2 dx, float2 dy) -{ - return mtlTex.tex.sample(mtlTex.s, uv, gradient2d(dx, dy)); -} - -int2 textureSize(MetalTexture mtlTex, int mipLevel) -{ - return int2(mtlTex.tex.get_width(), mtlTex.tex.get_height()); -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Copyright Contributors to the Open Shading Language project. -// SPDX-License-Identifier: BSD-3-Clause -// https://github.com/AcademySoftwareFoundation/OpenShadingLanguage - -#pragma once -#define COLOR4_H - - -// color4 is a color + alpha -struct color4 -{ - color rgb; - float a; -}; - - - -// -// For color4, define math operators to match color -// - -color4 __operator__neg__(color4 a) -{ - return color4(-a.rgb, -a.a); -} - -color4 __operator__add__(color4 a, color4 b) -{ - return color4(a.rgb + b.rgb, a.a + b.a); -} - -color4 __operator__add__(color4 a, int b) -{ - return a + color4(color(b), b); -} - -color4 __operator__add__(color4 a, float b) -{ - return a + color4(color(b), b); -} - -color4 __operator__add__(int a, color4 b) -{ - return color4(color(a), a) + b; -} - -color4 __operator__add__(float a, color4 b) -{ - return color4(color(a), a) + b; -} - -color4 __operator__sub__(color4 a, color4 b) -{ - return color4(a.rgb - b.rgb, a.a - b.a); -} - -color4 __operator__sub__(color4 a, int b) -{ - return a - color4(color(b), b); -} - -color4 __operator__sub__(color4 a, float b) -{ - return a - color4(color(b), b); -} - -color4 __operator__sub__(int a, color4 b) -{ - return color4(color(a), a) - b; -} - -color4 __operator__sub__(float a, color4 b) -{ - return color4(color(a), a) - b; -} - -color4 __operator__mul__(color4 a, color4 b) -{ - return color4(a.rgb * b.rgb, a.a * b.a); -} - -color4 __operator__mul__(color4 a, int b) -{ - return a * color4(color(b), b); -} - -color4 __operator__mul__(color4 a, float b) -{ - return a * color4(color(b), b); -} - -color4 __operator__mul__(int a, color4 b) -{ - return color4(color(a), a) * b; -} - -color4 __operator__mul__(float a, color4 b) -{ - return color4(color(a), a) * b; -} - -color4 __operator__div__(color4 a, color4 b) -{ - return color4(a.rgb / b.rgb, a.a / b.a); -} - -color4 __operator__div__(color4 a, int b) -{ - float b_inv = 1.0 / float(b); - return a * color4(color(b_inv), b_inv); -} - -color4 __operator__div__(color4 a, float b) -{ - float b_inv = 1.0 / b; - return a * color4(color(b_inv), b_inv); -} - -color4 __operator_div__(int a, color4 b) -{ - return color4(color(a), a) / b; -} - -color4 __operator__div__(float a, color4 b) -{ - return color4(color(a), a) / b; -} - -int __operator__eq__(color4 a, color4 b) -{ - return (a.rgb == b.rgb) && (a.a == b.a); -} - -int __operator__neq__(color4 a, color4 b) -{ - return (a.rgb != b.rgb) || (a.a != b.a); -} - - - -// -// For color4, define most of the stdosl functions to match color -// - -color4 abs(color4 a) -{ - return color4(abs(a.rgb), abs(a.a)); -} - -color4 ceil(color4 a) -{ - return color4(ceil(a.rgb), ceil(a.a)); -} - -color4 round(color4 a) -{ - return color4(round(a.rgb), round(a.a)); -} - -color4 floor(color4 a) -{ - return color4(floor(a.rgb), floor(a.a)); -} - -color4 sqrt(color4 a) -{ - return color4(sqrt(a.rgb), sqrt(a.a)); -} - -color4 exp(color4 a) -{ - return color4(exp(a.rgb), exp(a.a)); -} - -color4 log(color4 a) -{ - return color4(log(a.rgb), log(a.a)); -} - -color4 log2(color4 a) -{ - return color4(log2(a.rgb), log2(a.a)); -} - -color4 mix(color4 a, color4 b, float x ) -{ - return color4(mix(a.rgb, b.rgb, x), - mix(a.a, b.a, x)); -} - -color4 mix(color4 a, color4 b, color4 x ) -{ - return color4(mix(a.rgb, b.rgb, x.rgb), - mix(a.a, b.a, x.a)); -} - -color4 smoothstep(color4 edge0, color4 edge1, color4 c) -{ - return color4(smoothstep(edge0.rgb, edge1.rgb, c.rgb), - smoothstep(edge0.a, edge1.a, c.a)); -} - -color4 smoothstep(float edge0, float edge1, color4 c) -{ - return smoothstep(color4(color(edge0), edge0), color4(color(edge1), edge1), c); -} - -color4 clamp(color4 c, color4 minval, color4 maxval) -{ - return color4(clamp(c.rgb, minval.rgb, maxval.rgb), - clamp(c.a, minval.a, maxval.a)); -} - -color4 clamp(color4 c, float minval, float maxval) -{ - return clamp(c, color4(color(minval), minval), color4(color(maxval), maxval)); -} - -color4 max(color4 a, color4 b) -{ - return color4(max(a.rgb, b.rgb), - max(a.a, b.a)); -} - -color4 max(color4 a, float b) -{ - return color4(max(a.rgb, b), - max(a.a, b)); -} - -color4 min(color4 a, color4 b) -{ - return color4(min(a.rgb, b.rgb), - min(a.a, b.a)); -} - -color4 min(color4 a, float b) -{ - return color4(min(a.rgb, b), - min(a.a, b)); -} - -color4 mod(color4 a, color4 b) -{ - return color4(mod(a.rgb, b.rgb), - mod(a.a, b.a)); -} - -color4 mod(color4 a, float b) -{ - return mod(a, color4(color(b), b)); -} - -color4 fmod(color4 a, color4 b) -{ - return color4(fmod(a.rgb, b.rgb), - fmod(a.a, b.a)); -} - -color4 fmod(color4 a, int b) -{ - return fmod(a, color4(color(b), b)); -} - -color4 fmod(color4 a, float b) -{ - return fmod(a, color4(color(b), b)); -} - -color4 pow(color4 base, color4 power) -{ - return color4(pow(base.rgb, power.rgb), pow(base.a, power.a)); -} - -color4 pow(color4 base, float power) -{ - return pow(base, color4(color(power), power)); -} - -color4 sign(color4 a) -{ - return color4(sign(a.rgb), - sign(a.a)); -} - -color4 sin(color4 a) -{ - return color4(sin(a.rgb), - sin(a.a)); -} - -color4 cos(color4 a) -{ - return color4(cos(a.rgb), - cos(a.a)); -} - -color4 tan(color4 a) -{ - return color4(tan(a.rgb), - tan(a.a)); -} - -color4 asin(color4 a) -{ - return color4(asin(a.rgb), - asin(a.a)); -} - -color4 acos(color4 a) -{ - return color4(acos(a.rgb), - acos(a.a)); -} - -color4 atan2(color4 a, float f) -{ - return color4(atan2(a.rgb, f), - atan2(a.a, f)); -} - -color4 atan2(color4 a, color4 b) -{ - return color4(atan2(a.rgb, b.rgb), - atan2(a.a, b.a)); -} - - -color4 transformc (string fromspace, string tospace, color4 C) -{ - return color4 (transformc (fromspace, tospace, C.rgb), C.a); -} -// Copyright Contributors to the Open Shading Language project. -// SPDX-License-Identifier: BSD-3-Clause -// https://github.com/AcademySoftwareFoundation/OpenShadingLanguage - - -#pragma once -#define MATRIX33_H - - -struct matrix33 -{ - matrix m; -}; - -int isValidAs33(matrix m44) -{ - return m44[0][3] == 0 && - m44[1][3] == 0 && - m44[2][3] == 0 && - m44[3][0] == 0 && - m44[3][1] == 0 && - m44[3][2] == 0 && - m44[3][3] == 1; -} - -matrix matrix33To44 (matrix33 m33) -{ - return m33.m; -} - -// Convert an arbitrary m44 to m33 by removing the translation -//QUESTION: should we check if it's valid to represent the 4x4 as a 3x3? -matrix33 matrix44To33 (matrix m44) -{ - matrix33 m33; - m33.m = m44; - m33.m[0][3] = 0; - m33.m[1][3] = 0; - m33.m[2][3] = 0; - m33.m[3][0] = 0; - m33.m[3][1] = 0; - m33.m[3][2] = 0; - m33.m[3][3] = 1; - - return m33; -} - -matrix33 __operator__neg__(matrix33 a) -{ - matrix33 m33; - m33.m = -a.m; - return m33; -} - - -matrix33 __operator__mul__(int a, matrix33 b) -{ - matrix33 m33; - m33.m = a * b.m; - return m33; -} - -matrix33 __operator__mul__(float a, matrix33 b) -{ - matrix33 m33; - m33.m = a * b.m; - return m33; -} - -matrix33 __operator__mul__(matrix33 a, int b) -{ - matrix33 m33; - m33.m = a.m * b; - return m33; -} - -matrix33 __operator__mul__(matrix33 a, float b) -{ - matrix33 m33; - m33.m = a.m * b; - return m33; -} - -matrix33 __operator__mul__(matrix33 a, matrix33 b) -{ - matrix33 m33; - m33.m = a.m * b.m; - return m33; -} - -matrix33 __operator__div__(int a, matrix33 b) -{ - matrix33 m33; - m33.m = a / b.m; - return m33; -} - -matrix33 __operator__div__(float a, matrix33 b) -{ - matrix33 m33; - m33.m = a / b.m; - return m33; -} - -matrix33 __operator__div__(matrix33 a, int b) -{ - matrix33 m33; - m33.m = a.m / b; - return m33; -} - -matrix33 __operator__div__(matrix33 a, float b) -{ - matrix33 m33; - m33.m = a.m / b; - return m33; -} - -matrix33 __operator__div__(matrix33 a, matrix33 b) -{ - matrix33 m33; - m33.m = a.m / b.m; - return m33; -} - -int __operator__eq__(matrix33 a, matrix33 b) -{ - return a.m == b.m; -} - -int __operator__ne__(matrix33 a, matrix33 b) -{ - return a.m != b.m; -} - -float determinant (matrix33 a) -{ - return determinant(a.m); -} - -matrix33 transpose(matrix33 a) -{ - matrix33 m33; - m33.m = transpose(a.m); - return m33; -} - -point transform(matrix33 a, point b) -{ - return transform(a.m, b); -} - -vector transform(matrix33 a, vector b) -{ - return transform(a.m, b); -} - -normal transform(matrix33 a, normal b) -{ - return transform(a.m, b); -} -// Open Shading Language : Copyright (c) 2009-2017 Sony Pictures Imageworks Inc., et al. -// https://github.com/imageworks/OpenShadingLanguage/blob/master/LICENSE -// -// MaterialX specification (c) 2017 Lucasfilm Ltd. -// http://www.materialx.org/ - -#pragma once - -#include "color4.h" -#include "vector2.h" -#include "vector4.h" -#include "matrix33.h" - -// -// Support functions for OSL implementations of the MaterialX nodes. -// - -float mx_ternary(int expr, float v1, float v2) { if (expr) return v1; else return v2; } -int mx_ternary(int expr, int v1, int v2) { if (expr) return v1; else return v2; } -color mx_ternary(int expr, color v1, color v2) { if (expr) return v1; else return v2; } -color4 mx_ternary(int expr, color4 v1, color4 v2) { if (expr) return v1; else return v2; } -vector mx_ternary(int expr, vector v1, vector v2) { if (expr) return v1; else return v2; } -vector2 mx_ternary(int expr, vector2 v1, vector2 v2) { if (expr) return v1; else return v2; } -vector4 mx_ternary(int expr, vector4 v1, vector4 v2) { if (expr) return v1; else return v2; } -matrix mx_ternary(int expr, matrix v1, matrix v2) { if (expr) return v1; else return v2; } -matrix33 mx_ternary(int expr, matrix33 v1, matrix33 v2) { if (expr) return v1; else return v2; } - - -matrix33 mx_add(matrix33 a, matrix33 b) -{ - return matrix33(matrix( - a.m[0][0]+b.m[0][0], a.m[0][1]+b.m[0][1], a.m[0][2]+b.m[0][2], 0.0, - a.m[1][0]+b.m[1][0], a.m[1][1]+b.m[1][1], a.m[1][2]+b.m[1][2], 0.0, - a.m[2][0]+b.m[2][0], a.m[2][1]+b.m[2][1], a.m[2][2]+b.m[2][2], 0.0, - 0.0, 0.0, 0.0, 1.0)); -} - -matrix33 mx_add(matrix33 a, float b) -{ - return matrix33(matrix( - a.m[0][0]+b, a.m[0][1]+b, a.m[0][2]+b, 0.0, - a.m[1][0]+b, a.m[1][1]+b, a.m[1][2]+b, 0.0, - a.m[2][0]+b, a.m[2][1]+b, a.m[2][2]+b, 0.0, - 0.0, 0.0, 0.0, 1.0)); -} - -matrix mx_add(matrix a, matrix b) -{ - return matrix( - a[0][0]+b[0][0], a[0][1]+b[0][1], a[0][2]+b[0][2], a[0][3]+b[0][3], - a[1][0]+b[1][0], a[1][1]+b[1][1], a[1][2]+b[1][2], a[1][3]+b[1][3], - a[2][0]+b[2][0], a[2][1]+b[2][1], a[2][2]+b[2][2], a[2][3]+b[2][3], - a[3][0]+b[3][0], a[3][1]+b[3][1], a[3][2]+b[3][2], a[3][3]+b[3][3]); -} - -matrix mx_add(matrix a, float b) -{ - return matrix( - a[0][0]+b, a[0][1]+b, a[0][2]+b, a[0][3]+b, - a[1][0]+b, a[1][1]+b, a[1][2]+b, a[1][3]+b, - a[2][0]+b, a[2][1]+b, a[2][2]+b, a[2][3]+b, - a[3][0]+b, a[3][1]+b, a[3][2]+b, a[3][3]+b); -} - - -matrix33 mx_subtract(matrix33 a, matrix33 b) -{ - return matrix33(matrix( - a.m[0][0]-b.m[0][0], a.m[0][1]-b.m[0][1], a.m[0][2]-b.m[0][2], 0.0, - a.m[1][0]-b.m[1][0], a.m[1][1]-b.m[1][1], a.m[1][2]-b.m[1][2], 0.0, - a.m[2][0]-b.m[2][0], a.m[2][1]-b.m[2][1], a.m[2][2]-b.m[2][2], 0.0, - 0.0, 0.0, 0.0, 1.0)); -} - -matrix33 mx_subtract(matrix33 a, float b) -{ - return matrix33(matrix( - a.m[0][0]-b, a.m[0][1]-b, a.m[0][2]-b, 0.0, - a.m[1][0]-b, a.m[1][1]-b, a.m[1][2]-b, 0.0, - a.m[2][0]-b, a.m[2][1]-b, a.m[2][2]-b, 0.0, - 0.0, 0.0, 0.0, 1.0)); -} - -matrix mx_subtract(matrix a, matrix b) -{ - return matrix( - a[0][0]-b[0][0], a[0][1]-b[0][1], a[0][2]-b[0][2], a[0][3]-b[0][3], - a[1][0]-b[1][0], a[1][1]-b[1][1], a[1][2]-b[1][2], a[1][3]-b[1][3], - a[2][0]-b[2][0], a[2][1]-b[2][1], a[2][2]-b[2][2], a[2][3]-b[2][3], - a[3][0]-b[3][0], a[3][1]-b[3][1], a[3][2]-b[3][2], a[3][3]-b[3][3]); -} - -matrix mx_subtract(matrix a, float b) -{ - return matrix( - a[0][0]-b, a[0][1]-b, a[0][2]-b, a[0][3]-b, - a[1][0]-b, a[1][1]-b, a[1][2]-b, a[1][3]-b, - a[2][0]-b, a[2][1]-b, a[2][2]-b, a[2][3]-b, - a[3][0]-b, a[3][1]-b, a[3][2]-b, a[3][3]-b); -} - - -float mx_extract(color in, int index) -{ - return in[index]; -} - -float mx_extract(color4 in, int index) -{ - if (index == 0) return in.rgb.r; - else if (index == 1) return in.rgb.g; - else if (index == 2) return in.rgb.b; - else return in.a; -} - -float mx_extract(vector2 in, int index) -{ - if (index == 0) return in.x; - else return in.y; -} - -float mx_extract(vector in, int index) -{ - return in[index]; -} - -float mx_extract(vector4 in, int index) -{ - if (index == 0) return in.x; - else if (index == 1) return in.y; - else if (index == 2) return in.z; - else return in.w; -} - - -float mx_remap(float in, float inLow, float inHigh, float outLow, float outHigh, int doClamp) -{ - float x = (in - inLow)/(inHigh-inLow); - if (doClamp == 1) { - x = clamp(x, 0, 1); - } - return outLow + (outHigh - outLow) * x; -} - -color mx_remap(color in, color inLow, color inHigh, color outLow, color outHigh, int doClamp) -{ - color x = (in - inLow) / (inHigh - inLow); - if (doClamp == 1) { - x = clamp(x, 0, 1); - } - return outLow + (outHigh - outLow) * x; -} - -color mx_remap(color in, float inLow, float inHigh, float outLow, float outHigh, int doClamp) -{ - color x = (in - inLow) / (inHigh - inLow); - if (doClamp == 1) { - x = clamp(x, 0, 1); - } - return outLow + (outHigh - outLow) * x; -} - -color4 mx_remap(color4 c, color4 inLow, color4 inHigh, color4 outLow, color4 outHigh, int doClamp) -{ - return color4(mx_remap(c.rgb, inLow.rgb, inHigh.rgb, outLow.rgb, outHigh.rgb, doClamp), - mx_remap(c.a, inLow.a, inHigh.a, outLow.a, outHigh.a, doClamp)); -} - -color4 mx_remap(color4 c, float inLow, float inHigh, float outLow, float outHigh, int doClamp) -{ - color4 c4_inLow = color4(color(inLow), inLow); - color4 c4_inHigh = color4(color(inHigh), inHigh); - color4 c4_outLow = color4(color(outLow), outLow); - color4 c4_outHigh = color4(color(outHigh), outHigh); - return mx_remap(c, c4_inLow, c4_inHigh, c4_outLow, c4_outHigh, doClamp); -} - -vector2 mx_remap(vector2 in, vector2 inLow, vector2 inHigh, vector2 outLow, vector2 outHigh, int doClamp) -{ - return vector2(mx_remap(in.x, inLow.x, inHigh.x, outLow.x, outHigh.x, doClamp), - mx_remap(in.y, inLow.y, inHigh.y, outLow.y, outHigh.y, doClamp)); -} - -vector2 mx_remap(vector2 in, float inLow, float inHigh, float outLow, float outHigh, int doClamp) -{ - return vector2(mx_remap(in.x, inLow, inHigh, outLow, outHigh, doClamp), - mx_remap(in.y, inLow, inHigh, outLow, outHigh, doClamp)); -} - -vector4 mx_remap(vector4 in, vector4 inLow, vector4 inHigh, vector4 outLow, vector4 outHigh, int doClamp) -{ - return vector4(mx_remap(in.x, inLow.x, inHigh.x, outLow.x, outHigh.x, doClamp), - mx_remap(in.y, inLow.y, inHigh.y, outLow.y, outHigh.y, doClamp), - mx_remap(in.z, inLow.z, inHigh.z, outLow.z, outHigh.z, doClamp), - mx_remap(in.w, inLow.w, inHigh.w, outLow.w, outHigh.w, doClamp)); -} - -vector4 mx_remap(vector4 in, float inLow, float inHigh, float outLow, float outHigh, int doClamp) -{ - return vector4(mx_remap(in.x, inLow, inHigh, outLow, outHigh, doClamp), - mx_remap(in.y, inLow, inHigh, outLow, outHigh, doClamp), - mx_remap(in.z, inLow, inHigh, outLow, outHigh, doClamp), - mx_remap(in.w, inLow, inHigh, outLow, outHigh, doClamp)); -} - - -float mx_contrast(float in, float amount, float pivot) -{ - float out = in - pivot; - out *= amount; - out += pivot; - return out; -} - -color mx_contrast(color in, color amount, color pivot) -{ - color out = in - pivot; - out *= amount; - out += pivot; - return out; -} - -color mx_contrast(color in, float amount, float pivot) -{ - color out = in - pivot; - out *= amount; - out += pivot; - return out; -} - -color4 mx_contrast(color4 c, color4 amount, color4 pivot) -{ - return color4(mx_contrast(c.rgb, amount.rgb, pivot.rgb), - mx_contrast(c.a, amount.a, pivot.a)); -} - -color4 mx_contrast(color4 c, float amount, float pivot) -{ - return mx_contrast(c, color4(color(amount), amount), color4(color(pivot), pivot)); -} - -vector2 mx_contrast(vector2 in, vector2 amount, vector2 pivot) -{ - return vector2 (mx_contrast(in.x, amount.x, pivot.x), - mx_contrast(in.y, amount.y, pivot.y)); -} - -vector2 mx_contrast(vector2 in, float amount, float pivot) -{ - return mx_contrast(in, vector2(amount, amount), vector2(pivot, pivot)); -} - -vector4 mx_contrast(vector4 in, vector4 amount, vector4 pivot) -{ - return vector4(mx_contrast(in.x, amount.x, pivot.x), - mx_contrast(in.y, amount.y, pivot.y), - mx_contrast(in.z, amount.z, pivot.z), - mx_contrast(in.w, amount.w, pivot.w)); -} - -vector4 mx_contrast(vector4 in, float amount, float pivot) -{ - return vector4(mx_contrast(in.x, amount, pivot), - mx_contrast(in.y, amount, pivot), - mx_contrast(in.z, amount, pivot), - mx_contrast(in.w, amount, pivot)); -} - - -vector2 mx_noise(string noisetype, float x, float y) -{ - color cnoise = (color) noise(noisetype, x, y); - return vector2 (cnoise[0], cnoise[1]); -} - -color4 mx_noise(string noisetype, float x, float y) -{ - color cnoise = (color) noise(noisetype, x, y); - float fnoise = (float) noise(noisetype, x + 19, y + 73); - return color4 (cnoise, fnoise); -} - -vector4 mx_noise(string noisetype, float x, float y) -{ - color cnoise = (color) noise(noisetype, x, y); - float fnoise = (float) noise(noisetype, x + 19, y + 73); - return vector4 (cnoise[0], cnoise[1], cnoise[2], fnoise); -} - -vector2 mx_noise(string noisetype, point position) -{ - color cnoise = (color) noise(noisetype, position); - return vector2 (cnoise[0], cnoise[1]); -} - -color4 mx_noise(string noisetype, point position) -{ - color cnoise = (color) noise(noisetype, position); - float fnoise = (float) noise(noisetype, position+vector(19,73,29)); - return color4 (cnoise, fnoise); -} - -vector4 mx_noise(string noisetype, point position) -{ - color cnoise = (color) noise(noisetype, position); - float fnoise = (float) noise(noisetype, position+vector(19,73,29)); - return vector4 (cnoise[0], cnoise[1], cnoise[2], fnoise); -} - -float mx_fbm(float x, float y, int octaves, float lacunarity, float diminish, string noisetype) -{ - float out = 0; - float amp = 1.0; - float xx = x; - float yy = y; - - for (int i = 0; i < octaves; i += 1) { - out += amp * noise(noisetype, xx, yy); - amp *= diminish; - xx *= lacunarity; - yy *= lacunarity; - } - return out; -} - -color mx_fbm(float x, float y, int octaves, float lacunarity, float diminish, string noisetype) -{ - color out = 0; - float amp = 1.0; - float xx = x; - float yy = y; - - for (int i = 0; i < octaves; i += 1) { - out += amp * (color)noise(noisetype, xx, yy); - amp *= diminish; - xx *= lacunarity; - yy *= lacunarity; - } - return out; -} - -vector2 mx_fbm(float x, float y, int octaves, float lacunarity, float diminish, string noisetype) -{ - return vector2((float) mx_fbm(x, y, octaves, lacunarity, diminish, noisetype), - (float) mx_fbm(x+19, y+193, octaves, lacunarity, diminish, noisetype)); -} - -color4 mx_fbm(float x, float y, int octaves, float lacunarity, float diminish, string noisetype) -{ - color c = (color) mx_fbm(x, y, octaves, lacunarity, diminish, noisetype); - float f = (float) mx_fbm(x+19, y+193, octaves, lacunarity, diminish, noisetype); - return color4 (c, f); -} - -vector4 mx_fbm(float x, float y, int octaves, float lacunarity, float diminish, string noisetype) -{ - color c = (color) mx_fbm(x, y, octaves, lacunarity, diminish, noisetype); - float f = (float) mx_fbm(x+19, y+193, octaves, lacunarity, diminish, noisetype); - return vector4 (c[0], c[1], c[2], f); -} - -float mx_fbm(point position, int octaves, float lacunarity, float diminish, string noisetype) -{ - float out = 0; - float amp = 1.0; - point p = position; - - for (int i = 0; i < octaves; i += 1) { - out += amp * noise(noisetype, p); - amp *= diminish; - p *= lacunarity; - } - return out; -} - -color mx_fbm(point position, int octaves, float lacunarity, float diminish, string noisetype) -{ - color out = 0; - float amp = 1.0; - point p = position; - - for (int i = 0; i < octaves; i += 1) { - out += amp * (color)noise(noisetype, p); - amp *= diminish; - p *= lacunarity; - } - return out; -} - -vector2 mx_fbm(point position, int octaves, float lacunarity, float diminish, string noisetype) -{ - return vector2((float) mx_fbm(position, octaves, lacunarity, diminish, noisetype), - (float) mx_fbm(position+point(19, 193, 17), octaves, lacunarity, diminish, noisetype)); -} - -color4 mx_fbm(point position, int octaves, float lacunarity, float diminish, string noisetype) -{ - color c = (color) mx_fbm(position, octaves, lacunarity, diminish, noisetype); - float f = (float) mx_fbm(position+point(19, 193, 17), octaves, lacunarity, diminish, noisetype); - return color4 (c, f); -} - -vector4 mx_fbm(point position, int octaves, float lacunarity, float diminish, string noisetype) -{ - color c = (color) mx_fbm(position, octaves, lacunarity, diminish, noisetype); - float f = (float) mx_fbm(position+point(19, 193, 17), octaves, lacunarity, diminish, noisetype); - return vector4 (c[0], c[1], c[2], f); -} - -vector2 mx_worley_cell_position(int x, int y, int xoff, int yoff, float jitter) -{ - vector tmp = cellnoise(x+xoff, y+yoff); - vector2 off = vector2(tmp.x, tmp.y); - off -= 0.5; - off *= jitter; - off += 0.5; - return vector2(x, y) + off; -} - -vector mx_worley_cell_position(int x, int y, int z, int xoff, int yoff, int zoff, float jitter) -{ - vector off = cellnoise(vector(x+xoff, y+yoff, z+zoff)); - off -= 0.5; - off *= jitter; - off += 0.5; - return vector(x,y,z) + off; -} - -float mx_worley_distance(vector2 p, int x, int y, int X, int Y, float jitter, int metric) -{ - vector2 cellpos = mx_worley_cell_position(x,y,X,Y,jitter); - vector2 diff = cellpos - p; - - if (metric == 2) - return abs(diff.x) + abs(diff.y); // Manhattan distance - if (metric == 3) - return max(abs(diff.x), abs(diff.y)); // Chebyshev distance - return diff.x*diff.x + diff.y*diff.y; // Euclidean or distance^2 -} - -float mx_worley_distance(vector p, int x, int y, int z, int X, int Y, int Z, float jitter, int metric) -{ - vector cellpos = mx_worley_cell_position(x,y,z,X,Y,Z,jitter); - vector diff = cellpos - p; - if (metric == 2) - return abs(diff[0]) + abs(diff[1]); // Manhattan distance - if (metric == 3) - return max(abs(diff[0]), abs(diff[1])); // Chebyshev distance - return dot(diff, diff); // Eucldean or distance^2 -} - -void mx_sort_distance(float dist, output vector2 result) -{ - if (dist < result.x) - { - result.y = result.x; - result.x = dist; - } - else if (dist < result.y) - { - result.y = dist; - } -} - -void mx_sort_distance(float dist, output vector result) -{ - if (dist < result[0]) - { - result[2] = result[1]; - result[1] = result[0]; - result[0] = dist; - } - else if (dist < result[1]) - { - result[2] = result[1]; - result[1] = dist; - } - else if (dist < result[2]) - { - result[2] = dist; - } -} - -// return floor as well as the fractional remainder -float mx_floorfrac(float x, output int i) -{ - i = (int)floor(x); - return x - float(i); -} - -float mx_worley_noise_float(vector2 p, float jitter, int style, int metric) -{ - int X, Y; - float sqdist = 1e6; - vector2 localpos = vector2(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y)); - vector2 minpos = vector2(0.0, 0.0); - - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - float dist = mx_worley_distance(localpos, x, y, X, Y, jitter, metric); - vector2 cellpos = mx_worley_cell_position(x, y, X, Y, jitter) - localpos; - if (dist < sqdist) - { - sqdist = dist; - minpos = cellpos; - } - } - } - if (style == 1) - { - vector2 tmpP = minpos + p; - return cellnoise(tmpP.x, tmpP.y); - } - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} - -vector2 mx_worley_noise_vector2(vector2 p, float jitter, int style, int metric) -{ - int X, Y; - vector2 sqdist = vector2(1e6, 1e6); - vector2 localpos = vector2(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y)); - vector2 minpos = vector2(0.0, 0.0); - - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - float dist = mx_worley_distance(localpos, x, y, X, Y, jitter, metric); - vector2 cellpos = mx_worley_cell_position(x, y, X, Y, jitter) - localpos; - if (dist < sqdist.x) - { - sqdist.y = sqdist.x; - sqdist.x = dist; - minpos = cellpos; - } - else if (dist < sqdist.y) - { - sqdist.y = dist; - } - } - } - - if (style == 1) - { - vector2 tmpP = minpos + p; - vector tmp = cellnoise(tmpP.x, tmpP.y); - return vector2(tmp.x, tmp.y); - } - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} - -vector mx_worley_noise_vector3(vector2 p, float jitter, int style, int metric) -{ - int X, Y; - vector sqdist = vector(1e6, 1e6, 1e6); - vector2 localpos = vector2(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y)); - vector2 minpos = vector2(0.0, 0.0); - - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - float dist = mx_worley_distance(localpos, x, y, X, Y, jitter, metric); - vector2 cellpos = mx_worley_cell_position(x, y, X, Y, jitter) - localpos; - if (dist < sqdist.x) - { - sqdist.z = sqdist.y; - sqdist.y = sqdist.x; - sqdist.x = dist; - minpos = cellpos; - } - else if (dist < sqdist.y) - { - sqdist.z = sqdist.y; - sqdist.y = dist; - } - else if (dist < sqdist.z) - { - sqdist.z = dist; - } - } - } - if (style == 1) - { - vector2 tmpP = minpos + p; - return cellnoise(tmpP.x, tmpP.y); - } - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} - -float mx_worley_noise_float(vector p, float jitter, int style, int metric) -{ - int X, Y, Z; - vector seed = p; - float sqdist = 1e6; - vector localpos = vector(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y), mx_floorfrac(p.z, Z)); - vector minpos = vector(0.0, 0.0, 0.0); - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - for (int z = -1; z <= 1; ++z) - { - float dist = mx_worley_distance(localpos, x, y, z, X, Y, Z, jitter, metric); - vector cellpos = mx_worley_cell_position(x, y, z, X, Y, Z, jitter) - localpos; - if(dist < sqdist) - { - sqdist = dist; - minpos = cellpos; - } - } - } - } - if (style == 1) - return cellnoise(minpos + p); - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} - -vector2 mx_worley_noise_vector2(vector p, float jitter, int style, int metric) -{ - int X, Y, Z; - vector2 sqdist = vector2(1e6, 1e6); - vector localpos = vector(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y), mx_floorfrac(p.z, Z)); - vector minpos = vector(0.0, 0.0, 0.0); - - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - for (int z = -1; z <= 1; ++z) - { - float dist = mx_worley_distance(localpos, x, y, z, X, Y, Z, jitter, metric); - vector cellpos = mx_worley_cell_position(x, y, z, X, Y, Z, jitter) - localpos; - if (dist < sqdist.x) - { - sqdist.y = sqdist.x; - sqdist.x = dist; - minpos = cellpos; - } - else if (dist < sqdist.y) - { - sqdist.y = dist; - } - } - } - } - if (style == 1) - { - vector tmp = cellnoise(minpos + p); - return vector2(tmp.x,tmp.y); - } - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} - -vector mx_worley_noise_vector3(vector p, float jitter, int style, int metric) -{ - int X, Y, Z; - vector sqdist = 1e6; - vector localpos = vector(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y), mx_floorfrac(p.z, Z)); - vector minpos = vector(0.0, 0.0, 0.0); - - for (int x = -1; x <= 1; ++x) - { - for (int y = -1; y <= 1; ++y) - { - for (int z = -1; z <= 1; ++z) - { - float dist = mx_worley_distance(localpos, x, y, z, X, Y, Z, jitter, metric); - vector cellpos = mx_worley_cell_position(x, y, z, X, Y, Z, jitter) - localpos; - if (dist < sqdist.x) - { - sqdist.z = sqdist.y; - sqdist.y = sqdist.x; - sqdist.x = dist; - minpos = cellpos; - } - else if (dist < sqdist.y) - { - sqdist.z = sqdist.y; - sqdist.y = dist; - } - else if (dist < sqdist.z) - { - sqdist.z = dist; - } - } - } - } - if (style == 1) - return cellnoise(minpos + p); - else - { - if (metric == 0) - sqdist = sqrt(sqdist); - return sqdist; - } -} -// Copyright Contributors to the Open Shading Language project. -// SPDX-License-Identifier: BSD-3-Clause -// https://github.com/AcademySoftwareFoundation/OpenShadingLanguage - -#pragma once -#define VECTOR2_H - -// vector2 is a 2D vector -struct vector2 -{ - float x; - float y; -}; - - - -// -// For vector2, define math operators to match vector -// - -vector2 __operator__neg__(vector2 a) -{ - return vector2(-a.x, -a.y); -} - -vector2 __operator__add__(vector2 a, vector2 b) -{ - return vector2(a.x + b.x, a.y + b.y); -} - -vector2 __operator__add__(vector2 a, int b) -{ - return a + vector2(b, b); -} - -vector2 __operator__add__(vector2 a, float b) -{ - return a + vector2(b, b); -} - -vector2 __operator__add__(int a, vector2 b) -{ - return vector2(a, a) + b; -} - -vector2 __operator__add__(float a, vector2 b) -{ - return vector2(a, a) + b; -} - -vector2 __operator__sub__(vector2 a, vector2 b) -{ - return vector2(a.x - b.x, a.y - b.y); -} - -vector2 __operator__sub__(vector2 a, int b) -{ - return a - vector2(b, b); -} - -vector2 __operator__sub__(vector2 a, float b) -{ - return a - vector2(b, b); -} - -vector2 __operator__sub__(int a, vector2 b) -{ - return vector2(a, a) - b; -} - -vector2 __operator__sub__(float a, vector2 b) -{ - return vector2(a, a) - b; -} - -vector2 __operator__mul__(vector2 a, vector2 b) -{ - return vector2(a.x * b.x, a.y * b.y); -} - -vector2 __operator__mul__(vector2 a, int b) -{ - return a * vector2(b, b); -} - -vector2 __operator__mul__(vector2 a, float b) -{ - return a * vector2(b, b); -} - -vector2 __operator__mul__(int a, vector2 b) -{ - return b * vector2(a, a); -} - -vector2 __operator__mul__(float a, vector2 b) -{ - return b * vector2(a, a); -} - -vector2 __operator__div__(vector2 a, vector2 b) -{ - return vector2(a.x / b.x, a.y / b.y); -} - -vector2 __operator__div__(vector2 a, int b) -{ - float b_inv = 1.0 / float(b); - return a * vector2(b_inv, b_inv); -} - -vector2 __operator__div__(vector2 a, float b) -{ - float b_inv = 1.0 / b; - return a * vector2(b_inv, b_inv); -} - -vector2 __operator__div__(int a, vector2 b) -{ - return vector2(a, a) / b; -} - -vector2 __operator__div__(float a, vector2 b) -{ - return vector2(a, a) / b; -} - -int __operator__eq__(vector2 a, vector2 b) -{ - return (a.x == b.x) && (a.y == b.y); -} - -int __operator__neq__(vector2 a, vector2 b) -{ - return (a.x != b.x) || (a.y != b.y); -} - - - - -// -// For vector2, define most of the stdosl functions to match vector -// - -vector2 abs(vector2 a) -{ - return vector2 (abs(a.x), abs(a.y)); -} - -vector2 ceil(vector2 a) -{ - return vector2 (ceil(a.x), ceil(a.y)); -} - -vector2 round(vector2 a) -{ - return vector2 (round(a.x), round(a.y)); -} - -vector2 floor(vector2 a) -{ - return vector2 (floor(a.x), floor(a.y)); -} - -vector2 sqrt(vector2 a) -{ - return vector2 (sqrt(a.x), sqrt(a.y)); -} - -vector2 exp(vector2 a) -{ - return vector2 (exp(a.x), exp(a.y)); -} - -vector2 log(vector2 a) -{ - return vector2 (log(a.x), log(a.y)); -} - -vector2 log2(vector2 a) -{ - return vector2 (log2(a.x), log2(a.y)); -} - -vector2 mix(vector2 a, vector2 b, float x ) -{ - return vector2 (mix(a.x, b.x, x), mix(a.y, b.y, x)); -} - -vector2 mix(vector2 a, vector2 b, vector2 x ) -{ - return vector2 (mix(a.x, b.x, x.x), mix(a.y, b.y, x.y)); -} - -float dot(vector2 a, vector2 b) -{ - return (a.x * b.x + a.y * b.y); -} - -float length (vector2 a) -{ - return hypot (a.x, a.y); -} - -vector2 smoothstep(vector2 low, vector2 high, vector2 in) -{ - return vector2 (smoothstep(low.x, high.x, in.x), - smoothstep(low.y, high.y, in.y)); -} - -vector2 smoothstep(float low, float high, vector2 in) -{ - return vector2 (smoothstep(low, high, in.x), - smoothstep(low, high, in.y)); -} - -vector2 clamp(vector2 in, vector2 low, vector2 high) -{ - return vector2 (clamp(in.x, low.x, high.x), - clamp(in.y, low.y, high.y)); -} - -vector2 clamp(vector2 in, float low, float high) -{ - return clamp(in, vector2(low, low), vector2(high, high)); -} - -vector2 max(vector2 a, vector2 b) -{ - return vector2 (max(a.x, b.x), - max(a.y, b.y)); -} - -vector2 min(vector2 a, vector2 b) -{ - return vector2 (min(a.x, b.x), - min(a.y, b.y)); -} - -vector2 min(vector2 a, float b) -{ - return min(a, vector2(b, b)); -} - -vector2 max(vector2 a, float b) -{ - return max(a, vector2(b, b)); -} - -vector2 normalize(vector2 a) -{ - return a / length(a); -} - -vector2 mod(vector2 a, vector2 b) -{ - return vector2(mod(a.x, b.x), - mod(a.y, b.y)); -} - -vector2 mod(vector2 a, float b) -{ - return mod(a, vector2(b, b)); -} - -vector2 fmod(vector2 a, vector2 b) -{ - return vector2 (fmod(a.x, b.x), - fmod(a.y, b.y)); -} - -vector2 fmod(vector2 a, float b) -{ - return fmod(a, vector2(b, b)); -} - -vector2 pow(vector2 in, vector2 amount) -{ - return vector2(pow(in.x, amount.x), pow(in.y, amount.y)); -} - -vector2 pow(vector2 in, float amount) -{ - return pow(in, vector2(amount, amount)); -} - -vector2 sign(vector2 a) -{ - return vector2(sign(a.x), - sign(a.y)); -} - -vector2 sin(vector2 a) -{ - return vector2(sin(a.x), - sin(a.y)); -} - -vector2 cos(vector2 a) -{ - return vector2(cos(a.x), - cos(a.y)); -} - -vector2 tan(vector2 a) -{ - return vector2(tan(a.x), - tan(a.y)); -} - -vector2 asin(vector2 a) -{ - return vector2(asin(a.x), - asin(a.y)); -} - -vector2 acos(vector2 a) -{ - return vector2(acos(a.x), - acos(a.y)); -} - -vector2 atan2(vector2 a, float f) -{ - return vector2(atan2(a.x, f), - atan2(a.y, f)); -} - -vector2 atan2(vector2 a, vector2 b) -{ - return vector2(atan2(a.x, b.x), - atan2(a.y, b.y)); -} -// Copyright Contributors to the Open Shading Language project. -// SPDX-License-Identifier: BSD-3-Clause -// https://github.com/AcademySoftwareFoundation/OpenShadingLanguage - -#pragma once -#define VECTOR4_H - - -// vector4 is a 4D vector -struct vector4 -{ - float x; - float y; - float z; - float w; -}; - - - -// -// For vector4, define math operators to match vector -// - -vector4 __operator__neg__(vector4 a) -{ - return vector4(-a.x, -a.y, -a.z, -a.w); -} - -vector4 __operator__add__(vector4 a, vector4 b) -{ - return vector4(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); -} - -vector4 __operator__add__(vector4 a, int b) -{ - return a + vector4(b, b, b, b); -} - -vector4 __operator__add__(vector4 a, float b) -{ - return a + vector4(b, b, b, b); -} - -vector4 __operator__add__(int a, vector4 b) -{ - return vector4(a, a, a, a) + b; -} - -vector4 __operator__add__(float a, vector4 b) -{ - return vector4(a, a, a, a) + b; -} - -vector4 __operator__sub__(vector4 a, vector4 b) -{ - return vector4(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); -} - -vector4 __operator__sub__(vector4 a, int b) -{ - return a - vector4(b, b, b, b); -} - -vector4 __operator__sub__(vector4 a, float b) -{ - return a - vector4(b, b, b, b); -} - -vector4 __operator__sub__(int a, vector4 b) -{ - return vector4(a, a, a, a) - b; -} - -vector4 __operator__sub__(float a, vector4 b) -{ - return vector4(a, a, a, a) - b; -} - -vector4 __operator__mul__(vector4 a, vector4 b) -{ - return vector4(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); -} - -vector4 __operator__mul__(vector4 a, int b) -{ - return a * vector4(b, b, b, b); -} - -vector4 __operator__mul__(vector4 a, float b) -{ - return a * vector4(b, b, b, b); -} - -vector4 __operator__mul__(int a, vector4 b) -{ - return vector4(a, a, a, a) * b; -} - -vector4 __operator__mul__(float a, vector4 b) -{ - return vector4(a, a, a, a) * b; -} - -vector4 __operator__div__(vector4 a, vector4 b) -{ - return vector4(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w); -} - -vector4 __operator__div__(vector4 a, int b) -{ - float b_inv = 1.0 / float(b); - return a * vector4(b_inv, b_inv, b_inv, b_inv); -} - -vector4 __operator__div__(vector4 a, float b) -{ - float b_inv = 1.0 / b; - return a * vector4(b_inv, b_inv, b_inv, b_inv); -} - -vector4 __operator__div__(int a, vector4 b) -{ - return vector4(a, a, a, a) / b; -} - -vector4 __operator__div__(float a, vector4 b) -{ - return vector4(a, a, a, a) / b; -} - -int __operator__eq__(vector4 a, vector4 b) -{ - return (a.x == b.x) && (a.y == b.y) && (a.z == b.z) && (a.w == b.w); -} - -int __operator__neq__(vector4 a, vector4 b) -{ - return (a.x != b.x) || (a.y != b.y) || (a.z != b.z) || (a.w != b.w); -} - - - - -// -// For vector4, define most of the stdosl functions to match vector -// - -vector4 abs(vector4 in) -{ - return vector4 (abs(in.x), - abs(in.y), - abs(in.z), - abs(in.w)); -} - -vector4 ceil(vector4 in) -{ - return vector4 (ceil(in.x), - ceil(in.y), - ceil(in.z), - ceil(in.w)); -} - -vector4 round(vector4 in) -{ - return vector4 (round(in.x), - round(in.y), - round(in.z), - round(in.w)); -} - -vector4 floor(vector4 in) -{ - return vector4 (floor(in.x), - floor(in.y), - floor(in.z), - floor(in.w)); -} - -vector4 sqrt(vector4 in) -{ - return vector4 (sqrt(in.x), - sqrt(in.y), - sqrt(in.z), - sqrt(in.w)); -} - -vector4 exp(vector4 in) -{ - return vector4 (exp(in.x), - exp(in.y), - exp(in.z), - exp(in.w)); -} - -vector4 log(vector4 in) -{ - return vector4 (log(in.x), - log(in.y), - log(in.z), - log(in.w)); -} - -vector4 log2(vector4 in) -{ - return vector4 (log2(in.x), - log2(in.y), - log2(in.z), - log2(in.w)); -} - -vector4 mix(vector4 value1, vector4 value2, float x ) -{ - return vector4 (mix( value1.x, value2.x, x), - mix( value1.y, value2.y, x), - mix( value1.z, value2.z, x), - mix( value1.w, value2.w, x)); -} - -vector4 mix(vector4 value1, vector4 value2, vector4 x ) -{ - return vector4 (mix( value1.x, value2.x, x.x), - mix( value1.y, value2.y, x.y), - mix( value1.z, value2.z, x.z), - mix( value1.w, value2.w, x.w)); -} - -vector vec4ToVec3(vector4 v) -{ - return vector(v.x, v.y, v.z) / v.w; -} - -float dot(vector4 a, vector4 b) -{ - return ((a.x * b.x) + (a.y * b.y) + (a.z * b.z) + (a.w * b.w)); -} - -float length (vector4 a) -{ - return sqrt (a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w); -} - -vector4 smoothstep(vector4 low, vector4 high, vector4 in) -{ - return vector4 (smoothstep(low.x, high.x, in.x), - smoothstep(low.y, high.y, in.y), - smoothstep(low.z, high.z, in.z), - smoothstep(low.w, high.w, in.w)); -} - -vector4 smoothstep(float low, float high, vector4 in) -{ - return vector4 (smoothstep(low, high, in.x), - smoothstep(low, high, in.y), - smoothstep(low, high, in.z), - smoothstep(low, high, in.w)); -} - -vector4 clamp(vector4 in, vector4 low, vector4 high) -{ - return vector4 (clamp(in.x, low.x, high.x), - clamp(in.y, low.y, high.y), - clamp(in.z, low.z, high.z), - clamp(in.w, low.w, high.w)); -} - -vector4 clamp(vector4 in, float low, float high) -{ - return vector4 (clamp(in.x, low, high), - clamp(in.y, low, high), - clamp(in.z, low, high), - clamp(in.w, low, high)); -} - -vector4 max(vector4 a, vector4 b) -{ - return vector4 (max(a.x, b.x), - max(a.y, b.y), - max(a.z, b.z), - max(a.w, b.w)); -} - -vector4 max(vector4 a, float b) -{ - return max(a, vector4(b, b, b, b)); -} - -vector4 min(vector4 a, vector4 b) -{ - return vector4 (min(a.x, b.x), - min(a.y, b.y), - min(a.z, b.z), - min(a.w, b.w)); -} - -vector4 min(vector4 a, float b) -{ - return min(a, vector4(b, b, b, b)); -} - -vector4 normalize(vector4 a) -{ - return a / length(a); -} - -vector4 mod(vector4 a, vector4 b) -{ - return vector4(mod(a.x, b.x), - mod(a.y, b.y), - mod(a.z, b.z), - mod(a.w, b.w)); -} - -vector4 mod(vector4 a, float b) -{ - return mod(a, vector4(b, b, b, b)); -} - -vector4 fmod(vector4 a, vector4 b) -{ - return vector4 (fmod(a.x, b.x), - fmod(a.y, b.y), - fmod(a.z, b.z), - fmod(a.w, b.w)); -} - -vector4 fmod(vector4 a, float b) -{ - return fmod(a, vector4(b, b, b, b)); -} - -vector4 pow(vector4 in, vector4 amount) -{ - return vector4 (pow(in.x, amount.x), - pow(in.y, amount.y), - pow(in.z, amount.z), - pow(in.w, amount.w)); -} - -vector4 pow(vector4 in, float amount) -{ - return vector4 (pow(in.x, amount), - pow(in.y, amount), - pow(in.z, amount), - pow(in.w, amount)); -} - -vector4 sign(vector4 a) -{ - return vector4(sign(a.x), - sign(a.y), - sign(a.z), - sign(a.w)); -} - -vector4 sin(vector4 a) -{ - return vector4(sin(a.x), - sin(a.y), - sin(a.z), - sin(a.w)); -} - -vector4 cos(vector4 a) -{ - return vector4(cos(a.x), - cos(a.y), - cos(a.z), - cos(a.w)); -} - -vector4 tan(vector4 a) -{ - return vector4(tan(a.x), - tan(a.y), - tan(a.z), - tan(a.w)); -} - -vector4 asin(vector4 a) -{ - return vector4(asin(a.x), - asin(a.y), - asin(a.z), - asin(a.w)); -} - -vector4 acos(vector4 a) -{ - return vector4(acos(a.x), - acos(a.y), - acos(a.z), - acos(a.w)); -} - -vector4 atan2(vector4 a, float f) -{ - return vector4(atan2(a.x, f), - atan2(a.y, f), - atan2(a.z, f), - atan2(a.w, f)); -} - -vector4 atan2(vector4 a, vector4 b) -{ - return vector4(atan2(a.x, b.x), - atan2(a.y, b.y), - atan2(a.z, b.z), - atan2(a.w, b.w)); -} - - -vector4 transform (matrix M, vector4 p) -{ - return vector4 (M[0][0]*p.x + M[1][0]*p.y + M[2][0]*p.z + M[3][0]*p.w, - M[0][1]*p.x + M[1][1]*p.y + M[2][1]*p.z + M[3][1]*p.w, - M[0][2]*p.x + M[1][2]*p.y + M[2][2]*p.z + M[3][2]*p.w, - M[0][3]*p.x + M[1][3]*p.y + M[2][3]*p.z + M[3][3]*p.w); -} - -vector4 transform (string fromspace, string tospace, vector4 p) -{ - return transform (matrix(fromspace,tospace), p); -} -vector2 mx_transform_uv(vector2 texcoord) -{ - return texcoord; -} -vector2 mx_transform_uv(vector2 texcoord) -{ - return vector2(texcoord.x, 1.0 - texcoord.y); -} -// Adds some syntactic sugar allowing mixing vector4 and color4 as -// arguments of some binary operators used by OCIO transform code. - -vector4 __operator__mul__(matrix m, vector4 v) -{ - return transform(m, v); -} - -vector4 __operator__mul__(color4 c, vector4 v) -{ - return vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a) * v; -} - -vector4 __operator__mul__(vector4 v, color4 c) -{ - return c * v; -} - -vector4 __operator__sub__(color4 c, vector4 v) -{ - return vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a) - v; -} - -vector4 __operator__add__(vector4 v, color4 c) -{ - return v + vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a); -} - -vector4 __operator__add__(color4 c, vector4 v) -{ - return v + c; -} - -vector4 pow(color4 c, vector4 v) -{ - return pow(vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a), v); -} - -vector4 max(vector4 v, color4 c) -{ - return max(v, vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a)); -} -#include "mx_burn_float.osl" - -void mx_burn_color3(color fg, color bg, float mix, output color result) -{ - mx_burn_float(fg[0], bg[0], mix, result[0]); - mx_burn_float(fg[1], bg[1], mix, result[1]); - mx_burn_float(fg[2], bg[2], mix, result[2]); -} -#include "mx_burn_float.osl" - -void mx_burn_color4(color4 fg, color4 bg, float mix, output color4 result) -{ - mx_burn_float(fg.rgb[0], bg.rgb[0], mix, result.rgb[0]); - mx_burn_float(fg.rgb[1], bg.rgb[1], mix, result.rgb[1]); - mx_burn_float(fg.rgb[2], bg.rgb[2], mix, result.rgb[2]); - mx_burn_float(fg.a, bg.a, mix, result.a); -} -void mx_burn_float(float fg, float bg, float mix, output float result) -{ - if (abs(fg) < M_FLOAT_EPS) - { - result = 0.0; - return; - } - result = mix*(1.0 - ((1.0 - bg) / fg)) + ((1.0-mix)*bg); -} -void mx_cellnoise2d_float(vector2 texcoord, output float result) -{ - result = cellnoise(texcoord.x, texcoord.y); -} -void mx_cellnoise3d_float(vector position, output float result) -{ - result = cellnoise(position); -} -void mx_creatematrix_vector3_matrix33(vector in1, vector in2, vector in3, output matrix result) -{ - result = matrix(in1.x, in1.y, in1.z, 0.0, - in2.x, in2.y, in2.z, 0.0, - in3.x, in3.y, in3.z, 0.0, - 0.0, 0.0, 0.0, 1.0); -} - -void mx_creatematrix_vector3_matrix44(vector in1, vector in2, vector in3, vector in4, output matrix result) -{ - result = matrix(in1.x, in1.y, in1.z, 0.0, - in2.x, in2.y, in2.z, 0.0, - in3.x, in3.y, in3.z, 0.0, - in4.x, in4.y, in4.z, 1.0); -} - -void mx_creatematrix_vector4_matrix44(vector4 in1, vector4 in2, vector4 in3, vector4 in4, output matrix result) -{ - result = matrix(in1.x, in1.y, in1.z, in1.w, - in2.x, in2.y, in2.z, in2.w, - in3.x, in3.y, in3.z, in3.w, - in4.x, in4.y, in4.z, in4.w); -} -void mx_disjointover_color4(color4 fg, color4 bg, float mix, output color4 result) -{ - float summedAlpha = fg.a + bg.a; - - if (summedAlpha <= 1) - { - result.rgb = fg.rgb + bg.rgb; - } - else - { - if (abs(bg.a) < M_FLOAT_EPS) - { - result.rgb = 0.0; - } - else - { - float x = (1 - fg.a) / bg.a; - result.rgb = fg.rgb + bg.rgb * x; - } - } - result.a = min(summedAlpha, 1.0); - - result.rgb = result.rgb * mix + (1.0 - mix) * bg.rgb; - result.a = result.a * mix + (1.0 - mix) * bg.a; -} -#include "mx_dodge_float.osl" - -void mx_dodge_color3(color fg, color bg, float mix, output color result) -{ - mx_dodge_float(fg[0], bg[0], mix, result[0]); - mx_dodge_float(fg[1], bg[1], mix, result[1]); - mx_dodge_float(fg[2], bg[2], mix, result[2]); -} -#include "mx_dodge_float.osl" - -void mx_dodge_color4(color4 fg , color4 bg , float mix , output color4 result) -{ - mx_dodge_float(fg.rgb[0], bg.rgb[0], mix, result.rgb[0]); - mx_dodge_float(fg.rgb[1], bg.rgb[1], mix, result.rgb[1]); - mx_dodge_float(fg.rgb[2], bg.rgb[2], mix, result.rgb[2]); - mx_dodge_float(fg.a, bg.a, mix, result.a); -} -void mx_dodge_float(float fg, float bg, float mix, output float out) -{ - if (abs(1.0 - fg) < M_FLOAT_EPS) - { - out = 0.0; - return; - } - out = mix*(bg / (1.0 - fg)) + ((1.0-mix)*bg); -} -void mx_fractal2d_float(float amplitude, int octaves, float lacunarity, float diminish, vector2 texcoord, output float result) -{ - float f = mx_fbm(texcoord.x, texcoord.y, octaves, lacunarity, diminish, "snoise"); - result = f * amplitude; -} -void mx_fractal2d_vector2(vector2 amplitude, int octaves, float lacunarity, float diminish, vector2 texcoord, output vector2 result) -{ - vector2 f = mx_fbm(texcoord.x, texcoord.y, octaves, lacunarity, diminish, "snoise"); - result = f * amplitude; -} -void mx_fractal2d_vector3(vector amplitude, int octaves, float lacunarity, float diminish, vector2 texcoord, output vector result) -{ - vector f = mx_fbm(texcoord.x, texcoord.y, octaves, lacunarity, diminish, "snoise"); - result = f * amplitude; -} -void mx_fractal2d_vector4(vector4 amplitude, int octaves, float lacunarity, float diminish, vector2 texcoord, output vector4 result) -{ - vector4 f = mx_fbm(texcoord.x, texcoord.y, octaves, lacunarity, diminish, "snoise"); - result = f * amplitude; -} -void mx_fractal3d_float(float amplitude, int octaves, float lacunarity, float diminish, vector position, output float result) -{ - float f = mx_fbm(position, octaves, lacunarity, diminish, "snoise"); - result = f * amplitude; -} -void mx_fractal3d_vector2(vector2 amplitude, int octaves, float lacunarity, float diminish, vector position, output vector2 result) -{ - vector2 f = mx_fbm(position, octaves, lacunarity, diminish, "snoise"); - result = f * amplitude; -} -void mx_fractal3d_vector3(vector amplitude, int octaves, float lacunarity, float diminish, vector position, output vector result) -{ - vector f = mx_fbm(position, octaves, lacunarity, diminish, "snoise"); - result = f * amplitude; -} -void mx_fractal3d_vector4(vector4 amplitude, int octaves, float lacunarity, float diminish, vector position, output vector4 result) -{ - vector4 f = mx_fbm(position, octaves, lacunarity, diminish, "snoise"); - result = f * amplitude; -} -void mx_frame_float(output float result) -{ - // Use the standard default value if the attribute is not present. - result = 1.0; - getattribute("frame", result); -} -void mx_geomcolor_color3(int index, output color result) -{ - getattribute("color", result); -} -void mx_geomcolor_color4(int index, output color4 result) -{ - float value[4]; - getattribute("color", value); - result.rgb[0] = value[0]; - result.rgb[1] = value[1]; - result.rgb[2] = value[2]; - result.a = value[3]; -} -void mx_geomcolor_float(int index, output float result) -{ - getattribute("color", result); -} -void mx_geompropvalue_boolean(string geomprop, int defaultVal, output int out) -{ - if (getattribute(geomprop, out) == 0) - out = defaultVal; -} -void mx_geompropvalue_color(string geomprop, color defaultVal, output color out) -{ - if (getattribute(geomprop, out) == 0) - out = defaultVal; -} -void mx_geompropvalue_color4(string geomprop, color4 defaultVal, output color4 out) -{ - float value[4]; - if (getattribute(geomprop, value) == 0) - { - out.rgb = defaultVal.rgb; - out.a = defaultVal.a; - } - else - { - out.rgb[0] = value[0]; - out.rgb[1] = value[1]; - out.rgb[2] = value[2]; - out.a = value[3]; - } -} -void mx_geompropvalue_float(string geomprop, float defaultVal, output float result) -{ - if (getattribute(geomprop, result) == 0) - { - result = defaultVal; - } -} -void mx_geompropvalue_integer(string geomprop, int defaultVal, output int out) -{ - if (getattribute(geomprop, out) == 0) - out = defaultVal; -} -void mx_geompropvalue_string(string geomprop, string defaultVal, output string out) -{ - if (getattribute(geomprop, out) == 0) - out = defaultVal; -} -void mx_geompropvalue_vector2(string geomprop, vector2 defaultVal, output vector2 out) -{ - float value[2]; - if (getattribute(geomprop, value) == 0) - { - out = defaultVal; - } - else - { - out.x = value[0]; - out.y = value[1]; - } -} -void mx_geompropvalue_vector(string geomprop, vector defaultVal, output vector out) -{ - if (getattribute(geomprop, out) == 0) - out = defaultVal; -} -void mx_geompropvalue_vector4(string geomprop, vector4 defaultVal, output vector4 out) -{ - float value[4]; - if (getattribute(geomprop, value) == 0) - { - out = defaultVal; - } - else - { - out.x = value[0]; - out.y = value[1]; - out.z = value[2]; - out.w = value[3]; - } -} -void mx_heighttonormal_vector3(float height, float scale, vector2 texcoord, output vector result) -{ - // Scale factor for parity with traditional Sobel filtering. - float SOBEL_SCALE_FACTOR = 1.0 / 16.0; - - // Compute screen-space gradients of the heightfield and texture coordinates. - vector2 dHdS = vector2(Dx(height), Dy(height)) * scale * SOBEL_SCALE_FACTOR; - vector2 dUdS = vector2(Dx(texcoord.x), Dy(texcoord.x)); - vector2 dVdS = vector2(Dx(texcoord.y), Dy(texcoord.y)); - - // Construct a screen-space tangent frame. - vector tangent = vector(dUdS.x, dVdS.x, dHdS.x); - vector bitangent = vector(dUdS.y, dVdS.y, dHdS.y); - vector n = cross(tangent, bitangent); - - // Handle invalid and mirrored texture coordinates. - if (dot(n, n) < M_FLOAT_EPS * M_FLOAT_EPS) - { - n = vector(0, 0, 1); - } - else if (n[2] < 0.0) - { - n *= -1.0; - } - - // Normalize and encode the results. - result = normalize(n) * 0.5 + 0.5; -} -void mx_hsvtorgb_color3(vector _in, output vector result) -{ - result = transformc("hsv","rgb", _in); -} -void mx_hsvtorgb_color4(color4 _in, output color4 result) -{ - result = color4(transformc("hsv","rgb", _in.rgb), 1.0); -} -#include "lib/$fileTransformUv" - -void mx_image_color3(textureresource file, string layer, color default_value, vector2 texcoord, string uaddressmode, string vaddressmode, string filtertype, string framerange, int frameoffset, string frameendaction, output color out) -{ - if (file.filename == "" || - (uaddressmode == "constant" && (texcoord.x<0.0 || texcoord.x>1.0)) || - (vaddressmode == "constant" && (texcoord.y<0.0 || texcoord.y>1.0))) - { - out = default_value; - return; - } - - color missingColor = default_value; - vector2 st = mx_transform_uv(texcoord); - out = texture(file.filename, st.x, st.y, - "subimage", layer, "interp", filtertype, - "missingcolor", missingColor, - "swrap", uaddressmode, "twrap", vaddressmode -#if OSL_VERSION_MAJOR >= 1 && OSL_VERSION_MINOR >= 14 - , "colorspace", file.colorspace -#endif - ); -} -#include "lib/$fileTransformUv" - -void mx_image_color4(textureresource file, string layer, color4 default_value, vector2 texcoord, string uaddressmode, string vaddressmode, string filtertype, string framerange, int frameoffset, string frameendaction, output color4 out) -{ - if (file.filename == "" || - (uaddressmode == "constant" && (texcoord.x<0.0 || texcoord.x>1.0)) || - (vaddressmode == "constant" && (texcoord.y<0.0 || texcoord.y>1.0))) - { - out = default_value; - return; - } - - color missingColor = default_value.rgb; - float missingAlpha = default_value.a; - vector2 st = mx_transform_uv(texcoord); - float alpha; - color rgb = texture(file.filename, st.x, st.y, "alpha", alpha, - "subimage", layer, "interp", filtertype, - "missingcolor", missingColor, "missingalpha", missingAlpha, - "swrap", uaddressmode, "twrap", vaddressmode -#if OSL_VERSION_MAJOR >= 1 && OSL_VERSION_MINOR >= 14 - , "colorspace", file.colorspace -#endif - ); - - out = color4(rgb, alpha); -} -#include "lib/$fileTransformUv" - -void mx_image_float(textureresource file, string layer, float default_value, vector2 texcoord, string uaddressmode, string vaddressmode, string filtertype, string framerange, int frameoffset, string frameendaction, output float out) -{ - if (file.filename == "" || - (uaddressmode == "constant" && (texcoord.x<0.0 || texcoord.x>1.0)) || - (vaddressmode == "constant" && (texcoord.y<0.0 || texcoord.y>1.0))) - { - out = default_value; - return; - } - - color missingColor = color(default_value); - vector2 st = mx_transform_uv(texcoord); - color rgb = texture(file.filename, st.x, st.y, - "subimage", layer, "interp", filtertype, - "missingcolor", missingColor, - "swrap", uaddressmode, "twrap", vaddressmode); - out = rgb[0]; -} -#include "lib/$fileTransformUv" - -void mx_image_vector2(textureresource file, string layer, vector2 default_value, vector2 texcoord, string uaddressmode, string vaddressmode, string filtertype, string framerange, int frameoffset, string frameendaction, output vector2 out) -{ - if (file.filename == "" || - (uaddressmode == "constant" && (texcoord.x<0.0 || texcoord.x>1.0)) || - (vaddressmode == "constant" && (texcoord.y<0.0 || texcoord.y>1.0))) - { - out = default_value; - return; - } - - color missingColor = color(default_value.x, default_value.y, 0.0); - vector2 st = mx_transform_uv(texcoord); - color rgb = texture(file.filename, st.x, st.y, - "subimage", layer, "interp", filtertype, - "missingcolor", missingColor, - "swrap", uaddressmode, "twrap", vaddressmode); - out.x = rgb[0]; - out.y = rgb[1]; -} -#include "lib/$fileTransformUv" - -void mx_image_vector3(textureresource file, string layer, vector default_value, vector2 texcoord, string uaddressmode, string vaddressmode, string filtertype, string framerange, int frameoffset, string frameendaction, output vector out) -{ - if (file.filename == "" || - (uaddressmode == "constant" && (texcoord.x<0.0 || texcoord.x>1.0)) || - (vaddressmode == "constant" && (texcoord.y<0.0 || texcoord.y>1.0))) - { - out = default_value; - return; - } - - color missingColor = default_value; - vector2 st = mx_transform_uv(texcoord); - out = texture(file.filename, st.x, st.y, - "subimage", layer, "interp", filtertype, - "missingcolor", missingColor, - "swrap", uaddressmode, "twrap", vaddressmode); -} -#include "lib/$fileTransformUv" - -void mx_image_vector4(textureresource file, string layer, vector4 default_value, vector2 texcoord, string uaddressmode, string vaddressmode, string filtertype, string framerange, int frameoffset, string frameendaction, output vector4 out) -{ - if (file.filename == "" || - (uaddressmode == "constant" && (texcoord.x<0.0 || texcoord.x>1.0)) || - (vaddressmode == "constant" && (texcoord.y<0.0 || texcoord.y>1.0))) - { - out = default_value; - return; - } - - color missingColor = color(default_value.x, default_value.y, default_value.z); - float missingAlpha = default_value.w; - vector2 st = mx_transform_uv(texcoord); - float alpha; - color rgb = texture(file.filename, st.x, st.y, "alpha", alpha, - "subimage", layer, "interp", filtertype, - "missingcolor", missingColor, "missingalpha", missingAlpha, - "swrap", uaddressmode, "twrap", vaddressmode); - - out = vector4(rgb[0], rgb[1], rgb[2], alpha); -} -void mx_luminance_color3(color in, color lumacoeffs, output color result) -{ - result = dot(in, lumacoeffs); -} -void mx_luminance_color4(color4 in, color lumacoeffs, output color4 result) -{ - result = color4(dot(in.rgb, lumacoeffs), in.a); -} -void mx_mix_surfaceshader(surfaceshader fg, surfaceshader bg, float w, output surfaceshader result) -{ - result.bsdf = mix(bg.bsdf, fg.bsdf, w); - result.edf = mix(bg.edf, fg.edf, w); - result.opacity = mix(bg.opacity, fg.opacity, w); -} -void mx_noise2d_float(float amplitude, float pivot, vector2 texcoord, output float result) -{ - float value = noise("snoise", texcoord.x, texcoord.y); - result = value * amplitude + pivot; -} -void mx_noise2d_vector2(vector2 amplitude, float pivot, vector2 texcoord, output vector2 result) -{ - vector2 value = mx_noise("snoise", texcoord.x, texcoord.y); - result = value * amplitude + pivot; -} -void mx_noise2d_vector3(vector amplitude, float pivot, vector2 texcoord, output vector result) -{ - vector value = noise("snoise", texcoord.x, texcoord.y); - result = value * amplitude + pivot; -} -void mx_noise2d_vector4(vector4 amplitude, float pivot, vector2 texcoord, output vector4 result) -{ - vector4 value = mx_noise("snoise", texcoord.x, texcoord.y); - result = value * amplitude + pivot; -} -void mx_noise3d_float(float amplitude, float pivot, vector position, output float result) -{ - float value = noise("snoise", position); - result = value * amplitude + pivot; -} -void mx_noise3d_vector2(vector2 amplitude, float pivot, vector position, output vector2 result) -{ - vector2 value = mx_noise("snoise", position); - result = value * amplitude + pivot; -} -void mx_noise3d_vector3(vector amplitude, float pivot, vector position, output vector result) -{ - vector value = noise("snoise", position); - result = value * amplitude + pivot; -} -void mx_noise3d_vector4(vector4 amplitude, float pivot, vector position, output vector4 result) -{ - vector4 value = mx_noise("snoise", position); - result = value * amplitude + pivot; -} -void mx_normalmap_vector2(vector value, vector2 normal_scale, vector N, vector T, vector B, output vector result) -{ - if (value == vector(0.0)) - { - result = N; - } - else - { - // The OSL backend uses dPdu and dPdv for tangents and bitangents, but these vectors are not - // guaranteed to be orthonormal. - // - // Orthogonalize the tangent frame using Gram-Schmidt, unlike in the other backends. - // - vector v = value * 2.0 - 1.0; - vector Tn = normalize(T - dot(T, N) * N); - vector Bn = normalize(B - dot(B, N) * N - dot(B, Tn) * Tn); - result = normalize(Tn * v[0] * normal_scale.x + Bn * v[1] * normal_scale.y + N * v[2]); - } -} - -void mx_normalmap_float(vector value, float normal_scale, vector N, vector T, vector B, output vector result) -{ - mx_normalmap_vector2(value, vector2(normal_scale, normal_scale), N, T, B, result); -} -void mx_premult_color4(color4 in, output color4 result) -{ - result = color4(in.rgb * in.a, in.a); -} -void mx_rgbtohsv_color3(vector _in, output vector result) -{ - result = transformc("rgb","hsv", _in); -} -void mx_rgbtohsv_color4(color4 _in, output color4 result) -{ - result = color4(transformc("rgb","hsv", _in.rgb), 1.0); -} -void mx_rotate_vector2(vector2 _in, float amount, output vector2 result) -{ - float rotationRadians = radians(amount); - float sa = sin(rotationRadians); - float ca = cos(rotationRadians); - result = vector2(ca*_in.x + sa*_in.y, -sa*_in.x + ca*_in.y); -} -matrix rotationMatrix(vector axis, float angle) -{ - vector nAxis = normalize(axis); - float s = sin(angle); - float c = cos(angle); - float oc = 1.0 - c; - - return matrix(oc * nAxis[0] * nAxis[0] + c, oc * nAxis[0] * nAxis[1] - nAxis[2] * s, oc * nAxis[2] * nAxis[0] + nAxis[1] * s, 0.0, - oc * nAxis[0] * nAxis[1] + nAxis[2] * s, oc * nAxis[1] * nAxis[1] + c, oc * nAxis[1] * nAxis[2] - nAxis[0] * s, 0.0, - oc * nAxis[2] * nAxis[0] - nAxis[1] * s, oc * nAxis[1] * nAxis[2] + nAxis[0] * s, oc * nAxis[2] * nAxis[2] + c, 0.0, - 0.0, 0.0, 0.0, 1.0); -} - -void mx_rotate_vector3(vector _in, float amount, vector axis, output vector result) -{ - float rotationRadians = radians(amount); - matrix m = rotationMatrix(axis, rotationRadians); - vector4 trans = transform(m, vector4(_in[0], _in[1], _in[2], 1.0)); - result = vector(trans.x, trans.y, trans.z); -} -void mx_surface_unlit(float emission_weight, color emission_color, float transmission_weight, color transmission_color, float opacity, output surfaceshader result) -{ - float trans = clamp(transmission_weight, 0.0, 1.0); - result.bsdf = trans * transmission_color * transparent(); - result.edf = (1.0 - trans) * emission_weight * emission_color * emission(); - result.opacity = clamp(opacity, 0.0, 1.0); -} -void mx_surfacematerial(surfaceshader surface, surfaceshader back, displacementshader disp, output MATERIAL result) -{ - float opacity_weight = clamp(surface.opacity, 0.0, 1.0); - result = (surface.bsdf + surface.edf) * opacity_weight + transparent() * (1.0 - opacity_weight); -} -void mx_time_float(float fps, output float result) -{ - // Use the standard default value if the attribute is not present. - result = 0.0; - getattribute("time", result); -} -void mx_transformmatrix_vector2M3(vector2 val, matrix m, output vector2 result) -{ - point res = transform(m, point(val.x, val.y, 1.0)); - result.x = res[0]; - result.y = res[1]; -} -void mx_unpremult_color4(color4 in, output color4 result) -{ - result = color4(in.rgb / in.a, in.a); -} -void mx_worleynoise2d_float(vector2 texcoord, float jitter, int style, output float result) -{ - result = mx_worley_noise_float(texcoord, jitter, style, 0); -} -void mx_worleynoise2d_vector2(vector2 texcoord, float jitter, int style, output vector2 result) -{ - result = mx_worley_noise_vector2(texcoord, jitter, style, 0); -} -void mx_worleynoise2d_vector3(vector2 texcoord, float jitter, int style, output vector result) -{ - result = mx_worley_noise_vector3(texcoord, jitter, style, 0); -} -void mx_worleynoise3d_float(vector position, float jitter, int style, output float result) -{ - result = mx_worley_noise_float(position, jitter, style, 0); -} -void mx_worleynoise3d_vector2(vector position, float jitter, int style, output vector2 result) -{ - result = mx_worley_noise_vector2(position, jitter, style, 0); -} -void mx_worleynoise3d_vector3(vector position, float jitter, int style, output vector result) -{ - result = mx_worley_noise_vector3(position, jitter, style, 0); -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Needle/MenuScene/dist/assets/JsMaterialXGenShader.data.vJnq-SJK.js b/Needle/MenuScene/dist/assets/JsMaterialXGenShader.data.vJnq-SJK.js deleted file mode 100644 index f37f833..0000000 --- a/Needle/MenuScene/dist/assets/JsMaterialXGenShader.data.vJnq-SJK.js +++ /dev/null @@ -1 +0,0 @@ -import{l as e}from"./materialx.CnHmG--Y.js";export{e as default}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/N8AO.C2WXsanG.js b/Needle/MenuScene/dist/assets/N8AO.C2WXsanG.js deleted file mode 100644 index e157149..0000000 --- a/Needle/MenuScene/dist/assets/N8AO.C2WXsanG.js +++ /dev/null @@ -1 +0,0 @@ -import{n as e,r as t,t as n}from"./postprocessing.ao.BRYreHJS.js";export{e as DepthType,n as N8AOPass,t as N8AOPostPass}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/N8AO.C2WXsanG.js.gz b/Needle/MenuScene/dist/assets/N8AO.C2WXsanG.js.gz deleted file mode 100644 index bdeed56..0000000 Binary files a/Needle/MenuScene/dist/assets/N8AO.C2WXsanG.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/favicon.DtN_Fmav.ico b/Needle/MenuScene/dist/assets/favicon.DtN_Fmav.ico deleted file mode 100644 index 0ac428d..0000000 Binary files a/Needle/MenuScene/dist/assets/favicon.DtN_Fmav.ico and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/generateMeshBVH.worker-BRfdalWV.js b/Needle/MenuScene/dist/assets/generateMeshBVH.worker-BRfdalWV.js deleted file mode 100644 index d5e7fe3..0000000 --- a/Needle/MenuScene/dist/assets/generateMeshBVH.worker-BRfdalWV.js +++ /dev/null @@ -1,3574 +0,0 @@ -(function(){var e={url:self.location.href}; -/** -* @license -* Copyright 2010-2024 Three.js Authors -* SPDX-License-Identifier: MIT -*/ -let t=`169.19`,n=1e3,r=1001,i=1002,a=1003,o=1006,s=1008,c=2300,l=2301,u=2302,d=2400,f=2401,p=2402,m=`srgb`,h=`srgb-linear`,g=`display-p3-linear`,_=`linear`,v=`srgb`,y=`rec709`,b=35044,x=2e3;var S=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){if(this._listeners===void 0)return!1;let n=this._listeners;return n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){if(this._listeners===void 0)return;let n=this._listeners[e];if(n!==void 0){let e=n.indexOf(t);e!==-1&&n.splice(e,1)}}dispatchEvent(e){if(this._listeners===void 0)return;let t=this._listeners[e.type];if(t!==void 0){e.target=this;let n=t.slice(0);for(let t=0,r=n.length;t>8&255]+C[e>>16&255]+C[e>>24&255]+`-`+C[t&255]+C[t>>8&255]+`-`+C[t>>16&15|64]+C[t>>24&255]+`-`+C[n&63|128]+C[n>>8&255]+`-`+C[n>>16&255]+C[n>>24&255]+C[r&255]+C[r>>8&255]+C[r>>16&255]+C[r>>24&255]).toLowerCase()}function w(e,t,n){return Math.max(t,Math.min(n,e))}function ie(e,t){return(e%t+t)%t}function ae(e,t,n,r,i){return r+(e-t)*(i-r)/(n-t)}function oe(e,t,n){return e===t?0:(n-e)/(t-e)}function se(e,t,n){return(1-n)*e+n*t}function ce(e,t,n,r){return se(e,t,1-Math.exp(-n*r))}function le(e,t=1){return t-Math.abs(ie(e,t*2)-t)}function ue(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*(3-2*e))}function de(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*e*(e*(e*6-15)+10))}function fe(e,t){return e+Math.floor(Math.random()*(t-e+1))}function pe(e,t){return e+Math.random()*(t-e)}function me(e){return e*(.5-Math.random())}function he(e){e!==void 0&&(ee=e);let t=ee+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function ge(e){return e*te}function _e(e){return e*ne}function ve(e){return(e&e-1)==0&&e!==0}function ye(e){return 2**Math.ceil(Math.log(e)/Math.LN2)}function be(e){return 2**Math.floor(Math.log(e)/Math.LN2)}function xe(e,t,n,r,i){let a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((t+r)/2),u=o((t+r)/2),d=a((t-r)/2),f=o((t-r)/2),p=a((r-t)/2),m=o((r-t)/2);switch(i){case`XYX`:e.set(s*u,c*d,c*f,s*l);break;case`YZY`:e.set(c*f,s*u,c*d,s*l);break;case`ZXZ`:e.set(c*d,c*f,s*u,s*l);break;case`XZX`:e.set(s*u,c*m,c*p,s*l);break;case`YXY`:e.set(c*p,s*u,c*m,s*l);break;case`ZYZ`:e.set(c*m,c*p,s*u,s*l);break;default:console.warn(`THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: `+i)}}function Se(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error(`Invalid component type.`)}}function T(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(e*4294967295);case Uint16Array:return Math.round(e*65535);case Uint8Array:return Math.round(e*255);case Int32Array:return Math.round(e*2147483647);case Int16Array:return Math.round(e*32767);case Int8Array:return Math.round(e*127);default:throw Error(`Invalid component type.`)}}let Ce={DEG2RAD:te,RAD2DEG:ne,generateUUID:re,clamp:w,euclideanModulo:ie,mapLinear:ae,inverseLerp:oe,lerp:se,damp:ce,pingpong:le,smoothstep:ue,smootherstep:de,randInt:fe,randFloat:pe,randFloatSpread:me,seededRandom:he,degToRad:ge,radToDeg:_e,isPowerOfTwo:ve,ceilPowerOfTwo:ye,floorPowerOfTwo:be,setQuaternionFromProperEuler:xe,normalize:T,denormalize:Se};var E=class e{constructor(t=0,n=0){e.prototype.isVector2=!0,this.x=t,this.y=n}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(w(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},D=class e{constructor(t,n,r,i,a,o,s,c,l){e.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(we.makeScale(e,t)),this}rotate(e){return this.premultiply(we.makeRotation(-e)),this}translate(e,t){return this.premultiply(we.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}};let we=new D;function Te(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}function Ee(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}let De=new D().set(.8224621,.177538,0,.0331941,.9668058,0,.0170827,.0723974,.9105199),Oe=new D().set(1.2249401,-.2249404,0,-.0420569,1.0420571,0,-.0196376,-.0786361,1.0982735),ke={[h]:{transfer:_,primaries:y,luminanceCoefficients:[.2126,.7152,.0722],toReference:e=>e,fromReference:e=>e},[m]:{transfer:v,primaries:y,luminanceCoefficients:[.2126,.7152,.0722],toReference:e=>e.convertSRGBToLinear(),fromReference:e=>e.convertLinearToSRGB()},[g]:{transfer:_,primaries:`p3`,luminanceCoefficients:[.2289,.6917,.0793],toReference:e=>e.applyMatrix3(Oe),fromReference:e=>e.applyMatrix3(De)},"display-p3":{transfer:v,primaries:`p3`,luminanceCoefficients:[.2289,.6917,.0793],toReference:e=>e.convertSRGBToLinear().applyMatrix3(Oe),fromReference:e=>e.applyMatrix3(De).convertLinearToSRGB()}},Ae=new Set([h,g]),je={enabled:!0,_workingColorSpace:h,get workingColorSpace(){return this._workingColorSpace},set workingColorSpace(e){if(!Ae.has(e))throw Error(`Unsupported working color space, "${e}".`);this._workingColorSpace=e},convert:function(e,t,n){if(this.enabled===!1||t===n||!t||!n)return e;let r=ke[t].toReference,i=ke[n].fromReference;return i(r(e))},fromWorkingColorSpace:function(e,t){return this.convert(e,this._workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this._workingColorSpace)},getPrimaries:function(e){return ke[e].primaries},getTransfer:function(e){return e===``?_:ke[e].transfer},getLuminanceCoefficients:function(e,t=this._workingColorSpace){return e.fromArray(ke[t].luminanceCoefficients)}};function Me(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function Ne(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}let Pe;var Fe=class{static getDataURL(e){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let t;if(e instanceof HTMLCanvasElement)t=e;else{Pe===void 0&&(Pe=Ee(`canvas`)),Pe.width=e.width,Pe.height=e.height;let n=Pe.getContext(`2d`);e instanceof ImageData?n.putImageData(e,0,0):n.drawImage(e,0,0,e.width,e.height),t=Pe}return t.width>2048||t.height>2048?(console.warn(`THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons`,e),t.toDataURL(`image/jpeg`,.6)):t.toDataURL(`image/png`)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=Ee(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case n:e.x-=Math.floor(e.x);break;case r:e.x=e.x<0?0:1;break;case i:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case n:e.y-=Math.floor(e.y);break;case r:e.y=e.y<0?0:1;break;case i:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Be.DEFAULT_IMAGE=null,Be.DEFAULT_MAPPING=300,Be.DEFAULT_ANISOTROPY=4;var Ve=class e{constructor(t=0,n=0,r=0,i=1){e.prototype.isVector4=!0,this.x=t,this.y=n,this.z=r,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)s&&e>_?e_?s=0?1:-1,r=1-t*t;if(r>2**-52){let i=Math.sqrt(r),a=Math.atan2(i,t*n);e=Math.sin(e*a)/i,o=Math.sin(o*a)/i}let i=o*n;if(s=s*e+d*i,c=c*e+f*i,l=l*e+p*i,u=u*e+m*i,e===1-o){let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:console.warn(`THREE.Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<2**-52?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(w(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);let n=this._x,r=this._y,i=this._z,a=this._w,o=a*e._w+n*e._x+r*e._y+i*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=a,this._x=n,this._y=r,this._z=i,this;let s=1-o*o;if(s<=2**-52){let e=1-t;return this._w=e*a+t*this._w,this._x=e*n+t*this._x,this._y=e*r+t*this._y,this._z=e*i+t*this._z,this.normalize(),this}let c=Math.sqrt(s),l=Math.atan2(c,o),u=Math.sin((1-t)*l)/c,d=Math.sin(t*l)/c;return this._w=a*u+this._w*d,this._x=n*u+this._x*d,this._y=r*u+this._y*d,this._z=i*u+this._z*d,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},O=class e{constructor(t=0,n=0,r=0){e.prototype.isVector3=!0,this.x=t,this.y=n,this.z=r}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Ge.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Ge.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return We.copy(this).projectOnVector(e),this.sub(We)}reflect(e){return this.sub(We.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(w(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};let We=new O,Ge=new Ue;var Ke=class{constructor(e=new O(1/0,1/0,1/0),t=new O(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Je),Je.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(nt),rt.subVectors(this.max,nt),Xe.subVectors(e.a,nt),Ze.subVectors(e.b,nt),Qe.subVectors(e.c,nt),$e.subVectors(Ze,Xe),et.subVectors(Qe,Ze),tt.subVectors(Xe,Qe);let t=[0,-$e.z,$e.y,0,-et.z,et.y,0,-tt.z,tt.y,$e.z,0,-$e.x,et.z,0,-et.x,tt.z,0,-tt.x,-$e.y,$e.x,0,-et.y,et.x,0,-tt.y,tt.x,0];return!ot(t,Xe,Ze,Qe,rt)||(t=[1,0,0,0,1,0,0,0,1],!ot(t,Xe,Ze,Qe,rt))?!1:(it.crossVectors($e,et),t=[it.x,it.y,it.z],ot(t,Xe,Ze,Qe,rt))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Je).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Je).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(qe[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),qe[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),qe[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),qe[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),qe[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),qe[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),qe[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),qe[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(qe),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}};let qe=[new O,new O,new O,new O,new O,new O,new O,new O],Je=new O,Ye=new Ke,Xe=new O,Ze=new O,Qe=new O,$e=new O,et=new O,tt=new O,nt=new O,rt=new O,it=new O,at=new O;function ot(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){at.fromArray(e,a);let o=i.x*Math.abs(at.x)+i.y*Math.abs(at.y)+i.z*Math.abs(at.z),s=t.dot(at),c=n.dot(at),l=r.dot(at);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}let st=new Ke,ct=new O,lt=new O;var ut=class{constructor(e=new O,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let n=this.center;t===void 0?st.setFromPoints(e).getCenter(n):n.copy(t);let r=0;for(let t=0,i=e.length;tthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius*=e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;ct.subVectors(e,this.center);let t=ct.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),n=(e-this.radius)*.5;this.center.addScaledVector(ct,n/e),this.radius+=n}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(lt.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(ct.copy(e.center).add(lt)),this.expandByPoint(ct.copy(e.center).sub(lt))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}};let dt=new O,ft=new O,pt=new O,mt=new O,ht=new O,gt=new O,_t=new O;var vt=class{constructor(e=new O,t=new O(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,dt)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=dt.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(dt.copy(this.origin).addScaledVector(this.direction,t),dt.distanceToSquared(e))}distanceSqToSegment(e,t,n,r){ft.copy(e).add(t).multiplyScalar(.5),pt.copy(t).sub(e).normalize(),mt.copy(this.origin).sub(ft);let i=e.distanceTo(t)*.5,a=-this.direction.dot(pt),o=mt.dot(this.direction),s=-mt.dot(pt),c=mt.lengthSq(),l=Math.abs(1-a*a),u,d,f,p;if(l>0)if(u=a*s-o,d=a*o-s,p=i*l,u>=0)if(d>=-p)if(d<=p){let e=1/l;u*=e,d*=e,f=u*(u+a*d+2*o)+d*(a*u+d+2*s)+c}else d=i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d=-i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d<=-p?(u=Math.max(0,-(-a*i+o)),d=u>0?-i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c):d<=p?(u=0,d=Math.min(Math.max(-i,-s),i),f=d*(d+2*s)+c):(u=Math.max(0,-(a*i+o)),d=u>0?i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c);else d=a>0?-i:i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,u),r&&r.copy(ft).addScaledVector(pt,d),f}intersectSphere(e,t){dt.subVectors(e.center,this.origin);let n=dt.dot(this.direction),r=dt.dot(dt)-n*n,i=e.radius*e.radius;if(r>i)return null;let a=Math.sqrt(i-r),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,t):this.at(o,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,d=this.origin;return c>=0?(n=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(n=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),l>=0?(i=(e.min.y-d.y)*l,a=(e.max.y-d.y)*l):(i=(e.max.y-d.y)*l,a=(e.min.y-d.y)*l),n>a||i>r||((i>n||isNaN(n))&&(n=i),(a=0?(o=(e.min.z-d.z)*u,s=(e.max.z-d.z)*u):(o=(e.max.z-d.z)*u,s=(e.min.z-d.z)*u),n>s||o>r)||((o>n||n!==n)&&(n=o),(s=0?n:r,t)}intersectsBox(e){return this.intersectBox(e,dt)!==null}intersectTriangle(e,t,n,r,i){ht.subVectors(t,e),gt.subVectors(n,e),_t.crossVectors(ht,gt);let a=this.direction.dot(_t),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;mt.subVectors(this.origin,e);let s=o*this.direction.dot(gt.crossVectors(mt,gt));if(s<0)return null;let c=o*this.direction.dot(ht.cross(mt));if(c<0||s+c>a)return null;let l=-o*mt.dot(_t);return l<0?null:this.at(l/a,i)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},yt=class e{constructor(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g){e.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,n=e.elements,r=1/bt.setFromMatrixColumn(e,0).length(),i=1/bt.setFromMatrixColumn(e,1).length(),a=1/bt.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(St,e,Ct)}lookAt(e,t,n){let r=this.elements;return Et.subVectors(e,t),Et.lengthSq()===0&&(Et.z=1),Et.normalize(),wt.crossVectors(n,Et),wt.lengthSq()===0&&(Math.abs(n.z)===1?Et.x+=1e-4:Et.z+=1e-4,Et.normalize(),wt.crossVectors(n,Et)),wt.normalize(),Tt.crossVectors(Et,wt),r[0]=wt.x,r[4]=Tt.x,r[8]=Et.x,r[1]=wt.y,r[5]=Tt.y,r[9]=Et.y,r[2]=wt.z,r[6]=Tt.z,r[10]=Et.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],ee=r[12],te=r[1],ne=r[5],re=r[9],w=r[13],ie=r[2],ae=r[6],oe=r[10],se=r[14],ce=r[3],le=r[7],ue=r[11],de=r[15];return i[0]=a*x+o*te+s*ie+c*ce,i[4]=a*S+o*ne+s*ae+c*le,i[8]=a*C+o*re+s*oe+c*ue,i[12]=a*ee+o*w+s*se+c*de,i[1]=l*x+u*te+d*ie+f*ce,i[5]=l*S+u*ne+d*ae+f*le,i[9]=l*C+u*re+d*oe+f*ue,i[13]=l*ee+u*w+d*se+f*de,i[2]=p*x+m*te+h*ie+g*ce,i[6]=p*S+m*ne+h*ae+g*le,i[10]=p*C+m*re+h*oe+g*ue,i[14]=p*ee+m*w+h*se+g*de,i[3]=_*x+v*te+y*ie+b*ce,i[7]=_*S+v*ne+y*ae+b*le,i[11]=_*C+v*re+y*oe+b*ue,i[15]=_*ee+v*w+y*se+b*de,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15];return p*(+i*s*u-r*c*u-i*o*d+n*c*d+r*o*f-n*s*f)+m*(+t*s*f-t*c*d+i*a*d-r*a*f+r*c*l-i*s*l)+h*(+t*c*u-t*o*f-i*a*u+n*a*f+i*o*l-n*c*l)+g*(-r*o*l-t*s*u+t*o*d+r*a*u-n*a*d+n*s*l)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=u*h*c-m*d*c+m*s*f-o*h*f-u*s*g+o*d*g,v=p*d*c-l*h*c-p*s*f+a*h*f+l*s*g-a*d*g,y=l*m*c-p*u*c+p*o*f-a*m*f-l*o*g+a*u*g,b=p*u*s-l*m*s-p*o*d+a*m*d+l*o*h-a*u*h,x=t*_+n*v+r*y+i*b;if(x===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let S=1/x;return e[0]=_*S,e[1]=(m*d*i-u*h*i-m*r*f+n*h*f+u*r*g-n*d*g)*S,e[2]=(o*h*i-m*s*i+m*r*c-n*h*c-o*r*g+n*s*g)*S,e[3]=(u*s*i-o*d*i-u*r*c+n*d*c+o*r*f-n*s*f)*S,e[4]=v*S,e[5]=(l*h*i-p*d*i+p*r*f-t*h*f-l*r*g+t*d*g)*S,e[6]=(p*s*i-a*h*i-p*r*c+t*h*c+a*r*g-t*s*g)*S,e[7]=(a*d*i-l*s*i+l*r*c-t*d*c-a*r*f+t*s*f)*S,e[8]=y*S,e[9]=(p*u*i-l*m*i-p*n*f+t*m*f+l*n*g-t*u*g)*S,e[10]=(a*m*i-p*o*i+p*n*c-t*m*c-a*n*g+t*o*g)*S,e[11]=(l*o*i-a*u*i-l*n*c+t*u*c+a*n*f-t*o*f)*S,e[12]=b*S,e[13]=(l*m*r-p*u*r+p*n*d-t*m*d-l*n*h+t*u*h)*S,e[14]=(p*o*r-a*m*r-p*n*s+t*m*s+a*n*h-t*o*h)*S,e[15]=(a*u*r-l*o*r+l*n*s-t*u*s-a*n*d+t*o*d)*S,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements,i=bt.set(r[0],r[1],r[2]).length(),a=bt.set(r[4],r[5],r[6]).length(),o=bt.set(r[8],r[9],r[10]).length();this.determinant()<0&&(i=-i),e.x=r[12],e.y=r[13],e.z=r[14],xt.copy(this);let s=1/i,c=1/a,l=1/o;return xt.elements[0]*=s,xt.elements[1]*=s,xt.elements[2]*=s,xt.elements[4]*=c,xt.elements[5]*=c,xt.elements[6]*=c,xt.elements[8]*=l,xt.elements[9]*=l,xt.elements[10]*=l,t.setFromRotationMatrix(xt),n.x=i,n.y=a,n.z=o,this}makePerspective(e,t,n,r,i,a,o=x){let s=this.elements,c=2*i/(t-e),l=2*i/(n-r),u=(t+e)/(t-e),d=(n+r)/(n-r),f,p;if(o===2e3)f=-(a+i)/(a-i),p=-2*a*i/(a-i);else if(o===2001)f=-a/(a-i),p=-a*i/(a-i);else throw Error(`THREE.Matrix4.makePerspective(): Invalid coordinate system: `+o);return s[0]=c,s[4]=0,s[8]=u,s[12]=0,s[1]=0,s[5]=l,s[9]=d,s[13]=0,s[2]=0,s[6]=0,s[10]=f,s[14]=p,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=x){let s=this.elements,c=1/(t-e),l=1/(n-r),u=1/(a-i),d=(t+e)*c,f=(n+r)*l,p,m;if(o===2e3)p=(a+i)*u,m=-2*u;else if(o===2001)p=i*u,m=-1*u;else throw Error(`THREE.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return s[0]=2*c,s[4]=0,s[8]=0,s[12]=-d,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-f,s[2]=0,s[6]=0,s[10]=m,s[14]=-p,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}};let bt=new O,xt=new yt,St=new O(0,0,0),Ct=new O(1,1,1),wt=new O,Tt=new O,Et=new O,Dt=new yt,Ot=new Ue;var kt=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(w(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-w(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(w(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-w(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(w(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-w(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:console.warn(`THREE.Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return Dt.makeRotationFromQuaternion(e),this.setFromRotationMatrix(Dt,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Ot.setFromEuler(this),this.setFromQuaternion(Ot,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};kt.DEFAULT_ORDER=`XYZ`;var At=class{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<1){for(let e=0;e1){for(let e=0;e0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.visibility=this._visibility,r.active=this._active,r.bounds=this._bounds.map(e=>({boxInitialized:e.boxInitialized,boxMin:e.box.min.toArray(),boxMax:e.box.max.toArray(),sphereInitialized:e.sphereInitialized,sphereRadius:e.sphere.radius,sphereCenter:e.sphere.center.toArray()})),r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.geometryCount=this._geometryCount,r.matricesTexture=this._matricesTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere={center:r.boundingSphere.center.toArray(),radius:r.boundingSphere.radius}),this.boundingBox!==null&&(r.boundingBox={min:r.boundingBox.min.toArray(),max:r.boundingBox.max.toArray()}));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t0){r.children=[];for(let t=0;t0){r.animations=[];for(let t=0;t0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}static getBarycoord(e,t,n,r,i){qt.subVectors(r,t),Jt.subVectors(n,t),Yt.subVectors(e,t);let a=qt.dot(qt),o=qt.dot(Jt),s=qt.dot(Yt),c=Jt.dot(Jt),l=Jt.dot(Yt),u=a*c-o*o;if(u===0)return i.set(0,0,0),null;let d=1/u,f=(c*s-o*l)*d,p=(a*l-o*s)*d;return i.set(1-f-p,p,f)}static containsPoint(e,t,n,r){return this.getBarycoord(e,t,n,r,Xt)===null?!1:Xt.x>=0&&Xt.y>=0&&Xt.x+Xt.y<=1}static getInterpolation(e,t,n,r,i,a,o,s){return this.getBarycoord(e,t,n,r,Xt)===null?(s.x=0,s.y=0,`z`in s&&(s.z=0),`w`in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(i,Xt.x),s.addScaledVector(a,Xt.y),s.addScaledVector(o,Xt.z),s)}static getInterpolatedAttribute(e,t,n,r,i,a){return rn.setScalar(0),an.setScalar(0),on.setScalar(0),rn.fromBufferAttribute(e,t),an.fromBufferAttribute(e,n),on.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(rn,i.x),a.addScaledVector(an,i.y),a.addScaledVector(on,i.z),a}static isFrontFacing(e,t,n,r){return qt.subVectors(n,t),Jt.subVectors(e,t),qt.cross(Jt).dot(r)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,r){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,n,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return qt.subVectors(this.c,this.b),Jt.subVectors(this.a,this.b),qt.cross(Jt).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return e.getNormal(this.a,this.b,this.c,t)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,n){return e.getBarycoord(t,this.a,this.b,this.c,n)}getInterpolation(t,n,r,i,a){return e.getInterpolation(t,this.a,this.b,this.c,n,r,i,a)}containsPoint(t){return e.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return e.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,r=this.b,i=this.c,a,o;Zt.subVectors(r,n),Qt.subVectors(i,n),en.subVectors(e,n);let s=Zt.dot(en),c=Qt.dot(en);if(s<=0&&c<=0)return t.copy(n);tn.subVectors(e,r);let l=Zt.dot(tn),u=Qt.dot(tn);if(l>=0&&u<=l)return t.copy(r);let d=s*u-l*c;if(d<=0&&s>=0&&l<=0)return a=s/(s-l),t.copy(n).addScaledVector(Zt,a);nn.subVectors(e,i);let f=Zt.dot(nn),p=Qt.dot(nn);if(p>=0&&f<=p)return t.copy(i);let m=f*c-s*p;if(m<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(n).addScaledVector(Qt,o);let h=l*p-f*u;if(h<=0&&u-l>=0&&f-p>=0)return $t.subVectors(i,r),o=(u-l)/(u-l+(f-p)),t.copy(r).addScaledVector($t,o);let g=1/(h+m+d);return a=m*g,o=d*g,t.copy(n).addScaledVector(Zt,a).addScaledVector(Qt,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}};let cn={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},ln={h:0,s:0,l:0},un={h:0,s:0,l:0};function dn(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var fn=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=m){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,je.toWorkingColorSpace(this,t),this}setRGB(e,t,n,r=je.workingColorSpace){return this.r=e,this.g=t,this.b=n,je.toWorkingColorSpace(this,r),this}setHSL(e,t,n,r=je.workingColorSpace){if(e=ie(e,1),t=w(t,0,1),n=w(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=dn(i,r,e+1/3),this.g=dn(i,r,e),this.b=dn(i,r,e-1/3)}return je.toWorkingColorSpace(this,r),this}setStyle(e,t=m){function n(t){t!==void 0&&parseFloat(t)<1&&console.warn(`THREE.Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:console.warn(`THREE.Color: Unknown color model `+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);console.warn(`THREE.Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=m){let n=cn[e.toLowerCase()];return n===void 0?console.warn(`THREE.Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Me(e.r),this.g=Me(e.g),this.b=Me(e.b),this}copyLinearToSRGB(e){return this.r=Ne(e.r),this.g=Ne(e.g),this.b=Ne(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=m){return je.fromWorkingColorSpace(pn.copy(this),e),Math.round(w(pn.r*255,0,255))*65536+Math.round(w(pn.g*255,0,255))*256+Math.round(w(pn.b*255,0,255))}getHexString(e=m){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=je.workingColorSpace){je.fromWorkingColorSpace(pn.copy(this),t);let n=pn.r,r=pn.g,i=pn.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r0&&(e.userData=this.userData),this.parameters!==void 0){let t=this.parameters;for(let n in t)t[n]!==void 0&&(e[n]=t[n]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let t in n){let r=n[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},i=!1;for(let t in this.morphAttributes){let n=this.morphAttributes[t],a=[];for(let t=0,r=n.length;t0&&(r[t]=a,i=!0)}i&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return o!==null&&(e.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;n!==null&&this.setIndex(n.clone(t));let r=e.attributes;for(let e in r){let n=r[e];this.setAttribute(e,n.clone(t))}let i=e.morphAttributes;for(let e in i){let n=[],r=i[e];for(let e=0,i=r.length;e1?null:t.copy(e.start).addScaledVector(n,i)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||An.getNormalMatrix(e),r=this.coplanarPoint(On).applyMatrix4(e),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}};let j={alphahash_fragment:`#ifdef USE_ALPHAHASH - if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard; -#endif`,alphahash_pars_fragment:`#ifdef USE_ALPHAHASH - const float ALPHA_HASH_SCALE = 0.05; - float hash2D( vec2 value ) { - return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) ); - } - float hash3D( vec3 value ) { - return hash2D( vec2( hash2D( value.xy ), value.z ) ); - } - float getAlphaHashThreshold( vec3 position ) { - float maxDeriv = max( - length( dFdx( position.xyz ) ), - length( dFdy( position.xyz ) ) - ); - float pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv ); - vec2 pixScales = vec2( - exp2( floor( log2( pixScale ) ) ), - exp2( ceil( log2( pixScale ) ) ) - ); - vec2 alpha = vec2( - hash3D( floor( pixScales.x * position.xyz ) ), - hash3D( floor( pixScales.y * position.xyz ) ) - ); - float lerpFactor = fract( log2( pixScale ) ); - float x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y; - float a = min( lerpFactor, 1.0 - lerpFactor ); - vec3 cases = vec3( - x * x / ( 2.0 * a * ( 1.0 - a ) ), - ( x - 0.5 * a ) / ( 1.0 - a ), - 1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) ) - ); - float threshold = ( x < ( 1.0 - a ) ) - ? ( ( x < a ) ? cases.x : cases.y ) - : cases.z; - return clamp( threshold , 1.0e-6, 1.0 ); - } -#endif`,alphamap_fragment:`#ifdef USE_ALPHAMAP - diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g; -#endif`,alphamap_pars_fragment:`#ifdef USE_ALPHAMAP - uniform sampler2D alphaMap; -#endif`,alphatest_fragment:`#ifdef USE_ALPHATEST - #ifdef ALPHA_TO_COVERAGE - diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a ); - if ( diffuseColor.a == 0.0 ) discard; - #else - if ( diffuseColor.a < alphaTest ) discard; - #endif -#endif`,alphatest_pars_fragment:`#ifdef USE_ALPHATEST - uniform float alphaTest; -#endif`,aomap_fragment:`#ifdef USE_AOMAP - float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0; - reflectedLight.indirectDiffuse *= ambientOcclusion; - #if defined( USE_CLEARCOAT ) - clearcoatSpecularIndirect *= ambientOcclusion; - #endif - #if defined( USE_SHEEN ) - sheenSpecularIndirect *= ambientOcclusion; - #endif - #if defined( USE_ENVMAP ) && defined( STANDARD ) - float dotNV = saturate( dot( geometryNormal, geometryViewDir ) ); - reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); - #endif -#endif`,aomap_pars_fragment:`#ifdef USE_AOMAP - uniform sampler2D aoMap; - uniform float aoMapIntensity; -#endif`,batching_pars_vertex:`#ifdef USE_BATCHING - #if ! defined( GL_ANGLE_multi_draw ) - #define gl_DrawID _gl_DrawID - uniform int _gl_DrawID; - #endif - uniform highp sampler2D batchingTexture; - uniform highp usampler2D batchingIdTexture; - mat4 getBatchingMatrix( const in float i ) { - int size = textureSize( batchingTexture, 0 ).x; - int j = int( i ) * 4; - int x = j % size; - int y = j / size; - vec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 ); - vec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 ); - vec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 ); - vec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 ); - return mat4( v1, v2, v3, v4 ); - } - float getIndirectIndex( const in int i ) { - int size = textureSize( batchingIdTexture, 0 ).x; - int x = i % size; - int y = i / size; - return float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r ); - } -#endif -#ifdef USE_BATCHING_COLOR - uniform sampler2D batchingColorTexture; - vec3 getBatchingColor( const in float i ) { - int size = textureSize( batchingColorTexture, 0 ).x; - int j = int( i ); - int x = j % size; - int y = j / size; - return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb; - } -#endif`,batching_vertex:`#ifdef USE_BATCHING - mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) ); -#endif`,begin_vertex:`vec3 transformed = vec3( position ); -#ifdef USE_ALPHAHASH - vPosition = vec3( position ); -#endif`,beginnormal_vertex:`vec3 objectNormal = vec3( normal ); -#ifdef USE_TANGENT - vec3 objectTangent = vec3( tangent.xyz ); -#endif`,bsdfs:`float G_BlinnPhong_Implicit( ) { - return 0.25; -} -float D_BlinnPhong( const in float shininess, const in float dotNH ) { - return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess ); -} -vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) { - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( specularColor, 1.0, dotVH ); - float G = G_BlinnPhong_Implicit( ); - float D = D_BlinnPhong( shininess, dotNH ); - return F * ( G * D ); -} // validated`,iridescence_fragment:`#ifdef USE_IRIDESCENCE - const mat3 XYZ_TO_REC709 = mat3( - 3.2404542, -0.9692660, 0.0556434, - -1.5371385, 1.8760108, -0.2040259, - -0.4985314, 0.0415560, 1.0572252 - ); - vec3 Fresnel0ToIor( vec3 fresnel0 ) { - vec3 sqrtF0 = sqrt( fresnel0 ); - return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 ); - } - vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) { - return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) ); - } - float IorToFresnel0( float transmittedIor, float incidentIor ) { - return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor )); - } - vec3 evalSensitivity( float OPD, vec3 shift ) { - float phase = 2.0 * PI * OPD * 1.0e-9; - vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 ); - vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 ); - vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 ); - vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var ); - xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) ); - xyz /= 1.0685e-7; - vec3 rgb = XYZ_TO_REC709 * xyz; - return rgb; - } - vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) { - vec3 I; - float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) ); - float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) ); - float cosTheta2Sq = 1.0 - sinTheta2Sq; - if ( cosTheta2Sq < 0.0 ) { - return vec3( 1.0 ); - } - float cosTheta2 = sqrt( cosTheta2Sq ); - float R0 = IorToFresnel0( iridescenceIOR, outsideIOR ); - float R12 = F_Schlick( R0, 1.0, cosTheta1 ); - float T121 = 1.0 - R12; - float phi12 = 0.0; - if ( iridescenceIOR < outsideIOR ) phi12 = PI; - float phi21 = PI - phi12; - vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR ); - vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 ); - vec3 phi23 = vec3( 0.0 ); - if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI; - if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI; - if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI; - float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2; - vec3 phi = vec3( phi21 ) + phi23; - vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 ); - vec3 r123 = sqrt( R123 ); - vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 ); - vec3 C0 = R12 + Rs; - I = C0; - vec3 Cm = Rs - T121; - for ( int m = 1; m <= 2; ++ m ) { - Cm *= r123; - vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi ); - I += Cm * Sm; - } - return max( I, vec3( 0.0 ) ); - } -#endif`,bumpmap_pars_fragment:`#ifdef USE_BUMPMAP - uniform sampler2D bumpMap; - uniform float bumpScale; - vec2 dHdxy_fwd() { - vec2 dSTdx = dFdx( vBumpMapUv ); - vec2 dSTdy = dFdy( vBumpMapUv ); - float Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x; - float dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll; - float dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll; - return vec2( dBx, dBy ); - } - vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) { - vec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) ); - vec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) ); - vec3 vN = surf_norm; - vec3 R1 = cross( vSigmaY, vN ); - vec3 R2 = cross( vN, vSigmaX ); - float fDet = dot( vSigmaX, R1 ) * faceDirection; - vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); - return normalize( abs( fDet ) * surf_norm - vGrad ); - } -#endif`,clipping_planes_fragment:`#if NUM_CLIPPING_PLANES > 0 - vec4 plane; - #ifdef ALPHA_TO_COVERAGE - float distanceToPlane, distanceGradient; - float clipOpacity = 1.0; - #pragma unroll_loop_start - for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w; - distanceGradient = fwidth( distanceToPlane ) / 2.0; - clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane ); - if ( clipOpacity == 0.0 ) discard; - } - #pragma unroll_loop_end - #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES - float unionClipOpacity = 1.0; - #pragma unroll_loop_start - for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w; - distanceGradient = fwidth( distanceToPlane ) / 2.0; - unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane ); - } - #pragma unroll_loop_end - clipOpacity *= 1.0 - unionClipOpacity; - #endif - diffuseColor.a *= clipOpacity; - if ( diffuseColor.a == 0.0 ) discard; - #else - #pragma unroll_loop_start - for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard; - } - #pragma unroll_loop_end - #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES - bool clipped = true; - #pragma unroll_loop_start - for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped; - } - #pragma unroll_loop_end - if ( clipped ) discard; - #endif - #endif -#endif`,clipping_planes_pars_fragment:`#if NUM_CLIPPING_PLANES > 0 - varying vec3 vClipPosition; - uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,clipping_planes_pars_vertex:`#if NUM_CLIPPING_PLANES > 0 - varying vec3 vClipPosition; -#endif`,clipping_planes_vertex:`#if NUM_CLIPPING_PLANES > 0 - vClipPosition = - mvPosition.xyz; -#endif`,color_fragment:`#if defined( USE_COLOR_ALPHA ) - diffuseColor *= vColor; -#elif defined( USE_COLOR ) - diffuseColor.rgb *= vColor; -#endif`,color_pars_fragment:`#if defined( USE_COLOR_ALPHA ) - varying vec4 vColor; -#elif defined( USE_COLOR ) - varying vec3 vColor; -#endif`,color_pars_vertex:`#if defined( USE_COLOR_ALPHA ) - varying vec4 vColor; -#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) - varying vec3 vColor; -#endif`,color_vertex:`#if defined( USE_COLOR_ALPHA ) - vColor = vec4( 1.0 ); -#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) - vColor = vec3( 1.0 ); -#endif -#ifdef USE_COLOR - vColor *= color; -#endif -#ifdef USE_INSTANCING_COLOR - vColor.xyz *= instanceColor.xyz; -#endif -#ifdef USE_BATCHING_COLOR - vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) ); - vColor.xyz *= batchingColor.xyz; -#endif`,common:`#define PI 3.141592653589793 -#define PI2 6.283185307179586 -#define PI_HALF 1.5707963267948966 -#define RECIPROCAL_PI 0.3183098861837907 -#define RECIPROCAL_PI2 0.15915494309189535 -#define EPSILON 1e-6 -#ifndef saturate -#define saturate( a ) clamp( a, 0.0, 1.0 ) -#endif -#define whiteComplement( a ) ( 1.0 - saturate( a ) ) -float pow2( const in float x ) { return x*x; } -vec3 pow2( const in vec3 x ) { return x*x; } -float pow3( const in float x ) { return x*x*x; } -float pow4( const in float x ) { float x2 = x*x; return x2*x2; } -float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); } -float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); } -highp float rand( const in vec2 uv ) { - const highp float a = 12.9898, b = 78.233, c = 43758.5453; - highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); - return fract( sin( sn ) * c ); -} -#ifdef HIGH_PRECISION - float precisionSafeLength( vec3 v ) { return length( v ); } -#else - float precisionSafeLength( vec3 v ) { - float maxComponent = max3( abs( v ) ); - return length( v / maxComponent ) * maxComponent; - } -#endif -struct IncidentLight { - vec3 color; - vec3 direction; - bool visible; -}; -struct ReflectedLight { - vec3 directDiffuse; - vec3 directSpecular; - vec3 indirectDiffuse; - vec3 indirectSpecular; -}; -#ifdef USE_ALPHAHASH - varying vec3 vPosition; -#endif -vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); -} -vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) { - return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); -} -mat3 transposeMat3( const in mat3 m ) { - mat3 tmp; - tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); - tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); - tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); - return tmp; -} -bool isPerspectiveMatrix( mat4 m ) { - return m[ 2 ][ 3 ] == - 1.0; -} -vec2 equirectUv( in vec3 dir ) { - float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5; - float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5; - return vec2( u, v ); -} -vec3 BRDF_Lambert( const in vec3 diffuseColor ) { - return RECIPROCAL_PI * diffuseColor; -} -vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { - float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} -float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { - float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} // validated`,cube_uv_reflection_fragment:`#ifdef ENVMAP_TYPE_CUBE_UV - #define cubeUV_minMipLevel 4.0 - #define cubeUV_minTileSize 16.0 - float getFace( vec3 direction ) { - vec3 absDirection = abs( direction ); - float face = - 1.0; - if ( absDirection.x > absDirection.z ) { - if ( absDirection.x > absDirection.y ) - face = direction.x > 0.0 ? 0.0 : 3.0; - else - face = direction.y > 0.0 ? 1.0 : 4.0; - } else { - if ( absDirection.z > absDirection.y ) - face = direction.z > 0.0 ? 2.0 : 5.0; - else - face = direction.y > 0.0 ? 1.0 : 4.0; - } - return face; - } - vec2 getUV( vec3 direction, float face ) { - vec2 uv; - if ( face == 0.0 ) { - uv = vec2( direction.z, direction.y ) / abs( direction.x ); - } else if ( face == 1.0 ) { - uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); - } else if ( face == 2.0 ) { - uv = vec2( - direction.x, direction.y ) / abs( direction.z ); - } else if ( face == 3.0 ) { - uv = vec2( - direction.z, direction.y ) / abs( direction.x ); - } else if ( face == 4.0 ) { - uv = vec2( - direction.x, direction.z ) / abs( direction.y ); - } else { - uv = vec2( direction.x, direction.y ) / abs( direction.z ); - } - return 0.5 * ( uv + 1.0 ); - } - vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) { - float face = getFace( direction ); - float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 ); - mipInt = max( mipInt, cubeUV_minMipLevel ); - float faceSize = exp2( mipInt ); - highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; - if ( face > 2.0 ) { - uv.y += faceSize; - face -= 3.0; - } - uv.x += face * faceSize; - uv.x += filterInt * 3.0 * cubeUV_minTileSize; - uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); - uv.x *= CUBEUV_TEXEL_WIDTH; - uv.y *= CUBEUV_TEXEL_HEIGHT; - #ifdef texture2DGradEXT - return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; - #else - return texture2D( envMap, uv ).rgb; - #endif - } - #define cubeUV_r0 1.0 - #define cubeUV_m0 - 2.0 - #define cubeUV_r1 0.8 - #define cubeUV_m1 - 1.0 - #define cubeUV_r4 0.4 - #define cubeUV_m4 2.0 - #define cubeUV_r5 0.305 - #define cubeUV_m5 3.0 - #define cubeUV_r6 0.21 - #define cubeUV_m6 4.0 - float roughnessToMip( float roughness ) { - float mip = 0.0; - if ( roughness >= cubeUV_r1 ) { - mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; - } else if ( roughness >= cubeUV_r4 ) { - mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; - } else if ( roughness >= cubeUV_r5 ) { - mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; - } else if ( roughness >= cubeUV_r6 ) { - mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; - } else { - mip = - 2.0 * log2( 1.16 * roughness ); } - return mip; - } - vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) { - float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); - float mipF = fract( mip ); - float mipInt = floor( mip ); - vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt ); - if ( mipF == 0.0 ) { - return vec4( color0, 1.0 ); - } else { - vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 ); - return vec4( mix( color0, color1, mipF ), 1.0 ); - } - } -#endif`,defaultnormal_vertex:`vec3 transformedNormal = objectNormal; -#ifdef USE_TANGENT - vec3 transformedTangent = objectTangent; -#endif -#ifdef USE_BATCHING - mat3 bm = mat3( batchingMatrix ); - transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) ); - transformedNormal = bm * transformedNormal; - #ifdef USE_TANGENT - transformedTangent = bm * transformedTangent; - #endif -#endif -#ifdef USE_INSTANCING - mat3 im = mat3( instanceMatrix ); - transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) ); - transformedNormal = im * transformedNormal; - #ifdef USE_TANGENT - transformedTangent = im * transformedTangent; - #endif -#endif -transformedNormal = normalMatrix * transformedNormal; -#ifdef FLIP_SIDED - transformedNormal = - transformedNormal; -#endif -#ifdef USE_TANGENT - transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz; - #ifdef FLIP_SIDED - transformedTangent = - transformedTangent; - #endif -#endif`,displacementmap_pars_vertex:`#ifdef USE_DISPLACEMENTMAP - uniform sampler2D displacementMap; - uniform float displacementScale; - uniform float displacementBias; -#endif`,displacementmap_vertex:`#ifdef USE_DISPLACEMENTMAP - transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,emissivemap_fragment:`#ifdef USE_EMISSIVEMAP - vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); - totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,emissivemap_pars_fragment:`#ifdef USE_EMISSIVEMAP - uniform sampler2D emissiveMap; -#endif`,colorspace_fragment:`gl_FragColor = linearToOutputTexel( gl_FragColor );`,colorspace_pars_fragment:` -const mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3( - vec3( 0.8224621, 0.177538, 0.0 ), - vec3( 0.0331941, 0.9668058, 0.0 ), - vec3( 0.0170827, 0.0723974, 0.9105199 ) -); -const mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3( - vec3( 1.2249401, - 0.2249404, 0.0 ), - vec3( - 0.0420569, 1.0420571, 0.0 ), - vec3( - 0.0196376, - 0.0786361, 1.0982735 ) -); -vec4 LinearSRGBToLinearDisplayP3( in vec4 value ) { - return vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a ); -} -vec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) { - return vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a ); -} -vec4 LinearTransferOETF( in vec4 value ) { - return value; -} -vec4 sRGBTransferOETF( in vec4 value ) { - return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); -}`,envmap_fragment:`#ifdef USE_ENVMAP - #ifdef ENV_WORLDPOS - vec3 cameraToFrag; - if ( isOrthographic ) { - cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); - } else { - cameraToFrag = normalize( vWorldPosition - cameraPosition ); - } - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - #ifdef ENVMAP_MODE_REFLECTION - vec3 reflectVec = reflect( cameraToFrag, worldNormal ); - #else - vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio ); - #endif - #else - vec3 reflectVec = vReflect; - #endif - #ifdef ENVMAP_TYPE_CUBE - vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) ); - #else - vec4 envColor = vec4( 0.0 ); - #endif - #ifdef ENVMAP_BLENDING_MULTIPLY - outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity ); - #elif defined( ENVMAP_BLENDING_MIX ) - outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity ); - #elif defined( ENVMAP_BLENDING_ADD ) - outgoingLight += envColor.xyz * specularStrength * reflectivity; - #endif -#endif`,envmap_common_pars_fragment:`#ifdef USE_ENVMAP - uniform float envMapIntensity; - uniform float flipEnvMap; - uniform mat3 envMapRotation; - #ifdef ENVMAP_TYPE_CUBE - uniform samplerCube envMap; - #else - uniform sampler2D envMap; - #endif - -#endif`,envmap_pars_fragment:`#ifdef USE_ENVMAP - uniform float reflectivity; - #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) - #define ENV_WORLDPOS - #endif - #ifdef ENV_WORLDPOS - varying vec3 vWorldPosition; - uniform float refractionRatio; - #else - varying vec3 vReflect; - #endif -#endif`,envmap_pars_vertex:`#ifdef USE_ENVMAP - #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) - #define ENV_WORLDPOS - #endif - #ifdef ENV_WORLDPOS - - varying vec3 vWorldPosition; - #else - varying vec3 vReflect; - uniform float refractionRatio; - #endif -#endif`,envmap_physical_pars_fragment:`#ifdef USE_ENVMAP - vec3 getIBLIrradiance( const in vec3 normal ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 ); - return PI * envMapColor.rgb * envMapIntensity; - #else - return vec3( 0.0 ); - #endif - } - vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 reflectVec = reflect( - viewDir, normal ); - reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) ); - reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); - vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness ); - return envMapColor.rgb * envMapIntensity; - #else - return vec3( 0.0 ); - #endif - } - #ifdef USE_ANISOTROPY - vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 bentNormal = cross( bitangent, viewDir ); - bentNormal = normalize( cross( bentNormal, bitangent ) ); - bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) ); - return getIBLRadiance( viewDir, bentNormal, roughness ); - #else - return vec3( 0.0 ); - #endif - } - #endif -#endif`,envmap_vertex:`#ifdef USE_ENVMAP - #ifdef ENV_WORLDPOS - vWorldPosition = worldPosition.xyz; - #else - vec3 cameraToVertex; - if ( isOrthographic ) { - cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); - } else { - cameraToVertex = normalize( worldPosition.xyz - cameraPosition ); - } - vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); - #ifdef ENVMAP_MODE_REFLECTION - vReflect = reflect( cameraToVertex, worldNormal ); - #else - vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); - #endif - #endif -#endif`,fog_vertex:`#ifdef USE_FOG - vFogDepth = - mvPosition.z; -#endif`,fog_pars_vertex:`#ifdef USE_FOG - varying float vFogDepth; -#endif`,fog_fragment:`#ifdef USE_FOG - #ifdef FOG_EXP2 - float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); - #else - float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); - #endif - gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); -#endif`,fog_pars_fragment:`#ifdef USE_FOG - uniform vec3 fogColor; - varying float vFogDepth; - #ifdef FOG_EXP2 - uniform float fogDensity; - #else - uniform float fogNear; - uniform float fogFar; - #endif -#endif`,gradientmap_pars_fragment:`#ifdef USE_GRADIENTMAP - uniform sampler2D gradientMap; -#endif -vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { - float dotNL = dot( normal, lightDirection ); - vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 ); - #ifdef USE_GRADIENTMAP - return vec3( texture2D( gradientMap, coord ).r ); - #else - vec2 fw = fwidth( coord ) * 0.5; - return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); - #endif -}`,lightmap_pars_fragment:`#ifdef USE_LIGHTMAP - uniform sampler2D lightMap; - uniform float lightMapIntensity; -#endif`,lights_lambert_fragment:`LambertMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,lights_lambert_pars_fragment:`varying vec3 vViewPosition; -struct LambertMaterial { - vec3 diffuseColor; - float specularStrength; -}; -void RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_Lambert -#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,lights_pars_begin:`uniform bool receiveShadow; -uniform vec3 ambientLightColor; -#if defined( USE_LIGHT_PROBES ) - uniform vec3 lightProbe[ 9 ]; -#endif -vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) { - float x = normal.x, y = normal.y, z = normal.z; - vec3 result = shCoefficients[ 0 ] * 0.886227; - result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; - result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; - result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; - result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; - result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; - result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); - result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; - result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); - return result; -} -vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) { - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe ); - return irradiance; -} -vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) { - vec3 irradiance = ambientLightColor; - return irradiance; -} -float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) { - float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 ); - if ( cutoffDistance > 0.0 ) { - distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) ); - } - return distanceFalloff; -} -float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) { - return smoothstep( coneCosine, penumbraCosine, angleCosine ); -} -#if NUM_DIR_LIGHTS > 0 - struct DirectionalLight { - vec3 direction; - vec3 color; - }; - uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; - void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) { - light.color = directionalLight.color; - light.direction = directionalLight.direction; - light.visible = true; - } -#endif -#if NUM_POINT_LIGHTS > 0 - struct PointLight { - vec3 position; - vec3 color; - float distance; - float decay; - }; - uniform PointLight pointLights[ NUM_POINT_LIGHTS ]; - void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) { - vec3 lVector = pointLight.position - geometryPosition; - light.direction = normalize( lVector ); - float lightDistance = length( lVector ); - light.color = pointLight.color; - light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay ); - light.visible = ( light.color != vec3( 0.0 ) ); - } -#endif -#if NUM_SPOT_LIGHTS > 0 - struct SpotLight { - vec3 position; - vec3 direction; - vec3 color; - float distance; - float decay; - float coneCos; - float penumbraCos; - }; - uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ]; - void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) { - vec3 lVector = spotLight.position - geometryPosition; - light.direction = normalize( lVector ); - float angleCos = dot( light.direction, spotLight.direction ); - float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos ); - if ( spotAttenuation > 0.0 ) { - float lightDistance = length( lVector ); - light.color = spotLight.color * spotAttenuation; - light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay ); - light.visible = ( light.color != vec3( 0.0 ) ); - } else { - light.color = vec3( 0.0 ); - light.visible = false; - } - } -#endif -#if NUM_RECT_AREA_LIGHTS > 0 - struct RectAreaLight { - vec3 color; - vec3 position; - vec3 halfWidth; - vec3 halfHeight; - }; - uniform sampler2D ltc_1; uniform sampler2D ltc_2; - uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ]; -#endif -#if NUM_HEMI_LIGHTS > 0 - struct HemisphereLight { - vec3 direction; - vec3 skyColor; - vec3 groundColor; - }; - uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ]; - vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) { - float dotNL = dot( normal, hemiLight.direction ); - float hemiDiffuseWeight = 0.5 * dotNL + 0.5; - vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); - return irradiance; - } -#endif`,lights_toon_fragment:`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,lights_toon_pars_fragment:`varying vec3 vViewPosition; -struct ToonMaterial { - vec3 diffuseColor; -}; -void RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { - vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_Toon -#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,lights_phong_fragment:`BlinnPhongMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.specularColor = specular; -material.specularShininess = shininess; -material.specularStrength = specularStrength;`,lights_phong_pars_fragment:`varying vec3 vViewPosition; -struct BlinnPhongMaterial { - vec3 diffuseColor; - vec3 specularColor; - float specularShininess; - float specularStrength; -}; -void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); - reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength; -} -void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_BlinnPhong -#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,lights_physical_fragment:`PhysicalMaterial material; -material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); -vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) ); -float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); -material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness; -material.roughness = min( material.roughness, 1.0 ); -#ifdef IOR - material.ior = ior; - #ifdef USE_SPECULAR - float specularIntensityFactor = specularIntensity; - vec3 specularColorFactor = specularColor; - #ifdef USE_SPECULAR_COLORMAP - specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb; - #endif - #ifdef USE_SPECULAR_INTENSITYMAP - specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a; - #endif - material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); - #else - float specularIntensityFactor = 1.0; - vec3 specularColorFactor = vec3( 1.0 ); - material.specularF90 = 1.0; - #endif - material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor ); -#else - material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor ); - material.specularF90 = 1.0; -#endif -#ifdef USE_CLEARCOAT - material.clearcoat = clearcoat; - material.clearcoatRoughness = clearcoatRoughness; - material.clearcoatF0 = vec3( 0.04 ); - material.clearcoatF90 = 1.0; - #ifdef USE_CLEARCOATMAP - material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x; - #endif - #ifdef USE_CLEARCOAT_ROUGHNESSMAP - material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y; - #endif - material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); - material.clearcoatRoughness += geometryRoughness; - material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); -#endif -#ifdef USE_DISPERSION - material.dispersion = dispersion; -#endif -#ifdef USE_IRIDESCENCE - material.iridescence = iridescence; - material.iridescenceIOR = iridescenceIOR; - #ifdef USE_IRIDESCENCEMAP - material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r; - #endif - #ifdef USE_IRIDESCENCE_THICKNESSMAP - material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum; - #else - material.iridescenceThickness = iridescenceThicknessMaximum; - #endif -#endif -#ifdef USE_SHEEN - material.sheenColor = sheenColor; - #ifdef USE_SHEEN_COLORMAP - material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb; - #endif - material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 ); - #ifdef USE_SHEEN_ROUGHNESSMAP - material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a; - #endif -#endif -#ifdef USE_ANISOTROPY - #ifdef USE_ANISOTROPYMAP - mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x ); - vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb; - vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b; - #else - vec2 anisotropyV = anisotropyVector; - #endif - material.anisotropy = length( anisotropyV ); - if( material.anisotropy == 0.0 ) { - anisotropyV = vec2( 1.0, 0.0 ); - } else { - anisotropyV /= material.anisotropy; - material.anisotropy = saturate( material.anisotropy ); - } - material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) ); - material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y; - material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y; -#endif`,lights_physical_pars_fragment:`struct PhysicalMaterial { - vec3 diffuseColor; - float roughness; - vec3 specularColor; - float specularF90; - float dispersion; - #ifdef USE_CLEARCOAT - float clearcoat; - float clearcoatRoughness; - vec3 clearcoatF0; - float clearcoatF90; - #endif - #ifdef USE_IRIDESCENCE - float iridescence; - float iridescenceIOR; - float iridescenceThickness; - vec3 iridescenceFresnel; - vec3 iridescenceF0; - #endif - #ifdef USE_SHEEN - vec3 sheenColor; - float sheenRoughness; - #endif - #ifdef IOR - float ior; - #endif - #ifdef USE_TRANSMISSION - float transmission; - float transmissionAlpha; - float thickness; - float attenuationDistance; - vec3 attenuationColor; - #endif - #ifdef USE_ANISOTROPY - float anisotropy; - float alphaT; - vec3 anisotropyT; - vec3 anisotropyB; - #endif -}; -vec3 clearcoatSpecularDirect = vec3( 0.0 ); -vec3 clearcoatSpecularIndirect = vec3( 0.0 ); -vec3 sheenSpecularDirect = vec3( 0.0 ); -vec3 sheenSpecularIndirect = vec3(0.0 ); -vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) { - float x = clamp( 1.0 - dotVH, 0.0, 1.0 ); - float x2 = x * x; - float x5 = clamp( x * x2 * x2, 0.0, 0.9999 ); - return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); -} -float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) { - float a2 = pow2( alpha ); - float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); - float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); - return 0.5 / max( gv + gl, EPSILON ); -} -float D_GGX( const in float alpha, const in float dotNH ) { - float a2 = pow2( alpha ); - float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; - return RECIPROCAL_PI * a2 / pow2( denom ); -} -#ifdef USE_ANISOTROPY - float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) { - float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) ); - float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) ); - float v = 0.5 / ( gv + gl ); - return saturate(v); - } - float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) { - float a2 = alphaT * alphaB; - highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH ); - highp float v2 = dot( v, v ); - float w2 = a2 / v2; - return RECIPROCAL_PI * a2 * pow2 ( w2 ); - } -#endif -#ifdef USE_CLEARCOAT - vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) { - vec3 f0 = material.clearcoatF0; - float f90 = material.clearcoatF90; - float roughness = material.clearcoatRoughness; - float alpha = pow2( roughness ); - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( f0, f90, dotVH ); - float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - float D = D_GGX( alpha, dotNH ); - return F * ( V * D ); - } -#endif -vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) { - vec3 f0 = material.specularColor; - float f90 = material.specularF90; - float roughness = material.roughness; - float alpha = pow2( roughness ); - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( f0, f90, dotVH ); - #ifdef USE_IRIDESCENCE - F = mix( F, material.iridescenceFresnel, material.iridescence ); - #endif - #ifdef USE_ANISOTROPY - float dotTL = dot( material.anisotropyT, lightDir ); - float dotTV = dot( material.anisotropyT, viewDir ); - float dotTH = dot( material.anisotropyT, halfDir ); - float dotBL = dot( material.anisotropyB, lightDir ); - float dotBV = dot( material.anisotropyB, viewDir ); - float dotBH = dot( material.anisotropyB, halfDir ); - float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL ); - float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH ); - #else - float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - float D = D_GGX( alpha, dotNH ); - #endif - return F * ( V * D ); -} -vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) { - const float LUT_SIZE = 64.0; - const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE; - const float LUT_BIAS = 0.5 / LUT_SIZE; - float dotNV = saturate( dot( N, V ) ); - vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) ); - uv = uv * LUT_SCALE + LUT_BIAS; - return uv; -} -float LTC_ClippedSphereFormFactor( const in vec3 f ) { - float l = length( f ); - return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 ); -} -vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) { - float x = dot( v1, v2 ); - float y = abs( x ); - float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y; - float b = 3.4175940 + ( 4.1616724 + y ) * y; - float v = a / b; - float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v; - return cross( v1, v2 ) * theta_sintheta; -} -vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) { - vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ]; - vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ]; - vec3 lightNormal = cross( v1, v2 ); - if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 ); - vec3 T1, T2; - T1 = normalize( V - N * dot( V, N ) ); - T2 = - cross( N, T1 ); - mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) ); - vec3 coords[ 4 ]; - coords[ 0 ] = mat * ( rectCoords[ 0 ] - P ); - coords[ 1 ] = mat * ( rectCoords[ 1 ] - P ); - coords[ 2 ] = mat * ( rectCoords[ 2 ] - P ); - coords[ 3 ] = mat * ( rectCoords[ 3 ] - P ); - coords[ 0 ] = normalize( coords[ 0 ] ); - coords[ 1 ] = normalize( coords[ 1 ] ); - coords[ 2 ] = normalize( coords[ 2 ] ); - coords[ 3 ] = normalize( coords[ 3 ] ); - vec3 vectorFormFactor = vec3( 0.0 ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] ); - float result = LTC_ClippedSphereFormFactor( vectorFormFactor ); - return vec3( result ); -} -#if defined( USE_SHEEN ) -float D_Charlie( float roughness, float dotNH ) { - float alpha = pow2( roughness ); - float invAlpha = 1.0 / alpha; - float cos2h = dotNH * dotNH; - float sin2h = max( 1.0 - cos2h, 0.0078125 ); - return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); -} -float V_Neubelt( float dotNV, float dotNL ) { - return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); -} -vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) { - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float D = D_Charlie( sheenRoughness, dotNH ); - float V = V_Neubelt( dotNV, dotNL ); - return sheenColor * ( D * V ); -} -#endif -float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { - float dotNV = saturate( dot( normal, viewDir ) ); - float r2 = roughness * roughness; - float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95; - float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72; - float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) ); - return saturate( DG * RECIPROCAL_PI ); -} -vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { - float dotNV = saturate( dot( normal, viewDir ) ); - const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); - const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 ); - vec4 r = roughness * c0 + c1; - float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; - vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw; - return fab; -} -vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) { - vec2 fab = DFGApprox( normal, viewDir, roughness ); - return specularColor * fab.x + specularF90 * fab.y; -} -#ifdef USE_IRIDESCENCE -void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { -#else -void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { -#endif - vec2 fab = DFGApprox( normal, viewDir, roughness ); - #ifdef USE_IRIDESCENCE - vec3 Fr = mix( specularColor, iridescenceF0, iridescence ); - #else - vec3 Fr = specularColor; - #endif - vec3 FssEss = Fr * fab.x + specularF90 * fab.y; - float Ess = fab.x + fab.y; - float Ems = 1.0 - Ess; - vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg ); - singleScatter += FssEss; - multiScatter += Fms * Ems; -} -#if NUM_RECT_AREA_LIGHTS > 0 - void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - vec3 normal = geometryNormal; - vec3 viewDir = geometryViewDir; - vec3 position = geometryPosition; - vec3 lightPos = rectAreaLight.position; - vec3 halfWidth = rectAreaLight.halfWidth; - vec3 halfHeight = rectAreaLight.halfHeight; - vec3 lightColor = rectAreaLight.color; - float roughness = material.roughness; - vec3 rectCoords[ 4 ]; - rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight; - rectCoords[ 2 ] = lightPos - halfWidth + halfHeight; - rectCoords[ 3 ] = lightPos + halfWidth + halfHeight; - vec2 uv = LTC_Uv( normal, viewDir, roughness ); - vec4 t1 = texture2D( ltc_1, uv ); - vec4 t2 = texture2D( ltc_2, uv ); - mat3 mInv = mat3( - vec3( t1.x, 0, t1.y ), - vec3( 0, 1, 0 ), - vec3( t1.z, 0, t1.w ) - ); - vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y ); - reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords ); - reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords ); - } -#endif -void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - #ifdef USE_CLEARCOAT - float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) ); - vec3 ccIrradiance = dotNLcc * directLight.color; - clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material ); - #endif - #ifdef USE_SHEEN - sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness ); - #endif - reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material ); - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { - #ifdef USE_CLEARCOAT - clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); - #endif - #ifdef USE_SHEEN - sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ); - #endif - vec3 singleScattering = vec3( 0.0 ); - vec3 multiScattering = vec3( 0.0 ); - vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI; - #ifdef USE_IRIDESCENCE - computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering ); - #else - computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering ); - #endif - vec3 totalScattering = singleScattering + multiScattering; - vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) ); - reflectedLight.indirectSpecular += radiance * singleScattering; - reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance; - reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance; -} -#define RE_Direct RE_Direct_Physical -#define RE_Direct_RectArea RE_Direct_RectArea_Physical -#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical -#define RE_IndirectSpecular RE_IndirectSpecular_Physical -float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { - return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); -}`,lights_fragment_begin:` -vec3 geometryPosition = - vViewPosition; -vec3 geometryNormal = normal; -vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); -vec3 geometryClearcoatNormal = vec3( 0.0 ); -#ifdef USE_CLEARCOAT - geometryClearcoatNormal = clearcoatNormal; -#endif -#ifdef USE_IRIDESCENCE - float dotNVi = saturate( dot( normal, geometryViewDir ) ); - if ( material.iridescenceThickness == 0.0 ) { - material.iridescence = 0.0; - } else { - material.iridescence = saturate( material.iridescence ); - } - if ( material.iridescence > 0.0 ) { - material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); - material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); - } -#endif -IncidentLight directLight; -#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) - PointLight pointLight; - #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 - PointLightShadow pointLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { - pointLight = pointLights[ i ]; - getPointLightInfo( pointLight, geometryPosition, directLight ); - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) - pointLightShadow = pointLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) - SpotLight spotLight; - vec4 spotColor; - vec3 spotLightCoord; - bool inSpotLightMap; - #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { - spotLight = spotLights[ i ]; - getSpotLightInfo( spotLight, geometryPosition, directLight ); - #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) - #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX - #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS - #else - #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) - #endif - #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) - spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; - inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); - spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); - directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; - #endif - #undef SPOT_LIGHT_MAP_INDEX - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - spotLightShadow = spotLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) - DirectionalLight directionalLight; - #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { - directionalLight = directionalLights[ i ]; - getDirectionalLightInfo( directionalLight, directLight ); - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) - directionalLightShadow = directionalLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) - RectAreaLight rectAreaLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { - rectAreaLight = rectAreaLights[ i ]; - RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if defined( RE_IndirectDiffuse ) - vec3 iblIrradiance = vec3( 0.0 ); - vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); - #if defined( USE_LIGHT_PROBES ) - irradiance += getLightProbeIrradiance( lightProbe, geometryNormal ); - #endif - #if ( NUM_HEMI_LIGHTS > 0 ) - #pragma unroll_loop_start - for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { - irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal ); - } - #pragma unroll_loop_end - #endif -#endif -#if defined( RE_IndirectSpecular ) - vec3 radiance = vec3( 0.0 ); - vec3 clearcoatRadiance = vec3( 0.0 ); -#endif`,lights_fragment_maps:`#if defined( RE_IndirectDiffuse ) - #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; - irradiance += lightMapIrradiance; - #endif - #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV ) - iblIrradiance += getIBLIrradiance( geometryNormal ); - #endif -#endif -#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular ) - #ifdef USE_ANISOTROPY - radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy ); - #else - radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness ); - #endif - #ifdef USE_CLEARCOAT - clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness ); - #endif -#endif`,lights_fragment_end:`#if defined( RE_IndirectDiffuse ) - RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif -#if defined( RE_IndirectSpecular ) - RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif`,logdepthbuf_fragment:`#if defined( USE_LOGDEPTHBUF ) - gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,logdepthbuf_pars_fragment:`#if defined( USE_LOGDEPTHBUF ) - uniform float logDepthBufFC; - varying float vFragDepth; - varying float vIsPerspective; -#endif`,logdepthbuf_pars_vertex:`#ifdef USE_LOGDEPTHBUF - varying float vFragDepth; - varying float vIsPerspective; -#endif`,logdepthbuf_vertex:`#ifdef USE_LOGDEPTHBUF - vFragDepth = 1.0 + gl_Position.w; - vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,map_fragment:`#ifdef USE_MAP -#ifdef USE_MIPMAP_BIAS - vec4 sampledDiffuseColor = texture2D( map, vMapUv, mipmapBias ); -#else - vec4 sampledDiffuseColor = texture2D( map, vMapUv ); -#endif - #ifdef DECODE_VIDEO_TEXTURE - sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w ); - - #endif - diffuseColor *= sampledDiffuseColor; -#endif`,map_pars_fragment:`#ifdef USE_MAP - uniform sampler2D map; - -#ifdef USE_MIPMAP_BIAS - uniform float mipmapBias; -#endif -#endif`,map_particle_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) - #if defined( USE_POINTS_UV ) - vec2 uv = vUv; - #else - vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy; - #endif -#endif -#ifdef USE_MAP - diffuseColor *= texture2D( map, uv ); -#endif -#ifdef USE_ALPHAMAP - diffuseColor.a *= texture2D( alphaMap, uv ).g; -#endif`,map_particle_pars_fragment:`#if defined( USE_POINTS_UV ) - varying vec2 vUv; -#else - #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) - uniform mat3 uvTransform; - #endif -#endif -#ifdef USE_MAP - uniform sampler2D map; -#endif -#ifdef USE_ALPHAMAP - uniform sampler2D alphaMap; -#endif`,metalnessmap_fragment:`float metalnessFactor = metalness; -#ifdef USE_METALNESSMAP - vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); - metalnessFactor *= texelMetalness.b; -#endif`,metalnessmap_pars_fragment:`#ifdef USE_METALNESSMAP - uniform sampler2D metalnessMap; -#endif`,morphinstance_vertex:`#ifdef USE_INSTANCING_MORPH - float morphTargetInfluences[ MORPHTARGETS_COUNT ]; - float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r; - } -#endif`,morphcolor_vertex:`#if defined( USE_MORPHCOLORS ) - vColor *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - #if defined( USE_COLOR_ALPHA ) - if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ]; - #elif defined( USE_COLOR ) - if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; - #endif - } -#endif`,morphnormal_vertex:`#ifdef USE_MORPHNORMALS - objectNormal *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; - } -#endif`,morphtarget_pars_vertex:`#ifdef USE_MORPHTARGETS - #ifndef USE_INSTANCING_MORPH - uniform float morphTargetBaseInfluence; - uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; - #endif - uniform sampler2DArray morphTargetsTexture; - uniform ivec2 morphTargetsTextureSize; - vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) { - int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; - int y = texelIndex / morphTargetsTextureSize.x; - int x = texelIndex - y * morphTargetsTextureSize.x; - ivec3 morphUV = ivec3( x, y, morphTargetIndex ); - return texelFetch( morphTargetsTexture, morphUV, 0 ); - } -#endif`,morphtarget_vertex:`#ifdef USE_MORPHTARGETS - transformed *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; - } -#endif`,normal_fragment_begin:`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; -#ifdef FLAT_SHADED - vec3 fdx = dFdx( vViewPosition ); - vec3 fdy = dFdy( vViewPosition ); - vec3 normal = normalize( cross( fdx, fdy ) ); -#else - vec3 normal = normalize( vNormal ); - #ifdef DOUBLE_SIDED - normal *= faceDirection; - #endif -#endif -#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) - #ifdef USE_TANGENT - mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); - #else - mat3 tbn = getTangentFrame( - vViewPosition, normal, - #if defined( USE_NORMALMAP ) - vNormalMapUv - #elif defined( USE_CLEARCOAT_NORMALMAP ) - vClearcoatNormalMapUv - #else - vUv - #endif - ); - #endif - #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) - tbn[0] *= faceDirection; - tbn[1] *= faceDirection; - #endif -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - #ifdef USE_TANGENT - mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); - #else - mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv ); - #endif - #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) - tbn2[0] *= faceDirection; - tbn2[1] *= faceDirection; - #endif -#endif -vec3 nonPerturbedNormal = normal;`,normal_fragment_maps:`#ifdef USE_NORMALMAP_OBJECTSPACE - normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; - #ifdef FLIP_SIDED - normal = - normal; - #endif - #ifdef DOUBLE_SIDED - normal = normal * faceDirection; - #endif - normal = normalize( normalMatrix * normal ); -#elif defined( USE_NORMALMAP_TANGENTSPACE ) - vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; - mapN.xy *= normalScale; - normal = normalize( tbn * mapN ); -#elif defined( USE_BUMPMAP ) - normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,normal_pars_fragment:`#ifndef FLAT_SHADED - varying vec3 vNormal; - #ifdef USE_TANGENT - varying vec3 vTangent; - varying vec3 vBitangent; - #endif -#endif`,normal_pars_vertex:`#ifndef FLAT_SHADED - varying vec3 vNormal; - #ifdef USE_TANGENT - varying vec3 vTangent; - varying vec3 vBitangent; - #endif -#endif`,normal_vertex:`#ifndef FLAT_SHADED - vNormal = normalize( transformedNormal ); - #ifdef USE_TANGENT - vTangent = normalize( transformedTangent ); - vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); - #endif -#endif`,normalmap_pars_fragment:`#ifdef USE_NORMALMAP - uniform sampler2D normalMap; - uniform vec2 normalScale; -#endif -#ifdef USE_NORMALMAP_OBJECTSPACE - uniform mat3 normalMatrix; -#endif -#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) ) - mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) { - vec3 q0 = dFdx( eye_pos.xyz ); - vec3 q1 = dFdy( eye_pos.xyz ); - vec2 st0 = dFdx( uv.st ); - vec2 st1 = dFdy( uv.st ); - vec3 N = surf_norm; - vec3 q1perp = cross( q1, N ); - vec3 q0perp = cross( N, q0 ); - vec3 T = q1perp * st0.x + q0perp * st1.x; - vec3 B = q1perp * st0.y + q0perp * st1.y; - float det = max( dot( T, T ), dot( B, B ) ); - float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); - return mat3( T * scale, B * scale, N ); - } -#endif`,clearcoat_normal_fragment_begin:`#ifdef USE_CLEARCOAT - vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,clearcoat_normal_fragment_maps:`#ifdef USE_CLEARCOAT_NORMALMAP - vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; - clearcoatMapN.xy *= clearcoatNormalScale; - clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,clearcoat_pars_fragment:`#ifdef USE_CLEARCOATMAP - uniform sampler2D clearcoatMap; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - uniform sampler2D clearcoatNormalMap; - uniform vec2 clearcoatNormalScale; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform sampler2D clearcoatRoughnessMap; -#endif`,iridescence_pars_fragment:`#ifdef USE_IRIDESCENCEMAP - uniform sampler2D iridescenceMap; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - uniform sampler2D iridescenceThicknessMap; -#endif`,opaque_fragment:`#ifdef OPAQUE -diffuseColor.a = 1.0; -#endif -#ifdef USE_TRANSMISSION -diffuseColor.a *= material.transmissionAlpha; -#endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,packing:`vec3 packNormalToRGB( const in vec3 normal ) { - return normalize( normal ) * 0.5 + 0.5; -} -vec3 unpackRGBToNormal( const in vec3 rgb ) { - return 2.0 * rgb.xyz - 1.0; -} -const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.; -const float Inv255 = 1. / 255.; -const vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 ); -const vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g ); -const vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b ); -const vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a ); -vec4 packDepthToRGBA( const in float v ) { - if( v <= 0.0 ) - return vec4( 0., 0., 0., 0. ); - if( v >= 1.0 ) - return vec4( 1., 1., 1., 1. ); - float vuf; - float af = modf( v * PackFactors.a, vuf ); - float bf = modf( vuf * ShiftRight8, vuf ); - float gf = modf( vuf * ShiftRight8, vuf ); - return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af ); -} -vec3 packDepthToRGB( const in float v ) { - if( v <= 0.0 ) - return vec3( 0., 0., 0. ); - if( v >= 1.0 ) - return vec3( 1., 1., 1. ); - float vuf; - float bf = modf( v * PackFactors.b, vuf ); - float gf = modf( vuf * ShiftRight8, vuf ); - return vec3( vuf * Inv255, gf * PackUpscale, bf ); -} -vec2 packDepthToRG( const in float v ) { - if( v <= 0.0 ) - return vec2( 0., 0. ); - if( v >= 1.0 ) - return vec2( 1., 1. ); - float vuf; - float gf = modf( v * 256., vuf ); - return vec2( vuf * Inv255, gf ); -} -float unpackRGBAToDepth( const in vec4 v ) { - return dot( v, UnpackFactors4 ); -} -float unpackRGBToDepth( const in vec3 v ) { - return dot( v, UnpackFactors3 ); -} -float unpackRGToDepth( const in vec2 v ) { - return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g; -} -vec4 pack2HalfToRGBA( const in vec2 v ) { - vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) ); - return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w ); -} -vec2 unpackRGBATo2Half( const in vec4 v ) { - return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) ); -} -float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) { - return ( viewZ + near ) / ( near - far ); -} -float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) { - return depth * ( near - far ) - near; -} -float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) { - return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ ); -} -float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) { - return ( near * far ) / ( ( far - near ) * depth - far ); -}`,premultiplied_alpha_fragment:`#ifdef PREMULTIPLIED_ALPHA - gl_FragColor.rgb *= gl_FragColor.a; -#endif`,project_vertex:`vec4 mvPosition = vec4( transformed, 1.0 ); -#ifdef USE_BATCHING - mvPosition = batchingMatrix * mvPosition; -#endif -#ifdef USE_INSTANCING - mvPosition = instanceMatrix * mvPosition; -#endif -mvPosition = modelViewMatrix * mvPosition; -gl_Position = projectionMatrix * mvPosition;`,dithering_fragment:`#ifdef DITHERING - gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,dithering_pars_fragment:`#ifdef DITHERING - vec3 dithering( vec3 color ) { - float grid_position = rand( gl_FragCoord.xy ); - vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); - dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); - return color + dither_shift_RGB; - } -#endif`,roughnessmap_fragment:`float roughnessFactor = roughness; -#ifdef USE_ROUGHNESSMAP - vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); - roughnessFactor *= texelRoughness.g; -#endif`,roughnessmap_pars_fragment:`#ifdef USE_ROUGHNESSMAP - uniform sampler2D roughnessMap; -#endif`,shadowmap_pars_fragment:`#if NUM_SPOT_LIGHT_COORDS > 0 - varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; -#endif -#if NUM_SPOT_LIGHT_MAPS > 0 - uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ]; -#endif -#ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; - varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; - struct DirectionalLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; - struct SpotLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; - varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; - struct PointLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - float shadowCameraNear; - float shadowCameraFar; - }; - uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; - #endif - float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { - return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); - } - vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { - return unpackRGBATo2Half( texture2D( shadow, uv ) ); - } - float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ - float occlusion = 1.0; - vec2 distribution = texture2DDistribution( shadow, uv ); - float hard_shadow = step( compare , distribution.x ); - if (hard_shadow != 1.0 ) { - float distance = compare - distribution.x ; - float variance = max( 0.00000, distribution.y * distribution.y ); - float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); - } - return occlusion; - } - float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) { - float shadow = 1.0; - shadowCoord.xyz /= shadowCoord.w; - shadowCoord.z += shadowBias; - bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; - bool frustumTest = inFrustum && shadowCoord.z <= 1.0; - if ( frustumTest ) { - #if defined( SHADOWMAP_TYPE_PCF ) - vec2 texelSize = vec2( 1.0 ) / shadowMapSize; - float dx0 = - texelSize.x * shadowRadius; - float dy0 = - texelSize.y * shadowRadius; - float dx1 = + texelSize.x * shadowRadius; - float dy1 = + texelSize.y * shadowRadius; - float dx2 = dx0 / 2.0; - float dy2 = dy0 / 2.0; - float dx3 = dx1 / 2.0; - float dy3 = dy1 / 2.0; - shadow = ( - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z ) - ) * ( 1.0 / 17.0 ); - #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) - vec2 texelSize = vec2( 1.0 ) / shadowMapSize; - float dx = texelSize.x; - float dy = texelSize.y; - vec2 uv = shadowCoord.xy; - vec2 f = fract( uv * shadowMapSize + 0.5 ); - uv -= f * texelSize; - shadow = ( - texture2DCompare( shadowMap, uv, shadowCoord.z ) + - texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + - texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + - mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), - f.x ) + - mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), - f.x ) + - mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), - f.y ) + - mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), - f.y ) + - mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), - f.x ), - mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), - f.x ), - f.y ) - ) * ( 1.0 / 9.0 ); - #elif defined( SHADOWMAP_TYPE_VSM ) - shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); - #else - shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); - #endif - } - return mix( 1.0, shadow, shadowIntensity ); - } - vec2 cubeToUV( vec3 v, float texelSizeY ) { - vec3 absV = abs( v ); - float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); - absV *= scaleToCube; - v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); - vec2 planar = v.xy; - float almostATexel = 1.5 * texelSizeY; - float almostOne = 1.0 - almostATexel; - if ( absV.z >= almostOne ) { - if ( v.z > 0.0 ) - planar.x = 4.0 - v.x; - } else if ( absV.x >= almostOne ) { - float signX = sign( v.x ); - planar.x = v.z * signX + 2.0 * signX; - } else if ( absV.y >= almostOne ) { - float signY = sign( v.y ); - planar.x = v.x + 2.0 * signY + 2.0; - planar.y = v.z * signY - 2.0; - } - return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); - } - float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { - float shadow = 1.0; - vec3 lightToPosition = shadowCoord.xyz; - - float lightToPositionLength = length( lightToPosition ); - if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) { - float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias; - vec3 bd3D = normalize( lightToPosition ); - vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); - #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM ) - vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y; - shadow = ( - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp ) - ) * ( 1.0 / 9.0 ); - #else - shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ); - #endif - } - return mix( 1.0, shadow, shadowIntensity ); - } -#endif`,shadowmap_pars_vertex:`#if NUM_SPOT_LIGHT_COORDS > 0 - uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; - varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; -#endif -#ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ]; - varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; - struct DirectionalLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - struct SpotLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ]; - varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; - struct PointLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - float shadowCameraNear; - float shadowCameraFar; - }; - uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; - #endif -#endif`,shadowmap_vertex:`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) - vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); - vec4 shadowWorldPosition; -#endif -#if defined( USE_SHADOWMAP ) - #if NUM_DIR_LIGHT_SHADOWS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { - shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); - vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { - shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); - vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end - #endif -#endif -#if NUM_SPOT_LIGHT_COORDS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) { - shadowWorldPosition = worldPosition; - #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias; - #endif - vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end -#endif`,shadowmask_pars_fragment:`float getShadowMask() { - float shadow = 1.0; - #ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { - directionalLight = directionalLightShadows[ i ]; - shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - } - #pragma unroll_loop_end - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { - spotLight = spotLightShadows[ i ]; - shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; - } - #pragma unroll_loop_end - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - PointLightShadow pointLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { - pointLight = pointLightShadows[ i ]; - shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0; - } - #pragma unroll_loop_end - #endif - #endif - return shadow; -}`,skinbase_vertex:`#ifdef USE_SKINNING - mat4 boneMatX = getBoneMatrix( skinIndex.x ); - mat4 boneMatY = getBoneMatrix( skinIndex.y ); - mat4 boneMatZ = getBoneMatrix( skinIndex.z ); - mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,skinning_pars_vertex:`#ifdef USE_SKINNING - uniform mat4 bindMatrix; - uniform mat4 bindMatrixInverse; - uniform highp sampler2D boneTexture; - mat4 getBoneMatrix( const in float i ) { - int size = textureSize( boneTexture, 0 ).x; - int j = int( i ) * 4; - int x = j % size; - int y = j / size; - vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 ); - vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 ); - vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 ); - vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); - return mat4( v1, v2, v3, v4 ); - } -#endif`,skinning_vertex:`#ifdef USE_SKINNING - vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); - vec4 skinned = vec4( 0.0 ); - skinned += boneMatX * skinVertex * skinWeight.x; - skinned += boneMatY * skinVertex * skinWeight.y; - skinned += boneMatZ * skinVertex * skinWeight.z; - skinned += boneMatW * skinVertex * skinWeight.w; - transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,skinnormal_vertex:`#ifdef USE_SKINNING - mat4 skinMatrix = mat4( 0.0 ); - skinMatrix += skinWeight.x * boneMatX; - skinMatrix += skinWeight.y * boneMatY; - skinMatrix += skinWeight.z * boneMatZ; - skinMatrix += skinWeight.w * boneMatW; - skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix; - objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; - #ifdef USE_TANGENT - objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; - #endif -#endif`,specularmap_fragment:`float specularStrength; -#ifdef USE_SPECULARMAP - vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); - specularStrength = texelSpecular.r; -#else - specularStrength = 1.0; -#endif`,specularmap_pars_fragment:`#ifdef USE_SPECULARMAP - uniform sampler2D specularMap; -#endif`,tonemapping_fragment:`#if defined( TONE_MAPPING ) - gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,tonemapping_pars_fragment:`#ifndef saturate -#define saturate( a ) clamp( a, 0.0, 1.0 ) -#endif -uniform float toneMappingExposure; -vec3 LinearToneMapping( vec3 color ) { - return saturate( toneMappingExposure * color ); -} -vec3 ReinhardToneMapping( vec3 color ) { - color *= toneMappingExposure; - return saturate( color / ( vec3( 1.0 ) + color ) ); -} -vec3 CineonToneMapping( vec3 color ) { - color *= toneMappingExposure; - color = max( vec3( 0.0 ), color - 0.004 ); - return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) ); -} -vec3 RRTAndODTFit( vec3 v ) { - vec3 a = v * ( v + 0.0245786 ) - 0.000090537; - vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081; - return a / b; -} -vec3 ACESFilmicToneMapping( vec3 color ) { - const mat3 ACESInputMat = mat3( - vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ), - vec3( 0.04823, 0.01566, 0.83777 ) - ); - const mat3 ACESOutputMat = mat3( - vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ), - vec3( -0.07367, -0.00605, 1.07602 ) - ); - color *= toneMappingExposure / 0.6; - color = ACESInputMat * color; - color = RRTAndODTFit( color ); - color = ACESOutputMat * color; - return saturate( color ); -} -const mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3( - vec3( 1.6605, - 0.1246, - 0.0182 ), - vec3( - 0.5876, 1.1329, - 0.1006 ), - vec3( - 0.0728, - 0.0083, 1.1187 ) -); -const mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3( - vec3( 0.6274, 0.0691, 0.0164 ), - vec3( 0.3293, 0.9195, 0.0880 ), - vec3( 0.0433, 0.0113, 0.8956 ) -); -vec3 agxDefaultContrastApprox( vec3 x ) { - vec3 x2 = x * x; - vec3 x4 = x2 * x2; - return + 15.5 * x4 * x2 - - 40.14 * x4 * x - + 31.96 * x4 - - 6.868 * x2 * x - + 0.4298 * x2 - + 0.1191 * x - - 0.00232; -} -vec3 AgXToneMapping( vec3 color ) { - const mat3 AgXInsetMatrix = mat3( - vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ), - vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ), - vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 ) - ); - const mat3 AgXOutsetMatrix = mat3( - vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ), - vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ), - vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 ) - ); - const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069; - color *= toneMappingExposure; - color = LINEAR_SRGB_TO_LINEAR_REC2020 * color; - color = AgXInsetMatrix * color; - color = max( color, 1e-10 ); color = log2( color ); - color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv ); - color = clamp( color, 0.0, 1.0 ); - color = agxDefaultContrastApprox( color ); - color = AgXOutsetMatrix * color; - color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) ); - color = LINEAR_REC2020_TO_LINEAR_SRGB * color; - color = clamp( color, 0.0, 1.0 ); - return color; -} -vec3 NeutralToneMapping( vec3 color ) { - const float StartCompression = 0.8 - 0.04; - const float Desaturation = 0.15; - color *= toneMappingExposure; - float x = min( color.r, min( color.g, color.b ) ); - float offset = x < 0.08 ? x - 6.25 * x * x : 0.04; - color -= offset; - float peak = max( color.r, max( color.g, color.b ) ); - if ( peak < StartCompression ) return color; - float d = 1. - StartCompression; - float newPeak = 1. - d * d / ( peak + d - StartCompression ); - color *= newPeak / peak; - float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. ); - return mix( color, vec3( newPeak ), g ); -} -vec3 CustomToneMapping( vec3 color ) { return color; }`,transmission_fragment:`#ifdef USE_TRANSMISSION - material.transmission = transmission; - material.transmissionAlpha = 1.0; - material.thickness = thickness; - material.attenuationDistance = attenuationDistance; - material.attenuationColor = attenuationColor; - #ifdef USE_TRANSMISSIONMAP - material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r; - #endif - #ifdef USE_THICKNESSMAP - material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g; - #endif - vec3 pos = vWorldPosition; - vec3 v = normalize( cameraPosition - pos ); - vec3 n = inverseTransformDirection( normal, viewMatrix ); - vec4 transmitted = getIBLVolumeRefraction( - n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90, - pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness, - material.attenuationColor, material.attenuationDistance ); - material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); - totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,transmission_pars_fragment:`#ifdef USE_TRANSMISSION - uniform float transmission; - uniform float thickness; - uniform float attenuationDistance; - uniform vec3 attenuationColor; - #ifdef USE_TRANSMISSIONMAP - uniform sampler2D transmissionMap; - #endif - #ifdef USE_THICKNESSMAP - uniform sampler2D thicknessMap; - #endif - uniform vec2 transmissionSamplerSize; - uniform sampler2D transmissionSamplerMap; - uniform mat4 modelMatrix; - uniform mat4 projectionMatrix; - varying vec3 vWorldPosition; - float w0( float a ) { - return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 ); - } - float w1( float a ) { - return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 ); - } - float w2( float a ){ - return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 ); - } - float w3( float a ) { - return ( 1.0 / 6.0 ) * ( a * a * a ); - } - float g0( float a ) { - return w0( a ) + w1( a ); - } - float g1( float a ) { - return w2( a ) + w3( a ); - } - float h0( float a ) { - return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) ); - } - float h1( float a ) { - return 1.0 + w3( a ) / ( w2( a ) + w3( a ) ); - } - vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) { - uv = uv * texelSize.zw + 0.5; - vec2 iuv = floor( uv ); - vec2 fuv = fract( uv ); - float g0x = g0( fuv.x ); - float g1x = g1( fuv.x ); - float h0x = h0( fuv.x ); - float h1x = h1( fuv.x ); - float h0y = h0( fuv.y ); - float h1y = h1( fuv.y ); - vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; - vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; - vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; - vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; - return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) + - g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) ); - } - vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) { - vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) ); - vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) ); - vec2 fLodSizeInv = 1.0 / fLodSize; - vec2 cLodSizeInv = 1.0 / cLodSize; - vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) ); - vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) ); - return mix( fSample, cSample, fract( lod ) ); - } - vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) { - vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior ); - vec3 modelScale; - modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); - modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); - modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); - return normalize( refractionVector ) * thickness * modelScale; - } - float applyIorToRoughness( const in float roughness, const in float ior ) { - return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); - } - vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) { - float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); - return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod ); - } - vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) { - if ( isinf( attenuationDistance ) ) { - return vec3( 1.0 ); - } else { - vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance; - vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance; - } - } - vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor, - const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix, - const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness, - const in vec3 attenuationColor, const in float attenuationDistance ) { - vec4 transmittedLight; - vec3 transmittance; - #ifdef USE_DISPERSION - float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion; - vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread ); - for ( int i = 0; i < 3; i ++ ) { - vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix ); - vec3 refractedRayExit = position + transmissionRay; - - vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); - vec2 refractionCoords = ndcPos.xy / ndcPos.w; - refractionCoords += 1.0; - refractionCoords /= 2.0; - - vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] ); - transmittedLight[ i ] = transmissionSample[ i ]; - transmittedLight.a += transmissionSample.a; - transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ]; - } - transmittedLight.a /= 3.0; - - #else - - vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); - vec3 refractedRayExit = position + transmissionRay; - vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); - vec2 refractionCoords = ndcPos.xy / ndcPos.w; - refractionCoords += 1.0; - refractionCoords /= 2.0; - transmittedLight = getTransmissionSample( refractionCoords, roughness, ior ); - transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance ); - - #endif - vec3 attenuatedColor = transmittance * transmittedLight.rgb; - vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); - float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; - return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); - } -#endif`,uv_pars_fragment:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - varying vec2 vUv; -#endif -#ifdef USE_MAP - varying vec2 vMapUv; -#endif -#ifdef USE_ALPHAMAP - varying vec2 vAlphaMapUv; -#endif -#ifdef USE_LIGHTMAP - varying vec2 vLightMapUv; -#endif -#ifdef USE_AOMAP - varying vec2 vAoMapUv; -#endif -#ifdef USE_BUMPMAP - varying vec2 vBumpMapUv; -#endif -#ifdef USE_NORMALMAP - varying vec2 vNormalMapUv; -#endif -#ifdef USE_EMISSIVEMAP - varying vec2 vEmissiveMapUv; -#endif -#ifdef USE_METALNESSMAP - varying vec2 vMetalnessMapUv; -#endif -#ifdef USE_ROUGHNESSMAP - varying vec2 vRoughnessMapUv; -#endif -#ifdef USE_ANISOTROPYMAP - varying vec2 vAnisotropyMapUv; -#endif -#ifdef USE_CLEARCOATMAP - varying vec2 vClearcoatMapUv; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - varying vec2 vClearcoatNormalMapUv; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - varying vec2 vClearcoatRoughnessMapUv; -#endif -#ifdef USE_IRIDESCENCEMAP - varying vec2 vIridescenceMapUv; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - varying vec2 vIridescenceThicknessMapUv; -#endif -#ifdef USE_SHEEN_COLORMAP - varying vec2 vSheenColorMapUv; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - varying vec2 vSheenRoughnessMapUv; -#endif -#ifdef USE_SPECULARMAP - varying vec2 vSpecularMapUv; -#endif -#ifdef USE_SPECULAR_COLORMAP - varying vec2 vSpecularColorMapUv; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - varying vec2 vSpecularIntensityMapUv; -#endif -#ifdef USE_TRANSMISSIONMAP - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; -#endif -#ifdef USE_THICKNESSMAP - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; -#endif`,uv_pars_vertex:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - varying vec2 vUv; -#endif -#ifdef USE_MAP - uniform mat3 mapTransform; - varying vec2 vMapUv; -#endif -#ifdef USE_ALPHAMAP - uniform mat3 alphaMapTransform; - varying vec2 vAlphaMapUv; -#endif -#ifdef USE_LIGHTMAP - uniform mat3 lightMapTransform; - varying vec2 vLightMapUv; -#endif -#ifdef USE_AOMAP - uniform mat3 aoMapTransform; - varying vec2 vAoMapUv; -#endif -#ifdef USE_BUMPMAP - uniform mat3 bumpMapTransform; - varying vec2 vBumpMapUv; -#endif -#ifdef USE_NORMALMAP - uniform mat3 normalMapTransform; - varying vec2 vNormalMapUv; -#endif -#ifdef USE_DISPLACEMENTMAP - uniform mat3 displacementMapTransform; - varying vec2 vDisplacementMapUv; -#endif -#ifdef USE_EMISSIVEMAP - uniform mat3 emissiveMapTransform; - varying vec2 vEmissiveMapUv; -#endif -#ifdef USE_METALNESSMAP - uniform mat3 metalnessMapTransform; - varying vec2 vMetalnessMapUv; -#endif -#ifdef USE_ROUGHNESSMAP - uniform mat3 roughnessMapTransform; - varying vec2 vRoughnessMapUv; -#endif -#ifdef USE_ANISOTROPYMAP - uniform mat3 anisotropyMapTransform; - varying vec2 vAnisotropyMapUv; -#endif -#ifdef USE_CLEARCOATMAP - uniform mat3 clearcoatMapTransform; - varying vec2 vClearcoatMapUv; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - uniform mat3 clearcoatNormalMapTransform; - varying vec2 vClearcoatNormalMapUv; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform mat3 clearcoatRoughnessMapTransform; - varying vec2 vClearcoatRoughnessMapUv; -#endif -#ifdef USE_SHEEN_COLORMAP - uniform mat3 sheenColorMapTransform; - varying vec2 vSheenColorMapUv; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - uniform mat3 sheenRoughnessMapTransform; - varying vec2 vSheenRoughnessMapUv; -#endif -#ifdef USE_IRIDESCENCEMAP - uniform mat3 iridescenceMapTransform; - varying vec2 vIridescenceMapUv; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - uniform mat3 iridescenceThicknessMapTransform; - varying vec2 vIridescenceThicknessMapUv; -#endif -#ifdef USE_SPECULARMAP - uniform mat3 specularMapTransform; - varying vec2 vSpecularMapUv; -#endif -#ifdef USE_SPECULAR_COLORMAP - uniform mat3 specularColorMapTransform; - varying vec2 vSpecularColorMapUv; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - uniform mat3 specularIntensityMapTransform; - varying vec2 vSpecularIntensityMapUv; -#endif -#ifdef USE_TRANSMISSIONMAP - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; -#endif -#ifdef USE_THICKNESSMAP - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; -#endif`,uv_vertex:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - vUv = vec3( uv, 1 ).xy; -#endif -#ifdef USE_MAP - vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ALPHAMAP - vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_LIGHTMAP - vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_AOMAP - vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_BUMPMAP - vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_NORMALMAP - vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_DISPLACEMENTMAP - vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_EMISSIVEMAP - vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_METALNESSMAP - vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ROUGHNESSMAP - vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ANISOTROPYMAP - vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOATMAP - vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_IRIDESCENCEMAP - vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SHEEN_COLORMAP - vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULARMAP - vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULAR_COLORMAP - vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_TRANSMISSIONMAP - vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_THICKNESSMAP - vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,worldpos_vertex:`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 - vec4 worldPosition = vec4( transformed, 1.0 ); - #ifdef USE_BATCHING - worldPosition = batchingMatrix * worldPosition; - #endif - #ifdef USE_INSTANCING - worldPosition = instanceMatrix * worldPosition; - #endif - worldPosition = modelMatrix * worldPosition; -#endif`,background_vert:`varying vec2 vUv; -uniform mat3 uvTransform; -void main() { - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,background_frag:`uniform sampler2D t2D; -uniform float backgroundIntensity; -varying vec2 vUv; -void main() { - vec4 texColor = texture2D( t2D, vUv ); - #ifdef DECODE_VIDEO_TEXTURE - texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w ); - #endif - texColor.rgb *= backgroundIntensity; - gl_FragColor = texColor; - #include - #include -}`,backgroundCube_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include - gl_Position.z = gl_Position.w; -}`,backgroundCube_frag:`#ifdef ENVMAP_TYPE_CUBE - uniform samplerCube envMap; -#elif defined( ENVMAP_TYPE_CUBE_UV ) - uniform sampler2D envMap; -#endif -uniform float flipEnvMap; -uniform float backgroundBlurriness; -uniform float backgroundIntensity; -uniform mat3 backgroundRotation; -varying vec3 vWorldDirection; -#include -void main() { - #ifdef ENVMAP_TYPE_CUBE - vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) ); - #elif defined( ENVMAP_TYPE_CUBE_UV ) - vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness ); - #else - vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - #endif - texColor.rgb *= backgroundIntensity; - gl_FragColor = texColor; - #include - #include -}`,cube_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include - gl_Position.z = gl_Position.w; -}`,cube_frag:`uniform samplerCube tCube; -uniform float tFlip; -uniform float opacity; -varying vec3 vWorldDirection; -void main() { - vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) ); - gl_FragColor = texColor; - gl_FragColor.a *= opacity; - #include - #include -}`,depth_vert:`#include -#include -#include -#include -#include -#include -#include -#include -varying vec2 vHighPrecisionZW; -void main() { - #include - #include - #include - #include - #ifdef USE_DISPLACEMENTMAP - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - vHighPrecisionZW = gl_Position.zw; -}`,depth_frag:`#if DEPTH_PACKING == 3200 - uniform float opacity; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -varying vec2 vHighPrecisionZW; -void main() { - vec4 diffuseColor = vec4( 1.0 ); - #include - #if DEPTH_PACKING == 3200 - diffuseColor.a = opacity; - #endif - #include - #include - #include - #include - #include - float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5; - #if DEPTH_PACKING == 3200 - gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity ); - #elif DEPTH_PACKING == 3201 - gl_FragColor = packDepthToRGBA( fragCoordZ ); - #elif DEPTH_PACKING == 3202 - gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 ); - #elif DEPTH_PACKING == 3203 - gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 ); - #endif -}`,distanceRGBA_vert:`#define DISTANCE -varying vec3 vWorldPosition; -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #ifdef USE_DISPLACEMENTMAP - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - vWorldPosition = worldPosition.xyz; -}`,distanceRGBA_frag:`#define DISTANCE -uniform vec3 referencePosition; -uniform float nearDistance; -uniform float farDistance; -varying vec3 vWorldPosition; -#include -#include -#include -#include -#include -#include -#include -#include -void main () { - vec4 diffuseColor = vec4( 1.0 ); - #include - #include - #include - #include - #include - float dist = length( vWorldPosition - referencePosition ); - dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); - dist = saturate( dist ); - gl_FragColor = packDepthToRGBA( dist ); -}`,equirect_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include -}`,equirect_frag:`uniform sampler2D tEquirect; -varying vec3 vWorldDirection; -#include -void main() { - vec3 direction = normalize( vWorldDirection ); - vec2 sampleUV = equirectUv( direction ); - gl_FragColor = texture2D( tEquirect, sampleUV ); - #include - #include -}`,linedashed_vert:`uniform float scale; -attribute float lineDistance; -varying float vLineDistance; -#include -#include -#include -#include -#include -#include -#include -void main() { - vLineDistance = scale * lineDistance; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,linedashed_frag:`uniform vec3 diffuse; -uniform float opacity; -uniform float dashSize; -uniform float totalSize; -varying float vLineDistance; -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - if ( mod( vLineDistance, totalSize ) > dashSize ) { - discard; - } - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include - #include -}`,meshbasic_vert:`#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) - #include - #include - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,meshbasic_frag:`uniform vec3 diffuse; -uniform float opacity; -#ifndef FLAT_SHADED - varying vec3 vNormal; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - #include - #include - #include - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; - #else - reflectedLight.indirectDiffuse += vec3( 1.0 ); - #endif - #include - reflectedLight.indirectDiffuse *= diffuseColor.rgb; - vec3 outgoingLight = reflectedLight.indirectDiffuse; - #include - #include - #include - #include - #include - #include - #include -}`,meshlambert_vert:`#define LAMBERT -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include - #include -}`,meshlambert_frag:`#define LAMBERT -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include - #include -}`,meshmatcap_vert:`#define MATCAP -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; -}`,meshmatcap_frag:`#define MATCAP -uniform vec3 diffuse; -uniform float opacity; -uniform sampler2D matcap; -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 viewDir = normalize( vViewPosition ); - vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); - vec3 y = cross( viewDir, x ); - vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; - #ifdef USE_MATCAP - vec4 matcapColor = texture2D( matcap, uv ); - #else - vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); - #endif - vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb; - #include - #include - #include - #include - #include - #include -}`,meshnormal_vert:`#define NORMAL -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - varying vec3 vViewPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - vViewPosition = - mvPosition.xyz; -#endif -}`,meshnormal_frag:`#define NORMAL -uniform float opacity; -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - varying vec3 vViewPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity ); - #include - #include - #include - #include - gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a ); - #ifdef OPAQUE - gl_FragColor.a = 1.0; - #endif -}`,meshphong_vert:`#define PHONG -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include - #include -}`,meshphong_frag:`#define PHONG -uniform vec3 diffuse; -uniform vec3 emissive; -uniform vec3 specular; -uniform float shininess; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include - #include -}`,meshphysical_vert:`#define STANDARD -varying vec3 vViewPosition; -#ifdef USE_TRANSMISSION - varying vec3 vWorldPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include -#ifdef USE_TRANSMISSION - vWorldPosition = worldPosition.xyz; -#endif -}`,meshphysical_frag:`#define STANDARD -#ifdef PHYSICAL - #define IOR - #define USE_SPECULAR -#endif -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float roughness; -uniform float metalness; -uniform float opacity; -#ifdef IOR - uniform float ior; -#endif -#ifdef USE_SPECULAR - uniform float specularIntensity; - uniform vec3 specularColor; - #ifdef USE_SPECULAR_COLORMAP - uniform sampler2D specularColorMap; - #endif - #ifdef USE_SPECULAR_INTENSITYMAP - uniform sampler2D specularIntensityMap; - #endif -#endif -#ifdef USE_CLEARCOAT - uniform float clearcoat; - uniform float clearcoatRoughness; -#endif -#ifdef USE_DISPERSION - uniform float dispersion; -#endif -#ifdef USE_IRIDESCENCE - uniform float iridescence; - uniform float iridescenceIOR; - uniform float iridescenceThicknessMinimum; - uniform float iridescenceThicknessMaximum; -#endif -#ifdef USE_SHEEN - uniform vec3 sheenColor; - uniform float sheenRoughness; - #ifdef USE_SHEEN_COLORMAP - uniform sampler2D sheenColorMap; - #endif - #ifdef USE_SHEEN_ROUGHNESSMAP - uniform sampler2D sheenRoughnessMap; - #endif -#endif -#ifdef USE_ANISOTROPY - uniform vec2 anisotropyVector; - #ifdef USE_ANISOTROPYMAP - uniform sampler2D anisotropyMap; - #endif -#endif -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; - vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; - #include - vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; - #ifdef USE_SHEEN - float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); - outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect; - #endif - #ifdef USE_CLEARCOAT - float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) ); - vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); - outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat; - #endif - #include - #include - #include - #include - #include - #include -}`,meshtoon_vert:`#define TOON -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include -}`,meshtoon_frag:`#define TOON -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include -}`,points_vert:`uniform float size; -uniform float scale; -#include -#include -#include -#include -#include -#include -#ifdef USE_POINTS_UV - varying vec2 vUv; - uniform mat3 uvTransform; -#endif -void main() { - #ifdef USE_POINTS_UV - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - #endif - #include - #include - #include - #include - #include - #include - gl_PointSize = size; - #ifdef USE_SIZEATTENUATION - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z ); - #endif - #include - #include - #include - #include -}`,points_frag:`uniform vec3 diffuse; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include - #include -}`,shadow_vert:`#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,shadow_frag:`uniform vec3 color; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) ); - #include - #include - #include -}`,sprite_vert:`uniform float rotation; -uniform vec2 center; -#include -#include -#include -#include -#include -void main() { - #include - vec4 mvPosition = modelViewMatrix[ 3 ]; - vec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) ); - #ifndef USE_SIZEATTENUATION - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) scale *= - mvPosition.z; - #endif - vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale; - vec2 rotatedPosition; - rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; - rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; - mvPosition.xy += rotatedPosition; - gl_Position = projectionMatrix * mvPosition; - #include - #include - #include -}`,sprite_frag:`uniform vec3 diffuse; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include -}`},M={common:{diffuse:{value:new fn(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new D},alphaMap:{value:null},alphaMapTransform:{value:new D},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new D}},envmap:{envMap:{value:null},envMapRotation:{value:new D},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new D}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new D}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new D},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new D},normalScale:{value:new E(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new D},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new D}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new D}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new D}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new fn(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new fn(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new D},alphaTest:{value:0},uvTransform:{value:new D}},sprite:{diffuse:{value:new fn(16777215)},opacity:{value:1},center:{value:new E(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new D},alphaMap:{value:null},alphaMapTransform:{value:new D},alphaTest:{value:0}}},Mn={basic:{uniforms:Dn([M.common,M.specularmap,M.envmap,M.aomap,M.lightmap,M.fog]),vertexShader:j.meshbasic_vert,fragmentShader:j.meshbasic_frag},lambert:{uniforms:Dn([M.common,M.specularmap,M.envmap,M.aomap,M.lightmap,M.emissivemap,M.bumpmap,M.normalmap,M.displacementmap,M.fog,M.lights,{emissive:{value:new fn(0)}}]),vertexShader:j.meshlambert_vert,fragmentShader:j.meshlambert_frag},phong:{uniforms:Dn([M.common,M.specularmap,M.envmap,M.aomap,M.lightmap,M.emissivemap,M.bumpmap,M.normalmap,M.displacementmap,M.fog,M.lights,{emissive:{value:new fn(0)},specular:{value:new fn(1118481)},shininess:{value:30}}]),vertexShader:j.meshphong_vert,fragmentShader:j.meshphong_frag},standard:{uniforms:Dn([M.common,M.envmap,M.aomap,M.lightmap,M.emissivemap,M.bumpmap,M.normalmap,M.displacementmap,M.roughnessmap,M.metalnessmap,M.fog,M.lights,{emissive:{value:new fn(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:j.meshphysical_vert,fragmentShader:j.meshphysical_frag},toon:{uniforms:Dn([M.common,M.aomap,M.lightmap,M.emissivemap,M.bumpmap,M.normalmap,M.displacementmap,M.gradientmap,M.fog,M.lights,{emissive:{value:new fn(0)}}]),vertexShader:j.meshtoon_vert,fragmentShader:j.meshtoon_frag},matcap:{uniforms:Dn([M.common,M.bumpmap,M.normalmap,M.displacementmap,M.fog,{matcap:{value:null}}]),vertexShader:j.meshmatcap_vert,fragmentShader:j.meshmatcap_frag},points:{uniforms:Dn([M.points,M.fog]),vertexShader:j.points_vert,fragmentShader:j.points_frag},dashed:{uniforms:Dn([M.common,M.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:j.linedashed_vert,fragmentShader:j.linedashed_frag},depth:{uniforms:Dn([M.common,M.displacementmap]),vertexShader:j.depth_vert,fragmentShader:j.depth_frag},normal:{uniforms:Dn([M.common,M.bumpmap,M.normalmap,M.displacementmap,{opacity:{value:1}}]),vertexShader:j.meshnormal_vert,fragmentShader:j.meshnormal_frag},sprite:{uniforms:Dn([M.sprite,M.fog]),vertexShader:j.sprite_vert,fragmentShader:j.sprite_frag},background:{uniforms:{uvTransform:{value:new D},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:j.background_vert,fragmentShader:j.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new D}},vertexShader:j.backgroundCube_vert,fragmentShader:j.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:j.cube_vert,fragmentShader:j.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:j.equirect_vert,fragmentShader:j.equirect_frag},distanceRGBA:{uniforms:Dn([M.common,M.displacementmap,{referencePosition:{value:new O},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:j.distanceRGBA_vert,fragmentShader:j.distanceRGBA_frag},shadow:{uniforms:Dn([M.lights,M.fog,{color:{value:new fn(0)},opacity:{value:1}}]),vertexShader:j.shadow_vert,fragmentShader:j.shadow_frag}};Mn.physical={uniforms:Dn([Mn.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new D},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new D},clearcoatNormalScale:{value:new E(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new D},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new D},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new D},sheen:{value:0},sheenColor:{value:new fn(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new D},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new D},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new D},transmissionSamplerSize:{value:new E},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new D},attenuationDistance:{value:0},attenuationColor:{value:new fn(0)},specularColor:{value:new fn(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new D},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new D},anisotropyVector:{value:new E},anisotropyMap:{value:null},anisotropyMapTransform:{value:new D}}]),vertexShader:j.meshphysical_vert,fragmentShader:j.meshphysical_frag};let Nn=(1+Math.sqrt(5))/2,Pn=1/Nn;-Nn,-Pn,-Pn;var Fn=class extends Be{constructor(e,t,n,r,i,o,s,c,l,u=1026){if(u!==1026&&u!==1027)throw Error(`DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat`);n===void 0&&u===1026&&(n=1014),n===void 0&&u===1027&&(n=1020),super(null,r,i,o,s,c,u,n,l),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=s===void 0?a:s,this.minFilter=c===void 0?a:c,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return this.compareFunction!==null&&(t.compareFunction=this.compareFunction),t}},In=class{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e===void 0?0:e.length/t,this.usage=b,this.updateRanges=[],this.version=0,this.uuid=re()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let r=0,i=this.stride;r=i)){let o=t[1];e=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n>>1;et;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(console.error(`THREE.KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(console.error(`THREE.KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){console.error(`THREE.KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){console.error(`THREE.KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&Vn(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){console.error(`THREE.KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===u,i=e.length-1,a=1;for(let o=1;o0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}};Kn.prototype.TimeBufferType=Float32Array,Kn.prototype.ValueBufferType=Float32Array,Kn.prototype.DefaultInterpolation=l;var qn=class extends Kn{constructor(e,t,n){super(e,t,n)}};qn.prototype.ValueTypeName=`bool`,qn.prototype.ValueBufferType=Array,qn.prototype.DefaultInterpolation=c,qn.prototype.InterpolantFactoryMethodLinear=void 0,qn.prototype.InterpolantFactoryMethodSmooth=void 0;var Jn=class extends Kn{};Jn.prototype.ValueTypeName=`color`;var Yn=class extends Kn{};Yn.prototype.ValueTypeName=`number`;var Xn=class extends Hn{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)Ue.slerpFlat(i,0,a,c-o,a,c,s);return i}},Zn=class extends Kn{InterpolantFactoryMethodLinear(e){return new Xn(this.times,this.values,this.getValueSize(),e)}};Zn.prototype.ValueTypeName=`quaternion`,Zn.prototype.InterpolantFactoryMethodSmooth=void 0;var Qn=class extends Kn{constructor(e,t,n){super(e,t,n)}};Qn.prototype.ValueTypeName=`string`,Qn.prototype.ValueBufferType=Array,Qn.prototype.DefaultInterpolation=c,Qn.prototype.InterpolantFactoryMethodLinear=void 0,Qn.prototype.InterpolantFactoryMethodSmooth=void 0;var $n=class extends Kn{};$n.prototype.ValueTypeName=`vector`;let er=new class{constructor(e,t,n){let r=this,i=!1,a=0,o=0,s,c=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=n,this.itemStart=function(e){o++,i===!1&&r.onStart!==void 0&&r.onStart(e,a,o),i=!0},this.itemEnd=function(e){a++,r.onProgress!==void 0&&r.onProgress(e,a,o),a===o&&(i=!1,r.onLoad!==void 0&&r.onLoad())},this.itemError=function(e){r.onError!==void 0&&r.onError(e)},this.resolveURL=function(e){return s?s(e):e},this.setURLModifier=function(e){return s=e,this},this.addHandler=function(e,t){return c.push(e,t),this},this.removeHandler=function(e){let t=c.indexOf(e);return t!==-1&&c.splice(t,2),this},this.getHandler=function(e){for(let t=0,n=c.length;t>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&r)+(n>>>0)}let fr=(...e)=>dr(e);function pr(e,t=!1){let n=[];e.isNode===!0&&(n.push(e.id),e=e.getSelf());for(let{property:r,childNode:i}of mr(e))n.push(n,dr(r.slice(0,-4)),i.getCacheKey(t));return dr(n)}function*mr(e,t=!1){for(let n in e){if(n.startsWith(`_`)===!0)continue;let r=e[n];if(Array.isArray(r)===!0)for(let e=0;ee.charCodeAt(0)).buffer}let yr={VERTEX:`vertex`,FRAGMENT:`fragment`},P={NONE:`none`,FRAME:`frame`,RENDER:`render`,OBJECT:`object`},br=[`x`,`y`,`z`,`w`],xr=0;var F=class extends S{static get type(){return`Node`}constructor(e=null){super(),this.nodeType=e,this.updateType=P.NONE,this.updateBeforeType=P.NONE,this.updateAfterType=P.NONE,this.uuid=Ce.generateUUID(),this.version=0,this._cacheKey=null,this._cacheKeyVersion=0,this.global=!1,this.isNode=!0,Object.defineProperty(this,`id`,{value:xr++})}set needsUpdate(e){e===!0&&this.version++}get type(){return this.constructor.type}onUpdate(e,t){return this.updateType=t,this.update=e.bind(this.getSelf()),this}onFrameUpdate(e){return this.onUpdate(e,P.FRAME)}onRenderUpdate(e){return this.onUpdate(e,P.RENDER)}onObjectUpdate(e){return this.onUpdate(e,P.OBJECT)}onReference(e){return this.updateReference=e.bind(this.getSelf()),this}getSelf(){return this.self||this}updateReference(){return this}isGlobal(){return this.global}*getChildren(){for(let{childNode:e}of mr(this))yield e}dispose(){this.dispatchEvent({type:`dispose`})}traverse(e){e(this);for(let t of this.getChildren())t.traverse(e)}getCacheKey(e=!1){return e||=this.version!==this._cacheKeyVersion,(e===!0||this._cacheKey===null)&&(this._cacheKey=pr(this,e),this._cacheKeyVersion=this.version),this._cacheKey}getScope(){return this}getHash(){return this.uuid}getUpdateType(){return this.updateType}getUpdateBeforeType(){return this.updateBeforeType}getUpdateAfterType(){return this.updateAfterType}getElementType(e){let t=this.getNodeType(e);return e.getElementType(t)}getNodeType(e){let t=e.getNodeProperties(this);return t.outputNode?t.outputNode.getNodeType(e):this.nodeType}getShared(e){let t=this.getHash(e);return e.getNodeFromHash(t)||this}setup(e){let t=e.getNodeProperties(this),n=0;for(let e of this.getChildren())t[`node`+ n++]=e;return null}analyze(e){if(e.increaseUsage(this)===1){let t=e.getNodeProperties(this);for(let n of Object.values(t))n&&n.isNode===!0&&n.build(e)}}generate(e,t){let{outputNode:n}=e.getNodeProperties(this);if(n&&n.isNode===!0)return n.build(e,t)}updateBefore(){console.warn(`Abstract function.`)}updateAfter(){console.warn(`Abstract function.`)}update(){console.warn(`Abstract function.`)}build(e,t=null){let n=this.getShared(e);if(this!==n)return n.build(e,t);e.addNode(this),e.addChain(this);let r=null,i=e.getBuildStage();if(i===`setup`){this.updateReference(e);let t=e.getNodeProperties(this);if(t.initialized!==!0){e.stack.nodes.length,t.initialized=!0,t.outputNode=this.setup(e),t.outputNode!==null&&e.stack.nodes.length;for(let n of Object.values(t))n&&n.isNode===!0&&n.build(e)}}else if(i===`analyze`)this.analyze(e);else if(i===`generate`)if(this.generate.length===1){let n=this.getNodeType(e),i=e.getDataFromNode(this);r=i.snippet,r===void 0?(r=this.generate(e)||``,i.snippet=r):i.flowCodes!==void 0&&e.context.nodeBlock!==void 0&&e.addFlowCodeHierarchy(this,e.context.nodeBlock),r=e.format(r,n,t)}else r=this.generate(e,t)||``;return e.removeChain(this),r}getSerializeChildren(){return mr(this)}serialize(e){let t=this.getSerializeChildren(),n={};for(let{property:r,index:i,childNode:a}of t)i===void 0?n[r]=a.toJSON(e.meta).uuid:(n[r]===void 0&&(n[r]=Number.isInteger(i)?[]:{}),n[r][i]=a.toJSON(e.meta).uuid);Object.keys(n).length>0&&(e.inputNodes=n)}deserialize(e){if(e.inputNodes!==void 0){let t=e.meta.nodes;for(let n in e.inputNodes)if(Array.isArray(e.inputNodes[n])){let r=[];for(let i of e.inputNodes[n])r.push(t[i]);this[n]=r}else if(typeof e.inputNodes[n]==`object`){let r={};for(let i in e.inputNodes[n])r[i]=t[e.inputNodes[n][i]];this[n]=r}else this[n]=t[e.inputNodes[n]]}}toJSON(e){let{uuid:t,type:n}=this,r=e===void 0||typeof e==`string`;r&&(e={textures:{},images:{},nodes:{}});let i=e.nodes[t];i===void 0&&(i={uuid:t,type:n,meta:e,metadata:{version:4.6,type:`Node`,generator:`Node.toJSON`}},r!==!0&&(e.nodes[i.uuid]=i),this.serialize(i),delete i.meta);function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(r){let t=a(e.textures),n=a(e.images),r=a(e.nodes);t.length>0&&(i.textures=t),n.length>0&&(i.images=n),r.length>0&&(i.nodes=r)}return i}},Sr=class extends F{static get type(){return`ArrayElementNode`}constructor(e,t){super(),this.node=e,this.indexNode=t,this.isArrayElementNode=!0}getNodeType(e){return this.node.getElementType(e)}generate(e){return`${this.node.build(e)}[ ${this.indexNode.build(e,`uint`)} ]`}},Cr=class extends F{static get type(){return`ConvertNode`}constructor(e,t){super(),this.node=e,this.convertTo=t}getNodeType(e){let t=this.node.getNodeType(e),n=null;for(let r of this.convertTo.split(`|`))(n===null||e.getTypeLength(t)===e.getTypeLength(r))&&(n=r);return n}serialize(e){super.serialize(e),e.convertTo=this.convertTo}deserialize(e){super.deserialize(e),this.convertTo=e.convertTo}generate(e,t){let n=this.node,r=this.getNodeType(e),i=n.build(e,r);return e.format(i,r,t)}},wr=class extends F{static get type(){return`TempNode`}constructor(e){super(e),this.isTempNode=!0}hasDependencies(e){return e.getDataFromNode(this).usageCount>1}build(e,t){if(e.getBuildStage()===`generate`){let n=e.getVectorType(this.getNodeType(e,t)),r=e.getDataFromNode(this);if(r.propertyName!==void 0)return e.format(r.propertyName,n,t);if(n!==`void`&&t!==`void`&&this.hasDependencies(e)){let i=super.build(e,n),a=e.getVarFromNode(this,null,n),o=e.getPropertyName(a);return e.addLineFlowCode(`${o} = ${i}`,this),r.snippet=i,r.propertyName=o,e.format(r.propertyName,n,t)}}return super.build(e,t)}},Tr=class extends wr{static get type(){return`JoinNode`}constructor(e=[],t=null){super(t),this.nodes=e}getNodeType(e){return this.nodeType===null?e.getTypeFromLength(this.nodes.reduce((t,n)=>t+e.getTypeLength(n.getNodeType(e)),0)):e.getVectorType(this.nodeType)}generate(e,t){let n=this.getNodeType(e),r=this.nodes,i=e.getComponentType(n),a=[];for(let t of r){let n=t.build(e),r=e.getComponentType(t.getNodeType(e));r!==i&&(n=e.format(n,r,i)),a.push(n)}let o=`${e.getType(n)}( ${a.join(`, `)} )`;return e.format(o,n,t)}};let Er=br.join(``);var Dr=class extends F{static get type(){return`SplitNode`}constructor(e,t=`x`){super(),this.node=e,this.components=t,this.isSplitNode=!0}getVectorLength(){let e=this.components.length;for(let t of this.components)e=Math.max(br.indexOf(t)+1,e);return e}getComponentType(e){return e.getComponentType(this.node.getNodeType(e))}getNodeType(e){return e.getTypeFromLength(this.components.length,this.getComponentType(e))}generate(e,t){let n=this.node,r=e.getTypeLength(n.getNodeType(e)),i=null;if(r>1){let a=null;this.getVectorLength()>=r&&(a=e.getTypeFromLength(this.getVectorLength(),this.getComponentType(e)));let o=n.build(e,a);i=this.components.length===r&&this.components===Er.slice(0,this.components.length)?e.format(o,a,t):e.format(`${o}.${this.components}`,this.getNodeType(e),t)}else i=n.build(e,t);return i}serialize(e){super.serialize(e),e.components=this.components}deserialize(e){super.deserialize(e),this.components=e.components}},Or=class extends wr{static get type(){return`SetNode`}constructor(e,t,n){super(),this.sourceNode=e,this.components=t,this.targetNode=n}getNodeType(e){return this.sourceNode.getNodeType(e)}generate(e){let{sourceNode:t,components:n,targetNode:r}=this,i=this.getNodeType(e),a=e.getTypeFromLength(n.length,r.getNodeType(e)),o=r.build(e,a),s=t.build(e,i),c=e.getTypeLength(i),l=[];for(let e=0;ee.replace(/r|s/g,`x`).replace(/g|t/g,`y`).replace(/b|p/g,`z`).replace(/a|q/g,`w`),Pr=e=>Nr(e).split(``).sort().join(``),Fr={setup(e,t){return e(ai(t.shift()),...t)},get(e,t,n){if(typeof t==`string`&&e[t]===void 0){if(e.isStackNode!==!0&&t===`assign`)return(...e)=>(null.assign(n,...e),n);if(Mr.has(t)){let r=Mr.get(t);return e.isStackNode?(...e)=>n.add(r(...e)):(...e)=>r(n,...e)}else if(t===`self`)return e;else if(t.endsWith(`Assign`)&&Mr.has(t.slice(0,t.length-6))){let r=Mr.get(t.slice(0,t.length-6));return e.isStackNode?(...e)=>n.assign(e[0],r(...e)):(...e)=>n.assign(r(n,...e))}else if(/^[xyzwrgbastpq]{1,4}$/.test(t)===!0)return t=Nr(t),R(new Dr(n,t));else if(/^set[XYZWRGBASTPQ]{1,4}$/.test(t)===!0)return t=Pr(t.slice(3).toLowerCase()),n=>R(new Or(e,t,n));else if(/^flip[XYZWRGBASTPQ]{1,4}$/.test(t)===!0)return t=Pr(t.slice(4).toLowerCase()),()=>R(new kr(R(e),t));else if(t===`width`||t===`height`||t===`depth`)return t===`width`?t=`x`:t===`height`?t=`y`:t===`depth`&&(t=`z`),R(new Dr(e,t));else if(/^\d+$/.test(t)===!0)return R(new Sr(n,new jr(Number(t),`uint`)))}return Reflect.get(e,t,n)},set(e,t,n,r){return typeof t==`string`&&e[t]===void 0&&(/^[xyzwrgbastpq]{1,4}$/.test(t)===!0||t===`width`||t===`height`||t===`depth`||/^\d+$/.test(t)===!0)?(r[t].assign(n),!0):Reflect.set(e,t,n,r)}},Ir=new WeakMap,Lr=new WeakMap,Rr=function(e,t=null){let n=hr(e);if(n===`node`){let t=Ir.get(e);return t===void 0&&(t=new Proxy(e,Fr),Ir.set(e,t),Ir.set(t,t)),t}else if(t===null&&(n===`float`||n===`boolean`)||n&&n!==`shader`&&n!==`string`)return R(ti(e,t));else if(n===`shader`)return B(e);return e},zr=function(e,t=null){for(let n in e)e[n]=R(e[n],t);return e},Br=function(e,t=null){let n=e.length;for(let r=0;rR(r===null?e:Object.assign(e,r));return t===null?(...t)=>i(new e(...oi(t))):n===null?(...n)=>i(new e(t,...oi(n))):(n=R(n),(...r)=>i(new e(t,...oi(r),n)))},Hr=function(e,...t){return R(new e(...oi(t)))};var Ur=class extends F{constructor(e,t){super(),this.shaderNode=e,this.inputNodes=t}getNodeType(e){return this.shaderNode.nodeType||this.getOutputNode(e).getNodeType(e)}call(e){let{shaderNode:t,inputNodes:n}=this,r=e.getNodeProperties(t);if(r.onceOutput)return r.onceOutput;let i=null;if(t.layout){let r=Lr.get(e.constructor);r===void 0&&(r=new WeakMap,Lr.set(e.constructor,r));let a=r.get(t);a===void 0&&(a=R(e.buildFunctionNode(t)),r.set(t,a)),e.currentFunctionNode!==null&&e.currentFunctionNode.includes.push(a),i=R(a.call(n))}else{let r=t.jsFunc;i=R(n===null?r(e):r(n,e))}return t.once&&(r.onceOutput=i),i}getOutputNode(e){let t=e.getNodeProperties(this);return t.outputNode===null&&(t.outputNode=this.setupOutput(e)),t.outputNode}setup(e){return this.getOutputNode(e)}setupOutput(e){return e.addStack(),e.stack.outputNode=this.call(e),e.removeStack()}generate(e,t){return this.getOutputNode(e).build(e,t)}},Wr=class extends F{constructor(e,t){super(t),this.jsFunc=e,this.layout=null,this.global=!0,this.once=!1}setLayout(e){return this.layout=e,this}call(e=null){return ai(e),R(new Ur(this,e))}setup(){return this.call()}};let Gr=[!1,!0],Kr=[0,1,2,3],qr=[-1,-2],Jr=[.5,1.5,1/3,1e-6,1e6,Math.PI,Math.PI*2,1/Math.PI,2/Math.PI,1/(Math.PI*2),Math.PI/2],Yr=new Map;for(let e of Gr)Yr.set(e,new jr(e));let Xr=new Map;for(let e of Kr)Xr.set(e,new jr(e,`uint`));let Zr=new Map([...Xr].map(e=>new jr(e.value,`int`)));for(let e of qr)Zr.set(e,new jr(e,`int`));let Qr=new Map([...Zr].map(e=>new jr(e.value)));for(let e of Jr)Qr.set(e,new jr(e));for(let e of Jr)Qr.set(-e,new jr(-e));let $r={bool:Yr,uint:Xr,ints:Zr,float:Qr},ei=new Map([...Yr,...Qr]),ti=(e,t)=>ei.has(e)?ei.get(e):e.isNode===!0?e:new jr(e,t),ni=e=>{try{return e.getNodeType()}catch{return}},L=function(e,t=null){return(...n)=>{if((n.length===0||![`bool`,`float`,`int`,`uint`].includes(e)&&n.every(e=>typeof e!=`object`))&&(n=[gr(e,...n)]),n.length===1&&t!==null&&t.has(n[0]))return R(t.get(n[0]));if(n.length===1){let t=ti(n[0],e);return ni(t)===e?R(t):R(new Cr(t,e))}return R(new Tr(n.map(e=>ti(e)),e))}},ri=e=>e==null?null:e.nodeType||e.convertTo||(typeof e==`string`?e:null);function ii(e,t){return new Proxy(new Wr(e,t),Fr)}let R=(e,t=null)=>Rr(e,t),ai=(e,t=null)=>new zr(e,t),oi=(e,t=null)=>new Br(e,t),z=(...e)=>new Vr(...e),si=(...e)=>new Hr(...e),B=(e,t)=>{let n=new ii(e,t),r=(...e)=>{let t;return ai(e),t=e[0]&&e[0].isNode?[...e]:e[0],n.call(t)};return r.shaderNode=n,r.setLayout=e=>(n.setLayout(e),r),r.once=()=>(n.once=!0,r),r};I(`toGlobal`,e=>(e.global=!0,e));let ci=(...e)=>null.If(...e);function li(e){return e}I(`append`,li);let ui=new L(`color`),V=new L(`float`,$r.float),di=new L(`int`,$r.ints),fi=new L(`uint`,$r.uint),pi=new L(`bool`,$r.bool),H=new L(`vec2`),mi=new L(`ivec2`),hi=new L(`uvec2`),gi=new L(`bvec2`),U=new L(`vec3`),_i=new L(`ivec3`),vi=new L(`uvec3`),yi=new L(`bvec3`),bi=new L(`vec4`),xi=new L(`ivec4`),Si=new L(`uvec4`),Ci=new L(`bvec4`),wi=new L(`mat2`),Ti=new L(`mat3`),Ei=new L(`mat4`);I(`toColor`,ui),I(`toFloat`,V),I(`toInt`,di),I(`toUint`,fi),I(`toBool`,pi),I(`toVec2`,H),I(`toIVec2`,mi),I(`toUVec2`,hi),I(`toBVec2`,gi),I(`toVec3`,U),I(`toIVec3`,_i),I(`toUVec3`,vi),I(`toBVec3`,yi),I(`toVec4`,bi),I(`toIVec4`,xi),I(`toUVec4`,Si),I(`toBVec4`,Ci),I(`toMat2`,wi),I(`toMat3`,Ti),I(`toMat4`,Ei),I(`element`,z(Sr)),I(`convert`,(e,t)=>R(new Cr(R(e),t)));var Di=class extends F{static get type(){return`UniformGroupNode`}constructor(e,t=!1,n=1){super(`string`),this.name=e,this.version=0,this.shared=t,this.order=n,this.isUniformGroup=!0}set needsUpdate(e){e===!0&&this.version++}serialize(e){super.serialize(e),e.name=this.name,e.version=this.version,e.shared=this.shared}deserialize(e){super.deserialize(e),this.name=e.name,this.version=e.version,this.shared=e.shared}};let Oi=e=>new Di(e),ki=((e,t=0)=>new Di(e,!0,t))(`render`),Ai=Oi(`object`);var ji=class extends Ar{static get type(){return`UniformNode`}constructor(e,t=null){super(e,t),this.isUniformNode=!0,this.name=``,this.groupNode=Ai}label(e){return this.name=e,this}setGroup(e){return this.groupNode=e,this}getGroup(){return this.groupNode}getUniformHash(e){return this.getHash(e)}onUpdate(e,t){let n=this.getSelf();return e=e.bind(n),super.onUpdate(t=>{let r=e(t,n);r!==void 0&&(this.value=r)},t)}generate(e,t){let n=this.getNodeType(e),r=this.getUniformHash(e),i=e.getNodeFromHash(r);i===void 0&&(e.setHashNode(this,r),i=this);let a=i.getInputType(e),o=e.getUniformFromNode(i,a,e.shaderStage,this.name||e.context.label),s=e.getPropertyName(o);return e.context.label!==void 0&&delete e.context.label,e.format(s,n,t)}};let Mi=(e,t)=>{let n=ri(t||e);return R(new ji(e&&e.isNode===!0?e.node&&e.node.value||e.value:e,n))};var Ni=class extends F{static get type(){return`PropertyNode`}constructor(e,t=null,n=!1){super(e),this.name=t,this.varying=n,this.isPropertyNode=!0}getHash(e){return this.name||super.getHash(e)}isGlobal(){return!0}generate(e){let t;return this.varying===!0?(t=e.getVaryingFromNode(this,this.name),t.needsInterpolation=!0):t=e.getVarFromNode(this,this.name),e.getPropertyName(t)}};let Pi=(e,t)=>R(new Ni(e,t)),Fi=si(Ni,`vec4`,`DiffuseColor`);I(`assign`,z(class extends wr{static get type(){return`AssignNode`}constructor(e,t){super(),this.targetNode=e,this.sourceNode=t}hasDependencies(){return!1}getNodeType(e,t){return t===`void`?`void`:this.targetNode.getNodeType(e)}needsSplitAssign(e){let{targetNode:t}=this;if(e.isAvailable(`swizzleAssign`)===!1&&t.isSplitNode&&t.components.length>1){let n=e.getTypeLength(t.node.getNodeType(e));return br.join(``).slice(0,n)!==t.components}return!1}generate(e,t){let{targetNode:n,sourceNode:r}=this,i=this.needsSplitAssign(e),a=n.getNodeType(e),o=n.context({assign:!0}).build(e),s=r.build(e,a),c=r.getNodeType(e),l=e.getDataFromNode(this),u;if(l.initialized===!0)t!==`void`&&(u=o);else if(i){let r=e.getVarFromNode(this,null,a),i=e.getPropertyName(r);e.addLineFlowCode(`${i} = ${s}`,this);let c=n.node.context({assign:!0}).build(e);for(let t=0;t(t=t.length>1||t[0]&&t[0].isNode===!0?oi(t):ai(t[0]),R(new Ii(R(e),t))));var W=class e extends wr{static get type(){return`OperatorNode`}constructor(t,n,r,...i){if(super(),i.length>0){let a=new e(t,n,r);for(let n=0;n>`||n===`<<`)return e.getIntegerType(a);if(n===`!`||n===`==`||n===`&&`||n===`||`||n===`^^`)return`bool`;if(n===`<`||n===`>`||n===`<=`||n===`>=`){let n=t?e.getTypeLength(t):Math.max(e.getTypeLength(a),e.getTypeLength(o));return n>1?`bvec${n}`:`bool`}else return a===`float`&&e.isMatrix(o)?o:e.isMatrix(a)&&e.isVector(o)?e.getVectorFromMatrix(a):e.isVector(a)&&e.isMatrix(o)?e.getVectorFromMatrix(o):e.getTypeLength(o)>e.getTypeLength(a)?o:a}generate(e,t){let n=this.op,r=this.aNode,i=this.bNode,a=this.getNodeType(e,t),o=null,s=null;a===`void`?o=s=a:(o=r.getNodeType(e),s=i===void 0?null:i.getNodeType(e),n===`<`||n===`>`||n===`<=`||n===`>=`||n===`==`?e.isVector(o)?s=o:o!==s&&(o=s=`float`):n===`>>`||n===`<<`?(o=a,s=e.changeComponentType(s,`uint`)):e.isMatrix(o)&&e.isVector(s)?s=e.getVectorFromMatrix(o):o=e.isVector(o)&&e.isMatrix(s)?e.getVectorFromMatrix(s):s=a);let c=r.build(e,o),l=i===void 0?null:i.build(e,s),u=e.getTypeLength(t),d=e.getFunctionOperator(n);if(t!==`void`)return n===`<`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`lessThan`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} < ${l} )`,a,t):n===`<=`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`lessThanEqual`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} <= ${l} )`,a,t):n===`>`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`greaterThan`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} > ${l} )`,a,t):n===`>=`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`greaterThanEqual`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} >= ${l} )`,a,t):n===`!`||n===`~`?e.format(`(${n}${c})`,o,t):d?e.format(`${d}( ${c}, ${l} )`,a,t):e.format(`( ${c} ${n} ${l} )`,a,t);if(o!==`void`)return d?e.format(`${d}( ${c}, ${l} )`,a,t):e.format(`${c} ${n} ${l}`,a,t)}serialize(e){super.serialize(e),e.op=this.op}deserialize(e){super.deserialize(e),this.op=e.op}};let Li=z(W,`+`),Ri=z(W,`-`),zi=z(W,`*`),Bi=z(W,`/`),Vi=z(W,`%`),Hi=z(W,`==`),Ui=z(W,`!=`),Wi=z(W,`<`),Gi=z(W,`>`),Ki=z(W,`<=`),qi=z(W,`>=`),Ji=z(W,`&&`),Yi=z(W,`||`),Xi=z(W,`!`),Zi=z(W,`^^`),Qi=z(W,`&`),$i=z(W,`~`),ea=z(W,`|`),ta=z(W,`^`),na=z(W,`<<`),ra=z(W,`>>`);I(`add`,Li),I(`sub`,Ri),I(`mul`,zi),I(`div`,Bi),I(`modInt`,Vi),I(`equal`,Hi),I(`notEqual`,Ui),I(`lessThan`,Wi),I(`greaterThan`,Gi),I(`lessThanEqual`,Ki),I(`greaterThanEqual`,qi),I(`and`,Ji),I(`or`,Yi),I(`not`,Xi),I(`xor`,Zi),I(`bitAnd`,Qi),I(`bitNot`,$i),I(`bitOr`,ea),I(`bitXor`,ta),I(`shiftLeft`,na),I(`shiftRight`,ra),I(`remainder`,(...e)=>(console.warn(`TSL.OperatorNode: .remainder() has been renamed to .modInt().`),Vi(...e)));var G=class e extends wr{static get type(){return`MathNode`}constructor(e,t,n=null,r=null){super(),this.method=e,this.aNode=t,this.bNode=n,this.cNode=r}getInputType(e){let t=this.aNode.getNodeType(e),n=this.bNode?this.bNode.getNodeType(e):null,r=this.cNode?this.cNode.getNodeType(e):null,i=e.isMatrix(t)?0:e.getTypeLength(t),a=e.isMatrix(n)?0:e.getTypeLength(n),o=e.isMatrix(r)?0:e.getTypeLength(r);return i>a&&i>o?t:a>o?n:o>i?r:t}getNodeType(t){let n=this.method;return n===e.LENGTH||n===e.DISTANCE||n===e.DOT?`float`:n===e.CROSS?`vec3`:n===e.ALL?`bool`:n===e.EQUALS?t.changeComponentType(this.aNode.getNodeType(t),`bool`):n===e.MOD?this.aNode.getNodeType(t):this.getInputType(t)}generate(t,n){let r=this.method,i=this.getNodeType(t),a=this.getInputType(t),o=this.aNode,s=this.bNode,c=this.cNode,l=t.renderer.isWebGLRenderer===!0;if(r===e.TRANSFORM_DIRECTION){let e=o,r=s;t.isMatrix(e.getNodeType(t))?r=bi(U(r),0):e=bi(U(e),0);let i=zi(e,r).xyz;return va(i).build(t,n)}else if(r===e.NEGATE)return t.format(`( - `+o.build(t,a)+` )`,i,n);else if(r===e.ONE_MINUS)return Ri(1,o).build(t,n);else if(r===e.RECIPROCAL)return Bi(1,o).build(t,n);else if(r===e.DIFFERENCE)return Ea(Ri(o,s)).build(t,n);else{let u=[];return r===e.CROSS||r===e.MOD?u.push(o.build(t,i),s.build(t,i)):l&&r===e.STEP?u.push(o.build(t,t.getTypeLength(o.getNodeType(t))===1?`float`:a),s.build(t,a)):l&&(r===e.MIN||r===e.MAX)||r===e.MOD?u.push(o.build(t,a),s.build(t,t.getTypeLength(s.getNodeType(t))===1?`float`:a)):r===e.REFRACT?u.push(o.build(t,a),s.build(t,a),c.build(t,`float`)):r===e.MIX?u.push(o.build(t,a),s.build(t,a),c.build(t,t.getTypeLength(c.getNodeType(t))===1?`float`:a)):(u.push(o.build(t,a)),s!==null&&u.push(s.build(t,a)),c!==null&&u.push(c.build(t,a))),t.format(`${t.getMethod(r,i)}( ${u.join(`, `)} )`,i,n)}}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}};G.ALL=`all`,G.ANY=`any`,G.EQUALS=`equals`,G.RADIANS=`radians`,G.DEGREES=`degrees`,G.EXP=`exp`,G.EXP2=`exp2`,G.LOG=`log`,G.LOG2=`log2`,G.SQRT=`sqrt`,G.INVERSE_SQRT=`inversesqrt`,G.FLOOR=`floor`,G.CEIL=`ceil`,G.NORMALIZE=`normalize`,G.FRACT=`fract`,G.SIN=`sin`,G.COS=`cos`,G.TAN=`tan`,G.ASIN=`asin`,G.ACOS=`acos`,G.ATAN=`atan`,G.ABS=`abs`,G.SIGN=`sign`,G.LENGTH=`length`,G.NEGATE=`negate`,G.ONE_MINUS=`oneMinus`,G.DFDX=`dFdx`,G.DFDY=`dFdy`,G.ROUND=`round`,G.RECIPROCAL=`reciprocal`,G.TRUNC=`trunc`,G.FWIDTH=`fwidth`,G.BITCAST=`bitcast`,G.TRANSPOSE=`transpose`,G.ATAN2=`atan2`,G.MIN=`min`,G.MAX=`max`,G.MOD=`mod`,G.STEP=`step`,G.REFLECT=`reflect`,G.DISTANCE=`distance`,G.DIFFERENCE=`difference`,G.DOT=`dot`,G.CROSS=`cross`,G.POW=`pow`,G.TRANSFORM_DIRECTION=`transformDirection`,G.MIX=`mix`,G.CLAMP=`clamp`,G.REFRACT=`refract`,G.SMOOTHSTEP=`smoothstep`,G.FACEFORWARD=`faceforward`;let ia=V(Math.PI);Math.PI*2;let aa=z(G,G.ALL),oa=z(G,G.ANY),sa=z(G,G.EQUALS),ca=z(G,G.RADIANS),la=z(G,G.DEGREES),ua=z(G,G.EXP),da=z(G,G.EXP2),fa=z(G,G.LOG),pa=z(G,G.LOG2),ma=z(G,G.SQRT),ha=z(G,G.INVERSE_SQRT),ga=z(G,G.FLOOR),_a=z(G,G.CEIL),va=z(G,G.NORMALIZE),ya=z(G,G.FRACT),ba=z(G,G.SIN),xa=z(G,G.COS),Sa=z(G,G.TAN),Ca=z(G,G.ASIN),wa=z(G,G.ACOS),Ta=z(G,G.ATAN),Ea=z(G,G.ABS),Da=z(G,G.SIGN),Oa=z(G,G.LENGTH),ka=z(G,G.NEGATE),Aa=z(G,G.ONE_MINUS),ja=z(G,G.DFDX),Ma=z(G,G.DFDY),Na=z(G,G.ROUND),Pa=z(G,G.RECIPROCAL),Fa=z(G,G.TRUNC),Ia=z(G,G.FWIDTH);G.BITCAST;let La=z(G,G.TRANSPOSE),Ra=z(G,G.ATAN2),za=z(G,G.MIN),Ba=z(G,G.MAX),Va=z(G,G.MOD),Ha=z(G,G.STEP),Ua=z(G,G.REFLECT),Wa=z(G,G.DISTANCE),Ga=z(G,G.DIFFERENCE),Ka=z(G,G.DOT),qa=z(G,G.CROSS),Ja=z(G,G.POW),Ya=z(G,G.POW,2),Xa=z(G,G.POW,3),Za=z(G,G.POW,4),Qa=z(G,G.TRANSFORM_DIRECTION),$a=e=>zi(Da(e),Ja(Ea(e),1/3)),eo=e=>Ka(e,e),to=z(G,G.MIX),no=(e,t=0,n=1)=>R(new G(G.CLAMP,R(e),R(t),R(n))),ro=e=>no(e),io=z(G,G.REFRACT),ao=z(G,G.SMOOTHSTEP),oo=z(G,G.FACEFORWARD),so=B(([e])=>ya(ba(Va(Ka(e.xy,H(12.9898,78.233)),ia)).mul(43758.5453)));I(`all`,aa),I(`any`,oa),I(`equals`,sa),I(`radians`,ca),I(`degrees`,la),I(`exp`,ua),I(`exp2`,da),I(`log`,fa),I(`log2`,pa),I(`sqrt`,ma),I(`inverseSqrt`,ha),I(`floor`,ga),I(`ceil`,_a),I(`normalize`,va),I(`fract`,ya),I(`sin`,ba),I(`cos`,xa),I(`tan`,Sa),I(`asin`,Ca),I(`acos`,wa),I(`atan`,Ta),I(`abs`,Ea),I(`sign`,Da),I(`length`,Oa),I(`lengthSq`,eo),I(`negate`,ka),I(`oneMinus`,Aa),I(`dFdx`,ja),I(`dFdy`,Ma),I(`round`,Na),I(`reciprocal`,Pa),I(`trunc`,Fa),I(`fwidth`,Ia),I(`atan2`,Ra),I(`min`,za),I(`max`,Ba),I(`mod`,Va),I(`step`,Ha),I(`reflect`,Ua),I(`distance`,Wa),I(`dot`,Ka),I(`cross`,qa),I(`pow`,Ja),I(`pow2`,Ya),I(`pow3`,Xa),I(`pow4`,Za),I(`transformDirection`,Qa),I(`mix`,(e,t,n)=>to(t,n,e)),I(`clamp`,no),I(`refract`,io),I(`smoothstep`,(e,t,n)=>ao(t,n,e)),I(`faceForward`,oo),I(`difference`,Ga),I(`saturate`,ro),I(`cbrt`,$a),I(`transpose`,La),I(`rand`,so);let co=z(class extends F{static get type(){return`ConditionalNode`}constructor(e,t,n=null){super(),this.condNode=e,this.ifNode=t,this.elseNode=n}getNodeType(e){let t=this.ifNode.getNodeType(e);if(this.elseNode!==null){let n=this.elseNode.getNodeType(e);if(e.getTypeLength(n)>e.getTypeLength(t))return n}return t}setup(e){let t=this.condNode.cache(),n=this.ifNode.cache(),r=this.elseNode?this.elseNode.cache():null,i=e.context.nodeBlock;e.getDataFromNode(n).parentNodeBlock=i,r!==null&&(e.getDataFromNode(r).parentNodeBlock=i);let a=e.getNodeProperties(this);a.condNode=t,a.ifNode=n.context({nodeBlock:n}),a.elseNode=r?r.context({nodeBlock:r}):null}generate(e,t){let n=this.getNodeType(e),r=e.getDataFromNode(this);if(r.nodeProperty!==void 0)return r.nodeProperty;let{condNode:i,ifNode:a,elseNode:o}=e.getNodeProperties(this),s=t!==`void`,c=s?Pi(n).build(e):``;r.nodeProperty=c;let l=i.build(e,`bool`);e.addFlowCode(`\n${e.tab}if ( ${l} ) {\n\n`).addFlowTab();let u=a.build(e,n);if(u&&=s?c+` = `+u+`;`:`return `+u+`;`,e.removeFlowTab().addFlowCode(e.tab+` `+u+` - -`+e.tab+`}`),o!==null){e.addFlowCode(` else { - -`).addFlowTab();let t=o.build(e,n);t&&=s?c+` = `+t+`;`:`return `+t+`;`,e.removeFlowTab().addFlowCode(e.tab+` `+t+` - -`+e.tab+`} - -`)}else e.addFlowCode(` - -`);return e.format(c,n,t)}});I(`select`,co),I(`cond`,(...e)=>(console.warn(`TSL.ConditionalNode: cond() has been renamed to select().`),co(...e)));let lo=z(class extends F{static get type(){return`ContextNode`}constructor(e,t={}){super(),this.isContextNode=!0,this.node=e,this.value=t}getScope(){return this.node.getScope()}getNodeType(e){return this.node.getNodeType(e)}analyze(e){this.node.build(e)}setup(e){let t=e.getContext();e.setContext({...e.context,...this.value});let n=this.node.build(e);return e.setContext(t),n}generate(e,t){let n=e.getContext();e.setContext({...e.context,...this.value});let r=this.node.build(e,t);return e.setContext(n),r}});I(`context`,lo),I(`label`,(e,t)=>lo(e,{label:t}));let uo=z(class extends F{static get type(){return`VarNode`}constructor(e,t=null){super(),this.node=e,this.name=t,this.global=!0,this.isVarNode=!0}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}generate(e){let{node:t,name:n}=this,r=e.getVarFromNode(this,n,e.getVectorType(this.getNodeType(e))),i=e.getPropertyName(r),a=t.build(e,r.type);return e.addLineFlowCode(`${i} = ${a}`,this),i}});I(`temp`,uo),I(`toVar`,(...e)=>uo(...e).append());let fo=z(class extends F{static get type(){return`VaryingNode`}constructor(e,t=null){super(),this.node=e,this.name=t,this.isVaryingNode=!0}isGlobal(){return!0}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}setupVarying(e){let t=e.getNodeProperties(this),n=t.varying;if(n===void 0){let r=this.name,i=this.getNodeType(e);t.varying=n=e.getVaryingFromNode(this,r,i),t.node=this.node}return n.needsInterpolation||=e.shaderStage===`fragment`,n}setup(e){this.setupVarying(e)}analyze(e){return this.setupVarying(e),this.node.analyze(e)}generate(e){let t=e.getNodeProperties(this),n=this.setupVarying(e);if(t.propertyName===void 0){let r=this.getNodeType(e),i=e.getPropertyName(n,yr.VERTEX);e.flowNodeFromShaderStage(yr.VERTEX,this.node,r,i),t.propertyName=i}return e.getPropertyName(n)}});I(`varying`,fo);let po=`WorkingColorSpace`,mo=`OutputColorSpace`;function ho(e){let t=null;return e===`srgb-linear`?t=`Linear`:e===`srgb`&&(t=`sRGB`),t}function go(e,t){return ho(e)+`To`+ho(t)}var _o=class extends wr{static get type(){return`ColorSpaceNode`}constructor(e,t,n){super(`vec4`),this.colorNode=e,this.source=t,this.target=n}getColorSpace(e,t){return t===po?je.workingColorSpace:t===mo?e.context.outputColorSpace||e.renderer.outputColorSpace:t}setup(e){let{renderer:t}=e,{colorNode:n}=this,r=this.getColorSpace(e,this.source),i=this.getColorSpace(e,this.target);if(r===i)return n;let a=go(r,i),o=null,s=t.nodes.library.getColorSpaceFunction(a);return s===null?(console.error(`ColorSpaceNode: Unsupported Color Space configuration.`,a),o=n):o=bi(s(n.rgb),n.a),o}};let vo=e=>R(new _o(R(e),po,mo)),yo=e=>R(new _o(R(e),mo,po)),bo=(e,t)=>R(new _o(R(e),po,t)),xo=(e,t)=>R(new _o(R(e),t,po));I(`toOutputColorSpace`,vo),I(`toWorkingColorSpace`,yo),I(`workingToColorSpace`,bo),I(`colorSpaceToWorking`,xo);let So=class extends Sr{static get type(){return`ReferenceElementNode`}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){let t=super.generate(e),n=this.referenceNode.getNodeType(),r=this.getNodeType();return e.format(t,n,r)}};var Co=class extends F{static get type(){return`ReferenceBaseNode`}constructor(e,t,n=null,r=null){super(),this.property=e,this.uniformType=t,this.object=n,this.count=r,this.properties=e.split(`.`),this.reference=n,this.node=null,this.group=null,this.updateType=P.OBJECT}setGroup(e){return this.group=e,this}element(e){return R(new So(this,R(e)))}setNodeType(e){let t=Mi(null,e).getSelf();this.group!==null&&t.setGroup(this.group),this.node=t}getNodeType(e){return this.node===null&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){let{properties:t}=this,n=e[t[0]];for(let e=1;eR(new wo(e,t,n));var Eo=class extends wr{static get type(){return`ToneMappingNode`}constructor(e,t=Oo,n=null){super(`vec3`),this.toneMapping=e,this.exposureNode=t,this.colorNode=n}getCacheKey(){return fr(super.getCacheKey(),this.toneMapping)}setup(e){let t=this.colorNode||e.context.color,n=this.toneMapping;if(n===0)return t;let r=null,i=e.renderer.nodes.library.getToneMappingFunction(n);return i===null?(console.error(`ToneMappingNode: Unsupported Tone Mapping configuration.`,n),r=t):r=bi(i(t.rgb,this.exposureNode),t.a),r}};let Do=(e,t,n)=>R(new Eo(e,R(t),R(n))),Oo=To(`toneMappingExposure`,`float`);I(`toneMapping`,(e,t,n)=>Do(t,n,e));var ko=class extends Ar{static get type(){return`BufferAttributeNode`}constructor(e,t=null,n=0,r=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferStride=n,this.bufferOffset=r,this.usage=b,this.instanced=!1,this.attribute=null,this.global=!0,e&&e.isBufferAttribute===!0&&(this.attribute=e,this.usage=e.usage,this.instanced=e.isInstancedBufferAttribute)}getHash(e){if(this.bufferStride===0&&this.bufferOffset===0){let t=e.globalCache.getData(this.value);return t===void 0&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getNodeType(e){return this.bufferType===null&&(this.bufferType=e.getTypeFromAttribute(this.attribute)),this.bufferType}setup(e){if(this.attribute!==null)return;let t=this.getNodeType(e),n=this.value,r=e.getTypeLength(t),i=this.bufferStride||r,a=this.bufferOffset,o=n.isInterleavedBuffer===!0?n:new In(n,i),s=new Rn(o,r,a);o.setUsage(this.usage),this.attribute=s,this.attribute.isInstancedBufferAttribute=this.instanced}generate(e){let t=this.getNodeType(e),n=e.getBufferAttributeFromNode(this,t),r=e.getPropertyName(n),i=null;return e.shaderStage===`vertex`||e.shaderStage===`compute`?(this.name=r,i=r):i=fo(this).build(e,t),i}getInputType(){return`bufferAttribute`}setUsage(e){return this.usage=e,this.attribute&&this.attribute.isBufferAttribute===!0&&(this.attribute.usage=e),this}setInstanced(e){return this.instanced=e,this}};let Ao=(e,t,n,r)=>R(new ko(e,t,n,r));I(`toAttribute`,e=>Ao(e.value));var jo=class extends F{static get type(){return`ComputeNode`}constructor(e,t,n=[64]){super(`void`),this.isComputeNode=!0,this.computeNode=e,this.count=t,this.workgroupSize=n,this.dispatchCount=0,this.version=1,this.updateBeforeType=P.OBJECT,this.updateDispatchCount()}dispose(){this.dispatchEvent({type:`dispose`})}set needsUpdate(e){e===!0&&this.version++}updateDispatchCount(){let{count:e,workgroupSize:t}=this,n=t[0];for(let e=1;eR(new jo(R(e),t,n)));var Mo=class extends F{static get type(){return`CacheNode`}constructor(e,t=!0){super(),this.node=e,this.parent=t,this.isCacheNode=!0}getNodeType(e){return this.node.getNodeType(e)}build(e,...t){let n=e.getCache(),r=e.getCacheFromNode(this,this.parent);e.setCache(r);let i=this.node.build(e,...t);return e.setCache(n),i}};I(`cache`,(e,...t)=>R(new Mo(R(e),...t))),I(`bypass`,z(class extends F{static get type(){return`BypassNode`}constructor(e,t){super(),this.isBypassNode=!0,this.outputNode=e,this.callNode=t}getNodeType(e){return this.outputNode.getNodeType(e)}generate(e){let t=this.callNode.build(e,`void`);return t!==``&&e.addLineFlowCode(t,this),this.outputNode.build(e)}}));var No=class extends F{static get type(){return`RemapNode`}constructor(e,t,n,r=V(0),i=V(1)){super(),this.node=e,this.inLowNode=t,this.inHighNode=n,this.outLowNode=r,this.outHighNode=i,this.doClamp=!0}setup(){let{node:e,inLowNode:t,inHighNode:n,outLowNode:r,outHighNode:i,doClamp:a}=this,o=e.sub(t).div(n.sub(t));return a===!0&&(o=o.clamp()),o.mul(i.sub(r)).add(r)}};let Po=z(No,null,null,{doClamp:!1}),Fo=z(No);I(`remap`,Po),I(`remapClamp`,Fo);let Io=z(class extends F{static get type(){return`ExpressionNode`}constructor(e=``,t=`void`){super(t),this.snippet=e}generate(e,t){let n=this.getNodeType(e),r=this.snippet;if(n===`void`)e.addLineFlowCode(r,this);else return e.format(`( ${r} )`,n,t)}});I(`discard`,e=>(e?co(e,Io(`discard`)):Io(`discard`)).append());var Lo=class extends wr{static get type(){return`RenderOutputNode`}constructor(e,t,n){super(`vec4`),this.colorNode=e,this.toneMapping=t,this.outputColorSpace=n,this.isRenderOutput=!0}setup({context:e}){let t=this.colorNode||e.color,n=(this.toneMapping===null?e.toneMapping:this.toneMapping)||0,r=(this.outputColorSpace===null?e.outputColorSpace:this.outputColorSpace)||``;return n!==0&&(t=t.toneMapping(n)),r!==``&&r!==je.workingColorSpace&&(t=t.workingToColorSpace(r)),t}};I(`renderOutput`,(e,t=null,n=null)=>R(new Lo(R(e),t,n)));var Ro=class extends F{static get type(){return`AttributeNode`}constructor(e,t=null){super(t),this.global=!0,this._attributeName=e}getHash(e){return this.getAttributeName(e)}getNodeType(e){let t=this.nodeType;if(t===null){let n=this.getAttributeName(e);if(e.hasGeometryAttribute(n)){let r=e.geometry.getAttribute(n);t=e.getTypeFromAttribute(r)}else t=`float`}return t}setAttributeName(e){return this._attributeName=e,this}getAttributeName(){return this._attributeName}generate(e){let t=this.getAttributeName(e),n=this.getNodeType(e);if(e.hasGeometryAttribute(t)===!0){let r=e.geometry.getAttribute(t),i=e.getTypeFromAttribute(r),a=e.getAttribute(t,i);return e.shaderStage===`vertex`?e.format(a.name,i,n):fo(this).build(e,n)}else return console.warn(`AttributeNode: Vertex attribute "${t}" not found on geometry.`),e.generateConst(n)}serialize(e){super.serialize(e),e.global=this.global,e._attributeName=this._attributeName}deserialize(e){super.deserialize(e),this.global=e.global,this._attributeName=e._attributeName}};let zo=(e,t)=>R(new Ro(e,t)),Bo=e=>zo(`uv`+(e>0?e:``),`vec2`),Vo=z(class extends F{static get type(){return`TextureSizeNode`}constructor(e,t=null){super(`uvec2`),this.isTextureSizeNode=!0,this.textureNode=e,this.levelNode=t}generate(e,t){let n=this.textureNode.build(e,`property`),r=this.levelNode===null?`0`:this.levelNode.build(e,`int`);return e.format(`${e.getMethod(`textureDimensions`)}( ${n}, ${r} )`,this.getNodeType(e),t)}}),Ho=z(class extends ji{static get type(){return`MaxMipLevelNode`}constructor(e){super(0),this._textureNode=e,this.updateType=P.FRAME}get textureNode(){return this._textureNode}get texture(){return this._textureNode.value}update(){let e=this.texture,t=e.images,n=t&&t.length>0?t[0]&&t[0].image||t[0]:e.image;if(n&&n.width!==void 0){let{width:e,height:t}=n;this.value=Math.log2(Math.max(e,t))}}});var Uo=class extends ji{static get type(){return`TextureNode`}constructor(e,t=null,n=null,r=null){super(e),this.isTextureNode=!0,this.uvNode=t,this.levelNode=n,this.biasNode=r,this.compareNode=null,this.depthNode=null,this.gradNode=null,this.sampler=!0,this.updateMatrix=!1,this.updateType=P.NONE,this.referenceNode=null,this._value=e,this._matrixUniform=null,this.setUpdateMatrix(t===null)}set value(e){this.referenceNode?this.referenceNode.value=e:this._value=e}get value(){return this.referenceNode?this.referenceNode.value:this._value}getUniformHash(){return this.value.uuid}getNodeType(){return this.value.isDepthTexture===!0?`float`:this.value.type===1014?`uvec4`:this.value.type===1013?`ivec4`:`vec4`}getInputType(){return`texture`}getDefaultUV(){return Bo(this.value.channel)}updateReference(){return this.value}getTransformedUV(e){return this._matrixUniform===null&&(this._matrixUniform=Mi(this.value.matrix)),this._matrixUniform.mul(U(e,1)).xy}setUpdateMatrix(e){return this.updateMatrix=e,this.updateType=e?P.FRAME:P.NONE,this}setupUV(e,t){let n=this.value;return e.isFlipY()&&(n.isRenderTargetTexture===!0||n.isFramebufferTexture===!0||n.isDepthTexture===!0)&&(t=this.sampler?t.flipY():t.setY(di(Vo(this,this.levelNode).y).sub(t.y).sub(1))),t}setup(e){let t=e.getNodeProperties(this);t.referenceNode=this.referenceNode;let n=this.uvNode;(n===null||e.context.forceUVContext===!0)&&e.context.getUV&&(n=e.context.getUV(this)),n||=this.getDefaultUV(),this.updateMatrix===!0&&(n=this.getTransformedUV(n)),n=this.setupUV(e,n);let r=this.levelNode;r===null&&e.context.getTextureLevel&&(r=e.context.getTextureLevel(this)),t.uvNode=n,t.levelNode=r,t.biasNode=this.biasNode,t.compareNode=this.compareNode,t.gradNode=this.gradNode,t.depthNode=this.depthNode}generateUV(e,t){return t.build(e,this.sampler===!0?`vec2`:`ivec2`)}generateSnippet(e,t,n,r,i,a,o,s){let c=this.value,l;return l=r?e.generateTextureLevel(c,t,n,r,a):i?e.generateTextureBias(c,t,n,i,a):s?e.generateTextureGrad(c,t,n,s,a):o?e.generateTextureCompare(c,t,n,o,a):this.sampler===!1?e.generateTextureLoad(c,t,n,a):e.generateTexture(c,t,n,a),l}generate(e,t){let n=e.getNodeProperties(this),r=this.value;if(!r||r.isTexture!==!0)throw Error(`TextureNode: Need a three.js texture.`);let i=super.generate(e,`property`);if(t===`sampler`)return i+`_sampler`;if(e.isReference(t))return i;{let a=e.getDataFromNode(this),o=a.propertyName;if(o===void 0){let{uvNode:t,levelNode:r,biasNode:s,compareNode:c,depthNode:l,gradNode:u}=n,d=this.generateUV(e,t),f=r?r.build(e,`float`):null,p=s?s.build(e,`float`):null,m=l?l.build(e,`int`):null,h=c?c.build(e,`float`):null,g=u?[u[0].build(e,`vec2`),u[1].build(e,`vec2`)]:null,_=e.getVarFromNode(this);o=e.getPropertyName(_);let v=this.generateSnippet(e,i,d,f,p,m,h,g);e.addLineFlowCode(`${o} = ${v}`,this),a.snippet=v,a.propertyName=o}let s=o,c=this.getNodeType(e);return e.needsToWorkingColorSpace(r)&&(s=xo(Io(s,c),r.colorSpace).setup(e).build(e,c)),e.format(s,c,t)}}setSampler(e){return this.sampler=e,this}getSampler(){return this.sampler}uv(e){let t=this.clone();return t.uvNode=R(e),t.referenceNode=this.getSelf(),R(t)}blur(e){let t=this.clone();return t.biasNode=R(e).mul(Ho(t)),t.referenceNode=this.getSelf(),R(t)}level(e){let t=this.clone();return t.levelNode=R(e),t.referenceNode=this.getSelf(),R(t)}size(e){return Vo(this,e)}bias(e){let t=this.clone();return t.biasNode=R(e),t.referenceNode=this.getSelf(),R(t)}compare(e){let t=this.clone();return t.compareNode=R(e),t.referenceNode=this.getSelf(),R(t)}grad(e,t){let n=this.clone();return n.gradNode=[R(e),R(t)],n.referenceNode=this.getSelf(),R(n)}depth(e){let t=this.clone();return t.depthNode=R(e),t.referenceNode=this.getSelf(),R(t)}serialize(e){super.serialize(e),e.value=this.value.toJSON(e.meta).uuid,e.sampler=this.sampler,e.updateMatrix=this.updateMatrix,e.updateType=this.updateType}deserialize(e){super.deserialize(e),this.value=e.meta.textures[e.value],this.sampler=e.sampler,this.updateMatrix=e.updateMatrix,this.updateType=e.updateType}update(){let e=this.value,t=this._matrixUniform;t!==null&&(t.value=e.matrix),e.matrixAutoUpdate===!0&&e.updateMatrix()}clone(){let e=new this.constructor(this.value,this.uvNode,this.levelNode,this.biasNode);return e.sampler=this.sampler,e}};let Wo=z(Uo),Go=Mi(`float`).label(`cameraNear`).setGroup(ki).onRenderUpdate(({camera:e})=>e.near),Ko=Mi(`float`).label(`cameraFar`).setGroup(ki).onRenderUpdate(({camera:e})=>e.far),qo=Mi(`mat4`).label(`cameraViewMatrix`).setGroup(ki).onRenderUpdate(({camera:e})=>e.matrixWorldInverse);var Jo=class e extends F{static get type(){return`Object3DNode`}constructor(e,t=null){super(),this.scope=e,this.object3d=t,this.updateType=P.OBJECT,this._uniformNode=new ji(null)}getNodeType(){let t=this.scope;if(t===e.WORLD_MATRIX)return`mat4`;if(t===e.POSITION||t===e.VIEW_POSITION||t===e.DIRECTION||t===e.SCALE)return`vec3`}update(t){let n=this.object3d,r=this._uniformNode,i=this.scope;if(i===e.WORLD_MATRIX)r.value=n.matrixWorld;else if(i===e.POSITION)r.value=r.value||new O,r.value.setFromMatrixPosition(n.matrixWorld);else if(i===e.SCALE)r.value=r.value||new O,r.value.setFromMatrixScale(n.matrixWorld);else if(i===e.DIRECTION)r.value=r.value||new O,n.getWorldDirection(r.value);else if(i===e.VIEW_POSITION){let e=t.camera;r.value=r.value||new O,r.value.setFromMatrixPosition(n.matrixWorld),r.value.applyMatrix4(e.matrixWorldInverse)}}generate(t){let n=this.scope;return n===e.WORLD_MATRIX?this._uniformNode.nodeType=`mat4`:(n===e.POSITION||n===e.VIEW_POSITION||n===e.DIRECTION||n===e.SCALE)&&(this._uniformNode.nodeType=`vec3`),this._uniformNode.build(t)}serialize(e){super.serialize(e),e.scope=this.scope}deserialize(e){super.deserialize(e),this.scope=e.scope}};Jo.WORLD_MATRIX=`worldMatrix`,Jo.POSITION=`position`,Jo.SCALE=`scale`,Jo.VIEW_POSITION=`viewPosition`,Jo.DIRECTION=`direction`,Jo.DIRECTION,Jo.WORLD_MATRIX,Jo.POSITION,Jo.SCALE,Jo.VIEW_POSITION;var Yo=class extends Jo{static get type(){return`ModelNode`}constructor(e){super(e)}update(e){this.object3d=e.object,super.update(e)}};Yo.DIRECTION;let Xo=si(Yo,Yo.WORLD_MATRIX);Yo.POSITION,Yo.SCALE,Yo.VIEW_POSITION;let Zo=Mi(new D).onObjectUpdate(({object:e},t)=>t.value.getNormalMatrix(e.matrixWorld)),Qo=qo.mul(Xo).toVar(`modelViewMatrix_2`),$o=zo(`position`,`vec3`).varying(`positionLocal`),es=Qo.mul($o).xyz.varying(`v_positionView`),ts=es.negate().varying(`v_positionViewDirection`).normalize().toVar(`positionViewDirection`),ns=V(si(class extends F{static get type(){return`FrontFacingNode`}constructor(){super(`bool`),this.isFrontFacingNode=!0}generate(e){let{renderer:t,material:n}=e;return t.coordinateSystem===2e3&&n.side===1?`false`:e.getFrontFacing()}})).mul(2).sub(1),rs=zo(`normal`,`vec3`),is=B(e=>e.geometry.hasAttribute(`normal`)===!1?(console.warn(`TSL.NormalNode: Vertex attribute "normal" not found on geometry.`),U(0,1,0)):rs,`vec3`).once()().toVar(`normalLocal`),as=es.dFdx().cross(es.dFdy()).normalize().toVar(`normalFlat`),os=B(e=>{let t;return t=e.material.flatShading===!0?as:fo(cs(is),`v_normalView`).normalize(),t},`vec3`).once()().toVar(`normalView`),ss=B(e=>e.context.setupNormal(),`vec3`).once()().mul(ns).toVar(`transformedNormalView`),cs=B(([e],t)=>{let n=t.renderer.nodes.modelNormalViewMatrix;if(n!==null)return n.transformDirection(e);let r=Zo.mul(e);return qo.transformDirection(r)}),ls=Mi(0).onReference(({material:e})=>e).onRenderUpdate(({material:e})=>e.refractionRatio),us=ts.negate().reflect(ss),ds=ts.negate().refract(ss,ls),fs=us.transformDirection(qo).toVar(`reflectVector`),ps=ds.transformDirection(qo).toVar(`reflectVector`),ms=z(class extends Uo{static get type(){return`CubeTextureNode`}constructor(e,t=null,n=null,r=null){super(e,t,n,r),this.isCubeTextureNode=!0}getInputType(){return`cubeTexture`}getDefaultUV(){let e=this.value;return e.mapping===301?fs:e.mapping===302?ps:(console.error(`THREE.CubeTextureNode: Mapping "%s" not supported.`,e.mapping),U(0,0,0))}setUpdateMatrix(){}setupUV(e,t){let n=this.value;return e.renderer.coordinateSystem===2001||!n.isRenderTargetTexture?U(t.x.negate(),t.yz):t}generateUV(e,t){return t.build(e,`vec3`)}});var hs=class extends ji{static get type(){return`BufferNode`}constructor(e,t,n=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferCount=n}getElementType(e){return this.getNodeType(e)}getInputType(){return`buffer`}};let gs=(e,t,n)=>R(new hs(e,t,n));var _s=class extends Sr{static get type(){return`UniformArrayElementNode`}constructor(e,t){super(e,t),this.isArrayBufferElementNode=!0}generate(e){let t=super.generate(e),n=this.getNodeType();return e.format(t,`vec4`,n)}},vs=class extends hs{static get type(){return`UniformArrayNode`}constructor(e,t=null){super(null,`vec4`),this.array=e,this.elementType=t,this._elementType=null,this._elementLength=0,this.updateType=P.RENDER,this.isArrayBufferNode=!0}getElementType(){return this.elementType||this._elementType}getElementLength(){return this._elementLength}update(){let{array:e,value:t}=this,n=this.getElementLength(),r=this.getElementType();if(n===1)for(let n=0;nR(new vs(e,t));var bs=class extends Sr{static get type(){return`ReferenceElementNode`}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){let t=super.generate(e),n=this.referenceNode.getNodeType(),r=this.getNodeType();return e.format(t,n,r)}},xs=class extends F{static get type(){return`ReferenceNode`}constructor(e,t,n=null,r=null){super(),this.property=e,this.uniformType=t,this.object=n,this.count=r,this.properties=e.split(`.`),this.reference=n,this.node=null,this.group=null,this.name=null,this.updateType=P.OBJECT}element(e){return R(new bs(this,R(e)))}setGroup(e){return this.group=e,this}label(e){return this.name=e,this}setNodeType(e){let t=null;t=this.count===null?Array.isArray(this.getValueFromReference())?ys(null,e):e===`texture`?Wo(null):e===`cubeTexture`?ms(null):Mi(null,e):gs(null,e,this.count),this.group!==null&&t.setGroup(this.group),this.name!==null&&t.label(this.name),this.node=t.getSelf()}getNodeType(e){return this.node===null&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){let{properties:t}=this,n=e[t[0]];for(let e=1;eR(new xs(e,t,n));var Cs=class extends xs{static get type(){return`MaterialReferenceNode`}constructor(e,t,n=null){super(e,t,n),this.material=n,this.isMaterialReferenceNode=!0}updateReference(e){return this.reference=this.material===null?e.material:this.material,this.reference}};let ws=(e,t,n)=>R(new Cs(e,t,n)),Ts=B(e=>(e.geometry.hasAttribute(`tangent`)===!1&&e.geometry.computeTangents(),zo(`tangent`,`vec4`)))(),Es=Ts.xyz.toVar(`tangentLocal`),Ds=Qo.mul(bi(Es,0)).xyz.varying(`v_tangentView`).normalize().toVar(`tangentView`),Os=Ti(Ds,fo((e=>e.mul(Ts.w).xyz)(os.cross(Ds)),`v_bitangentView`).normalize().toVar(`bitangentView`),os),ks=B(e=>{let{eye_pos:t,surf_norm:n,mapN:r,uv:i}=e,a=t.dFdx(),o=t.dFdy(),s=i.dFdx(),c=i.dFdy(),l=n,u=o.cross(l),d=l.cross(a),f=u.mul(s.x).add(d.mul(c.x)),p=u.mul(s.y).add(d.mul(c.y)),m=f.dot(f).max(p.dot(p)),h=ns.mul(m.inverseSqrt());return Li(f.mul(r.x,h),p.mul(r.y,h),l.mul(r.z)).normalize()}),As=z(class extends wr{static get type(){return`NormalMapNode`}constructor(e,t=null){super(`vec3`),this.node=e,this.scaleNode=t,this.normalMapType=0}setup(e){let{normalMapType:t,scaleNode:n}=this,r=this.node.mul(2).sub(1);n!==null&&(r=U(r.xy.mul(n),r.z));let i=null;return t===1?i=cs(r):t===0&&(i=e.hasGeometryAttribute(`tangent`)===!0?Os.mul(r).normalize():ks({eye_pos:es,surf_norm:os,mapN:r,uv:Bo()})),i}}),js=B(({textureNode:e,bumpScale:t})=>{let n=t=>e.cache().context({getUV:e=>t(e.uvNode||Bo()),forceUVContext:!0}),r=V(n(e=>e));return H(V(n(e=>e.add(e.dFdx()))).sub(r),V(n(e=>e.add(e.dFdy()))).sub(r)).mul(t)}),Ms=B(e=>{let{surf_pos:t,surf_norm:n,dHdxy:r}=e,i=t.dFdx().normalize(),a=t.dFdy().normalize(),o=n,s=a.cross(o),c=o.cross(i),l=i.dot(s).mul(ns),u=l.sign().mul(r.x.mul(s).add(r.y.mul(c)));return l.abs().mul(n).sub(u).normalize()}),Ns=z(class extends wr{static get type(){return`BumpMapNode`}constructor(e,t=null){super(`vec3`),this.textureNode=e,this.scaleNode=t}setup(){let e=this.scaleNode===null?1:this.scaleNode;return Ms({surf_pos:es,surf_norm:os,dHdxy:js({textureNode:this.textureNode,bumpScale:e})})}}),Ps=new Map;var K=class e extends F{static get type(){return`MaterialNode`}constructor(e){super(),this.scope=e}getCache(e,t){let n=Ps.get(e);return n===void 0&&(n=ws(e,t),Ps.set(e,n)),n}getFloat(e){return this.getCache(e,`float`)}getColor(e){return this.getCache(e,`color`)}getTexture(e){return this.getCache(e===`map`?`map`:e+`Map`,`texture`)}setup(t){let n=t.context.material,r=this.scope,i=null;if(r===e.COLOR){let e=n.color===void 0?U():this.getColor(r);i=n.map&&n.map.isTexture===!0?e.mul(this.getTexture(`map`)):e}else if(r===e.OPACITY){let e=this.getFloat(r);i=n.alphaMap&&n.alphaMap.isTexture===!0?e.mul(this.getTexture(`alpha`)):e}else if(r===e.SPECULAR_STRENGTH)i=n.specularMap&&n.specularMap.isTexture===!0?this.getTexture(`specular`).r:V(1);else if(r===e.SPECULAR_INTENSITY){let e=this.getFloat(r);i=n.specularMap?e.mul(this.getTexture(r).a):e}else if(r===e.SPECULAR_COLOR){let e=this.getColor(r);i=n.specularColorMap&&n.specularColorMap.isTexture===!0?e.mul(this.getTexture(r).rgb):e}else if(r===e.ROUGHNESS){let e=this.getFloat(r);i=n.roughnessMap&&n.roughnessMap.isTexture===!0?e.mul(this.getTexture(r).g):e}else if(r===e.METALNESS){let e=this.getFloat(r);i=n.metalnessMap&&n.metalnessMap.isTexture===!0?e.mul(this.getTexture(r).b):e}else if(r===e.EMISSIVE){let e=this.getFloat(`emissiveIntensity`),t=this.getColor(r).mul(e);i=n.emissiveMap&&n.emissiveMap.isTexture===!0?t.mul(this.getTexture(r)):t}else if(r===e.NORMAL)n.normalMap?(i=As(this.getTexture(`normal`),this.getCache(`normalScale`,`vec2`)),i.normalMapType=n.normalMapType):i=n.bumpMap?Ns(this.getTexture(`bump`).r,this.getFloat(`bumpScale`)):os;else if(r===e.CLEARCOAT){let e=this.getFloat(r);i=n.clearcoatMap&&n.clearcoatMap.isTexture===!0?e.mul(this.getTexture(r).r):e}else if(r===e.CLEARCOAT_ROUGHNESS){let e=this.getFloat(r);i=n.clearcoatRoughnessMap&&n.clearcoatRoughnessMap.isTexture===!0?e.mul(this.getTexture(r).r):e}else if(r===e.CLEARCOAT_NORMAL)i=n.clearcoatNormalMap?As(this.getTexture(r),this.getCache(r+`Scale`,`vec2`)):os;else if(r===e.SHEEN){let e=this.getColor(`sheenColor`).mul(this.getFloat(`sheen`));i=n.sheenColorMap&&n.sheenColorMap.isTexture===!0?e.mul(this.getTexture(`sheenColor`).rgb):e}else if(r===e.SHEEN_ROUGHNESS){let e=this.getFloat(r);i=n.sheenRoughnessMap&&n.sheenRoughnessMap.isTexture===!0?e.mul(this.getTexture(r).a):e,i=i.clamp(.07,1)}else if(r===e.ANISOTROPY)if(n.anisotropyMap&&n.anisotropyMap.isTexture===!0){let e=this.getTexture(r);i=wi(Fs.x,Fs.y,Fs.y.negate(),Fs.x).mul(e.rg.mul(2).sub(H(1)).normalize().mul(e.b))}else i=Fs;else if(r===e.IRIDESCENCE_THICKNESS){let e=Ss(`1`,`float`,n.iridescenceThicknessRange);if(n.iridescenceThicknessMap){let t=Ss(`0`,`float`,n.iridescenceThicknessRange);i=e.sub(t).mul(this.getTexture(r).g).add(t)}else i=e}else if(r===e.TRANSMISSION){let e=this.getFloat(r);i=n.transmissionMap?e.mul(this.getTexture(r).r):e}else if(r===e.THICKNESS){let e=this.getFloat(r);i=n.thicknessMap?e.mul(this.getTexture(r).g):e}else if(r===e.IOR)i=this.getFloat(r);else if(r===e.LIGHT_MAP)i=this.getTexture(r).rgb.mul(this.getFloat(`lightMapIntensity`));else if(r===e.AO_MAP)i=this.getTexture(r).r.sub(1).mul(this.getFloat(`aoMapIntensity`)).add(1);else{let e=this.getNodeType(t);i=this.getCache(r,e)}return i}};K.ALPHA_TEST=`alphaTest`,K.COLOR=`color`,K.OPACITY=`opacity`,K.SHININESS=`shininess`,K.SPECULAR=`specular`,K.SPECULAR_STRENGTH=`specularStrength`,K.SPECULAR_INTENSITY=`specularIntensity`,K.SPECULAR_COLOR=`specularColor`,K.REFLECTIVITY=`reflectivity`,K.ROUGHNESS=`roughness`,K.METALNESS=`metalness`,K.NORMAL=`normal`,K.CLEARCOAT=`clearcoat`,K.CLEARCOAT_ROUGHNESS=`clearcoatRoughness`,K.CLEARCOAT_NORMAL=`clearcoatNormal`,K.EMISSIVE=`emissive`,K.ROTATION=`rotation`,K.SHEEN=`sheen`,K.SHEEN_ROUGHNESS=`sheenRoughness`,K.ANISOTROPY=`anisotropy`,K.IRIDESCENCE=`iridescence`,K.IRIDESCENCE_IOR=`iridescenceIOR`,K.IRIDESCENCE_THICKNESS=`iridescenceThickness`,K.IOR=`ior`,K.TRANSMISSION=`transmission`,K.THICKNESS=`thickness`,K.ATTENUATION_DISTANCE=`attenuationDistance`,K.ATTENUATION_COLOR=`attenuationColor`,K.LINE_SCALE=`scale`,K.LINE_DASH_SIZE=`dashSize`,K.LINE_GAP_SIZE=`gapSize`,K.LINE_WIDTH=`linewidth`,K.LINE_DASH_OFFSET=`dashOffset`,K.POINT_WIDTH=`pointWidth`,K.DISPERSION=`dispersion`,K.LIGHT_MAP=`light`,K.AO_MAP=`ao`,K.ALPHA_TEST,K.COLOR,K.SHININESS,K.EMISSIVE,K.OPACITY,K.SPECULAR,K.SPECULAR_INTENSITY,K.SPECULAR_COLOR,K.SPECULAR_STRENGTH,K.REFLECTIVITY,K.ROUGHNESS,K.METALNESS,K.CLEARCOAT,K.CLEARCOAT_ROUGHNESS,K.ROTATION,K.SHEEN,K.SHEEN_ROUGHNESS,K.ANISOTROPY,K.IRIDESCENCE,K.IRIDESCENCE_IOR,K.IRIDESCENCE_THICKNESS,K.TRANSMISSION,K.THICKNESS,K.IOR,K.ATTENUATION_DISTANCE,K.ATTENUATION_COLOR,K.LINE_SCALE,K.LINE_DASH_SIZE,K.LINE_GAP_SIZE,K.LINE_WIDTH,K.LINE_DASH_OFFSET,K.POINT_WIDTH,K.DISPERSION,K.LIGHT_MAP,K.AO_MAP;let Fs=Mi(new E).onReference(function(e){return e.material}).onRenderUpdate(function({material:e}){this.value.set(e.anisotropy*Math.cos(e.anisotropyRotation),e.anisotropy*Math.sin(e.anisotropyRotation))});var Is=class e extends F{static get type(){return`IndexNode`}constructor(e){super(`uint`),this.scope=e,this.isInstanceIndexNode=!0}generate(t){let n=this.getNodeType(t),r=this.scope,i;if(r===e.VERTEX)i=t.getVertexIndex();else if(r===e.INSTANCE)i=t.getInstanceIndex();else if(r===e.DRAW)i=t.getDrawIndex();else if(r===e.INVOCATION_LOCAL)i=t.getInvocationLocalIndex();else if(r===e.INVOCATION_SUBGROUP)i=t.getInvocationSubgroupIndex();else if(r===e.SUBGROUP)i=t.getSubgroupIndex();else throw Error(`THREE.IndexNode: Unknown scope: `+r);let a;return a=t.shaderStage===`vertex`||t.shaderStage===`compute`?i:fo(this).build(t,n),a}};Is.VERTEX=`vertex`,Is.INSTANCE=`instance`,Is.SUBGROUP=`subgroup`,Is.INVOCATION_LOCAL=`invocationLocal`,Is.INVOCATION_SUBGROUP=`invocationSubgroup`,Is.DRAW=`draw`,Is.VERTEX,Is.INSTANCE,Is.SUBGROUP,Is.INVOCATION_SUBGROUP,Is.INVOCATION_LOCAL,Is.DRAW;var Ls=class extends F{static get type(){return`LoopNode`}constructor(e=[]){super(),this.params=e}getVarName(e){return String.fromCharCode(105+e)}getProperties(e){let t=e.getNodeProperties(this);if(t.stackNode!==void 0)return t;let n={};for(let e=0,t=this.params.length-1;e=`):a!==void 0&&i===void 0&&(i=`0`,c=`<`),c===void 0&&(c=Number(i)>Number(a)?`>=`:`<`));let u={start:i,end:a},d=u.start,f=u.end,p=``,m=``,h=``;l||=s===`int`||s===`uint`?c.includes(`<`)?`++`:`--`:c.includes(`<`)?`+= 1.`:`-= 1.`,p+=e.getVar(s,o)+` = `+d,m+=o+` `+c+` `+f,h+=o+` `+l;let g=`for ( ${p}; ${m}; ${h} )`;e.addFlowCode((t===0?` -`:``)+e.tab+g+` { - -`).addFlowTab()}let i=r.build(e,`void`),a=t.returnsNode?t.returnsNode.build(e):``;e.removeFlowTab().addFlowCode(` -`+e.tab+i);for(let t=0,n=this.params.length-1;tR(new Ls(oi(e,`int`))).append(),zs,Bs;var Vs=class e extends F{static get type(){return`ScreenNode`}constructor(e){super(),this.scope=e,this.isViewportNode=!0}getNodeType(){return this.scope===e.VIEWPORT?`vec4`:`vec2`}getUpdateType(){let t=P.NONE;return(this.scope===e.SIZE||this.scope===e.VIEWPORT)&&(t=P.RENDER),this.updateType=t,t}update({renderer:t}){let n=t.getRenderTarget();this.scope===e.VIEWPORT?n===null?(t.getViewport(Bs),Bs.multiplyScalar(t.getPixelRatio())):Bs.copy(n.viewport):n===null?t.getDrawingBufferSize(zs):(zs.width=n.width,zs.height=n.height)}setup(){let t=this.scope,n=null;return n=t===e.SIZE?Mi(zs||=new E):t===e.VIEWPORT?Mi(Bs||=new Ve):H(Ws.div(Us)),n}generate(t){if(this.scope===e.COORDINATE){let e=t.getFragCoord();if(t.isFlipY()){let n=t.getNodeProperties(Us).outputNode.build(t);e=`${t.getType(`vec2`)}( ${e}.x, ${n}.y - ${e}.y )`}return e}return super.generate(t)}};Vs.COORDINATE=`coordinate`,Vs.VIEWPORT=`viewport`,Vs.SIZE=`size`,Vs.UV=`uv`;let Hs=si(Vs,Vs.UV),Us=si(Vs,Vs.SIZE),Ws=si(Vs,Vs.COORDINATE),Gs=si(Vs,Vs.VIEWPORT);Gs.zw,Gs.xy;let Ks=new E;var qs=class extends Uo{static get type(){return`ViewportTextureNode`}constructor(e=Hs,t=null,n=null){n===null&&(n=new zn,n.minFilter=s),super(n,e,t),this.generateMipmaps=!1,this.isOutputTextureNode=!0,this.updateBeforeType=P.FRAME}updateBefore(e){let t=e.renderer;t.getDrawingBufferSize(Ks);let n=this.value;(n.image.width!==Ks.width||n.image.height!==Ks.height)&&(n.image.width=Ks.width,n.image.height=Ks.height,n.needsUpdate=!0);let r=n.generateMipmaps;n.generateMipmaps=this.generateMipmaps,t.copyFramebufferToTexture(n),n.generateMipmaps=r}clone(){let e=new this.constructor(this.uvNode,this.levelNode,this.value);return e.generateMipmaps=this.generateMipmaps,e}};let Js=null,Ys=z(class extends qs{static get type(){return`ViewportDepthTextureNode`}constructor(e=Hs,t=null){Js===null&&(Js=new Fn),super(e,t,Js)}});var Xs=class e extends F{static get type(){return`ViewportDepthNode`}constructor(e,t=null){super(`float`),this.scope=e,this.valueNode=t,this.isViewportDepthNode=!0}generate(t){let{scope:n}=this;return n===e.DEPTH_BASE?t.getFragDepth():super.generate(t)}setup({camera:t}){let{scope:n}=this,r=this.valueNode,i=null;return n===e.DEPTH_BASE?r!==null&&(i=ec().assign(r)):n===e.DEPTH?i=t.isPerspectiveCamera?Qs(es.z,Go,Ko):Zs(es.z,Go,Ko):n===e.LINEAR_DEPTH&&(i=r===null?Zs(es.z,Go,Ko):t.isPerspectiveCamera?Zs($s(r,Go,Ko),Go,Ko):r),i}};Xs.DEPTH_BASE=`depthBase`,Xs.DEPTH=`depth`,Xs.LINEAR_DEPTH=`linearDepth`;let Zs=(e,t,n)=>e.add(t).div(t.sub(n)),Qs=(e,t,n)=>t.add(e).mul(n).div(n.sub(t).mul(e)),$s=(e,t,n)=>t.mul(n).div(n.sub(t).mul(e).sub(n)),ec=z(Xs,Xs.DEPTH_BASE),tc=si(Xs,Xs.DEPTH);Ys(),tc.assign=e=>ec(e);var nc=class e extends F{static get type(){return`ClippingNode`}constructor(t=e.DEFAULT){super(),this.scope=t}setup(t){super.setup(t);let n=t.clippingContext,{localClipIntersection:r,localClippingCount:i,globalClippingCount:a}=n,o=a+i,s=r?o-i:o;return this.scope===e.ALPHA_TO_COVERAGE?this.setupAlphaToCoverage(n.planes,o,s):this.setupDefault(n.planes,o,s)}setupAlphaToCoverage(e,t,n){return B(()=>{let r=ys(e),i=Pi(`float`,`distanceToPlane`),a=Pi(`float`,`distanceToGradient`),o=Pi(`float`,`clipOpacity`);o.assign(1);let s;if(Rs(n,({i:e})=>{s=r.element(e),i.assign(es.dot(s.xyz).negate().add(s.w)),a.assign(i.fwidth().div(2)),o.mulAssign(ao(a.negate(),a,i)),o.equal(0).discard()}),n{s=r.element(t),i.assign(es.dot(s.xyz).negate().add(s.w)),a.assign(i.fwidth().div(2)),e.mulAssign(ao(a.negate(),a,i).oneMinus())}),o.mulAssign(e.oneMinus())}Fi.a.mulAssign(o),Fi.a.equal(0).discard()})()}setupDefault(e,t,n){return B(()=>{let r=ys(e),i;if(Rs(n,({i:e})=>{i=r.element(e),es.dot(i.xyz).greaterThan(i.w).discard()}),n{i=r.element(t),e.assign(es.dot(i.xyz).greaterThan(i.w).and(e))}),e.discard()}})()}};nc.ALPHA_TO_COVERAGE=`alphaToCoverage`,nc.DEFAULT=`default`,1/Math.PI,U(.04),V(1);let rc=B(([e,t])=>{let n=e.toVar();n.assign(zi(2,n).sub(1));let r=U(n,1).toVar();return ci(t.equal(0),()=>{r.assign(r.zyx)}).ElseIf(t.equal(1),()=>{r.assign(r.xzy),r.xz.mulAssign(-1)}).ElseIf(t.equal(2),()=>{r.x.mulAssign(-1)}).ElseIf(t.equal(3),()=>{r.assign(r.zyx),r.xz.mulAssign(-1)}).ElseIf(t.equal(4),()=>{r.assign(r.xzy),r.xy.mulAssign(-1)}).ElseIf(t.equal(5),()=>{r.z.mulAssign(-1)}),r}).setLayout({name:`getDirection`,type:`vec3`,inputs:[{name:`uv`,type:`vec2`},{name:`face`,type:`float`}]});B(({texture:e,uv:t})=>{let n=1e-4,r=U().toVar();return ci(t.x.lessThan(n),()=>{r.assign(U(1,0,0))}).ElseIf(t.y.lessThan(n),()=>{r.assign(U(0,1,0))}).ElseIf(t.z.lessThan(n),()=>{r.assign(U(0,0,1))}).ElseIf(t.x.greaterThan(1-n),()=>{r.assign(U(-1,0,0))}).ElseIf(t.y.greaterThan(1-n),()=>{r.assign(U(0,-1,0))}).ElseIf(t.z.greaterThan(1-n),()=>{r.assign(U(0,0,-1))}).Else(()=>{let n=.01,i=e.uv(t.add(U(-n,0,0))).r.sub(e.uv(t.add(U(n,0,0))).r),a=e.uv(t.add(U(0,-n,0))).r.sub(e.uv(t.add(U(0,n,0))).r),o=e.uv(t.add(U(0,0,-n))).r.sub(e.uv(t.add(U(0,0,n))).r);r.assign(U(i,a,o))}),r.normalize()});let ic=(1+Math.sqrt(5))/2,ac=1/ic;-ic,-ac,-ac;let oc=rc(Bo(),zo(`faceIndex`)).normalize();U(oc.x,oc.y.negate(),oc.z);var sc=class{constructor(e,t,n=null,r=``,i=!1){this.type=e,this.name=t,this.count=n,this.qualifier=r,this.isConst=i}};sc.isNodeFunctionInput=!0;var cc=class e extends ji{static get type(){return`TimerNode`}constructor(t=e.LOCAL,n=1,r=0){super(r),this.scope=t,this.scale=n,this.updateType=P.FRAME}update(t){let n=this.scope,r=this.scale;n===e.LOCAL?this.value+=t.deltaTime*r:n===e.DELTA?this.value=t.deltaTime*r:n===e.FRAME?this.value=t.frameId:this.value=t.time*r}serialize(e){super.serialize(e),e.scope=this.scope,e.scale=this.scale}deserialize(e){super.deserialize(e),this.scope=e.scope,this.scale=e.scale}};cc.LOCAL=`local`,cc.GLOBAL=`global`,cc.DELTA=`delta`,cc.FRAME=`frame`;let lc=(e,t=0)=>R(new cc(cc.LOCAL,e,t));var uc=class e extends F{static get type(){return`OscNode`}constructor(t=e.SINE,n=lc()){super(),this.method=t,this.timeNode=n}getNodeType(e){return this.timeNode.getNodeType(e)}setup(){let t=this.method,n=R(this.timeNode),r=null;return t===e.SINE?r=n.add(.75).mul(Math.PI*2).sin().mul(.5).add(.5):t===e.SQUARE?r=n.fract().round():t===e.TRIANGLE?r=n.add(.5).fract().mul(2).sub(1).abs():t===e.SAWTOOTH&&(r=n.fract()),r}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}};uc.SINE=`sine`,uc.SQUARE=`square`,uc.TRIANGLE=`triangle`,uc.SAWTOOTH=`sawtooth`,uc.SINE,uc.SQUARE,uc.TRIANGLE,uc.SAWTOOTH,new jn,new O,new O,new O,new yt,new O(0,0,-1),new Ve,new O,new O,new Ve,new E,new He,Hs.flipX();var dc=class e extends F{static get type(){return`SceneNode`}constructor(t=e.BACKGROUND_BLURRINESS,n=null){super(),this.scope=t,this.scene=n}setup(t){let n=this.scope,r=this.scene===null?t.scene:this.scene,i;return n===e.BACKGROUND_BLURRINESS?i=Ss(`backgroundBlurriness`,`float`,r):n===e.BACKGROUND_INTENSITY?i=Ss(`backgroundIntensity`,`float`,r):console.error(`THREE.SceneNode: Unknown scope:`,n),i}};dc.BACKGROUND_BLURRINESS=`backgroundBlurriness`,dc.BACKGROUND_INTENSITY=`backgroundIntensity`,dc.BACKGROUND_BLURRINESS,dc.BACKGROUND_INTENSITY;let fc=new E;var pc=class extends Uo{static get type(){return`PassTextureNode`}constructor(e,t){super(t),this.passNode=e,this.setUpdateMatrix(!1)}setup(e){return e.object.isQuadMesh&&this.passNode.build(e),super.setup(e)}clone(){return new this.constructor(this.passNode,this.value)}},mc=class extends pc{static get type(){return`PassMultipleTextureNode`}constructor(e,t,n=!1){super(e,null),this.textureName=t,this.previousTexture=n}updateTexture(){this.value=this.previousTexture?this.passNode.getPreviousTexture(this.textureName):this.passNode.getTexture(this.textureName)}setup(e){return this.updateTexture(),super.setup(e)}clone(){return new this.constructor(this.passNode,this.textureName,this.previousTexture)}},hc=class e extends wr{static get type(){return`PassNode`}constructor(e,t,n,r={}){super(`vec4`),this.scope=e,this.scene=t,this.camera=n,this.options=r,this._pixelRatio=1,this._width=1,this._height=1;let i=new Fn;i.isRenderTargetTexture=!0,i.name=`depth`;let a=new He(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:1016,...r});a.texture.name=`output`,a.depthTexture=i,this.renderTarget=a,this.updateBeforeType=P.FRAME,this._textures={output:a.texture,depth:i},this._textureNodes={},this._linearDepthNodes={},this._viewZNodes={},this._previousTextures={},this._previousTextureNodes={},this._cameraNear=Mi(0),this._cameraFar=Mi(0),this._mrt=null,this.isPassNode=!0}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}isGlobal(){return!0}getTexture(e){let t=this._textures[e];return t===void 0&&(t=this.renderTarget.texture.clone(),t.isRenderTargetTexture=!0,t.name=e,this._textures[e]=t,this.renderTarget.textures.push(t)),t}getPreviousTexture(e){let t=this._previousTextures[e];return t===void 0&&(t=this.getTexture(e).clone(),t.isRenderTargetTexture=!0,this._previousTextures[e]=t),t}toggleTexture(e){let t=this._previousTextures[e];if(t!==void 0){let n=this._textures[e],r=this.renderTarget.textures.indexOf(n);this.renderTarget.textures[r]=t,this._textures[e]=t,this._previousTextures[e]=n,this._textureNodes[e].updateTexture(),this._previousTextureNodes[e].updateTexture()}}getTextureNode(e=`output`){let t=this._textureNodes[e];return t===void 0&&(this._textureNodes[e]=t=R(new mc(this,e)),this._textureNodes[e].updateTexture()),t}getPreviousTextureNode(e=`output`){let t=this._previousTextureNodes[e];return t===void 0&&(this._textureNodes[e]===void 0&&this.getTextureNode(e),this._previousTextureNodes[e]=t=R(new mc(this,e,!0)),this._previousTextureNodes[e].updateTexture()),t}getViewZNode(e=`depth`){let t=this._viewZNodes[e];if(t===void 0){let n=this._cameraNear,r=this._cameraFar;this._viewZNodes[e]=t=$s(this.getTextureNode(e),n,r)}return t}getLinearDepthNode(e=`depth`){let t=this._linearDepthNodes[e];if(t===void 0){let n=this._cameraNear,r=this._cameraFar,i=this.getViewZNode(e);this._linearDepthNodes[e]=t=Zs(i,n,r)}return t}setup({renderer:t}){return this.renderTarget.samples=this.options.samples===void 0?t.samples:this.options.samples,t.backend.isWebGLBackend===!0&&(this.renderTarget.samples=0),this.renderTarget.depthTexture.isMultisampleRenderTargetTexture=this.renderTarget.samples>1,this.scope===e.COLOR?this.getTextureNode():this.getLinearDepthNode()}updateBefore(e){let{renderer:t}=e,{scene:n,camera:r}=this;this._pixelRatio=t.getPixelRatio();let i=t.getSize(fc);this.setSize(i.width,i.height);let a=t.getRenderTarget(),o=t.getMRT();this._cameraNear.value=r.near,this._cameraFar.value=r.far;for(let e in this._previousTextures)this.toggleTexture(e);t.setRenderTarget(this.renderTarget),t.setMRT(this._mrt),t.render(n,r),t.setRenderTarget(a),t.setMRT(o)}setSize(e,t){this._width=e,this._height=t;let n=this._width*this._pixelRatio,r=this._height*this._pixelRatio;this.renderTarget.setSize(n,r)}setPixelRatio(e){this._pixelRatio=e,this.setSize(this._width,this._height)}dispose(){this.renderTarget.dispose()}};hc.COLOR=`color`,hc.DEPTH=`depth`,new class extends Map{get(e,t=null,...n){if(this.has(e))return super.get(e);if(t!==null){let r=t(...n);return this.set(e,r),r}}},B(({depthTexture:e,shadowCoord:t})=>Wo(e,t.xy).compare(t.z)),B(({depthTexture:e,shadowCoord:t,shadow:n})=>{let r=(t,n)=>Wo(e,t).compare(n),i=Ss(`mapSize`,`vec2`,n).setGroup(ki),a=Ss(`radius`,`float`,n).setGroup(ki),o=H(1).div(i),s=o.x.negate().mul(a),c=o.y.negate().mul(a),l=o.x.mul(a),u=o.y.mul(a),d=s.div(2),f=c.div(2),p=l.div(2),m=u.div(2);return Li(r(t.xy.add(H(s,c)),t.z),r(t.xy.add(H(0,c)),t.z),r(t.xy.add(H(l,c)),t.z),r(t.xy.add(H(d,f)),t.z),r(t.xy.add(H(0,f)),t.z),r(t.xy.add(H(p,f)),t.z),r(t.xy.add(H(s,0)),t.z),r(t.xy.add(H(d,0)),t.z),r(t.xy,t.z),r(t.xy.add(H(p,0)),t.z),r(t.xy.add(H(l,0)),t.z),r(t.xy.add(H(d,m)),t.z),r(t.xy.add(H(0,m)),t.z),r(t.xy.add(H(p,m)),t.z),r(t.xy.add(H(s,u)),t.z),r(t.xy.add(H(0,u)),t.z),r(t.xy.add(H(l,u)),t.z)).mul(1/17)}),B(({depthTexture:e,shadowCoord:t,shadow:n})=>{let r=(t,n)=>Wo(e,t).compare(n),i=Ss(`mapSize`,`vec2`,n).setGroup(ki),a=H(1).div(i),o=a.x,s=a.y,c=t.xy,l=ya(c.mul(i).add(.5));return c.subAssign(l.mul(a)),Li(r(c,t.z),r(c.add(H(o,0)),t.z),r(c.add(H(0,s)),t.z),r(c.add(a),t.z),to(r(c.add(H(o.negate(),0)),t.z),r(c.add(H(o.mul(2),0)),t.z),l.x),to(r(c.add(H(o.negate(),s)),t.z),r(c.add(H(o.mul(2),s)),t.z),l.x),to(r(c.add(H(0,s.negate())),t.z),r(c.add(H(0,s.mul(2))),t.z),l.y),to(r(c.add(H(o,s.negate())),t.z),r(c.add(H(o,s.mul(2))),t.z),l.y),to(to(r(c.add(H(o.negate(),s.negate())),t.z),r(c.add(H(o.mul(2),s.negate())),t.z),l.x),to(r(c.add(H(o.negate(),s.mul(2))),t.z),r(c.add(H(o.mul(2),s.mul(2))),t.z),l.x),l.y)).mul(1/9)}),B(({depthTexture:e,shadowCoord:t})=>{let n=V(1).toVar(),r=Wo(e).uv(t.xy).rg,i=Ha(t.z,r.x);return ci(i.notEqual(V(1)),()=>{let e=t.z.sub(r.x),a=Ba(0,r.y.mul(r.y)),o=a.div(a.add(e.mul(e)));o=no(Ri(o,.3).div(.6499999999999999)),n.assign(no(Ba(i,o)))}),n}),B(({samples:e,radius:t,size:n,shadowPass:r})=>{let i=V(0).toVar(),a=V(0).toVar(),o=e.lessThanEqual(V(1)).select(V(0),V(2).div(e.sub(1))),s=e.lessThanEqual(V(1)).select(V(0),V(-1));return Rs({start:di(0),end:di(e),type:`int`,condition:`<`},({i:e})=>{let c=s.add(V(e).mul(o)),l=r.uv(Li(Ws.xy,H(0,c).mul(t)).div(n)).x;i.addAssign(l),a.addAssign(l.mul(l))}),i.divAssign(e),a.divAssign(e),H(i,ma(a.sub(i.mul(i))))}),B(({samples:e,radius:t,size:n,shadowPass:r})=>{let i=V(0).toVar(),a=V(0).toVar(),o=e.lessThanEqual(V(1)).select(V(0),V(2).div(e.sub(1))),s=e.lessThanEqual(V(1)).select(V(0),V(-1));return Rs({start:di(0),end:di(e),type:`int`,condition:`<`},({i:e})=>{let c=s.add(V(e).mul(o)),l=r.uv(Li(Ws.xy,H(c,0).mul(t)).div(n));i.addAssign(l.x),a.addAssign(Li(l.y.mul(l.y),l.x.mul(l.x)))}),i.divAssign(e),a.divAssign(e),H(i,ma(a.sub(i.mul(i))))}),U(1.6605,-.1246,-.0182),U(-.5876,1.1329,-.1006),U(-.0728,-.0083,1.1187),U(.6274,.0691,.0164),U(.3293,.9195,.088),U(.0433,.0113,.8956),z(class extends F{constructor(e){super(),this.scope=e}generate(e){let{scope:t}=this,{renderer:n}=e;n.backend.isWebGLBackend===!0?e.addFlowCode(`\t// ${t}Barrier \n`):e.addLineFlowCode(`${t}Barrier()`,this)}});var gc=class extends wr{static get type(){return`AtomicFunctionNode`}constructor(e,t,n,r=null){super(`uint`),this.method=e,this.pointerNode=t,this.valueNode=n,this.storeNode=r}getInputType(e){return this.pointerNode.getNodeType(e)}getNodeType(e){return this.getInputType(e)}generate(e){let t=this.method,n=this.getNodeType(e),r=this.getInputType(e),i=this.pointerNode,a=this.valueNode,o=[];o.push(`&${i.build(e,r)}`),o.push(a.build(e,r));let s=`${e.getMethod(t,n)}( ${o.join(`, `)} )`;if(this.storeNode!==null){let t=this.storeNode.build(e,r);e.addLineFlowCode(`${t} = ${s}`,this)}else e.addLineFlowCode(s,this)}};gc.ATOMIC_LOAD=`atomicLoad`,gc.ATOMIC_STORE=`atomicStore`,gc.ATOMIC_ADD=`atomicAdd`,gc.ATOMIC_SUB=`atomicSub`,gc.ATOMIC_MAX=`atomicMax`,gc.ATOMIC_MIN=`atomicMin`,gc.ATOMIC_AND=`atomicAnd`,gc.ATOMIC_OR=`atomicOr`,gc.ATOMIC_XOR=`atomicXor`,z(gc);var _c=class{constructor(e,t,n=``,r=``){this.type=e,this.inputs=t,this.name=n,this.precision=r}getCode(){console.warn(`Abstract function.`)}};if(_c.isNodeFunction=!0,typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`register`,{detail:{revision:t}})),typeof window<`u`){try{e&&(window.__THREE__IMPORTS__||(window.__THREE__IMPORTS__=[]),window.__THREE__IMPORTS__.push({url:self.location.href,revision:t}))}catch{}window.__THREE__?(console.warn(`WARNING: Multiple instances of Three.js being imported. Existing: `+window.__THREE__+`, new: 169.19`),console.warn(window.__THREE__IMPORTS__)):window.__THREE__=t}let vc=1.25,yc=65535;yc<<16;let bc=2**-24,xc=Symbol(`SKIP_GENERATION`),Sc={strategy:0,maxDepth:40,maxLeafSize:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0,range:null,[xc]:!1};var Cc=class{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(e,t){let n=1/0,r=-1/0;for(let i=0,a=e.length;ir?a:r}this.min=n,this.max=r}setFromPoints(e,t){let n=1/0,r=-1/0;for(let i=0,a=t.length;ir?o:r}this.min=n,this.max=r}isSeparated(e){return this.min>e.max||e.min>this.max}};Cc.prototype.setFromBox=(function(){let e=new O;return function(t,n){let r=n.min,i=n.max,a=1/0,o=-1/0;for(let n=0;n<=1;n++)for(let s=0;s<=1;s++)for(let c=0;c<=1;c++){e.x=r.x*n+i.x*(1-n),e.y=r.y*s+i.y*(1-s),e.z=r.z*c+i.z*(1-c);let l=t.dot(e);a=Math.min(l,a),o=Math.max(l,o)}this.min=a,this.max=o}})(),(function(){let e=new Cc;return function(t,n){let r=t.points,i=t.satAxes,a=t.satBounds,o=n.points,s=n.satAxes,c=n.satBounds;for(let t=0;t<3;t++){let n=a[t],r=i[t];if(e.setFromPoints(r,o),n.isSeparated(e))return!1}for(let t=0;t<3;t++){let n=c[t],i=s[t];if(e.setFromPoints(i,r),n.isSeparated(e))return!1}}})();let wc=(function(){let e=new O,t=new O,n=new O;return function(r,i,a){let o=r.start,s=e,c=i.start,l=t;n.subVectors(o,c),e.subVectors(r.end,r.start),t.subVectors(i.end,i.start);let u=n.dot(l),d=l.dot(s),f=l.dot(l),p=n.dot(s),m=s.dot(s)*f-d*d,h,g;h=m===0?0:(u*d-p*f)/m,g=(u+h*d)/f,a.x=h,a.y=g}})(),Tc=(function(){let e=new E,t=new O,n=new O;return function(r,i,a,o){wc(r,i,e);let s=e.x,c=e.y;if(s>=0&&s<=1&&c>=0&&c<=1){r.at(s,a),i.at(c,o);return}else if(s>=0&&s<=1){c<0?i.at(0,o):i.at(1,o),r.closestPointToPoint(o,!0,a);return}else if(c>=0&&c<=1){s<0?r.at(0,a):r.at(1,a),i.closestPointToPoint(a,!0,o);return}else{let e;e=s<0?r.start:r.end;let l;l=c<0?i.start:i.end;let u=t,d=n;if(r.closestPointToPoint(l,!0,t),i.closestPointToPoint(e,!0,n),u.distanceToSquared(l)<=d.distanceToSquared(e)){a.copy(u),o.copy(l);return}else{a.copy(e),o.copy(d);return}}}})(),Ec=(function(){let e=new O,t=new O,n=new jn,r=new ur;return function(i,a){let{radius:o,center:s}=i,{a:c,b:l,c:u}=a;if(r.start=c,r.end=l,r.closestPointToPoint(s,!0,e).distanceTo(s)<=o||(r.start=c,r.end=u,r.closestPointToPoint(s,!0,e).distanceTo(s)<=o)||(r.start=l,r.end=u,r.closestPointToPoint(s,!0,e).distanceTo(s)<=o))return!0;let d=a.getPlane(n);if(Math.abs(d.distanceToPoint(s))<=o){let e=d.projectPoint(s,t);if(a.containsPoint(e))return!0}return!1}})(),Dc=[`x`,`y`,`z`],Oc=1e-15,kc=Oc*Oc;function Ac(e){return Math.abs(e)new O),this.satBounds=[,,,,].fill().map(()=>new Cc),this.points=[this.a,this.b,this.c],this.plane=new jn,this.isDegenerateIntoSegment=!1,this.isDegenerateIntoPoint=!1,this.degenerateSegment=new ur,this.needsUpdate=!0}intersectsSphere(e){return Ec(e,this)}update(){let e=this.a,t=this.b,n=this.c,r=this.points,i=this.satAxes,a=this.satBounds,o=i[0],s=a[0];this.getNormal(o),s.setFromPoints(o,r);let c=i[1],l=a[1];c.subVectors(e,t),l.setFromPoints(c,r);let u=i[2],d=a[2];u.subVectors(t,n),d.setFromPoints(u,r);let f=i[3],p=a[3];f.subVectors(n,e),p.setFromPoints(f,r);let m=c.length(),h=u.length(),g=f.length();this.isDegenerateIntoPoint=!1,this.isDegenerateIntoSegment=!1,m0)p(e.c,e.a,e.b,r,t,n,c,o,s,l,u);else if(a>0)p(e.b,e.a,e.c,n,t,r,s,o,c,l,u);else if(s*c>0||o!=0)p(e.a,e.b,e.c,t,n,r,o,s,c,l,u);else if(s!=0)p(e.b,e.a,e.c,n,t,r,s,o,c,l,u);else if(c!=0)p(e.c,e.a,e.b,r,t,n,c,o,s,l,u);else return!0;return!1}function h(e,t,n,i){let a=t.degenerateSegment,o=e.plane.distanceToPoint(a.start),s=e.plane.distanceToPoint(a.end);return Ac(o)?Ac(s)?f(e,t,n,i):(n&&(n.start.copy(a.start),n.end.copy(a.start)),e.containsPoint(a.start)):Ac(s)?(n&&(n.start.copy(a.end),n.end.copy(a.end)),e.containsPoint(a.end)):e.plane.intersectLine(a,r)==null?!1:(n&&(n.start.copy(r),n.end.copy(r)),e.containsPoint(r))}function g(e,t,n){let r=t.a;return Ac(e.plane.distanceToPoint(r))&&e.containsPoint(r)?(n&&(n.start.copy(r),n.end.copy(r)),!0):!1}function _(e,t,n){let i=e.degenerateSegment,a=t.a;return i.closestPointToPoint(a,!0,r),a.distanceToSquared(r)1||p<0||p>1?!1:Ac(o.start.z+c.z*f-(s.start.z+l.z*p))?(n&&(n.start.copy(o.start).addScaledVector(c,f),n.end.copy(o.start).addScaledVector(c,f)),!0):!1}else if(t.isDegenerateIntoPoint)return _(e,t,n);else return h(t,e,n,o);else if(e.isDegenerateIntoPoint)return t.isDegenerateIntoPoint?t.a.distanceToSquared(e.a)0&&x>0)return!1;let S=p.distanceToPoint(t.a),C=p.distanceToPoint(t.b),ee=p.distanceToPoint(t.c);Ac(S)&&(S=0),Ac(C)&&(C=0),Ac(ee)&&(ee=0);let te=S*C,ne=S*ee;if(te>0&&ne>0)return!1;i.copy(p.normal),a.copy(h.normal);let re=i.cross(a),w=0,ie=Math.abs(re.x),ae=Math.abs(re.y);ae>ie&&(ie=ae,w=1),Math.abs(re.z)>ie&&(w=2);let oe=Dc[w],se=this.a[oe],ce=this.b[oe],le=this.c[oe],ue=t.a[oe],de=t.b[oe],fe=t.c[oe];if(m(this,se,ce,le,b,x,g,_,y,u,s)||m(t,ue,de,fe,te,ne,S,C,ee,d,c))return f(this,t,n,r);if(u.yu.x?n.start.copy(c.start):n.start.copy(s.start),d.ynew O),this.satAxes=[,,,].fill().map(()=>new O),this.satBounds=[,,,].fill().map(()=>new Cc),this.alignedSatBounds=[,,,].fill().map(()=>new Cc),this.needsUpdate=!1,e&&this.min.copy(e),t&&this.max.copy(t),n&&this.matrix.copy(n)}set(e,t,n){this.min.copy(e),this.max.copy(t),this.matrix.copy(n),this.needsUpdate=!0}copy(e){this.min.copy(e.min),this.max.copy(e.max),this.matrix.copy(e.matrix),this.needsUpdate=!0}};Mc.prototype.update=(function(){return function(){let e=this.matrix,t=this.min,n=this.max,r=this.points;for(let i=0;i<=1;i++)for(let a=0;a<=1;a++)for(let o=0;o<=1;o++){let s=r[1*i|2*a|4*o];s.x=i?n.x:t.x,s.y=a?n.y:t.y,s.z=o?n.z:t.z,s.applyMatrix4(e)}let i=this.satBounds,a=this.satAxes,o=r[0];for(let e=0;e<3;e++){let t=a[e],n=i[e],s=r[1<new ur),n=Array(12).fill().map(()=>new ur),r=new O,i=new O;return function(a,o=0,s=null,c=null){if(this.needsUpdate&&this.update(),this.intersectsBox(a))return(s||c)&&(a.getCenter(i),this.closestPointToPoint(i,r),a.closestPointToPoint(r,i),s&&s.copy(r),c&&c.copy(i)),0;let l=o*o,u=a.min,d=a.max,f=this.points,p=1/0;for(let e=0;e<8;e++){let t=f[e];i.copy(t).clamp(u,d);let n=t.distanceToSquared(i);if(nnew jc)}},Fc=new O,Ic=new O;function Lc(e,t,n={},r=0,i=1/0){let a=r*r,o=i*i,s=1/0,c=null;if(e.shapecast({boundsTraverseOrder:e=>(Fc.copy(t).clamp(e.min,e.max),Fc.distanceToSquared(t)),intersectsBounds:(e,t,n)=>n{e.closestPointToPoint(t,Fc);let r=t.distanceToSquared(Fc);return rs?null:{distance:l,point:i.clone()}}function Qc(e,t,n,r,i,a,o,s,c,l,u){Vc.fromBufferAttribute(t,a),Hc.fromBufferAttribute(t,o),Uc.fromBufferAttribute(t,s);let d=Zc(e,Vc,Hc,Uc,Xc,c,l,u);if(d){r&&(Wc.fromBufferAttribute(r,a),Gc.fromBufferAttribute(r,o),Kc.fromBufferAttribute(r,s),d.uv=new E,sn.getInterpolation(Xc,Vc,Hc,Uc,Wc,Gc,Kc,d.uv)),i&&(Wc.fromBufferAttribute(i,a),Gc.fromBufferAttribute(i,o),Kc.fromBufferAttribute(i,s),d.uv1=new E,sn.getInterpolation(Xc,Vc,Hc,Uc,Wc,Gc,Kc,d.uv1)),n&&(qc.fromBufferAttribute(n,a),Jc.fromBufferAttribute(n,o),Yc.fromBufferAttribute(n,s),d.normal=new O,sn.getInterpolation(Xc,Vc,Hc,Uc,qc,Jc,Yc,d.normal),d.normal.dot(e.direction)>0&&d.normal.multiplyScalar(-1));let t={a,b:o,c:s,normal:new O,materialIndex:0};sn.getNormal(Vc,Hc,Uc,t.normal),d.face=t,d.faceIndex=a;{let e=new O;sn.getBarycoord(Xc,Vc,Hc,Uc,e),d.barycoord=e}}return d}function $c(e){return e&&e.isMaterial?e.side:e}function el(e,t,n,r,i,a,o){let s=r*3,c=s+0,l=s+1,u=s+2,{index:d,groups:f}=e;e.index&&(c=d.getX(c),l=d.getX(l),u=d.getX(u));let{position:p,normal:m,uv:h,uv1:g}=e.attributes;if(Array.isArray(t)){let e=r*3;for(let s=0,d=f.length;s=d&&ef&&(f=n),op&&(p=o),sm&&(m=s)}return c[e+0]!==a||c[e+1]!==u||c[e+2]!==d||c[e+3]!==f||c[e+4]!==p||c[e+5]!==m?(c[e+0]=a,c[e+1]=u,c[e+2]=d,c[e+3]=f,c[e+4]=p,c[e+5]=m,!0):!1}else{let r=J(e),i=Y(e,o),s=a,l=!1,u=!1;if(t){if(!s){let e=r/8+n/32,a=i/8+n/32;l=t.has(e),u=t.has(a),s=!l&&!u}}else l=!0,u=!0;let f=s||l,p=s||u,m=!1;f&&(m=d(r,n,s));let h=!1;p&&(h=d(i,n,s));let g=m||h;if(g)for(let t=0;t<3;t++){let n=r+t,a=i+t,o=c[n],s=c[n+3],l=c[a],u=c[a+3];c[e+t]=ou?s:u}return g}}}function al(e,t,n,r,i){let a,o,s,c,l,u,d=1/n.direction.x,f=1/n.direction.y,p=1/n.direction.z,m=n.origin.x,h=n.origin.y,g=n.origin.z,_=t[e],v=t[e+3],y=t[e+1],b=t[e+3+1],x=t[e+2],S=t[e+3+2];return d>=0?(a=(_-m)*d,o=(v-m)*d):(a=(v-m)*d,o=(_-m)*d),f>=0?(s=(y-h)*f,c=(b-h)*f):(s=(b-h)*f,c=(y-h)*f),a>c||s>o||((s>a||isNaN(a))&&(a=s),(c=0?(l=(x-g)*p,u=(S-g)*p):(l=(S-g)*p,u=(x-g)*p),a>u||l>o)?!1:((l>a||a!==a)&&(a=l),(u=r)}let Q=new class{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;let e=[],t=null;this.setBuffer=n=>{t&&e.push(t),t=n,this.float32Array=new Float32Array(n),this.uint16Array=new Uint16Array(n),this.uint32Array=new Uint32Array(n)},this.clearBuffer=()=>{t=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,e.length!==0&&this.setBuffer(e.pop())}}};function ol(e,t,n,r,i,a,o,s){let{geometry:c,_indirectBuffer:l}=e;for(let e=r,u=r+i;e=0,d,f;u?(d=J(e),f=Y(e,c)):(d=Y(e,c),f=J(e));let p=al(d,o,r,i,a)?pl(d,t,n,r,i,a):null;if(p){let e=p.point[l];if(u?e<=o[f+s]:e>=o[f+s+3])return p}let m=al(f,o,r,i,a)?pl(f,t,n,r,i,a):null;return p&&m?p.distance<=m.distance?p:m:p||m||null}}function $(e,t,n){return n.min.x=t[e],n.min.y=t[e+1],n.min.z=t[e+2],n.max.x=t[e+3],n.max.y=t[e+4],n.max.z=t[e+5],n}function ml(e){let t=-1,n=-1/0;for(let r=0;r<3;r++){let i=e[r+3]-e[r];i>n&&(n=i,t=r)}return t}function hl(e,t){t.set(e)}function gl(e,t,n){let r,i;for(let a=0;a<3;a++){let o=a+3;r=e[a],i=t[a],n[a]=ri?r:i}}function _l(e,t,n){for(let r=0;r<3;r++){let i=t[e+2*r],a=t[e+2*r+1],o=i-a,s=i+a;on[r+3]&&(n[r+3]=s)}}function vl(e){let t=e[3]-e[0],n=e[4]-e[1],r=e[5]-e[2];return 2*(t*n+n*r+r*t)}function yl(e){return e.index?e.index.count:e.attributes.position.count}function bl(e){return yl(e)/3}function xl(e,t=ArrayBuffer){return e>65535?new Uint32Array(new t(4*e)):new Uint16Array(new t(2*e))}function Sl(e,t){if(!e.index){let n=e.attributes.position.count,r=xl(n,t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer);e.setIndex(new hn(r,1));for(let e=0;e({offset:e.start/t,count:e.count/t}))}function Tl(e,t,n){let r=Cl(e,t,n),i=wl(e,n);if(!i.length)return[r];let a=[],o=r.offset,s=r.offset+r.count,c=yl(e)/n,l=[];for(let e of i){let{offset:t,count:n}=e,r=t,i=t+(isFinite(n)?n:c-t);ro&&(l.push({pos:Math.max(o,r),isStart:!0}),l.push({pos:Math.min(s,i),isStart:!1}))}l.sort((e,t)=>e.pos===t.pos?e.type===`end`?-1:1:e.pos-t.pos);let u=0,d=null;for(let e of l){let t=e.pos;u!==0&&t!==d&&a.push({offset:d,count:t-d}),u+=e.isStart?1:-1,d=t}return a}let El=new Ke,Dl=new jc,Ol=new jc,kl=new yt,Al=new Mc,jl=new Mc;function Ml(e,t,n,r){Q.setBuffer(e._roots[t]);let i=Nl(0,e,n,r);return Q.clearBuffer(),i}function Nl(e,t,n,r,i=null){let{float32Array:a,uint16Array:o,uint32Array:s}=Q,c=e*2;if(i===null&&(n.boundingBox||n.computeBoundingBox(),Al.set(n.boundingBox.min,n.boundingBox.max,r),i=Al),q(c,o)){let i=t.geometry,l=i.index,u=i.attributes.position,d=n.index,f=n.attributes.position,p=Rc(e,s),m=zc(c,o);if(kl.copy(r).invert(),n.boundsTree)return $(X(e),a,jl),jl.matrix.copy(kl),jl.needsUpdate=!0,n.boundsTree.shapecast({intersectsBounds:e=>jl.intersectsBox(e),intersectsTriangle:e=>{e.a.applyMatrix4(r),e.b.applyMatrix4(r),e.c.applyMatrix4(r),e.needsUpdate=!0;for(let t=p*3,n=(m+p)*3;tFl.distanceToBox(e),intersectsBounds:(e,t,n)=>n{if(t.boundsTree)return t.boundsTree.shapecast({boundsTraverseOrder:e=>Il.distanceToBox(e),intersectsBounds:(e,t,n)=>n{for(let o=t,s=t+i;op&&(p=a),om&&(m=o),sh&&(h=s)}}return c[n+0]!==l||c[n+1]!==d||c[n+2]!==f||c[n+3]!==p||c[n+4]!==m||c[n+5]!==h?(c[n+0]=l,c[n+1]=d,c[n+2]=f,c[n+3]=p,c[n+4]=m,c[n+5]=h,!0):!1}else{let e=J(n),r=Y(n,o),i=l,s=!1,u=!1;if(t){if(!i){let n=e/8+a/32,o=r/8+a/32;s=t.has(n),u=t.has(o),i=!s&&!u}}else s=!0,u=!0;let f=i||s,p=i||u,m=!1;f&&(m=d(e,a,i));let h=!1;p&&(h=d(r,a,i));let g=m||h;if(g)for(let t=0;t<3;t++){let i=e+t,a=r+t,o=c[i],s=c[i+3],l=c[a],u=c[a+3];c[n+t]=ou?s:u}return g}}}function Ul(e,t,n,r,i,a,o){Q.setBuffer(e._roots[t]),Wl(0,e,n,r,i,a,o),Q.clearBuffer()}function Wl(e,t,n,r,i,a,o){let{float32Array:s,uint16Array:c,uint32Array:l}=Q,u=e*2;if(q(u,c))ol(t,n,r,Rc(e,l),zc(u,c),i,a,o);else{let c=J(e);al(c,s,r,a,o)&&Wl(c,t,n,r,i,a,o);let u=Y(e,l);al(u,s,r,a,o)&&Wl(u,t,n,r,i,a,o)}}let Gl=[`x`,`y`,`z`];function Kl(e,t,n,r,i,a){Q.setBuffer(e._roots[t]);let o=ql(0,e,n,r,i,a);return Q.clearBuffer(),o}function ql(e,t,n,r,i,a){let{float32Array:o,uint16Array:s,uint32Array:c}=Q,l=e*2;if(q(l,s))return sl(t,n,r,Rc(e,c),zc(l,s),i,a);{let s=Bc(e,c),l=Gl[s],u=r.direction[l]>=0,d,f;u?(d=J(e),f=Y(e,c)):(d=Y(e,c),f=J(e));let p=al(d,o,r,i,a)?ql(d,t,n,r,i,a):null;if(p){let e=p.point[l];if(u?e<=o[f+s]:e>=o[f+s+3])return p}let m=al(f,o,r,i,a)?ql(f,t,n,r,i,a):null;return p&&m?p.distance<=m.distance?p:m:p||m||null}}let Jl=new Ke,Yl=new jc,Xl=new jc,Zl=new yt,Ql=new Mc,$l=new Mc;function eu(e,t,n,r){Q.setBuffer(e._roots[t]);let i=tu(0,e,n,r);return Q.clearBuffer(),i}function tu(e,t,n,r,i=null){let{float32Array:a,uint16Array:o,uint32Array:s}=Q,c=e*2;if(i===null&&(n.boundingBox||n.computeBoundingBox(),Ql.set(n.boundingBox.min,n.boundingBox.max,r),i=Ql),q(c,o)){let i=t.geometry,l=i.index,u=i.attributes.position,d=n.index,f=n.attributes.position,p=Rc(e,s),m=zc(c,o);if(Zl.copy(r).invert(),n.boundsTree)return $(X(e),a,$l),$l.matrix.copy(Zl),$l.needsUpdate=!0,n.boundsTree.shapecast({intersectsBounds:e=>$l.intersectsBox(e),intersectsTriangle:e=>{e.a.applyMatrix4(r),e.b.applyMatrix4(r),e.c.applyMatrix4(r),e.needsUpdate=!0;for(let n=p,r=m+p;nru.distanceToBox(e),intersectsBounds:(e,t,n)=>n{if(t.boundsTree){let s=t.boundsTree;return s.shapecast({boundsTraverseOrder:e=>iu.distanceToBox(e),intersectsBounds:(e,t,n)=>n{for(let x=t,S=t+o;xc&&(c=_),tm&&(m=t);let v=e[r+2],y=e[r+3],b=v-y,x=v+y;bl&&(l=x),vh&&(h=v);let S=e[r+4],C=e[r+5],ee=S-C,te=S+C;eeu&&(u=te),Sg&&(g=S)}r[0]=a,r[1]=o,r[2]=s,r[3]=c,r[4]=l,r[5]=u,i[0]=d,i[1]=f,i[2]=p,i[3]=m,i[4]=h,i[5]=g}let pu=(e,t)=>e.candidate-t.candidate,mu=Array(32).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),hu=new Float32Array(6);function gu(e,t,n,r,i,a){let o=-1,s=0;if(a===0)o=ml(t),o!==-1&&(s=(t[o]+t[o+3])/2);else if(a===1)o=ml(e),o!==-1&&(s=_u(n,r,i,o));else if(a===2){let a=vl(e),c=vc*i,l=n.offset||0,u=(r-l)*6,d=(r+i-l)*6;for(let e=0;e<3;e++){let r=t[e],l=(t[e+3]-r)/32;if(i<32/4){let t=[...mu];t.length=i;let r=0;for(let i=u;i=a.candidate?_l(r,n,a.rightCacheBounds):(_l(r,n,a.leftCacheBounds),a.count++)}}for(let n=0;n=32&&(i=31);let a=mu[i];a.count++,_l(t,n,a.bounds)}let t=mu[31];hl(t.bounds,t.rightCacheBounds);for(let e=30;e>=0;e--){let t=mu[e],n=mu[e+1];gl(t.bounds,n.rightCacheBounds,t.rightCacheBounds)}let f=0;for(let t=0;t<31;t++){let n=mu[t],r=n.count,l=n.bounds,u=mu[t+1].rightCacheBounds;r!==0&&(f===0?hl(l,hu):gl(l,hu,hu)),f+=r;let d=0,p=0;f!==0&&(d=vl(hu)/a);let m=i-f;m!==0&&(p=vl(u)/a);let h=1+vc*(d*f+p*m);h=c;)s--;if(owu)throw Error(`MeshBVH: Cannot store relative child node offset greater than 32 bits.`);return xu[n+6]=c,xu[n+7]=a,Du(o,i)}}function Ou(e,t,n,r,i){let{maxDepth:a,verbose:o,maxLeafSize:s,strategy:c,onProgress:l}=i,u=e.primitiveBuffer,d=e.primitiveBufferStride,f=new Float32Array(6),p=!1,m=new vu;return fu(t,n,r,m.boundingData,f),g(m,n,r,f),m;function h(e){l&&l(e/r)}function g(e,n,r,i=null,l=0){if(!p&&l>=a&&(p=!0,o&&console.warn(`BVH: Max depth of ${a} reached when generating BVH. Consider increasing maxDepth.`)),r<=s||l>=a)return h(n+r),e.offset=n,e.count=r,e;let m=gu(e.boundingData,i,t,n,r,c);if(m.axis===-1)return h(n+r),e.offset=n,e.count=r,e;let _=yu(u,d,t,n,r,m);if(_===n||_===n+r)h(n+r),e.offset=n,e.count=r;else{e.splitAxis=m.axis;let i=new vu,a=n,o=_-n;e.left=i,fu(t,a,o,i.boundingData,f),g(i,a,o,f,l+1);let s=new vu,c=_,u=r-o;e.right=s,fu(t,c,u,s.boundingData,f),g(s,c,u,f,l+1)}return e}}function ku(e,t){let n=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,r=e.getRootRanges(t.range),i=r[0],a=r[r.length-1],o={offset:i.offset,count:a.offset+a.count-i.offset},s=new Float32Array(6*o.count);s.offset=o.offset,e.computePrimitiveBounds(o.offset,o.count,s),e._roots=r.map(r=>{let i=Ou(e,s,r.offset,r.count,t),a=new n(32*Tu(i));return Eu(0,i,a),a})}let Au,ju,Mu=[],Nu=new Nc(()=>new Ke);function Pu(e,t,n,r,i,a){Au=Nu.getPrimitive(),ju=Nu.getPrimitive(),Mu.push(Au,ju),Q.setBuffer(e._roots[t]);let o=Fu(0,e.geometry,n,r,i,a);Q.clearBuffer(),Nu.releasePrimitive(Au),Nu.releasePrimitive(ju),Mu.pop(),Mu.pop();let s=Mu.length;return s>0&&(ju=Mu[s-1],Au=Mu[s-2]),o}function Fu(e,t,n,r,i=null,a=0,o=0){let{float32Array:s,uint16Array:c,uint32Array:l}=Q,u=e*2;if(q(u,c)){let t=Rc(e,l),n=zc(u,c);return $(X(e),s,Au),r(t,n,!1,o,a+e/8,Au)}else{let u=J(e),p=Y(e,l),m=u,h=p,g,_,v,y;if(i&&(v=Au,y=ju,$(X(m),s,v),$(X(h),s,y),g=i(v),_=i(y),_new Ke),zu=new Ke,Bu=new Ke,Vu=new Ke,Hu=new Ke,Uu=!1;function Wu(e,t,n,r){if(Uu)throw Error(`MeshBVH: Recursive calls to bvhcast not supported.`);Uu=!0;let i=e._roots,a=t._roots,o,s=0,c=0,l=new yt().copy(n).invert();for(let e=0,t=i.length;es&&(s=u),tc&&(c=d),rl&&(l=f)}return n[r+0]=i,n[r+1]=a,n[r+2]=o,n[r+3]=s,n[r+4]=c,n[r+5]=l,n}computePrimitiveBounds(e,t,n){let r=n.offset||0;for(let i=e,a=e+t;i=0;e--){let t=e*8,n=t*2;if(q(n,i)){let e=Rc(t,r),o=zc(n,i);this.writePrimitiveRangeBounds(e,o,qu,0),a.set(qu,t)}else{let e=J(t),n=Y(t,r);for(let r=0;r<3;r++){let i=a[e+r],o=a[e+r+3],s=a[n+r],c=a[n+r+3];a[t+r]=ic?o:c}}}}}getBoundingBox(e){return e.makeEmpty(),this._roots.forEach(t=>{$(0,new Float32Array(t),Ku),e.union(Ku)}),e}shapecast(e){let{boundsTraverseOrder:t,intersectsBounds:n,intersectsRange:r,intersectsPrimitive:i,scratchPrimitive:a,iterate:o}=e;if(r&&i){let e=r;r=(t,n,r,s,c)=>e(t,n,r,s,c)?!0:o(t,n,this,i,r,s,a)}else r||=i?(e,t,n,r)=>o(e,t,this,i,n,r,a):(e,t,n)=>n;let s=!1,c=0,l=this._roots;for(let e=0,i=l.length;e2**16,i=e.reduce((e,t)=>e+t.count,0),a=r?4:2,o=t?new SharedArrayBuffer(i*a):new ArrayBuffer(i*a),s=r?new Uint32Array(o):new Uint16Array(o),c=0;for(let t=0;tthis._indirectBuffer[e]:e=>e,this.primitiveBuffer=null,this.primitiveBufferStride=null,this._indirectBuffer=null,t={...Sc,...t},t[xc]||this.init(t)}init(e){let{geometry:t,primitiveStride:n}=this;e.indirect?this._indirectBuffer=Yu(Tl(t,e.range,n),e.useSharedArrayBuffer):Sl(t,e),super.init(e),!t.boundingBox&&e.setBoundingBox&&(t.boundingBox=this.getBoundingBox(new Ke))}getRootRanges(e){return this.indirect?[{offset:0,count:this._indirectBuffer.length}]:Tl(this.geometry,e,this.primitiveStride)}raycastObject3D(){throw Error(`BVH: raycastObject3D() not implemented`)}};let Zu=new Mc,Qu=new vt,$u=new O,ed=new yt,td=new O,nd=[`getX`,`getY`,`getZ`];var rd=class e extends Xu{static serialize(e,t={}){t={cloneBuffers:!0,...t};let n=e.geometry,r=e._roots,i=e._indirectBuffer,a=n.getIndex(),o={version:1,roots:null,index:null,indirectBuffer:null};return t.cloneBuffers?(o.roots=r.map(e=>e.slice()),o.index=a?a.array.slice():null,o.indirectBuffer=i?i.slice():null):(o.roots=r,o.index=a?a.array:null,o.indirectBuffer=i),o}static deserialize(t,n,r={}){r={setIndex:!0,indirect:!!t.indirectBuffer,...r};let{index:i,roots:a,indirectBuffer:o}=t;t.version||(console.warn(`MeshBVH.deserialize: Serialization format has been changed and will be fixed up. It is recommended to regenerate any stored serialized data.`),c(a));let s=new e(n,{...r,[xc]:!0});if(s._roots=a,s._indirectBuffer=o||null,r.setIndex){let e=n.getIndex();if(e===null){let e=new hn(t.index,1,!1);n.setIndex(e)}else e.array!==i&&(e.array.set(i),e.needsUpdate=!0)}return s;function c(e){for(let t=0;td&&(d=i),o>d&&(d=o),t[n+e]=s,t[n+e+3]=d}return t}computePrimitiveBounds(e,t,n){let r=this.geometry,i=this._indirectBuffer,a=r.attributes.position,o=r.index?r.index.array:null,s=a.normalized;if(e<0||t+e-n.offset>n.length/6)throw Error(`MeshBVH: compute triangle bounds range is invalid.`);let c=a.array,l=a.offset||0,u=3;a.isInterleavedBufferAttribute&&(u=a.data.stride);let d=[`getX`,`getY`,`getZ`],f=n.offset;for(let r=e,p=e+t;ru&&(u=i),o>u&&(u=o);let f=(u-l)/2,g=e*2;n[t+g+0]=l+f,n[t+g+1]=f+(Math.abs(l)+f)*bc}}return n}raycastObject3D(e,t,n=[]){let{material:r}=e;if(r===void 0)return;ed.copy(e.matrixWorld).invert(),Qu.copy(t.ray).applyMatrix4(ed),td.setFromMatrixScale(e.matrixWorld),$u.copy(Qu.direction).multiply(td);let i=$u.length(),a=t.near/i,o=t.far/i;if(t.firstHitOnly===!0){let i=this.raycastFirst(Qu,r,a,o);i=uu(i,e,t),i&&n.push(i)}else{let i=this.raycast(Qu,r,a,o);for(let r=0,a=i.length;r{Z(o,this.resolveTriangleIndex(e)*3,s,c)}:e=>{Z(o,e*3,s,c)},u=Pc.getPrimitive(),d=t.geometry.index,f=t.geometry.attributes.position,p=t.indirect?e=>{Z(u,t.resolveTriangleIndex(e)*3,d,f)}:e=>{Z(u,e*3,d,f)};if(a){if(!(t instanceof e))throw Error(`MeshBVH: "intersectsTriangles" callback can only be used with another MeshBVH.`);let r=(e,t,r,i,s,c,d,f)=>{for(let m=r,h=r+i;mZu.intersectsBox(e),intersectsTriangle:e=>Zu.intersectsTriangle(e)})}intersectsSphere(e){return this.shapecast({intersectsBounds:t=>e.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(e)})}closestPointToGeometry(e,t,n={},r={},i=0,a=1/0){return(this.indirect?lu:Vl)(this,e,t,n,r,i,a)}closestPointToPoint(e,t={},n=0,r=1/0){return Lc(this,e,t,n,r)}};self.onmessage=({data:e})=>{let t=performance.now();function n(e){e=Math.min(e,1);let n=performance.now();n-t>=10&&e!==1&&(self.postMessage({error:null,serialized:null,position:null,progress:e}),t=n)}let{index:r,position:i,options:a}=e;try{let e=new Tn;if(e.setAttribute(`position`,new hn(i,3,!1)),r&&e.setIndex(new hn(r,1,!1)),a.includedProgressCallback&&(a.onProgress=n),a.groups){let t=a.groups;for(let n in t){let r=t[n];e.addGroup(r.start,r.count,r.materialIndex)}}let t=new rd(e,a),o=rd.serialize(t,{copyIndexBuffer:!1}),s=[i.buffer,...o.roots];o.index&&s.push(o.index.buffer),s=s.filter(e=>typeof SharedArrayBuffer>`u`||!(e instanceof SharedArrayBuffer)),t._indirectBuffer&&s.push(o.indirectBuffer.buffer),self.postMessage({error:null,serialized:o,position:i,progress:1},s)}catch(e){self.postMessage({error:e,serialized:null,position:null,progress:1})}}})(); \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/generateMeshBVH.worker-BRfdalWV.js.gz b/Needle/MenuScene/dist/assets/generateMeshBVH.worker-BRfdalWV.js.gz deleted file mode 100644 index 08af977..0000000 Binary files a/Needle/MenuScene/dist/assets/generateMeshBVH.worker-BRfdalWV.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/gltf-progressive.BBJGcb3s.js b/Needle/MenuScene/dist/assets/gltf-progressive.BBJGcb3s.js deleted file mode 100644 index 703d6a1..0000000 --- a/Needle/MenuScene/dist/assets/gltf-progressive.BBJGcb3s.js +++ /dev/null @@ -1,5 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./three@0.169.19.js","./rolldown-runtime.CYVBeYYp.js"])))=>i.map(i=>d[i]); -import{d as e}from"./materialx.CnHmG--Y.js";import{Ar as t,F as n,S as r,St as i,Xt as a,Yt as o,Zt as s,_ as c,_r as l,gr as u,in as d,k as f,lr as p,x as m,xt as h}from"./three@0.169.19.js";import{A as g,D as _,O as v,k as ee}from"./three-examples@0.169.19.js";var te=`3.4.0-beta.3`;globalThis.GLTF_PROGRESSIVE_VERSION=te,console.debug(`[gltf-progressive] version ${te}`);var y=`https://www.gstatic.com/draco/versioned/decoders/1.5.7/`,b=`https://cdn.needle.tools/static/three/0.179.1/basis2/`,ne=y,re=b,ie=new URL(y+`draco_decoder.js`);ie.searchParams.append(`range`,`true`),fetch(ie,{method:`GET`,headers:{Range:`bytes=0-1`}}).catch(e=>{console.debug(`Failed to fetch remote Draco decoder from ${y} (offline: ${typeof navigator<`u`?navigator.onLine:`unknown`})`),y===ne&&oe(`./include/draco/`),b===re&&se(`./include/ktx2/`)}).finally(()=>{ce()});var ae=()=>({dracoDecoderPath:y,ktx2TranscoderPath:b});function oe(e){y=e,w&&w[C]!=y?(console.debug(`Updating Draco decoder path to `+e),w[C]=y,w.setDecoderPath(y),w.preload()):console.debug(`Setting Draco decoder path to `+e)}function se(e){b=e,E&&E.transcoderPath!=b?(console.debug(`Updating KTX2 transcoder path to `+e),E.setTranscoderPath(b),E.init()):console.debug(`Setting KTX2 transcoder path to `+e)}function x(e){return ce(),e?E.detectSupport(e):e!==null&&console.warn(`No renderer provided to detect ktx2 support - loading KTX2 textures might fail`),{dracoLoader:w,ktx2Loader:E,meshoptDecoder:T}}function S(e){e.dracoLoader||e.setDRACOLoader(w),e.ktx2Loader||e.setKTX2Loader(E),e.meshoptDecoder||e.setMeshoptDecoder(T)}var C=Symbol(`dracoDecoderPath`),w,T,E;function ce(){w||(w=new v,w[C]=y,w.setDecoderPath(y),w.setDecoderConfig({type:`js`}),w.preload()),E||(E=new _,E.setTranscoderPath(b),E.init()),T||=ee}var D=new WeakMap;function O(e,t){let n=D.get(e);n=n?Object.assign(n,t):t,D.set(e,n)}var le=g.prototype.load;function ue(...e){let t=D.get(this),n=e[0],r=new URL(n,window.location.href);if(r.hostname.endsWith(`needle.tools`)){let e=t?.progressive===void 0?!0:t.progressive,i=t?.usecase?t.usecase:`default`;e?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${i}`:this.requestHeader.Accept=`*/*;usecase=${i}`,n=r.toString()}return e[0]=n,le?.call(this,...e)}g.prototype.load=ue,k(`debugprogressive`);function k(e){if(typeof window>`u`)return!1;let t=new URL(window.location.href).searchParams.get(e);return t==null||t===`0`||t===`false`?!1:t===``?!0:t}function de(e,t){if(t===void 0||e===void 0||t.startsWith(`./`)||t.startsWith(`http`)||t.startsWith(`data:`)||t.startsWith(`blob:`))return t;let n=e.lastIndexOf(`/`);if(n>=0){let r=e.substring(0,n+1);for(;r.endsWith(`/`)&&t.startsWith(`/`);)t=t.substring(1);return r+t}return t}function A(){return j===void 0?(j=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),k(`debugprogressive`)&&console.log(`[glTF Progressive]: isMobileDevice`,j),j):j}var j;function fe(){if(typeof window>`u`)return!1;let e=new URL(window.location.href),t=e.hostname===`localhost`||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(e.hostname);return e.hostname===`127.0.0.1`||t}var pe=class{maxConcurrent;_running=new Map;_queue=[];debug=!1;constructor(e,t={}){this.maxConcurrent=e,this.debug=t.debug??!1,window.requestAnimationFrame(this.tick)}tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(e){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${e}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(t=>{this._queue.push({key:e,resolve:t})})}add(e,t){this._running.has(e)||(this._running.set(e,t),t.finally(()=>{this._running.delete(e),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${e})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${e})`))}internalUpdate(){let e=this.maxConcurrent-this._running.size;for(let t=0;t0;t++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);let{key:e,resolve:t}=this._queue.shift();t({use:t=>this.add(e,t)})}}};function me(e){let t=e.image?.width??0,n=e.image?.height??0,r=e.image?.depth??1,i=Math.floor(Math.log2(Math.max(t,n,r)))+1,a=he(e);return t*n*r*a*(1-.25**i)/.75}function he(e){let t=4,n=e.format;n===1024||n===1025?t=1:n===1026||n===1027?t=2:n===1022||n===1029?t=3:(n===1023||n===1033)&&(t=4);let r=1,i=e.type;return i===1009||i===1010?r=1:i===1011||i===1012?r=2:i===1013||i===1014||i===1015?r=4:i===1016&&(r=2),t*r}var ge=typeof window>`u`&&typeof document>`u`,M=Symbol(`needle:raycast-mesh`);function N(e){return e?.[M]instanceof r?e[M]:null}function _e(e,t){if((e.type===`Mesh`||e.type===`SkinnedMesh`)&&!N(e)){let n=ye(t);n.userData={isRaycastMesh:!0},e[M]=n}}function ve(e=!0){if(e){if(P)return;let e=P=s.prototype.raycast;s.prototype.raycast=function(t,n){let r=this,i=N(r),a;i&&r.isMesh&&(a=r.geometry,r.geometry=i),e.call(this,t,n),a&&(r.geometry=a)}}else{if(!P)return;s.prototype.raycast=P,P=null}}var P=null;function ye(e){let t=new r;for(let n in e.attributes)t.setAttribute(n,e.getAttribute(n));return t.setIndex(e.getIndex()),t}var F=[],I=k(`debugprogressive`),L=void 0,R=-1;if(I){function e(){R+=1,R>=6&&(R=-1),console.log(`Toggle LOD level [${R}]`)}window.addEventListener(`keyup`,t=>{t.key===`p`&&e(),t.key===`w`&&(L=!L,console.log(`Toggle wireframe [${L}]`));let n=parseInt(t.key);!isNaN(n)&&n>=0&&(R=n,console.log(`Set LOD level to [${R}]`))})}function be(e){if(I&&L!==void 0)if(Array.isArray(e))for(let t of e)be(t);else e&&`wireframe`in e&&(e.wireframe=L===!0)}var z=[],xe=0,Se=A()?2:10;function Ce(e){if(z.length{let{WebGLRenderer:t}=await e(async()=>{let{WebGLRenderer:e}=await import(`./three@0.169.19.js`).then(e=>e.Rr);return{WebGLRenderer:e}},__vite__mapDeps([0,1]),import.meta.url);return new t})(),await this._webglRenderer);let a=x(i).ktx2Loader.workerConfig;t instanceof URL?t=t.toString():t.startsWith(`file:`)?t=URL.createObjectURL(new Blob([t])):!t.startsWith(`blob:`)&&!t.startsWith(`http:`)&&!t.startsWith(`https:`)&&(t=new URL(t,window.location.href).toString());let o={type:`load`,url:t,dracoDecoderPath:r.dracoDecoderPath,ktx2TranscoderPath:r.ktx2TranscoderPath,ktx2LoaderConfig:a};return this._debug&&console.debug(`[Worker] Sending load request`,o),this.worker.postMessage(o),new Promise(e=>{this._running.push({url:t.toString(),resolve:e})})}_debug=!1;constructor(e,t){this.worker=e,this._debug=t.debug??!1,e.onmessage=e=>{let t=e.data;switch(this._debug&&console.log(`[Worker] EVENT`,t),t.type){case`loaded-gltf`:for(let e of this._running)if(e.url===t.result.url){Te(t.result),e.resolve(t.result);let n=e.url;n.startsWith(`blob:`)&&URL.revokeObjectURL(n)}}},e.onerror=e=>{console.error(`[Worker] Error in gltf-progressive worker:`,e)},e.postMessage({type:`init`})}};function Te(e){for(let n of e.geometries){let e=n.geometry,i=new r;if(i.name=e.name||``,e.index){let t=e.index;i.setIndex(B(t))}for(let t in e.attributes){let n=e.attributes[t],r=B(n);i.setAttribute(t,r)}if(e.morphAttributes)for(let t in e.morphAttributes){let n=e.morphAttributes[t].map(e=>B(e));i.morphAttributes[t]=n}if(i.morphTargetsRelative=e.morphTargetsRelative??!1,i.boundingBox=new c,i.boundingBox.min=new t(e.boundingBox?.min.x,e.boundingBox?.min.y,e.boundingBox?.min.z),i.boundingBox.max=new t(e.boundingBox?.max.x,e.boundingBox?.max.y,e.boundingBox?.max.z),i.boundingSphere=new p(new t(e.boundingSphere?.center.x,e.boundingSphere?.center.y,e.boundingSphere?.center.z),e.boundingSphere?.radius),e.groups)for(let t of e.groups)i.addGroup(t.start,t.count,t.materialIndex);e.userData&&(i.userData=e.userData),n.geometry=i}for(let t of e.textures){let e=t.texture,r=null;if(e.isCompressedTexture){let t=e.mipmaps;r=new n(t,e.image?.width||e.source?.data?.width||-1,e.image?.height||e.source?.data?.height||-1,e.format,e.type,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.anisotropy,e.colorSpace)}else r=new u(e.image,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),r.mipmaps=e.mipmaps,r.channel=e.channel,r.source.data=e.source.data,r.flipY=e.flipY,r.premultiplyAlpha=e.premultiplyAlpha,r.unpackAlignment=e.unpackAlignment,r.matrix=new o(...e.matrix.elements);if(!r){console.error(`[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.`);continue}t.texture=r}return e}function B(e){let t=e;if(`isInterleavedBufferAttribute`in e&&e.isInterleavedBufferAttribute){let n=e.data,r=n.array;t=new i(new h(r,n.stride),e.itemSize,r.byteOffset,e.normalized),t.offset=e.offset}else `isBufferAttribute`in e&&e.isBufferAttribute&&(t=new m(e.array,e.itemSize,e.normalized),t.usage=e.usage,t.gpuType=e.gpuType,t.updateRanges=e.updateRanges);return t}var Ee=k(`gltf-progressive-worker`);k(`gltf-progressive-reduce-mipmaps`);var V=k(`gltf-progressive-gc`),H=Symbol(`needle-progressive-texture`),U=`NEEDLE_progressive`,W=class e{get name(){return U}static getMeshLODExtension(e){let t=this.getAssignedLODInformation(e);return t?.key?this.lodInfos.get(t.key):null}static getPrimitiveIndex(e){return this.getAssignedLODInformation(e)?.index??-1}static getMaterialMinMaxLODsCount(e,t){let n=this,r=`LODS:minmax`,i=e[r];if(i!=null)return i;if(t||={min_count:1/0,max_count:0,lods:[]},Array.isArray(e)){for(let n of e)this.getMaterialMinMaxLODsCount(n,t);return e[r]=t,t}if(I===`verbose`&&console.log(`getMaterialMinMaxLODsCount`,e),e.type===`ShaderMaterial`||e.type===`RawShaderMaterial`){let n=e;for(let e of Object.keys(n.uniforms)){let r=n.uniforms[e].value;r?.isTexture===!0&&a(r,t)}}else if(e.isMaterial)for(let n of Object.keys(e)){let r=e[n];r?.isTexture===!0&&a(r,t)}else I&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${e.type}`);return e[r]=t,t;function a(e,t){let r=n.getAssignedLODInformation(e);if(r){let e=n.lodInfos.get(r.key);if(e&&e.lods){t.min_count=Math.min(t.min_count,e.lods.length),t.max_count=Math.max(t.max_count,e.lods.length);for(let n=0;n{if(Array.isArray(e)){let t=i.index||0;e=e[t]}return t[`LOD:requested level`]===n&&(delete t[`LOD:requested level`],e&&r!=e&&(e?.isBufferGeometry?t.geometry=e:I&&console.error(`Invalid LOD geometry`,e))),e}).catch(e=>(console.error(`Error loading mesh LOD`,t,e),null))}else I&&console.error(`Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh`,t);return Promise.resolve(null)}static assignTextureLOD(e,t=0){if(!e)return Promise.resolve(null);if(e.isMesh===!0){let n=e;if(Array.isArray(n.material)){let e=[];for(let r of n.material){let n=this.assignTextureLOD(r,t);e.push(n)}return Promise.all(e).then(e=>{let t=[];for(let n of e)Array.isArray(n)&&t.push(...n);return t})}else return this.assignTextureLOD(n.material,t)}if(e.isMaterial===!0){let n=e,r=[],i=[];if(n.uniforms&&(n.isRawShaderMaterial||n.isShaderMaterial===!0)){let e=n;for(let a of Object.keys(e.uniforms)){let o=e.uniforms[a].value;if(o?.isTexture===!0){let s=this.assignTextureLODForSlot(o,t,n,a).then(t=>(t&&e.uniforms[a].value!=t&&(e.uniforms[a].value=t,e.uniformsNeedUpdate=!0),t));r.push(s),i.push(a)}}}else for(let e of Object.keys(n)){let a=n[e];if(a?.isTexture===!0){let o=this.assignTextureLODForSlot(a,t,n,e);r.push(o),i.push(e)}}return Promise.all(r).then(e=>{let r=[];for(let a=0;a{if(Array.isArray(e))return console.warn(`Progressive: Got an array of textures for a texture slot, this should not happen...`),null;if(e?.isTexture===!0){if(e!=t&&r&&i){let t=r[i];if(t&&!I){let i=this.getAssignedLODInformation(t);if(i&&i?.level(console.error(`Error loading LOD`,t,e),null)):Promise.resolve(null)}parser;url;constructor(e){let t=e.options.path;I&&console.log(`Progressive extension registered for`,t),this.parser=e,this.url=t}_isLoadingMesh;loadMesh=t=>{if(this._isLoadingMesh)return null;let n=this.parser.json.meshes[t]?.extensions?.[U];return n?(this._isLoadingMesh=!0,this.parser.getDependency(`mesh`,t).then(t=>(this._isLoadingMesh=!1,t&&e.registerMesh(this.url,n.guid,t,n.lods?.length,0,n),t))):null};afterRoot(t){return I&&console.log(`AFTER`,this.url,t),this.parser.json.textures?.forEach((t,n)=>{if(t?.extensions){let r=t?.extensions[U];if(r){if(!r.lods){I&&console.warn(`Texture has no LODs`,r);return}let t=!1;for(let i of this.parser.associations.keys())i.isTexture===!0&&this.parser.associations.get(i)?.textures===n&&(t=!0,e.registerTexture(this.url,i,r.lods?.length,n,r));t||this.parser.getDependency(`texture`,n).then(t=>{t&&e.registerTexture(this.url,t,r.lods?.length,n,r)})}}}),this.parser.json.meshes?.forEach((t,n)=>{if(t?.extensions){let r=t?.extensions[U];if(r&&r.lods){for(let t of this.parser.associations.keys())if(t.isMesh){let i=this.parser.associations.get(t);i?.meshes===n&&e.registerMesh(this.url,r.guid,t,r.lods.length,i.primitives,r)}}}}),null}static registerTexture=(t,n,r,i,a)=>{if(!n){I&&console.error(`!! gltf-progressive: Called register texture without texture`);return}if(I){let e=n.image?.width||n.source?.data?.width||0,t=n.image?.height||n.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${i}] "${n.name||n.uuid}", Current: ${e}x${t}, Max: ${a.lods[0]?.width}x${a.lods[0]?.height}, uuid: ${n.uuid}`,a,n)}n.source&&(n.source[H]=a);let o=a.guid;e.assignLODInformation(t,n,o,r,i),e.lodInfos.set(o,a),e.lowresCache.set(o,new WeakRef(n))};static registerMesh=(t,n,r,i,a,o)=>{let s=r.geometry;if(!s){I&&console.warn(`gltf-progressive: Register mesh without geometry`);return}s.userData||={},I&&console.log(`> Progressive: register mesh `+r.name,{index:a,uuid:r.uuid},o,r),e.assignLODInformation(t,s,n,i,a),e.lodInfos.set(n,o);let c=e.lowresCache.get(n)?.deref();c?c.push(r.geometry):c=[r.geometry],e.lowresCache.set(n,new WeakRef(c)),i>0&&!N(r)&&_e(r,s);for(let e of F)e.onRegisteredNewMesh?.(r,o)};static dispose(e){if(e){this.lodInfos.delete(e);let t=this.lowresCache.get(e);if(t){let n=t.deref();if(n){if(n.isTexture){let e=n;this.textureRefCounts.delete(e.uuid),e.dispose()}else if(Array.isArray(n))for(let e of n)e.dispose()}this.lowresCache.delete(e)}for(let[t,n]of this.cache)t.includes(e)&&(this._disposeCacheEntry(n),this.cache.delete(t))}else{this.lodInfos.clear();for(let[,e]of this.lowresCache){let t=e.deref();if(t){if(t.isTexture){let e=t;this.textureRefCounts.delete(e.uuid),e.dispose()}else if(Array.isArray(t))for(let e of t)e.dispose()}}this.lowresCache.clear();for(let[,e]of this.cache)this._disposeCacheEntry(e);this.cache.clear(),this.textureRefCounts.clear()}}static _disposeCacheEntry(e){if(e instanceof WeakRef){let t=e.deref();t&&(t.isTexture&&this.textureRefCounts.delete(t.uuid),t.dispose())}else e.then(e=>{if(e)if(Array.isArray(e))for(let t of e)t.dispose();else e.isTexture&&this.textureRefCounts.delete(e.uuid),e.dispose()}).catch(()=>{})}static lodInfos=new Map;static cache=new Map;static lowresCache=new Map;static textureRefCounts=new Map;static _resourceRegistry=new FinalizationRegistry(t=>{let n=e.cache.get(t);(I||V)&&console.debug(`[gltf-progressive] Memory: Resource GC'd\n${t}`),n instanceof WeakRef&&(n.deref()||(e.cache.delete(t),(I||V)&&console.log(`[gltf-progressive] ↪ Cache entry deleted (GC)`)))});static trackTextureUsage(e){let t=e.uuid,n=this.textureRefCounts.get(t)||0;this.textureRefCounts.set(t,n+1),I===`verbose`&&console.log(`[gltf-progressive] Track texture ${t}, refCount: ${n} → ${n+1}`)}static untrackTextureUsage(e){let t=e.uuid,n=this.textureRefCounts.get(t);if(!n)return(I===`verbose`||V)&&i(`[gltf-progressive] Memory: Untrack untracked texture (dispose immediately)`,0),e.dispose(),!0;let r=n-1;if(r<=0)return this.textureRefCounts.delete(t),(I||V)&&i(`[gltf-progressive] Memory: Dispose texture`,r),e.dispose(),!0;return this.textureRefCounts.set(t,r),I===`verbose`&&i(`[gltf-progressive] Memory: Untrack texture`,r),!1;function i(r,i){let a=e.image?.width||e.source?.data?.width||0,o=e.image?.height||e.source?.data?.height||0,s=a&&o?`${a}x${o}`:`N/A`,c=`N/A`;a&&o&&(c=`~${(me(e)/(1024*1024)).toFixed(2)} MB`),console.log(`${r} — ${e.name} ${s} (${c}), refCount: ${n} → ${i}\n${t}`)}}static workers=[];static _workersIndex=0;static async getOrLoadLOD(t,n){let i=I==`verbose`,a=this.getAssignedLODInformation(t);if(!a)return I&&console.warn(`[gltf-progressive] No LOD information found: ${t.name}, uuid: ${t.uuid}, type: ${t.type}`,t),null;let o=a?.key,s;if(t.isTexture===!0){let e=t;e.source&&e.source[H]&&(s=e.source[H])}if(s||=e.lodInfos.get(o),!s)I&&console.warn(`Can not load LOD ${n}: no LOD info found for \"${o}\" ${t.name}`,t.type,e.lodInfos);else{if(n>0){let e=!1,t=Array.isArray(s.lods);if(t&&n>=s.lods.length?e=!0:t||(e=!0),e){let e=this.lowresCache.get(o);if(e){let t=e.deref();if(t)return t;this.lowresCache.delete(o),I&&console.log(`[gltf-progressive] Lowres cache entry was GC'd: ${o}`)}return null}}let c=Array.isArray(s.lods)?s.lods[n]?.path:s.lods;if(!c)return I&&!s[`missing:uri`]&&(s[`missing:uri`]=!0,console.warn(`Missing uri for progressive asset for LOD `+n,s)),null;let d=de(a.url,c);if(d.endsWith(`.glb`)||d.endsWith(`.gltf`)){if(!s.guid)return console.warn(`missing pointer for glb/gltf texture`,s),null;let c=d+`_`+s.guid,l=await this.queue.slot(d),f=this.cache.get(c);if(f!==void 0)if(i&&console.log(`LOD ${n} was already loading/loaded: ${c}`),f instanceof WeakRef){let e=f.deref();if(e){let n=e,i=!1;if(n instanceof u&&t instanceof u?n.image?.data||n.source?.data?n=this.copySettings(t,n):i=!0:n instanceof r&&t instanceof r&&(n.attributes.position?.array||(i=!0)),!i)return n}this.cache.delete(c),I&&console.log(`[gltf-progressive] Re-loading GC'd/disposed resource: ${c}`)}else{let e=await f.catch(e=>(console.error(`Error loading LOD ${n} from ${d}\n`,e),null)),i=!1;if(e==null||(e instanceof u&&t instanceof u?e.image?.data||e.source?.data?e=this.copySettings(t,e):(i=!0,this.cache.delete(c)):e instanceof r&&t instanceof r&&(e.attributes.position?.array||(i=!0,this.cache.delete(c)))),!i)return e}if(!l.use)return I&&console.log(`LOD ${n} was aborted: ${d}`),null;let p=s,m=new Promise(async(r,s)=>{if(Ee){let i=await(await Ce({})).load(d);if(i.textures.length>0)for(let s of i.textures){let i=s.texture;return e.assignLODInformation(a.url,i,o,n,void 0),t instanceof u&&(i=this.copySettings(t,i)),i&&(i.guid=p.guid),r(i)}if(i.geometries.length>0){let t=[];for(let r of i.geometries){let i=r.geometry;e.assignLODInformation(a.url,i,o,n,r.primitiveIndex),t.push(i)}return r(t)}return r(null)}let l=new g;S(l),I&&(await new Promise(e=>setTimeout(e,1e3)),i&&console.warn(`Start loading (delayed) `+d,p.guid));let f=d;if(p&&Array.isArray(p.lods)){let e=p.lods[n];e.hash&&(f+=`?v=`+e.hash)}let m=await l.loadAsync(f).catch(e=>(console.error(`Error loading LOD ${n} from ${d}\n`,e),r(null)));if(!m)return r(null);let h=m.parser;i&&console.log(`Loading finished `+d,p.guid);let _=0;if(m.parser.json.textures){let s=!1;for(let e of m.parser.json.textures){if(e?.extensions){let t=e?.extensions[U];if(t?.guid&&t.guid===p.guid){s=!0;break}}_++}if(s){let s=await h.getDependency(`texture`,_);return s&&e.assignLODInformation(a.url,s,o,n,void 0),i&&console.log(`change "`+t.name+`" → "`+s.name+`"`,d,_,s,c),t instanceof u&&(s=this.copySettings(t,s)),s&&(s.guid=p.guid),r(s)}else I&&console.warn(`Could not find texture with guid`,p.guid,m.parser.json)}if(_=0,m.parser.json.meshes){let t=!1;for(let e of m.parser.json.meshes){if(e?.extensions){let n=e?.extensions[U];if(n?.guid&&n.guid===p.guid){t=!0;break}}_++}if(t){let t=await h.getDependency(`mesh`,_);if(i&&console.log(`Loaded Mesh \"${t.name}\"`,d,_,t,c),t.isMesh===!0){let i=t.geometry;return e.assignLODInformation(a.url,i,o,n,0),r(i)}else{let i=[];for(let r=0;r{r.forEach(r=>{r.add(e,t,n)})};ready;get awaitedCount(){return this._addedCount}get resolvedCount(){return this._resolvedCount}get currentlyAwaiting(){return this._awaiting.length}_resolve;_signal;_frame_start;_frames_to_capture;_resolved=!1;_addedCount=0;_resolvedCount=0;_awaiting=[];_maxPromisesPerObject=1;constructor(e,t){let n=Math.max(t.frames??2,2);this._frame_start=t.waitForFirstCapture?void 0:e,this._frames_to_capture=n,this.ready=new Promise(e=>{this._resolve=e}),this.ready.finally(()=>{this._resolved=!0,this._awaiting.length=0}),this._signal=t.signal,this._signal?.addEventListener(`abort`,()=>{this.resolveNow()}),this._maxPromisesPerObject=Math.max(1,t.maxPromisesPerObject??1)}_currentFrame=0;update(e){this._currentFrame=e,this._frame_start===void 0&&this._addedCount>0&&(this._frame_start=e),(this._signal?.aborted||this._awaiting.length===0&&this._frame_start!==void 0&&e>this._frame_start+this._frames_to_capture)&&this.resolveNow()}_seen=new WeakMap;add(e,t,n){if(this._resolved){I&&console.warn(`PromiseGroup: Trying to add a promise to a resolved group, ignoring.`);return}if(!(this._frame_start!==void 0&&this._currentFrame>this._frame_start+this._frames_to_capture)){if(this._maxPromisesPerObject>=1)if(this._seen.has(t)){let e=this._seen.get(t);if(e>=this._maxPromisesPerObject){I&&console.warn(`PromiseGroup: Already awaiting object ignoring new promise for it.`);return}this._seen.set(t,e+1)}else this._seen.set(t,1);this._awaiting.push(n),this._addedCount++,n.finally(()=>{this._resolvedCount++,this._awaiting.splice(this._awaiting.indexOf(n),1)})}}resolveNow(){this._resolved||this._resolve?.({awaited_count:this._addedCount,resolved_count:this._resolvedCount,cancelled:this._signal?.aborted??!1})}},K=k(`debugprogressive`),Oe=k(`noprogressive`),q=Symbol(`Needle:LODSManager`),J=Symbol(`Needle:LODState`),Y=Symbol(`Needle:CurrentLOD`),X={mesh_lod:-1,texture_lod:-1},Z=class e{static debugDrawLine;static getObjectLODState(e){return e[J]}static addPlugin(e){F.push(e)}static removePlugin(e){let t=F.indexOf(e);t>=0&&F.splice(t,1)}static get(t,n){if(t[q])return console.debug(`[gltf-progressive] LODsManager already exists for this renderer`),t[q];let r=new e(t,{engine:`unknown`,...n});return t[q]=r,r}renderer;context;projectionScreenMatrix=new a;get plugins(){return F}overrideLodLevel=void 0;targetTriangleDensity=2e5;skinnedMeshAutoUpdateBoundsInterval=30;updateInterval=`auto`;#e=1;pause=!1;manual=!1;_newPromiseGroups=[];_promiseGroupIds=0;awaitLoading(e){let t=this._promiseGroupIds++,n=new G(this.#r,{...e});this._newPromiseGroups.push(n);let r=performance.now();return n.ready.finally(()=>{let i=this._newPromiseGroups.indexOf(n);i>=0&&(this._newPromiseGroups.splice(i,1),fe()&&performance.measure(`LODsManager:awaitLoading`,{start:r,detail:{id:t,name:e?.name,awaited:n.awaitedCount,resolved:n.resolvedCount}}))}),n.ready}_postprocessPromiseGroups(){if(this._newPromiseGroups.length!==0)for(let e=this._newPromiseGroups.length-1;e>=0;e--)this._newPromiseGroups[e].update(this.#r)}_lodchangedlisteners=[];addEventListener(e,t){e===`changed`&&this._lodchangedlisteners.push(t)}removeEventListener(e,t){if(e===`changed`){let e=this._lodchangedlisteners.indexOf(t);e>=0&&this._lodchangedlisteners.splice(e,1)}}constructor(e,t){this.renderer=e,this.context={...t}}#t;#n=new f;#r=0;#i=0;#a=0;#o=0;_fpsBuffer=[60,60,60,60,60];enable(){if(this.#t)return;console.debug(`[gltf-progressive] Enabling LODsManager for renderer`);let e=0;this.#t=this.renderer.render;let t=this;x(this.renderer),this.renderer.render=function(n,r){let i=t.renderer.getRenderTarget();(i==null||`isXRRenderTarget`in i&&i.isXRRenderTarget)&&(e=0,t.#r+=1,t.#i=t.#n.getDelta(),t.#a+=t.#i,t._fpsBuffer.shift(),t._fpsBuffer.push(1/t.#i),t.#o=t._fpsBuffer.reduce((e,t)=>e+t)/t._fpsBuffer.length,K&&t.#r%200==0&&console.log(`FPS`,Math.round(t.#o),`Interval:`,t.#e));let a=e++;t.#t.call(this,n,r),t.onAfterRender(n,r,a)}}disable(){this.#t&&=(console.debug(`[gltf-progressive] Disabling LODsManager for renderer`),this.renderer.render=this.#t,void 0)}update(e,t){this.internalUpdate(e,t)}onAfterRender(e,t,n){if(this.pause)return;let r=this.renderer.renderLists.get(e,0).opaque,i=!0;if(r.length===1){let e=r[0].material;(e.name===`EffectMaterial`||e.name===`CopyShader`)&&(i=!1)}if((t.parent&&t.parent.type===`CubeCamera`||n>=1&&t.type===`OrthographicCamera`)&&(i=!1),i){if(Oe||(this.updateInterval===`auto`?this.#o<40&&this.#e<10?(this.#e+=1,K&&console.warn(`↓ Reducing LOD updates`,this.#e,this.#o.toFixed(0))):this.#o>=60&&this.#e>1&&(--this.#e,K&&console.warn(`↑ Increasing LOD updates`,this.#e,this.#o.toFixed(0))):this.#e=this.updateInterval,this.#e>0&&this.#r%this.#e!=0))return;this.internalUpdate(e,t),this._postprocessPromiseGroups()}}internalUpdate(e,t){let n=this.renderer.renderLists.get(e,0),r=n.opaque;this.projectionScreenMatrix.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse);let i=this.targetTriangleDensity;for(let n of r){if(n.material&&(n.geometry?.type===`BoxGeometry`||n.geometry?.type===`BufferGeometry`)&&(n.material.name===`SphericalGaussianBlur`||n.material.name==`BackgroundCubeMaterial`||n.material.name===`CubemapFromEquirect`||n.material.name===`EquirectangularToCubeUV`)){K&&(n.material[`NEEDLE_PROGRESSIVE:IGNORE-WARNING`]||(n.material[`NEEDLE_PROGRESSIVE:IGNORE-WARNING`]=!0,console.warn(`Ignoring skybox or BLIT object`,n,n.material.name,n.material.type)));continue}switch(n.material.type){case`LineBasicMaterial`:case`LineDashedMaterial`:case`PointsMaterial`:case`ShadowMaterial`:case`MeshDistanceMaterial`:case`MeshDepthMaterial`:continue}if(K===`color`&&n.material&&!n.object.progressive_debug_color){n.object.progressive_debug_color=!0;let e=new d({color:Math.random()*16777215});n.object.material=e}let r=n.object;(r instanceof s||r.isMesh)&&this.updateLODs(e,t,r,i)}let a=n.transparent;for(let n of a){let r=n.object;(r instanceof s||r.isMesh)&&this.updateLODs(e,t,r,i)}let o=n.transmissive;for(let n of o){let r=n.object;(r instanceof s||r.isMesh)&&this.updateLODs(e,t,r,i)}}updateLODs(e,t,n,r){n.userData||={};let i=n[J];if(i||(i=new ke,n[J]=i),i.frames++<2)return;for(let r of F)r.onBeforeUpdateLOD?.(this.renderer,e,t,n);let a=this.overrideLodLevel===void 0?R:this.overrideLodLevel;a>=0?(X.mesh_lod=a,X.texture_lod=a):(this.calculateLodLevel(t,n,i,r,X),X.mesh_lod=Math.round(X.mesh_lod),X.texture_lod=Math.round(X.texture_lod)),X.mesh_lod>=0&&this.loadProgressiveMeshes(n,X.mesh_lod),n.material&&X.texture_lod>=0&&this.loadProgressiveTextures(n.material,X.texture_lod,a),I&&n.material&&!n.isGizmo&&be(n.material);for(let r of F)r.onAfterUpdatedLOD?.(this.renderer,e,t,n,X);i.lastLodLevel_Mesh=X.mesh_lod,i.lastLodLevel_Texture=X.texture_lod}loadProgressiveTextures(e,t,n){if(!e)return;if(Array.isArray(e)){for(let n of e)this.loadProgressiveTextures(n,t);return}let r=!1;if((e[Y]===void 0||t=0&&(r=e[Y]!=n,t=n),r){e[Y]=t;let n=W.assignTextureLOD(e,t).then(n=>{this._lodchangedlisteners.forEach(n=>n({type:`texture`,level:t,object:e}))});G.addPromise(`texture`,e,n,this._newPromiseGroups)}}loadProgressiveMeshes(e,t){if(!e)return Promise.resolve(null);let n=e[Y]!==t,r=e[`DEBUG:LOD`];if(r!=null&&(n=e[Y]!=r,t=r),n){e[Y]=t;let n=e.geometry,r=W.assignMeshLOD(e,t).then(r=>(r&&e[Y]==t&&n!=e.geometry&&this._lodchangedlisteners.forEach(n=>n({type:`mesh`,level:t,object:e})),r));return G.addPromise(`mesh`,e,r,this._newPromiseGroups),r}return Promise.resolve(null)}_sphere=new p;_tempBox=new c;_tempBox2=new c;tempMatrix=new a;_tempWorldPosition=new t;_tempBoxSize=new t;_tempBox2Size=new t;static corner0=new t;static corner1=new t;static corner2=new t;static corner3=new t;static _tempPtInside=new t;static isInside(e,t){let n=e.min,r=e.max,i=(n.x+r.x)*.5,a=(n.y+r.y)*.5;return this._tempPtInside.set(i,a,n.z).applyMatrix4(t).z<0}static skinnedMeshBoundsFrameOffsetCounter=0;static $skinnedMeshBoundsOffset=Symbol(`gltf-progressive-skinnedMeshBoundsOffset`);calculateLodLevel(t,n,r,i,a){if(!n){a.mesh_lod=-1,a.texture_lod=-1;return}if(!t){a.mesh_lod=-1,a.texture_lod=-1;return}let o=11,s=!1;if(K&&n[`DEBUG:LOD`]!=null)return n[`DEBUG:LOD`];let c=W.getMeshLODExtension(n.geometry)?.lods,l=W.getPrimitiveIndex(n.geometry),u=c&&c.length>0,d=W.getMaterialMinMaxLODsCount(n.material),f=d.min_count!==1/0&&d.min_count>=0&&d.max_count>=0;if(!u&&!f){a.mesh_lod=0,a.texture_lod=0;return}u||(s=!0,o=0);let p=this.renderer.domElement.clientHeight||this.renderer.domElement.height,m=n.geometry.boundingBox;if(n.type===`SkinnedMesh`){let t=n;if(!t.boundingBox)t.computeBoundingBox();else if(this.skinnedMeshAutoUpdateBoundsInterval>0){if(!t[e.$skinnedMeshBoundsOffset]){let n=e.skinnedMeshBoundsFrameOffsetCounter++;t[e.$skinnedMeshBoundsOffset]=n}let n=t[e.$skinnedMeshBoundsOffset];if((r.frames+n)%this.skinnedMeshAutoUpdateBoundsInterval===0){let e=N(t),n=t.geometry;e&&(t.geometry=e),t.computeBoundingBox(),t.geometry=n}}m=t.boundingBox}if(m){let u=t;if(n.geometry.attributes.color&&n.geometry.attributes.color.count<100&&n.geometry.boundingSphere){this._sphere.copy(n.geometry.boundingSphere),this._sphere.applyMatrix4(n.matrixWorld);let e=t.getWorldPosition(this._tempWorldPosition);if(this._sphere.containsPoint(e)){a.mesh_lod=0,a.texture_lod=0;return}}if(this._tempBox.copy(m),this._tempBox.applyMatrix4(n.matrixWorld),u.isPerspectiveCamera&&e.isInside(this._tempBox,this.projectionScreenMatrix)){a.mesh_lod=0,a.texture_lod=0;return}if(this._tempBox.applyMatrix4(this.projectionScreenMatrix),this.renderer.xr.enabled&&u.isPerspectiveCamera&&u.fov>70){let e=this._tempBox.min,t=this._tempBox.max,n=e.x,i=e.y,a=t.x,o=t.y,s=1.5,c=(e.x+t.x)*.5,l=(e.y+t.y)*.5;n=(n-c)*2+c,i=(i-l)*2+l,a=(a-c)*2+c,o=(o-l)*2+l;let u=n<0&&a>0?0:Math.min(Math.abs(e.x),Math.abs(t.x)),d=i<0&&o>0?0:Math.min(Math.abs(e.y),Math.abs(t.y)),f=Math.max(u,d);r.lastCentrality=(s-f)*(s-f)*(s-f)}else r.lastCentrality=1;let d=this._tempBox.getSize(this._tempBoxSize);d.multiplyScalar(.5),screen.availHeight>0&&p>0&&d.multiplyScalar(p/screen.availHeight),t.isPerspectiveCamera?d.x*=t.aspect:t.isOrthographicCamera;let f=t.matrixWorldInverse,h=this._tempBox2;h.copy(m),h.applyMatrix4(n.matrixWorld),h.applyMatrix4(f);let g=h.getSize(this._tempBox2Size),_=Math.max(g.x,g.y);if(Math.max(d.x,d.y)!=0&&_!=0&&(d.z=g.z/Math.max(g.x,g.y)*Math.max(d.x,d.y)),r.lastScreenCoverage=Math.max(d.x,d.y,d.z),r.lastScreenspaceVolume.copy(d),r.lastScreenCoverage*=r.lastCentrality,K&&e.debugDrawLine){let t=this.tempMatrix.copy(this.projectionScreenMatrix);t.invert();let n=e.corner0,r=e.corner1,i=e.corner2,a=e.corner3;n.copy(this._tempBox.min),r.copy(this._tempBox.max),r.x=n.x,i.copy(this._tempBox.max),i.y=n.y,a.copy(this._tempBox.max),n.z=r.z=i.z=a.z=(n.z+a.z)*.5,n.applyMatrix4(t),r.applyMatrix4(t),i.applyMatrix4(t),a.applyMatrix4(t),e.debugDrawLine(n,r,255),e.debugDrawLine(n,i,255),e.debugDrawLine(r,a,255),e.debugDrawLine(i,a,255)}let v=999;if(c&&r.lastScreenCoverage>0)for(let e=0;e0&&fe()&&!t.densities&&!globalThis[`NEEDLE:MISSING_LOD_PRIMITIVE_DENSITIES`]&&(window[`NEEDLE:MISSING_LOD_PRIMITIVE_DENSITIES`]=!0,console.warn(`[Needle Progressive] Detected usage of mesh without primitive densities. This might cause incorrect LOD level selection: Consider re-optimizing your model by updating your Needle Integration, Needle glTF Pipeline or running optimization again on Needle Cloud.`)),n=0;i--){let c=d.lods[i];if(!(e&&c.max_height>=2048)&&!(A()&&c.max_height>4096)&&(c.max_height>o||!s&&i===0)){if(s=!0,a.texture_lod=i,K&&a.texture_lod{e.forEach(e=>{e.addedNodes.forEach(e=>{e instanceof HTMLElement&&e.tagName.toLowerCase()===`model-viewer`&&Ie(e)})})}),$.observe(document,{childList:!0,subtree:!0}))}function Me(){return typeof customElements>`u`?null:customElements.get(`model-viewer`)||(customElements.whenDefined(`model-viewer`).then(()=>{console.debug(`[gltf-progressive] model-viewer defined`),je()}),null)}function Ne(){typeof document>`u`||document.querySelectorAll(`model-viewer`).forEach(e=>{Ie(e)})}var Pe=new WeakSet,Fe=0;function Ie(e){if(!e||Pe.has(e))return null;Pe.add(e),console.debug(`[gltf-progressive] found new model-viewer...`+ ++Fe+` -`,e.getAttribute(`src`));let t=null,n=null,r=null;for(let i=e;i!=null;i=Object.getPrototypeOf(i)){let a=Object.getOwnPropertySymbols(i),o=a.find(e=>e.toString()==`Symbol(renderer)`),s=a.find(e=>e.toString()==`Symbol(scene)`),c=a.find(e=>e.toString()==`Symbol(needsRender)`);!t&&o!=null&&(t=e[o].threeRenderer),!n&&s!=null&&(n=e[s]),!r&&c!=null&&(r=e[c])}if(t&&n){console.debug(`[gltf-progressive] setup model-viewer`);let n=Z.get(t,{engine:`model-viewer`});Z.addPlugin(new Le),n.enable(),n.addEventListener(`changed`,()=>{r?.call(e)}),e.addEventListener(`model-visibility`,t=>{t.detail.visible&&r?.call(e)}),e.addEventListener(`load`,()=>{i()});function i(){if(r){let t=0,n=setInterval(()=>{if(t++>5){clearInterval(n);return}r?.call(e)},300)}}return()=>{n.disable()}}return null}var Le=class{_didWarnAboutMissingUrl=!1;onBeforeUpdateLOD(e,t,n,r){this.tryParseMeshLOD(t,r),this.tryParseTextureLOD(t,r)}getUrl(e){if(!e)return null;let t=e.getAttribute(`src`);return t||=e.src,t||(this._didWarnAboutMissingUrl||console.warn(`No url found in modelviewer`,e),this._didWarnAboutMissingUrl=!0),t}tryGetCurrentGLTF(e){return e._currentGLTF}tryGetCurrentModelViewer(e){return e.element}tryParseTextureLOD(e,t){if(t[Q]==1)return;t[Q]=!0;let n=this.tryGetCurrentGLTF(e),r=this.tryGetCurrentModelViewer(e),i=this.getUrl(r);if(i&&n&&t.material){let e=t.material;if(Array.isArray(e))for(let t of e)r(t);else r(e);function r(e){if(e[Q]==1)return;e[Q]=!0,e.userData&&(e.userData.LOD=-1);let t=Object.keys(e);for(let r=0;rnew W(e));let a=Z.get(n);return i?.enableLODsManager!==!1&&a.enable(),a}if(je(),!ge){let e={gltfProgressive:{useNeedleProgressive:Re,LODsManager:Z,configureLoader:O,getRaycastMesh:N,useRaycastMeshes:ve}};if(!globalThis.Needle)globalThis.Needle=e;else for(let t in e)globalThis.Needle[t]=e[t]}export{O as a,se as c,S as i,W as n,x as o,N as r,oe as s,Z as t}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/gltf-progressive.BBJGcb3s.js.gz b/Needle/MenuScene/dist/assets/gltf-progressive.BBJGcb3s.js.gz deleted file mode 100644 index c164729..0000000 Binary files a/Needle/MenuScene/dist/assets/gltf-progressive.BBJGcb3s.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/gltf-progressive.worker-DbINgLUC.js b/Needle/MenuScene/dist/assets/gltf-progressive.worker-DbINgLUC.js deleted file mode 100644 index b84431f..0000000 --- a/Needle/MenuScene/dist/assets/gltf-progressive.worker-DbINgLUC.js +++ /dev/null @@ -1,3576 +0,0 @@ -(function(){var e=(function(){"use strict";var e=`b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb`,t=`b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb`,n=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),r=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!=`object`)return{supported:!1};var i=WebAssembly.validate(n)?t:e,a,o=WebAssembly.instantiate(s(i),{}).then(function(e){a=e.instance,a.exports.__wasm_call_ctors()});function s(e){for(var t=new Uint8Array(e.length),n=0;n96?i-97:i>64?i-39:i+4}for(var a=0,n=0;n0?h(e,t,n,u[r],l[i]):o.then(function(){var o=new Uint8Array(e*t);return c(a.exports[u[r]],o,e,t,n,a.exports[l[i]]),o})}}})(),t={url:self.location.href}; -/** -* @license -* Copyright 2010-2024 Three.js Authors -* SPDX-License-Identifier: MIT -*/ -let n=`169.19`,r=1e3,i=1001,a=1002,o=1003,s=1004,c=1006,l=1008,u=1009,d=1015,f=1016,p=1022,m=1023,h=1028,g=1030,_=33776,v=33777,y=33778,b=33779,x=37492,S=37496,ee=37808,te=37812,ne=36492,re=2300,ie=2301,ae=2302,oe=2400,se=2401,ce=2402,C=`srgb`,w=`srgb-linear`,le=`display-p3-linear`,ue=`linear`,de=`srgb`,fe=`rec709`,pe=7680,me=35044,he=2e3;var ge=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){if(this._listeners===void 0)return!1;let n=this._listeners;return n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){if(this._listeners===void 0)return;let n=this._listeners[e];if(n!==void 0){let e=n.indexOf(t);e!==-1&&n.splice(e,1)}}dispatchEvent(e){if(this._listeners===void 0)return;let t=this._listeners[e.type];if(t!==void 0){e.target=this;let n=t.slice(0);for(let t=0,r=n.length;t>8&255]+T[e>>16&255]+T[e>>24&255]+`-`+T[t&255]+T[t>>8&255]+`-`+T[t>>16&15|64]+T[t>>24&255]+`-`+T[n&63|128]+T[n>>8&255]+`-`+T[n>>16&255]+T[n>>24&255]+T[r&255]+T[r>>8&255]+T[r>>16&255]+T[r>>24&255]).toLowerCase()}function xe(e,t,n){return Math.max(t,Math.min(n,e))}function Se(e,t){return(e%t+t)%t}function Ce(e,t,n,r,i){return r+(e-t)*(i-r)/(n-t)}function we(e,t,n){return e===t?0:(n-e)/(t-e)}function Te(e,t,n){return(1-n)*e+n*t}function Ee(e,t,n,r){return Te(e,t,1-Math.exp(-n*r))}function De(e,t=1){return t-Math.abs(Se(e,t*2)-t)}function Oe(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*(3-2*e))}function ke(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*e*(e*(e*6-15)+10))}function Ae(e,t){return e+Math.floor(Math.random()*(t-e+1))}function je(e,t){return e+Math.random()*(t-e)}function Me(e){return e*(.5-Math.random())}function Ne(e){e!==void 0&&(_e=e);let t=_e+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function Pe(e){return e*ve}function Fe(e){return e*ye}function Ie(e){return(e&e-1)==0&&e!==0}function Le(e){return 2**Math.ceil(Math.log(e)/Math.LN2)}function Re(e){return 2**Math.floor(Math.log(e)/Math.LN2)}function ze(e,t,n,r,i){let a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((t+r)/2),u=o((t+r)/2),d=a((t-r)/2),f=o((t-r)/2),p=a((r-t)/2),m=o((r-t)/2);switch(i){case`XYX`:e.set(s*u,c*d,c*f,s*l);break;case`YZY`:e.set(c*f,s*u,c*d,s*l);break;case`ZXZ`:e.set(c*d,c*f,s*u,s*l);break;case`XZX`:e.set(s*u,c*m,c*p,s*l);break;case`YXY`:e.set(c*p,s*u,c*m,s*l);break;case`ZYZ`:e.set(c*m,c*p,s*u,s*l);break;default:console.warn(`THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: `+i)}}function Be(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error(`Invalid component type.`)}}function E(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(e*4294967295);case Uint16Array:return Math.round(e*65535);case Uint8Array:return Math.round(e*255);case Int32Array:return Math.round(e*2147483647);case Int16Array:return Math.round(e*32767);case Int8Array:return Math.round(e*127);default:throw Error(`Invalid component type.`)}}let Ve={DEG2RAD:ve,RAD2DEG:ye,generateUUID:be,clamp:xe,euclideanModulo:Se,mapLinear:Ce,inverseLerp:we,lerp:Te,damp:Ee,pingpong:De,smoothstep:Oe,smootherstep:ke,randInt:Ae,randFloat:je,randFloatSpread:Me,seededRandom:Ne,degToRad:Pe,radToDeg:Fe,isPowerOfTwo:Ie,ceilPowerOfTwo:Le,floorPowerOfTwo:Re,setQuaternionFromProperEuler:ze,normalize:E,denormalize:Be};var D=class e{constructor(t=0,n=0){e.prototype.isVector2=!0,this.x=t,this.y=n}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(xe(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},O=class e{constructor(t,n,r,i,a,o,s,c,l){e.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(He.makeScale(e,t)),this}rotate(e){return this.premultiply(He.makeRotation(-e)),this}translate(e,t){return this.premultiply(He.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}};let He=new O;function Ue(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}function We(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}let Ge=new O().set(.8224621,.177538,0,.0331941,.9668058,0,.0170827,.0723974,.9105199),Ke=new O().set(1.2249401,-.2249404,0,-.0420569,1.0420571,0,-.0196376,-.0786361,1.0982735),qe={[w]:{transfer:ue,primaries:fe,luminanceCoefficients:[.2126,.7152,.0722],toReference:e=>e,fromReference:e=>e},[C]:{transfer:de,primaries:fe,luminanceCoefficients:[.2126,.7152,.0722],toReference:e=>e.convertSRGBToLinear(),fromReference:e=>e.convertLinearToSRGB()},[le]:{transfer:ue,primaries:`p3`,luminanceCoefficients:[.2289,.6917,.0793],toReference:e=>e.applyMatrix3(Ke),fromReference:e=>e.applyMatrix3(Ge)},"display-p3":{transfer:de,primaries:`p3`,luminanceCoefficients:[.2289,.6917,.0793],toReference:e=>e.convertSRGBToLinear().applyMatrix3(Ke),fromReference:e=>e.applyMatrix3(Ge).convertLinearToSRGB()}},Je=new Set([w,le]),Ye={enabled:!0,_workingColorSpace:w,get workingColorSpace(){return this._workingColorSpace},set workingColorSpace(e){if(!Je.has(e))throw Error(`Unsupported working color space, "${e}".`);this._workingColorSpace=e},convert:function(e,t,n){if(this.enabled===!1||t===n||!t||!n)return e;let r=qe[t].toReference,i=qe[n].fromReference;return i(r(e))},fromWorkingColorSpace:function(e,t){return this.convert(e,this._workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this._workingColorSpace)},getPrimaries:function(e){return qe[e].primaries},getTransfer:function(e){return e===``?ue:qe[e].transfer},getLuminanceCoefficients:function(e,t=this._workingColorSpace){return e.fromArray(qe[t].luminanceCoefficients)}};function Xe(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function Ze(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}let Qe;var $e=class{static getDataURL(e){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let t;if(e instanceof HTMLCanvasElement)t=e;else{Qe===void 0&&(Qe=We(`canvas`)),Qe.width=e.width,Qe.height=e.height;let n=Qe.getContext(`2d`);e instanceof ImageData?n.putImageData(e,0,0):n.drawImage(e,0,0,e.width,e.height),t=Qe}return t.width>2048||t.height>2048?(console.warn(`THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons`,e),t.toDataURL(`image/jpeg`,.6)):t.toDataURL(`image/png`)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=We(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case r:e.x-=Math.floor(e.x);break;case i:e.x=e.x<0?0:1;break;case a:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case r:e.y-=Math.floor(e.y);break;case i:e.y=e.y<0?0:1;break;case a:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};it.DEFAULT_IMAGE=null,it.DEFAULT_MAPPING=300,it.DEFAULT_ANISOTROPY=4;var k=class e{constructor(t=0,n=0,r=0,i=1){e.prototype.isVector4=!0,this.x=t,this.y=n,this.z=r,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)s&&e>_?e_?s=0?1:-1,r=1-t*t;if(r>2**-52){let i=Math.sqrt(r),a=Math.atan2(i,t*n);e=Math.sin(e*a)/i,o=Math.sin(o*a)/i}let i=o*n;if(s=s*e+d*i,c=c*e+f*i,l=l*e+p*i,u=u*e+m*i,e===1-o){let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:console.warn(`THREE.Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<2**-52?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(xe(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);let n=this._x,r=this._y,i=this._z,a=this._w,o=a*e._w+n*e._x+r*e._y+i*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=a,this._x=n,this._y=r,this._z=i,this;let s=1-o*o;if(s<=2**-52){let e=1-t;return this._w=e*a+t*this._w,this._x=e*n+t*this._x,this._y=e*r+t*this._y,this._z=e*i+t*this._z,this.normalize(),this}let c=Math.sqrt(s),l=Math.atan2(c,o),u=Math.sin((1-t)*l)/c,d=Math.sin(t*l)/c;return this._w=a*u+this._w*d,this._x=n*u+this._x*d,this._y=r*u+this._y*d,this._z=i*u+this._z*d,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},A=class e{constructor(t=0,n=0,r=0){e.prototype.isVector3=!0,this.x=t,this.y=n,this.z=r}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(lt.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(lt.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return ct.copy(this).projectOnVector(e),this.sub(ct)}reflect(e){return this.sub(ct.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(xe(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};let ct=new A,lt=new st;var ut=class{constructor(e=new A(1/0,1/0,1/0),t=new A(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,ft),ft.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(bt),xt.subVectors(this.max,bt),mt.subVectors(e.a,bt),ht.subVectors(e.b,bt),gt.subVectors(e.c,bt),_t.subVectors(ht,mt),vt.subVectors(gt,ht),yt.subVectors(mt,gt);let t=[0,-_t.z,_t.y,0,-vt.z,vt.y,0,-yt.z,yt.y,_t.z,0,-_t.x,vt.z,0,-vt.x,yt.z,0,-yt.x,-_t.y,_t.x,0,-vt.y,vt.x,0,-yt.y,yt.x,0];return!wt(t,mt,ht,gt,xt)||(t=[1,0,0,0,1,0,0,0,1],!wt(t,mt,ht,gt,xt))?!1:(St.crossVectors(_t,vt),t=[St.x,St.y,St.z],wt(t,mt,ht,gt,xt))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,ft).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(ft).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(dt[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),dt[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),dt[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),dt[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),dt[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),dt[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),dt[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),dt[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(dt),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}};let dt=[new A,new A,new A,new A,new A,new A,new A,new A],ft=new A,pt=new ut,mt=new A,ht=new A,gt=new A,_t=new A,vt=new A,yt=new A,bt=new A,xt=new A,St=new A,Ct=new A;function wt(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){Ct.fromArray(e,a);let o=i.x*Math.abs(Ct.x)+i.y*Math.abs(Ct.y)+i.z*Math.abs(Ct.z),s=t.dot(Ct),c=n.dot(Ct),l=r.dot(Ct);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}let Tt=new ut,Et=new A,Dt=new A;var Ot=class{constructor(e=new A,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let n=this.center;t===void 0?Tt.setFromPoints(e).getCenter(n):n.copy(t);let r=0;for(let t=0,i=e.length;tthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius*=e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;Et.subVectors(e,this.center);let t=Et.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),n=(e-this.radius)*.5;this.center.addScaledVector(Et,n/e),this.radius+=n}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Dt.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Et.copy(e.center).add(Dt)),this.expandByPoint(Et.copy(e.center).sub(Dt))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}};let kt=new A,At=new A,jt=new A,Mt=new A,Nt=new A,Pt=new A,Ft=new A;var It=class{constructor(e=new A,t=new A(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,kt)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=kt.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(kt.copy(this.origin).addScaledVector(this.direction,t),kt.distanceToSquared(e))}distanceSqToSegment(e,t,n,r){At.copy(e).add(t).multiplyScalar(.5),jt.copy(t).sub(e).normalize(),Mt.copy(this.origin).sub(At);let i=e.distanceTo(t)*.5,a=-this.direction.dot(jt),o=Mt.dot(this.direction),s=-Mt.dot(jt),c=Mt.lengthSq(),l=Math.abs(1-a*a),u,d,f,p;if(l>0)if(u=a*s-o,d=a*o-s,p=i*l,u>=0)if(d>=-p)if(d<=p){let e=1/l;u*=e,d*=e,f=u*(u+a*d+2*o)+d*(a*u+d+2*s)+c}else d=i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d=-i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d<=-p?(u=Math.max(0,-(-a*i+o)),d=u>0?-i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c):d<=p?(u=0,d=Math.min(Math.max(-i,-s),i),f=d*(d+2*s)+c):(u=Math.max(0,-(a*i+o)),d=u>0?i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c);else d=a>0?-i:i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,u),r&&r.copy(At).addScaledVector(jt,d),f}intersectSphere(e,t){kt.subVectors(e.center,this.origin);let n=kt.dot(this.direction),r=kt.dot(kt)-n*n,i=e.radius*e.radius;if(r>i)return null;let a=Math.sqrt(i-r),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,t):this.at(o,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,d=this.origin;return c>=0?(n=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(n=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),l>=0?(i=(e.min.y-d.y)*l,a=(e.max.y-d.y)*l):(i=(e.max.y-d.y)*l,a=(e.min.y-d.y)*l),n>a||i>r||((i>n||isNaN(n))&&(n=i),(a=0?(o=(e.min.z-d.z)*u,s=(e.max.z-d.z)*u):(o=(e.max.z-d.z)*u,s=(e.min.z-d.z)*u),n>s||o>r)||((o>n||n!==n)&&(n=o),(s=0?n:r,t)}intersectsBox(e){return this.intersectBox(e,kt)!==null}intersectTriangle(e,t,n,r,i){Nt.subVectors(t,e),Pt.subVectors(n,e),Ft.crossVectors(Nt,Pt);let a=this.direction.dot(Ft),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;Mt.subVectors(this.origin,e);let s=o*this.direction.dot(Pt.crossVectors(Mt,Pt));if(s<0)return null;let c=o*this.direction.dot(Nt.cross(Mt));if(c<0||s+c>a)return null;let l=-o*Mt.dot(Ft);return l<0?null:this.at(l/a,i)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},j=class e{constructor(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g){e.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,n=e.elements,r=1/Lt.setFromMatrixColumn(e,0).length(),i=1/Lt.setFromMatrixColumn(e,1).length(),a=1/Lt.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(zt,e,Bt)}lookAt(e,t,n){let r=this.elements;return Ut.subVectors(e,t),Ut.lengthSq()===0&&(Ut.z=1),Ut.normalize(),Vt.crossVectors(n,Ut),Vt.lengthSq()===0&&(Math.abs(n.z)===1?Ut.x+=1e-4:Ut.z+=1e-4,Ut.normalize(),Vt.crossVectors(n,Ut)),Vt.normalize(),Ht.crossVectors(Ut,Vt),r[0]=Vt.x,r[4]=Ht.x,r[8]=Ut.x,r[1]=Vt.y,r[5]=Ht.y,r[9]=Ut.y,r[2]=Vt.z,r[6]=Ht.z,r[10]=Ut.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],ee=r[8],te=r[12],ne=r[1],re=r[5],ie=r[9],ae=r[13],oe=r[2],se=r[6],ce=r[10],C=r[14],w=r[3],le=r[7],ue=r[11],de=r[15];return i[0]=a*x+o*ne+s*oe+c*w,i[4]=a*S+o*re+s*se+c*le,i[8]=a*ee+o*ie+s*ce+c*ue,i[12]=a*te+o*ae+s*C+c*de,i[1]=l*x+u*ne+d*oe+f*w,i[5]=l*S+u*re+d*se+f*le,i[9]=l*ee+u*ie+d*ce+f*ue,i[13]=l*te+u*ae+d*C+f*de,i[2]=p*x+m*ne+h*oe+g*w,i[6]=p*S+m*re+h*se+g*le,i[10]=p*ee+m*ie+h*ce+g*ue,i[14]=p*te+m*ae+h*C+g*de,i[3]=_*x+v*ne+y*oe+b*w,i[7]=_*S+v*re+y*se+b*le,i[11]=_*ee+v*ie+y*ce+b*ue,i[15]=_*te+v*ae+y*C+b*de,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15];return p*(+i*s*u-r*c*u-i*o*d+n*c*d+r*o*f-n*s*f)+m*(+t*s*f-t*c*d+i*a*d-r*a*f+r*c*l-i*s*l)+h*(+t*c*u-t*o*f-i*a*u+n*a*f+i*o*l-n*c*l)+g*(-r*o*l-t*s*u+t*o*d+r*a*u-n*a*d+n*s*l)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=u*h*c-m*d*c+m*s*f-o*h*f-u*s*g+o*d*g,v=p*d*c-l*h*c-p*s*f+a*h*f+l*s*g-a*d*g,y=l*m*c-p*u*c+p*o*f-a*m*f-l*o*g+a*u*g,b=p*u*s-l*m*s-p*o*d+a*m*d+l*o*h-a*u*h,x=t*_+n*v+r*y+i*b;if(x===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let S=1/x;return e[0]=_*S,e[1]=(m*d*i-u*h*i-m*r*f+n*h*f+u*r*g-n*d*g)*S,e[2]=(o*h*i-m*s*i+m*r*c-n*h*c-o*r*g+n*s*g)*S,e[3]=(u*s*i-o*d*i-u*r*c+n*d*c+o*r*f-n*s*f)*S,e[4]=v*S,e[5]=(l*h*i-p*d*i+p*r*f-t*h*f-l*r*g+t*d*g)*S,e[6]=(p*s*i-a*h*i-p*r*c+t*h*c+a*r*g-t*s*g)*S,e[7]=(a*d*i-l*s*i+l*r*c-t*d*c-a*r*f+t*s*f)*S,e[8]=y*S,e[9]=(p*u*i-l*m*i-p*n*f+t*m*f+l*n*g-t*u*g)*S,e[10]=(a*m*i-p*o*i+p*n*c-t*m*c-a*n*g+t*o*g)*S,e[11]=(l*o*i-a*u*i-l*n*c+t*u*c+a*n*f-t*o*f)*S,e[12]=b*S,e[13]=(l*m*r-p*u*r+p*n*d-t*m*d-l*n*h+t*u*h)*S,e[14]=(p*o*r-a*m*r-p*n*s+t*m*s+a*n*h-t*o*h)*S,e[15]=(a*u*r-l*o*r+l*n*s-t*u*s-a*n*d+t*o*d)*S,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements,i=Lt.set(r[0],r[1],r[2]).length(),a=Lt.set(r[4],r[5],r[6]).length(),o=Lt.set(r[8],r[9],r[10]).length();this.determinant()<0&&(i=-i),e.x=r[12],e.y=r[13],e.z=r[14],Rt.copy(this);let s=1/i,c=1/a,l=1/o;return Rt.elements[0]*=s,Rt.elements[1]*=s,Rt.elements[2]*=s,Rt.elements[4]*=c,Rt.elements[5]*=c,Rt.elements[6]*=c,Rt.elements[8]*=l,Rt.elements[9]*=l,Rt.elements[10]*=l,t.setFromRotationMatrix(Rt),n.x=i,n.y=a,n.z=o,this}makePerspective(e,t,n,r,i,a,o=he){let s=this.elements,c=2*i/(t-e),l=2*i/(n-r),u=(t+e)/(t-e),d=(n+r)/(n-r),f,p;if(o===2e3)f=-(a+i)/(a-i),p=-2*a*i/(a-i);else if(o===2001)f=-a/(a-i),p=-a*i/(a-i);else throw Error(`THREE.Matrix4.makePerspective(): Invalid coordinate system: `+o);return s[0]=c,s[4]=0,s[8]=u,s[12]=0,s[1]=0,s[5]=l,s[9]=d,s[13]=0,s[2]=0,s[6]=0,s[10]=f,s[14]=p,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=he){let s=this.elements,c=1/(t-e),l=1/(n-r),u=1/(a-i),d=(t+e)*c,f=(n+r)*l,p,m;if(o===2e3)p=(a+i)*u,m=-2*u;else if(o===2001)p=i*u,m=-1*u;else throw Error(`THREE.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return s[0]=2*c,s[4]=0,s[8]=0,s[12]=-d,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-f,s[2]=0,s[6]=0,s[10]=m,s[14]=-p,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}};let Lt=new A,Rt=new j,zt=new A(0,0,0),Bt=new A(1,1,1),Vt=new A,Ht=new A,Ut=new A,Wt=new j,Gt=new st;var Kt=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(xe(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-xe(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(xe(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-xe(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(xe(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-xe(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:console.warn(`THREE.Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return Wt.makeRotationFromQuaternion(e),this.setFromRotationMatrix(Wt,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Gt.setFromEuler(this),this.setFromQuaternion(Gt,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Kt.DEFAULT_ORDER=`XYZ`;var qt=class{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<1){for(let e=0;e1){for(let e=0;e0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.visibility=this._visibility,r.active=this._active,r.bounds=this._bounds.map(e=>({boxInitialized:e.boxInitialized,boxMin:e.box.min.toArray(),boxMax:e.box.max.toArray(),sphereInitialized:e.sphereInitialized,sphereRadius:e.sphere.radius,sphereCenter:e.sphere.center.toArray()})),r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.geometryCount=this._geometryCount,r.matricesTexture=this._matricesTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere={center:r.boundingSphere.center.toArray(),radius:r.boundingSphere.radius}),this.boundingBox!==null&&(r.boundingBox={min:r.boundingBox.min.toArray(),max:r.boundingBox.max.toArray()}));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t0){r.children=[];for(let t=0;t0){r.animations=[];for(let t=0;t0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}static getBarycoord(e,t,n,r,i){un.subVectors(r,t),dn.subVectors(n,t),fn.subVectors(e,t);let a=un.dot(un),o=un.dot(dn),s=un.dot(fn),c=dn.dot(dn),l=dn.dot(fn),u=a*c-o*o;if(u===0)return i.set(0,0,0),null;let d=1/u,f=(c*s-o*l)*d,p=(a*l-o*s)*d;return i.set(1-f-p,p,f)}static containsPoint(e,t,n,r){return this.getBarycoord(e,t,n,r,pn)===null?!1:pn.x>=0&&pn.y>=0&&pn.x+pn.y<=1}static getInterpolation(e,t,n,r,i,a,o,s){return this.getBarycoord(e,t,n,r,pn)===null?(s.x=0,s.y=0,`z`in s&&(s.z=0),`w`in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(i,pn.x),s.addScaledVector(a,pn.y),s.addScaledVector(o,pn.z),s)}static getInterpolatedAttribute(e,t,n,r,i,a){return bn.setScalar(0),xn.setScalar(0),Sn.setScalar(0),bn.fromBufferAttribute(e,t),xn.fromBufferAttribute(e,n),Sn.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(bn,i.x),a.addScaledVector(xn,i.y),a.addScaledVector(Sn,i.z),a}static isFrontFacing(e,t,n,r){return un.subVectors(n,t),dn.subVectors(e,t),un.cross(dn).dot(r)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,r){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,n,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return un.subVectors(this.c,this.b),dn.subVectors(this.a,this.b),un.cross(dn).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return e.getNormal(this.a,this.b,this.c,t)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,n){return e.getBarycoord(t,this.a,this.b,this.c,n)}getInterpolation(t,n,r,i,a){return e.getInterpolation(t,this.a,this.b,this.c,n,r,i,a)}containsPoint(t){return e.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return e.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,r=this.b,i=this.c,a,o;mn.subVectors(r,n),hn.subVectors(i,n),_n.subVectors(e,n);let s=mn.dot(_n),c=hn.dot(_n);if(s<=0&&c<=0)return t.copy(n);vn.subVectors(e,r);let l=mn.dot(vn),u=hn.dot(vn);if(l>=0&&u<=l)return t.copy(r);let d=s*u-l*c;if(d<=0&&s>=0&&l<=0)return a=s/(s-l),t.copy(n).addScaledVector(mn,a);yn.subVectors(e,i);let f=mn.dot(yn),p=hn.dot(yn);if(p>=0&&f<=p)return t.copy(i);let m=f*c-s*p;if(m<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(n).addScaledVector(hn,o);let h=l*p-f*u;if(h<=0&&u-l>=0&&f-p>=0)return gn.subVectors(i,r),o=(u-l)/(u-l+(f-p)),t.copy(r).addScaledVector(gn,o);let g=1/(h+m+d);return a=m*g,o=d*g,t.copy(n).addScaledVector(mn,a).addScaledVector(hn,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}};let wn={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Tn={h:0,s:0,l:0},En={h:0,s:0,l:0};function Dn(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var N=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=C){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,Ye.toWorkingColorSpace(this,t),this}setRGB(e,t,n,r=Ye.workingColorSpace){return this.r=e,this.g=t,this.b=n,Ye.toWorkingColorSpace(this,r),this}setHSL(e,t,n,r=Ye.workingColorSpace){if(e=Se(e,1),t=xe(t,0,1),n=xe(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=Dn(i,r,e+1/3),this.g=Dn(i,r,e),this.b=Dn(i,r,e-1/3)}return Ye.toWorkingColorSpace(this,r),this}setStyle(e,t=C){function n(t){t!==void 0&&parseFloat(t)<1&&console.warn(`THREE.Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:console.warn(`THREE.Color: Unknown color model `+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);console.warn(`THREE.Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=C){let n=wn[e.toLowerCase()];return n===void 0?console.warn(`THREE.Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Xe(e.r),this.g=Xe(e.g),this.b=Xe(e.b),this}copyLinearToSRGB(e){return this.r=Ze(e.r),this.g=Ze(e.g),this.b=Ze(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=C){return Ye.fromWorkingColorSpace(P.copy(this),e),Math.round(xe(P.r*255,0,255))*65536+Math.round(xe(P.g*255,0,255))*256+Math.round(xe(P.b*255,0,255))}getHexString(e=C){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=Ye.workingColorSpace){Ye.fromWorkingColorSpace(P.copy(this),t);let n=P.r,r=P.g,i=P.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r0!=e>0&&this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let n=e[t];if(n===void 0){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}r&&r.isColor?r.set(n):r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;t&&(e={textures:{},images:{}});let n={metadata:{version:4.6,type:`Material`,generator:`Material.toJSON`}};n.uuid=this.uuid,n.type=this.type,this.name!==``&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.shadowSide!==null&&(n.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==1&&(n.blending=this.blending),this.side!==0&&(n.side=this.side),this.vertexColors===!0&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.transparent===!0&&(n.transparent=!0),this.blendSrc!==204&&(n.blendSrc=this.blendSrc),this.blendDst!==205&&(n.blendDst=this.blendDst),this.blendEquation!==100&&(n.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(n.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(n.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(n.blendAlpha=this.blendAlpha),this.depthFunc!==3&&(n.depthFunc=this.depthFunc),this.depthTest===!1&&(n.depthTest=this.depthTest),this.depthWrite===!1&&(n.depthWrite=this.depthWrite),this.colorWrite===!1&&(n.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(n.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==519&&(n.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(n.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==7680&&(n.stencilFail=this.stencilFail),this.stencilZFail!==7680&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==7680&&(n.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(n.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(n.rotation=this.rotation),this.polygonOffset===!0&&(n.polygonOffset=!0),this.polygonOffsetFactor!==0&&(n.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(n.linewidth=this.linewidth),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.dithering===!0&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),this.alphaHash===!0&&(n.alphaHash=!0),this.alphaToCoverage===!0&&(n.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(n.premultipliedAlpha=!0),this.forceSinglePass===!0&&(n.forceSinglePass=!0),this.wireframe===!0&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!==`round`&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!==`round`&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(n.flatShading=!0),this.visible===!1&&(n.visible=!1),this.toneMapped===!1&&(n.toneMapped=!1),this.fog===!1&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData);function r(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(t){let t=r(e.textures),i=r(e.images);t.length>0&&(n.textures=t),i.length>0&&(n.images=i)}return n}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(t!==null){let e=t.length;n=Array(e);for(let r=0;r!==e;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:`dispose`})}set needsUpdate(e){e===!0&&this.version++}},An=class extends kn{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type=`MeshBasicMaterial`,this.color=new N(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Kt,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}};let F=new A,jn=new D;var Mn=class{constructor(e,t,n=!1){if(Array.isArray(e))throw TypeError(`THREE.BufferAttribute: array should be a Typed Array.`);this.isBufferAttribute=!0,this.name=``,this.array=e,this.itemSize=t,this.count=e===void 0?0:e.length/t,this.normalized=n,this.usage=me,this.updateRanges=[],this.gpuType=d,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let r=0,i=this.itemSize;r0&&(e.userData=this.userData),this.parameters!==void 0){let t=this.parameters;for(let n in t)t[n]!==void 0&&(e[n]=t[n]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let t in n){let r=n[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},i=!1;for(let t in this.morphAttributes){let n=this.morphAttributes[t],a=[];for(let t=0,r=n.length;t0&&(r[t]=a,i=!0)}i&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return o!==null&&(e.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;n!==null&&this.setIndex(n.clone(t));let r=e.attributes;for(let e in r){let n=r[e];this.setAttribute(e,n.clone(t))}let i=e.morphAttributes;for(let e in i){let n=[],r=i[e];for(let e=0,i=r.length;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e(e.far-e.near)**2))&&(Un.copy(i).invert(),Wn.copy(e.ray).applyMatrix4(Un),!(n.boundingBox!==null&&Wn.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(e,t,Wn)))}_computeIntersections(e,t,n){let r,i=this.geometry,a=this.material,o=i.index,s=i.attributes.position,c=i.attributes.uv,l=i.attributes.uv1,u=i.attributes.normal,d=i.groups,f=i.drawRange;if(o!==null)if(Array.isArray(a))for(let i=0,s=d.length;in.far?null:{distance:l,point:$n.clone(),object:e}}function nr(e,t,n,r,i,a,o,s,c,l){e.getVertexPosition(s,qn),e.getVertexPosition(c,Jn),e.getVertexPosition(l,Yn);let u=tr(e,t,n,r,qn,Jn,Yn,Qn);if(u){let e=new A;Cn.getBarycoord(Qn,qn,Jn,Yn,e),i&&(u.uv=Cn.getInterpolatedAttribute(i,s,c,l,e,new D)),a&&(u.uv1=Cn.getInterpolatedAttribute(a,s,c,l,e,new D)),o&&(u.normal=Cn.getInterpolatedAttribute(o,s,c,l,e,new A),u.normal.dot(r.direction)>0&&u.normal.multiplyScalar(-1));let t={a:s,b:c,c:l,normal:new A,materialIndex:0};Cn.getNormal(qn,Jn,Yn,t.normal),u.face=t,u.barycoord=e}return u}function rr(e){let t={};for(let n in e){t[n]={};for(let r in e[n]){let i=e[n][r];i&&(i.isColor||i.isMatrix3||i.isMatrix4||i.isVector2||i.isVector3||i.isVector4||i.isTexture||i.isQuaternion)?i.isRenderTargetTexture?(console.warn(`UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().`),t[n][r]=null):t[n][r]=i.clone():Array.isArray(i)?t[n][r]=i.slice():t[n][r]=i}}return t}function ir(e){let t={};for(let n=0;n1?null:t.copy(e.start).addScaledVector(n,i)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||hr.getNormalMatrix(e),r=this.coplanarPoint(pr).applyMatrix4(e),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}};let _r=new Ot,vr=new A;var yr=class{constructor(e=new gr,t=new gr,n=new gr,r=new gr,i=new gr,a=new gr){this.planes=[e,t,n,r,i,a]}set(e,t,n,r,i,a){let o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(n),o[3].copy(r),o[4].copy(i),o[5].copy(a),this}copy(e){let t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=he){let n=this.planes,r=e.elements,i=r[0],a=r[1],o=r[2],s=r[3],c=r[4],l=r[5],u=r[6],d=r[7],f=r[8],p=r[9],m=r[10],h=r[11],g=r[12],_=r[13],v=r[14],y=r[15];if(n[0].setComponents(s-i,d-c,h-f,y-g).normalize(),n[1].setComponents(s+i,d+c,h+f,y+g).normalize(),n[2].setComponents(s+a,d+l,h+p,y+_).normalize(),n[3].setComponents(s-a,d-l,h-p,y-_).normalize(),n[4].setComponents(s-o,d-u,h-m,y-v).normalize(),t===2e3)n[5].setComponents(s+o,d+u,h+m,y+v).normalize();else if(t===2001)n[5].setComponents(o,u,m,v).normalize();else throw Error(`THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: `+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),_r.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),_r.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(_r)}intersectsSprite(e){return _r.center.set(0,0,0),_r.radius=.7071067811865476,_r.applyMatrix4(e.matrixWorld),this.intersectsSphere(_r)}intersectsSphere(e){let t=this.planes,n=e.center,r=-e.radius;for(let e=0;e<6;e++)if(t[e].distanceToPoint(n)0?e.max.x:e.min.x,vr.y=r.normal.y>0?e.max.y:e.min.y,vr.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(vr)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}};let L={alphahash_fragment:`#ifdef USE_ALPHAHASH - if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard; -#endif`,alphahash_pars_fragment:`#ifdef USE_ALPHAHASH - const float ALPHA_HASH_SCALE = 0.05; - float hash2D( vec2 value ) { - return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) ); - } - float hash3D( vec3 value ) { - return hash2D( vec2( hash2D( value.xy ), value.z ) ); - } - float getAlphaHashThreshold( vec3 position ) { - float maxDeriv = max( - length( dFdx( position.xyz ) ), - length( dFdy( position.xyz ) ) - ); - float pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv ); - vec2 pixScales = vec2( - exp2( floor( log2( pixScale ) ) ), - exp2( ceil( log2( pixScale ) ) ) - ); - vec2 alpha = vec2( - hash3D( floor( pixScales.x * position.xyz ) ), - hash3D( floor( pixScales.y * position.xyz ) ) - ); - float lerpFactor = fract( log2( pixScale ) ); - float x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y; - float a = min( lerpFactor, 1.0 - lerpFactor ); - vec3 cases = vec3( - x * x / ( 2.0 * a * ( 1.0 - a ) ), - ( x - 0.5 * a ) / ( 1.0 - a ), - 1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) ) - ); - float threshold = ( x < ( 1.0 - a ) ) - ? ( ( x < a ) ? cases.x : cases.y ) - : cases.z; - return clamp( threshold , 1.0e-6, 1.0 ); - } -#endif`,alphamap_fragment:`#ifdef USE_ALPHAMAP - diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g; -#endif`,alphamap_pars_fragment:`#ifdef USE_ALPHAMAP - uniform sampler2D alphaMap; -#endif`,alphatest_fragment:`#ifdef USE_ALPHATEST - #ifdef ALPHA_TO_COVERAGE - diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a ); - if ( diffuseColor.a == 0.0 ) discard; - #else - if ( diffuseColor.a < alphaTest ) discard; - #endif -#endif`,alphatest_pars_fragment:`#ifdef USE_ALPHATEST - uniform float alphaTest; -#endif`,aomap_fragment:`#ifdef USE_AOMAP - float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0; - reflectedLight.indirectDiffuse *= ambientOcclusion; - #if defined( USE_CLEARCOAT ) - clearcoatSpecularIndirect *= ambientOcclusion; - #endif - #if defined( USE_SHEEN ) - sheenSpecularIndirect *= ambientOcclusion; - #endif - #if defined( USE_ENVMAP ) && defined( STANDARD ) - float dotNV = saturate( dot( geometryNormal, geometryViewDir ) ); - reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); - #endif -#endif`,aomap_pars_fragment:`#ifdef USE_AOMAP - uniform sampler2D aoMap; - uniform float aoMapIntensity; -#endif`,batching_pars_vertex:`#ifdef USE_BATCHING - #if ! defined( GL_ANGLE_multi_draw ) - #define gl_DrawID _gl_DrawID - uniform int _gl_DrawID; - #endif - uniform highp sampler2D batchingTexture; - uniform highp usampler2D batchingIdTexture; - mat4 getBatchingMatrix( const in float i ) { - int size = textureSize( batchingTexture, 0 ).x; - int j = int( i ) * 4; - int x = j % size; - int y = j / size; - vec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 ); - vec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 ); - vec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 ); - vec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 ); - return mat4( v1, v2, v3, v4 ); - } - float getIndirectIndex( const in int i ) { - int size = textureSize( batchingIdTexture, 0 ).x; - int x = i % size; - int y = i / size; - return float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r ); - } -#endif -#ifdef USE_BATCHING_COLOR - uniform sampler2D batchingColorTexture; - vec3 getBatchingColor( const in float i ) { - int size = textureSize( batchingColorTexture, 0 ).x; - int j = int( i ); - int x = j % size; - int y = j / size; - return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb; - } -#endif`,batching_vertex:`#ifdef USE_BATCHING - mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) ); -#endif`,begin_vertex:`vec3 transformed = vec3( position ); -#ifdef USE_ALPHAHASH - vPosition = vec3( position ); -#endif`,beginnormal_vertex:`vec3 objectNormal = vec3( normal ); -#ifdef USE_TANGENT - vec3 objectTangent = vec3( tangent.xyz ); -#endif`,bsdfs:`float G_BlinnPhong_Implicit( ) { - return 0.25; -} -float D_BlinnPhong( const in float shininess, const in float dotNH ) { - return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess ); -} -vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) { - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( specularColor, 1.0, dotVH ); - float G = G_BlinnPhong_Implicit( ); - float D = D_BlinnPhong( shininess, dotNH ); - return F * ( G * D ); -} // validated`,iridescence_fragment:`#ifdef USE_IRIDESCENCE - const mat3 XYZ_TO_REC709 = mat3( - 3.2404542, -0.9692660, 0.0556434, - -1.5371385, 1.8760108, -0.2040259, - -0.4985314, 0.0415560, 1.0572252 - ); - vec3 Fresnel0ToIor( vec3 fresnel0 ) { - vec3 sqrtF0 = sqrt( fresnel0 ); - return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 ); - } - vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) { - return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) ); - } - float IorToFresnel0( float transmittedIor, float incidentIor ) { - return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor )); - } - vec3 evalSensitivity( float OPD, vec3 shift ) { - float phase = 2.0 * PI * OPD * 1.0e-9; - vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 ); - vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 ); - vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 ); - vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var ); - xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) ); - xyz /= 1.0685e-7; - vec3 rgb = XYZ_TO_REC709 * xyz; - return rgb; - } - vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) { - vec3 I; - float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) ); - float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) ); - float cosTheta2Sq = 1.0 - sinTheta2Sq; - if ( cosTheta2Sq < 0.0 ) { - return vec3( 1.0 ); - } - float cosTheta2 = sqrt( cosTheta2Sq ); - float R0 = IorToFresnel0( iridescenceIOR, outsideIOR ); - float R12 = F_Schlick( R0, 1.0, cosTheta1 ); - float T121 = 1.0 - R12; - float phi12 = 0.0; - if ( iridescenceIOR < outsideIOR ) phi12 = PI; - float phi21 = PI - phi12; - vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR ); - vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 ); - vec3 phi23 = vec3( 0.0 ); - if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI; - if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI; - if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI; - float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2; - vec3 phi = vec3( phi21 ) + phi23; - vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 ); - vec3 r123 = sqrt( R123 ); - vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 ); - vec3 C0 = R12 + Rs; - I = C0; - vec3 Cm = Rs - T121; - for ( int m = 1; m <= 2; ++ m ) { - Cm *= r123; - vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi ); - I += Cm * Sm; - } - return max( I, vec3( 0.0 ) ); - } -#endif`,bumpmap_pars_fragment:`#ifdef USE_BUMPMAP - uniform sampler2D bumpMap; - uniform float bumpScale; - vec2 dHdxy_fwd() { - vec2 dSTdx = dFdx( vBumpMapUv ); - vec2 dSTdy = dFdy( vBumpMapUv ); - float Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x; - float dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll; - float dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll; - return vec2( dBx, dBy ); - } - vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) { - vec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) ); - vec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) ); - vec3 vN = surf_norm; - vec3 R1 = cross( vSigmaY, vN ); - vec3 R2 = cross( vN, vSigmaX ); - float fDet = dot( vSigmaX, R1 ) * faceDirection; - vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); - return normalize( abs( fDet ) * surf_norm - vGrad ); - } -#endif`,clipping_planes_fragment:`#if NUM_CLIPPING_PLANES > 0 - vec4 plane; - #ifdef ALPHA_TO_COVERAGE - float distanceToPlane, distanceGradient; - float clipOpacity = 1.0; - #pragma unroll_loop_start - for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w; - distanceGradient = fwidth( distanceToPlane ) / 2.0; - clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane ); - if ( clipOpacity == 0.0 ) discard; - } - #pragma unroll_loop_end - #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES - float unionClipOpacity = 1.0; - #pragma unroll_loop_start - for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w; - distanceGradient = fwidth( distanceToPlane ) / 2.0; - unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane ); - } - #pragma unroll_loop_end - clipOpacity *= 1.0 - unionClipOpacity; - #endif - diffuseColor.a *= clipOpacity; - if ( diffuseColor.a == 0.0 ) discard; - #else - #pragma unroll_loop_start - for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard; - } - #pragma unroll_loop_end - #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES - bool clipped = true; - #pragma unroll_loop_start - for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped; - } - #pragma unroll_loop_end - if ( clipped ) discard; - #endif - #endif -#endif`,clipping_planes_pars_fragment:`#if NUM_CLIPPING_PLANES > 0 - varying vec3 vClipPosition; - uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,clipping_planes_pars_vertex:`#if NUM_CLIPPING_PLANES > 0 - varying vec3 vClipPosition; -#endif`,clipping_planes_vertex:`#if NUM_CLIPPING_PLANES > 0 - vClipPosition = - mvPosition.xyz; -#endif`,color_fragment:`#if defined( USE_COLOR_ALPHA ) - diffuseColor *= vColor; -#elif defined( USE_COLOR ) - diffuseColor.rgb *= vColor; -#endif`,color_pars_fragment:`#if defined( USE_COLOR_ALPHA ) - varying vec4 vColor; -#elif defined( USE_COLOR ) - varying vec3 vColor; -#endif`,color_pars_vertex:`#if defined( USE_COLOR_ALPHA ) - varying vec4 vColor; -#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) - varying vec3 vColor; -#endif`,color_vertex:`#if defined( USE_COLOR_ALPHA ) - vColor = vec4( 1.0 ); -#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) - vColor = vec3( 1.0 ); -#endif -#ifdef USE_COLOR - vColor *= color; -#endif -#ifdef USE_INSTANCING_COLOR - vColor.xyz *= instanceColor.xyz; -#endif -#ifdef USE_BATCHING_COLOR - vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) ); - vColor.xyz *= batchingColor.xyz; -#endif`,common:`#define PI 3.141592653589793 -#define PI2 6.283185307179586 -#define PI_HALF 1.5707963267948966 -#define RECIPROCAL_PI 0.3183098861837907 -#define RECIPROCAL_PI2 0.15915494309189535 -#define EPSILON 1e-6 -#ifndef saturate -#define saturate( a ) clamp( a, 0.0, 1.0 ) -#endif -#define whiteComplement( a ) ( 1.0 - saturate( a ) ) -float pow2( const in float x ) { return x*x; } -vec3 pow2( const in vec3 x ) { return x*x; } -float pow3( const in float x ) { return x*x*x; } -float pow4( const in float x ) { float x2 = x*x; return x2*x2; } -float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); } -float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); } -highp float rand( const in vec2 uv ) { - const highp float a = 12.9898, b = 78.233, c = 43758.5453; - highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); - return fract( sin( sn ) * c ); -} -#ifdef HIGH_PRECISION - float precisionSafeLength( vec3 v ) { return length( v ); } -#else - float precisionSafeLength( vec3 v ) { - float maxComponent = max3( abs( v ) ); - return length( v / maxComponent ) * maxComponent; - } -#endif -struct IncidentLight { - vec3 color; - vec3 direction; - bool visible; -}; -struct ReflectedLight { - vec3 directDiffuse; - vec3 directSpecular; - vec3 indirectDiffuse; - vec3 indirectSpecular; -}; -#ifdef USE_ALPHAHASH - varying vec3 vPosition; -#endif -vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); -} -vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) { - return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); -} -mat3 transposeMat3( const in mat3 m ) { - mat3 tmp; - tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); - tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); - tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); - return tmp; -} -bool isPerspectiveMatrix( mat4 m ) { - return m[ 2 ][ 3 ] == - 1.0; -} -vec2 equirectUv( in vec3 dir ) { - float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5; - float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5; - return vec2( u, v ); -} -vec3 BRDF_Lambert( const in vec3 diffuseColor ) { - return RECIPROCAL_PI * diffuseColor; -} -vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { - float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} -float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { - float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} // validated`,cube_uv_reflection_fragment:`#ifdef ENVMAP_TYPE_CUBE_UV - #define cubeUV_minMipLevel 4.0 - #define cubeUV_minTileSize 16.0 - float getFace( vec3 direction ) { - vec3 absDirection = abs( direction ); - float face = - 1.0; - if ( absDirection.x > absDirection.z ) { - if ( absDirection.x > absDirection.y ) - face = direction.x > 0.0 ? 0.0 : 3.0; - else - face = direction.y > 0.0 ? 1.0 : 4.0; - } else { - if ( absDirection.z > absDirection.y ) - face = direction.z > 0.0 ? 2.0 : 5.0; - else - face = direction.y > 0.0 ? 1.0 : 4.0; - } - return face; - } - vec2 getUV( vec3 direction, float face ) { - vec2 uv; - if ( face == 0.0 ) { - uv = vec2( direction.z, direction.y ) / abs( direction.x ); - } else if ( face == 1.0 ) { - uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); - } else if ( face == 2.0 ) { - uv = vec2( - direction.x, direction.y ) / abs( direction.z ); - } else if ( face == 3.0 ) { - uv = vec2( - direction.z, direction.y ) / abs( direction.x ); - } else if ( face == 4.0 ) { - uv = vec2( - direction.x, direction.z ) / abs( direction.y ); - } else { - uv = vec2( direction.x, direction.y ) / abs( direction.z ); - } - return 0.5 * ( uv + 1.0 ); - } - vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) { - float face = getFace( direction ); - float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 ); - mipInt = max( mipInt, cubeUV_minMipLevel ); - float faceSize = exp2( mipInt ); - highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; - if ( face > 2.0 ) { - uv.y += faceSize; - face -= 3.0; - } - uv.x += face * faceSize; - uv.x += filterInt * 3.0 * cubeUV_minTileSize; - uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); - uv.x *= CUBEUV_TEXEL_WIDTH; - uv.y *= CUBEUV_TEXEL_HEIGHT; - #ifdef texture2DGradEXT - return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; - #else - return texture2D( envMap, uv ).rgb; - #endif - } - #define cubeUV_r0 1.0 - #define cubeUV_m0 - 2.0 - #define cubeUV_r1 0.8 - #define cubeUV_m1 - 1.0 - #define cubeUV_r4 0.4 - #define cubeUV_m4 2.0 - #define cubeUV_r5 0.305 - #define cubeUV_m5 3.0 - #define cubeUV_r6 0.21 - #define cubeUV_m6 4.0 - float roughnessToMip( float roughness ) { - float mip = 0.0; - if ( roughness >= cubeUV_r1 ) { - mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; - } else if ( roughness >= cubeUV_r4 ) { - mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; - } else if ( roughness >= cubeUV_r5 ) { - mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; - } else if ( roughness >= cubeUV_r6 ) { - mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; - } else { - mip = - 2.0 * log2( 1.16 * roughness ); } - return mip; - } - vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) { - float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); - float mipF = fract( mip ); - float mipInt = floor( mip ); - vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt ); - if ( mipF == 0.0 ) { - return vec4( color0, 1.0 ); - } else { - vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 ); - return vec4( mix( color0, color1, mipF ), 1.0 ); - } - } -#endif`,defaultnormal_vertex:`vec3 transformedNormal = objectNormal; -#ifdef USE_TANGENT - vec3 transformedTangent = objectTangent; -#endif -#ifdef USE_BATCHING - mat3 bm = mat3( batchingMatrix ); - transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) ); - transformedNormal = bm * transformedNormal; - #ifdef USE_TANGENT - transformedTangent = bm * transformedTangent; - #endif -#endif -#ifdef USE_INSTANCING - mat3 im = mat3( instanceMatrix ); - transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) ); - transformedNormal = im * transformedNormal; - #ifdef USE_TANGENT - transformedTangent = im * transformedTangent; - #endif -#endif -transformedNormal = normalMatrix * transformedNormal; -#ifdef FLIP_SIDED - transformedNormal = - transformedNormal; -#endif -#ifdef USE_TANGENT - transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz; - #ifdef FLIP_SIDED - transformedTangent = - transformedTangent; - #endif -#endif`,displacementmap_pars_vertex:`#ifdef USE_DISPLACEMENTMAP - uniform sampler2D displacementMap; - uniform float displacementScale; - uniform float displacementBias; -#endif`,displacementmap_vertex:`#ifdef USE_DISPLACEMENTMAP - transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,emissivemap_fragment:`#ifdef USE_EMISSIVEMAP - vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); - totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,emissivemap_pars_fragment:`#ifdef USE_EMISSIVEMAP - uniform sampler2D emissiveMap; -#endif`,colorspace_fragment:`gl_FragColor = linearToOutputTexel( gl_FragColor );`,colorspace_pars_fragment:` -const mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3( - vec3( 0.8224621, 0.177538, 0.0 ), - vec3( 0.0331941, 0.9668058, 0.0 ), - vec3( 0.0170827, 0.0723974, 0.9105199 ) -); -const mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3( - vec3( 1.2249401, - 0.2249404, 0.0 ), - vec3( - 0.0420569, 1.0420571, 0.0 ), - vec3( - 0.0196376, - 0.0786361, 1.0982735 ) -); -vec4 LinearSRGBToLinearDisplayP3( in vec4 value ) { - return vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a ); -} -vec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) { - return vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a ); -} -vec4 LinearTransferOETF( in vec4 value ) { - return value; -} -vec4 sRGBTransferOETF( in vec4 value ) { - return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); -}`,envmap_fragment:`#ifdef USE_ENVMAP - #ifdef ENV_WORLDPOS - vec3 cameraToFrag; - if ( isOrthographic ) { - cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); - } else { - cameraToFrag = normalize( vWorldPosition - cameraPosition ); - } - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - #ifdef ENVMAP_MODE_REFLECTION - vec3 reflectVec = reflect( cameraToFrag, worldNormal ); - #else - vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio ); - #endif - #else - vec3 reflectVec = vReflect; - #endif - #ifdef ENVMAP_TYPE_CUBE - vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) ); - #else - vec4 envColor = vec4( 0.0 ); - #endif - #ifdef ENVMAP_BLENDING_MULTIPLY - outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity ); - #elif defined( ENVMAP_BLENDING_MIX ) - outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity ); - #elif defined( ENVMAP_BLENDING_ADD ) - outgoingLight += envColor.xyz * specularStrength * reflectivity; - #endif -#endif`,envmap_common_pars_fragment:`#ifdef USE_ENVMAP - uniform float envMapIntensity; - uniform float flipEnvMap; - uniform mat3 envMapRotation; - #ifdef ENVMAP_TYPE_CUBE - uniform samplerCube envMap; - #else - uniform sampler2D envMap; - #endif - -#endif`,envmap_pars_fragment:`#ifdef USE_ENVMAP - uniform float reflectivity; - #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) - #define ENV_WORLDPOS - #endif - #ifdef ENV_WORLDPOS - varying vec3 vWorldPosition; - uniform float refractionRatio; - #else - varying vec3 vReflect; - #endif -#endif`,envmap_pars_vertex:`#ifdef USE_ENVMAP - #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) - #define ENV_WORLDPOS - #endif - #ifdef ENV_WORLDPOS - - varying vec3 vWorldPosition; - #else - varying vec3 vReflect; - uniform float refractionRatio; - #endif -#endif`,envmap_physical_pars_fragment:`#ifdef USE_ENVMAP - vec3 getIBLIrradiance( const in vec3 normal ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 ); - return PI * envMapColor.rgb * envMapIntensity; - #else - return vec3( 0.0 ); - #endif - } - vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 reflectVec = reflect( - viewDir, normal ); - reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) ); - reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); - vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness ); - return envMapColor.rgb * envMapIntensity; - #else - return vec3( 0.0 ); - #endif - } - #ifdef USE_ANISOTROPY - vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 bentNormal = cross( bitangent, viewDir ); - bentNormal = normalize( cross( bentNormal, bitangent ) ); - bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) ); - return getIBLRadiance( viewDir, bentNormal, roughness ); - #else - return vec3( 0.0 ); - #endif - } - #endif -#endif`,envmap_vertex:`#ifdef USE_ENVMAP - #ifdef ENV_WORLDPOS - vWorldPosition = worldPosition.xyz; - #else - vec3 cameraToVertex; - if ( isOrthographic ) { - cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); - } else { - cameraToVertex = normalize( worldPosition.xyz - cameraPosition ); - } - vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); - #ifdef ENVMAP_MODE_REFLECTION - vReflect = reflect( cameraToVertex, worldNormal ); - #else - vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); - #endif - #endif -#endif`,fog_vertex:`#ifdef USE_FOG - vFogDepth = - mvPosition.z; -#endif`,fog_pars_vertex:`#ifdef USE_FOG - varying float vFogDepth; -#endif`,fog_fragment:`#ifdef USE_FOG - #ifdef FOG_EXP2 - float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); - #else - float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); - #endif - gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); -#endif`,fog_pars_fragment:`#ifdef USE_FOG - uniform vec3 fogColor; - varying float vFogDepth; - #ifdef FOG_EXP2 - uniform float fogDensity; - #else - uniform float fogNear; - uniform float fogFar; - #endif -#endif`,gradientmap_pars_fragment:`#ifdef USE_GRADIENTMAP - uniform sampler2D gradientMap; -#endif -vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { - float dotNL = dot( normal, lightDirection ); - vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 ); - #ifdef USE_GRADIENTMAP - return vec3( texture2D( gradientMap, coord ).r ); - #else - vec2 fw = fwidth( coord ) * 0.5; - return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); - #endif -}`,lightmap_pars_fragment:`#ifdef USE_LIGHTMAP - uniform sampler2D lightMap; - uniform float lightMapIntensity; -#endif`,lights_lambert_fragment:`LambertMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,lights_lambert_pars_fragment:`varying vec3 vViewPosition; -struct LambertMaterial { - vec3 diffuseColor; - float specularStrength; -}; -void RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_Lambert -#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,lights_pars_begin:`uniform bool receiveShadow; -uniform vec3 ambientLightColor; -#if defined( USE_LIGHT_PROBES ) - uniform vec3 lightProbe[ 9 ]; -#endif -vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) { - float x = normal.x, y = normal.y, z = normal.z; - vec3 result = shCoefficients[ 0 ] * 0.886227; - result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; - result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; - result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; - result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; - result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; - result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); - result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; - result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); - return result; -} -vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) { - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe ); - return irradiance; -} -vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) { - vec3 irradiance = ambientLightColor; - return irradiance; -} -float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) { - float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 ); - if ( cutoffDistance > 0.0 ) { - distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) ); - } - return distanceFalloff; -} -float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) { - return smoothstep( coneCosine, penumbraCosine, angleCosine ); -} -#if NUM_DIR_LIGHTS > 0 - struct DirectionalLight { - vec3 direction; - vec3 color; - }; - uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; - void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) { - light.color = directionalLight.color; - light.direction = directionalLight.direction; - light.visible = true; - } -#endif -#if NUM_POINT_LIGHTS > 0 - struct PointLight { - vec3 position; - vec3 color; - float distance; - float decay; - }; - uniform PointLight pointLights[ NUM_POINT_LIGHTS ]; - void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) { - vec3 lVector = pointLight.position - geometryPosition; - light.direction = normalize( lVector ); - float lightDistance = length( lVector ); - light.color = pointLight.color; - light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay ); - light.visible = ( light.color != vec3( 0.0 ) ); - } -#endif -#if NUM_SPOT_LIGHTS > 0 - struct SpotLight { - vec3 position; - vec3 direction; - vec3 color; - float distance; - float decay; - float coneCos; - float penumbraCos; - }; - uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ]; - void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) { - vec3 lVector = spotLight.position - geometryPosition; - light.direction = normalize( lVector ); - float angleCos = dot( light.direction, spotLight.direction ); - float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos ); - if ( spotAttenuation > 0.0 ) { - float lightDistance = length( lVector ); - light.color = spotLight.color * spotAttenuation; - light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay ); - light.visible = ( light.color != vec3( 0.0 ) ); - } else { - light.color = vec3( 0.0 ); - light.visible = false; - } - } -#endif -#if NUM_RECT_AREA_LIGHTS > 0 - struct RectAreaLight { - vec3 color; - vec3 position; - vec3 halfWidth; - vec3 halfHeight; - }; - uniform sampler2D ltc_1; uniform sampler2D ltc_2; - uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ]; -#endif -#if NUM_HEMI_LIGHTS > 0 - struct HemisphereLight { - vec3 direction; - vec3 skyColor; - vec3 groundColor; - }; - uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ]; - vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) { - float dotNL = dot( normal, hemiLight.direction ); - float hemiDiffuseWeight = 0.5 * dotNL + 0.5; - vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); - return irradiance; - } -#endif`,lights_toon_fragment:`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,lights_toon_pars_fragment:`varying vec3 vViewPosition; -struct ToonMaterial { - vec3 diffuseColor; -}; -void RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { - vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_Toon -#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,lights_phong_fragment:`BlinnPhongMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.specularColor = specular; -material.specularShininess = shininess; -material.specularStrength = specularStrength;`,lights_phong_pars_fragment:`varying vec3 vViewPosition; -struct BlinnPhongMaterial { - vec3 diffuseColor; - vec3 specularColor; - float specularShininess; - float specularStrength; -}; -void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); - reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength; -} -void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_BlinnPhong -#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,lights_physical_fragment:`PhysicalMaterial material; -material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); -vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) ); -float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); -material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness; -material.roughness = min( material.roughness, 1.0 ); -#ifdef IOR - material.ior = ior; - #ifdef USE_SPECULAR - float specularIntensityFactor = specularIntensity; - vec3 specularColorFactor = specularColor; - #ifdef USE_SPECULAR_COLORMAP - specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb; - #endif - #ifdef USE_SPECULAR_INTENSITYMAP - specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a; - #endif - material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); - #else - float specularIntensityFactor = 1.0; - vec3 specularColorFactor = vec3( 1.0 ); - material.specularF90 = 1.0; - #endif - material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor ); -#else - material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor ); - material.specularF90 = 1.0; -#endif -#ifdef USE_CLEARCOAT - material.clearcoat = clearcoat; - material.clearcoatRoughness = clearcoatRoughness; - material.clearcoatF0 = vec3( 0.04 ); - material.clearcoatF90 = 1.0; - #ifdef USE_CLEARCOATMAP - material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x; - #endif - #ifdef USE_CLEARCOAT_ROUGHNESSMAP - material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y; - #endif - material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); - material.clearcoatRoughness += geometryRoughness; - material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); -#endif -#ifdef USE_DISPERSION - material.dispersion = dispersion; -#endif -#ifdef USE_IRIDESCENCE - material.iridescence = iridescence; - material.iridescenceIOR = iridescenceIOR; - #ifdef USE_IRIDESCENCEMAP - material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r; - #endif - #ifdef USE_IRIDESCENCE_THICKNESSMAP - material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum; - #else - material.iridescenceThickness = iridescenceThicknessMaximum; - #endif -#endif -#ifdef USE_SHEEN - material.sheenColor = sheenColor; - #ifdef USE_SHEEN_COLORMAP - material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb; - #endif - material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 ); - #ifdef USE_SHEEN_ROUGHNESSMAP - material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a; - #endif -#endif -#ifdef USE_ANISOTROPY - #ifdef USE_ANISOTROPYMAP - mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x ); - vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb; - vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b; - #else - vec2 anisotropyV = anisotropyVector; - #endif - material.anisotropy = length( anisotropyV ); - if( material.anisotropy == 0.0 ) { - anisotropyV = vec2( 1.0, 0.0 ); - } else { - anisotropyV /= material.anisotropy; - material.anisotropy = saturate( material.anisotropy ); - } - material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) ); - material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y; - material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y; -#endif`,lights_physical_pars_fragment:`struct PhysicalMaterial { - vec3 diffuseColor; - float roughness; - vec3 specularColor; - float specularF90; - float dispersion; - #ifdef USE_CLEARCOAT - float clearcoat; - float clearcoatRoughness; - vec3 clearcoatF0; - float clearcoatF90; - #endif - #ifdef USE_IRIDESCENCE - float iridescence; - float iridescenceIOR; - float iridescenceThickness; - vec3 iridescenceFresnel; - vec3 iridescenceF0; - #endif - #ifdef USE_SHEEN - vec3 sheenColor; - float sheenRoughness; - #endif - #ifdef IOR - float ior; - #endif - #ifdef USE_TRANSMISSION - float transmission; - float transmissionAlpha; - float thickness; - float attenuationDistance; - vec3 attenuationColor; - #endif - #ifdef USE_ANISOTROPY - float anisotropy; - float alphaT; - vec3 anisotropyT; - vec3 anisotropyB; - #endif -}; -vec3 clearcoatSpecularDirect = vec3( 0.0 ); -vec3 clearcoatSpecularIndirect = vec3( 0.0 ); -vec3 sheenSpecularDirect = vec3( 0.0 ); -vec3 sheenSpecularIndirect = vec3(0.0 ); -vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) { - float x = clamp( 1.0 - dotVH, 0.0, 1.0 ); - float x2 = x * x; - float x5 = clamp( x * x2 * x2, 0.0, 0.9999 ); - return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); -} -float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) { - float a2 = pow2( alpha ); - float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); - float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); - return 0.5 / max( gv + gl, EPSILON ); -} -float D_GGX( const in float alpha, const in float dotNH ) { - float a2 = pow2( alpha ); - float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; - return RECIPROCAL_PI * a2 / pow2( denom ); -} -#ifdef USE_ANISOTROPY - float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) { - float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) ); - float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) ); - float v = 0.5 / ( gv + gl ); - return saturate(v); - } - float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) { - float a2 = alphaT * alphaB; - highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH ); - highp float v2 = dot( v, v ); - float w2 = a2 / v2; - return RECIPROCAL_PI * a2 * pow2 ( w2 ); - } -#endif -#ifdef USE_CLEARCOAT - vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) { - vec3 f0 = material.clearcoatF0; - float f90 = material.clearcoatF90; - float roughness = material.clearcoatRoughness; - float alpha = pow2( roughness ); - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( f0, f90, dotVH ); - float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - float D = D_GGX( alpha, dotNH ); - return F * ( V * D ); - } -#endif -vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) { - vec3 f0 = material.specularColor; - float f90 = material.specularF90; - float roughness = material.roughness; - float alpha = pow2( roughness ); - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( f0, f90, dotVH ); - #ifdef USE_IRIDESCENCE - F = mix( F, material.iridescenceFresnel, material.iridescence ); - #endif - #ifdef USE_ANISOTROPY - float dotTL = dot( material.anisotropyT, lightDir ); - float dotTV = dot( material.anisotropyT, viewDir ); - float dotTH = dot( material.anisotropyT, halfDir ); - float dotBL = dot( material.anisotropyB, lightDir ); - float dotBV = dot( material.anisotropyB, viewDir ); - float dotBH = dot( material.anisotropyB, halfDir ); - float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL ); - float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH ); - #else - float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - float D = D_GGX( alpha, dotNH ); - #endif - return F * ( V * D ); -} -vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) { - const float LUT_SIZE = 64.0; - const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE; - const float LUT_BIAS = 0.5 / LUT_SIZE; - float dotNV = saturate( dot( N, V ) ); - vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) ); - uv = uv * LUT_SCALE + LUT_BIAS; - return uv; -} -float LTC_ClippedSphereFormFactor( const in vec3 f ) { - float l = length( f ); - return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 ); -} -vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) { - float x = dot( v1, v2 ); - float y = abs( x ); - float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y; - float b = 3.4175940 + ( 4.1616724 + y ) * y; - float v = a / b; - float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v; - return cross( v1, v2 ) * theta_sintheta; -} -vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) { - vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ]; - vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ]; - vec3 lightNormal = cross( v1, v2 ); - if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 ); - vec3 T1, T2; - T1 = normalize( V - N * dot( V, N ) ); - T2 = - cross( N, T1 ); - mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) ); - vec3 coords[ 4 ]; - coords[ 0 ] = mat * ( rectCoords[ 0 ] - P ); - coords[ 1 ] = mat * ( rectCoords[ 1 ] - P ); - coords[ 2 ] = mat * ( rectCoords[ 2 ] - P ); - coords[ 3 ] = mat * ( rectCoords[ 3 ] - P ); - coords[ 0 ] = normalize( coords[ 0 ] ); - coords[ 1 ] = normalize( coords[ 1 ] ); - coords[ 2 ] = normalize( coords[ 2 ] ); - coords[ 3 ] = normalize( coords[ 3 ] ); - vec3 vectorFormFactor = vec3( 0.0 ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] ); - float result = LTC_ClippedSphereFormFactor( vectorFormFactor ); - return vec3( result ); -} -#if defined( USE_SHEEN ) -float D_Charlie( float roughness, float dotNH ) { - float alpha = pow2( roughness ); - float invAlpha = 1.0 / alpha; - float cos2h = dotNH * dotNH; - float sin2h = max( 1.0 - cos2h, 0.0078125 ); - return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); -} -float V_Neubelt( float dotNV, float dotNL ) { - return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); -} -vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) { - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float D = D_Charlie( sheenRoughness, dotNH ); - float V = V_Neubelt( dotNV, dotNL ); - return sheenColor * ( D * V ); -} -#endif -float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { - float dotNV = saturate( dot( normal, viewDir ) ); - float r2 = roughness * roughness; - float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95; - float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72; - float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) ); - return saturate( DG * RECIPROCAL_PI ); -} -vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { - float dotNV = saturate( dot( normal, viewDir ) ); - const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); - const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 ); - vec4 r = roughness * c0 + c1; - float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; - vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw; - return fab; -} -vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) { - vec2 fab = DFGApprox( normal, viewDir, roughness ); - return specularColor * fab.x + specularF90 * fab.y; -} -#ifdef USE_IRIDESCENCE -void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { -#else -void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { -#endif - vec2 fab = DFGApprox( normal, viewDir, roughness ); - #ifdef USE_IRIDESCENCE - vec3 Fr = mix( specularColor, iridescenceF0, iridescence ); - #else - vec3 Fr = specularColor; - #endif - vec3 FssEss = Fr * fab.x + specularF90 * fab.y; - float Ess = fab.x + fab.y; - float Ems = 1.0 - Ess; - vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg ); - singleScatter += FssEss; - multiScatter += Fms * Ems; -} -#if NUM_RECT_AREA_LIGHTS > 0 - void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - vec3 normal = geometryNormal; - vec3 viewDir = geometryViewDir; - vec3 position = geometryPosition; - vec3 lightPos = rectAreaLight.position; - vec3 halfWidth = rectAreaLight.halfWidth; - vec3 halfHeight = rectAreaLight.halfHeight; - vec3 lightColor = rectAreaLight.color; - float roughness = material.roughness; - vec3 rectCoords[ 4 ]; - rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight; - rectCoords[ 2 ] = lightPos - halfWidth + halfHeight; - rectCoords[ 3 ] = lightPos + halfWidth + halfHeight; - vec2 uv = LTC_Uv( normal, viewDir, roughness ); - vec4 t1 = texture2D( ltc_1, uv ); - vec4 t2 = texture2D( ltc_2, uv ); - mat3 mInv = mat3( - vec3( t1.x, 0, t1.y ), - vec3( 0, 1, 0 ), - vec3( t1.z, 0, t1.w ) - ); - vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y ); - reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords ); - reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords ); - } -#endif -void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - #ifdef USE_CLEARCOAT - float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) ); - vec3 ccIrradiance = dotNLcc * directLight.color; - clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material ); - #endif - #ifdef USE_SHEEN - sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness ); - #endif - reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material ); - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { - #ifdef USE_CLEARCOAT - clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); - #endif - #ifdef USE_SHEEN - sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ); - #endif - vec3 singleScattering = vec3( 0.0 ); - vec3 multiScattering = vec3( 0.0 ); - vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI; - #ifdef USE_IRIDESCENCE - computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering ); - #else - computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering ); - #endif - vec3 totalScattering = singleScattering + multiScattering; - vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) ); - reflectedLight.indirectSpecular += radiance * singleScattering; - reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance; - reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance; -} -#define RE_Direct RE_Direct_Physical -#define RE_Direct_RectArea RE_Direct_RectArea_Physical -#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical -#define RE_IndirectSpecular RE_IndirectSpecular_Physical -float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { - return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); -}`,lights_fragment_begin:` -vec3 geometryPosition = - vViewPosition; -vec3 geometryNormal = normal; -vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); -vec3 geometryClearcoatNormal = vec3( 0.0 ); -#ifdef USE_CLEARCOAT - geometryClearcoatNormal = clearcoatNormal; -#endif -#ifdef USE_IRIDESCENCE - float dotNVi = saturate( dot( normal, geometryViewDir ) ); - if ( material.iridescenceThickness == 0.0 ) { - material.iridescence = 0.0; - } else { - material.iridescence = saturate( material.iridescence ); - } - if ( material.iridescence > 0.0 ) { - material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); - material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); - } -#endif -IncidentLight directLight; -#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) - PointLight pointLight; - #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 - PointLightShadow pointLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { - pointLight = pointLights[ i ]; - getPointLightInfo( pointLight, geometryPosition, directLight ); - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) - pointLightShadow = pointLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) - SpotLight spotLight; - vec4 spotColor; - vec3 spotLightCoord; - bool inSpotLightMap; - #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { - spotLight = spotLights[ i ]; - getSpotLightInfo( spotLight, geometryPosition, directLight ); - #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) - #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX - #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS - #else - #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) - #endif - #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) - spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; - inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); - spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); - directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; - #endif - #undef SPOT_LIGHT_MAP_INDEX - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - spotLightShadow = spotLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) - DirectionalLight directionalLight; - #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { - directionalLight = directionalLights[ i ]; - getDirectionalLightInfo( directionalLight, directLight ); - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) - directionalLightShadow = directionalLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) - RectAreaLight rectAreaLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { - rectAreaLight = rectAreaLights[ i ]; - RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if defined( RE_IndirectDiffuse ) - vec3 iblIrradiance = vec3( 0.0 ); - vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); - #if defined( USE_LIGHT_PROBES ) - irradiance += getLightProbeIrradiance( lightProbe, geometryNormal ); - #endif - #if ( NUM_HEMI_LIGHTS > 0 ) - #pragma unroll_loop_start - for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { - irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal ); - } - #pragma unroll_loop_end - #endif -#endif -#if defined( RE_IndirectSpecular ) - vec3 radiance = vec3( 0.0 ); - vec3 clearcoatRadiance = vec3( 0.0 ); -#endif`,lights_fragment_maps:`#if defined( RE_IndirectDiffuse ) - #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; - irradiance += lightMapIrradiance; - #endif - #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV ) - iblIrradiance += getIBLIrradiance( geometryNormal ); - #endif -#endif -#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular ) - #ifdef USE_ANISOTROPY - radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy ); - #else - radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness ); - #endif - #ifdef USE_CLEARCOAT - clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness ); - #endif -#endif`,lights_fragment_end:`#if defined( RE_IndirectDiffuse ) - RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif -#if defined( RE_IndirectSpecular ) - RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif`,logdepthbuf_fragment:`#if defined( USE_LOGDEPTHBUF ) - gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,logdepthbuf_pars_fragment:`#if defined( USE_LOGDEPTHBUF ) - uniform float logDepthBufFC; - varying float vFragDepth; - varying float vIsPerspective; -#endif`,logdepthbuf_pars_vertex:`#ifdef USE_LOGDEPTHBUF - varying float vFragDepth; - varying float vIsPerspective; -#endif`,logdepthbuf_vertex:`#ifdef USE_LOGDEPTHBUF - vFragDepth = 1.0 + gl_Position.w; - vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,map_fragment:`#ifdef USE_MAP -#ifdef USE_MIPMAP_BIAS - vec4 sampledDiffuseColor = texture2D( map, vMapUv, mipmapBias ); -#else - vec4 sampledDiffuseColor = texture2D( map, vMapUv ); -#endif - #ifdef DECODE_VIDEO_TEXTURE - sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w ); - - #endif - diffuseColor *= sampledDiffuseColor; -#endif`,map_pars_fragment:`#ifdef USE_MAP - uniform sampler2D map; - -#ifdef USE_MIPMAP_BIAS - uniform float mipmapBias; -#endif -#endif`,map_particle_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) - #if defined( USE_POINTS_UV ) - vec2 uv = vUv; - #else - vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy; - #endif -#endif -#ifdef USE_MAP - diffuseColor *= texture2D( map, uv ); -#endif -#ifdef USE_ALPHAMAP - diffuseColor.a *= texture2D( alphaMap, uv ).g; -#endif`,map_particle_pars_fragment:`#if defined( USE_POINTS_UV ) - varying vec2 vUv; -#else - #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) - uniform mat3 uvTransform; - #endif -#endif -#ifdef USE_MAP - uniform sampler2D map; -#endif -#ifdef USE_ALPHAMAP - uniform sampler2D alphaMap; -#endif`,metalnessmap_fragment:`float metalnessFactor = metalness; -#ifdef USE_METALNESSMAP - vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); - metalnessFactor *= texelMetalness.b; -#endif`,metalnessmap_pars_fragment:`#ifdef USE_METALNESSMAP - uniform sampler2D metalnessMap; -#endif`,morphinstance_vertex:`#ifdef USE_INSTANCING_MORPH - float morphTargetInfluences[ MORPHTARGETS_COUNT ]; - float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r; - } -#endif`,morphcolor_vertex:`#if defined( USE_MORPHCOLORS ) - vColor *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - #if defined( USE_COLOR_ALPHA ) - if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ]; - #elif defined( USE_COLOR ) - if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; - #endif - } -#endif`,morphnormal_vertex:`#ifdef USE_MORPHNORMALS - objectNormal *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; - } -#endif`,morphtarget_pars_vertex:`#ifdef USE_MORPHTARGETS - #ifndef USE_INSTANCING_MORPH - uniform float morphTargetBaseInfluence; - uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; - #endif - uniform sampler2DArray morphTargetsTexture; - uniform ivec2 morphTargetsTextureSize; - vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) { - int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; - int y = texelIndex / morphTargetsTextureSize.x; - int x = texelIndex - y * morphTargetsTextureSize.x; - ivec3 morphUV = ivec3( x, y, morphTargetIndex ); - return texelFetch( morphTargetsTexture, morphUV, 0 ); - } -#endif`,morphtarget_vertex:`#ifdef USE_MORPHTARGETS - transformed *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; - } -#endif`,normal_fragment_begin:`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; -#ifdef FLAT_SHADED - vec3 fdx = dFdx( vViewPosition ); - vec3 fdy = dFdy( vViewPosition ); - vec3 normal = normalize( cross( fdx, fdy ) ); -#else - vec3 normal = normalize( vNormal ); - #ifdef DOUBLE_SIDED - normal *= faceDirection; - #endif -#endif -#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) - #ifdef USE_TANGENT - mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); - #else - mat3 tbn = getTangentFrame( - vViewPosition, normal, - #if defined( USE_NORMALMAP ) - vNormalMapUv - #elif defined( USE_CLEARCOAT_NORMALMAP ) - vClearcoatNormalMapUv - #else - vUv - #endif - ); - #endif - #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) - tbn[0] *= faceDirection; - tbn[1] *= faceDirection; - #endif -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - #ifdef USE_TANGENT - mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); - #else - mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv ); - #endif - #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) - tbn2[0] *= faceDirection; - tbn2[1] *= faceDirection; - #endif -#endif -vec3 nonPerturbedNormal = normal;`,normal_fragment_maps:`#ifdef USE_NORMALMAP_OBJECTSPACE - normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; - #ifdef FLIP_SIDED - normal = - normal; - #endif - #ifdef DOUBLE_SIDED - normal = normal * faceDirection; - #endif - normal = normalize( normalMatrix * normal ); -#elif defined( USE_NORMALMAP_TANGENTSPACE ) - vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; - mapN.xy *= normalScale; - normal = normalize( tbn * mapN ); -#elif defined( USE_BUMPMAP ) - normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,normal_pars_fragment:`#ifndef FLAT_SHADED - varying vec3 vNormal; - #ifdef USE_TANGENT - varying vec3 vTangent; - varying vec3 vBitangent; - #endif -#endif`,normal_pars_vertex:`#ifndef FLAT_SHADED - varying vec3 vNormal; - #ifdef USE_TANGENT - varying vec3 vTangent; - varying vec3 vBitangent; - #endif -#endif`,normal_vertex:`#ifndef FLAT_SHADED - vNormal = normalize( transformedNormal ); - #ifdef USE_TANGENT - vTangent = normalize( transformedTangent ); - vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); - #endif -#endif`,normalmap_pars_fragment:`#ifdef USE_NORMALMAP - uniform sampler2D normalMap; - uniform vec2 normalScale; -#endif -#ifdef USE_NORMALMAP_OBJECTSPACE - uniform mat3 normalMatrix; -#endif -#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) ) - mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) { - vec3 q0 = dFdx( eye_pos.xyz ); - vec3 q1 = dFdy( eye_pos.xyz ); - vec2 st0 = dFdx( uv.st ); - vec2 st1 = dFdy( uv.st ); - vec3 N = surf_norm; - vec3 q1perp = cross( q1, N ); - vec3 q0perp = cross( N, q0 ); - vec3 T = q1perp * st0.x + q0perp * st1.x; - vec3 B = q1perp * st0.y + q0perp * st1.y; - float det = max( dot( T, T ), dot( B, B ) ); - float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); - return mat3( T * scale, B * scale, N ); - } -#endif`,clearcoat_normal_fragment_begin:`#ifdef USE_CLEARCOAT - vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,clearcoat_normal_fragment_maps:`#ifdef USE_CLEARCOAT_NORMALMAP - vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; - clearcoatMapN.xy *= clearcoatNormalScale; - clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,clearcoat_pars_fragment:`#ifdef USE_CLEARCOATMAP - uniform sampler2D clearcoatMap; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - uniform sampler2D clearcoatNormalMap; - uniform vec2 clearcoatNormalScale; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform sampler2D clearcoatRoughnessMap; -#endif`,iridescence_pars_fragment:`#ifdef USE_IRIDESCENCEMAP - uniform sampler2D iridescenceMap; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - uniform sampler2D iridescenceThicknessMap; -#endif`,opaque_fragment:`#ifdef OPAQUE -diffuseColor.a = 1.0; -#endif -#ifdef USE_TRANSMISSION -diffuseColor.a *= material.transmissionAlpha; -#endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,packing:`vec3 packNormalToRGB( const in vec3 normal ) { - return normalize( normal ) * 0.5 + 0.5; -} -vec3 unpackRGBToNormal( const in vec3 rgb ) { - return 2.0 * rgb.xyz - 1.0; -} -const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.; -const float Inv255 = 1. / 255.; -const vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 ); -const vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g ); -const vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b ); -const vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a ); -vec4 packDepthToRGBA( const in float v ) { - if( v <= 0.0 ) - return vec4( 0., 0., 0., 0. ); - if( v >= 1.0 ) - return vec4( 1., 1., 1., 1. ); - float vuf; - float af = modf( v * PackFactors.a, vuf ); - float bf = modf( vuf * ShiftRight8, vuf ); - float gf = modf( vuf * ShiftRight8, vuf ); - return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af ); -} -vec3 packDepthToRGB( const in float v ) { - if( v <= 0.0 ) - return vec3( 0., 0., 0. ); - if( v >= 1.0 ) - return vec3( 1., 1., 1. ); - float vuf; - float bf = modf( v * PackFactors.b, vuf ); - float gf = modf( vuf * ShiftRight8, vuf ); - return vec3( vuf * Inv255, gf * PackUpscale, bf ); -} -vec2 packDepthToRG( const in float v ) { - if( v <= 0.0 ) - return vec2( 0., 0. ); - if( v >= 1.0 ) - return vec2( 1., 1. ); - float vuf; - float gf = modf( v * 256., vuf ); - return vec2( vuf * Inv255, gf ); -} -float unpackRGBAToDepth( const in vec4 v ) { - return dot( v, UnpackFactors4 ); -} -float unpackRGBToDepth( const in vec3 v ) { - return dot( v, UnpackFactors3 ); -} -float unpackRGToDepth( const in vec2 v ) { - return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g; -} -vec4 pack2HalfToRGBA( const in vec2 v ) { - vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) ); - return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w ); -} -vec2 unpackRGBATo2Half( const in vec4 v ) { - return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) ); -} -float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) { - return ( viewZ + near ) / ( near - far ); -} -float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) { - return depth * ( near - far ) - near; -} -float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) { - return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ ); -} -float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) { - return ( near * far ) / ( ( far - near ) * depth - far ); -}`,premultiplied_alpha_fragment:`#ifdef PREMULTIPLIED_ALPHA - gl_FragColor.rgb *= gl_FragColor.a; -#endif`,project_vertex:`vec4 mvPosition = vec4( transformed, 1.0 ); -#ifdef USE_BATCHING - mvPosition = batchingMatrix * mvPosition; -#endif -#ifdef USE_INSTANCING - mvPosition = instanceMatrix * mvPosition; -#endif -mvPosition = modelViewMatrix * mvPosition; -gl_Position = projectionMatrix * mvPosition;`,dithering_fragment:`#ifdef DITHERING - gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,dithering_pars_fragment:`#ifdef DITHERING - vec3 dithering( vec3 color ) { - float grid_position = rand( gl_FragCoord.xy ); - vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); - dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); - return color + dither_shift_RGB; - } -#endif`,roughnessmap_fragment:`float roughnessFactor = roughness; -#ifdef USE_ROUGHNESSMAP - vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); - roughnessFactor *= texelRoughness.g; -#endif`,roughnessmap_pars_fragment:`#ifdef USE_ROUGHNESSMAP - uniform sampler2D roughnessMap; -#endif`,shadowmap_pars_fragment:`#if NUM_SPOT_LIGHT_COORDS > 0 - varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; -#endif -#if NUM_SPOT_LIGHT_MAPS > 0 - uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ]; -#endif -#ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; - varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; - struct DirectionalLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; - struct SpotLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; - varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; - struct PointLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - float shadowCameraNear; - float shadowCameraFar; - }; - uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; - #endif - float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { - return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); - } - vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { - return unpackRGBATo2Half( texture2D( shadow, uv ) ); - } - float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ - float occlusion = 1.0; - vec2 distribution = texture2DDistribution( shadow, uv ); - float hard_shadow = step( compare , distribution.x ); - if (hard_shadow != 1.0 ) { - float distance = compare - distribution.x ; - float variance = max( 0.00000, distribution.y * distribution.y ); - float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); - } - return occlusion; - } - float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) { - float shadow = 1.0; - shadowCoord.xyz /= shadowCoord.w; - shadowCoord.z += shadowBias; - bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; - bool frustumTest = inFrustum && shadowCoord.z <= 1.0; - if ( frustumTest ) { - #if defined( SHADOWMAP_TYPE_PCF ) - vec2 texelSize = vec2( 1.0 ) / shadowMapSize; - float dx0 = - texelSize.x * shadowRadius; - float dy0 = - texelSize.y * shadowRadius; - float dx1 = + texelSize.x * shadowRadius; - float dy1 = + texelSize.y * shadowRadius; - float dx2 = dx0 / 2.0; - float dy2 = dy0 / 2.0; - float dx3 = dx1 / 2.0; - float dy3 = dy1 / 2.0; - shadow = ( - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z ) - ) * ( 1.0 / 17.0 ); - #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) - vec2 texelSize = vec2( 1.0 ) / shadowMapSize; - float dx = texelSize.x; - float dy = texelSize.y; - vec2 uv = shadowCoord.xy; - vec2 f = fract( uv * shadowMapSize + 0.5 ); - uv -= f * texelSize; - shadow = ( - texture2DCompare( shadowMap, uv, shadowCoord.z ) + - texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + - texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + - mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), - f.x ) + - mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), - f.x ) + - mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), - f.y ) + - mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), - f.y ) + - mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), - f.x ), - mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), - f.x ), - f.y ) - ) * ( 1.0 / 9.0 ); - #elif defined( SHADOWMAP_TYPE_VSM ) - shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); - #else - shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); - #endif - } - return mix( 1.0, shadow, shadowIntensity ); - } - vec2 cubeToUV( vec3 v, float texelSizeY ) { - vec3 absV = abs( v ); - float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); - absV *= scaleToCube; - v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); - vec2 planar = v.xy; - float almostATexel = 1.5 * texelSizeY; - float almostOne = 1.0 - almostATexel; - if ( absV.z >= almostOne ) { - if ( v.z > 0.0 ) - planar.x = 4.0 - v.x; - } else if ( absV.x >= almostOne ) { - float signX = sign( v.x ); - planar.x = v.z * signX + 2.0 * signX; - } else if ( absV.y >= almostOne ) { - float signY = sign( v.y ); - planar.x = v.x + 2.0 * signY + 2.0; - planar.y = v.z * signY - 2.0; - } - return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); - } - float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { - float shadow = 1.0; - vec3 lightToPosition = shadowCoord.xyz; - - float lightToPositionLength = length( lightToPosition ); - if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) { - float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias; - vec3 bd3D = normalize( lightToPosition ); - vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); - #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM ) - vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y; - shadow = ( - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp ) - ) * ( 1.0 / 9.0 ); - #else - shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ); - #endif - } - return mix( 1.0, shadow, shadowIntensity ); - } -#endif`,shadowmap_pars_vertex:`#if NUM_SPOT_LIGHT_COORDS > 0 - uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; - varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; -#endif -#ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ]; - varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; - struct DirectionalLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - struct SpotLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ]; - varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; - struct PointLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - float shadowCameraNear; - float shadowCameraFar; - }; - uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; - #endif -#endif`,shadowmap_vertex:`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) - vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); - vec4 shadowWorldPosition; -#endif -#if defined( USE_SHADOWMAP ) - #if NUM_DIR_LIGHT_SHADOWS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { - shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); - vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { - shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); - vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end - #endif -#endif -#if NUM_SPOT_LIGHT_COORDS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) { - shadowWorldPosition = worldPosition; - #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias; - #endif - vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end -#endif`,shadowmask_pars_fragment:`float getShadowMask() { - float shadow = 1.0; - #ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { - directionalLight = directionalLightShadows[ i ]; - shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - } - #pragma unroll_loop_end - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { - spotLight = spotLightShadows[ i ]; - shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; - } - #pragma unroll_loop_end - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - PointLightShadow pointLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { - pointLight = pointLightShadows[ i ]; - shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0; - } - #pragma unroll_loop_end - #endif - #endif - return shadow; -}`,skinbase_vertex:`#ifdef USE_SKINNING - mat4 boneMatX = getBoneMatrix( skinIndex.x ); - mat4 boneMatY = getBoneMatrix( skinIndex.y ); - mat4 boneMatZ = getBoneMatrix( skinIndex.z ); - mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,skinning_pars_vertex:`#ifdef USE_SKINNING - uniform mat4 bindMatrix; - uniform mat4 bindMatrixInverse; - uniform highp sampler2D boneTexture; - mat4 getBoneMatrix( const in float i ) { - int size = textureSize( boneTexture, 0 ).x; - int j = int( i ) * 4; - int x = j % size; - int y = j / size; - vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 ); - vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 ); - vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 ); - vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); - return mat4( v1, v2, v3, v4 ); - } -#endif`,skinning_vertex:`#ifdef USE_SKINNING - vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); - vec4 skinned = vec4( 0.0 ); - skinned += boneMatX * skinVertex * skinWeight.x; - skinned += boneMatY * skinVertex * skinWeight.y; - skinned += boneMatZ * skinVertex * skinWeight.z; - skinned += boneMatW * skinVertex * skinWeight.w; - transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,skinnormal_vertex:`#ifdef USE_SKINNING - mat4 skinMatrix = mat4( 0.0 ); - skinMatrix += skinWeight.x * boneMatX; - skinMatrix += skinWeight.y * boneMatY; - skinMatrix += skinWeight.z * boneMatZ; - skinMatrix += skinWeight.w * boneMatW; - skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix; - objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; - #ifdef USE_TANGENT - objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; - #endif -#endif`,specularmap_fragment:`float specularStrength; -#ifdef USE_SPECULARMAP - vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); - specularStrength = texelSpecular.r; -#else - specularStrength = 1.0; -#endif`,specularmap_pars_fragment:`#ifdef USE_SPECULARMAP - uniform sampler2D specularMap; -#endif`,tonemapping_fragment:`#if defined( TONE_MAPPING ) - gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,tonemapping_pars_fragment:`#ifndef saturate -#define saturate( a ) clamp( a, 0.0, 1.0 ) -#endif -uniform float toneMappingExposure; -vec3 LinearToneMapping( vec3 color ) { - return saturate( toneMappingExposure * color ); -} -vec3 ReinhardToneMapping( vec3 color ) { - color *= toneMappingExposure; - return saturate( color / ( vec3( 1.0 ) + color ) ); -} -vec3 CineonToneMapping( vec3 color ) { - color *= toneMappingExposure; - color = max( vec3( 0.0 ), color - 0.004 ); - return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) ); -} -vec3 RRTAndODTFit( vec3 v ) { - vec3 a = v * ( v + 0.0245786 ) - 0.000090537; - vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081; - return a / b; -} -vec3 ACESFilmicToneMapping( vec3 color ) { - const mat3 ACESInputMat = mat3( - vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ), - vec3( 0.04823, 0.01566, 0.83777 ) - ); - const mat3 ACESOutputMat = mat3( - vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ), - vec3( -0.07367, -0.00605, 1.07602 ) - ); - color *= toneMappingExposure / 0.6; - color = ACESInputMat * color; - color = RRTAndODTFit( color ); - color = ACESOutputMat * color; - return saturate( color ); -} -const mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3( - vec3( 1.6605, - 0.1246, - 0.0182 ), - vec3( - 0.5876, 1.1329, - 0.1006 ), - vec3( - 0.0728, - 0.0083, 1.1187 ) -); -const mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3( - vec3( 0.6274, 0.0691, 0.0164 ), - vec3( 0.3293, 0.9195, 0.0880 ), - vec3( 0.0433, 0.0113, 0.8956 ) -); -vec3 agxDefaultContrastApprox( vec3 x ) { - vec3 x2 = x * x; - vec3 x4 = x2 * x2; - return + 15.5 * x4 * x2 - - 40.14 * x4 * x - + 31.96 * x4 - - 6.868 * x2 * x - + 0.4298 * x2 - + 0.1191 * x - - 0.00232; -} -vec3 AgXToneMapping( vec3 color ) { - const mat3 AgXInsetMatrix = mat3( - vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ), - vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ), - vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 ) - ); - const mat3 AgXOutsetMatrix = mat3( - vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ), - vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ), - vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 ) - ); - const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069; - color *= toneMappingExposure; - color = LINEAR_SRGB_TO_LINEAR_REC2020 * color; - color = AgXInsetMatrix * color; - color = max( color, 1e-10 ); color = log2( color ); - color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv ); - color = clamp( color, 0.0, 1.0 ); - color = agxDefaultContrastApprox( color ); - color = AgXOutsetMatrix * color; - color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) ); - color = LINEAR_REC2020_TO_LINEAR_SRGB * color; - color = clamp( color, 0.0, 1.0 ); - return color; -} -vec3 NeutralToneMapping( vec3 color ) { - const float StartCompression = 0.8 - 0.04; - const float Desaturation = 0.15; - color *= toneMappingExposure; - float x = min( color.r, min( color.g, color.b ) ); - float offset = x < 0.08 ? x - 6.25 * x * x : 0.04; - color -= offset; - float peak = max( color.r, max( color.g, color.b ) ); - if ( peak < StartCompression ) return color; - float d = 1. - StartCompression; - float newPeak = 1. - d * d / ( peak + d - StartCompression ); - color *= newPeak / peak; - float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. ); - return mix( color, vec3( newPeak ), g ); -} -vec3 CustomToneMapping( vec3 color ) { return color; }`,transmission_fragment:`#ifdef USE_TRANSMISSION - material.transmission = transmission; - material.transmissionAlpha = 1.0; - material.thickness = thickness; - material.attenuationDistance = attenuationDistance; - material.attenuationColor = attenuationColor; - #ifdef USE_TRANSMISSIONMAP - material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r; - #endif - #ifdef USE_THICKNESSMAP - material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g; - #endif - vec3 pos = vWorldPosition; - vec3 v = normalize( cameraPosition - pos ); - vec3 n = inverseTransformDirection( normal, viewMatrix ); - vec4 transmitted = getIBLVolumeRefraction( - n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90, - pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness, - material.attenuationColor, material.attenuationDistance ); - material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); - totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,transmission_pars_fragment:`#ifdef USE_TRANSMISSION - uniform float transmission; - uniform float thickness; - uniform float attenuationDistance; - uniform vec3 attenuationColor; - #ifdef USE_TRANSMISSIONMAP - uniform sampler2D transmissionMap; - #endif - #ifdef USE_THICKNESSMAP - uniform sampler2D thicknessMap; - #endif - uniform vec2 transmissionSamplerSize; - uniform sampler2D transmissionSamplerMap; - uniform mat4 modelMatrix; - uniform mat4 projectionMatrix; - varying vec3 vWorldPosition; - float w0( float a ) { - return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 ); - } - float w1( float a ) { - return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 ); - } - float w2( float a ){ - return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 ); - } - float w3( float a ) { - return ( 1.0 / 6.0 ) * ( a * a * a ); - } - float g0( float a ) { - return w0( a ) + w1( a ); - } - float g1( float a ) { - return w2( a ) + w3( a ); - } - float h0( float a ) { - return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) ); - } - float h1( float a ) { - return 1.0 + w3( a ) / ( w2( a ) + w3( a ) ); - } - vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) { - uv = uv * texelSize.zw + 0.5; - vec2 iuv = floor( uv ); - vec2 fuv = fract( uv ); - float g0x = g0( fuv.x ); - float g1x = g1( fuv.x ); - float h0x = h0( fuv.x ); - float h1x = h1( fuv.x ); - float h0y = h0( fuv.y ); - float h1y = h1( fuv.y ); - vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; - vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; - vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; - vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; - return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) + - g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) ); - } - vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) { - vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) ); - vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) ); - vec2 fLodSizeInv = 1.0 / fLodSize; - vec2 cLodSizeInv = 1.0 / cLodSize; - vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) ); - vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) ); - return mix( fSample, cSample, fract( lod ) ); - } - vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) { - vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior ); - vec3 modelScale; - modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); - modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); - modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); - return normalize( refractionVector ) * thickness * modelScale; - } - float applyIorToRoughness( const in float roughness, const in float ior ) { - return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); - } - vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) { - float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); - return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod ); - } - vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) { - if ( isinf( attenuationDistance ) ) { - return vec3( 1.0 ); - } else { - vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance; - vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance; - } - } - vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor, - const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix, - const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness, - const in vec3 attenuationColor, const in float attenuationDistance ) { - vec4 transmittedLight; - vec3 transmittance; - #ifdef USE_DISPERSION - float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion; - vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread ); - for ( int i = 0; i < 3; i ++ ) { - vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix ); - vec3 refractedRayExit = position + transmissionRay; - - vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); - vec2 refractionCoords = ndcPos.xy / ndcPos.w; - refractionCoords += 1.0; - refractionCoords /= 2.0; - - vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] ); - transmittedLight[ i ] = transmissionSample[ i ]; - transmittedLight.a += transmissionSample.a; - transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ]; - } - transmittedLight.a /= 3.0; - - #else - - vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); - vec3 refractedRayExit = position + transmissionRay; - vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); - vec2 refractionCoords = ndcPos.xy / ndcPos.w; - refractionCoords += 1.0; - refractionCoords /= 2.0; - transmittedLight = getTransmissionSample( refractionCoords, roughness, ior ); - transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance ); - - #endif - vec3 attenuatedColor = transmittance * transmittedLight.rgb; - vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); - float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; - return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); - } -#endif`,uv_pars_fragment:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - varying vec2 vUv; -#endif -#ifdef USE_MAP - varying vec2 vMapUv; -#endif -#ifdef USE_ALPHAMAP - varying vec2 vAlphaMapUv; -#endif -#ifdef USE_LIGHTMAP - varying vec2 vLightMapUv; -#endif -#ifdef USE_AOMAP - varying vec2 vAoMapUv; -#endif -#ifdef USE_BUMPMAP - varying vec2 vBumpMapUv; -#endif -#ifdef USE_NORMALMAP - varying vec2 vNormalMapUv; -#endif -#ifdef USE_EMISSIVEMAP - varying vec2 vEmissiveMapUv; -#endif -#ifdef USE_METALNESSMAP - varying vec2 vMetalnessMapUv; -#endif -#ifdef USE_ROUGHNESSMAP - varying vec2 vRoughnessMapUv; -#endif -#ifdef USE_ANISOTROPYMAP - varying vec2 vAnisotropyMapUv; -#endif -#ifdef USE_CLEARCOATMAP - varying vec2 vClearcoatMapUv; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - varying vec2 vClearcoatNormalMapUv; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - varying vec2 vClearcoatRoughnessMapUv; -#endif -#ifdef USE_IRIDESCENCEMAP - varying vec2 vIridescenceMapUv; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - varying vec2 vIridescenceThicknessMapUv; -#endif -#ifdef USE_SHEEN_COLORMAP - varying vec2 vSheenColorMapUv; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - varying vec2 vSheenRoughnessMapUv; -#endif -#ifdef USE_SPECULARMAP - varying vec2 vSpecularMapUv; -#endif -#ifdef USE_SPECULAR_COLORMAP - varying vec2 vSpecularColorMapUv; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - varying vec2 vSpecularIntensityMapUv; -#endif -#ifdef USE_TRANSMISSIONMAP - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; -#endif -#ifdef USE_THICKNESSMAP - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; -#endif`,uv_pars_vertex:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - varying vec2 vUv; -#endif -#ifdef USE_MAP - uniform mat3 mapTransform; - varying vec2 vMapUv; -#endif -#ifdef USE_ALPHAMAP - uniform mat3 alphaMapTransform; - varying vec2 vAlphaMapUv; -#endif -#ifdef USE_LIGHTMAP - uniform mat3 lightMapTransform; - varying vec2 vLightMapUv; -#endif -#ifdef USE_AOMAP - uniform mat3 aoMapTransform; - varying vec2 vAoMapUv; -#endif -#ifdef USE_BUMPMAP - uniform mat3 bumpMapTransform; - varying vec2 vBumpMapUv; -#endif -#ifdef USE_NORMALMAP - uniform mat3 normalMapTransform; - varying vec2 vNormalMapUv; -#endif -#ifdef USE_DISPLACEMENTMAP - uniform mat3 displacementMapTransform; - varying vec2 vDisplacementMapUv; -#endif -#ifdef USE_EMISSIVEMAP - uniform mat3 emissiveMapTransform; - varying vec2 vEmissiveMapUv; -#endif -#ifdef USE_METALNESSMAP - uniform mat3 metalnessMapTransform; - varying vec2 vMetalnessMapUv; -#endif -#ifdef USE_ROUGHNESSMAP - uniform mat3 roughnessMapTransform; - varying vec2 vRoughnessMapUv; -#endif -#ifdef USE_ANISOTROPYMAP - uniform mat3 anisotropyMapTransform; - varying vec2 vAnisotropyMapUv; -#endif -#ifdef USE_CLEARCOATMAP - uniform mat3 clearcoatMapTransform; - varying vec2 vClearcoatMapUv; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - uniform mat3 clearcoatNormalMapTransform; - varying vec2 vClearcoatNormalMapUv; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform mat3 clearcoatRoughnessMapTransform; - varying vec2 vClearcoatRoughnessMapUv; -#endif -#ifdef USE_SHEEN_COLORMAP - uniform mat3 sheenColorMapTransform; - varying vec2 vSheenColorMapUv; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - uniform mat3 sheenRoughnessMapTransform; - varying vec2 vSheenRoughnessMapUv; -#endif -#ifdef USE_IRIDESCENCEMAP - uniform mat3 iridescenceMapTransform; - varying vec2 vIridescenceMapUv; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - uniform mat3 iridescenceThicknessMapTransform; - varying vec2 vIridescenceThicknessMapUv; -#endif -#ifdef USE_SPECULARMAP - uniform mat3 specularMapTransform; - varying vec2 vSpecularMapUv; -#endif -#ifdef USE_SPECULAR_COLORMAP - uniform mat3 specularColorMapTransform; - varying vec2 vSpecularColorMapUv; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - uniform mat3 specularIntensityMapTransform; - varying vec2 vSpecularIntensityMapUv; -#endif -#ifdef USE_TRANSMISSIONMAP - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; -#endif -#ifdef USE_THICKNESSMAP - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; -#endif`,uv_vertex:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - vUv = vec3( uv, 1 ).xy; -#endif -#ifdef USE_MAP - vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ALPHAMAP - vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_LIGHTMAP - vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_AOMAP - vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_BUMPMAP - vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_NORMALMAP - vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_DISPLACEMENTMAP - vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_EMISSIVEMAP - vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_METALNESSMAP - vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ROUGHNESSMAP - vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ANISOTROPYMAP - vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOATMAP - vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_IRIDESCENCEMAP - vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SHEEN_COLORMAP - vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULARMAP - vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULAR_COLORMAP - vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_TRANSMISSIONMAP - vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_THICKNESSMAP - vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,worldpos_vertex:`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 - vec4 worldPosition = vec4( transformed, 1.0 ); - #ifdef USE_BATCHING - worldPosition = batchingMatrix * worldPosition; - #endif - #ifdef USE_INSTANCING - worldPosition = instanceMatrix * worldPosition; - #endif - worldPosition = modelMatrix * worldPosition; -#endif`,background_vert:`varying vec2 vUv; -uniform mat3 uvTransform; -void main() { - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,background_frag:`uniform sampler2D t2D; -uniform float backgroundIntensity; -varying vec2 vUv; -void main() { - vec4 texColor = texture2D( t2D, vUv ); - #ifdef DECODE_VIDEO_TEXTURE - texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w ); - #endif - texColor.rgb *= backgroundIntensity; - gl_FragColor = texColor; - #include - #include -}`,backgroundCube_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include - gl_Position.z = gl_Position.w; -}`,backgroundCube_frag:`#ifdef ENVMAP_TYPE_CUBE - uniform samplerCube envMap; -#elif defined( ENVMAP_TYPE_CUBE_UV ) - uniform sampler2D envMap; -#endif -uniform float flipEnvMap; -uniform float backgroundBlurriness; -uniform float backgroundIntensity; -uniform mat3 backgroundRotation; -varying vec3 vWorldDirection; -#include -void main() { - #ifdef ENVMAP_TYPE_CUBE - vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) ); - #elif defined( ENVMAP_TYPE_CUBE_UV ) - vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness ); - #else - vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - #endif - texColor.rgb *= backgroundIntensity; - gl_FragColor = texColor; - #include - #include -}`,cube_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include - gl_Position.z = gl_Position.w; -}`,cube_frag:`uniform samplerCube tCube; -uniform float tFlip; -uniform float opacity; -varying vec3 vWorldDirection; -void main() { - vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) ); - gl_FragColor = texColor; - gl_FragColor.a *= opacity; - #include - #include -}`,depth_vert:`#include -#include -#include -#include -#include -#include -#include -#include -varying vec2 vHighPrecisionZW; -void main() { - #include - #include - #include - #include - #ifdef USE_DISPLACEMENTMAP - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - vHighPrecisionZW = gl_Position.zw; -}`,depth_frag:`#if DEPTH_PACKING == 3200 - uniform float opacity; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -varying vec2 vHighPrecisionZW; -void main() { - vec4 diffuseColor = vec4( 1.0 ); - #include - #if DEPTH_PACKING == 3200 - diffuseColor.a = opacity; - #endif - #include - #include - #include - #include - #include - float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5; - #if DEPTH_PACKING == 3200 - gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity ); - #elif DEPTH_PACKING == 3201 - gl_FragColor = packDepthToRGBA( fragCoordZ ); - #elif DEPTH_PACKING == 3202 - gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 ); - #elif DEPTH_PACKING == 3203 - gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 ); - #endif -}`,distanceRGBA_vert:`#define DISTANCE -varying vec3 vWorldPosition; -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #ifdef USE_DISPLACEMENTMAP - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - vWorldPosition = worldPosition.xyz; -}`,distanceRGBA_frag:`#define DISTANCE -uniform vec3 referencePosition; -uniform float nearDistance; -uniform float farDistance; -varying vec3 vWorldPosition; -#include -#include -#include -#include -#include -#include -#include -#include -void main () { - vec4 diffuseColor = vec4( 1.0 ); - #include - #include - #include - #include - #include - float dist = length( vWorldPosition - referencePosition ); - dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); - dist = saturate( dist ); - gl_FragColor = packDepthToRGBA( dist ); -}`,equirect_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include -}`,equirect_frag:`uniform sampler2D tEquirect; -varying vec3 vWorldDirection; -#include -void main() { - vec3 direction = normalize( vWorldDirection ); - vec2 sampleUV = equirectUv( direction ); - gl_FragColor = texture2D( tEquirect, sampleUV ); - #include - #include -}`,linedashed_vert:`uniform float scale; -attribute float lineDistance; -varying float vLineDistance; -#include -#include -#include -#include -#include -#include -#include -void main() { - vLineDistance = scale * lineDistance; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,linedashed_frag:`uniform vec3 diffuse; -uniform float opacity; -uniform float dashSize; -uniform float totalSize; -varying float vLineDistance; -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - if ( mod( vLineDistance, totalSize ) > dashSize ) { - discard; - } - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include - #include -}`,meshbasic_vert:`#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) - #include - #include - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,meshbasic_frag:`uniform vec3 diffuse; -uniform float opacity; -#ifndef FLAT_SHADED - varying vec3 vNormal; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - #include - #include - #include - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; - #else - reflectedLight.indirectDiffuse += vec3( 1.0 ); - #endif - #include - reflectedLight.indirectDiffuse *= diffuseColor.rgb; - vec3 outgoingLight = reflectedLight.indirectDiffuse; - #include - #include - #include - #include - #include - #include - #include -}`,meshlambert_vert:`#define LAMBERT -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include - #include -}`,meshlambert_frag:`#define LAMBERT -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include - #include -}`,meshmatcap_vert:`#define MATCAP -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; -}`,meshmatcap_frag:`#define MATCAP -uniform vec3 diffuse; -uniform float opacity; -uniform sampler2D matcap; -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 viewDir = normalize( vViewPosition ); - vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); - vec3 y = cross( viewDir, x ); - vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; - #ifdef USE_MATCAP - vec4 matcapColor = texture2D( matcap, uv ); - #else - vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); - #endif - vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb; - #include - #include - #include - #include - #include - #include -}`,meshnormal_vert:`#define NORMAL -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - varying vec3 vViewPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - vViewPosition = - mvPosition.xyz; -#endif -}`,meshnormal_frag:`#define NORMAL -uniform float opacity; -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - varying vec3 vViewPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity ); - #include - #include - #include - #include - gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a ); - #ifdef OPAQUE - gl_FragColor.a = 1.0; - #endif -}`,meshphong_vert:`#define PHONG -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include - #include -}`,meshphong_frag:`#define PHONG -uniform vec3 diffuse; -uniform vec3 emissive; -uniform vec3 specular; -uniform float shininess; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include - #include -}`,meshphysical_vert:`#define STANDARD -varying vec3 vViewPosition; -#ifdef USE_TRANSMISSION - varying vec3 vWorldPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include -#ifdef USE_TRANSMISSION - vWorldPosition = worldPosition.xyz; -#endif -}`,meshphysical_frag:`#define STANDARD -#ifdef PHYSICAL - #define IOR - #define USE_SPECULAR -#endif -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float roughness; -uniform float metalness; -uniform float opacity; -#ifdef IOR - uniform float ior; -#endif -#ifdef USE_SPECULAR - uniform float specularIntensity; - uniform vec3 specularColor; - #ifdef USE_SPECULAR_COLORMAP - uniform sampler2D specularColorMap; - #endif - #ifdef USE_SPECULAR_INTENSITYMAP - uniform sampler2D specularIntensityMap; - #endif -#endif -#ifdef USE_CLEARCOAT - uniform float clearcoat; - uniform float clearcoatRoughness; -#endif -#ifdef USE_DISPERSION - uniform float dispersion; -#endif -#ifdef USE_IRIDESCENCE - uniform float iridescence; - uniform float iridescenceIOR; - uniform float iridescenceThicknessMinimum; - uniform float iridescenceThicknessMaximum; -#endif -#ifdef USE_SHEEN - uniform vec3 sheenColor; - uniform float sheenRoughness; - #ifdef USE_SHEEN_COLORMAP - uniform sampler2D sheenColorMap; - #endif - #ifdef USE_SHEEN_ROUGHNESSMAP - uniform sampler2D sheenRoughnessMap; - #endif -#endif -#ifdef USE_ANISOTROPY - uniform vec2 anisotropyVector; - #ifdef USE_ANISOTROPYMAP - uniform sampler2D anisotropyMap; - #endif -#endif -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; - vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; - #include - vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; - #ifdef USE_SHEEN - float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); - outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect; - #endif - #ifdef USE_CLEARCOAT - float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) ); - vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); - outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat; - #endif - #include - #include - #include - #include - #include - #include -}`,meshtoon_vert:`#define TOON -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include -}`,meshtoon_frag:`#define TOON -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include -}`,points_vert:`uniform float size; -uniform float scale; -#include -#include -#include -#include -#include -#include -#ifdef USE_POINTS_UV - varying vec2 vUv; - uniform mat3 uvTransform; -#endif -void main() { - #ifdef USE_POINTS_UV - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - #endif - #include - #include - #include - #include - #include - #include - gl_PointSize = size; - #ifdef USE_SIZEATTENUATION - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z ); - #endif - #include - #include - #include - #include -}`,points_frag:`uniform vec3 diffuse; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include - #include -}`,shadow_vert:`#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,shadow_frag:`uniform vec3 color; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) ); - #include - #include - #include -}`,sprite_vert:`uniform float rotation; -uniform vec2 center; -#include -#include -#include -#include -#include -void main() { - #include - vec4 mvPosition = modelViewMatrix[ 3 ]; - vec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) ); - #ifndef USE_SIZEATTENUATION - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) scale *= - mvPosition.z; - #endif - vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale; - vec2 rotatedPosition; - rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; - rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; - mvPosition.xy += rotatedPosition; - gl_Position = projectionMatrix * mvPosition; - #include - #include - #include -}`,sprite_frag:`uniform vec3 diffuse; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include -}`},R={common:{diffuse:{value:new N(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new O},alphaMap:{value:null},alphaMapTransform:{value:new O},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new O}},envmap:{envMap:{value:null},envMapRotation:{value:new O},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new O}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new O}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new O},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new O},normalScale:{value:new D(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new O},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new O}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new O}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new O}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new N(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new N(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new O},alphaTest:{value:0},uvTransform:{value:new O}},sprite:{diffuse:{value:new N(16777215)},opacity:{value:1},center:{value:new D(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new O},alphaMap:{value:null},alphaMapTransform:{value:new O},alphaTest:{value:0}}},br={basic:{uniforms:ir([R.common,R.specularmap,R.envmap,R.aomap,R.lightmap,R.fog]),vertexShader:L.meshbasic_vert,fragmentShader:L.meshbasic_frag},lambert:{uniforms:ir([R.common,R.specularmap,R.envmap,R.aomap,R.lightmap,R.emissivemap,R.bumpmap,R.normalmap,R.displacementmap,R.fog,R.lights,{emissive:{value:new N(0)}}]),vertexShader:L.meshlambert_vert,fragmentShader:L.meshlambert_frag},phong:{uniforms:ir([R.common,R.specularmap,R.envmap,R.aomap,R.lightmap,R.emissivemap,R.bumpmap,R.normalmap,R.displacementmap,R.fog,R.lights,{emissive:{value:new N(0)},specular:{value:new N(1118481)},shininess:{value:30}}]),vertexShader:L.meshphong_vert,fragmentShader:L.meshphong_frag},standard:{uniforms:ir([R.common,R.envmap,R.aomap,R.lightmap,R.emissivemap,R.bumpmap,R.normalmap,R.displacementmap,R.roughnessmap,R.metalnessmap,R.fog,R.lights,{emissive:{value:new N(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:L.meshphysical_vert,fragmentShader:L.meshphysical_frag},toon:{uniforms:ir([R.common,R.aomap,R.lightmap,R.emissivemap,R.bumpmap,R.normalmap,R.displacementmap,R.gradientmap,R.fog,R.lights,{emissive:{value:new N(0)}}]),vertexShader:L.meshtoon_vert,fragmentShader:L.meshtoon_frag},matcap:{uniforms:ir([R.common,R.bumpmap,R.normalmap,R.displacementmap,R.fog,{matcap:{value:null}}]),vertexShader:L.meshmatcap_vert,fragmentShader:L.meshmatcap_frag},points:{uniforms:ir([R.points,R.fog]),vertexShader:L.points_vert,fragmentShader:L.points_frag},dashed:{uniforms:ir([R.common,R.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:L.linedashed_vert,fragmentShader:L.linedashed_frag},depth:{uniforms:ir([R.common,R.displacementmap]),vertexShader:L.depth_vert,fragmentShader:L.depth_frag},normal:{uniforms:ir([R.common,R.bumpmap,R.normalmap,R.displacementmap,{opacity:{value:1}}]),vertexShader:L.meshnormal_vert,fragmentShader:L.meshnormal_frag},sprite:{uniforms:ir([R.sprite,R.fog]),vertexShader:L.sprite_vert,fragmentShader:L.sprite_frag},background:{uniforms:{uvTransform:{value:new O},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:L.background_vert,fragmentShader:L.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new O}},vertexShader:L.backgroundCube_vert,fragmentShader:L.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:L.cube_vert,fragmentShader:L.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:L.equirect_vert,fragmentShader:L.equirect_frag},distanceRGBA:{uniforms:ir([R.common,R.displacementmap,{referencePosition:{value:new A},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:L.distanceRGBA_vert,fragmentShader:L.distanceRGBA_frag},shadow:{uniforms:ir([R.lights,R.fog,{color:{value:new N(0)},opacity:{value:1}}]),vertexShader:L.shadow_vert,fragmentShader:L.shadow_frag}};br.physical={uniforms:ir([br.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new O},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new O},clearcoatNormalScale:{value:new D(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new O},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new O},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new O},sheen:{value:0},sheenColor:{value:new N(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new O},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new O},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new O},transmissionSamplerSize:{value:new D},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new O},attenuationDistance:{value:0},attenuationColor:{value:new N(0)},specularColor:{value:new N(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new O},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new O},anisotropyVector:{value:new D},anisotropyMap:{value:null},anisotropyMapTransform:{value:new O}}]),vertexShader:L.meshphysical_vert,fragmentShader:L.meshphysical_frag};var xr=class extends cr{constructor(e=-1,t=1,n=1,r=-1,i=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type=`OrthographicCamera`,this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=n,this.bottom=r,this.near=i,this.far=a,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=e.view===null?null:Object.assign({},e.view),this}setViewOffset(e,t,n,r,i,a){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,r=(this.top+this.bottom)/2,i=n-e,a=n+e,o=r+t,s=r-t;if(this.view!==null&&this.view.enabled){let e=(this.right-this.left)/this.view.fullWidth/this.zoom,t=(this.top-this.bottom)/this.view.fullHeight/this.zoom;i+=e*this.view.offsetX,a=i+e*this.view.width,o-=t*this.view.offsetY,s=o-t*this.view.height}this.projectionMatrix.makeOrthographic(i,a,o,s,this.near,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,this.view!==null&&(t.object.view=Object.assign({},this.view)),t}};let Sr=(1+Math.sqrt(5))/2,Cr=1/Sr;-Sr,-Cr,-Cr;var wr=class extends it{constructor(e,t,n,r,i,a,s,c,l,u=1026){if(u!==1026&&u!==1027)throw Error(`DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat`);n===void 0&&u===1026&&(n=1014),n===void 0&&u===1027&&(n=1020),super(null,r,i,a,s,c,u,n,l),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=s===void 0?o:s,this.minFilter=c===void 0?o:c,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return this.compareFunction!==null&&(t.compareFunction=this.compareFunction),t}},Tr=class extends M{constructor(){super(),this.isGroup=!0,this.type=`Group`}},Er=class{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e===void 0?0:e.length/t,this.usage=me,this.updateRanges=[],this.version=0,this.uuid=be()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let r=0,i=this.stride;r0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;er)return;ai.applyMatrix4(e.matrixWorld);let s=t.ray.origin.distanceTo(ai);if(!(st.far))return{distance:s,point:oi.clone().applyMatrix4(e.matrixWorld),index:i,face:null,faceIndex:null,barycoord:null,object:e}}let li=new A,ui=new A;var di=class extends si{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type=`LineSegments`}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[];for(let e=0,r=t.count;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;ei.far)return;a.push({distance:c,distanceToRay:Math.sqrt(s),point:n,index:t,face:null,faceIndex:null,barycoord:null,object:o})}}var bi=class extends it{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=o,this.minFilter=o,this.generateMipmaps=!1,this.needsUpdate=!0}},xi=class extends it{constructor(e,t,n,r,i,a,o,s,c,l,u,d){super(null,a,o,s,c,l,r,i,u,d),this.isCompressedTexture=!0,this.image={width:t,height:n},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}},Si=class extends xi{constructor(e,t,n,r,a,o){super(e,t,n,a,o),this.isCompressedArrayTexture=!0,this.image.depth=r,this.wrapR=i,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}},Ci=class extends xi{constructor(e,t,n){super(void 0,e[0].width,e[0].height,t,n,301),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=e}},wi=class extends kn{constructor(e){super(),this.isMeshStandardMaterial=!0,this.defines={STANDARD:``},this.type=`MeshStandardMaterial`,this.color=new N(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new N(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new D(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Kt,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={STANDARD:``},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.envMapIntensity=e.envMapIntensity,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},Ti=class extends wi{constructor(e){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:``,PHYSICAL:``},this.type=`MeshPhysicalMaterial`,this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new D(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,`reflectivity`,{get:function(){return xe(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(e){this.ior=(1+.4*e)/(1-.4*e)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new N(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new N(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new N(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(e)}get anisotropy(){return this._anisotropy}set anisotropy(e){this._anisotropy>0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:``,PHYSICAL:``},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}};function Ei(e,t,n){return!e||!n&&e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}function Di(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Oi(e){function t(t,n){return e[t]-e[n]}let n=e.length,r=Array(n);for(let e=0;e!==n;++e)r[e]=e;return r.sort(t),r}function ki(e,t,n){let r=e.length,i=new e.constructor(r);for(let a=0,o=0;o!==r;++a){let r=n[a]*t;for(let n=0;n!==t;++n)i[o++]=e[r+n]}return i}function Ai(e,t,n,r){let i=1,a=e[0];for(;a!==void 0&&a[r]===void 0;)a=e[i++];if(a===void 0)return;let o=a[r];if(o!==void 0)if(Array.isArray(o))do o=a[r],o!==void 0&&(t.push(a.time),n.push.apply(n,o)),a=e[i++];while(a!==void 0);else if(o.toArray!==void 0)do o=a[r],o!==void 0&&(t.push(a.time),o.toArray(n,n.length)),a=e[i++];while(a!==void 0);else do o=a[r],o!==void 0&&(t.push(a.time),n.push(o)),a=e[i++];while(a!==void 0)}var ji=class{constructor(e,t,n,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r===void 0?new t.constructor(n):r,this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,r=t[n],i=t[n-1];validate_interval:{seek:{let a;linear_scan:{forward_scan:if(!(e=i)){let o=t[1];e=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n>>1;et;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(console.error(`THREE.KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(console.error(`THREE.KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){console.error(`THREE.KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){console.error(`THREE.KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&Di(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){console.error(`THREE.KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===ae,i=e.length-1,a=1;for(let o=1;o0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}};Fi.prototype.TimeBufferType=Float32Array,Fi.prototype.ValueBufferType=Float32Array,Fi.prototype.DefaultInterpolation=ie;var Ii=class extends Fi{constructor(e,t,n){super(e,t,n)}};Ii.prototype.ValueTypeName=`bool`,Ii.prototype.ValueBufferType=Array,Ii.prototype.DefaultInterpolation=re,Ii.prototype.InterpolantFactoryMethodLinear=void 0,Ii.prototype.InterpolantFactoryMethodSmooth=void 0;var Li=class extends Fi{};Li.prototype.ValueTypeName=`color`;var Ri=class extends Fi{};Ri.prototype.ValueTypeName=`number`;var zi=class extends ji{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)st.slerpFlat(i,0,a,c-o,a,c,s);return i}},Bi=class extends Fi{InterpolantFactoryMethodLinear(e){return new zi(this.times,this.values,this.getValueSize(),e)}};Bi.prototype.ValueTypeName=`quaternion`,Bi.prototype.InterpolantFactoryMethodSmooth=void 0;var Vi=class extends Fi{constructor(e,t,n){super(e,t,n)}};Vi.prototype.ValueTypeName=`string`,Vi.prototype.ValueBufferType=Array,Vi.prototype.DefaultInterpolation=re,Vi.prototype.InterpolantFactoryMethodLinear=void 0,Vi.prototype.InterpolantFactoryMethodSmooth=void 0;var Hi=class extends Fi{};Hi.prototype.ValueTypeName=`vector`;var Ui=class{constructor(e=``,t=-1,n=[],r=2500){this.name=e,this.tracks=n,this.duration=t,this.blendMode=r,this.uuid=be(),this.duration<0&&this.resetDuration()}static parse(e){let t=[],n=e.tracks,r=1/(e.fps||1);for(let e=0,i=n.length;e!==i;++e)t.push(Gi(n[e]).scale(r));let i=new this(e.name,e.duration,t,e.blendMode);return i.uuid=e.uuid,i}static toJSON(e){let t=[],n=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let e=0,r=n.length;e!==r;++e)t.push(Fi.toJSON(n[e]));return r}static CreateFromMorphTargetSequence(e,t,n,r){let i=t.length,a=[];for(let e=0;e1){let e=a[1],t=r[e];t||(r[e]=t=[]),t.push(n)}}let a=[];for(let e in r)a.push(this.CreateFromMorphTargetSequence(e,r[e],t,n));return a}static parseAnimation(e,t){if(!e)return console.error(`THREE.AnimationClip: No animation in JSONLoader data.`),null;let n=function(e,t,n,r,i){if(n.length!==0){let a=[],o=[];Ai(n,a,o,r),a.length!==0&&i.push(new e(t,a,o))}},r=[],i=e.name||`default`,a=e.fps||30,o=e.blendMode,s=e.length||-1,c=e.hierarchy||[];for(let e=0;e{t&&t(i),this.manager.itemEnd(e)},0),i;if(Yi[e]!==void 0){Yi[e].push({onLoad:t,onProgress:n,onError:r});return}Yi[e]=[],Yi[e].push({onLoad:t,onProgress:n,onError:r});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?`include`:`same-origin`}),o=this.mimeType,s=this.responseType;fetch(a).then(t=>{if(t.status===200||t.status===0){if(t.status===0&&console.warn(`THREE.FileLoader: HTTP Status 0 received.`),typeof ReadableStream>`u`||t.body===void 0||t.body.getReader===void 0)return t;let n=Yi[e],r=t.body.getReader(),i=t.headers.get(`X-File-Size`)||t.headers.get(`Content-Length`),a=i?parseInt(i):0,o=a!==0,s=0,c=new ReadableStream({start(e){t();function t(){r.read().then(({done:r,value:i})=>{if(r)e.close();else{s+=i.byteLength;let r=new ProgressEvent(`progress`,{lengthComputable:o,loaded:s,total:a});for(let e=0,t=n.length;e{e.error(t)})}}});return new Response(c)}else throw new Xi(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(s){case`arraybuffer`:return e.arrayBuffer();case`blob`:return e.blob();case`document`:return e.text().then(e=>new DOMParser().parseFromString(e,o));case`json`:return e.json();default:if(o===void 0)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(o),n=t&&t[1]?t[1].toLowerCase():void 0,r=new TextDecoder(n);return e.arrayBuffer().then(e=>r.decode(e))}}}).then(t=>{Ki.add(e,t);let n=Yi[e];delete Yi[e];for(let e=0,r=n.length;e{let n=Yi[e];if(n===void 0)throw this.manager.itemError(e),t;delete Yi[e];for(let e=0,r=n.length;e{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}},Qi=class extends Ji{constructor(e){super(e)}load(e,t,n,r){this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let i=this,a=Ki.get(e);if(a!==void 0)return i.manager.itemStart(e),setTimeout(function(){t&&t(a),i.manager.itemEnd(e)},0),a;let o=We(`img`);function s(){l(),Ki.add(e,this),t&&t(this),i.manager.itemEnd(e)}function c(t){l(),r&&r(t),i.manager.itemError(e),i.manager.itemEnd(e)}function l(){o.removeEventListener(`load`,s,!1),o.removeEventListener(`error`,c,!1)}return o.addEventListener(`load`,s,!1),o.addEventListener(`error`,c,!1),e.slice(0,5)!==`data:`&&this.crossOrigin!==void 0&&(o.crossOrigin=this.crossOrigin),i.manager.itemStart(e),o.src=e,o}},$i=class extends Ji{constructor(e){super(e)}load(e,t,n,r){let i=new it,a=new Qi(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(e,function(e){i.image=e,i.needsUpdate=!0,t!==void 0&&t(i)},n,r),i}},ea=class extends M{constructor(e,t=1){super(),this.isLight=!0,this.type=`Light`,this.color=new N(e),this.intensity=t}dispose(){}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){let t=super.toJSON(e);return t.object.color=this.color.getHex(),t.object.intensity=this.intensity,this.groundColor!==void 0&&(t.object.groundColor=this.groundColor.getHex()),this.distance!==void 0&&(t.object.distance=this.distance),this.angle!==void 0&&(t.object.angle=this.angle),this.decay!==void 0&&(t.object.decay=this.decay),this.penumbra!==void 0&&(t.object.penumbra=this.penumbra),this.shadow!==void 0&&(t.object.shadow=this.shadow.toJSON()),this.target!==void 0&&(t.object.target=this.target.uuid),t}};let ta=new j,na=new A,ra=new A;var ia=class{constructor(e){this.camera=e,this.intensity=1,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new D(512,512),this.map=null,this.mapPass=null,this.matrix=new j,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new yr,this._frameExtents=new D(1,1),this._viewportCount=1,this._viewports=[new k(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){let t=this.camera,n=this.matrix;na.setFromMatrixPosition(e.matrixWorld),t.position.copy(na),ra.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(ra),t.updateMatrixWorld(),ta.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(ta),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(ta)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.intensity=e.intensity,this.bias=e.bias,this.radius=e.radius,this.mapSize.copy(e.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){let e={};return this.intensity!==1&&(e.intensity=this.intensity),this.bias!==0&&(e.bias=this.bias),this.normalBias!==0&&(e.normalBias=this.normalBias),this.radius!==1&&(e.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(e.mapSize=this.mapSize.toArray()),e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}},aa=class extends ia{constructor(){super(new fr(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(e){let t=this.camera,n=ye*2*e.angle*this.focus,r=this.mapSize.width/this.mapSize.height,i=e.distance||t.far;(n!==t.fov||r!==t.aspect||i!==t.far)&&(t.fov=n,t.aspect=r,t.far=i,t.updateProjectionMatrix()),super.updateMatrices(e)}copy(e){return super.copy(e),this.focus=e.focus,this}},oa=class extends ea{constructor(e,t,n=0,r=Math.PI/3,i=0,a=2){super(e,t),this.isSpotLight=!0,this.type=`SpotLight`,this.position.copy(M.DEFAULT_UP),this.updateMatrix(),this.target=new M,this.distance=n,this.angle=r,this.penumbra=i,this.decay=a,this.map=null,this.shadow=new aa}get power(){return this.intensity*Math.PI}set power(e){this.intensity=e/Math.PI}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.angle=e.angle,this.penumbra=e.penumbra,this.decay=e.decay,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}};let sa=new j,ca=new A,la=new A;var ua=class extends ia{constructor(){super(new fr(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new D(4,2),this._viewportCount=6,this._viewports=[new k(2,1,1,1),new k(0,1,1,1),new k(3,1,1,1),new k(1,1,1,1),new k(3,0,1,1),new k(1,0,1,1)],this._cubeDirections=[new A(1,0,0),new A(-1,0,0),new A(0,0,1),new A(0,0,-1),new A(0,1,0),new A(0,-1,0)],this._cubeUps=[new A(0,1,0),new A(0,1,0),new A(0,1,0),new A(0,1,0),new A(0,0,1),new A(0,0,-1)]}updateMatrices(e,t=0){let n=this.camera,r=this.matrix,i=e.distance||n.far;i!==n.far&&(n.far=i,n.updateProjectionMatrix()),ca.setFromMatrixPosition(e.matrixWorld),n.position.copy(ca),la.copy(n.position),la.add(this._cubeDirections[t]),n.up.copy(this._cubeUps[t]),n.lookAt(la),n.updateMatrixWorld(),r.makeTranslation(-ca.x,-ca.y,-ca.z),sa.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(sa)}},da=class extends ea{constructor(e,t,n=0,r=2){super(e,t),this.isPointLight=!0,this.type=`PointLight`,this.distance=n,this.decay=r,this.shadow=new ua}get power(){return this.intensity*4*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}},fa=class extends ia{constructor(){super(new xr(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}},pa=class extends ea{constructor(e,t){super(e,t),this.isDirectionalLight=!0,this.type=`DirectionalLight`,this.position.copy(M.DEFAULT_UP),this.updateMatrix(),this.target=new M,this.shadow=new fa}dispose(){this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}},ma=class{static decodeText(e){if(console.warn(`THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead.`),typeof TextDecoder<`u`)return new TextDecoder().decode(e);let t=``;for(let n=0,r=e.length;n`u`&&console.warn(`THREE.ImageBitmapLoader: createImageBitmap() not supported.`),typeof fetch>`u`&&console.warn(`THREE.ImageBitmapLoader: fetch() not supported.`),this.options={premultiplyAlpha:`none`}}setOptions(e){return this.options=e,this}load(e,t,n,r){e===void 0&&(e=``),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let i=this,a=Ki.get(e);if(a!==void 0){if(i.manager.itemStart(e),a.then){a.then(n=>{t&&t(n),i.manager.itemEnd(e)}).catch(e=>{r&&r(e)});return}return setTimeout(function(){t&&t(a),i.manager.itemEnd(e)},0),a}let o={};o.credentials=this.crossOrigin===`anonymous`?`same-origin`:`include`,o.headers=this.requestHeader;let s=fetch(e,o).then(function(e){return e.blob()}).then(function(e){return createImageBitmap(e,Object.assign(i.options,{colorSpaceConversion:`none`}))}).then(function(n){return Ki.add(e,n),t&&t(n),i.manager.itemEnd(e),n}).catch(function(t){r&&r(t),Ki.remove(e),i.manager.itemError(e),i.manager.itemEnd(e)});Ki.add(e,s),i.manager.itemStart(e)}};let ga=`\\[\\]\\.:\\/`,_a=RegExp(`[`+ga+`]`,`g`);``+ga;let va=`[^`+ga.replace(`\\.`,``)+`]`,ya=RegExp(`^((?:[^\\[\\]\\.:\\/]+[\\/:])*)`+`(WCOD+)?`.replace(`WCOD`,va)+`(?:\\.([^\\[\\]\\.:\\/]+)(?:\\[(.+)\\])?)?\\.([^\\[\\]\\.:\\/]+)(?:\\[(.+)\\])?$`),ba=[`material`,`materials`,`bones`,`map`];var xa=class{constructor(e,t,n){let r=n||z.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},z=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\s/g,`_`).replace(_a,``)}static parseTrackName(e){let t=ya.exec(e);if(t===null)throw Error(`PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);ba.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e,r){for(let i=0;i>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&r)+(n>>>0)}let Ca=(...e)=>Sa(e);function wa(e,t=!1){let n=[];e.isNode===!0&&(n.push(e.id),e=e.getSelf());for(let{property:r,childNode:i}of Ta(e))n.push(n,Sa(r.slice(0,-4)),i.getCacheKey(t));return Sa(n)}function*Ta(e,t=!1){for(let n in e){if(n.startsWith(`_`)===!0)continue;let r=e[n];if(Array.isArray(r)===!0)for(let e=0;ee.charCodeAt(0)).buffer}let Aa={VERTEX:`vertex`,FRAGMENT:`fragment`},B={NONE:`none`,FRAME:`frame`,RENDER:`render`,OBJECT:`object`},ja=[`x`,`y`,`z`,`w`],Ma=0;var V=class extends ge{static get type(){return`Node`}constructor(e=null){super(),this.nodeType=e,this.updateType=B.NONE,this.updateBeforeType=B.NONE,this.updateAfterType=B.NONE,this.uuid=Ve.generateUUID(),this.version=0,this._cacheKey=null,this._cacheKeyVersion=0,this.global=!1,this.isNode=!0,Object.defineProperty(this,`id`,{value:Ma++})}set needsUpdate(e){e===!0&&this.version++}get type(){return this.constructor.type}onUpdate(e,t){return this.updateType=t,this.update=e.bind(this.getSelf()),this}onFrameUpdate(e){return this.onUpdate(e,B.FRAME)}onRenderUpdate(e){return this.onUpdate(e,B.RENDER)}onObjectUpdate(e){return this.onUpdate(e,B.OBJECT)}onReference(e){return this.updateReference=e.bind(this.getSelf()),this}getSelf(){return this.self||this}updateReference(){return this}isGlobal(){return this.global}*getChildren(){for(let{childNode:e}of Ta(this))yield e}dispose(){this.dispatchEvent({type:`dispose`})}traverse(e){e(this);for(let t of this.getChildren())t.traverse(e)}getCacheKey(e=!1){return e||=this.version!==this._cacheKeyVersion,(e===!0||this._cacheKey===null)&&(this._cacheKey=wa(this,e),this._cacheKeyVersion=this.version),this._cacheKey}getScope(){return this}getHash(){return this.uuid}getUpdateType(){return this.updateType}getUpdateBeforeType(){return this.updateBeforeType}getUpdateAfterType(){return this.updateAfterType}getElementType(e){let t=this.getNodeType(e);return e.getElementType(t)}getNodeType(e){let t=e.getNodeProperties(this);return t.outputNode?t.outputNode.getNodeType(e):this.nodeType}getShared(e){let t=this.getHash(e);return e.getNodeFromHash(t)||this}setup(e){let t=e.getNodeProperties(this),n=0;for(let e of this.getChildren())t[`node`+ n++]=e;return null}analyze(e){if(e.increaseUsage(this)===1){let t=e.getNodeProperties(this);for(let n of Object.values(t))n&&n.isNode===!0&&n.build(e)}}generate(e,t){let{outputNode:n}=e.getNodeProperties(this);if(n&&n.isNode===!0)return n.build(e,t)}updateBefore(){console.warn(`Abstract function.`)}updateAfter(){console.warn(`Abstract function.`)}update(){console.warn(`Abstract function.`)}build(e,t=null){let n=this.getShared(e);if(this!==n)return n.build(e,t);e.addNode(this),e.addChain(this);let r=null,i=e.getBuildStage();if(i===`setup`){this.updateReference(e);let t=e.getNodeProperties(this);if(t.initialized!==!0){e.stack.nodes.length,t.initialized=!0,t.outputNode=this.setup(e),t.outputNode!==null&&e.stack.nodes.length;for(let n of Object.values(t))n&&n.isNode===!0&&n.build(e)}}else if(i===`analyze`)this.analyze(e);else if(i===`generate`)if(this.generate.length===1){let n=this.getNodeType(e),i=e.getDataFromNode(this);r=i.snippet,r===void 0?(r=this.generate(e)||``,i.snippet=r):i.flowCodes!==void 0&&e.context.nodeBlock!==void 0&&e.addFlowCodeHierarchy(this,e.context.nodeBlock),r=e.format(r,n,t)}else r=this.generate(e,t)||``;return e.removeChain(this),r}getSerializeChildren(){return Ta(this)}serialize(e){let t=this.getSerializeChildren(),n={};for(let{property:r,index:i,childNode:a}of t)i===void 0?n[r]=a.toJSON(e.meta).uuid:(n[r]===void 0&&(n[r]=Number.isInteger(i)?[]:{}),n[r][i]=a.toJSON(e.meta).uuid);Object.keys(n).length>0&&(e.inputNodes=n)}deserialize(e){if(e.inputNodes!==void 0){let t=e.meta.nodes;for(let n in e.inputNodes)if(Array.isArray(e.inputNodes[n])){let r=[];for(let i of e.inputNodes[n])r.push(t[i]);this[n]=r}else if(typeof e.inputNodes[n]==`object`){let r={};for(let i in e.inputNodes[n])r[i]=t[e.inputNodes[n][i]];this[n]=r}else this[n]=t[e.inputNodes[n]]}}toJSON(e){let{uuid:t,type:n}=this,r=e===void 0||typeof e==`string`;r&&(e={textures:{},images:{},nodes:{}});let i=e.nodes[t];i===void 0&&(i={uuid:t,type:n,meta:e,metadata:{version:4.6,type:`Node`,generator:`Node.toJSON`}},r!==!0&&(e.nodes[i.uuid]=i),this.serialize(i),delete i.meta);function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(r){let t=a(e.textures),n=a(e.images),r=a(e.nodes);t.length>0&&(i.textures=t),n.length>0&&(i.images=n),r.length>0&&(i.nodes=r)}return i}},Na=class extends V{static get type(){return`ArrayElementNode`}constructor(e,t){super(),this.node=e,this.indexNode=t,this.isArrayElementNode=!0}getNodeType(e){return this.node.getElementType(e)}generate(e){return`${this.node.build(e)}[ ${this.indexNode.build(e,`uint`)} ]`}},Pa=class extends V{static get type(){return`ConvertNode`}constructor(e,t){super(),this.node=e,this.convertTo=t}getNodeType(e){let t=this.node.getNodeType(e),n=null;for(let r of this.convertTo.split(`|`))(n===null||e.getTypeLength(t)===e.getTypeLength(r))&&(n=r);return n}serialize(e){super.serialize(e),e.convertTo=this.convertTo}deserialize(e){super.deserialize(e),this.convertTo=e.convertTo}generate(e,t){let n=this.node,r=this.getNodeType(e),i=n.build(e,r);return e.format(i,r,t)}},Fa=class extends V{static get type(){return`TempNode`}constructor(e){super(e),this.isTempNode=!0}hasDependencies(e){return e.getDataFromNode(this).usageCount>1}build(e,t){if(e.getBuildStage()===`generate`){let n=e.getVectorType(this.getNodeType(e,t)),r=e.getDataFromNode(this);if(r.propertyName!==void 0)return e.format(r.propertyName,n,t);if(n!==`void`&&t!==`void`&&this.hasDependencies(e)){let i=super.build(e,n),a=e.getVarFromNode(this,null,n),o=e.getPropertyName(a);return e.addLineFlowCode(`${o} = ${i}`,this),r.snippet=i,r.propertyName=o,e.format(r.propertyName,n,t)}}return super.build(e,t)}},Ia=class extends Fa{static get type(){return`JoinNode`}constructor(e=[],t=null){super(t),this.nodes=e}getNodeType(e){return this.nodeType===null?e.getTypeFromLength(this.nodes.reduce((t,n)=>t+e.getTypeLength(n.getNodeType(e)),0)):e.getVectorType(this.nodeType)}generate(e,t){let n=this.getNodeType(e),r=this.nodes,i=e.getComponentType(n),a=[];for(let t of r){let n=t.build(e),r=e.getComponentType(t.getNodeType(e));r!==i&&(n=e.format(n,r,i)),a.push(n)}let o=`${e.getType(n)}( ${a.join(`, `)} )`;return e.format(o,n,t)}};let La=ja.join(``);var Ra=class extends V{static get type(){return`SplitNode`}constructor(e,t=`x`){super(),this.node=e,this.components=t,this.isSplitNode=!0}getVectorLength(){let e=this.components.length;for(let t of this.components)e=Math.max(ja.indexOf(t)+1,e);return e}getComponentType(e){return e.getComponentType(this.node.getNodeType(e))}getNodeType(e){return e.getTypeFromLength(this.components.length,this.getComponentType(e))}generate(e,t){let n=this.node,r=e.getTypeLength(n.getNodeType(e)),i=null;if(r>1){let a=null;this.getVectorLength()>=r&&(a=e.getTypeFromLength(this.getVectorLength(),this.getComponentType(e)));let o=n.build(e,a);i=this.components.length===r&&this.components===La.slice(0,this.components.length)?e.format(o,a,t):e.format(`${o}.${this.components}`,this.getNodeType(e),t)}else i=n.build(e,t);return i}serialize(e){super.serialize(e),e.components=this.components}deserialize(e){super.deserialize(e),this.components=e.components}},za=class extends Fa{static get type(){return`SetNode`}constructor(e,t,n){super(),this.sourceNode=e,this.components=t,this.targetNode=n}getNodeType(e){return this.sourceNode.getNodeType(e)}generate(e){let{sourceNode:t,components:n,targetNode:r}=this,i=this.getNodeType(e),a=e.getTypeFromLength(n.length,r.getNodeType(e)),o=r.build(e,a),s=t.build(e,i),c=e.getTypeLength(i),l=[];for(let e=0;ee.replace(/r|s/g,`x`).replace(/g|t/g,`y`).replace(/b|p/g,`z`).replace(/a|q/g,`w`),Ga=e=>Wa(e).split(``).sort().join(``),Ka={setup(e,t){return e(_o(t.shift()),...t)},get(e,t,n){if(typeof t==`string`&&e[t]===void 0){if(e.isStackNode!==!0&&t===`assign`)return(...e)=>(null.assign(n,...e),n);if(Ua.has(t)){let r=Ua.get(t);return e.isStackNode?(...e)=>n.add(r(...e)):(...e)=>r(n,...e)}else if(t===`self`)return e;else if(t.endsWith(`Assign`)&&Ua.has(t.slice(0,t.length-6))){let r=Ua.get(t.slice(0,t.length-6));return e.isStackNode?(...e)=>n.assign(e[0],r(...e)):(...e)=>n.assign(r(n,...e))}else if(/^[xyzwrgbastpq]{1,4}$/.test(t)===!0)return t=Wa(t),W(new Ra(n,t));else if(/^set[XYZWRGBASTPQ]{1,4}$/.test(t)===!0)return t=Ga(t.slice(3).toLowerCase()),n=>W(new za(e,t,n));else if(/^flip[XYZWRGBASTPQ]{1,4}$/.test(t)===!0)return t=Ga(t.slice(4).toLowerCase()),()=>W(new Ba(W(e),t));else if(t===`width`||t===`height`||t===`depth`)return t===`width`?t=`x`:t===`height`?t=`y`:t===`depth`&&(t=`z`),W(new Ra(e,t));else if(/^\d+$/.test(t)===!0)return W(new Na(n,new Ha(Number(t),`uint`)))}return Reflect.get(e,t,n)},set(e,t,n,r){return typeof t==`string`&&e[t]===void 0&&(/^[xyzwrgbastpq]{1,4}$/.test(t)===!0||t===`width`||t===`height`||t===`depth`||/^\d+$/.test(t)===!0)?(r[t].assign(n),!0):Reflect.set(e,t,n,r)}},qa=new WeakMap,Ja=new WeakMap,Ya=function(e,t=null){let n=Ea(e);if(n===`node`){let t=qa.get(e);return t===void 0&&(t=new Proxy(e,Ka),qa.set(e,t),qa.set(t,t)),t}else if(t===null&&(n===`float`||n===`boolean`)||n&&n!==`shader`&&n!==`string`)return W(po(e,t));else if(n===`shader`)return K(e);return e},Xa=function(e,t=null){for(let n in e)e[n]=W(e[n],t);return e},Za=function(e,t=null){let n=e.length;for(let r=0;rW(r===null?e:Object.assign(e,r));return t===null?(...t)=>i(new e(...vo(t))):n===null?(...n)=>i(new e(t,...vo(n))):(n=W(n),(...r)=>i(new e(t,...vo(r),n)))},$a=function(e,...t){return W(new e(...vo(t)))};var eo=class extends V{constructor(e,t){super(),this.shaderNode=e,this.inputNodes=t}getNodeType(e){return this.shaderNode.nodeType||this.getOutputNode(e).getNodeType(e)}call(e){let{shaderNode:t,inputNodes:n}=this,r=e.getNodeProperties(t);if(r.onceOutput)return r.onceOutput;let i=null;if(t.layout){let r=Ja.get(e.constructor);r===void 0&&(r=new WeakMap,Ja.set(e.constructor,r));let a=r.get(t);a===void 0&&(a=W(e.buildFunctionNode(t)),r.set(t,a)),e.currentFunctionNode!==null&&e.currentFunctionNode.includes.push(a),i=W(a.call(n))}else{let r=t.jsFunc;i=W(n===null?r(e):r(n,e))}return t.once&&(r.onceOutput=i),i}getOutputNode(e){let t=e.getNodeProperties(this);return t.outputNode===null&&(t.outputNode=this.setupOutput(e)),t.outputNode}setup(e){return this.getOutputNode(e)}setupOutput(e){return e.addStack(),e.stack.outputNode=this.call(e),e.removeStack()}generate(e,t){return this.getOutputNode(e).build(e,t)}},to=class extends V{constructor(e,t){super(t),this.jsFunc=e,this.layout=null,this.global=!0,this.once=!1}setLayout(e){return this.layout=e,this}call(e=null){return _o(e),W(new eo(this,e))}setup(){return this.call()}};let no=[!1,!0],ro=[0,1,2,3],io=[-1,-2],ao=[.5,1.5,1/3,1e-6,1e6,Math.PI,Math.PI*2,1/Math.PI,2/Math.PI,1/(Math.PI*2),Math.PI/2],oo=new Map;for(let e of no)oo.set(e,new Ha(e));let so=new Map;for(let e of ro)so.set(e,new Ha(e,`uint`));let co=new Map([...so].map(e=>new Ha(e.value,`int`)));for(let e of io)co.set(e,new Ha(e,`int`));let lo=new Map([...co].map(e=>new Ha(e.value)));for(let e of ao)lo.set(e,new Ha(e));for(let e of ao)lo.set(-e,new Ha(-e));let uo={bool:oo,uint:so,ints:co,float:lo},fo=new Map([...oo,...lo]),po=(e,t)=>fo.has(e)?fo.get(e):e.isNode===!0?e:new Ha(e,t),mo=e=>{try{return e.getNodeType()}catch{return}},U=function(e,t=null){return(...n)=>{if((n.length===0||![`bool`,`float`,`int`,`uint`].includes(e)&&n.every(e=>typeof e!=`object`))&&(n=[Da(e,...n)]),n.length===1&&t!==null&&t.has(n[0]))return W(t.get(n[0]));if(n.length===1){let t=po(n[0],e);return mo(t)===e?W(t):W(new Pa(t,e))}return W(new Ia(n.map(e=>po(e)),e))}},ho=e=>e==null?null:e.nodeType||e.convertTo||(typeof e==`string`?e:null);function go(e,t){return new Proxy(new to(e,t),Ka)}let W=(e,t=null)=>Ya(e,t),_o=(e,t=null)=>new Xa(e,t),vo=(e,t=null)=>new Za(e,t),G=(...e)=>new Qa(...e),yo=(...e)=>new $a(...e),K=(e,t)=>{let n=new go(e,t),r=(...e)=>{let t;return _o(e),t=e[0]&&e[0].isNode?[...e]:e[0],n.call(t)};return r.shaderNode=n,r.setLayout=e=>(n.setLayout(e),r),r.once=()=>(n.once=!0,r),r};H(`toGlobal`,e=>(e.global=!0,e));let bo=(...e)=>null.If(...e);function xo(e){return e}H(`append`,xo);let So=new U(`color`),q=new U(`float`,uo.float),Co=new U(`int`,uo.ints),wo=new U(`uint`,uo.uint),To=new U(`bool`,uo.bool),J=new U(`vec2`),Eo=new U(`ivec2`),Do=new U(`uvec2`),Oo=new U(`bvec2`),Y=new U(`vec3`),ko=new U(`ivec3`),Ao=new U(`uvec3`),jo=new U(`bvec3`),Mo=new U(`vec4`),No=new U(`ivec4`),Po=new U(`uvec4`),Fo=new U(`bvec4`),Io=new U(`mat2`),Lo=new U(`mat3`),Ro=new U(`mat4`);H(`toColor`,So),H(`toFloat`,q),H(`toInt`,Co),H(`toUint`,wo),H(`toBool`,To),H(`toVec2`,J),H(`toIVec2`,Eo),H(`toUVec2`,Do),H(`toBVec2`,Oo),H(`toVec3`,Y),H(`toIVec3`,ko),H(`toUVec3`,Ao),H(`toBVec3`,jo),H(`toVec4`,Mo),H(`toIVec4`,No),H(`toUVec4`,Po),H(`toBVec4`,Fo),H(`toMat2`,Io),H(`toMat3`,Lo),H(`toMat4`,Ro),H(`element`,G(Na)),H(`convert`,(e,t)=>W(new Pa(W(e),t)));var zo=class extends V{static get type(){return`UniformGroupNode`}constructor(e,t=!1,n=1){super(`string`),this.name=e,this.version=0,this.shared=t,this.order=n,this.isUniformGroup=!0}set needsUpdate(e){e===!0&&this.version++}serialize(e){super.serialize(e),e.name=this.name,e.version=this.version,e.shared=this.shared}deserialize(e){super.deserialize(e),this.name=e.name,this.version=e.version,this.shared=e.shared}};let Bo=e=>new zo(e),Vo=((e,t=0)=>new zo(e,!0,t))(`render`),Ho=Bo(`object`);var Uo=class extends Va{static get type(){return`UniformNode`}constructor(e,t=null){super(e,t),this.isUniformNode=!0,this.name=``,this.groupNode=Ho}label(e){return this.name=e,this}setGroup(e){return this.groupNode=e,this}getGroup(){return this.groupNode}getUniformHash(e){return this.getHash(e)}onUpdate(e,t){let n=this.getSelf();return e=e.bind(n),super.onUpdate(t=>{let r=e(t,n);r!==void 0&&(this.value=r)},t)}generate(e,t){let n=this.getNodeType(e),r=this.getUniformHash(e),i=e.getNodeFromHash(r);i===void 0&&(e.setHashNode(this,r),i=this);let a=i.getInputType(e),o=e.getUniformFromNode(i,a,e.shaderStage,this.name||e.context.label),s=e.getPropertyName(o);return e.context.label!==void 0&&delete e.context.label,e.format(s,n,t)}};let Wo=(e,t)=>{let n=ho(t||e);return W(new Uo(e&&e.isNode===!0?e.node&&e.node.value||e.value:e,n))};var Go=class extends V{static get type(){return`PropertyNode`}constructor(e,t=null,n=!1){super(e),this.name=t,this.varying=n,this.isPropertyNode=!0}getHash(e){return this.name||super.getHash(e)}isGlobal(){return!0}generate(e){let t;return this.varying===!0?(t=e.getVaryingFromNode(this,this.name),t.needsInterpolation=!0):t=e.getVarFromNode(this,this.name),e.getPropertyName(t)}};let Ko=(e,t)=>W(new Go(e,t)),qo=yo(Go,`vec4`,`DiffuseColor`);H(`assign`,G(class extends Fa{static get type(){return`AssignNode`}constructor(e,t){super(),this.targetNode=e,this.sourceNode=t}hasDependencies(){return!1}getNodeType(e,t){return t===`void`?`void`:this.targetNode.getNodeType(e)}needsSplitAssign(e){let{targetNode:t}=this;if(e.isAvailable(`swizzleAssign`)===!1&&t.isSplitNode&&t.components.length>1){let n=e.getTypeLength(t.node.getNodeType(e));return ja.join(``).slice(0,n)!==t.components}return!1}generate(e,t){let{targetNode:n,sourceNode:r}=this,i=this.needsSplitAssign(e),a=n.getNodeType(e),o=n.context({assign:!0}).build(e),s=r.build(e,a),c=r.getNodeType(e),l=e.getDataFromNode(this),u;if(l.initialized===!0)t!==`void`&&(u=o);else if(i){let r=e.getVarFromNode(this,null,a),i=e.getPropertyName(r);e.addLineFlowCode(`${i} = ${s}`,this);let c=n.node.context({assign:!0}).build(e);for(let t=0;t(t=t.length>1||t[0]&&t[0].isNode===!0?vo(t):_o(t[0]),W(new Jo(W(e),t))));var X=class e extends Fa{static get type(){return`OperatorNode`}constructor(t,n,r,...i){if(super(),i.length>0){let a=new e(t,n,r);for(let n=0;n>`||n===`<<`)return e.getIntegerType(a);if(n===`!`||n===`==`||n===`&&`||n===`||`||n===`^^`)return`bool`;if(n===`<`||n===`>`||n===`<=`||n===`>=`){let n=t?e.getTypeLength(t):Math.max(e.getTypeLength(a),e.getTypeLength(o));return n>1?`bvec${n}`:`bool`}else return a===`float`&&e.isMatrix(o)?o:e.isMatrix(a)&&e.isVector(o)?e.getVectorFromMatrix(a):e.isVector(a)&&e.isMatrix(o)?e.getVectorFromMatrix(o):e.getTypeLength(o)>e.getTypeLength(a)?o:a}generate(e,t){let n=this.op,r=this.aNode,i=this.bNode,a=this.getNodeType(e,t),o=null,s=null;a===`void`?o=s=a:(o=r.getNodeType(e),s=i===void 0?null:i.getNodeType(e),n===`<`||n===`>`||n===`<=`||n===`>=`||n===`==`?e.isVector(o)?s=o:o!==s&&(o=s=`float`):n===`>>`||n===`<<`?(o=a,s=e.changeComponentType(s,`uint`)):e.isMatrix(o)&&e.isVector(s)?s=e.getVectorFromMatrix(o):o=e.isVector(o)&&e.isMatrix(s)?e.getVectorFromMatrix(s):s=a);let c=r.build(e,o),l=i===void 0?null:i.build(e,s),u=e.getTypeLength(t),d=e.getFunctionOperator(n);if(t!==`void`)return n===`<`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`lessThan`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} < ${l} )`,a,t):n===`<=`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`lessThanEqual`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} <= ${l} )`,a,t):n===`>`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`greaterThan`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} > ${l} )`,a,t):n===`>=`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`greaterThanEqual`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} >= ${l} )`,a,t):n===`!`||n===`~`?e.format(`(${n}${c})`,o,t):d?e.format(`${d}( ${c}, ${l} )`,a,t):e.format(`( ${c} ${n} ${l} )`,a,t);if(o!==`void`)return d?e.format(`${d}( ${c}, ${l} )`,a,t):e.format(`${c} ${n} ${l}`,a,t)}serialize(e){super.serialize(e),e.op=this.op}deserialize(e){super.deserialize(e),this.op=e.op}};let Yo=G(X,`+`),Xo=G(X,`-`),Zo=G(X,`*`),Qo=G(X,`/`),$o=G(X,`%`),es=G(X,`==`),ts=G(X,`!=`),ns=G(X,`<`),rs=G(X,`>`),is=G(X,`<=`),as=G(X,`>=`),os=G(X,`&&`),ss=G(X,`||`),cs=G(X,`!`),ls=G(X,`^^`),us=G(X,`&`),ds=G(X,`~`),fs=G(X,`|`),ps=G(X,`^`),ms=G(X,`<<`),hs=G(X,`>>`);H(`add`,Yo),H(`sub`,Xo),H(`mul`,Zo),H(`div`,Qo),H(`modInt`,$o),H(`equal`,es),H(`notEqual`,ts),H(`lessThan`,ns),H(`greaterThan`,rs),H(`lessThanEqual`,is),H(`greaterThanEqual`,as),H(`and`,os),H(`or`,ss),H(`not`,cs),H(`xor`,ls),H(`bitAnd`,us),H(`bitNot`,ds),H(`bitOr`,fs),H(`bitXor`,ps),H(`shiftLeft`,ms),H(`shiftRight`,hs),H(`remainder`,(...e)=>(console.warn(`TSL.OperatorNode: .remainder() has been renamed to .modInt().`),$o(...e)));var Z=class e extends Fa{static get type(){return`MathNode`}constructor(e,t,n=null,r=null){super(),this.method=e,this.aNode=t,this.bNode=n,this.cNode=r}getInputType(e){let t=this.aNode.getNodeType(e),n=this.bNode?this.bNode.getNodeType(e):null,r=this.cNode?this.cNode.getNodeType(e):null,i=e.isMatrix(t)?0:e.getTypeLength(t),a=e.isMatrix(n)?0:e.getTypeLength(n),o=e.isMatrix(r)?0:e.getTypeLength(r);return i>a&&i>o?t:a>o?n:o>i?r:t}getNodeType(t){let n=this.method;return n===e.LENGTH||n===e.DISTANCE||n===e.DOT?`float`:n===e.CROSS?`vec3`:n===e.ALL?`bool`:n===e.EQUALS?t.changeComponentType(this.aNode.getNodeType(t),`bool`):n===e.MOD?this.aNode.getNodeType(t):this.getInputType(t)}generate(t,n){let r=this.method,i=this.getNodeType(t),a=this.getInputType(t),o=this.aNode,s=this.bNode,c=this.cNode,l=t.renderer.isWebGLRenderer===!0;if(r===e.TRANSFORM_DIRECTION){let e=o,r=s;t.isMatrix(e.getNodeType(t))?r=Mo(Y(r),0):e=Mo(Y(e),0);let i=Zo(e,r).xyz;return As(i).build(t,n)}else if(r===e.NEGATE)return t.format(`( - `+o.build(t,a)+` )`,i,n);else if(r===e.ONE_MINUS)return Xo(1,o).build(t,n);else if(r===e.RECIPROCAL)return Qo(1,o).build(t,n);else if(r===e.DIFFERENCE)return Rs(Xo(o,s)).build(t,n);else{let u=[];return r===e.CROSS||r===e.MOD?u.push(o.build(t,i),s.build(t,i)):l&&r===e.STEP?u.push(o.build(t,t.getTypeLength(o.getNodeType(t))===1?`float`:a),s.build(t,a)):l&&(r===e.MIN||r===e.MAX)||r===e.MOD?u.push(o.build(t,a),s.build(t,t.getTypeLength(s.getNodeType(t))===1?`float`:a)):r===e.REFRACT?u.push(o.build(t,a),s.build(t,a),c.build(t,`float`)):r===e.MIX?u.push(o.build(t,a),s.build(t,a),c.build(t,t.getTypeLength(c.getNodeType(t))===1?`float`:a)):(u.push(o.build(t,a)),s!==null&&u.push(s.build(t,a)),c!==null&&u.push(c.build(t,a))),t.format(`${t.getMethod(r,i)}( ${u.join(`, `)} )`,i,n)}}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}};Z.ALL=`all`,Z.ANY=`any`,Z.EQUALS=`equals`,Z.RADIANS=`radians`,Z.DEGREES=`degrees`,Z.EXP=`exp`,Z.EXP2=`exp2`,Z.LOG=`log`,Z.LOG2=`log2`,Z.SQRT=`sqrt`,Z.INVERSE_SQRT=`inversesqrt`,Z.FLOOR=`floor`,Z.CEIL=`ceil`,Z.NORMALIZE=`normalize`,Z.FRACT=`fract`,Z.SIN=`sin`,Z.COS=`cos`,Z.TAN=`tan`,Z.ASIN=`asin`,Z.ACOS=`acos`,Z.ATAN=`atan`,Z.ABS=`abs`,Z.SIGN=`sign`,Z.LENGTH=`length`,Z.NEGATE=`negate`,Z.ONE_MINUS=`oneMinus`,Z.DFDX=`dFdx`,Z.DFDY=`dFdy`,Z.ROUND=`round`,Z.RECIPROCAL=`reciprocal`,Z.TRUNC=`trunc`,Z.FWIDTH=`fwidth`,Z.BITCAST=`bitcast`,Z.TRANSPOSE=`transpose`,Z.ATAN2=`atan2`,Z.MIN=`min`,Z.MAX=`max`,Z.MOD=`mod`,Z.STEP=`step`,Z.REFLECT=`reflect`,Z.DISTANCE=`distance`,Z.DIFFERENCE=`difference`,Z.DOT=`dot`,Z.CROSS=`cross`,Z.POW=`pow`,Z.TRANSFORM_DIRECTION=`transformDirection`,Z.MIX=`mix`,Z.CLAMP=`clamp`,Z.REFRACT=`refract`,Z.SMOOTHSTEP=`smoothstep`,Z.FACEFORWARD=`faceforward`;let gs=q(Math.PI);Math.PI*2;let _s=G(Z,Z.ALL),vs=G(Z,Z.ANY),ys=G(Z,Z.EQUALS),bs=G(Z,Z.RADIANS),xs=G(Z,Z.DEGREES),Ss=G(Z,Z.EXP),Cs=G(Z,Z.EXP2),ws=G(Z,Z.LOG),Ts=G(Z,Z.LOG2),Es=G(Z,Z.SQRT),Ds=G(Z,Z.INVERSE_SQRT),Os=G(Z,Z.FLOOR),ks=G(Z,Z.CEIL),As=G(Z,Z.NORMALIZE),js=G(Z,Z.FRACT),Ms=G(Z,Z.SIN),Ns=G(Z,Z.COS),Ps=G(Z,Z.TAN),Fs=G(Z,Z.ASIN),Is=G(Z,Z.ACOS),Ls=G(Z,Z.ATAN),Rs=G(Z,Z.ABS),zs=G(Z,Z.SIGN),Bs=G(Z,Z.LENGTH),Vs=G(Z,Z.NEGATE),Hs=G(Z,Z.ONE_MINUS),Us=G(Z,Z.DFDX),Ws=G(Z,Z.DFDY),Gs=G(Z,Z.ROUND),Ks=G(Z,Z.RECIPROCAL),qs=G(Z,Z.TRUNC),Js=G(Z,Z.FWIDTH);Z.BITCAST;let Ys=G(Z,Z.TRANSPOSE),Xs=G(Z,Z.ATAN2),Zs=G(Z,Z.MIN),Qs=G(Z,Z.MAX),$s=G(Z,Z.MOD),ec=G(Z,Z.STEP),tc=G(Z,Z.REFLECT),nc=G(Z,Z.DISTANCE),rc=G(Z,Z.DIFFERENCE),ic=G(Z,Z.DOT),ac=G(Z,Z.CROSS),oc=G(Z,Z.POW),sc=G(Z,Z.POW,2),cc=G(Z,Z.POW,3),lc=G(Z,Z.POW,4),uc=G(Z,Z.TRANSFORM_DIRECTION),dc=e=>Zo(zs(e),oc(Rs(e),1/3)),fc=e=>ic(e,e),pc=G(Z,Z.MIX),mc=(e,t=0,n=1)=>W(new Z(Z.CLAMP,W(e),W(t),W(n))),hc=e=>mc(e),gc=G(Z,Z.REFRACT),_c=G(Z,Z.SMOOTHSTEP),vc=G(Z,Z.FACEFORWARD),yc=K(([e])=>js(Ms($s(ic(e.xy,J(12.9898,78.233)),gs)).mul(43758.5453)));H(`all`,_s),H(`any`,vs),H(`equals`,ys),H(`radians`,bs),H(`degrees`,xs),H(`exp`,Ss),H(`exp2`,Cs),H(`log`,ws),H(`log2`,Ts),H(`sqrt`,Es),H(`inverseSqrt`,Ds),H(`floor`,Os),H(`ceil`,ks),H(`normalize`,As),H(`fract`,js),H(`sin`,Ms),H(`cos`,Ns),H(`tan`,Ps),H(`asin`,Fs),H(`acos`,Is),H(`atan`,Ls),H(`abs`,Rs),H(`sign`,zs),H(`length`,Bs),H(`lengthSq`,fc),H(`negate`,Vs),H(`oneMinus`,Hs),H(`dFdx`,Us),H(`dFdy`,Ws),H(`round`,Gs),H(`reciprocal`,Ks),H(`trunc`,qs),H(`fwidth`,Js),H(`atan2`,Xs),H(`min`,Zs),H(`max`,Qs),H(`mod`,$s),H(`step`,ec),H(`reflect`,tc),H(`distance`,nc),H(`dot`,ic),H(`cross`,ac),H(`pow`,oc),H(`pow2`,sc),H(`pow3`,cc),H(`pow4`,lc),H(`transformDirection`,uc),H(`mix`,(e,t,n)=>pc(t,n,e)),H(`clamp`,mc),H(`refract`,gc),H(`smoothstep`,(e,t,n)=>_c(t,n,e)),H(`faceForward`,vc),H(`difference`,rc),H(`saturate`,hc),H(`cbrt`,dc),H(`transpose`,Ys),H(`rand`,yc);let bc=G(class extends V{static get type(){return`ConditionalNode`}constructor(e,t,n=null){super(),this.condNode=e,this.ifNode=t,this.elseNode=n}getNodeType(e){let t=this.ifNode.getNodeType(e);if(this.elseNode!==null){let n=this.elseNode.getNodeType(e);if(e.getTypeLength(n)>e.getTypeLength(t))return n}return t}setup(e){let t=this.condNode.cache(),n=this.ifNode.cache(),r=this.elseNode?this.elseNode.cache():null,i=e.context.nodeBlock;e.getDataFromNode(n).parentNodeBlock=i,r!==null&&(e.getDataFromNode(r).parentNodeBlock=i);let a=e.getNodeProperties(this);a.condNode=t,a.ifNode=n.context({nodeBlock:n}),a.elseNode=r?r.context({nodeBlock:r}):null}generate(e,t){let n=this.getNodeType(e),r=e.getDataFromNode(this);if(r.nodeProperty!==void 0)return r.nodeProperty;let{condNode:i,ifNode:a,elseNode:o}=e.getNodeProperties(this),s=t!==`void`,c=s?Ko(n).build(e):``;r.nodeProperty=c;let l=i.build(e,`bool`);e.addFlowCode(`\n${e.tab}if ( ${l} ) {\n\n`).addFlowTab();let u=a.build(e,n);if(u&&=s?c+` = `+u+`;`:`return `+u+`;`,e.removeFlowTab().addFlowCode(e.tab+` `+u+` - -`+e.tab+`}`),o!==null){e.addFlowCode(` else { - -`).addFlowTab();let t=o.build(e,n);t&&=s?c+` = `+t+`;`:`return `+t+`;`,e.removeFlowTab().addFlowCode(e.tab+` `+t+` - -`+e.tab+`} - -`)}else e.addFlowCode(` - -`);return e.format(c,n,t)}});H(`select`,bc),H(`cond`,(...e)=>(console.warn(`TSL.ConditionalNode: cond() has been renamed to select().`),bc(...e)));let xc=G(class extends V{static get type(){return`ContextNode`}constructor(e,t={}){super(),this.isContextNode=!0,this.node=e,this.value=t}getScope(){return this.node.getScope()}getNodeType(e){return this.node.getNodeType(e)}analyze(e){this.node.build(e)}setup(e){let t=e.getContext();e.setContext({...e.context,...this.value});let n=this.node.build(e);return e.setContext(t),n}generate(e,t){let n=e.getContext();e.setContext({...e.context,...this.value});let r=this.node.build(e,t);return e.setContext(n),r}});H(`context`,xc),H(`label`,(e,t)=>xc(e,{label:t}));let Sc=G(class extends V{static get type(){return`VarNode`}constructor(e,t=null){super(),this.node=e,this.name=t,this.global=!0,this.isVarNode=!0}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}generate(e){let{node:t,name:n}=this,r=e.getVarFromNode(this,n,e.getVectorType(this.getNodeType(e))),i=e.getPropertyName(r),a=t.build(e,r.type);return e.addLineFlowCode(`${i} = ${a}`,this),i}});H(`temp`,Sc),H(`toVar`,(...e)=>Sc(...e).append());let Cc=G(class extends V{static get type(){return`VaryingNode`}constructor(e,t=null){super(),this.node=e,this.name=t,this.isVaryingNode=!0}isGlobal(){return!0}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}setupVarying(e){let t=e.getNodeProperties(this),n=t.varying;if(n===void 0){let r=this.name,i=this.getNodeType(e);t.varying=n=e.getVaryingFromNode(this,r,i),t.node=this.node}return n.needsInterpolation||=e.shaderStage===`fragment`,n}setup(e){this.setupVarying(e)}analyze(e){return this.setupVarying(e),this.node.analyze(e)}generate(e){let t=e.getNodeProperties(this),n=this.setupVarying(e);if(t.propertyName===void 0){let r=this.getNodeType(e),i=e.getPropertyName(n,Aa.VERTEX);e.flowNodeFromShaderStage(Aa.VERTEX,this.node,r,i),t.propertyName=i}return e.getPropertyName(n)}});H(`varying`,Cc);let wc=`WorkingColorSpace`,Tc=`OutputColorSpace`;function Ec(e){let t=null;return e===`srgb-linear`?t=`Linear`:e===`srgb`&&(t=`sRGB`),t}function Dc(e,t){return Ec(e)+`To`+Ec(t)}var Oc=class extends Fa{static get type(){return`ColorSpaceNode`}constructor(e,t,n){super(`vec4`),this.colorNode=e,this.source=t,this.target=n}getColorSpace(e,t){return t===wc?Ye.workingColorSpace:t===Tc?e.context.outputColorSpace||e.renderer.outputColorSpace:t}setup(e){let{renderer:t}=e,{colorNode:n}=this,r=this.getColorSpace(e,this.source),i=this.getColorSpace(e,this.target);if(r===i)return n;let a=Dc(r,i),o=null,s=t.nodes.library.getColorSpaceFunction(a);return s===null?(console.error(`ColorSpaceNode: Unsupported Color Space configuration.`,a),o=n):o=Mo(s(n.rgb),n.a),o}};let kc=e=>W(new Oc(W(e),wc,Tc)),Ac=e=>W(new Oc(W(e),Tc,wc)),jc=(e,t)=>W(new Oc(W(e),wc,t)),Mc=(e,t)=>W(new Oc(W(e),t,wc));H(`toOutputColorSpace`,kc),H(`toWorkingColorSpace`,Ac),H(`workingToColorSpace`,jc),H(`colorSpaceToWorking`,Mc);let Nc=class extends Na{static get type(){return`ReferenceElementNode`}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){let t=super.generate(e),n=this.referenceNode.getNodeType(),r=this.getNodeType();return e.format(t,n,r)}};var Pc=class extends V{static get type(){return`ReferenceBaseNode`}constructor(e,t,n=null,r=null){super(),this.property=e,this.uniformType=t,this.object=n,this.count=r,this.properties=e.split(`.`),this.reference=n,this.node=null,this.group=null,this.updateType=B.OBJECT}setGroup(e){return this.group=e,this}element(e){return W(new Nc(this,W(e)))}setNodeType(e){let t=Wo(null,e).getSelf();this.group!==null&&t.setGroup(this.group),this.node=t}getNodeType(e){return this.node===null&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){let{properties:t}=this,n=e[t[0]];for(let e=1;eW(new Fc(e,t,n));var Lc=class extends Fa{static get type(){return`ToneMappingNode`}constructor(e,t=zc,n=null){super(`vec3`),this.toneMapping=e,this.exposureNode=t,this.colorNode=n}getCacheKey(){return Ca(super.getCacheKey(),this.toneMapping)}setup(e){let t=this.colorNode||e.context.color,n=this.toneMapping;if(n===0)return t;let r=null,i=e.renderer.nodes.library.getToneMappingFunction(n);return i===null?(console.error(`ToneMappingNode: Unsupported Tone Mapping configuration.`,n),r=t):r=Mo(i(t.rgb,this.exposureNode),t.a),r}};let Rc=(e,t,n)=>W(new Lc(e,W(t),W(n))),zc=Ic(`toneMappingExposure`,`float`);H(`toneMapping`,(e,t,n)=>Rc(t,n,e));var Bc=class extends Va{static get type(){return`BufferAttributeNode`}constructor(e,t=null,n=0,r=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferStride=n,this.bufferOffset=r,this.usage=me,this.instanced=!1,this.attribute=null,this.global=!0,e&&e.isBufferAttribute===!0&&(this.attribute=e,this.usage=e.usage,this.instanced=e.isInstancedBufferAttribute)}getHash(e){if(this.bufferStride===0&&this.bufferOffset===0){let t=e.globalCache.getData(this.value);return t===void 0&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getNodeType(e){return this.bufferType===null&&(this.bufferType=e.getTypeFromAttribute(this.attribute)),this.bufferType}setup(e){if(this.attribute!==null)return;let t=this.getNodeType(e),n=this.value,r=e.getTypeLength(t),i=this.bufferStride||r,a=this.bufferOffset,o=n.isInterleavedBuffer===!0?n:new Er(n,i),s=new Or(o,r,a);o.setUsage(this.usage),this.attribute=s,this.attribute.isInstancedBufferAttribute=this.instanced}generate(e){let t=this.getNodeType(e),n=e.getBufferAttributeFromNode(this,t),r=e.getPropertyName(n),i=null;return e.shaderStage===`vertex`||e.shaderStage===`compute`?(this.name=r,i=r):i=Cc(this).build(e,t),i}getInputType(){return`bufferAttribute`}setUsage(e){return this.usage=e,this.attribute&&this.attribute.isBufferAttribute===!0&&(this.attribute.usage=e),this}setInstanced(e){return this.instanced=e,this}};let Vc=(e,t,n,r)=>W(new Bc(e,t,n,r));H(`toAttribute`,e=>Vc(e.value));var Hc=class extends V{static get type(){return`ComputeNode`}constructor(e,t,n=[64]){super(`void`),this.isComputeNode=!0,this.computeNode=e,this.count=t,this.workgroupSize=n,this.dispatchCount=0,this.version=1,this.updateBeforeType=B.OBJECT,this.updateDispatchCount()}dispose(){this.dispatchEvent({type:`dispose`})}set needsUpdate(e){e===!0&&this.version++}updateDispatchCount(){let{count:e,workgroupSize:t}=this,n=t[0];for(let e=1;eW(new Hc(W(e),t,n)));var Uc=class extends V{static get type(){return`CacheNode`}constructor(e,t=!0){super(),this.node=e,this.parent=t,this.isCacheNode=!0}getNodeType(e){return this.node.getNodeType(e)}build(e,...t){let n=e.getCache(),r=e.getCacheFromNode(this,this.parent);e.setCache(r);let i=this.node.build(e,...t);return e.setCache(n),i}};H(`cache`,(e,...t)=>W(new Uc(W(e),...t))),H(`bypass`,G(class extends V{static get type(){return`BypassNode`}constructor(e,t){super(),this.isBypassNode=!0,this.outputNode=e,this.callNode=t}getNodeType(e){return this.outputNode.getNodeType(e)}generate(e){let t=this.callNode.build(e,`void`);return t!==``&&e.addLineFlowCode(t,this),this.outputNode.build(e)}}));var Wc=class extends V{static get type(){return`RemapNode`}constructor(e,t,n,r=q(0),i=q(1)){super(),this.node=e,this.inLowNode=t,this.inHighNode=n,this.outLowNode=r,this.outHighNode=i,this.doClamp=!0}setup(){let{node:e,inLowNode:t,inHighNode:n,outLowNode:r,outHighNode:i,doClamp:a}=this,o=e.sub(t).div(n.sub(t));return a===!0&&(o=o.clamp()),o.mul(i.sub(r)).add(r)}};let Gc=G(Wc,null,null,{doClamp:!1}),Kc=G(Wc);H(`remap`,Gc),H(`remapClamp`,Kc);let qc=G(class extends V{static get type(){return`ExpressionNode`}constructor(e=``,t=`void`){super(t),this.snippet=e}generate(e,t){let n=this.getNodeType(e),r=this.snippet;if(n===`void`)e.addLineFlowCode(r,this);else return e.format(`( ${r} )`,n,t)}});H(`discard`,e=>(e?bc(e,qc(`discard`)):qc(`discard`)).append());var Jc=class extends Fa{static get type(){return`RenderOutputNode`}constructor(e,t,n){super(`vec4`),this.colorNode=e,this.toneMapping=t,this.outputColorSpace=n,this.isRenderOutput=!0}setup({context:e}){let t=this.colorNode||e.color,n=(this.toneMapping===null?e.toneMapping:this.toneMapping)||0,r=(this.outputColorSpace===null?e.outputColorSpace:this.outputColorSpace)||``;return n!==0&&(t=t.toneMapping(n)),r!==``&&r!==Ye.workingColorSpace&&(t=t.workingToColorSpace(r)),t}};H(`renderOutput`,(e,t=null,n=null)=>W(new Jc(W(e),t,n)));var Yc=class extends V{static get type(){return`AttributeNode`}constructor(e,t=null){super(t),this.global=!0,this._attributeName=e}getHash(e){return this.getAttributeName(e)}getNodeType(e){let t=this.nodeType;if(t===null){let n=this.getAttributeName(e);if(e.hasGeometryAttribute(n)){let r=e.geometry.getAttribute(n);t=e.getTypeFromAttribute(r)}else t=`float`}return t}setAttributeName(e){return this._attributeName=e,this}getAttributeName(){return this._attributeName}generate(e){let t=this.getAttributeName(e),n=this.getNodeType(e);if(e.hasGeometryAttribute(t)===!0){let r=e.geometry.getAttribute(t),i=e.getTypeFromAttribute(r),a=e.getAttribute(t,i);return e.shaderStage===`vertex`?e.format(a.name,i,n):Cc(this).build(e,n)}else return console.warn(`AttributeNode: Vertex attribute "${t}" not found on geometry.`),e.generateConst(n)}serialize(e){super.serialize(e),e.global=this.global,e._attributeName=this._attributeName}deserialize(e){super.deserialize(e),this.global=e.global,this._attributeName=e._attributeName}};let Xc=(e,t)=>W(new Yc(e,t)),Zc=e=>Xc(`uv`+(e>0?e:``),`vec2`),Qc=G(class extends V{static get type(){return`TextureSizeNode`}constructor(e,t=null){super(`uvec2`),this.isTextureSizeNode=!0,this.textureNode=e,this.levelNode=t}generate(e,t){let n=this.textureNode.build(e,`property`),r=this.levelNode===null?`0`:this.levelNode.build(e,`int`);return e.format(`${e.getMethod(`textureDimensions`)}( ${n}, ${r} )`,this.getNodeType(e),t)}}),$c=G(class extends Uo{static get type(){return`MaxMipLevelNode`}constructor(e){super(0),this._textureNode=e,this.updateType=B.FRAME}get textureNode(){return this._textureNode}get texture(){return this._textureNode.value}update(){let e=this.texture,t=e.images,n=t&&t.length>0?t[0]&&t[0].image||t[0]:e.image;if(n&&n.width!==void 0){let{width:e,height:t}=n;this.value=Math.log2(Math.max(e,t))}}});var el=class extends Uo{static get type(){return`TextureNode`}constructor(e,t=null,n=null,r=null){super(e),this.isTextureNode=!0,this.uvNode=t,this.levelNode=n,this.biasNode=r,this.compareNode=null,this.depthNode=null,this.gradNode=null,this.sampler=!0,this.updateMatrix=!1,this.updateType=B.NONE,this.referenceNode=null,this._value=e,this._matrixUniform=null,this.setUpdateMatrix(t===null)}set value(e){this.referenceNode?this.referenceNode.value=e:this._value=e}get value(){return this.referenceNode?this.referenceNode.value:this._value}getUniformHash(){return this.value.uuid}getNodeType(){return this.value.isDepthTexture===!0?`float`:this.value.type===1014?`uvec4`:this.value.type===1013?`ivec4`:`vec4`}getInputType(){return`texture`}getDefaultUV(){return Zc(this.value.channel)}updateReference(){return this.value}getTransformedUV(e){return this._matrixUniform===null&&(this._matrixUniform=Wo(this.value.matrix)),this._matrixUniform.mul(Y(e,1)).xy}setUpdateMatrix(e){return this.updateMatrix=e,this.updateType=e?B.FRAME:B.NONE,this}setupUV(e,t){let n=this.value;return e.isFlipY()&&(n.isRenderTargetTexture===!0||n.isFramebufferTexture===!0||n.isDepthTexture===!0)&&(t=this.sampler?t.flipY():t.setY(Co(Qc(this,this.levelNode).y).sub(t.y).sub(1))),t}setup(e){let t=e.getNodeProperties(this);t.referenceNode=this.referenceNode;let n=this.uvNode;(n===null||e.context.forceUVContext===!0)&&e.context.getUV&&(n=e.context.getUV(this)),n||=this.getDefaultUV(),this.updateMatrix===!0&&(n=this.getTransformedUV(n)),n=this.setupUV(e,n);let r=this.levelNode;r===null&&e.context.getTextureLevel&&(r=e.context.getTextureLevel(this)),t.uvNode=n,t.levelNode=r,t.biasNode=this.biasNode,t.compareNode=this.compareNode,t.gradNode=this.gradNode,t.depthNode=this.depthNode}generateUV(e,t){return t.build(e,this.sampler===!0?`vec2`:`ivec2`)}generateSnippet(e,t,n,r,i,a,o,s){let c=this.value,l;return l=r?e.generateTextureLevel(c,t,n,r,a):i?e.generateTextureBias(c,t,n,i,a):s?e.generateTextureGrad(c,t,n,s,a):o?e.generateTextureCompare(c,t,n,o,a):this.sampler===!1?e.generateTextureLoad(c,t,n,a):e.generateTexture(c,t,n,a),l}generate(e,t){let n=e.getNodeProperties(this),r=this.value;if(!r||r.isTexture!==!0)throw Error(`TextureNode: Need a three.js texture.`);let i=super.generate(e,`property`);if(t===`sampler`)return i+`_sampler`;if(e.isReference(t))return i;{let a=e.getDataFromNode(this),o=a.propertyName;if(o===void 0){let{uvNode:t,levelNode:r,biasNode:s,compareNode:c,depthNode:l,gradNode:u}=n,d=this.generateUV(e,t),f=r?r.build(e,`float`):null,p=s?s.build(e,`float`):null,m=l?l.build(e,`int`):null,h=c?c.build(e,`float`):null,g=u?[u[0].build(e,`vec2`),u[1].build(e,`vec2`)]:null,_=e.getVarFromNode(this);o=e.getPropertyName(_);let v=this.generateSnippet(e,i,d,f,p,m,h,g);e.addLineFlowCode(`${o} = ${v}`,this),a.snippet=v,a.propertyName=o}let s=o,c=this.getNodeType(e);return e.needsToWorkingColorSpace(r)&&(s=Mc(qc(s,c),r.colorSpace).setup(e).build(e,c)),e.format(s,c,t)}}setSampler(e){return this.sampler=e,this}getSampler(){return this.sampler}uv(e){let t=this.clone();return t.uvNode=W(e),t.referenceNode=this.getSelf(),W(t)}blur(e){let t=this.clone();return t.biasNode=W(e).mul($c(t)),t.referenceNode=this.getSelf(),W(t)}level(e){let t=this.clone();return t.levelNode=W(e),t.referenceNode=this.getSelf(),W(t)}size(e){return Qc(this,e)}bias(e){let t=this.clone();return t.biasNode=W(e),t.referenceNode=this.getSelf(),W(t)}compare(e){let t=this.clone();return t.compareNode=W(e),t.referenceNode=this.getSelf(),W(t)}grad(e,t){let n=this.clone();return n.gradNode=[W(e),W(t)],n.referenceNode=this.getSelf(),W(n)}depth(e){let t=this.clone();return t.depthNode=W(e),t.referenceNode=this.getSelf(),W(t)}serialize(e){super.serialize(e),e.value=this.value.toJSON(e.meta).uuid,e.sampler=this.sampler,e.updateMatrix=this.updateMatrix,e.updateType=this.updateType}deserialize(e){super.deserialize(e),this.value=e.meta.textures[e.value],this.sampler=e.sampler,this.updateMatrix=e.updateMatrix,this.updateType=e.updateType}update(){let e=this.value,t=this._matrixUniform;t!==null&&(t.value=e.matrix),e.matrixAutoUpdate===!0&&e.updateMatrix()}clone(){let e=new this.constructor(this.value,this.uvNode,this.levelNode,this.biasNode);return e.sampler=this.sampler,e}};let tl=G(el),nl=Wo(`float`).label(`cameraNear`).setGroup(Vo).onRenderUpdate(({camera:e})=>e.near),rl=Wo(`float`).label(`cameraFar`).setGroup(Vo).onRenderUpdate(({camera:e})=>e.far),il=Wo(`mat4`).label(`cameraViewMatrix`).setGroup(Vo).onRenderUpdate(({camera:e})=>e.matrixWorldInverse);var al=class e extends V{static get type(){return`Object3DNode`}constructor(e,t=null){super(),this.scope=e,this.object3d=t,this.updateType=B.OBJECT,this._uniformNode=new Uo(null)}getNodeType(){let t=this.scope;if(t===e.WORLD_MATRIX)return`mat4`;if(t===e.POSITION||t===e.VIEW_POSITION||t===e.DIRECTION||t===e.SCALE)return`vec3`}update(t){let n=this.object3d,r=this._uniformNode,i=this.scope;if(i===e.WORLD_MATRIX)r.value=n.matrixWorld;else if(i===e.POSITION)r.value=r.value||new A,r.value.setFromMatrixPosition(n.matrixWorld);else if(i===e.SCALE)r.value=r.value||new A,r.value.setFromMatrixScale(n.matrixWorld);else if(i===e.DIRECTION)r.value=r.value||new A,n.getWorldDirection(r.value);else if(i===e.VIEW_POSITION){let e=t.camera;r.value=r.value||new A,r.value.setFromMatrixPosition(n.matrixWorld),r.value.applyMatrix4(e.matrixWorldInverse)}}generate(t){let n=this.scope;return n===e.WORLD_MATRIX?this._uniformNode.nodeType=`mat4`:(n===e.POSITION||n===e.VIEW_POSITION||n===e.DIRECTION||n===e.SCALE)&&(this._uniformNode.nodeType=`vec3`),this._uniformNode.build(t)}serialize(e){super.serialize(e),e.scope=this.scope}deserialize(e){super.deserialize(e),this.scope=e.scope}};al.WORLD_MATRIX=`worldMatrix`,al.POSITION=`position`,al.SCALE=`scale`,al.VIEW_POSITION=`viewPosition`,al.DIRECTION=`direction`,al.DIRECTION,al.WORLD_MATRIX,al.POSITION,al.SCALE,al.VIEW_POSITION;var ol=class extends al{static get type(){return`ModelNode`}constructor(e){super(e)}update(e){this.object3d=e.object,super.update(e)}};ol.DIRECTION;let sl=yo(ol,ol.WORLD_MATRIX);ol.POSITION,ol.SCALE,ol.VIEW_POSITION;let cl=Wo(new O).onObjectUpdate(({object:e},t)=>t.value.getNormalMatrix(e.matrixWorld)),ll=il.mul(sl).toVar(`modelViewMatrix_2`),ul=Xc(`position`,`vec3`).varying(`positionLocal`),dl=ll.mul(ul).xyz.varying(`v_positionView`),fl=dl.negate().varying(`v_positionViewDirection`).normalize().toVar(`positionViewDirection`),pl=q(yo(class extends V{static get type(){return`FrontFacingNode`}constructor(){super(`bool`),this.isFrontFacingNode=!0}generate(e){let{renderer:t,material:n}=e;return t.coordinateSystem===2e3&&n.side===1?`false`:e.getFrontFacing()}})).mul(2).sub(1),ml=Xc(`normal`,`vec3`),hl=K(e=>e.geometry.hasAttribute(`normal`)===!1?(console.warn(`TSL.NormalNode: Vertex attribute "normal" not found on geometry.`),Y(0,1,0)):ml,`vec3`).once()().toVar(`normalLocal`),gl=dl.dFdx().cross(dl.dFdy()).normalize().toVar(`normalFlat`),_l=K(e=>{let t;return t=e.material.flatShading===!0?gl:Cc(yl(hl),`v_normalView`).normalize(),t},`vec3`).once()().toVar(`normalView`),vl=K(e=>e.context.setupNormal(),`vec3`).once()().mul(pl).toVar(`transformedNormalView`),yl=K(([e],t)=>{let n=t.renderer.nodes.modelNormalViewMatrix;if(n!==null)return n.transformDirection(e);let r=cl.mul(e);return il.transformDirection(r)}),bl=Wo(0).onReference(({material:e})=>e).onRenderUpdate(({material:e})=>e.refractionRatio),xl=fl.negate().reflect(vl),Sl=fl.negate().refract(vl,bl),Cl=xl.transformDirection(il).toVar(`reflectVector`),wl=Sl.transformDirection(il).toVar(`reflectVector`),Tl=G(class extends el{static get type(){return`CubeTextureNode`}constructor(e,t=null,n=null,r=null){super(e,t,n,r),this.isCubeTextureNode=!0}getInputType(){return`cubeTexture`}getDefaultUV(){let e=this.value;return e.mapping===301?Cl:e.mapping===302?wl:(console.error(`THREE.CubeTextureNode: Mapping "%s" not supported.`,e.mapping),Y(0,0,0))}setUpdateMatrix(){}setupUV(e,t){let n=this.value;return e.renderer.coordinateSystem===2001||!n.isRenderTargetTexture?Y(t.x.negate(),t.yz):t}generateUV(e,t){return t.build(e,`vec3`)}});var El=class extends Uo{static get type(){return`BufferNode`}constructor(e,t,n=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferCount=n}getElementType(e){return this.getNodeType(e)}getInputType(){return`buffer`}};let Dl=(e,t,n)=>W(new El(e,t,n));var Ol=class extends Na{static get type(){return`UniformArrayElementNode`}constructor(e,t){super(e,t),this.isArrayBufferElementNode=!0}generate(e){let t=super.generate(e),n=this.getNodeType();return e.format(t,`vec4`,n)}},kl=class extends El{static get type(){return`UniformArrayNode`}constructor(e,t=null){super(null,`vec4`),this.array=e,this.elementType=t,this._elementType=null,this._elementLength=0,this.updateType=B.RENDER,this.isArrayBufferNode=!0}getElementType(){return this.elementType||this._elementType}getElementLength(){return this._elementLength}update(){let{array:e,value:t}=this,n=this.getElementLength(),r=this.getElementType();if(n===1)for(let n=0;nW(new kl(e,t));var jl=class extends Na{static get type(){return`ReferenceElementNode`}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){let t=super.generate(e),n=this.referenceNode.getNodeType(),r=this.getNodeType();return e.format(t,n,r)}},Ml=class extends V{static get type(){return`ReferenceNode`}constructor(e,t,n=null,r=null){super(),this.property=e,this.uniformType=t,this.object=n,this.count=r,this.properties=e.split(`.`),this.reference=n,this.node=null,this.group=null,this.name=null,this.updateType=B.OBJECT}element(e){return W(new jl(this,W(e)))}setGroup(e){return this.group=e,this}label(e){return this.name=e,this}setNodeType(e){let t=null;t=this.count===null?Array.isArray(this.getValueFromReference())?Al(null,e):e===`texture`?tl(null):e===`cubeTexture`?Tl(null):Wo(null,e):Dl(null,e,this.count),this.group!==null&&t.setGroup(this.group),this.name!==null&&t.label(this.name),this.node=t.getSelf()}getNodeType(e){return this.node===null&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){let{properties:t}=this,n=e[t[0]];for(let e=1;eW(new Ml(e,t,n));var Pl=class extends Ml{static get type(){return`MaterialReferenceNode`}constructor(e,t,n=null){super(e,t,n),this.material=n,this.isMaterialReferenceNode=!0}updateReference(e){return this.reference=this.material===null?e.material:this.material,this.reference}};let Fl=(e,t,n)=>W(new Pl(e,t,n)),Il=K(e=>(e.geometry.hasAttribute(`tangent`)===!1&&e.geometry.computeTangents(),Xc(`tangent`,`vec4`)))(),Ll=Il.xyz.toVar(`tangentLocal`),Rl=ll.mul(Mo(Ll,0)).xyz.varying(`v_tangentView`).normalize().toVar(`tangentView`),zl=Lo(Rl,Cc((e=>e.mul(Il.w).xyz)(_l.cross(Rl)),`v_bitangentView`).normalize().toVar(`bitangentView`),_l),Bl=K(e=>{let{eye_pos:t,surf_norm:n,mapN:r,uv:i}=e,a=t.dFdx(),o=t.dFdy(),s=i.dFdx(),c=i.dFdy(),l=n,u=o.cross(l),d=l.cross(a),f=u.mul(s.x).add(d.mul(c.x)),p=u.mul(s.y).add(d.mul(c.y)),m=f.dot(f).max(p.dot(p)),h=pl.mul(m.inverseSqrt());return Yo(f.mul(r.x,h),p.mul(r.y,h),l.mul(r.z)).normalize()}),Vl=G(class extends Fa{static get type(){return`NormalMapNode`}constructor(e,t=null){super(`vec3`),this.node=e,this.scaleNode=t,this.normalMapType=0}setup(e){let{normalMapType:t,scaleNode:n}=this,r=this.node.mul(2).sub(1);n!==null&&(r=Y(r.xy.mul(n),r.z));let i=null;return t===1?i=yl(r):t===0&&(i=e.hasGeometryAttribute(`tangent`)===!0?zl.mul(r).normalize():Bl({eye_pos:dl,surf_norm:_l,mapN:r,uv:Zc()})),i}}),Hl=K(({textureNode:e,bumpScale:t})=>{let n=t=>e.cache().context({getUV:e=>t(e.uvNode||Zc()),forceUVContext:!0}),r=q(n(e=>e));return J(q(n(e=>e.add(e.dFdx()))).sub(r),q(n(e=>e.add(e.dFdy()))).sub(r)).mul(t)}),Ul=K(e=>{let{surf_pos:t,surf_norm:n,dHdxy:r}=e,i=t.dFdx().normalize(),a=t.dFdy().normalize(),o=n,s=a.cross(o),c=o.cross(i),l=i.dot(s).mul(pl),u=l.sign().mul(r.x.mul(s).add(r.y.mul(c)));return l.abs().mul(n).sub(u).normalize()}),Wl=G(class extends Fa{static get type(){return`BumpMapNode`}constructor(e,t=null){super(`vec3`),this.textureNode=e,this.scaleNode=t}setup(){let e=this.scaleNode===null?1:this.scaleNode;return Ul({surf_pos:dl,surf_norm:_l,dHdxy:Hl({textureNode:this.textureNode,bumpScale:e})})}}),Gl=new Map;var Q=class e extends V{static get type(){return`MaterialNode`}constructor(e){super(),this.scope=e}getCache(e,t){let n=Gl.get(e);return n===void 0&&(n=Fl(e,t),Gl.set(e,n)),n}getFloat(e){return this.getCache(e,`float`)}getColor(e){return this.getCache(e,`color`)}getTexture(e){return this.getCache(e===`map`?`map`:e+`Map`,`texture`)}setup(t){let n=t.context.material,r=this.scope,i=null;if(r===e.COLOR){let e=n.color===void 0?Y():this.getColor(r);i=n.map&&n.map.isTexture===!0?e.mul(this.getTexture(`map`)):e}else if(r===e.OPACITY){let e=this.getFloat(r);i=n.alphaMap&&n.alphaMap.isTexture===!0?e.mul(this.getTexture(`alpha`)):e}else if(r===e.SPECULAR_STRENGTH)i=n.specularMap&&n.specularMap.isTexture===!0?this.getTexture(`specular`).r:q(1);else if(r===e.SPECULAR_INTENSITY){let e=this.getFloat(r);i=n.specularMap?e.mul(this.getTexture(r).a):e}else if(r===e.SPECULAR_COLOR){let e=this.getColor(r);i=n.specularColorMap&&n.specularColorMap.isTexture===!0?e.mul(this.getTexture(r).rgb):e}else if(r===e.ROUGHNESS){let e=this.getFloat(r);i=n.roughnessMap&&n.roughnessMap.isTexture===!0?e.mul(this.getTexture(r).g):e}else if(r===e.METALNESS){let e=this.getFloat(r);i=n.metalnessMap&&n.metalnessMap.isTexture===!0?e.mul(this.getTexture(r).b):e}else if(r===e.EMISSIVE){let e=this.getFloat(`emissiveIntensity`),t=this.getColor(r).mul(e);i=n.emissiveMap&&n.emissiveMap.isTexture===!0?t.mul(this.getTexture(r)):t}else if(r===e.NORMAL)n.normalMap?(i=Vl(this.getTexture(`normal`),this.getCache(`normalScale`,`vec2`)),i.normalMapType=n.normalMapType):i=n.bumpMap?Wl(this.getTexture(`bump`).r,this.getFloat(`bumpScale`)):_l;else if(r===e.CLEARCOAT){let e=this.getFloat(r);i=n.clearcoatMap&&n.clearcoatMap.isTexture===!0?e.mul(this.getTexture(r).r):e}else if(r===e.CLEARCOAT_ROUGHNESS){let e=this.getFloat(r);i=n.clearcoatRoughnessMap&&n.clearcoatRoughnessMap.isTexture===!0?e.mul(this.getTexture(r).r):e}else if(r===e.CLEARCOAT_NORMAL)i=n.clearcoatNormalMap?Vl(this.getTexture(r),this.getCache(r+`Scale`,`vec2`)):_l;else if(r===e.SHEEN){let e=this.getColor(`sheenColor`).mul(this.getFloat(`sheen`));i=n.sheenColorMap&&n.sheenColorMap.isTexture===!0?e.mul(this.getTexture(`sheenColor`).rgb):e}else if(r===e.SHEEN_ROUGHNESS){let e=this.getFloat(r);i=n.sheenRoughnessMap&&n.sheenRoughnessMap.isTexture===!0?e.mul(this.getTexture(r).a):e,i=i.clamp(.07,1)}else if(r===e.ANISOTROPY)if(n.anisotropyMap&&n.anisotropyMap.isTexture===!0){let e=this.getTexture(r);i=Io(Kl.x,Kl.y,Kl.y.negate(),Kl.x).mul(e.rg.mul(2).sub(J(1)).normalize().mul(e.b))}else i=Kl;else if(r===e.IRIDESCENCE_THICKNESS){let e=Nl(`1`,`float`,n.iridescenceThicknessRange);if(n.iridescenceThicknessMap){let t=Nl(`0`,`float`,n.iridescenceThicknessRange);i=e.sub(t).mul(this.getTexture(r).g).add(t)}else i=e}else if(r===e.TRANSMISSION){let e=this.getFloat(r);i=n.transmissionMap?e.mul(this.getTexture(r).r):e}else if(r===e.THICKNESS){let e=this.getFloat(r);i=n.thicknessMap?e.mul(this.getTexture(r).g):e}else if(r===e.IOR)i=this.getFloat(r);else if(r===e.LIGHT_MAP)i=this.getTexture(r).rgb.mul(this.getFloat(`lightMapIntensity`));else if(r===e.AO_MAP)i=this.getTexture(r).r.sub(1).mul(this.getFloat(`aoMapIntensity`)).add(1);else{let e=this.getNodeType(t);i=this.getCache(r,e)}return i}};Q.ALPHA_TEST=`alphaTest`,Q.COLOR=`color`,Q.OPACITY=`opacity`,Q.SHININESS=`shininess`,Q.SPECULAR=`specular`,Q.SPECULAR_STRENGTH=`specularStrength`,Q.SPECULAR_INTENSITY=`specularIntensity`,Q.SPECULAR_COLOR=`specularColor`,Q.REFLECTIVITY=`reflectivity`,Q.ROUGHNESS=`roughness`,Q.METALNESS=`metalness`,Q.NORMAL=`normal`,Q.CLEARCOAT=`clearcoat`,Q.CLEARCOAT_ROUGHNESS=`clearcoatRoughness`,Q.CLEARCOAT_NORMAL=`clearcoatNormal`,Q.EMISSIVE=`emissive`,Q.ROTATION=`rotation`,Q.SHEEN=`sheen`,Q.SHEEN_ROUGHNESS=`sheenRoughness`,Q.ANISOTROPY=`anisotropy`,Q.IRIDESCENCE=`iridescence`,Q.IRIDESCENCE_IOR=`iridescenceIOR`,Q.IRIDESCENCE_THICKNESS=`iridescenceThickness`,Q.IOR=`ior`,Q.TRANSMISSION=`transmission`,Q.THICKNESS=`thickness`,Q.ATTENUATION_DISTANCE=`attenuationDistance`,Q.ATTENUATION_COLOR=`attenuationColor`,Q.LINE_SCALE=`scale`,Q.LINE_DASH_SIZE=`dashSize`,Q.LINE_GAP_SIZE=`gapSize`,Q.LINE_WIDTH=`linewidth`,Q.LINE_DASH_OFFSET=`dashOffset`,Q.POINT_WIDTH=`pointWidth`,Q.DISPERSION=`dispersion`,Q.LIGHT_MAP=`light`,Q.AO_MAP=`ao`,Q.ALPHA_TEST,Q.COLOR,Q.SHININESS,Q.EMISSIVE,Q.OPACITY,Q.SPECULAR,Q.SPECULAR_INTENSITY,Q.SPECULAR_COLOR,Q.SPECULAR_STRENGTH,Q.REFLECTIVITY,Q.ROUGHNESS,Q.METALNESS,Q.CLEARCOAT,Q.CLEARCOAT_ROUGHNESS,Q.ROTATION,Q.SHEEN,Q.SHEEN_ROUGHNESS,Q.ANISOTROPY,Q.IRIDESCENCE,Q.IRIDESCENCE_IOR,Q.IRIDESCENCE_THICKNESS,Q.TRANSMISSION,Q.THICKNESS,Q.IOR,Q.ATTENUATION_DISTANCE,Q.ATTENUATION_COLOR,Q.LINE_SCALE,Q.LINE_DASH_SIZE,Q.LINE_GAP_SIZE,Q.LINE_WIDTH,Q.LINE_DASH_OFFSET,Q.POINT_WIDTH,Q.DISPERSION,Q.LIGHT_MAP,Q.AO_MAP;let Kl=Wo(new D).onReference(function(e){return e.material}).onRenderUpdate(function({material:e}){this.value.set(e.anisotropy*Math.cos(e.anisotropyRotation),e.anisotropy*Math.sin(e.anisotropyRotation))});var ql=class e extends V{static get type(){return`IndexNode`}constructor(e){super(`uint`),this.scope=e,this.isInstanceIndexNode=!0}generate(t){let n=this.getNodeType(t),r=this.scope,i;if(r===e.VERTEX)i=t.getVertexIndex();else if(r===e.INSTANCE)i=t.getInstanceIndex();else if(r===e.DRAW)i=t.getDrawIndex();else if(r===e.INVOCATION_LOCAL)i=t.getInvocationLocalIndex();else if(r===e.INVOCATION_SUBGROUP)i=t.getInvocationSubgroupIndex();else if(r===e.SUBGROUP)i=t.getSubgroupIndex();else throw Error(`THREE.IndexNode: Unknown scope: `+r);let a;return a=t.shaderStage===`vertex`||t.shaderStage===`compute`?i:Cc(this).build(t,n),a}};ql.VERTEX=`vertex`,ql.INSTANCE=`instance`,ql.SUBGROUP=`subgroup`,ql.INVOCATION_LOCAL=`invocationLocal`,ql.INVOCATION_SUBGROUP=`invocationSubgroup`,ql.DRAW=`draw`,ql.VERTEX,ql.INSTANCE,ql.SUBGROUP,ql.INVOCATION_SUBGROUP,ql.INVOCATION_LOCAL,ql.DRAW;var Jl=class extends V{static get type(){return`LoopNode`}constructor(e=[]){super(),this.params=e}getVarName(e){return String.fromCharCode(105+e)}getProperties(e){let t=e.getNodeProperties(this);if(t.stackNode!==void 0)return t;let n={};for(let e=0,t=this.params.length-1;e=`):a!==void 0&&i===void 0&&(i=`0`,c=`<`),c===void 0&&(c=Number(i)>Number(a)?`>=`:`<`));let u={start:i,end:a},d=u.start,f=u.end,p=``,m=``,h=``;l||=s===`int`||s===`uint`?c.includes(`<`)?`++`:`--`:c.includes(`<`)?`+= 1.`:`-= 1.`,p+=e.getVar(s,o)+` = `+d,m+=o+` `+c+` `+f,h+=o+` `+l;let g=`for ( ${p}; ${m}; ${h} )`;e.addFlowCode((t===0?` -`:``)+e.tab+g+` { - -`).addFlowTab()}let i=r.build(e,`void`),a=t.returnsNode?t.returnsNode.build(e):``;e.removeFlowTab().addFlowCode(` -`+e.tab+i);for(let t=0,n=this.params.length-1;tW(new Jl(vo(e,`int`))).append(),Xl,Zl;var Ql=class e extends V{static get type(){return`ScreenNode`}constructor(e){super(),this.scope=e,this.isViewportNode=!0}getNodeType(){return this.scope===e.VIEWPORT?`vec4`:`vec2`}getUpdateType(){let t=B.NONE;return(this.scope===e.SIZE||this.scope===e.VIEWPORT)&&(t=B.RENDER),this.updateType=t,t}update({renderer:t}){let n=t.getRenderTarget();this.scope===e.VIEWPORT?n===null?(t.getViewport(Zl),Zl.multiplyScalar(t.getPixelRatio())):Zl.copy(n.viewport):n===null?t.getDrawingBufferSize(Xl):(Xl.width=n.width,Xl.height=n.height)}setup(){let t=this.scope,n=null;return n=t===e.SIZE?Wo(Xl||=new D):t===e.VIEWPORT?Wo(Zl||=new k):J(tu.div(eu)),n}generate(t){if(this.scope===e.COORDINATE){let e=t.getFragCoord();if(t.isFlipY()){let n=t.getNodeProperties(eu).outputNode.build(t);e=`${t.getType(`vec2`)}( ${e}.x, ${n}.y - ${e}.y )`}return e}return super.generate(t)}};Ql.COORDINATE=`coordinate`,Ql.VIEWPORT=`viewport`,Ql.SIZE=`size`,Ql.UV=`uv`;let $l=yo(Ql,Ql.UV),eu=yo(Ql,Ql.SIZE),tu=yo(Ql,Ql.COORDINATE),nu=yo(Ql,Ql.VIEWPORT);nu.zw,nu.xy;let ru=new D;var iu=class extends el{static get type(){return`ViewportTextureNode`}constructor(e=$l,t=null,n=null){n===null&&(n=new bi,n.minFilter=l),super(n,e,t),this.generateMipmaps=!1,this.isOutputTextureNode=!0,this.updateBeforeType=B.FRAME}updateBefore(e){let t=e.renderer;t.getDrawingBufferSize(ru);let n=this.value;(n.image.width!==ru.width||n.image.height!==ru.height)&&(n.image.width=ru.width,n.image.height=ru.height,n.needsUpdate=!0);let r=n.generateMipmaps;n.generateMipmaps=this.generateMipmaps,t.copyFramebufferToTexture(n),n.generateMipmaps=r}clone(){let e=new this.constructor(this.uvNode,this.levelNode,this.value);return e.generateMipmaps=this.generateMipmaps,e}};let au=null,ou=G(class extends iu{static get type(){return`ViewportDepthTextureNode`}constructor(e=$l,t=null){au===null&&(au=new wr),super(e,t,au)}});var su=class e extends V{static get type(){return`ViewportDepthNode`}constructor(e,t=null){super(`float`),this.scope=e,this.valueNode=t,this.isViewportDepthNode=!0}generate(t){let{scope:n}=this;return n===e.DEPTH_BASE?t.getFragDepth():super.generate(t)}setup({camera:t}){let{scope:n}=this,r=this.valueNode,i=null;return n===e.DEPTH_BASE?r!==null&&(i=du().assign(r)):n===e.DEPTH?i=t.isPerspectiveCamera?lu(dl.z,nl,rl):cu(dl.z,nl,rl):n===e.LINEAR_DEPTH&&(i=r===null?cu(dl.z,nl,rl):t.isPerspectiveCamera?cu(uu(r,nl,rl),nl,rl):r),i}};su.DEPTH_BASE=`depthBase`,su.DEPTH=`depth`,su.LINEAR_DEPTH=`linearDepth`;let cu=(e,t,n)=>e.add(t).div(t.sub(n)),lu=(e,t,n)=>t.add(e).mul(n).div(n.sub(t).mul(e)),uu=(e,t,n)=>t.mul(n).div(n.sub(t).mul(e).sub(n)),du=G(su,su.DEPTH_BASE),fu=yo(su,su.DEPTH);ou(),fu.assign=e=>du(e);var pu=class e extends V{static get type(){return`ClippingNode`}constructor(t=e.DEFAULT){super(),this.scope=t}setup(t){super.setup(t);let n=t.clippingContext,{localClipIntersection:r,localClippingCount:i,globalClippingCount:a}=n,o=a+i,s=r?o-i:o;return this.scope===e.ALPHA_TO_COVERAGE?this.setupAlphaToCoverage(n.planes,o,s):this.setupDefault(n.planes,o,s)}setupAlphaToCoverage(e,t,n){return K(()=>{let r=Al(e),i=Ko(`float`,`distanceToPlane`),a=Ko(`float`,`distanceToGradient`),o=Ko(`float`,`clipOpacity`);o.assign(1);let s;if(Yl(n,({i:e})=>{s=r.element(e),i.assign(dl.dot(s.xyz).negate().add(s.w)),a.assign(i.fwidth().div(2)),o.mulAssign(_c(a.negate(),a,i)),o.equal(0).discard()}),n{s=r.element(t),i.assign(dl.dot(s.xyz).negate().add(s.w)),a.assign(i.fwidth().div(2)),e.mulAssign(_c(a.negate(),a,i).oneMinus())}),o.mulAssign(e.oneMinus())}qo.a.mulAssign(o),qo.a.equal(0).discard()})()}setupDefault(e,t,n){return K(()=>{let r=Al(e),i;if(Yl(n,({i:e})=>{i=r.element(e),dl.dot(i.xyz).greaterThan(i.w).discard()}),n{i=r.element(t),e.assign(dl.dot(i.xyz).greaterThan(i.w).and(e))}),e.discard()}})()}};pu.ALPHA_TO_COVERAGE=`alphaToCoverage`,pu.DEFAULT=`default`,1/Math.PI,Y(.04),q(1);let mu=K(([e,t])=>{let n=e.toVar();n.assign(Zo(2,n).sub(1));let r=Y(n,1).toVar();return bo(t.equal(0),()=>{r.assign(r.zyx)}).ElseIf(t.equal(1),()=>{r.assign(r.xzy),r.xz.mulAssign(-1)}).ElseIf(t.equal(2),()=>{r.x.mulAssign(-1)}).ElseIf(t.equal(3),()=>{r.assign(r.zyx),r.xz.mulAssign(-1)}).ElseIf(t.equal(4),()=>{r.assign(r.xzy),r.xy.mulAssign(-1)}).ElseIf(t.equal(5),()=>{r.z.mulAssign(-1)}),r}).setLayout({name:`getDirection`,type:`vec3`,inputs:[{name:`uv`,type:`vec2`},{name:`face`,type:`float`}]});K(({texture:e,uv:t})=>{let n=1e-4,r=Y().toVar();return bo(t.x.lessThan(n),()=>{r.assign(Y(1,0,0))}).ElseIf(t.y.lessThan(n),()=>{r.assign(Y(0,1,0))}).ElseIf(t.z.lessThan(n),()=>{r.assign(Y(0,0,1))}).ElseIf(t.x.greaterThan(1-n),()=>{r.assign(Y(-1,0,0))}).ElseIf(t.y.greaterThan(1-n),()=>{r.assign(Y(0,-1,0))}).ElseIf(t.z.greaterThan(1-n),()=>{r.assign(Y(0,0,-1))}).Else(()=>{let n=.01,i=e.uv(t.add(Y(-n,0,0))).r.sub(e.uv(t.add(Y(n,0,0))).r),a=e.uv(t.add(Y(0,-n,0))).r.sub(e.uv(t.add(Y(0,n,0))).r),o=e.uv(t.add(Y(0,0,-n))).r.sub(e.uv(t.add(Y(0,0,n))).r);r.assign(Y(i,a,o))}),r.normalize()});let hu=(1+Math.sqrt(5))/2,gu=1/hu;-hu,-gu,-gu;let _u=mu(Zc(),Xc(`faceIndex`)).normalize();Y(_u.x,_u.y.negate(),_u.z);var vu=class{constructor(e,t,n=null,r=``,i=!1){this.type=e,this.name=t,this.count=n,this.qualifier=r,this.isConst=i}};vu.isNodeFunctionInput=!0;var yu=class e extends Uo{static get type(){return`TimerNode`}constructor(t=e.LOCAL,n=1,r=0){super(r),this.scope=t,this.scale=n,this.updateType=B.FRAME}update(t){let n=this.scope,r=this.scale;n===e.LOCAL?this.value+=t.deltaTime*r:n===e.DELTA?this.value=t.deltaTime*r:n===e.FRAME?this.value=t.frameId:this.value=t.time*r}serialize(e){super.serialize(e),e.scope=this.scope,e.scale=this.scale}deserialize(e){super.deserialize(e),this.scope=e.scope,this.scale=e.scale}};yu.LOCAL=`local`,yu.GLOBAL=`global`,yu.DELTA=`delta`,yu.FRAME=`frame`;let bu=(e,t=0)=>W(new yu(yu.LOCAL,e,t));var xu=class e extends V{static get type(){return`OscNode`}constructor(t=e.SINE,n=bu()){super(),this.method=t,this.timeNode=n}getNodeType(e){return this.timeNode.getNodeType(e)}setup(){let t=this.method,n=W(this.timeNode),r=null;return t===e.SINE?r=n.add(.75).mul(Math.PI*2).sin().mul(.5).add(.5):t===e.SQUARE?r=n.fract().round():t===e.TRIANGLE?r=n.add(.5).fract().mul(2).sub(1).abs():t===e.SAWTOOTH&&(r=n.fract()),r}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}};xu.SINE=`sine`,xu.SQUARE=`square`,xu.TRIANGLE=`triangle`,xu.SAWTOOTH=`sawtooth`,xu.SINE,xu.SQUARE,xu.TRIANGLE,xu.SAWTOOTH,new gr,new A,new A,new A,new j,new A(0,0,-1),new k,new A,new A,new k,new D,new at,$l.flipX();var Su=class e extends V{static get type(){return`SceneNode`}constructor(t=e.BACKGROUND_BLURRINESS,n=null){super(),this.scope=t,this.scene=n}setup(t){let n=this.scope,r=this.scene===null?t.scene:this.scene,i;return n===e.BACKGROUND_BLURRINESS?i=Nl(`backgroundBlurriness`,`float`,r):n===e.BACKGROUND_INTENSITY?i=Nl(`backgroundIntensity`,`float`,r):console.error(`THREE.SceneNode: Unknown scope:`,n),i}};Su.BACKGROUND_BLURRINESS=`backgroundBlurriness`,Su.BACKGROUND_INTENSITY=`backgroundIntensity`,Su.BACKGROUND_BLURRINESS,Su.BACKGROUND_INTENSITY;let Cu=new D;var wu=class extends el{static get type(){return`PassTextureNode`}constructor(e,t){super(t),this.passNode=e,this.setUpdateMatrix(!1)}setup(e){return e.object.isQuadMesh&&this.passNode.build(e),super.setup(e)}clone(){return new this.constructor(this.passNode,this.value)}},Tu=class extends wu{static get type(){return`PassMultipleTextureNode`}constructor(e,t,n=!1){super(e,null),this.textureName=t,this.previousTexture=n}updateTexture(){this.value=this.previousTexture?this.passNode.getPreviousTexture(this.textureName):this.passNode.getTexture(this.textureName)}setup(e){return this.updateTexture(),super.setup(e)}clone(){return new this.constructor(this.passNode,this.textureName,this.previousTexture)}},Eu=class e extends Fa{static get type(){return`PassNode`}constructor(e,t,n,r={}){super(`vec4`),this.scope=e,this.scene=t,this.camera=n,this.options=r,this._pixelRatio=1,this._width=1,this._height=1;let i=new wr;i.isRenderTargetTexture=!0,i.name=`depth`;let a=new at(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:f,...r});a.texture.name=`output`,a.depthTexture=i,this.renderTarget=a,this.updateBeforeType=B.FRAME,this._textures={output:a.texture,depth:i},this._textureNodes={},this._linearDepthNodes={},this._viewZNodes={},this._previousTextures={},this._previousTextureNodes={},this._cameraNear=Wo(0),this._cameraFar=Wo(0),this._mrt=null,this.isPassNode=!0}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}isGlobal(){return!0}getTexture(e){let t=this._textures[e];return t===void 0&&(t=this.renderTarget.texture.clone(),t.isRenderTargetTexture=!0,t.name=e,this._textures[e]=t,this.renderTarget.textures.push(t)),t}getPreviousTexture(e){let t=this._previousTextures[e];return t===void 0&&(t=this.getTexture(e).clone(),t.isRenderTargetTexture=!0,this._previousTextures[e]=t),t}toggleTexture(e){let t=this._previousTextures[e];if(t!==void 0){let n=this._textures[e],r=this.renderTarget.textures.indexOf(n);this.renderTarget.textures[r]=t,this._textures[e]=t,this._previousTextures[e]=n,this._textureNodes[e].updateTexture(),this._previousTextureNodes[e].updateTexture()}}getTextureNode(e=`output`){let t=this._textureNodes[e];return t===void 0&&(this._textureNodes[e]=t=W(new Tu(this,e)),this._textureNodes[e].updateTexture()),t}getPreviousTextureNode(e=`output`){let t=this._previousTextureNodes[e];return t===void 0&&(this._textureNodes[e]===void 0&&this.getTextureNode(e),this._previousTextureNodes[e]=t=W(new Tu(this,e,!0)),this._previousTextureNodes[e].updateTexture()),t}getViewZNode(e=`depth`){let t=this._viewZNodes[e];if(t===void 0){let n=this._cameraNear,r=this._cameraFar;this._viewZNodes[e]=t=uu(this.getTextureNode(e),n,r)}return t}getLinearDepthNode(e=`depth`){let t=this._linearDepthNodes[e];if(t===void 0){let n=this._cameraNear,r=this._cameraFar,i=this.getViewZNode(e);this._linearDepthNodes[e]=t=cu(i,n,r)}return t}setup({renderer:t}){return this.renderTarget.samples=this.options.samples===void 0?t.samples:this.options.samples,t.backend.isWebGLBackend===!0&&(this.renderTarget.samples=0),this.renderTarget.depthTexture.isMultisampleRenderTargetTexture=this.renderTarget.samples>1,this.scope===e.COLOR?this.getTextureNode():this.getLinearDepthNode()}updateBefore(e){let{renderer:t}=e,{scene:n,camera:r}=this;this._pixelRatio=t.getPixelRatio();let i=t.getSize(Cu);this.setSize(i.width,i.height);let a=t.getRenderTarget(),o=t.getMRT();this._cameraNear.value=r.near,this._cameraFar.value=r.far;for(let e in this._previousTextures)this.toggleTexture(e);t.setRenderTarget(this.renderTarget),t.setMRT(this._mrt),t.render(n,r),t.setRenderTarget(a),t.setMRT(o)}setSize(e,t){this._width=e,this._height=t;let n=this._width*this._pixelRatio,r=this._height*this._pixelRatio;this.renderTarget.setSize(n,r)}setPixelRatio(e){this._pixelRatio=e,this.setSize(this._width,this._height)}dispose(){this.renderTarget.dispose()}};Eu.COLOR=`color`,Eu.DEPTH=`depth`,new class extends Map{get(e,t=null,...n){if(this.has(e))return super.get(e);if(t!==null){let r=t(...n);return this.set(e,r),r}}},K(({depthTexture:e,shadowCoord:t})=>tl(e,t.xy).compare(t.z)),K(({depthTexture:e,shadowCoord:t,shadow:n})=>{let r=(t,n)=>tl(e,t).compare(n),i=Nl(`mapSize`,`vec2`,n).setGroup(Vo),a=Nl(`radius`,`float`,n).setGroup(Vo),o=J(1).div(i),s=o.x.negate().mul(a),c=o.y.negate().mul(a),l=o.x.mul(a),u=o.y.mul(a),d=s.div(2),f=c.div(2),p=l.div(2),m=u.div(2);return Yo(r(t.xy.add(J(s,c)),t.z),r(t.xy.add(J(0,c)),t.z),r(t.xy.add(J(l,c)),t.z),r(t.xy.add(J(d,f)),t.z),r(t.xy.add(J(0,f)),t.z),r(t.xy.add(J(p,f)),t.z),r(t.xy.add(J(s,0)),t.z),r(t.xy.add(J(d,0)),t.z),r(t.xy,t.z),r(t.xy.add(J(p,0)),t.z),r(t.xy.add(J(l,0)),t.z),r(t.xy.add(J(d,m)),t.z),r(t.xy.add(J(0,m)),t.z),r(t.xy.add(J(p,m)),t.z),r(t.xy.add(J(s,u)),t.z),r(t.xy.add(J(0,u)),t.z),r(t.xy.add(J(l,u)),t.z)).mul(1/17)}),K(({depthTexture:e,shadowCoord:t,shadow:n})=>{let r=(t,n)=>tl(e,t).compare(n),i=Nl(`mapSize`,`vec2`,n).setGroup(Vo),a=J(1).div(i),o=a.x,s=a.y,c=t.xy,l=js(c.mul(i).add(.5));return c.subAssign(l.mul(a)),Yo(r(c,t.z),r(c.add(J(o,0)),t.z),r(c.add(J(0,s)),t.z),r(c.add(a),t.z),pc(r(c.add(J(o.negate(),0)),t.z),r(c.add(J(o.mul(2),0)),t.z),l.x),pc(r(c.add(J(o.negate(),s)),t.z),r(c.add(J(o.mul(2),s)),t.z),l.x),pc(r(c.add(J(0,s.negate())),t.z),r(c.add(J(0,s.mul(2))),t.z),l.y),pc(r(c.add(J(o,s.negate())),t.z),r(c.add(J(o,s.mul(2))),t.z),l.y),pc(pc(r(c.add(J(o.negate(),s.negate())),t.z),r(c.add(J(o.mul(2),s.negate())),t.z),l.x),pc(r(c.add(J(o.negate(),s.mul(2))),t.z),r(c.add(J(o.mul(2),s.mul(2))),t.z),l.x),l.y)).mul(1/9)}),K(({depthTexture:e,shadowCoord:t})=>{let n=q(1).toVar(),r=tl(e).uv(t.xy).rg,i=ec(t.z,r.x);return bo(i.notEqual(q(1)),()=>{let e=t.z.sub(r.x),a=Qs(0,r.y.mul(r.y)),o=a.div(a.add(e.mul(e)));o=mc(Xo(o,.3).div(.6499999999999999)),n.assign(mc(Qs(i,o)))}),n}),K(({samples:e,radius:t,size:n,shadowPass:r})=>{let i=q(0).toVar(),a=q(0).toVar(),o=e.lessThanEqual(q(1)).select(q(0),q(2).div(e.sub(1))),s=e.lessThanEqual(q(1)).select(q(0),q(-1));return Yl({start:Co(0),end:Co(e),type:`int`,condition:`<`},({i:e})=>{let c=s.add(q(e).mul(o)),l=r.uv(Yo(tu.xy,J(0,c).mul(t)).div(n)).x;i.addAssign(l),a.addAssign(l.mul(l))}),i.divAssign(e),a.divAssign(e),J(i,Es(a.sub(i.mul(i))))}),K(({samples:e,radius:t,size:n,shadowPass:r})=>{let i=q(0).toVar(),a=q(0).toVar(),o=e.lessThanEqual(q(1)).select(q(0),q(2).div(e.sub(1))),s=e.lessThanEqual(q(1)).select(q(0),q(-1));return Yl({start:Co(0),end:Co(e),type:`int`,condition:`<`},({i:e})=>{let c=s.add(q(e).mul(o)),l=r.uv(Yo(tu.xy,J(c,0).mul(t)).div(n));i.addAssign(l.x),a.addAssign(Yo(l.y.mul(l.y),l.x.mul(l.x)))}),i.divAssign(e),a.divAssign(e),J(i,Es(a.sub(i.mul(i))))}),Y(1.6605,-.1246,-.0182),Y(-.5876,1.1329,-.1006),Y(-.0728,-.0083,1.1187),Y(.6274,.0691,.0164),Y(.3293,.9195,.088),Y(.0433,.0113,.8956),G(class extends V{constructor(e){super(),this.scope=e}generate(e){let{scope:t}=this,{renderer:n}=e;n.backend.isWebGLBackend===!0?e.addFlowCode(`\t// ${t}Barrier \n`):e.addLineFlowCode(`${t}Barrier()`,this)}});var Du=class extends Fa{static get type(){return`AtomicFunctionNode`}constructor(e,t,n,r=null){super(`uint`),this.method=e,this.pointerNode=t,this.valueNode=n,this.storeNode=r}getInputType(e){return this.pointerNode.getNodeType(e)}getNodeType(e){return this.getInputType(e)}generate(e){let t=this.method,n=this.getNodeType(e),r=this.getInputType(e),i=this.pointerNode,a=this.valueNode,o=[];o.push(`&${i.build(e,r)}`),o.push(a.build(e,r));let s=`${e.getMethod(t,n)}( ${o.join(`, `)} )`;if(this.storeNode!==null){let t=this.storeNode.build(e,r);e.addLineFlowCode(`${t} = ${s}`,this)}else e.addLineFlowCode(s,this)}};Du.ATOMIC_LOAD=`atomicLoad`,Du.ATOMIC_STORE=`atomicStore`,Du.ATOMIC_ADD=`atomicAdd`,Du.ATOMIC_SUB=`atomicSub`,Du.ATOMIC_MAX=`atomicMax`,Du.ATOMIC_MIN=`atomicMin`,Du.ATOMIC_AND=`atomicAnd`,Du.ATOMIC_OR=`atomicOr`,Du.ATOMIC_XOR=`atomicXor`,G(Du);var Ou=class{constructor(e,t,n=``,r=``){this.type=e,this.inputs=t,this.name=n,this.precision=r}getCode(){console.warn(`Abstract function.`)}};if(Ou.isNodeFunction=!0,typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`register`,{detail:{revision:n}})),typeof window<`u`){try{t&&(window.__THREE__IMPORTS__||(window.__THREE__IMPORTS__=[]),window.__THREE__IMPORTS__.push({url:self.location.href,revision:n}))}catch{}window.__THREE__?(console.warn(`WARNING: Multiple instances of Three.js being imported. Existing: `+window.__THREE__+`, new: 169.19`),console.warn(window.__THREE__IMPORTS__)):window.__THREE__=n}let ku=new WeakMap;var Au=class extends Ji{constructor(e){super(e),this.decoderPath=``,this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL=``,this.defaultAttributeIDs={position:`POSITION`,normal:`NORMAL`,color:`COLOR`,uv:`TEX_COORD`},this.defaultAttributeTypes={position:`Float32Array`,normal:`Float32Array`,color:`Float32Array`,uv:`Float32Array`}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,n,r){let i=new Zi(this.manager);i.setPath(this.path),i.setResponseType(`arraybuffer`),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,e=>{this.parse(e,t,r)},n,r)}parse(e,t,n=()=>{}){this.decodeDracoFile(e,t,null,null,C,n).catch(n)}decodeDracoFile(e,t,n,r,i=w,a=()=>{}){let o={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!n,vertexColorSpace:i};return this.decodeGeometry(e,o).then(t).catch(a)}decodeGeometry(e,t){let n=JSON.stringify(t);if(ku.has(e)){let t=ku.get(e);if(t.key===n)return t.promise;if(e.byteLength===0)throw Error(`THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.`)}let r,i=this.workerNextTaskID++,a=e.byteLength,o=this._getWorker(i,a).then(n=>(r=n,new Promise((n,a)=>{r._callbacks[i]={resolve:n,reject:a},r.postMessage({type:`decode`,id:i,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&i&&this._releaseTask(r,i)}),ku.set(e,{key:n,promise:o}),o}_createGeometry(e){let t=new Hn;e.index&&t.setIndex(new Mn(e.index.array,1));for(let n=0;n{n.load(e,t,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e=typeof WebAssembly!=`object`||this.decoderConfig.type===`js`,t=[];return e?t.push(this._loadLibrary(`draco_decoder.js`,`text`)):(t.push(this._loadLibrary(`draco_wasm_wrapper.js`,`text`)),t.push(this._loadLibrary(`draco_decoder.wasm`,`arraybuffer`))),this.decoderPending=Promise.all(t).then(t=>{let n=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let r=ju.toString(),i=[`/* draco decoder */`,n,``,`/* worker */`,r.substring(r.indexOf(`{`)+1,r.lastIndexOf(`}`))].join(` -`);this.workerSourceURL=URL.createObjectURL(new Blob([i]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtht._taskLoad?-1:1});let n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log(`Task load: `,this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{let t=e.draco,o=new t.Decoder;try{let e=n(t,o,new Int8Array(r),a),s=e.attributes.map(e=>e.array.buffer);e.index&&s.push(e.index.array.buffer),self.postMessage({type:`decode`,id:i.id,geometry:e},s)}catch(e){console.error(e),self.postMessage({type:`error`,id:i.id,error:e.message})}finally{t.destroy(o)}});break}};function n(e,t,n,a){let o=a.attributeIDs,s=a.attributeTypes,c,l,u=t.GetEncodedGeometryType(n);if(u===e.TRIANGULAR_MESH)c=new e.Mesh,l=t.DecodeArrayToMesh(n,n.byteLength,c);else if(u===e.POINT_CLOUD)c=new e.PointCloud,l=t.DecodeArrayToPointCloud(n,n.byteLength,c);else throw Error(`THREE.DRACOLoader: Unexpected geometry type.`);if(!l.ok()||c.ptr===0)throw Error(`THREE.DRACOLoader: Decoding failed: `+l.error_msg());let d={index:null,attributes:[]};for(let n in o){let r=self[s[n]],l,u;if(a.useUniqueIDs)u=o[n],l=t.GetAttributeByUniqueId(c,u);else{if(u=t.GetAttributeId(c,e[o[n]]),u===-1)continue;l=t.GetAttribute(c,u)}let f=i(e,t,c,n,r,l);n===`color`&&(f.vertexColorSpace=a.vertexColorSpace),d.attributes.push(f)}return u===e.TRIANGULAR_MESH&&(d.index=r(e,t,c)),e.destroy(c),d}function r(e,t,n){let r=n.num_faces()*3,i=r*4,a=e._malloc(i);t.GetTrianglesUInt32Array(n,i,a);let o=new Uint32Array(e.HEAPF32.buffer,a,r).slice();return e._free(a),{array:o,itemSize:1}}function i(e,t,n,r,i,o){let s=o.num_components(),c=n.num_points()*s,l=c*i.BYTES_PER_ELEMENT,u=a(e,i),d=e._malloc(l);t.GetAttributeDataArrayForAllPoints(n,o,u,l,d);let f=new i(e.HEAPF32.buffer,d,c).slice();return e._free(d),{name:r,array:f,itemSize:s}}function a(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}}function Mu(e,t){if(t===0)return console.warn(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.`),e;if(t===2||t===1){let n=e.getIndex();if(n===null){let t=[],r=e.getAttribute(`position`);if(r!==void 0){for(let e=0;e=2.0 are supported.`));return}this.json=i,this.jsonErrorData=a;let l=new Dd(i,{path:t||this.resourcePath||``,crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e=0&&s[t]===void 0&&console.warn(`THREE.GLTFLoader: Unknown extension "`+t+`".`)}}l.setExtensions(o),l.setPlugins(s),l.parse(n,r)}parseAsync(e,t){let n=this;return new Promise(function(r,i){n.parse(e,t,r,i)})}};function Pu(){let e={};return{get:function(t){return e[t]},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},removeAll:function(){e={}}}}let $={KHR_BINARY_GLTF:`KHR_binary_glTF`,KHR_DRACO_MESH_COMPRESSION:`KHR_draco_mesh_compression`,KHR_LIGHTS_PUNCTUAL:`KHR_lights_punctual`,KHR_MATERIALS_CLEARCOAT:`KHR_materials_clearcoat`,KHR_MATERIALS_DISPERSION:`KHR_materials_dispersion`,KHR_MATERIALS_IOR:`KHR_materials_ior`,KHR_MATERIALS_SHEEN:`KHR_materials_sheen`,KHR_MATERIALS_SPECULAR:`KHR_materials_specular`,KHR_MATERIALS_TRANSMISSION:`KHR_materials_transmission`,KHR_MATERIALS_IRIDESCENCE:`KHR_materials_iridescence`,KHR_MATERIALS_ANISOTROPY:`KHR_materials_anisotropy`,KHR_MATERIALS_UNLIT:`KHR_materials_unlit`,KHR_MATERIALS_VOLUME:`KHR_materials_volume`,KHR_TEXTURE_BASISU:`KHR_texture_basisu`,KHR_TEXTURE_TRANSFORM:`KHR_texture_transform`,KHR_MESH_QUANTIZATION:`KHR_mesh_quantization`,KHR_MATERIALS_EMISSIVE_STRENGTH:`KHR_materials_emissive_strength`,EXT_MATERIALS_BUMP:`EXT_materials_bump`,EXT_TEXTURE_WEBP:`EXT_texture_webp`,EXT_TEXTURE_AVIF:`EXT_texture_avif`,EXT_MESHOPT_COMPRESSION:`EXT_meshopt_compression`,EXT_MESH_GPU_INSTANCING:`EXT_mesh_gpu_instancing`};var Fu=class{constructor(e){this.parser=e,this.name=$.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let n=0,r=t.length;n=0)throw Error(`THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures`);return null}return t.loadTextureImage(e,i.source,a)}},Yu=class{constructor(e){this.parser=e,this.name=$.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return this.detectSupport().then(function(i){if(i)return n.loadTextureImage(e,a.source,s);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw Error(`THREE.GLTFLoader: WebP required by asset but unsupported.`);return n.loadTexture(e)})}detectSupport(){return this.isSupported||=new Promise(function(e){let t=new Image;t.src=`data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA`,t.onload=t.onerror=function(){e(t.height===1)}}),this.isSupported}},Xu=class{constructor(e){this.parser=e,this.name=$.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return this.detectSupport().then(function(i){if(i)return n.loadTextureImage(e,a.source,s);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw Error(`THREE.GLTFLoader: AVIF required by asset but unsupported.`);return n.loadTexture(e)})}detectSupport(){return this.isSupported||=new Promise(function(e){let t=new Image;t.src=`data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=`,t.onload=t.onerror=function(){e(t.height===1)}}),this.isSupported}},Zu=class{constructor(e){this.name=$.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){let t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){let e=n.extensions[this.name],r=this.parser.getDependency(`buffer`,e.buffer),i=this.parser.options.meshoptDecoder;if(!i||!i.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw Error(`THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files`);return null}return r.then(function(t){let n=e.byteOffset||0,r=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,n,r);return i.decodeGltfBufferAsync?i.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then(function(e){return e.buffer}):i.ready.then(function(){let t=new ArrayBuffer(a*o);return i.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t})})}else return null}},Qu=class{constructor(e){this.name=$.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;let r=t.meshes[n.mesh];for(let e of r.primitives)if(e.mode!==cd.TRIANGLES&&e.mode!==cd.TRIANGLE_STRIP&&e.mode!==cd.TRIANGLE_FAN&&e.mode!==void 0)return null;let i=n.extensions[this.name].attributes,a=[],o={};for(let e in i)a.push(this.parser.getDependency(`accessor`,i[e]).then(t=>(o[e]=t,o[e])));return a.length<1?null:(a.push(this.parser.createNodeMesh(e)),Promise.all(a).then(e=>{let t=e.pop(),n=t.isGroup?t.children:[t],r=e[0].count,i=[];for(let e of n){let t=new j,n=new A,a=new st,s=new A(1,1,1),c=new Qr(e.geometry,e.material,r);for(let e=0;e0||e.search(/^data\:image\/jpeg/)===0?`image/jpeg`:e.search(/\.webp($|\?)/i)>0||e.search(/^data\:image\/webp/)===0?`image/webp`:`image/png`}let Ed=new j;var Dd=class{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new Pu,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,r=-1,i=!1,a=-1;if(typeof navigator<`u`){let e=navigator.userAgent;n=/^((?!chrome|android).)*safari/i.test(e)===!0;let t=e.match(/Version\/(\d+)/);r=n&&t?parseInt(t[1],10):-1,i=e.indexOf(`Firefox`)>-1,a=i?e.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>`u`||n&&r<17||i&&a<98?this.textureLoader=new $i(this.options.manager):this.textureLoader=new ha(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Zi(this.options.manager),this.fileLoader.setResponseType(`arraybuffer`),this.options.crossOrigin===`use-credentials`&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let n=this,r=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all(this._invokeAll(function(e){return e.beforeRoot&&e.beforeRoot()})).then(function(){return Promise.all([n.getDependencies(`scene`),n.getDependencies(`animation`),n.getDependencies(`camera`)])}).then(function(t){let a={scene:t[0][r.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:r.asset,parser:n,userData:{}};return vd(i,a,r),yd(a,r),Promise.all(n._invokeAll(function(e){return e.afterRoot&&e.afterRoot(a)})).then(function(){for(let e of a.scenes)e.updateMatrixWorld();e(a)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n{let n=this.associations.get(e);n!=null&&this.associations.set(t,n);for(let[n,r]of e.children.entries())i(r,t.children[n])};return i(n,r),r.name+=`_instance_`+ e.uses[t]++,r}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let n=0;n=2&&p.setY(t,u[e*a+1]),a>=3&&p.setZ(t,u[e*a+2]),a>=4&&p.setW(t,u[e*a+3]),a>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}p.normalized=d}return p})}loadTexture(e){let t=this.json,n=this.options,r=t.textures[e].source,i=t.images[r],a=this.textureLoader;if(i.uri){let e=n.manager.getHandler(i.uri);e!==null&&(a=e)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,n){let r=this,i=this.json,a=i.textures[e],o=i.images[t],s=(o.uri||o.bufferView)+`:`+a.sampler;if(this.textureCache[s])return this.textureCache[s];let c=this.loadImageSource(t,n).then(function(t){t.flipY=!1,t.name=a.name||o.name||``,t.name===``&&typeof o.uri==`string`&&o.uri.startsWith(`data:image/`)===!1&&(t.name=o.uri);let n=(i.samplers||{})[a.sampler]||{};return t.magFilter=ud[n.magFilter]||1006,t.minFilter=ud[n.minFilter]||1008,t.wrapS=dd[n.wrapS]||1e3,t.wrapT=dd[n.wrapT]||1e3,t.anisotropy=4,r.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[s]=c,c}loadImageSource(e,t){let n=this,r=this.json,i=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(e=>e.clone());let a=r.images[e],o=self.URL||self.webkitURL,s=a.uri||``,c=!1;if(a.bufferView!==void 0)s=n.getDependency(`bufferView`,a.bufferView).then(function(e){c=!0;let t=new Blob([e],{type:a.mimeType});return s=o.createObjectURL(t),s});else if(a.uri===void 0)throw Error(`THREE.GLTFLoader: Image `+e+` is missing URI and bufferView`);let l=Promise.resolve(s).then(function(e){return new Promise(function(n,r){let a=n;t.isImageBitmapLoader===!0&&(a=function(e){let t=new it(e);t.needsUpdate=!0,n(t)}),t.load(ma.resolveURL(e,i.path),a,void 0,r)})}).then(function(e){return c===!0&&o.revokeObjectURL(s),yd(e,a),e.userData.mimeType=a.mimeType||Td(a.uri),e}).catch(function(e){throw console.error(`THREE.GLTFLoader: Couldn't load texture`,s),e});return this.sourceCache[e]=l,l}assignTexture(e,t,n,r){let i=this;return this.getDependency(`texture`,n.index).then(function(a){if(!a)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(a=a.clone(),a.channel=n.texCoord),i.extensions[$.KHR_TEXTURE_TRANSFORM]){let e=n.extensions===void 0?void 0:n.extensions[$.KHR_TEXTURE_TRANSFORM];if(e){let t=i.associations.get(a);a=i.extensions[$.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),i.associations.set(a,t)}}return r!==void 0&&(a.colorSpace=r),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,n=e.material,r=t.attributes.tangent===void 0,i=t.attributes.color!==void 0,a=t.attributes.normal===void 0;if(e.isPoints){let e=`PointsMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new pi,kn.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,t.sizeAttenuation=!1,this.cache.add(e,t)),n=t}else if(e.isLine){let e=`LineBasicMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new $r,kn.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,this.cache.add(e,t)),n=t}if(r||i||a){let e=`ClonedMaterial:`+n.uuid+`:`;r&&(e+=`derivative-tangents:`),i&&(e+=`vertex-colors:`),a&&(e+=`flat-shading:`);let t=this.cache.get(e);t||(t=n.clone(),i&&(t.vertexColors=!0),a&&(t.flatShading=!0),r&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(n))),n=t}e.material=n}getMaterialType(){return wi}loadMaterial(e){let t=this,n=this.json,r=this.extensions,i=n.materials[e],a,o={},s=i.extensions||{},c=[];if(s[$.KHR_MATERIALS_UNLIT]){let e=r[$.KHR_MATERIALS_UNLIT];a=e.getMaterialType(),c.push(e.extendParams(o,i,t))}else{let n=i.pbrMetallicRoughness||{};if(o.color=new N(1,1,1),o.opacity=1,Array.isArray(n.baseColorFactor)){let e=n.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],w),o.opacity=e[3]}n.baseColorTexture!==void 0&&c.push(t.assignTexture(o,`map`,n.baseColorTexture,C)),o.metalness=n.metallicFactor===void 0?1:n.metallicFactor,o.roughness=n.roughnessFactor===void 0?1:n.roughnessFactor,n.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,`metalnessMap`,n.metallicRoughnessTexture)),c.push(t.assignTexture(o,`roughnessMap`,n.metallicRoughnessTexture))),a=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)})))}i.doubleSided===!0&&(o.side=2);let l=i.alphaMode||gd.OPAQUE;if(l===gd.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,l===gd.MASK&&(o.alphaTest=i.alphaCutoff===void 0?.5:i.alphaCutoff)),i.normalTexture!==void 0&&a!==An&&(c.push(t.assignTexture(o,`normalMap`,i.normalTexture)),o.normalScale=new D(1,1),i.normalTexture.scale!==void 0)){let e=i.normalTexture.scale;o.normalScale.set(e,e)}if(i.occlusionTexture!==void 0&&a!==An&&(c.push(t.assignTexture(o,`aoMap`,i.occlusionTexture)),i.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=i.occlusionTexture.strength)),i.emissiveFactor!==void 0&&a!==An){let e=i.emissiveFactor;o.emissive=new N().setRGB(e[0],e[1],e[2],w)}return i.emissiveTexture!==void 0&&a!==An&&c.push(t.assignTexture(o,`emissiveMap`,i.emissiveTexture,C)),Promise.all(c).then(function(){let n=new a(o);return i.name&&(n.name=i.name),yd(n,i),t.associations.set(n,{materials:e}),i.extensions&&vd(r,n,i),n})}createUniqueName(e){let t=z.sanitizeNodeName(e||``);return t in this.nodeNamesUsed?t+`_`+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,n=this.extensions,r=this.primitiveCache;function i(e){return n[$.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then(function(n){return kd(n,e,t)})}let a=[];for(let n=0,o=e.length;n0&&xd(d,i),d.name=t.createUniqueName(i.name||`mesh_`+e),yd(d,i),u.extensions&&vd(r,d,u),t.assignFinalMaterial(d),c.push(d)}for(let n=0,r=c.length;n1?new Tr:t.length===1?t[0]:new M,o!==t[0])for(let e=0,n=t.length;e{let t=new Map;for(let[e,n]of r.associations)(e instanceof kn||e instanceof it)&&t.set(e,n);return e.traverse(e=>{let n=r.associations.get(e);n!=null&&t.set(e,n)}),t})(i),i})}_createAnimationTracks(e,t,n,r,i){let a=[],o=e.name?e.name:e.uuid,s=[];md[i.path]===md.weights?e.traverse(function(e){e.morphTargetInfluences&&s.push(e.name?e.name:e.uuid)}):s.push(o);let c;switch(md[i.path]){case md.weights:c=Ri;break;case md.rotation:c=Bi;break;case md.position:case md.scale:c=Hi;break;default:switch(n.itemSize){case 1:c=Ri;break;default:c=Hi;break}break}let l=r.interpolation===void 0?ie:hd[r.interpolation],u=this._getArrayFromAccessor(n);for(let e=0,n=s.length;e{let r=this._getIdleWorker();r===-1?this.queue.push({resolve:n,msg:e,transfer:t}):(this._initWorker(r),this.workerStatus|=1<e.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}};let jd=1000066e3;var Md=class{constructor(e,t,n,r){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(e.buffer,e.byteOffset+t,n),this._littleEndian=r,this._offset=0}_nextUint8(){let e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){let e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){let e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){let e=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){let e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint8Array(e){let t=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,e);return this._offset+=e,t}_skip(e){return this._offset+=e,this}_scan(e,t=0){let n=this._offset,r=0;for(;this._dataView.getUint8(this._offset)!==t&&re.arrayBuffer()).then(e=>WebAssembly.instantiate(e,zd)).then(this._init):WebAssembly.instantiate(Buffer.from(Vd,`base64`),zd).then(this._init),Id)}_init(e){Ld=e.instance,zd.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!Ld)throw Error(`ZSTDDecoder: Await .init() before decoding.`);let n=e.byteLength,r=Ld.exports.malloc(n);Rd.set(e,r),t||=Number(Ld.exports.ZSTD_findDecompressedSize(r,n));let i=Ld.exports.malloc(t),a=Ld.exports.ZSTD_decompress(i,t,r,n),o=Rd.slice(i,i+a);return Ld.exports.free(r),Ld.exports.free(i),o}};let Vd=`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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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`,Hd=new WeakMap,Ud=0,Wd;var Gd=class e extends Ji{constructor(e){super(e),this.transcoderPath=``,this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new Ad,this.workerSourceURL=``,this.workerConfig=null,typeof MSC_TRANSCODER<`u`&&console.warn(`THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.`)}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}async detectSupportAsync(e){return this.workerConfig={astcSupported:await e.hasFeatureAsync(`texture-compression-astc`),astcHDRSupported:!1,etc1Supported:await e.hasFeatureAsync(`texture-compression-etc1`),etc2Supported:await e.hasFeatureAsync(`texture-compression-etc2`),dxtSupported:await e.hasFeatureAsync(`texture-compression-bc`),bptcSupported:await e.hasFeatureAsync(`texture-compression-bptc`),pvrtcSupported:await e.hasFeatureAsync(`texture-compression-pvrtc`)},this}detectSupport(e){return e.isWebGPURenderer===!0?this.workerConfig={astcSupported:e.hasFeature(`texture-compression-astc`),astcHDRSupported:!1,etc1Supported:e.hasFeature(`texture-compression-etc1`),etc2Supported:e.hasFeature(`texture-compression-etc2`),dxtSupported:e.hasFeature(`texture-compression-bc`),bptcSupported:e.hasFeature(`texture-compression-bptc`),pvrtcSupported:e.hasFeature(`texture-compression-pvrtc`)}:this.workerConfig={astcSupported:e.extensions.has(`WEBGL_compressed_texture_astc`),astcHDRSupported:e.extensions.has(`WEBGL_compressed_texture_astc`)&&e.extensions.get(`WEBGL_compressed_texture_astc`).getSupportedProfiles().includes(`hdr`),etc1Supported:e.extensions.has(`WEBGL_compressed_texture_etc1`),etc2Supported:e.extensions.has(`WEBGL_compressed_texture_etc`),dxtSupported:e.extensions.has(`WEBGL_compressed_texture_s3tc`),bptcSupported:e.extensions.has(`EXT_texture_compression_bptc`),pvrtcSupported:e.extensions.has(`WEBGL_compressed_texture_pvrtc`)||e.extensions.has(`WEBKIT_WEBGL_compressed_texture_pvrtc`)},this}init(){if(!this.transcoderPending){let t=new Zi(this.manager);t.setPath(this.transcoderPath),t.setWithCredentials(this.withCredentials);let n=t.loadAsync(`basis_transcoder.js`),r=new Zi(this.manager);r.setPath(this.transcoderPath),r.setResponseType(`arraybuffer`),r.setWithCredentials(this.withCredentials);let i=r.loadAsync(`basis_transcoder.wasm`);this.transcoderPending=Promise.all([n,i]).then(([t,n])=>{let r=e.BasisWorker.toString(),i=[`/* constants */`,`let _EngineFormat = `+JSON.stringify(e.EngineFormat),`let _EngineType = `+JSON.stringify(e.EngineType),`let _TranscoderFormat = `+JSON.stringify(e.TranscoderFormat),`let _BasisFormat = `+JSON.stringify(e.BasisFormat),`/* basis_transcoder.js */`,t,`/* worker */`,r.substring(r.indexOf(`{`)+1,r.lastIndexOf(`}`))].join(` -`);this.workerSourceURL=URL.createObjectURL(new Blob([i])),this.transcoderBinary=n,this.workerPool.setWorkerCreator(()=>{let e=new Worker(this.workerSourceURL),t=this.transcoderBinary.slice(0);return e.postMessage({type:`init`,config:this.workerConfig,transcoderBinary:t},[t]),e})}),Ud>0&&console.warn(`THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances.`),Ud++}return this.transcoderPending}load(e,t,n,r){if(this.workerConfig===null)throw Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");let i=new Zi(this.manager);i.setPath(this.path),i.setCrossOrigin(this.crossOrigin),i.setWithCredentials(this.withCredentials),i.setResponseType(`arraybuffer`),i.load(e,e=>{this.parse(e,t,r)},n,r)}parse(e,t,n){if(this.workerConfig===null)throw Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Hd.has(e))return Hd.get(e).promise.then(t).catch(n);this._createTexture(e).then(e=>t?t(e):null).catch(n)}_createTextureFrom(e,t){let{type:n,error:r,data:{faces:i,width:a,height:o,format:s,type:u,dfdFlags:d}}=e;if(n===`error`)return Promise.reject(r);let f;if(t.faceCount===6)f=new Ci(i,s,u);else{let e=i[0].mipmaps;f=t.layerCount>1?new Si(e,a,o,t.layerCount,s,u):new xi(e,a,o,s,u)}return f.minFilter=i[0].mipmaps.length===1?c:l,f.magFilter=c,f.generateMipmaps=!1,f.needsUpdate=!0,f.colorSpace=Xd(t),f.premultiplyAlpha=!!(d&1),f}async _createTexture(e,t={}){let n=Fd(new Uint8Array(e)),r=n.vkFormat===1000066e3&&n.dataFormatDescriptor[0].colorModel===167;if(!(n.vkFormat===0||r&&!this.workerConfig.astcHDRSupported))return Yd(n);let i=t,a=this.init().then(()=>this.workerPool.postMessage({type:`transcode`,buffer:e,taskConfig:i},[e])).then(e=>this._createTextureFrom(e.data,n));return Hd.set(e,{promise:a}),a}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),Ud--}};Gd.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2},Gd.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16,BC6H:22,RGB_HALF:24,RGBA_HALF:25},Gd.EngineFormat={RGBAFormat:m,RGBA_ASTC_4x4_Format:ee,RGB_BPTC_UNSIGNED_Format:36495,RGBA_BPTC_Format:ne,RGBA_ETC2_EAC_Format:S,RGBA_PVRTC_4BPPV1_Format:35842,RGBA_S3TC_DXT5_Format:b,RGB_ETC1_Format:36196,RGB_ETC2_Format:x,RGB_PVRTC_4BPPV1_Format:35840,RGBA_S3TC_DXT1_Format:v},Gd.EngineType={UnsignedByteType:u,HalfFloatType:f,FloatType:d},Gd.BasisWorker=function(){let e,t,n,r=_EngineFormat,i=_EngineType,a=_TranscoderFormat,o=_BasisFormat;self.addEventListener(`message`,function(n){let r=n.data;switch(r.type){case`init`:e=r.config,s(r.transcoderBinary);break;case`transcode`:t.then(()=>{try{let{faces:e,buffers:t,width:n,height:i,hasAlpha:a,format:o,type:s,dfdFlags:l}=c(r.buffer);self.postMessage({type:`transcode`,id:r.id,data:{faces:e,width:n,height:i,hasAlpha:a,format:o,type:s,dfdFlags:l}},t)}catch(e){console.error(e),self.postMessage({type:`error`,id:r.id,error:e.message})}});break}});function s(e){t=new Promise(t=>{n={wasmBinary:e,onRuntimeInitialized:t},BASIS(n)}).then(()=>{n.initializeBasis(),n.KTX2File===void 0&&console.warn(`THREE.KTX2Loader: Please update Basis Universal transcoder.`)})}function c(e){let t=new n.KTX2File(new Uint8Array(e));function r(){t.close(),t.delete()}if(!t.isValid())throw r(),Error(`THREE.KTX2Loader: Invalid or unsupported .ktx2 file`);let a;if(t.isUASTC())a=o.UASTC;else if(t.isETC1S())a=o.ETC1S;else if(t.isHDR())a=o.UASTC_HDR;else throw Error(`THREE.KTX2Loader: Unknown Basis encoding`);let s=t.getWidth(),c=t.getHeight(),l=t.getLayers()||1,u=t.getLevels(),f=t.getFaces(),m=t.getHasAlpha(),h=t.getDFDFlags(),{transcoderFormat:g,engineFormat:_,engineType:v}=d(a,s,c,m);if(!s||!c||!u)throw r(),Error(`THREE.KTX2Loader: Invalid texture`);if(!t.startTranscoding())throw r(),Error(`THREE.KTX2Loader: .startTranscoding failed`);let y=[],b=[];for(let e=0;e1?(s=l.origWidth,c=l.origHeight):(s=l.width,c=l.height);let d=new Uint8Array(t.getImageTranscodedSizeInBytes(a,n,0,g)),f=t.transcodeImage(d,a,n,e,g,0,-1,-1);if(v===i.HalfFloatType&&(d=new Uint16Array(d.buffer,d.byteOffset,d.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!f)throw r(),Error(`THREE.KTX2Loader: .transcodeImage failed.`);o.push(d)}let d=p(o);n.push({data:d,width:s,height:c}),b.push(d.buffer)}y.push({mipmaps:n,width:s,height:c,format:_,type:v})}return r(),{faces:y,buffers:b,width:s,height:c,hasAlpha:m,dfdFlags:h,format:_,type:v}}let l=[{if:`astcSupported`,basisFormat:[o.UASTC],transcoderFormat:[a.ASTC_4x4,a.ASTC_4x4],engineFormat:[r.RGBA_ASTC_4x4_Format,r.RGBA_ASTC_4x4_Format],engineType:[i.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:`bptcSupported`,basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.BC7_M5,a.BC7_M5],engineFormat:[r.RGBA_BPTC_Format,r.RGBA_BPTC_Format],engineType:[i.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:`dxtSupported`,basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.BC1,a.BC3],engineFormat:[r.RGBA_S3TC_DXT1_Format,r.RGBA_S3TC_DXT5_Format],engineType:[i.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:`etc2Supported`,basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.ETC1,a.ETC2],engineFormat:[r.RGB_ETC2_Format,r.RGBA_ETC2_EAC_Format],engineType:[i.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:`etc1Supported`,basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.ETC1],engineFormat:[r.RGB_ETC1_Format],engineType:[i.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:`pvrtcSupported`,basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.PVRTC1_4_RGB,a.PVRTC1_4_RGBA],engineFormat:[r.RGB_PVRTC_4BPPV1_Format,r.RGBA_PVRTC_4BPPV1_Format],engineType:[i.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:`bptcSupported`,basisFormat:[o.UASTC_HDR],transcoderFormat:[a.BC6H],engineFormat:[r.RGB_BPTC_UNSIGNED_Format],engineType:[i.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.RGBA32,a.RGBA32],engineFormat:[r.RGBAFormat,r.RGBAFormat],engineType:[i.UnsignedByteType,i.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[o.UASTC_HDR],transcoderFormat:[a.RGBA_HALF],engineFormat:[r.RGBAFormat],engineType:[i.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],u={[o.ETC1S]:l.filter(e=>e.basisFormat.includes(o.ETC1S)).sort((e,t)=>e.priorityUASTC-t.priorityUASTC),[o.UASTC]:l.filter(e=>e.basisFormat.includes(o.UASTC)).sort((e,t)=>e.priorityUASTC-t.priorityUASTC),[o.UASTC_HDR]:l.filter(e=>e.basisFormat.includes(o.UASTC_HDR)).sort((e,t)=>e.priorityHDR-t.priorityHDR)};function d(t,n,r,i){let a=u[t];for(let o=0;o{let t=new Bd;await t.init(),e(t)}),n=await Wd);let r=[];for(let i=0;i>i),o=Math.max(1,e.pixelHeight>>i),s=e.pixelDepth?Math.max(1,e.pixelDepth>>i):0,c=e.levels[i],l;if(e.supercompressionScheme===0)l=c.levelData;else if(e.supercompressionScheme===2)l=n.decode(c.levelData,c.uncompressedByteLength);else throw Error(`THREE.KTX2Loader: Unsupported supercompressionScheme.`);let u;u=Jd[t]===1015?new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):Jd[t]===1016?new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):Jd[t]===35902||Jd[t]===35899?new Uint32Array(l.buffer,l.byteOffset,l.byteLength/Uint32Array.BYTES_PER_ELEMENT):l,r.push({data:u,width:a,height:o,depth:s})}let i=e.levelCount===0||r.length>1,a;if(Kd.has(qd[t]))a=e.pixelDepth===0?new Br(r[0].data,e.pixelWidth,e.pixelHeight):new ot(r[0].data,e.pixelWidth,e.pixelHeight,e.pixelDepth),a.minFilter=i?s:o,a.magFilter=o,a.generateMipmaps=e.levelCount===0;else{if(e.pixelDepth>0)throw Error(`THREE.KTX2Loader: Unsupported pixelDepth.`);a=new xi(r,e.pixelWidth,e.pixelHeight),a.minFilter=i?l:c,a.magFilter=c}return a.mipmaps=r,a.type=Jd[t],a.format=qd[t],a.colorSpace=Xd(e),a.needsUpdate=!0,Promise.resolve(a)}function Xd(e){let t=e.dataFormatDescriptor[0];return t.colorPrimaries===1?t.transferFunction===2?C:w:t.colorPrimaries===10?t.transferFunction===2?`display-p3`:`display-p3-linear`:(t.colorPrimaries===0||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${t.colorPrimaries}"`),``)}self.onmessage=e=>{let t=e.data;switch(t.type){case`init`:break;case`load`:tf(t);break;default:console.error(`[Worker] Unknown message type:`,t.type);break}},self.onerror=e=>{console.error(`[Worker] Error:`,e)};function Zd(e){self.postMessage(e)}let Qd=null,$d=null,ef=null;async function tf(t){Qd??=new Nu,Qd.setMeshoptDecoder(e),$d??=new Au,$d.setDecoderConfig({type:`js`}),$d.setDecoderPath(t.dracoDecoderPath),Qd.setDRACOLoader($d),ef??=new Gd,ef.workerConfig=t.ktx2LoaderConfig,ef.setTranscoderPath(t.ktx2TranscoderPath),Qd.setKTX2Loader(ef),Qd.load(t.url,e=>{let n={type:`loaded-gltf`,result:{url:t.url,geometries:[],textures:[]}};nf(e,n),Zd(n)})}function nf(e,t){let{result:n}=t;for(let t of e.parser.associations.keys()){let r=e.parser.associations.get(t);if(r)if(`isTexture`in t&&t.isTexture){let i=t,a=e.parser.json.textures[r.textures??-1];n.textures.push({texture:i,textureIndex:r.textures??-1,extensions:a?.extensions??{}})}else if(`isMesh`in t&&t.isMesh){let i=t,a=r.meshes??-1,o=r.primitives??-1,s=e.parser.json.meshes[a];n.geometries.push({geometry:i.geometry,meshIndex:a,primitiveIndex:o,extensions:s?.extensions??{}})}else `isMaterial`in t&&t.isMaterial}}})(); \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/gltf-progressive.worker-DbINgLUC.js.gz b/Needle/MenuScene/dist/assets/gltf-progressive.worker-DbINgLUC.js.gz deleted file mode 100644 index 1a235d3..0000000 Binary files a/Needle/MenuScene/dist/assets/gltf-progressive.worker-DbINgLUC.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_0_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb b/Needle/MenuScene/dist/assets/image_0_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb deleted file mode 100644 index 23e758e..0000000 Binary files a/Needle/MenuScene/dist/assets/image_0_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_0_7e20cd65-055c-55da-abc5-33ed0d041c6e.glb b/Needle/MenuScene/dist/assets/image_0_7e20cd65-055c-55da-abc5-33ed0d041c6e.glb deleted file mode 100644 index 6c8c519..0000000 Binary files a/Needle/MenuScene/dist/assets/image_0_7e20cd65-055c-55da-abc5-33ed0d041c6e.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_0_dd91963e-6e03-5980-9515-0c01036a3d8f.glb b/Needle/MenuScene/dist/assets/image_0_dd91963e-6e03-5980-9515-0c01036a3d8f.glb deleted file mode 100644 index 2b4080e..0000000 Binary files a/Needle/MenuScene/dist/assets/image_0_dd91963e-6e03-5980-9515-0c01036a3d8f.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_1_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb b/Needle/MenuScene/dist/assets/image_1_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb deleted file mode 100644 index 5c38456..0000000 Binary files a/Needle/MenuScene/dist/assets/image_1_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_1_7e20cd65-055c-55da-abc5-33ed0d041c6e.glb b/Needle/MenuScene/dist/assets/image_1_7e20cd65-055c-55da-abc5-33ed0d041c6e.glb deleted file mode 100644 index 2bc6d24..0000000 Binary files a/Needle/MenuScene/dist/assets/image_1_7e20cd65-055c-55da-abc5-33ed0d041c6e.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_1_dd91963e-6e03-5980-9515-0c01036a3d8f.glb b/Needle/MenuScene/dist/assets/image_1_dd91963e-6e03-5980-9515-0c01036a3d8f.glb deleted file mode 100644 index 3ef7b65..0000000 Binary files a/Needle/MenuScene/dist/assets/image_1_dd91963e-6e03-5980-9515-0c01036a3d8f.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_2_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb b/Needle/MenuScene/dist/assets/image_2_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb deleted file mode 100644 index 38d9911..0000000 Binary files a/Needle/MenuScene/dist/assets/image_2_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_2_7e20cd65-055c-55da-abc5-33ed0d041c6e.glb b/Needle/MenuScene/dist/assets/image_2_7e20cd65-055c-55da-abc5-33ed0d041c6e.glb deleted file mode 100644 index b51b471..0000000 Binary files a/Needle/MenuScene/dist/assets/image_2_7e20cd65-055c-55da-abc5-33ed0d041c6e.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_2_dd91963e-6e03-5980-9515-0c01036a3d8f.glb b/Needle/MenuScene/dist/assets/image_2_dd91963e-6e03-5980-9515-0c01036a3d8f.glb deleted file mode 100644 index f98735c..0000000 Binary files a/Needle/MenuScene/dist/assets/image_2_dd91963e-6e03-5980-9515-0c01036a3d8f.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_3_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb b/Needle/MenuScene/dist/assets/image_3_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb deleted file mode 100644 index 9062b31..0000000 Binary files a/Needle/MenuScene/dist/assets/image_3_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/image_4_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb b/Needle/MenuScene/dist/assets/image_4_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb deleted file mode 100644 index de5fcfc..0000000 Binary files a/Needle/MenuScene/dist/assets/image_4_57d6f3ff-437a-5d8c-b498-70006fea7ac6.glb and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/index-dZODtGdh.js b/Needle/MenuScene/dist/assets/index-dZODtGdh.js deleted file mode 100644 index 8d6d68c..0000000 --- a/Needle/MenuScene/dist/assets/index-dZODtGdh.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./register_types.C6IEiUJa.js","./needle-engine-webxr.DiiWSXeh.js","./materialx.CnHmG--Y.js","./rolldown-runtime.CYVBeYYp.js","./three@0.169.19.js","./needle-engine-ui.D3ZoIJG5.js","./gltf-progressive.BBJGcb3s.js","./three-examples@0.169.19.js","./three-mesh-ui.CgGzZ3ml.js","./needle-engine@5.0.3.js","./needle-engine.extras.B9pwA3ET.js","./needle-engine-particles.Ce6eiXqY.js","./three-quarks.DALdLWPD.js","./needle-engine.extras.dI9yZHT7.js","./postprocessing.Wy71DpiM.js","./three-mesh-bvh.B-oXEGo2.js","./needle-engine.DZYzd-GQ.js"])))=>i.map(i=>d[i]); -import{d as e}from"./materialx.CnHmG--Y.js";import{_t as t,fn as n,wi as r}from"./needle-engine-ui.D3ZoIJG5.js";import{A as i}from"./three-examples@0.169.19.js";import"./needle-engine@5.0.3.js";import{x as a}from"./needle-engine-webxr.DiiWSXeh.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})(),globalThis[`needle:dependencies:ready`]=e(()=>import(`./register_types.C6IEiUJa.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url);var o=[];globalThis[`needle:codegen_files`]=o,o.push(`./assets/MenuScene.glb`),document.addEventListener(`DOMContentLoaded`,()=>{let e=document.querySelector(`needle-engine`);e&&e.getAttribute(`src`)===null&&(e.setAttribute(`hash`,`1776632959714`),e.setAttribute(`src`,JSON.stringify(o)))}),console.log(`Made with ♥ by 🌵 Needle - https://needle.tools — Version 5.0.3`);var s={"cc0_-_pizza_salami":`include/dishes/cc0_-_pizza_salami.glb`};function c(e){let t=0;return e.traverse(e=>{e.isMesh&&(t+=1)}),t}function l(e){let t=`./`.endsWith(`/`)?`./`:`.//`;return new URL(e,new URL(t,window.location.href)).href}async function u(e){let t=new i;for(let n of e.dishes){if(!n)continue;let e=s[n.name];if(!e||c(n)>0)continue;let r=l(e),i=await t.loadAsync(r);i.scene.name=`${n.name}_mesh`,n.add(i.scene)}}function d(){let e=document.querySelector(`needle-engine`);if(!e)return;let n=async()=>{try{let n=await e.getContext(),r=t(MenuController,n);r&&await u(r)}catch(e){console.warn(`[dishMeshFallback] Could not inject dish meshes:`,e)}};e.addEventListener(`loadfinished`,()=>void n())}d(),r(e=>{let t=e.scene.getComponentInChildren(a);t||(t=e.scene.addComponent(a),t.createARButton=!0,t.createVRButton=!0),t.autoPlace=!0,t.autoCenter=!0,t.arScale=1});function f(e){document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,()=>e(),{once:!0}):e()}function p(){let e=document.querySelector(`needle-engine`),r=document.querySelector(`#asset-picker-prev`),i=document.querySelector(`#asset-picker-next`),a=document.querySelector(`#asset-picker-ar`),o=document.querySelector(`#asset-picker-label`),s=document.querySelector(`#asset-picker-index`);if(!e||!r||!i||!a||!o||!s)return;let c=null,l=!1,u=!1,d=!1,p=()=>{c&&c.getDishSlotCount()>0?(o.textContent=c.getPickerLabel(),s.textContent=``):c?(o.textContent=`Menu (assign dishes in Unity)`,s.textContent=``):(o.textContent=`Menu scene`,s.textContent=`—`);let e=c!==null&&c.getDishSlotCount()>1;r.disabled=!e,i.disabled=!e,a.disabled=!u||d||l},m=async()=>{try{let n=await e.getContext();c=t(MenuController,n)}catch{c=null}p()};n.isARSupported().then(e=>{u=e,p()});let h=e=>{!c||c.getDishSlotCount()<=1||(e<0?c.selectPreviousDish():c.selectNextDish(),p())},g=async()=>{if(!(!u||d||l)){d=!0,p();try{let t=await e.getContext();await n.start(`immersive-ar`,void 0,t)}catch(e){console.warn(`[assetPicker] Failed to start AR session:`,e)}finally{d=!1,p()}}};r.addEventListener(`click`,()=>h(-1)),i.addEventListener(`click`,()=>h(1)),a.addEventListener(`click`,()=>void g()),e.addEventListener(`enter-ar`,()=>{l=!0,p()}),e.addEventListener(`exit-ar`,()=>{l=!1,p()}),e.addEventListener(`enter-vr`,()=>{l=!0,p()}),e.addEventListener(`exit-vr`,()=>{l=!1,p()}),e.addEventListener(`loadfinished`,()=>void m()),f(()=>{requestAnimationFrame(()=>void m())})}p(),e(()=>import(`./needle-engine.DZYzd-GQ.js`),__vite__mapDeps([16,10,2,3,4,1,5,6,7,8,11,12,13,14,9,15]),import.meta.url); \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/index-dZODtGdh.js.gz b/Needle/MenuScene/dist/assets/index-dZODtGdh.js.gz deleted file mode 100644 index 7df2900..0000000 Binary files a/Needle/MenuScene/dist/assets/index-dZODtGdh.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/index.2XwOwFJz.css b/Needle/MenuScene/dist/assets/index.2XwOwFJz.css deleted file mode 100644 index a203eff..0000000 --- a/Needle/MenuScene/dist/assets/index.2XwOwFJz.css +++ /dev/null @@ -1 +0,0 @@ -html{height:-webkit-fill-available}body{margin:0;padding:0}needle-engine{width:100%;height:100%;position:absolute;top:0;left:0}#asset-picker{left:0;right:0;bottom:calc(4.75rem + env(safe-area-inset-bottom,0px));z-index:600;pointer-events:auto;box-sizing:border-box;justify-content:center;padding:12px;display:flex;position:fixed}#asset-picker .asset-picker__inner{color:#f2f2f7;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0f0f14d1;border-radius:12px;flex-wrap:wrap;align-items:center;gap:12px;max-width:min(100%,36rem);padding:10px 14px;font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:.95rem;display:flex;box-shadow:0 4px 24px #00000059}#asset-picker button{pointer-events:auto;touch-action:manipulation;cursor:pointer;font:inherit;color:#0f0f14;background:#e8e8ed;border:none;border-radius:8px;padding:8px 14px;font-weight:600}#asset-picker button:disabled{opacity:.45;cursor:not-allowed}#asset-picker #asset-picker-ar{color:#0a0a0c;background:#34c759}#asset-picker #asset-picker-ar:disabled{color:#ffffff80;background:#3a3a3e}#asset-picker .asset-picker__label{text-overflow:ellipsis;white-space:nowrap;text-align:center;flex:1;min-width:0;overflow:hidden}#asset-picker .asset-picker__index{opacity:.85;font-variant-numeric:tabular-nums;flex-shrink:0;font-size:.85rem} diff --git a/Needle/MenuScene/dist/assets/index.2XwOwFJz.css.gz b/Needle/MenuScene/dist/assets/index.2XwOwFJz.css.gz deleted file mode 100644 index b68f95d..0000000 Binary files a/Needle/MenuScene/dist/assets/index.2XwOwFJz.css.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/materialx.CnHmG--Y.js b/Needle/MenuScene/dist/assets/materialx.CnHmG--Y.js deleted file mode 100644 index 5ec3d79..0000000 --- a/Needle/MenuScene/dist/assets/materialx.CnHmG--Y.js +++ /dev/null @@ -1,150 +0,0 @@ -import{t as e}from"./rolldown-runtime.CYVBeYYp.js";import{A as t,Ar as n,Bt as r,C as i,Fr as a,It as o,Jn as s,Lt as c,O as l,On as u,Qn as d,Qt as f,Sr as p,Xt as m,Yt as h,Zt as g,an as _,gr as v,hn as y,in as b,lt as x,mn as ee,n as S,on as C,ot as w,sn as T,t as te,tr as E,vn as D,wn as ne,xr as re}from"./three@0.169.19.js";var ie=`modulepreload`,ae=function(e,t){return new URL(e,t).href},oe={},se=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=ae(t,n),t in oe)return;oe[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:ie,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},ce=``+new URL(`JsMaterialXCore.B97gKRq_.wasm`,import.meta.url).href,le=``+new URL(`JsMaterialXGenShader.data.DOxudtll.txt`,import.meta.url).href,ue=``+new URL(`JsMaterialXGenShader.P2pWAaz9.wasm`,import.meta.url).href,de=e(((e,t)=>{t.exports={}})),fe=(function(){var e=typeof document<`u`?document.currentScript?.src:void 0;return typeof __filename<`u`&&(e||=__filename),(function(t){t||={};var n,r=t,i,a,o=new Promise((e,t)=>{i=e,a=t}),s=typeof window==`object`,c=typeof WorkerGlobalScope<`u`,l=typeof process==`object`&&typeof process.versions==`object`&&typeof process.versions.node==`string`&&process.type!=`renderer`;r.expectedDataFileDownloads??=0,r.expectedDataFileDownloads++,(()=>{if(typeof ENVIRONMENT_IS_PTHREAD<`u`&&ENVIRONMENT_IS_PTHREAD||typeof ENVIRONMENT_IS_WASM_WORKER<`u`&&ENVIRONMENT_IS_WASM_WORKER)return;var e=typeof process==`object`&&typeof process.versions==`object`&&typeof process.versions.node==`string`;function t(t){typeof window==`object`?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf(`/`))+`/`):typeof process>`u`&&typeof location<`u`&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf(`/`))+`/`);var n=`../../bin/JsMaterialXGenShader.data`,i=`JsMaterialXGenShader.data`,a=r.locateFile?r.locateFile(i,``):i,o=t.remote_package_size;function s(t,n,i,a){if(e){de().readFile(t,(e,t)=>{e?a(e):i(t.buffer)});return}r.dataFileDownloads??={},fetch(t).catch(e=>Promise.reject(Error(`Network Error: ${t}`,{cause:e}))).then(e=>{if(!e.ok)return Promise.reject(Error(`${e.status}: ${e.url}`));if(!e.body&&e.arrayBuffer)return e.arrayBuffer().then(i);let a=e.body.getReader(),o=()=>a.read().then(d).catch(t=>Promise.reject(Error(`Unexpected error while handling : ${e.url} ${t}`,{cause:t}))),s=[],c=e.headers,l=Number(c.get(`Content-Length`)??n),u=0,d=({done:e,value:n})=>{if(e){let e=new Uint8Array(s.map(e=>e.length).reduce((e,t)=>e+t,0)),t=0;for(let n of s)e.set(n,t),t+=n.length;i(e.buffer)}else{s.push(n),u+=n.length,r.dataFileDownloads[t]={loaded:u,total:l};let e=0,i=0;for(let t of Object.values(r.dataFileDownloads))e+=t.loaded,i+=t.total;return r.setStatus?.(`Downloading data... (${e}/${i})`),o()}};return r.setStatus?.(`Downloading data...`),o()})}function c(e){console.error(`package error:`,e)}var l=null,u=r.getPreloadedPackage?r.getPreloadedPackage(a,o):null;u||s(a,o,e=>{l?(l(e),l=null):u=e},c);function d(e){function r(e,t){if(!e)throw t+Error().stack}e.FS_createPath(`/`,`libraries`,!0,!0),e.FS_createPath(`/libraries`,`bxdf`,!0,!0),e.FS_createPath(`/libraries/bxdf`,`genglsl`,!0,!0),e.FS_createPath(`/libraries/bxdf`,`genmdl`,!0,!0),e.FS_createPath(`/libraries/bxdf`,`lama`,!0,!0),e.FS_createPath(`/libraries/bxdf`,`translation`,!0,!0),e.FS_createPath(`/libraries`,`cmlib`,!0,!0),e.FS_createPath(`/libraries`,`lights`,!0,!0),e.FS_createPath(`/libraries/lights`,`genglsl`,!0,!0),e.FS_createPath(`/libraries/lights`,`genmsl`,!0,!0),e.FS_createPath(`/libraries`,`nprlib`,!0,!0),e.FS_createPath(`/libraries/nprlib`,`genglsl`,!0,!0),e.FS_createPath(`/libraries/nprlib`,`genmdl`,!0,!0),e.FS_createPath(`/libraries/nprlib`,`genmsl`,!0,!0),e.FS_createPath(`/libraries/nprlib`,`genosl`,!0,!0),e.FS_createPath(`/libraries`,`pbrlib`,!0,!0),e.FS_createPath(`/libraries/pbrlib`,`genglsl`,!0,!0),e.FS_createPath(`/libraries/pbrlib/genglsl`,`lib`,!0,!0),e.FS_createPath(`/libraries/pbrlib`,`genmdl`,!0,!0),e.FS_createPath(`/libraries/pbrlib`,`genmsl`,!0,!0),e.FS_createPath(`/libraries/pbrlib`,`genosl`,!0,!0),e.FS_createPath(`/libraries/pbrlib/genosl`,`lib`,!0,!0),e.FS_createPath(`/libraries`,`stdlib`,!0,!0),e.FS_createPath(`/libraries/stdlib`,`genglsl`,!0,!0),e.FS_createPath(`/libraries/stdlib/genglsl`,`lib`,!0,!0),e.FS_createPath(`/libraries/stdlib`,`genmdl`,!0,!0),e.FS_createPath(`/libraries/stdlib`,`genmsl`,!0,!0),e.FS_createPath(`/libraries/stdlib/genmsl`,`lib`,!0,!0),e.FS_createPath(`/libraries/stdlib`,`genosl`,!0,!0),e.FS_createPath(`/libraries/stdlib/genosl`,`include`,!0,!0),e.FS_createPath(`/libraries/stdlib/genosl`,`lib`,!0,!0),e.FS_createPath(`/libraries`,`targets`,!0,!0);function i(e,t,n){this.start=e,this.end=t,this.audio=n}i.prototype={requests:{},open:function(t,n){this.name=n,this.requests[n]=this,e.addRunDependency(`fp ${this.name}`)},send:function(){},onload:function(){var e=this.byteArray.subarray(this.start,this.end);this.finish(e)},finish:function(t){var n=this;e.FS_createDataFile(this.name,null,t,!0,!0,!0),e.removeRunDependency(`fp ${n.name}`),this.requests[this.name]=null}};for(var a=t.files,o=0;o{throw t},p=``;function m(e){return r.locateFile?r.locateFile(e,p):p+e}var h,g;if(l){var _=de();de(),p=__dirname+`/`,g=e=>(e=xe(e)?new URL(e):e,_.readFileSync(e)),h=async(e,t=!0)=>(e=xe(e)?new URL(e):e,_.readFileSync(e,t?void 0:`utf8`)),!r.thisProgram&&process.argv.length>1&&(d=process.argv[1].replace(/\\/g,`/`)),process.argv.slice(2),f=(e,t)=>{throw process.exitCode=e,t}}else (s||c)&&(c?p=self.location.href:typeof document<`u`&&document.currentScript&&(p=document.currentScript.src),e&&(p=e),p=p.startsWith(`blob:`)?``:p.substr(0,p.replace(/[?#].*/,``).lastIndexOf(`/`)+1),c&&(g=e=>{var t=new XMLHttpRequest;return t.open(`GET`,e,!1),t.responseType=`arraybuffer`,t.send(null),new Uint8Array(t.response)}),h=async e=>{if(xe(e))return new Promise((t,n)=>{var r=new XMLHttpRequest;r.open(`GET`,e,!0),r.responseType=`arraybuffer`,r.onload=()=>{if(r.status==200||r.status==0&&r.response){t(r.response);return}n(r.status)},r.onerror=n,r.send(null)});var t=await fetch(e,{credentials:`same-origin`});if(t.ok)return t.arrayBuffer();throw Error(t.status+` : `+t.url)});var v=r.print||console.log.bind(console),y=r.printErr||console.error.bind(console);Object.assign(r,u),u=null,r.arguments&&r.arguments,r.thisProgram&&(d=r.thisProgram);var b=r.wasmBinary,x,ee=!1,S,C,w,T,te,E,D,ne,re;function ie(){var e=x.buffer;r.HEAP8=C=new Int8Array(e),r.HEAP16=T=new Int16Array(e),r.HEAPU8=w=new Uint8Array(e),r.HEAPU16=te=new Uint16Array(e),r.HEAP32=E=new Int32Array(e),r.HEAPU32=D=new Uint32Array(e),r.HEAPF32=ne=new Float32Array(e),r.HEAPF64=re=new Float64Array(e)}var ae=[],oe=[],se=[];function ce(){if(r.preRun)for(typeof r.preRun==`function`&&(r.preRun=[r.preRun]);r.preRun.length;)fe(r.preRun.shift());Me(ae)}function le(){!r.noFSInit&&!z.initialized&&z.init(),z.ignorePermissions=!1,ot.init(),Me(oe)}function ue(){if(r.postRun)for(typeof r.postRun==`function`&&(r.postRun=[r.postRun]);r.postRun.length;)O(r.postRun.shift());Me(se)}function fe(e){ae.unshift(e)}function pe(e){oe.unshift(e)}function O(e){se.unshift(e)}var k=0,me=null;function he(e){return e}function ge(e){k++,r.monitorRunDependencies?.(k)}function _e(e){if(k--,r.monitorRunDependencies?.(k),k==0&&me){var t=me;me=null,t()}}function ve(e){r.onAbort?.(e),e=`Aborted(`+e+`)`,y(e),ee=!0,e+=`. Build with -sASSERTIONS for more info.`;var t=new WebAssembly.RuntimeError(e);throw a(t),t}var ye=`data:application/octet-stream;base64,`,be=e=>e.startsWith(ye),xe=e=>e.startsWith(`file://`);function Se(){var e=`JsMaterialXGenShader.wasm`;return be(e)?e:m(e)}var Ce;function we(e){if(e==Ce&&b)return new Uint8Array(b);if(g)return g(e);throw`both async and sync fetching of the wasm failed`}async function Te(e){if(!b)try{var t=await h(e);return new Uint8Array(t)}catch{}return we(e)}async function Ee(e,t){try{var n=await Te(e);return await WebAssembly.instantiate(n,t)}catch(e){y(`failed to asynchronously prepare wasm: ${e}`),ve(e)}}async function De(e,t,n){if(!e&&typeof WebAssembly.instantiateStreaming==`function`&&!be(t)&&!xe(t)&&!l&&typeof fetch==`function`)try{var r=fetch(t,{credentials:`same-origin`});return await WebAssembly.instantiateStreaming(r,n)}catch(e){y(`wasm streaming compile failed: ${e}`),y(`falling back to ArrayBuffer instantiation`)}return Ee(t,n)}function Oe(){return{a:yi}}async function ke(){function e(e,t){return Z=e.exports,x=Z._a,ie(),yn=Z.cb,pe(Z.$a),_e(`wasm-instantiate`),Z}ge(`wasm-instantiate`);function t(t){e(t.instance)}var n=Oe();if(r.instantiateWasm)try{return r.instantiateWasm(n,e)}catch(e){y(`Module.instantiateWasm callback failed with error: ${e}`),a(e)}Ce??=Se();try{var i=await De(b,Ce,n);return t(i),i}catch(e){a(e);return}}var A,j,Ae={189968:()=>{r.TreeIterator.prototype[Symbol.iterator]=function(){return this}},190052:()=>{r.GraphIterator.prototype[Symbol.iterator]=function(){return this}},190137:()=>{r.InheritanceIterator.prototype[Symbol.iterator]=function(){return this}}};class je{name=`ExitStatus`;constructor(e){this.message=`Program terminated with exit(${e})`,this.status=e}}var Me=e=>{for(;e.length>0;)e.shift()(r)},Ne=r.noExitRuntime||!0,M=e=>Ti(e),N=()=>Ei(),Pe=typeof TextDecoder<`u`?new TextDecoder:void 0,Fe=(e,t=0,n=NaN)=>{for(var r=t+n,i=t;e[i]&&!(i>=r);)++i;if(i-t>16&&e.buffer&&Pe)return Pe.decode(e.subarray(t,i));for(var a=``;t>10,56320|l&1023)}}return a},Ie=(e,t)=>e?Fe(w,e,t):``,P=(e,t,n,r)=>ve(`Assertion failed: ${Ie(e)}, at: `+[t?Ie(t):`unknown filename`,n,r?Ie(r):`unknown function`]),Le=[],Re=0,ze=e=>{var t=new Ve(e);return t.get_caught()||(t.set_caught(!0),Re--),t.set_rethrown(!1),Le.push(t),Oi(e),Ai(e)},F=0,Be=()=>{$(0,0);var e=Le.pop();Di(e.excPtr),F=0};class Ve{constructor(e){this.excPtr=e,this.ptr=e-24}set_type(e){D[this.ptr+4>>2]=e}get_type(){return D[this.ptr+4>>2]}set_destructor(e){D[this.ptr+8>>2]=e}get_destructor(){return D[this.ptr+8>>2]}set_caught(e){e=+!!e,C[this.ptr+12]=e}get_caught(){return C[this.ptr+12]!=0}set_rethrown(e){e=+!!e,C[this.ptr+13]=e}get_rethrown(){return C[this.ptr+13]!=0}init(e,t){this.set_adjusted_ptr(0),this.set_type(e),this.set_destructor(t)}set_adjusted_ptr(e){D[this.ptr+16>>2]=e}get_adjusted_ptr(){return D[this.ptr+16>>2]}}var He=e=>{throw F||=e,F},Ue=e=>wi(e),We=e=>{var t=F;if(!t)return Ue(0),0;var n=new Ve(t);n.set_adjusted_ptr(t);var r=n.get_type();if(!r)return Ue(0),t;for(var i of e){if(i===0||i===r)break;var a=n.ptr+16;if(ki(i,r,a))return Ue(i),t}return Ue(r),t},Ge=()=>We([]),Ke=e=>We([e]),qe=(e,t)=>We([e,t]),Je=()=>{var e=Le.pop();e||ve(`no exception to throw`);var t=e.excPtr;throw e.get_rethrown()||(Le.push(e),e.set_rethrown(!0),e.set_caught(!1),Re++),F=t,F},I=(e,t,n)=>{throw new Ve(e).init(t,n),F=e,Re++,F},Ye=()=>Re,Xe=()=>{var e=E[B.varargs>>2];return B.varargs+=4,e},Ze=Xe,L={isAbs:e=>e.charAt(0)===`/`,splitPath:e=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1),normalizeArray:(e,t)=>{for(var n=0,r=e.length-1;r>=0;r--){var i=e[r];i===`.`?e.splice(r,1):i===`..`?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n;n--)e.unshift(`..`);return e},normalize:e=>{var t=L.isAbs(e),n=e.substr(-1)===`/`;return e=L.normalizeArray(e.split(`/`).filter(e=>!!e),!t).join(`/`),!e&&!t&&(e=`.`),e&&n&&(e+=`/`),(t?`/`:``)+e},dirname:e=>{var t=L.splitPath(e),n=t[0],r=t[1];return!n&&!r?`.`:(r&&=r.substr(0,r.length-1),n+r)},basename:e=>{if(e===`/`)return`/`;e=L.normalize(e),e=e.replace(/\/$/,``);var t=e.lastIndexOf(`/`);return t===-1?e:e.substr(t+1)},join:(...e)=>L.normalize(e.join(`/`)),join2:(e,t)=>L.normalize(e+`/`+t)},Qe=()=>{if(typeof crypto==`object`&&typeof crypto.getRandomValues==`function`)return e=>crypto.getRandomValues(e);if(l)try{var e=de();if(e.randomFillSync)return t=>e.randomFillSync(t);var t=e.randomBytes;return e=>(e.set(t(e.byteLength)),e)}catch{}ve(`initRandomDevice`)},$e=e=>($e=Qe())(e),et={resolve:(...e)=>{for(var t=``,n=!1,r=e.length-1;r>=-1&&!n;r--){var i=r>=0?e[r]:z.cwd();if(typeof i!=`string`)throw TypeError(`Arguments to path.resolve must be strings`);if(!i)return``;t=i+`/`+t,n=L.isAbs(i)}return t=L.normalizeArray(t.split(`/`).filter(e=>!!e),!n).join(`/`),(n?`/`:``)+t||`.`},relative:(e,t)=>{e=et.resolve(e).substr(1),t=et.resolve(t).substr(1);function n(e){for(var t=0;t=0&&e[n]===``;n--);return t>n?[]:e.slice(t,n-t+1)}for(var r=n(e.split(`/`)),i=n(t.split(`/`)),a=Math.min(r.length,i.length),o=a,s=0;s{for(var t=0,n=0;n=55296&&r<=57343?(t+=4,++n):t+=3}return t},rt=(e,t,n,r)=>{if(!(r>0))return 0;for(var i=n,a=n+r-1,o=0;o=55296&&s<=57343){var c=e.charCodeAt(++o);s=65536+((s&1023)<<10)|c&1023}if(s<=127){if(n>=a)break;t[n++]=s}else if(s<=2047){if(n+1>=a)break;t[n++]=192|s>>6,t[n++]=128|s&63}else if(s<=65535){if(n+2>=a)break;t[n++]=224|s>>12,t[n++]=128|s>>6&63,t[n++]=128|s&63}else{if(n+3>=a)break;t[n++]=240|s>>18,t[n++]=128|s>>12&63,t[n++]=128|s>>6&63,t[n++]=128|s&63}}return t[n]=0,n-i};function it(e,t,n){var r=n>0?n:nt(e)+1,i=Array(r),a=rt(e,i,0,i.length);return t&&(i.length=a),i}var at=()=>{if(!tt.length){var e=null;if(l){var t=256,n=Buffer.alloc(t),r=0,i=process.stdin.fd;try{r=_.readSync(i,n,0,t)}catch(e){if(e.toString().includes(`EOF`))r=0;else throw e}r>0&&(e=n.slice(0,r).toString(`utf-8`))}else typeof window<`u`&&typeof window.prompt==`function`&&(e=window.prompt(`Input: `),e!==null&&(e+=` -`));if(!e)return null;tt=it(e,!0)}return tt.shift()},ot={ttys:[],init(){},shutdown(){},register(e,t){ot.ttys[e]={input:[],output:[],ops:t},z.registerDevice(e,ot.stream_ops)},stream_ops:{open(e){var t=ot.ttys[e.node.rdev];if(!t)throw new z.ErrnoError(43);e.tty=t,e.seekable=!1},close(e){e.tty.ops.fsync(e.tty)},fsync(e){e.tty.ops.fsync(e.tty)},read(e,t,n,r,i){if(!e.tty||!e.tty.ops.get_char)throw new z.ErrnoError(60);for(var a=0,o=0;o0&&(v(Fe(e.output)),e.output=[])},ioctl_tcgets(e){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(e,t,n){return 0},ioctl_tiocgwinsz(e){return[24,80]}},default_tty1_ops:{put_char(e,t){t===null||t===10?(y(Fe(e.output)),e.output=[]):t!=0&&e.output.push(t)},fsync(e){e.output&&e.output.length>0&&(y(Fe(e.output)),e.output=[])}}},st=(e,t)=>Math.ceil(e/t)*t,ct=e=>{ve()},R={ops_table:null,mount(e){return R.createNode(null,`/`,16895,0)},createNode(e,t,n,r){if(z.isBlkdev(n)||z.isFIFO(n))throw new z.ErrnoError(63);R.ops_table||={dir:{node:{getattr:R.node_ops.getattr,setattr:R.node_ops.setattr,lookup:R.node_ops.lookup,mknod:R.node_ops.mknod,rename:R.node_ops.rename,unlink:R.node_ops.unlink,rmdir:R.node_ops.rmdir,readdir:R.node_ops.readdir,symlink:R.node_ops.symlink},stream:{llseek:R.stream_ops.llseek}},file:{node:{getattr:R.node_ops.getattr,setattr:R.node_ops.setattr},stream:{llseek:R.stream_ops.llseek,read:R.stream_ops.read,write:R.stream_ops.write,allocate:R.stream_ops.allocate,mmap:R.stream_ops.mmap,msync:R.stream_ops.msync}},link:{node:{getattr:R.node_ops.getattr,setattr:R.node_ops.setattr,readlink:R.node_ops.readlink},stream:{}},chrdev:{node:{getattr:R.node_ops.getattr,setattr:R.node_ops.setattr},stream:z.chrdev_stream_ops}};var i=z.createNode(e,t,n,r);return z.isDir(i.mode)?(i.node_ops=R.ops_table.dir.node,i.stream_ops=R.ops_table.dir.stream,i.contents={}):z.isFile(i.mode)?(i.node_ops=R.ops_table.file.node,i.stream_ops=R.ops_table.file.stream,i.usedBytes=0,i.contents=null):z.isLink(i.mode)?(i.node_ops=R.ops_table.link.node,i.stream_ops=R.ops_table.link.stream):z.isChrdev(i.mode)&&(i.node_ops=R.ops_table.chrdev.node,i.stream_ops=R.ops_table.chrdev.stream),i.atime=i.mtime=i.ctime=Date.now(),e&&(e.contents[t]=i,e.atime=e.mtime=e.ctime=i.atime),i},getFileDataAsTypedArray(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array},expandFileStorage(e,t){var n=e.contents?e.contents.length:0;if(!(n>=t)){t=Math.max(t,n*(n<1024*1024?2:1.125)>>>0),n!=0&&(t=Math.max(t,256));var r=e.contents;e.contents=new Uint8Array(t),e.usedBytes>0&&e.contents.set(r.subarray(0,e.usedBytes),0)}},resizeFileStorage(e,t){if(e.usedBytes!=t)if(t==0)e.contents=null,e.usedBytes=0;else{var n=e.contents;e.contents=new Uint8Array(t),n&&e.contents.set(n.subarray(0,Math.min(t,e.usedBytes))),e.usedBytes=t}},node_ops:{getattr(e){var t={};return t.dev=z.isChrdev(e.mode)?e.id:1,t.ino=e.id,t.mode=e.mode,t.nlink=1,t.uid=0,t.gid=0,t.rdev=e.rdev,z.isDir(e.mode)?t.size=4096:z.isFile(e.mode)?t.size=e.usedBytes:z.isLink(e.mode)?t.size=e.link.length:t.size=0,t.atime=new Date(e.atime),t.mtime=new Date(e.mtime),t.ctime=new Date(e.ctime),t.blksize=4096,t.blocks=Math.ceil(t.size/t.blksize),t},setattr(e,t){for(let n of[`mode`,`atime`,`mtime`,`ctime`])t[n]&&(e[n]=t[n]);t.size!==void 0&&R.resizeFileStorage(e,t.size)},lookup(e,t){throw R.doesNotExistError},mknod(e,t,n,r){return R.createNode(e,t,n,r)},rename(e,t,n){var r;try{r=z.lookupNode(t,n)}catch{}if(r){if(z.isDir(e.mode))for(var i in r.contents)throw new z.ErrnoError(55);z.hashRemoveNode(r)}delete e.parent.contents[e.name],t.contents[n]=e,e.name=n,t.ctime=t.mtime=e.parent.ctime=e.parent.mtime=Date.now()},unlink(e,t){delete e.contents[t],e.ctime=e.mtime=Date.now()},rmdir(e,t){for(var n in z.lookupNode(e,t).contents)throw new z.ErrnoError(55);delete e.contents[t],e.ctime=e.mtime=Date.now()},readdir(e){return[`.`,`..`,...Object.keys(e.contents)]},symlink(e,t,n){var r=R.createNode(e,t,41471,0);return r.link=n,r},readlink(e){if(!z.isLink(e.mode))throw new z.ErrnoError(28);return e.link}},stream_ops:{read(e,t,n,r,i){var a=e.node.contents;if(i>=e.node.usedBytes)return 0;var o=Math.min(e.node.usedBytes-i,r);if(o>8&&a.subarray)t.set(a.subarray(i,i+o),n);else for(var s=0;s0||n+t{var t=await h(e);return new Uint8Array(t)},ut=(e,t,n,r,i,a)=>{z.createDataFile(e,t,n,r,i,a)},dt=r.preloadPlugins||[],ft=(e,t,n,r)=>{typeof Browser<`u`&&Browser.init();var i=!1;return dt.forEach(a=>{i||a.canHandle(t)&&(a.handle(e,t,n,r),i=!0)}),i},pt=(e,t,n,r,i,a,o,s,c,l)=>{var u=t?et.resolve(L.join2(e,t)):e,d=he(`cp ${u}`);function f(n){function f(n){l?.(),s||ut(e,t,n,r,i,c),a?.(),_e(d)}ft(n,u,f,()=>{o?.(),_e(d)})||f(n)}ge(d),typeof n==`string`?lt(n).then(f,o):f(n)},mt=e=>{var t={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[e];if(t===void 0)throw Error(`Unknown file open mode: ${e}`);return t},ht=(e,t)=>{var n=0;return e&&(n|=365),t&&(n|=146),n},z={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:`/`,initialized:!1,ignorePermissions:!0,ErrnoError:class{name=`ErrnoError`;constructor(e){this.errno=e}},filesystems:null,syncFSRequests:0,readFiles:{},FSStream:class{shared={};get object(){return this.node}set object(e){this.node=e}get isRead(){return(this.flags&2097155)!=1}get isWrite(){return(this.flags&2097155)!=0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(e){this.shared.flags=e}get position(){return this.shared.position}set position(e){this.shared.position=e}},FSNode:class{node_ops={};stream_ops={};readMode=365;writeMode=146;mounted=null;constructor(e,t,n,r){e||=this,this.parent=e,this.mount=e.mount,this.id=z.nextInode++,this.name=t,this.mode=n,this.rdev=r,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(e){e?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(e){e?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return z.isDir(this.mode)}get isDevice(){return z.isChrdev(this.mode)}},lookupPath(e,t={}){if(!e)return{path:``,node:null};t.follow_mount??=!0,L.isAbs(e)||(e=z.cwd()+`/`+e);linkloop:for(var n=0;n<40;n++){for(var r=e.split(`/`).filter(e=>!!e&&e!==`.`),i=z.root,a=`/`,o=0;o>>0)%z.nameTable.length},hashAddNode(e){var t=z.hashName(e.parent.id,e.name);e.name_next=z.nameTable[t],z.nameTable[t]=e},hashRemoveNode(e){var t=z.hashName(e.parent.id,e.name);if(z.nameTable[t]===e)z.nameTable[t]=e.name_next;else for(var n=z.nameTable[t];n;){if(n.name_next===e){n.name_next=e.name_next;break}n=n.name_next}},lookupNode(e,t){var n=z.mayLookup(e);if(n)throw new z.ErrnoError(n);for(var r=z.hashName(e.id,t),i=z.nameTable[r];i;i=i.name_next){var a=i.name;if(i.parent.id===e.id&&a===t)return i}return z.lookup(e,t)},createNode(e,t,n,r){var i=new z.FSNode(e,t,n,r);return z.hashAddNode(i),i},destroyNode(e){z.hashRemoveNode(e)},isRoot(e){return e===e.parent},isMountpoint(e){return!!e.mounted},isFile(e){return(e&61440)==32768},isDir(e){return(e&61440)==16384},isLink(e){return(e&61440)==40960},isChrdev(e){return(e&61440)==8192},isBlkdev(e){return(e&61440)==24576},isFIFO(e){return(e&61440)==4096},isSocket(e){return(e&49152)==49152},flagsToPermissionString(e){var t=[`r`,`w`,`rw`][e&3];return e&512&&(t+=`w`),t},nodePermissions(e,t){return z.ignorePermissions?0:t.includes(`r`)&&!(e.mode&292)||t.includes(`w`)&&!(e.mode&146)||t.includes(`x`)&&!(e.mode&73)?2:0},mayLookup(e){return z.isDir(e.mode)?z.nodePermissions(e,`x`)||(e.node_ops.lookup?0:2):54},mayCreate(e,t){if(!z.isDir(e.mode))return 54;try{return z.lookupNode(e,t),20}catch{}return z.nodePermissions(e,`wx`)},mayDelete(e,t,n){var r;try{r=z.lookupNode(e,t)}catch(e){return e.errno}var i=z.nodePermissions(e,`wx`);if(i)return i;if(n){if(!z.isDir(r.mode))return 54;if(z.isRoot(r)||z.getPath(r)===z.cwd())return 10}else if(z.isDir(r.mode))return 31;return 0},mayOpen(e,t){return e?z.isLink(e.mode)?32:z.isDir(e.mode)&&(z.flagsToPermissionString(t)!==`r`||t&512)?31:z.nodePermissions(e,z.flagsToPermissionString(t)):44},MAX_OPEN_FDS:4096,nextfd(){for(var e=0;e<=z.MAX_OPEN_FDS;e++)if(!z.streams[e])return e;throw new z.ErrnoError(33)},getStreamChecked(e){var t=z.getStream(e);if(!t)throw new z.ErrnoError(8);return t},getStream:e=>z.streams[e],createStream(e,t=-1){return e=Object.assign(new z.FSStream,e),t==-1&&(t=z.nextfd()),e.fd=t,z.streams[t]=e,e},closeStream(e){z.streams[e]=null},dupStream(e,t=-1){var n=z.createStream(e,t);return n.stream_ops?.dup?.(n),n},chrdev_stream_ops:{open(e){e.stream_ops=z.getDevice(e.node.rdev).stream_ops,e.stream_ops.open?.(e)},llseek(){throw new z.ErrnoError(70)}},major:e=>e>>8,minor:e=>e&255,makedev:(e,t)=>e<<8|t,registerDevice(e,t){z.devices[e]={stream_ops:t}},getDevice:e=>z.devices[e],getMounts(e){for(var t=[],n=[e];n.length;){var r=n.pop();t.push(r),n.push(...r.mounts)}return t},syncfs(e,t){typeof e==`function`&&(t=e,e=!1),z.syncFSRequests++,z.syncFSRequests>1&&y(`warning: ${z.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var n=z.getMounts(z.root.mount),r=0;function i(e){return z.syncFSRequests--,t(e)}function a(e){if(e)return a.errored?void 0:(a.errored=!0,i(e));++r>=n.length&&i(null)}n.forEach(t=>{if(!t.type.syncfs)return a(null);t.type.syncfs(t,e,a)})},mount(e,t,n){var r=n===`/`,i=!n,a;if(r&&z.root)throw new z.ErrnoError(10);if(!r&&!i){var o=z.lookupPath(n,{follow_mount:!1});if(n=o.path,a=o.node,z.isMountpoint(a))throw new z.ErrnoError(10);if(!z.isDir(a.mode))throw new z.ErrnoError(54)}var s={type:e,opts:t,mountpoint:n,mounts:[]},c=e.mount(s);return c.mount=s,s.root=c,r?z.root=c:a&&(a.mounted=s,a.mount&&a.mount.mounts.push(s)),c},unmount(e){var t=z.lookupPath(e,{follow_mount:!1});if(!z.isMountpoint(t.node))throw new z.ErrnoError(28);var n=t.node,r=n.mounted,i=z.getMounts(r);Object.keys(z.nameTable).forEach(e=>{for(var t=z.nameTable[e];t;){var n=t.name_next;i.includes(t.mount)&&z.destroyNode(t),t=n}}),n.mounted=null;var a=n.mount.mounts.indexOf(r);n.mount.mounts.splice(a,1)},lookup(e,t){return e.node_ops.lookup(e,t)},mknod(e,t,n){var r=z.lookupPath(e,{parent:!0}).node,i=L.basename(e);if(!i||i===`.`||i===`..`)throw new z.ErrnoError(28);var a=z.mayCreate(r,i);if(a)throw new z.ErrnoError(a);if(!r.node_ops.mknod)throw new z.ErrnoError(63);return r.node_ops.mknod(r,i,t,n)},statfs(e){var t={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:z.nextInode,ffree:z.nextInode-1,fsid:42,flags:2,namelen:255},n=z.lookupPath(e,{follow:!0}).node;return n?.node_ops.statfs&&Object.assign(t,n.node_ops.statfs(n.mount.opts.root)),t},create(e,t=438){return t&=4095,t|=32768,z.mknod(e,t,0)},mkdir(e,t=511){return t&=1023,t|=16384,z.mknod(e,t,0)},mkdirTree(e,t){for(var n=e.split(`/`),r=``,i=0;iz.currentPath,chdir(e){var t=z.lookupPath(e,{follow:!0});if(t.node===null)throw new z.ErrnoError(44);if(!z.isDir(t.node.mode))throw new z.ErrnoError(54);var n=z.nodePermissions(t.node,`x`);if(n)throw new z.ErrnoError(n);z.currentPath=t.path},createDefaultDirectories(){z.mkdir(`/tmp`),z.mkdir(`/home`),z.mkdir(`/home/web_user`)},createDefaultDevices(){z.mkdir(`/dev`),z.registerDevice(z.makedev(1,3),{read:()=>0,write:(e,t,n,r,i)=>r,llseek:()=>0}),z.mkdev(`/dev/null`,z.makedev(1,3)),ot.register(z.makedev(5,0),ot.default_tty_ops),ot.register(z.makedev(6,0),ot.default_tty1_ops),z.mkdev(`/dev/tty`,z.makedev(5,0)),z.mkdev(`/dev/tty1`,z.makedev(6,0));var e=new Uint8Array(1024),t=0,n=()=>(t===0&&(t=$e(e).byteLength),e[--t]);z.createDevice(`/dev`,`random`,n),z.createDevice(`/dev`,`urandom`,n),z.mkdir(`/dev/shm`),z.mkdir(`/dev/shm/tmp`)},createSpecialDirectories(){z.mkdir(`/proc`);var e=z.mkdir(`/proc/self`);z.mkdir(`/proc/self/fd`),z.mount({mount(){var t=z.createNode(e,`fd`,16895,73);return t.stream_ops={llseek:R.stream_ops.llseek},t.node_ops={lookup(e,t){var n=+t,r=z.getStreamChecked(n),i={parent:null,mount:{mountpoint:`fake`},node_ops:{readlink:()=>r.path},id:n+1};return i.parent=i,i},readdir(){return Array.from(z.streams.entries()).filter(([e,t])=>t).map(([e,t])=>e.toString())}},t}},{},`/proc/self/fd`)},createStandardStreams(e,t,n){e?z.createDevice(`/dev`,`stdin`,e):z.symlink(`/dev/tty`,`/dev/stdin`),t?z.createDevice(`/dev`,`stdout`,null,t):z.symlink(`/dev/tty`,`/dev/stdout`),n?z.createDevice(`/dev`,`stderr`,null,n):z.symlink(`/dev/tty1`,`/dev/stderr`),z.open(`/dev/stdin`,0),z.open(`/dev/stdout`,1),z.open(`/dev/stderr`,1)},staticInit(){z.nameTable=Array(4096),z.mount(R,{},`/`),z.createDefaultDirectories(),z.createDefaultDevices(),z.createSpecialDirectories(),z.filesystems={MEMFS:R}},init(e,t,n){z.initialized=!0,e??=r.stdin,t??=r.stdout,n??=r.stderr,z.createStandardStreams(e,t,n)},quit(){z.initialized=!1;for(var e=0;ethis.length-1||e<0)){var t=e%this.chunkSize,n=e/this.chunkSize|0;return this.getter(n)[t]}}setDataGetter(e){this.getter=e}cacheLength(){var e=new XMLHttpRequest;if(e.open(`HEAD`,n,!1),e.send(null),!(e.status>=200&&e.status<300||e.status===304))throw Error(`Couldn't load `+n+`. Status: `+e.status);var t=Number(e.getResponseHeader(`Content-length`)),r,i=(r=e.getResponseHeader(`Accept-Ranges`))&&r===`bytes`,a=(r=e.getResponseHeader(`Content-Encoding`))&&r===`gzip`,o=1024*1024;i||(o=t);var s=(e,r)=>{if(e>r)throw Error(`invalid range (`+e+`, `+r+`) or no bytes requested!`);if(r>t-1)throw Error(`only `+t+` bytes available! programmer error!`);var i=new XMLHttpRequest;if(i.open(`GET`,n,!1),t!==o&&i.setRequestHeader(`Range`,`bytes=`+e+`-`+r),i.responseType=`arraybuffer`,i.overrideMimeType&&i.overrideMimeType(`text/plain; charset=x-user-defined`),i.send(null),!(i.status>=200&&i.status<300||i.status===304))throw Error(`Couldn't load `+n+`. Status: `+i.status);return i.response===void 0?it(i.responseText||``,!0):new Uint8Array(i.response||[])},c=this;c.setDataGetter(e=>{var n=e*o,r=(e+1)*o-1;if(r=Math.min(r,t-1),c.chunks[e]===void 0&&(c.chunks[e]=s(n,r)),c.chunks[e]===void 0)throw Error(`doXHR failed!`);return c.chunks[e]}),(a||!t)&&(o=t=1,t=this.getter(0).length,o=t,v(`LazyFiles on gzip forces download of the whole file when length is accessed`)),this._length=t,this._chunkSize=o,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<`u`){if(!c)throw`Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc`;var o={isDevice:!1,contents:new a}}else var o={isDevice:!1,url:n};var s=z.createFile(e,t,o,r,i);o.contents?s.contents=o.contents:o.url&&(s.contents=null,s.url=o.url),Object.defineProperties(s,{usedBytes:{get:function(){return this.contents.length}}});var l={};Object.keys(s.stream_ops).forEach(e=>{var t=s.stream_ops[e];l[e]=(...e)=>(z.forceLoadFile(s),t(...e))});function u(e,t,n,r,i){var a=e.node.contents;if(i>=a.length)return 0;var o=Math.min(a.length-i,r);if(a.slice)for(var s=0;s(z.forceLoadFile(s),u(e,t,n,r,i)),l.mmap=(e,t,n,r,i)=>{z.forceLoadFile(s);var a=ct(t);if(!a)throw new z.ErrnoError(48);return u(e,C,a,t,n),{ptr:a,allocated:!0}},s.stream_ops=l,s}},B={DEFAULT_POLLMASK:5,calculateAt(e,t,n){if(L.isAbs(t))return t;var r=e===-100?z.cwd():B.getStreamFromFD(e).path;if(t.length==0){if(!n)throw new z.ErrnoError(44);return r}return r+`/`+t},doStat(e,t,n){var r=e(t);E[n>>2]=r.dev,E[n+4>>2]=r.mode,D[n+8>>2]=r.nlink,E[n+12>>2]=r.uid,E[n+16>>2]=r.gid,E[n+20>>2]=r.rdev,j=[r.size>>>0,(A=r.size,+Math.abs(A)>=1?A>0?Math.floor(A/4294967296)>>>0:~~+Math.ceil((A-+(~~A>>>0))/4294967296)>>>0:0)],E[n+24>>2]=j[0],E[n+28>>2]=j[1],E[n+32>>2]=4096,E[n+36>>2]=r.blocks;var i=r.atime.getTime(),a=r.mtime.getTime(),o=r.ctime.getTime();return j=[Math.floor(i/1e3)>>>0,(A=Math.floor(i/1e3),+Math.abs(A)>=1?A>0?Math.floor(A/4294967296)>>>0:~~+Math.ceil((A-+(~~A>>>0))/4294967296)>>>0:0)],E[n+40>>2]=j[0],E[n+44>>2]=j[1],D[n+48>>2]=i%1e3*1e3*1e3,j=[Math.floor(a/1e3)>>>0,(A=Math.floor(a/1e3),+Math.abs(A)>=1?A>0?Math.floor(A/4294967296)>>>0:~~+Math.ceil((A-+(~~A>>>0))/4294967296)>>>0:0)],E[n+56>>2]=j[0],E[n+60>>2]=j[1],D[n+64>>2]=a%1e3*1e3*1e3,j=[Math.floor(o/1e3)>>>0,(A=Math.floor(o/1e3),+Math.abs(A)>=1?A>0?Math.floor(A/4294967296)>>>0:~~+Math.ceil((A-+(~~A>>>0))/4294967296)>>>0:0)],E[n+72>>2]=j[0],E[n+76>>2]=j[1],D[n+80>>2]=o%1e3*1e3*1e3,j=[r.ino>>>0,(A=r.ino,+Math.abs(A)>=1?A>0?Math.floor(A/4294967296)>>>0:~~+Math.ceil((A-+(~~A>>>0))/4294967296)>>>0:0)],E[n+88>>2]=j[0],E[n+92>>2]=j[1],0},doMsync(e,t,n,r,i){if(!z.isFile(t.node.mode))throw new z.ErrnoError(43);if(r&2)return 0;var a=w.slice(e,e+n);z.msync(t,a,i,n,r)},getStreamFromFD(e){return z.getStreamChecked(e)},varargs:void 0,getStr(e){return Ie(e)}};function gt(e,t,n){B.varargs=n;try{var r=B.getStreamFromFD(e);switch(t){case 0:var i=Xe();if(i<0)return-28;for(;z.streams[i];)i++;return z.dupStream(r,i).fd;case 1:case 2:return 0;case 3:return r.flags;case 4:var i=Xe();return r.flags|=i,0;case 12:var i=Ze(),a=0;return T[i+a>>1]=2,0;case 13:case 14:return 0}return-28}catch(e){if(z===void 0||e.name!==`ErrnoError`)throw e;return-e.errno}}var _t=(e,t,n)=>rt(e,w,t,n);function vt(e,t,n){try{var r=B.getStreamFromFD(e);r.getdents||=z.readdir(r.path);for(var i=280,a=0,o=z.llseek(r,0,1),s=Math.floor(o/i),c=Math.min(r.getdents.length,s+Math.floor(n/i)),l=s;l>>0,(A=u,+Math.abs(A)>=1?A>0?Math.floor(A/4294967296)>>>0:~~+Math.ceil((A-+(~~A>>>0))/4294967296)>>>0:0)],E[t+a>>2]=j[0],E[t+a+4>>2]=j[1],j=[(l+1)*i>>>0,(A=(l+1)*i,+Math.abs(A)>=1?A>0?Math.floor(A/4294967296)>>>0:~~+Math.ceil((A-+(~~A>>>0))/4294967296)>>>0:0)],E[t+a+8>>2]=j[0],E[t+a+12>>2]=j[1],T[t+a+16>>1]=280,C[t+a+18]=d,_t(f,t+a+19,256),a+=i}return z.llseek(r,l*i,0),a}catch(e){if(z===void 0||e.name!==`ErrnoError`)throw e;return-e.errno}}function yt(e,t,n){B.varargs=n;try{var r=B.getStreamFromFD(e);switch(t){case 21509:return r.tty?0:-59;case 21505:if(!r.tty)return-59;if(r.tty.ops.ioctl_tcgets){var i=r.tty.ops.ioctl_tcgets(r),a=Ze();E[a>>2]=i.c_iflag||0,E[a+4>>2]=i.c_oflag||0,E[a+8>>2]=i.c_cflag||0,E[a+12>>2]=i.c_lflag||0;for(var o=0;o<32;o++)C[a+o+17]=i.c_cc[o]||0;return 0}return 0;case 21510:case 21511:case 21512:return r.tty?0:-59;case 21506:case 21507:case 21508:if(!r.tty)return-59;if(r.tty.ops.ioctl_tcsets){for(var a=Ze(),s=E[a>>2],c=E[a+4>>2],l=E[a+8>>2],u=E[a+12>>2],d=[],o=0;o<32;o++)d.push(C[a+o+17]);return r.tty.ops.ioctl_tcsets(r.tty,t,{c_iflag:s,c_oflag:c,c_cflag:l,c_lflag:u,c_cc:d})}return 0;case 21519:if(!r.tty)return-59;var a=Ze();return E[a>>2]=0,0;case 21520:return r.tty?-28:-59;case 21531:var a=Ze();return z.ioctl(r,t,a);case 21523:if(!r.tty)return-59;if(r.tty.ops.ioctl_tiocgwinsz){var f=r.tty.ops.ioctl_tiocgwinsz(r.tty),a=Ze();T[a>>1]=f[0],T[a+2>>1]=f[1]}return 0;case 21524:return r.tty?0:-59;case 21515:return r.tty?0:-59;default:return-28}}catch(e){if(z===void 0||e.name!==`ErrnoError`)throw e;return-e.errno}}function bt(e,t,n,r){B.varargs=r;try{t=B.getStr(t),t=B.calculateAt(e,t);var i=r?Xe():0;return z.open(t,n,i).fd}catch(e){if(z===void 0||e.name!==`ErrnoError`)throw e;return-e.errno}}function xt(e,t){try{return e=B.getStr(e),B.doStat(z.stat,e,t)}catch(e){if(z===void 0||e.name!==`ErrnoError`)throw e;return-e.errno}}var St=()=>ve(``),Ct={},wt=e=>{for(;e.length;){var t=e.pop();e.pop()(t)}};function Tt(e){return this.fromWireType(D[e>>2])}var Et={},Dt={},Ot={},kt,At=e=>{throw new kt(e)},V=(e,t,n)=>{e.forEach(e=>Ot[e]=t);function r(t){var r=n(t);r.length!==e.length&&At(`Mismatched type converter count`);for(var i=0;i{Dt.hasOwnProperty(e)?i[t]=Dt[e]:(a.push(e),Et.hasOwnProperty(e)||(Et[e]=[]),Et[e].push(()=>{i[t]=Dt[e],++o,o===a.length&&r(i)}))}),a.length===0&&r(i)},jt=e=>{var t=Ct[e];delete Ct[e];var n=t.elements,r=n.length,i=n.map(e=>e.getterReturnType).concat(n.map(e=>e.setterArgumentType)),a=t.rawConstructor,o=t.rawDestructor;V([e],i,e=>(n.forEach((t,n)=>{var i=e[n],a=t.getter,o=t.getterContext,s=e[n+r],c=t.setter,l=t.setterContext;t.read=e=>i.fromWireType(a(o,e)),t.write=(e,t)=>{var n=[];c(l,e,s.toWireType(n,t)),wt(n)}}),[{name:t.name,fromWireType:e=>{for(var t=Array(r),i=0;i{if(r!==i.length)throw TypeError(`Incorrect number of tuple elements for ${t.name}: expected=${r}, actual=${i.length}`);for(var s=a(),c=0;c{},Nt=()=>{for(var e=Array(256),t=0;t<256;++t)e[t]=String.fromCharCode(t);Pt=e},Pt,H=e=>{for(var t=``,n=e;w[n];)t+=Pt[w[n++]];return t},Ft,U=e=>{throw new Ft(e)};function It(e,t,n={}){var r=t.name;if(e||U(`type "${r}" must have a positive integer typeid pointer`),Dt.hasOwnProperty(e)){if(n.ignoreDuplicateRegistrations)return;U(`Cannot register type '${r}' twice`)}if(Dt[e]=t,delete Ot[e],Et.hasOwnProperty(e)){var i=Et[e];delete Et[e],i.forEach(e=>e())}}function W(e,t,n={}){return It(e,t,n)}var G=8,Lt=(e,t,n,r)=>{t=H(t),W(e,{name:t,fromWireType:function(e){return!!e},toWireType:function(e,t){return t?n:r},argPackAdvance:G,readValueFromPointer:function(e){return this.fromWireType(w[e])},destructorFunction:null})},Rt=e=>({count:e.count,deleteScheduled:e.deleteScheduled,preservePointerOnDelete:e.preservePointerOnDelete,ptr:e.ptr,ptrType:e.ptrType,smartPtr:e.smartPtr,smartPtrType:e.smartPtrType}),zt=e=>{function t(e){return e.$$.ptrType.registeredClass.name}U(t(e)+` instance already deleted`)},Bt=!1,Vt=e=>{},Ht=e=>{e.smartPtr?e.smartPtrType.rawDestructor(e.smartPtr):e.ptrType.registeredClass.rawDestructor(e.ptr)},Ut=e=>{--e.count.value,e.count.value===0&&Ht(e)},Wt=(e,t,n)=>{if(t===n)return e;if(n.baseClass===void 0)return null;var r=Wt(e,t,n.baseClass);return r===null?null:n.downcast(r)},Gt={},Kt={},qt=(e,t)=>{for(t===void 0&&U(`ptr should not be undefined`);e.baseClass;)t=e.upcast(t),e=e.baseClass;return t},Jt=(e,t)=>(t=qt(e,t),Kt[t]),Yt=(e,t)=>((!t.ptrType||!t.ptr)&&At(`makeClassHandle requires ptr and ptrType`),!!t.smartPtrType!=!!t.smartPtr&&At(`Both smartPtrType and smartPtr must be specified`),t.count={value:1},Zt(Object.create(e,{$$:{value:t,writable:!0}})));function Xt(e){var t=this.getPointee(e);if(!t)return this.destructor(e),null;var n=Jt(this.registeredClass,t);if(n!==void 0){if(n.$$.count.value===0)return n.$$.ptr=t,n.$$.smartPtr=e,n.clone();var r=n.clone();return this.destructor(e),r}function i(){return this.isSmartPointer?Yt(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:t,smartPtrType:this,smartPtr:e}):Yt(this.registeredClass.instancePrototype,{ptrType:this,ptr:e})}var a=Gt[this.registeredClass.getActualType(t)];if(!a)return i.call(this);var o=this.isConst?a.constPointerType:a.pointerType,s=Wt(t,this.registeredClass,o.registeredClass);return s===null?i.call(this):this.isSmartPointer?Yt(o.registeredClass.instancePrototype,{ptrType:o,ptr:s,smartPtrType:this,smartPtr:e}):Yt(o.registeredClass.instancePrototype,{ptrType:o,ptr:s})}var Zt=e=>typeof FinalizationRegistry>`u`?(Zt=e=>e,e):(Bt=new FinalizationRegistry(e=>{Ut(e.$$)}),Zt=e=>{var t=e.$$;if(t.smartPtr){var n={$$:t};Bt.register(e,n,e)}return e},Vt=e=>Bt.unregister(e),Zt(e)),Qt=[],$t=()=>{for(;Qt.length;){var e=Qt.pop();e.$$.deleteScheduled=!1,e.delete()}},en,tn=()=>{Object.assign(nn.prototype,{isAliasOf(e){if(!(this instanceof nn)||!(e instanceof nn))return!1;var t=this.$$.ptrType.registeredClass,n=this.$$.ptr;e.$$=e.$$;for(var r=e.$$.ptrType.registeredClass,i=e.$$.ptr;t.baseClass;)n=t.upcast(n),t=t.baseClass;for(;r.baseClass;)i=r.upcast(i),r=r.baseClass;return t===r&&n===i},clone(){if(this.$$.ptr||zt(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var e=Zt(Object.create(Object.getPrototypeOf(this),{$$:{value:Rt(this.$$)}}));return e.$$.count.value+=1,e.$$.deleteScheduled=!1,e},delete(){this.$$.ptr||zt(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&U(`Object already scheduled for deletion`),Vt(this),Ut(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||zt(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&U(`Object already scheduled for deletion`),Qt.push(this),Qt.length===1&&en&&en($t),this.$$.deleteScheduled=!0,this}})};function nn(){}var rn=(e,t)=>Object.defineProperty(t,`name`,{value:e}),an=(e,t,n)=>{if(e[t].overloadTable===void 0){var r=e[t];e[t]=function(...r){return e[t].overloadTable.hasOwnProperty(r.length)||U(`Function '${n}' called with an invalid number of arguments (${r.length}) - expects one of (${e[t].overloadTable})!`),e[t].overloadTable[r.length].apply(this,r)},e[t].overloadTable=[],e[t].overloadTable[r.argCount]=r}},on=(e,t,n)=>{r.hasOwnProperty(e)?((n===void 0||r[e].overloadTable!==void 0&&r[e].overloadTable[n]!==void 0)&&U(`Cannot register public name '${e}' twice`),an(r,e,e),r[e].overloadTable.hasOwnProperty(n)&&U(`Cannot register multiple overloads of a function with the same number of arguments (${n})!`),r[e].overloadTable[n]=t):(r[e]=t,r[e].argCount=n)},sn=48,cn=57,ln=e=>{e=e.replace(/[^a-zA-Z0-9_]/g,`$`);var t=e.charCodeAt(0);return t>=sn&&t<=cn?`_${e}`:e};function un(e,t,n,r,i,a,o,s){this.name=e,this.constructor=t,this.instancePrototype=n,this.rawDestructor=r,this.baseClass=i,this.getActualType=a,this.upcast=o,this.downcast=s,this.pureVirtualFunctions=[]}var dn=(e,t,n)=>{for(;t!==n;)t.upcast||U(`Expected null or instance of ${n.name}, got an instance of ${t.name}`),e=t.upcast(e),t=t.baseClass;return e};function fn(e,t){if(t===null)return this.isReference&&U(`null is not a valid ${this.name}`),0;t.$$||U(`Cannot pass "${Yn(t)}" as a ${this.name}`),t.$$.ptr||U(`Cannot pass deleted object as a pointer of type ${this.name}`);var n=t.$$.ptrType.registeredClass;return dn(t.$$.ptr,n,this.registeredClass)}function pn(e,t){var n;if(t===null)return this.isReference&&U(`null is not a valid ${this.name}`),this.isSmartPointer?(n=this.rawConstructor(),e!==null&&e.push(this.rawDestructor,n),n):0;(!t||!t.$$)&&U(`Cannot pass "${Yn(t)}" as a ${this.name}`),t.$$.ptr||U(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&t.$$.ptrType.isConst&&U(`Cannot convert argument of type ${t.$$.smartPtrType?t.$$.smartPtrType.name:t.$$.ptrType.name} to parameter type ${this.name}`);var r=t.$$.ptrType.registeredClass;if(n=dn(t.$$.ptr,r,this.registeredClass),this.isSmartPointer)switch(t.$$.smartPtr===void 0&&U(`Passing raw pointer to smart pointer is illegal`),this.sharingPolicy){case 0:t.$$.smartPtrType===this?n=t.$$.smartPtr:U(`Cannot convert argument of type ${t.$$.smartPtrType?t.$$.smartPtrType.name:t.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:n=t.$$.smartPtr;break;case 2:if(t.$$.smartPtrType===this)n=t.$$.smartPtr;else{var i=t.clone();n=this.rawShare(n,X.toHandle(()=>i.delete())),e!==null&&e.push(this.rawDestructor,n)}break;default:U(`Unsupporting sharing policy`)}return n}function mn(e,t){if(t===null)return this.isReference&&U(`null is not a valid ${this.name}`),0;t.$$||U(`Cannot pass "${Yn(t)}" as a ${this.name}`),t.$$.ptr||U(`Cannot pass deleted object as a pointer of type ${this.name}`),t.$$.ptrType.isConst&&U(`Cannot convert argument of type ${t.$$.ptrType.name} to parameter type ${this.name}`);var n=t.$$.ptrType.registeredClass;return dn(t.$$.ptr,n,this.registeredClass)}var hn=()=>{Object.assign(gn.prototype,{getPointee(e){return this.rawGetPointee&&(e=this.rawGetPointee(e)),e},destructor(e){this.rawDestructor?.(e)},argPackAdvance:G,readValueFromPointer:Tt,fromWireType:Xt})};function gn(e,t,n,r,i,a,o,s,c,l,u){this.name=e,this.registeredClass=t,this.isReference=n,this.isConst=r,this.isSmartPointer=i,this.pointeeType=a,this.sharingPolicy=o,this.rawGetPointee=s,this.rawConstructor=c,this.rawShare=l,this.rawDestructor=u,!i&&t.baseClass===void 0?r?(this.toWireType=fn,this.destructorFunction=null):(this.toWireType=mn,this.destructorFunction=null):this.toWireType=pn}var _n=(e,t,n)=>{r.hasOwnProperty(e)||At(`Replacing nonexistent public symbol`),r[e].overloadTable!==void 0&&n!==void 0?r[e].overloadTable[n]=t:(r[e]=t,r[e].argCount=n)},vn=(e,t,n)=>{e=e.replace(/p/g,`i`);var i=r[`dynCall_`+e];return i(t,...n)},yn,K=e=>yn.get(e),bn=(e,t,n=[])=>e.includes(`j`)?vn(e,t,n):K(t)(...n),xn=(e,t)=>(...n)=>bn(e,t,n),q=(e,t)=>{e=H(e);function n(){return e.includes(`j`)?xn(e,t):K(t)}var r=n();return typeof r!=`function`&&U(`unknown function pointer with signature ${e}: ${t}`),r},Sn=(e,t)=>{var n=rn(t,function(e){this.name=t,this.message=e;var n=Error(e).stack;n!==void 0&&(this.stack=this.toString()+` -`+n.replace(/^Error(:[^\n]*)?\n/,``))});return n.prototype=Object.create(e.prototype),n.prototype.constructor=n,n.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},n},Cn,wn=e=>{var t=xi(e),n=H(t);return Q(t),n},J=(e,t)=>{var n=[],r={};function i(e){if(!r[e]&&!Dt[e]){if(Ot[e]){Ot[e].forEach(i);return}n.push(e),r[e]=!0}}throw t.forEach(i),new Cn(`${e}: `+n.map(wn).join([`, `]))},Tn=(e,t,n,r,i,a,o,s,c,l,u,d,f)=>{u=H(u),a=q(i,a),s&&=q(o,s),l&&=q(c,l),f=q(d,f);var p=ln(u);on(p,function(){J(`Cannot construct ${u} due to unbound types`,[r])}),V([e,t,n],r?[r]:[],t=>{t=t[0];var n,i;r?(n=t.registeredClass,i=n.instancePrototype):i=nn.prototype;var o=rn(u,function(...e){if(Object.getPrototypeOf(this)!==c)throw new Ft(`Use 'new' to construct `+u);if(d.constructor_body===void 0)throw new Ft(u+` has no accessible constructor`);var t=d.constructor_body[e.length];if(t===void 0)throw new Ft(`Tried to invoke ctor of ${u} with invalid number of parameters (${e.length}) - expected (${Object.keys(d.constructor_body).toString()}) parameters instead!`);return t.apply(this,e)}),c=Object.create(i,{constructor:{value:o}});o.prototype=c;var d=new un(u,o,c,f,n,a,s,l);d.baseClass&&(d.baseClass.__derivedClasses??=[],d.baseClass.__derivedClasses.push(d));var m=new gn(u,d,!0,!1,!1),h=new gn(u+`*`,d,!1,!1,!1),g=new gn(u+` const*`,d,!1,!0,!1);return Gt[e]={pointerType:h,constPointerType:g},_n(p,o),[m,h,g]})};function En(e){for(var t=1;t{for(var n=[],r=0;r>2]);return n},jn=e=>{e=e.trim();let t=e.indexOf(`(`);return t===-1?e:e.substr(0,t)},Mn=(e,t,n,r,i,a,o,s,c)=>{var l=An(n,r);t=H(t),t=jn(t),a=q(i,a),V([],[e],e=>{e=e[0];var r=`${e.name}.${t}`;function i(){J(`Cannot call ${r} due to unbound types`,l)}t.startsWith(`@@`)&&(t=Symbol[t.substring(2)]);var c=e.registeredClass.constructor;return c[t]===void 0?(i.argCount=n-1,c[t]=i):(an(c,t,r),c[t].overloadTable[n-1]=i),V([],l,i=>{var l=kn(r,[i[0],null].concat(i.slice(1)),null,a,o,s);if(c[t].overloadTable===void 0?(l.argCount=n-1,c[t]=l):c[t].overloadTable[n-1]=l,e.registeredClass.__derivedClasses)for(let n of e.registeredClass.__derivedClasses)n.constructor.hasOwnProperty(t)||(n.constructor[t]=l);return[]}),[]})},Nn=(e,t,n)=>(e instanceof Object||U(`${n} with invalid "this": ${e}`),e instanceof t.registeredClass.constructor||U(`${n} incompatible with "this" of type ${e.constructor.name}`),e.$$.ptr||U(`cannot call emscripten binding method ${n} on deleted object`),dn(e.$$.ptr,e.$$.ptrType.registeredClass,t.registeredClass)),Pn=(e,t,n,r,i,a,o,s)=>{t=H(t),a=q(i,a),V([],[e],e=>{e=e[0];var i=`${e.name}.${t}`,c={get(){J(`Cannot access ${i} due to unbound types`,[n])},enumerable:!0,configurable:!0};return s?c.set=()=>{J(`Cannot access ${i} due to unbound types`,[n])}:c.set=e=>{U(`${i} is a read-only property`)},Object.defineProperty(e.registeredClass.constructor,t,c),V([],[n],n=>{n=n[0];var i={get(){return n.fromWireType(a(r))},enumerable:!0};return s&&(s=q(o,s),i.set=e=>{var t=[];s(r,n.toWireType(t,e)),wt(t)}),Object.defineProperty(e.registeredClass.constructor,t,i),[]}),[]})},Fn=(e,t,n,r,i,a)=>{var o=An(t,n);i=q(r,i),V([],[e],e=>{e=e[0];var n=`constructor ${e.name}`;if(e.registeredClass.constructor_body===void 0&&(e.registeredClass.constructor_body=[]),e.registeredClass.constructor_body[t-1]!==void 0)throw new Ft(`Cannot register multiple constructors with identical number of parameters (${t-1}) for class '${e.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return e.registeredClass.constructor_body[t-1]=()=>{J(`Cannot construct ${e.name} due to unbound types`,o)},V([],o,r=>(r.splice(1,0,null),e.registeredClass.constructor_body[t-1]=kn(n,r,null,i,a),[])),[]})},In=(e,t,n,r,i,a,o,s,c,l)=>{var u=An(n,r);t=H(t),t=jn(t),a=q(i,a),V([],[e],e=>{e=e[0];var r=`${e.name}.${t}`;t.startsWith(`@@`)&&(t=Symbol[t.substring(2)]),s&&e.registeredClass.pureVirtualFunctions.push(t);function i(){J(`Cannot call ${r} due to unbound types`,u)}var l=e.registeredClass.instancePrototype,d=l[t];return d===void 0||d.overloadTable===void 0&&d.className!==e.name&&d.argCount===n-2?(i.argCount=n-2,i.className=e.name,l[t]=i):(an(l,t,r),l[t].overloadTable[n-2]=i),V([],u,i=>{var s=kn(r,i,e,a,o,c);return l[t].overloadTable===void 0?(s.argCount=n-2,l[t]=s):l[t].overloadTable[n-2]=s,[]}),[]})},Ln=(e,t,n,r,i,a,o,s,c,l)=>{t=H(t),i=q(r,i),V([],[e],e=>{e=e[0];var r=`${e.name}.${t}`,u={get(){J(`Cannot access ${r} due to unbound types`,[n,o])},enumerable:!0,configurable:!0};return c?u.set=()=>J(`Cannot access ${r} due to unbound types`,[n,o]):u.set=e=>U(r+` is a read-only property`),Object.defineProperty(e.registeredClass.instancePrototype,t,u),V([],c?[n,o]:[n],n=>{var o=n[0],u={get(){var t=Nn(this,e,r+` getter`);return o.fromWireType(i(a,t))},enumerable:!0};if(c){c=q(s,c);var d=n[1];u.set=function(t){var n=Nn(this,e,r+` setter`),i=[];c(l,n,d.toWireType(i,t)),wt(i)}}return Object.defineProperty(e.registeredClass.instancePrototype,t,u),[]}),[]})},Rn=(e,t,n)=>{e=H(e),V([],[t],t=>(t=t[0],r[e]=t.fromWireType(n),[]))},zn=[],Y=[],Bn=e=>{e>9&&--Y[e+1]===0&&(Y[e]=void 0,zn.push(e))},Vn=()=>Y.length/2-5-zn.length,Hn=()=>{Y.push(0,1,void 0,1,null,1,!0,1,!1,1),r.count_emval_handles=Vn},X={toValue:e=>(e||U(`Cannot use deleted val. handle = `+e),Y[e]),toHandle:e=>{switch(e){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let t=zn.pop()||Y.length;return Y[t]=e,Y[t+1]=1,t}}}},Un={name:`emscripten::val`,fromWireType:e=>{var t=X.toValue(e);return Bn(e),t},toWireType:(e,t)=>X.toHandle(t),argPackAdvance:G,readValueFromPointer:Tt,destructorFunction:null},Wn=e=>W(e,Un),Gn=(e,t,n)=>{switch(t){case 1:return n?function(e){return this.fromWireType(C[e])}:function(e){return this.fromWireType(w[e])};case 2:return n?function(e){return this.fromWireType(T[e>>1])}:function(e){return this.fromWireType(te[e>>1])};case 4:return n?function(e){return this.fromWireType(E[e>>2])}:function(e){return this.fromWireType(D[e>>2])};default:throw TypeError(`invalid integer width (${t}): ${e}`)}},Kn=(e,t,n,r)=>{t=H(t);function i(){}i.values={},W(e,{name:t,constructor:i,fromWireType:function(e){return this.constructor.values[e]},toWireType:(e,t)=>t.value,argPackAdvance:G,readValueFromPointer:Gn(t,n,r),destructorFunction:null}),on(t,i)},qn=(e,t)=>{var n=Dt[e];return n===void 0&&U(`${t} has unknown type ${wn(e)}`),n},Jn=(e,t,n)=>{var r=qn(e,`enum`);t=H(t);var i=r.constructor,a=Object.create(r.constructor.prototype,{value:{value:n},constructor:{value:rn(`${r.name}_${t}`,function(){})}});i.values[n]=a,i[t]=a},Yn=e=>{if(e===null)return`null`;var t=typeof e;return t===`object`||t===`array`||t===`function`?e.toString():``+e},Xn=(e,t)=>{switch(t){case 4:return function(e){return this.fromWireType(ne[e>>2])};case 8:return function(e){return this.fromWireType(re[e>>3])};default:throw TypeError(`invalid float width (${t}): ${e}`)}},Zn=(e,t,n)=>{t=H(t),W(e,{name:t,fromWireType:e=>e,toWireType:(e,t)=>t,argPackAdvance:G,readValueFromPointer:Xn(t,n),destructorFunction:null})},Qn=(e,t,n,r,i,a,o,s)=>{var c=An(t,n);e=H(e),e=jn(e),i=q(r,i),on(e,function(){J(`Cannot call ${e} due to unbound types`,c)},t-1),V([],c,n=>{var r=[n[0],null].concat(n.slice(1));return _n(e,kn(e,r,null,i,a,o),t-1),[]})},$n=(e,t,n)=>{switch(t){case 1:return n?e=>C[e]:e=>w[e];case 2:return n?e=>T[e>>1]:e=>te[e>>1];case 4:return n?e=>E[e>>2]:e=>D[e>>2];default:throw TypeError(`invalid integer width (${t}): ${e}`)}},er=(e,t,n,r,i)=>{t=H(t),i===-1&&(i=4294967295);var a=e=>e;if(r===0){var o=32-8*n;a=e=>e<>>o}var s=t.includes(`unsigned`);W(e,{name:t,fromWireType:a,toWireType:s?function(e,t){return this.name,t>>>0}:function(e,t){return this.name,t},argPackAdvance:G,readValueFromPointer:$n(t,n,r!==0),destructorFunction:null})},tr=(e,t,n)=>{var r=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][t];function i(e){var t=D[e>>2],n=D[e+4>>2];return new r(C.buffer,n,t)}n=H(n),W(e,{name:n,fromWireType:i,argPackAdvance:G,readValueFromPointer:i},{ignoreDuplicateRegistrations:!0})},nr=(e,t,n,r,i,a,o,s,c,l,u,d)=>{n=H(n),a=q(i,a),s=q(o,s),l=q(c,l),d=q(u,d),V([e],[t],e=>(e=e[0],[new gn(n,e.registeredClass,!1,!1,!0,e,r,a,s,l,d)]))},rr=(e,t)=>{t=H(t);var n=!0;W(e,{name:t,fromWireType(e){var t=D[e>>2],r=e+4,i;if(n)for(var a=r,o=0;o<=t;++o){var s=r+o;if(o==t||w[s]==0){var c=s-a,l=Ie(a,c);i===void 0?i=l:(i+=`\0`,i+=l),a=s+1}}else{for(var u=Array(t),o=0;o>2]=r,n&&i)_t(t,o,r+1);else if(i)for(var s=0;s255&&(Q(o),U(`String has UTF-16 code units that do not fit in 8 bits`)),w[o+s]=c}else for(var s=0;s{for(var n=e,r=n>>1,i=r+t/2;!(r>=i)&&te[r];)++r;if(n=r<<1,n-e>32&&ir)return ir.decode(w.subarray(e,n));for(var a=``,o=0;!(o>=t/2);++o){var s=T[e+o*2>>1];if(s==0)break;a+=String.fromCharCode(s)}return a},or=(e,t,n)=>{if(n??=2147483647,n<2)return 0;n-=2;for(var r=t,i=n>1]=o,t+=2}return T[t>>1]=0,t-r},sr=e=>e.length*2,cr=(e,t)=>{for(var n=0,r=``;!(n>=t/4);){var i=E[e+n*4>>2];if(i==0)break;if(++n,i>=65536){var a=i-65536;r+=String.fromCharCode(55296|a>>10,56320|a&1023)}else r+=String.fromCharCode(i)}return r},lr=(e,t,n)=>{if(n??=2147483647,n<4)return 0;for(var r=t,i=r+n-4,a=0;a=55296&&o<=57343){var s=e.charCodeAt(++a);o=65536+((o&1023)<<10)|s&1023}if(E[t>>2]=o,t+=4,t+4>i)break}return E[t>>2]=0,t-r},ur=e=>{for(var t=0,n=0;n=55296&&r<=57343&&++n,t+=4}return t},dr=(e,t,n)=>{n=H(n);var r,i,a,o;t===2?(r=ar,i=or,o=sr,a=e=>te[e>>1]):t===4&&(r=cr,i=lr,o=ur,a=e=>D[e>>2]),W(e,{name:n,fromWireType:e=>{for(var n=D[e>>2],i,o=e+4,s=0;s<=n;++s){var c=e+4+s*t;if(s==n||a(c)==0){var l=c-o,u=r(o,l);i===void 0?i=u:(i+=`\0`,i+=u),o=c+t}}return Q(e),i},toWireType:(e,r)=>{typeof r!=`string`&&U(`Cannot pass non-string to C++ string type ${n}`);var a=o(r),s=Si(4+a+t);return D[s>>2]=a/t,i(r,s+4,a+t),e!==null&&e.push(Q,s),s},argPackAdvance:G,readValueFromPointer:Tt,destructorFunction(e){Q(e)}})},fr=(e,t,n,r,i,a)=>{Ct[e]={name:H(t),rawConstructor:q(n,r),rawDestructor:q(i,a),elements:[]}},pr=(e,t,n,r,i,a,o,s,c)=>{Ct[e].elements.push({getterReturnType:t,getter:q(n,r),getterContext:i,setterArgumentType:a,setter:q(o,s),setterContext:c})},mr=(e,t)=>{t=H(t),W(e,{isVoid:!0,name:t,argPackAdvance:0,fromWireType:()=>void 0,toWireType:(e,t)=>void 0})},hr=(e,t,n)=>w.copyWithin(e,t,t+n),gr=0,_r=()=>{Ne=!1,gr=0},vr=(e,t,n)=>{var r=[],i=e.toWireType(r,n);return r.length&&(D[t>>2]=X.toHandle(r)),i},yr=(e,t,n)=>(e=X.toValue(e),t=qn(t,`emval::as`),vr(t,n,e)),br=[],xr=(e,t,n,r)=>(e=br[e],t=X.toValue(t),e(null,t,n,r)),Sr={},Cr=e=>{var t=Sr[e];return t===void 0?H(e):t},wr=(e,t,n,r,i)=>(e=br[e],t=X.toValue(t),n=Cr(n),e(t,t[n],r,i)),Tr=e=>{var t=br.length;return br.push(e),t},Er=(e,t)=>{for(var n=Array(e),r=0;r>2],`parameter `+r);return n},Dr=(e,t,n)=>{var r=Er(e,t),i=r.shift();e--;var a=`return function (obj, func, destructorsRef, args) { -`,o=0,s=[];n===0&&s.push(`obj`);for(var c=[`retType`],l=[i],u=0;ue.name).join(`, `)}) => ${i.name}>`,d))},Or=(e,t)=>(e=X.toValue(e),t=X.toValue(t),X.toHandle(e[t])),kr=e=>{e>9&&(Y[e+1]+=1)},Ar=()=>X.toHandle([]),jr=e=>{e=X.toValue(e);for(var t=Array(e.length),n=0;nX.toHandle(Cr(e)),Nr=()=>X.toHandle({}),Pr=e=>{wt(X.toValue(e)),Bn(e)},Fr=(e,t,n)=>{e=X.toValue(e),t=X.toValue(t),n=X.toValue(n),e[t]=n},Ir=(e,t)=>{e=qn(e,`_emval_take_value`);var n=e.readValueFromPointer(t);return X.toHandle(n)},Lr=e=>(e=X.toValue(e),X.toHandle(typeof e)),Rr={},zr=e=>{if(e instanceof je||e==`unwind`)return S;f(1,e)},Br=()=>Ne||gr>0,Vr=e=>{S=e,Br()||(r.onExit?.(e),ee=!0),f(e,new je(e))},Hr=(e,t)=>{S=e,Vr(e)},Ur=()=>{if(!Br())try{Hr(S)}catch(e){zr(e)}},Wr=e=>{if(!ee)try{e(),Ur()}catch(e){zr(e)}},Gr=()=>performance.now(),Kr=(e,t)=>(Rr[e]&&(clearTimeout(Rr[e].id),delete Rr[e]),t&&(Rr[e]={id:setTimeout(()=>{delete Rr[e],Wr(()=>Ci(e,Gr()))},t),timeout_ms:t}),0),qr=(e,t,n,r)=>{var i=new Date().getFullYear(),a=new Date(i,0,1),o=new Date(i,6,1),s=a.getTimezoneOffset(),c=o.getTimezoneOffset(),l=Math.max(s,c);D[e>>2]=l*60,E[t>>2]=Number(s!=c);var u=e=>{var t=e>=0?`-`:`+`,n=Math.abs(e);return`UTC${t}${String(Math.floor(n/60)).padStart(2,`0`)}${String(n%60).padStart(2,`0`)}`},d=u(s),f=u(c);c{Jr.length=0;for(var n;n=w[e++];){var r=n!=105;r&=n!=112,t+=r&&t%8?4:0,Jr.push(n==112?D[t>>2]:n==105?E[t>>2]:re[t>>3]),t+=r?8:4}return Jr},Xr=(e,t,n)=>{var r=Yr(t,n);return Ae[e](...r)},Zr=(e,t,n)=>Xr(e,t,n),Qr=()=>2147483648,$r=e=>{var t=(e-x.buffer.byteLength+65535)/65536|0;try{return x.grow(t),ie(),1}catch{}},ei=e=>{var t=w.length;e>>>=0;var n=Qr();if(e>n)return!1;for(var r=1;r<=4;r*=2){var i=t+33554432/r;if($r(Math.min(n,st(Math.max(e,i),65536))))return!0}return!1},ti={},ni=()=>d||`./this.program`,ri=()=>{if(!ri.strings){var e={USER:`web_user`,LOGNAME:`web_user`,PATH:`/`,PWD:`/`,HOME:`/home/web_user`,LANG:(typeof navigator==`object`&&navigator.languages&&navigator.languages[0]||`C`).replace(`-`,`_`)+`.UTF-8`,_:ni()};for(var t in ti)ti[t]===void 0?delete e[t]:e[t]=ti[t];var n=[];for(var t in e)n.push(`${t}=${e[t]}`);ri.strings=n}return ri.strings},ii=(e,t)=>{for(var n=0;n{var n=0;return ri().forEach((r,i)=>{var a=t+n;D[e+i*4>>2]=a,ii(r,a),n+=r.length+1}),0},oi=(e,t)=>{var n=ri();D[e>>2]=n.length;var r=0;return n.forEach(e=>r+=e.length+1),D[t>>2]=r,0};function si(e){try{var t=B.getStreamFromFD(e);return z.close(t),0}catch(e){if(z===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var ci=(e,t,n,r)=>{for(var i=0,a=0;a>2],s=D[t+4>>2];t+=8;var c=z.read(e,C,o,s,r);if(c<0)return-1;if(i+=c,c>2]=i,0}catch(e){if(z===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var ui=(e,t)=>t+2097152>>>0<4194305-!!e?(e>>>0)+t*4294967296:NaN;function di(e,t,n,r,i){var a=ui(t,n);try{if(isNaN(a))return 61;var o=B.getStreamFromFD(e);return z.llseek(o,a,r),j=[o.position>>>0,(A=o.position,+Math.abs(A)>=1?A>0?Math.floor(A/4294967296)>>>0:~~+Math.ceil((A-+(~~A>>>0))/4294967296)>>>0:0)],E[i>>2]=j[0],E[i+4>>2]=j[1],o.getdents&&a===0&&r===0&&(o.getdents=null),0}catch(e){if(z===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var fi=(e,t,n,r)=>{for(var i=0,a=0;a>2],s=D[t+4>>2];t+=8;var c=z.write(e,C,o,s,r);if(c<0)return-1;if(i+=c,c>2]=i,0}catch(e){if(z===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var mi=e=>e,hi=z.createPath,gi=e=>z.unlink(e),_i=z.createLazyFile,vi=z.createDevice;z.createPreloadedFile=pt,z.staticInit(),r.FS_createPath=z.createPath,r.FS_createDataFile=z.createDataFile,r.FS_createPreloadedFile=z.createPreloadedFile,r.FS_unlink=z.unlink,r.FS_createLazyFile=z.createLazyFile,r.FS_createDevice=z.createDevice,R.doesNotExistError=new z.ErrnoError(44),R.doesNotExistError.stack=``,kt=r.InternalError=class extends Error{constructor(e){super(e),this.name=`InternalError`}},Nt(),Ft=r.BindingError=class extends Error{constructor(e){super(e),this.name=`BindingError`}},tn(),hn(),Cn=r.UnboundTypeError=Sn(Error,`UnboundTypeError`),Hn();var yi={y:P,n:ze,x:Be,a:Ge,f:Ke,Ma:qe,ba:Je,L:I,wa:Ye,d:He,ea:gt,Aa:vt,Fa:yt,fa:bt,za:xt,ua:St,Pa:jt,Xa:Mt,ya:Lt,s:Tn,v:Mn,p:Pn,w:Fn,h:In,F:Ln,R:Rn,Ua:Wn,T:Kn,I:Jn,oa:Zn,B:Qn,O:er,H:tr,q:nr,Za:rr,ca:dr,ma:fr,la:pr,Ha:mr,Ga:hr,sa:_r,X:yr,Ra:xr,ka:wr,Sa:Bn,aa:Dr,Oa:Or,na:kr,D:Ar,Na:jr,Y:Mr,U:Nr,Qa:Pr,Ta:Fr,N:Ir,ja:Lr,ta:Kr,va:qr,$:Zr,xa:ei,Ba:ai,Ca:oi,V:si,Ea:li,Wa:di,Da:pi,Ja:na,S:ia,pa:ha,ia:ta,La:Zi,qa:ma,ha:la,u:Ki,g:Li,Ka:$i,K:Qi,ga:ua,W:aa,b:Vi,i:Ui,o:Bi,da:ga,t:Ji,J:ea,E:sa,G:da,_:_a,Va:ba,l:Yi,j:Gi,Q:Xi,e:zi,Ya:ya,c:Ri,k:Hi,Ia:pa,m:Wi,r:qi,z:oa,A:ca,M:fa,P:ra,Z:va,C:mi,ra:Vr},Z;ke();var bi=()=>(bi=Z.$a)(),xi=e=>(xi=Z.ab)(e),Si=e=>(Si=Z.bb)(e),Q=e=>(Q=Z.db)(e),Ci=(e,t)=>(Ci=Z.eb)(e,t),$=(e,t)=>($=Z.fb)(e,t),wi=e=>(wi=Z.gb)(e),Ti=e=>(Ti=Z.hb)(e),Ei=()=>(Ei=Z.ib)(),Di=e=>(Di=Z.jb)(e),Oi=e=>(Oi=Z.kb)(e),ki=(e,t,n)=>(ki=Z.lb)(e,t,n),Ai=e=>(Ai=Z.mb)(e),ji=r.dynCall_jiji=(e,t,n,i,a)=>(ji=r.dynCall_jiji=Z.nb)(e,t,n,i,a),Mi=r.dynCall_iij=(e,t,n,i)=>(Mi=r.dynCall_iij=Z.ob)(e,t,n,i),Ni=r.dynCall_viijii=(e,t,n,i,a,o,s)=>(Ni=r.dynCall_viijii=Z.pb)(e,t,n,i,a,o,s),Pi=r.dynCall_iiiiij=(e,t,n,i,a,o,s)=>(Pi=r.dynCall_iiiiij=Z.qb)(e,t,n,i,a,o,s),Fi=r.dynCall_iiiiijj=(e,t,n,i,a,o,s,c,l)=>(Fi=r.dynCall_iiiiijj=Z.rb)(e,t,n,i,a,o,s,c,l),Ii=r.dynCall_iiiiiijj=(e,t,n,i,a,o,s,c,l,u)=>(Ii=r.dynCall_iiiiiijj=Z.sb)(e,t,n,i,a,o,s,c,l,u);function Li(e,t){var n=N();try{return K(e)(t)}catch(e){if(M(n),e!==e+0)throw e;$(1,0)}}function Ri(e,t,n,r){var i=N();try{K(e)(t,n,r)}catch(e){if(M(i),e!==e+0)throw e;$(1,0)}}function zi(e,t,n){var r=N();try{K(e)(t,n)}catch(e){if(M(r),e!==e+0)throw e;$(1,0)}}function Bi(e,t,n,r,i){var a=N();try{return K(e)(t,n,r,i)}catch(e){if(M(a),e!==e+0)throw e;$(1,0)}}function Vi(e,t,n){var r=N();try{return K(e)(t,n)}catch(e){if(M(r),e!==e+0)throw e;$(1,0)}}function Hi(e,t,n,r,i){var a=N();try{K(e)(t,n,r,i)}catch(e){if(M(a),e!==e+0)throw e;$(1,0)}}function Ui(e,t,n,r){var i=N();try{return K(e)(t,n,r)}catch(e){if(M(i),e!==e+0)throw e;$(1,0)}}function Wi(e,t,n,r,i,a){var o=N();try{K(e)(t,n,r,i,a)}catch(e){if(M(o),e!==e+0)throw e;$(1,0)}}function Gi(e,t){var n=N();try{K(e)(t)}catch(e){if(M(n),e!==e+0)throw e;$(1,0)}}function Ki(e){var t=N();try{return K(e)()}catch(e){if(M(t),e!==e+0)throw e;$(1,0)}}function qi(e,t,n,r,i,a,o){var s=N();try{K(e)(t,n,r,i,a,o)}catch(e){if(M(s),e!==e+0)throw e;$(1,0)}}function Ji(e,t,n,r,i,a){var o=N();try{return K(e)(t,n,r,i,a)}catch(e){if(M(o),e!==e+0)throw e;$(1,0)}}function Yi(e){var t=N();try{K(e)()}catch(e){if(M(t),e!==e+0)throw e;$(1,0)}}function Xi(e,t,n){var r=N();try{K(e)(t,n)}catch(e){if(M(r),e!==e+0)throw e;$(1,0)}}function Zi(e,t,n,r,i){var a=N();try{return K(e)(t,n,r,i)}catch(e){if(M(a),e!==e+0)throw e;$(1,0)}}function Qi(e,t,n){var r=N();try{return K(e)(t,n)}catch(e){if(M(r),e!==e+0)throw e;$(1,0)}}function $i(e,t,n){var r=N();try{return K(e)(t,n)}catch(e){if(M(r),e!==e+0)throw e;$(1,0)}}function ea(e,t,n,r,i,a,o){var s=N();try{return K(e)(t,n,r,i,a,o)}catch(e){if(M(s),e!==e+0)throw e;$(1,0)}}function ta(e,t){var n=N();try{return K(e)(t)}catch(e){if(M(n),e!==e+0)throw e;$(1,0)}}function na(e,t){var n=N();try{return K(e)(t)}catch(e){if(M(n),e!==e+0)throw e;$(1,0)}}function ra(e,t,n,r,i,a,o,s,c,l,u){var d=N();try{K(e)(t,n,r,i,a,o,s,c,l,u)}catch(e){if(M(d),e!==e+0)throw e;$(1,0)}}function ia(e,t,n,r){var i=N();try{return K(e)(t,n,r)}catch(e){if(M(i),e!==e+0)throw e;$(1,0)}}function aa(e,t,n,r,i){var a=N();try{return K(e)(t,n,r,i)}catch(e){if(M(a),e!==e+0)throw e;$(1,0)}}function oa(e,t,n,r,i,a,o,s){var c=N();try{K(e)(t,n,r,i,a,o,s)}catch(e){if(M(c),e!==e+0)throw e;$(1,0)}}function sa(e,t,n,r,i,a,o,s){var c=N();try{return K(e)(t,n,r,i,a,o,s)}catch(e){if(M(c),e!==e+0)throw e;$(1,0)}}function ca(e,t,n,r,i,a,o,s,c){var l=N();try{K(e)(t,n,r,i,a,o,s,c)}catch(e){if(M(l),e!==e+0)throw e;$(1,0)}}function la(e,t,n,r){var i=N();try{return K(e)(t,n,r)}catch(e){if(M(i),e!==e+0)throw e;$(1,0)}}function ua(e,t,n,r){var i=N();try{return K(e)(t,n,r)}catch(e){if(M(i),e!==e+0)throw e;$(1,0)}}function da(e,t,n,r,i,a,o,s,c){var l=N();try{return K(e)(t,n,r,i,a,o,s,c)}catch(e){if(M(l),e!==e+0)throw e;$(1,0)}}function fa(e,t,n,r,i,a,o,s,c,l){var u=N();try{K(e)(t,n,r,i,a,o,s,c,l)}catch(e){if(M(u),e!==e+0)throw e;$(1,0)}}function pa(e,t,n,r,i,a,o,s,c,l,u){var d=N();try{K(e)(t,n,r,i,a,o,s,c,l,u)}catch(e){if(M(d),e!==e+0)throw e;$(1,0)}}function ma(e,t,n){var r=N();try{return K(e)(t,n)}catch(e){if(M(r),e!==e+0)throw e;$(1,0)}}function ha(e,t,n,r,i,a){var o=N();try{return K(e)(t,n,r,i,a)}catch(e){if(M(o),e!==e+0)throw e;$(1,0)}}function ga(e,t,n,r,i,a){var o=N();try{return K(e)(t,n,r,i,a)}catch(e){if(M(o),e!==e+0)throw e;$(1,0)}}function _a(e,t,n,r,i,a,o,s,c,l,u,d){var f=N();try{return K(e)(t,n,r,i,a,o,s,c,l,u,d)}catch(e){if(M(f),e!==e+0)throw e;$(1,0)}}function va(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){var g=N();try{K(e)(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h)}catch(e){if(M(g),e!==e+0)throw e;$(1,0)}}function ya(e,t,n,r){var i=N();try{K(e)(t,n,r)}catch(e){if(M(i),e!==e+0)throw e;$(1,0)}}function ba(e,t,n,r){var i=N();try{return Mi(e,t,n,r)}catch(e){if(M(i),e!==e+0)throw e;$(1,0)}}r.addRunDependency=ge,r.removeRunDependency=_e,r.FS_createPreloadedFile=pt,r.FS_unlink=gi,r.FS_createPath=hi,r.FS_createDevice=vi,r.FS_createDataFile=ut,r.FS_createLazyFile=_i;var xa;me=function e(){xa||Sa(),xa||(me=e)};function Sa(){if(k>0||(ce(),k>0))return;function e(){xa||(xa=!0,r.calledRun=!0,!ee&&(le(),i(r),r.onRuntimeInitialized?.(),ue()))}r.setStatus?(r.setStatus(`Running...`),setTimeout(()=>{setTimeout(()=>r.setStatus(``),1),e()},1)):e()}if(r.preInit)for(typeof r.preInit==`function`&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();Sa();var Ca=[];function wa(e){Ca.push(e)}return r.onRuntimeInitialized=function(){for(var e of Ca)e()},(function(){var e,t,n,i,a=`/`,o,s,c=`;`,l=0,u=99999;function d(e){var t={};return e.filter(function(e){return t.hasOwnProperty(e)?!1:t[e]=!0})}function f(e,t,n=i){var r=t.endsWith(n),a=e.startsWith(n);return r||a?r&&a?t.substring(0,t.length-1)+e:t+e:t+n+e}function p(e,t){var n=0;function r(){var o=f(e,t[n++]);return fetch(o).then(function(o){if(o.status===200)return o.text().then(function(e){var t=new URL(o.url),n=t.pathname.substring(1);return n=n.replace(new RegExp(i,`g`),a),{data:e,filePath:n,fullPath:t.origin+t.pathname}});if(n/g),n=[];for(var r of t)n.push(r[1]);return n}function y(e,t){var n;if(o)n=p(e,t);else if(s)n=m(e,t);else throw Error(`Unknown environment!`);return n}function b(e,t,n=!1){n?(t.files||=[],t.files.push(e)):(t.folders||=[],t.folders.splice(0,0,e))}function x(e,t,n,r,i=!0){for(var o=i?e.substring(1,e.lastIndexOf(a)).split(a):e.substring(r.length).split(a),s=r,c=1;c-1?r+1:0);var a=document.createElement(`a`);a.setAttribute(`href`,`data:text/plain;charset=utf-8,`+encodeURIComponent(n)),a.setAttribute(`download`,t),a.style.display=`none`,document.body.appendChild(a),a.click(),document.body.removeChild(a)}}wa(function(){o=typeof window==`object`,s=typeof process==`object`&&typeof process.versions==`object`&&typeof process.versions.node==`string`,o&&(i=`/`),s&&(e=de(),t=de(),n=de(),i=t.sep);function d(e,t,n,o,s=[],c=``){var d=`/readFromXml`+ l++%u,p=h(n);try{z.mkdir(d)}catch{throw Error(`Failed to create folder in WASM FS.`)}var m=[];(!o||o.readXIncludes)&&(m=v(t));var b={files:[],folders:[]},S=ee(d),C=S+`/ChosenToHopefullyNotClashWithAnyOtherFile123`;if(c){var w=i===`\\`?`\\\\`:i;C=c.replace(new RegExp(w,`g`),a),C=f(C,d,a),x(S,null,b,d,!1)}x(C,t,b,d);function T(e,t,n){var r=[Promise.resolve()];for(var o of t){var s=e.slice(),c=n.slice(),l=y(o,c).then(function(e){if(s.includes(e.fullPath))throw Error(`Cycle detected! -`+s.join(` --> `)+` --> `+e.fullPath);s.push(e.fullPath);var t=e.fullPath.lastIndexOf(i),n=e.fullPath.substring(0,t>-1?t:0);c.includes(n)||c.splice(0,0,n);var r=v(e.data),o=f(e.filePath,d,a);return b.files.includes(o)||x(o,e.data,b,d),T(s,r,c)});r.push(l)}return Promise.all(r)}return T(s,m,p).then(function(){var t=_(n,d);z.chdir(S);try{var i=r.getEnviron(r.MATERIALX_SEARCH_PATH_ENV_VAR);if(i){var a=g(i,d);r.setEnviron(r.MATERIALX_SEARCH_PATH_ENV_VAR,a)}r._readFromXmlFile(e,C,t,o),i&&r.setEnviron(r.MATERIALX_SEARCH_PATH_ENV_VAR,i)}catch(e){throw Error(`Failed to read MaterialX files from WASM FS: `+r.getExceptionMessage(e))}try{for(var s of b.files)z.unlink(s);z.chdir(`/`);for(var c of b.folders)z.rmdir(c);z.rmdir(d)}catch{throw Error(`Failed to delete temporary files from WASM FS.`)}})}r.readFromXmlString=function(e,t,n=``,r=null){if(arguments.length<2||arguments.length>4)throw Error(`Function readFromXmlString called with an invalid number of arguments (`+arguments.length+`) - expects 2 to 4!`);return d(e,t,n,r)},r.readFromXmlFile=function(e,t,n=``,r=null){if(arguments.length<2||arguments.length>4)throw Error(`Function readFromXmlFile called with an invalid number of arguments (`+arguments.length+`) - expects 2 to 4!`);return y(t,h(n)).then(function(t){var a=[t.fullPath],o=t.fullPath.lastIndexOf(i),s=t.fullPath.substring(0,o>-1?o:0);return n=n.concat(c,s),d(e,t.data,n,r,a,t.filePath)})},r.writeToXmlFile=function(e,t,n=null){if(arguments.length<2||arguments.length>3)throw Error(`Function writeToXmlFile called with an invalid number of arguments (`+arguments.length+`) - expects 2 to 3!`);S(t,r.writeToXmlString(e,n))},r.exportToXmlFile=function(e,t,n=null){if(arguments.length<2||arguments.length>3)throw Error(`Function exportToXmlFile called with an invalid number of arguments (`+arguments.length+`) - expects 2 to 3!`);S(t,r.exportToXmlString(e,n))}})})(),n=o,n})})();typeof exports==`object`&&typeof module==`object`?(module.exports=fe,module.exports.default=fe):typeof define==`function`&&define.amd&&define([],()=>fe);function pe(e){let t=new URLSearchParams(window.location.search).get(e);return t==null||t===`0`||t===`false`?!1:t===``?!0:t}var O=pe(`debugmaterialx`),k=O===`update`,me=0;function he(){return me}var ge=0;function _e(){return ge}var ve=window.performance||window.webkitPerformance||window.mozPerformance;function ye(){me=ve.now()/1e3,ge++,window.requestAnimationFrame(ye)}window.requestAnimationFrame(ye);async function be(){return typeof requestIdleCallback<`u`?new Promise(e=>requestIdleCallback(e)):(console.debug(`[MaterialX] Can not wait for network idle, using fallback`),new Promise(e=>setTimeout(e,100)))}function xe(){return window.location.hostname===`localhost`||/^\d{1,3}(\.\d{1,3}){3}$/.test(window.location.hostname)}var Se=pe(`debugmaterialx`),Ce=new v;Ce.needsUpdate=!0,Ce.image=new Image,Ce.image.src=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAANQTFRFr6+vGqg52AAAAAxJREFUeJxjZGBEgQAAWAAJLpjsTQAAAABJRU5ErkJggg==`;function we(e,t,n=0,r=1024,i=512,l){let f;f=l||(t.image?t.image.height/4:256);let p=Math.log2(f)-2,m=f,h=3*Math.max(2**p,112),_=new a(r,i,{format:u,type:w,minFilter:c,magFilter:o,generateMipmaps:!0,wrapS:s,anisotropy:e.capabilities.getMaxAnisotropy()}),v=new D(2,2),y=new ee(-1,1,1,-1,0,1),b=new E({defines:{USE_ENVMAP:``,ENVMAP_TYPE_CUBE_UV:``,CUBEUV_TEXEL_WIDTH:1/h,CUBEUV_TEXEL_HEIGHT:1/m,CUBEUV_MAX_MIP:p+0+`.0`},uniforms:{envMap:{value:t},roughness:{value:n}},vertexShader:` - varying vec2 vUv; - - void main() { - vUv = uv; - gl_Position = vec4(position.xy, 0.0, 1.0); - } - `,fragmentShader:` - uniform sampler2D envMap; - uniform float roughness; - varying vec2 vUv; - - #include - #include - - void main() { - // Convert UV coordinates to equirectangular direction - vec2 uv = vUv; - - // Map UV (0,1) to spherical coordinates - // Longitude: -π to π, Latitude: 0 to π - float phi = uv.x * 2.0 * PI - PI; // Longitude (-π to π) - float theta = uv.y * PI; // Latitude (0 to π) - // Rotate 90° around Y - phi -= PI / 2.0; // Adjust to match Three.js convention - - // Convert spherical to cartesian coordinates - vec3 direction = vec3( - sin(theta) * cos(phi), // x - cos(theta), // y - sin(theta) * sin(phi) // z - ); - - // Sample the PMREM cube texture using the direction and roughness - #ifdef ENVMAP_TYPE_CUBE_UV - vec4 envColor = textureCubeUV(envMap, direction, roughness); - #else - vec4 envColor = vec4(1.0, 0.0, 1.0, 1.0); // Magenta fallback - #endif - - gl_FragColor = vec4(envColor.rgb, 1.0); - } - `}),x=new d,S=new g(v,b);x.add(S);let C=e.getRenderTarget(),T=e.autoClear,te=e.xr.enabled,ne=e.shadowMap.enabled;_.texture.generateMipmaps=!0;try{e.xr.enabled=!1,e.shadowMap.enabled=!1,e.autoClear=!0,e.setRenderTarget(_),e.clear(),e.render(x,y)}finally{e.setRenderTarget(C),e.autoClear=T,e.xr.enabled=te,e.shadowMap.enabled=ne,v.dispose(),b.dispose(),x.remove(S)}return _.texture.name=`PMREM_Equirectangular_Texture_`+n.toFixed(2),_.texture.mapping=303,Se&&console.log(`[MaterialX] PMREM to Equirect Render Target:`,{width:_.width,height:_.height,mipmaps:_.texture.mipmaps?.length,roughness:n}),_}var Te=`_`,Ee=Te+`uaddressmode`,De=Te+`vaddressmode`,Oe=Te+`filtertype`,ke=`/`;function A(e,t){let n;if(e)n=[...e.data()];else{n=[];for(let e=0;e{e?s.value=e:console.warn(`[MaterialX] Failed to load texture ${i} '${c}'`)}):s.value=u;else{O&&console.log(`[MaterialX] Load texture:`,c),i.toLowerCase().includes(`normal`)?s.value=je:s.value=Ae;let n=s.value,o=a.getTexture(c)?.then(t=>(t&&(t=t.clone(),t.colorSpace=r,Fe(t,i,e)),t)).catch(e=>(console.error(`[MaterialX] Failed to load texture ${i} '${c}'`,e),n));t&&Ne(l,o),o?.then(e=>{t&&e&&Ne(l,e),e?s.value=e:console.warn(`[MaterialX] Failed to load texture ${i} '${c}'`)})}}break;case`samplerCube`:case`string`:case`surfaceshader`:case`displacementshader`:case`volumeshader`:case`lightshader`:break;default:let c=t+`:`+i;N.has(c)||(N.set(c,!0),(O||xe())&&console.warn(`MaterialX: Unsupported uniform '${i}': ${t}`));break}return s}var N=new Map;function Pe(e){let t;switch(e){case 1:t=l;break;case 2:t=s;break;case 3:t=_;break;default:t=s;break}return t}function Fe(e,t,n,r=!0){let i=t.lastIndexOf(Te),a=t.substring(0,i)||t;n.find(a+Ee)&&(e.wrapS=Pe(n.find(a+Ee).getValue().getData())),n.find(a+De)&&(e.wrapT=Pe(n.find(a+De).getValue().getData()));let s=n.find(a+Oe)?n.get(a+Oe).value:-1,l=r?c:o;s===0&&(l=r?T:C),e.minFilter=l}function Ie(e){let t=[];for(let n of e.getNodes())n.getType()===`lightshader`&&t.push(n);return t}var P={};function Le(){return{directional:P.ND_directional_light||1,point:P.ND_point_light||2,spot:P.ND_spot_light||3}}async function Re(e,t){P={};let n=t.getOptions().hwMaxActiveLightSources;e.HwShaderGenerator.unbindLightShaders(t);let r=1,i=e.createDocument();await e.readFromXmlString(i,` - - - - - - - - -`,``);let a=e.createDocument(),o=e.loadStandardLibraries(t);a.setDataLibrary(o),a.importLibrary(i);let s=Ie(a);O&&console.log(`Default lights in MaterialX document`,s),t.getOptions().hwMaxActiveLightSources=n;for(let n of s){let i=n.getNodeDef();if(O&&console.log(`Default light node definition`,i),!i)continue;let a=i.getName();O&&console.log(`Registering default light`,{lightName:a,lightDef:i}),P[a]||(O&&console.log(`Bind light shader for node`,{lightName:a,lightId:r,lightDef:i}),P[a]=r,e.HwShaderGenerator.bindLightShader(i,r++,t))}O&&console.log(`Light types bound in MaterialX context`,P)}var ze={},F=new n(0,0,0),Be=new n(0,0,-1),Ve=new t(0,0,0),He=Object.freeze({type:0,position:F,direction:Be,color:Ve,intensity:0,decay_rate:2,inner_angle:0,outer_angle:0});function Ue(e){switch(e){case`PointLight`:return`ND_point_light`;case`DirectionalLight`:return`ND_directional_light`;case`SpotLight`:return`ND_spot_light`;default:return ze[e]||(ze[e]=!0,console.warn(`MaterialX: Unsupported light type: `+e)),null}}function We(e,t){let r=[],i=t.getOptions().hwMaxActiveLightSources;for(let t of e){if(!t?.isLight)continue;let e=Ue(t.type);if(!e)continue;P[e]||O&&console.error(`MaterialX: Light type not registered in context. Make sure to register light types before using them.`,e);let i=t.getWorldPosition(new n),a,o=t.isDirectionalLight||t.isSpotLight?t:null;if(o)a=o.target.getWorldPosition(new n).sub(i).normalize();else{let e=t.getWorldQuaternion(new ne);a=new n(0,0,-1).applyQuaternion(e)}let s=t.angle,c=s*(1-t.penumbra),l=Math.cos(c),u=Math.cos(s);r.push({type:P[e],position:i.clone(),direction:a.clone(),color:t.color.clone(),intensity:t.intensity*(t.isPointLight||t.isSpotLight?683/3.1415:1),decay_rate:2,inner_angle:l,outer_angle:u})}let a=r.length;for(;r.length=0.160.0`},scripts:{test:`node --import=./tests/unit/register-json-loader.js --test tests/unit/**/*.test.js`},devDependencies:{"@needle-tools/engine":`4.x`,"@types/three":`0.169.0`,dotenv:`^17.2.4`,jsdom:`^29.0.1`,three:`npm:@needle-tools/three@^0.169.5`},files:[`index.js`,`index.d.ts`,`needle.js`,`needle.d.ts`,`src/`,`bin/`,`codegen/`,`README.md`,`CHANGELOG.md`,`package.needle.json`],publishConfig:{access:`public`,registry:`https://registry.npmjs.org/`},keywords:[`needle`,`materialx`,`material`,`shader`,`threejs`,`three.js`,`webgl`,`webgpu`,`mtlx`,`rendering`,`gltf`,`pbr`,`3d`,`wasm`]}.version;async function Je(e){if(e===`immediately`)return Ye();if(e===`network_idle`)return be().then(Ye)}var I=new class{materialXModule=null;materialXGenerator=null;materialXGenContext=null;materialXStdLib=null;materialXInitPromise=null};async function Ye(){return I.materialXInitPromise?I.materialXInitPromise:I.materialXInitPromise=(async()=>{if(!I.materialXModule){O&&console.log(`[MaterialX v${qe}] Initializing WASM module...`);try{let e=`https://cdn.needle.tools/static/materialx/1.6.0/`,t,n=globalThis.NEEDLE_MATERIALX_LOCATION;t=n===`package`||n===`bin/`||n===`./bin/`||n===`../bin/`?await Promise.all([se(()=>import(`./JsMaterialXCore.DGnKx6GJ.js`).then(e=>e.default||e),[],import.meta.url),se(()=>import(`./JsMaterialXGenShader.DFP9U7Gu.js`).then(e=>e.default||e),[],import.meta.url),se(()=>import(`./JsMaterialXGenShader.data.vJnq-SJK.js`).then(e=>e.default||e),[],import.meta.url)]):n?[n+`JsMaterialXCore.wasm`,n+`JsMaterialXGenShader.wasm`,n+`JsMaterialXGenShader.data.txt`]:[e+`JsMaterialXCore.wasm`,e+`JsMaterialXGenShader.wasm`,e+`JsMaterialXGenShader.data.txt`];let[r,i,a]=t,o=await fe({locateFile:(e,t)=>(O&&console.debug(`[MaterialX] locateFile called:`,{path:e,scriptDirectory:t}),e.includes(`JsMaterialXCore.wasm`)?r:e.includes(`JsMaterialXGenShader.wasm`)?i:e.includes(`JsMaterialXGenShader.data`)?a:t+e)});O&&console.log(`[MaterialX] module loaded`,o),I.materialXModule=o,I.materialXGenerator=o.EsslShaderGenerator.create(),I.materialXGenContext=new o.GenContext(I.materialXGenerator);let s=o.createDocument();I.materialXStdLib=o.loadStandardLibraries(I.materialXGenContext),s.setDataLibrary(I.materialXStdLib),I.materialXGenContext.getOptions().shaderInterfaceType=I.materialXModule.ShaderInterfaceType.SHADER_INTERFACE_COMPLETE,I.materialXGenContext.getOptions().hwSpecularEnvironmentMethod=I.materialXModule.HwSpecularEnvironmentMethod.SPECULAR_ENVIRONMENT_FIS,I.materialXGenContext.getOptions().hwSrgbEncodeOutput=!1,I.materialXGenContext.getOptions().hwMaxActiveLightSources=4,await Re(I.materialXModule,I.materialXGenContext),O&&console.log(`[MaterialX v${qe}] Generator initialized successfully`)}catch(e){throw console.error(`[MaterialX v${qe}] Failed to load MaterialX module:`,e),e}}})()}var Xe=class e{static get(e){return this.getEnvironment(e)}static _environments=new WeakMap;static getEnvironment(t){if(this._environments.has(t))return this._environments.get(t);let n=new e(t);return this._environments.set(t,n),n}_lights=[];_lightData=null;_lightCount=0;_initializePromise=null;_isInitialized=!1;_lastUpdateFrame=-1;constructor(e){this._scene=e,O&&console.log(`[MaterialX] Environment created`)}async initialize(e){return this._initializePromise||=this._initialize(e),this._initializePromise}update(e,t,n){if(!this._initializePromise){this.initialize(n);return}if(this._isInitialized&&this._lastUpdateFrame!==e&&(this._lastUpdateFrame=e,this.updateLighting(!1),O&&!this._debug)){let e=this._getTextures(t.environment);this._debug=!0;let n=new f;n.side=2;let r=n.clone();r.map=e.radianceTexture;let i=new D(1,1,1,1),a=new g(i,r),o=n.clone();o.map=e.irradianceTexture;let s=new g(i,o);t.add(a),t.add(s),a.name=`MaterialXRadianceCube`,a.position.set(.8,1,.01),a.scale.set(1.5,1,1),s.name=`MaterialXIrradianceCube`,s.position.set(-.8,1,-.01),s.scale.set(1.5,.98,1),console.log(`[MaterialX] environment initialized from Needle context`,{textures:e,radianceCube:a,irradianceCube:s})}}reset(){O&&console.log(`[MaterialX] Resetting environment`),this._initializePromise=null,this._isInitialized=!1,this._lastUpdateFrame=-1,this._lights=[],this._lightData=null,this._lightCount=0,this._pmremGenerator?.dispose(),this._pmremGenerator=null,this._renderer=null;for(let e of this._texturesCache.values())e.radianceTexture?.dispose(),e.irradianceTexture?.dispose();this._texturesCache.clear()}get lights(){return this._lights}get lightData(){return this._lightData}get lightCount(){return this._lightCount||0}getTextures(e){if(e.envMap)return this._getTextures(e.envMap);let t=this._scene.environment||this._scene.background;return t instanceof v?this._getTextures(t):this._getTextures(null)}_pmremGenerator=null;_renderer=null;_texturesCache=new Map;async _initialize(e){return this._isInitialized=!1,this._pmremGenerator=new y(e),this._renderer=e,this.updateLighting(!0),this._isInitialized=!0,!0}_getTextures(e){e||=Ce;let t=this._texturesCache.get(e||null);if(t)return t;if(this._scene&&this._pmremGenerator&&this._renderer&&e){O&&console.log(`[MaterialX] Generating environment textures`,e.name);let n=this._pmremGenerator.fromEquirectangular(e),r=we(this._renderer,n.texture,0,1024,512,n.height),i=we(this._renderer,n.texture,1,32,16,n.height);n.dispose(),t={radianceTexture:r.texture,irradianceTexture:i.texture}}else t={radianceTexture:null,irradianceTexture:null};return this._texturesCache.set(e||null,t),t}updateLighting=(e=!1)=>{if(this._scene){if(e){let e=[];this._scene.traverse(t=>{t.isLight&&t.visible&&e.push(t)}),e.sort((e,t)=>!!t.castShadow-+!!e.castShadow),this._lights=e}if(I.materialXGenContext){let{lightData:e,lightCount:t}=We(this._lights,I.materialXGenContext);this._lightData=e,this._lightCount=t}}};refreshLights(){this.updateLighting(!0)}},Ze=new h,L=class extends E{shaderName=null;copy(e){return super.copy(e),this.shaderName=e.shaderName,this._context=e._context,this._shader=e._shader,this._needsTangents=e._needsTangents,this.uniforms=te(e.uniforms),this.uniformsGroups=S(e.uniformsGroups),this.envMapIntensity=e.envMapIntensity,this.envMap=e.envMap,Ke(this,this._shader.getStage(`pixel`)),Ke(this,this._shader.getStage(`vertex`)),this.needsUpdate=!0,this}_context=null;_shader=null;_needsTangents=!1;constructor(e){let t,r=``,i=``,a={};if(e){r=e.shader.getSourceCode(`vertex`),i=e.shader.getSourceCode(`pixel`),r=r.replace(/^#version.*$/gm,``).trim(),i=i.replace(/^#version.*$/gm,``).trim(),r=r.replace(/\bi_position\b/g,`position`),r=r.replace(/\bi_normal\b/g,`normal`),r=r.replace(/\bi_texcoord_0\b/g,`uv`),r=r.replace(/\bi_texcoord_1\b/g,`uv1`),r=r.replace(/\bi_texcoord_2\b/g,`uv2`),r=r.replace(/\bi_texcoord_3\b/g,`uv3`),r=r.replace(/\bi_tangent\b/g,`tangent`),r=r.replace(/\bi_color_0\b/g,`color`);let n=e.parameters?.precision||`highp`;r=r.replace(/precision mediump float;/g,`precision ${n} float;`),r=r.replace(/#define M_FLOAT_EPS 1e-8/g,n===`highp`?`#define M_FLOAT_EPS 1e-8`:`#define M_FLOAT_EPS 1e-3`),i=i.replace(/precision mediump float;/g,`precision ${n} float;`),i=i.replace(/#define M_FLOAT_EPS 1e-8/g,n===`highp`?`#define M_FLOAT_EPS 1e-8`:`#define M_FLOAT_EPS 1e-3`),i=i.replace(/\bi_position\b/g,`position`),i=i.replace(/\bi_normal\b/g,`normal`),i=i.replace(/\bi_texcoord_0\b/g,`uv`),i=i.replace(/\bi_texcoord_1\b/g,`uv1`),i=i.replace(/\bi_texcoord_2\b/g,`uv2`),i=i.replace(/\bi_texcoord_3\b/g,`uv3`),i=i.replace(/\bi_tangent\b/g,`tangent`),i=i.replace(/\bi_color_0\b/g,`color`),i=i.replace(/\bu_envLightIntensity\b/g,`envMapIntensity`),r.includes(`in vec2 uv;`),r.includes(`in vec2 uv1;`),r.includes(`in vec2 uv2;`),r.includes(`in vec2 uv3;`),r=r.replace(/in\s+vec3\s+position;/g,``),r=r.replace(/in\s+vec3\s+normal;/g,``),r=r.replace(/in\s+vec2\s+uv;/g,``),r=r.replace(/in\s+vec3\s+uv;/g,``);var o=r.includes(`in vec3 uv1;`);r=r.replace(/in\s+vec3\s+uv1;/g,``);var s=r.includes(`in vec3 uv2;`);r=r.replace(/in\s+vec3\s+uv2;/g,``);var c=r.includes(`in vec3 uv3;`);r=r.replace(/in\s+vec3\s+uv3;/g,``);var l=r.includes(`in vec4 tangent;`);r=r.replace(/in\s+vec4\s+tangent;/g,``);var u=r.includes(`in vec4 color;`);r=r.replace(/in\s+vec4\s+color;/g,``),u&&(r=r.replace(/\bvec4 (\w+) = color;/g,`vec4 $1 = vec4(color, 1.0);`),r=r.replace(/(\w+) = color;/g,(e,t)=>e.includes(`vec4`)?e:RegExp(`\\bvec4\\s+${t}\\b`).test(r)?`${t} = vec4(color, 1.0);`:e));function d(e,t){return e=e.replace(RegExp(`vec3\\(${t}\\.x,\\s*1\\.0 - ${t}\\.y,\\s*${t}\\.z\\)`,`g`),`vec3(${t}.x, 1.0 - ${t}.y, 0.0)`),e=e.replace(RegExp(`\\bvec3 (\\w+) = ${t};`,`g`),`vec3 $1 = vec3(${t}, 0.0);`),e=e.replace(RegExp(`(\\w+) = ${t};`,`g`),(n,r)=>n.includes(`vec3`)?n:RegExp(`\\bvec3\\s+${r}\\b`).test(e)?`${r} = vec3(${t}, 0.0);`:n),e}if(r=d(r,`uv`),r=d(r,`uv1`),r=d(r,`uv2`),r=d(r,`uv3`),i=i.replace(/result\.direction\s*=\s*light\.position\s*-\s*position;/g,`result.direction = (light.position - position) * 10.0 / 1.0;`),i=i.replace(/out\s+vec4\s+out1;/,`layout(location = 0) out vec4 pc_fragColor; -#define gl_FragColor pc_fragColor`),i=i.replace(/^\s*out1\s*=\s*vec4\((.*)\);/gm,` - gl_FragColor = vec4($1); - #include - #include `),a={},o&&(a.USE_UV1=``),s&&(a.USE_UV2=``),c&&(a.USE_UV3=``),l&&(a.USE_TANGENT=``),u&&(a.USE_COLOR=``),r.includes(`u_worldInverseTransposeMatrix`)){r=r.replace(/void\s+main\s*\(\s*\)\s*\{/,`#include -#include -void main() {`),r=r.replace(/(\n\s*)\}(\s*)$/,`$1 // Three.js shadow support -$1 vec4 worldPosition = u_worldMatrix * vec4(position, 1.0); -$1 vec3 transformedNormal = normalize(mat3(viewMatrix) * mat3(u_worldInverseTransposeMatrix) * normal); -$1 #include -$1}$2`),i=i.replace(/(precision\s+\w+\s+float;)/,`$1 - -#include -#include -#include `);let e=Le(),t=``;for(let e=0;e<4;e++)t+=` - #if NUM_DIR_LIGHT_SHADOWS > ${e} - ${e>0?`else `:``}if (idx == ${e}) { - DirectionalLightShadow s = directionalLightShadows[${e}]; - return getShadow(directionalShadowMap[${e}], s.shadowMapSize, s.shadowIntensity, s.shadowBias, s.shadowRadius, vDirectionalShadowCoord[${e}]); - } - #endif`;let n=``;for(let e=0;e<4;e++)n+=` - #if NUM_SPOT_LIGHT_SHADOWS > ${e} - ${e>0?`else `:``}if (idx == ${e}) { - SpotLightShadow s = spotLightShadows[${e}]; - return getShadow(spotShadowMap[${e}], s.shadowMapSize, s.shadowIntensity, s.shadowBias, s.shadowRadius, vSpotLightCoord[${e}]); - } - #endif`;let a=``;for(let e=0;e<4;e++)a+=` - #if NUM_POINT_LIGHT_SHADOWS > ${e} - ${e>0?`else `:``}if (idx == ${e}) { - PointLightShadow s = pointLightShadows[${e}]; - return getPointShadow(pointShadowMap[${e}], s.shadowMapSize, s.shadowIntensity, s.shadowBias, s.shadowRadius, vPointShadowCoord[${e}], s.shadowCameraNear, s.shadowCameraFar); - } - #endif`;i=i.replace(/void sampleLightSource\(LightData light, vec3 position, out lightshader result\)/,`// MaterialX light type IDs (from registerLights) -#define MX_LIGHT_TYPE_DIRECTIONAL ${e.directional} -#define MX_LIGHT_TYPE_POINT ${e.point} -#define MX_LIGHT_TYPE_SPOT ${e.spot} - -// Per-type shadow index counters (global so they persist across sampleLightSource calls) -int mxDirShadowIdx = 0; -int mxSpotShadowIdx = 0; -int mxPointShadowIdx = 0; - -// Shadow sampling helpers using constant indices (required for sampler arrays in GLSL ES 3.0) -float sampleMxDirShadow(int idx) { - #ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - ${t} - #endif - #endif - return 1.0; -} - -float sampleMxSpotShadow(int idx) { - #ifdef USE_SHADOWMAP - #if NUM_SPOT_LIGHT_SHADOWS > 0 - ${n} - #endif - #endif - return 1.0; -} - -float sampleMxPointShadow(int idx) { - #ifdef USE_SHADOWMAP - #if NUM_POINT_LIGHT_SHADOWS > 0 - ${a} - #endif - #endif - return 1.0; -} - -void sampleLightSource(LightData light, vec3 position, out lightshader result)`),i=i.replace(/(void sampleLightSource\(LightData light, vec3 position, out lightshader result\)\s*\{[\s\S]*?)(^\})/m,`$1 // Apply Three.js shadow and increment per-type shadow counters - if (light.type == MX_LIGHT_TYPE_DIRECTIONAL) { - result.intensity *= sampleMxDirShadow(mxDirShadowIdx); - mxDirShadowIdx++; - } else if (light.type == MX_LIGHT_TYPE_SPOT) { - result.intensity *= sampleMxSpotShadow(mxSpotShadowIdx); - mxSpotShadowIdx++; - } else if (light.type == MX_LIGHT_TYPE_POINT) { - result.intensity *= sampleMxPointShadow(mxPointShadowIdx); - mxPointShadowIdx++; - } -$2`)}let f=e.parameters?.transparent??!1;t={name:e.name,uniforms:{},vertexShader:r,fragmentShader:i,glslVersion:x,depthTest:!0,depthWrite:!f,defines:a,lights:!0,...e.parameters}}super(t),e&&(this.shaderName=e.shaderName||null,this._context=e.context,this._shader=e.shader,this._needsTangents=r.includes(`in vec4 tangent;`)||r.includes(`in vec3 tangent;`),Object.assign(this.uniforms,{...p.lights,...Ge(e.shader.getStage(`vertex`),e.loaders,``),...Ge(e.shader.getStage(`pixel`),e.loaders,``),u_worldMatrix:{value:new m},u_viewProjectionMatrix:{value:new m},u_viewPosition:{value:new n},u_worldInverseTransposeMatrix:{value:new m},u_envMatrix:{value:new m},u_envRadiance:{value:null,type:`t`},u_envRadianceMips:{value:8,type:`i`},u_envRadianceSamples:{value:8,type:`i`},u_envIrradiance:{value:null,type:`t`},envMapIntensity:{value:1},u_refractionEnv:{value:!0},u_numActiveLightSources:{value:0},u_lightData:{value:[],needsUpdate:!1}}),Ke(this,e.shader.getStage(`pixel`)),Ke(this,e.shader.getStage(`vertex`)),(O||e.debug)&&(console.group(`[MaterialX]: `,this.name),console.log(`Vertex shader length: ${r.length}\n`,r),console.log(`Fragment shader length: ${i.length}\n`,i),console.groupEnd()))}_missingTangentsWarned=!1;onBeforeRender(e,t,n,r,i,a){this._needsTangents&&!r.attributes.tangent&&(this._missingTangentsWarned||(this._missingTangentsWarned=!0,console.warn(`[MaterialX] Tangents are required for this material (${this.name}) but not present in the geometry.`)));let o=this._context?.getTime?.()||he(),s=this._context?.getFrame?.()||_e(),c=Xe.get(t);c&&(c.update(s,t,e),this.updateEnvironmentUniforms(c,t)),this.updateUniforms(e,i,n,o,s)}envMapIntensity=1;envMap=null;updateUniforms=(e,t,n,r,i)=>{let a=this.uniforms;a.u_worldMatrix&&(a.u_worldMatrix.value.copy(t.matrixWorld),a.u_worldMatrix.needsUpdate=!0),a.u_viewPosition&&(a.u_viewPosition.value.setFromMatrixPosition(n.matrixWorld),a.u_viewPosition.needsUpdate=!0),a.u_viewProjectionMatrix&&(a.u_viewProjectionMatrix.value.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),a.u_viewProjectionMatrix.needsUpdate=!0),a.u_worldInverseTransposeMatrix&&(a.u_worldInverseTransposeMatrix.value.setFromMatrix3(Ze.getNormalMatrix(t.matrixWorld)),a.u_worldInverseTransposeMatrix.needsUpdate=!0),a.u_time&&(r===void 0&&(r=he()),a.u_time.value=r),a.u_frame&&(i===void 0&&(i=_e()),a.u_frame.value=i),this.uniformsNeedUpdate=!0};updateEnvironmentUniforms=(e,t)=>{let n=this.uniforms,r=e.lightData||null,i=e.lightCount||0,a=e.getTextures(this)||null;if(n.u_numActiveLightSources&&i>=0&&(n.u_numActiveLightSources.value=i),r?.length&&(n.u_lightData.value=r,`needsUpdate`in n.u_lightData&&n.u_lightData.needsUpdate===!1&&(O&&console.debug(`[MaterialX] LightData assigned (${this.name}, ${this.uuid})`,r),n.u_lightData.needsUpdate=void 0)),n.u_envRadiance){let e=n.u_envRadiance.value;n.u_envRadiance.value=a.radianceTexture,e!=a.radianceTexture&&(n.u_envRadiance.needsUpdate=!0)}if(n.u_envRadianceMips&&(n.u_envRadianceMips.value=Math.trunc(Math.log2(Math.max(a.radianceTexture?.source.data.width??0,a.radianceTexture?.source.data.height??0)))+1),n.u_envIrradiance){let e=n.u_envIrradiance.value;n.u_envIrradiance.value=a.irradianceTexture,e!=a.irradianceTexture&&(n.u_envIrradiance.needsUpdate=!0)}n.envMapIntensity&&(n.envMapIntensity.value=(this.envMapIntensity??1)*(t.environmentIntensity??1)),this.uniformsNeedUpdate=!0}},Qe=class{name=`NEEDLE_materials_mtlx`;_generatedMaterials=[];_documentReadyPromise=null;get materialX_root_data(){let e=this.parser.json.extensions?.[this.name];if(!e)return null;let t=null;return t=`documents`in e&&Array.isArray(e.documents)?e.documents:[e],t}get materials(){return this._generatedMaterials}constructor(e,t,n){this.parser=e,this.options=t,this.context=n,O&&console.log(`MaterialXLoader created for parser`),this.materialX_root_data&&Ye()}loadMaterial(e){return(this.parser.json.materials?.[e])?.extensions?.[this.name]?this._loadMaterialAsync(e):null}async _loadMaterialAsync(e){let t=this.parser.json.materials?.[e],n=t.extensions?.[this.name],r=n.document||0,i=this.materialX_root_data?.[r],a=i.mtlx||null;if(O&&console.debug(`[MaterialX] extension found in material[${e}]:`,t.extensions?.[this.name],` -→ MTLX root data:`,i),n&&a){let e={...this.options};return e.parameters||={},e.parameters?.side===void 0&&t.doubleSided!==void 0&&(e.parameters.side=t.doubleSided?2:0),tt(a,n.name,{cacheKey:this.options.cacheKey||``,getTexture:async e=>{let t=e.split(`/`).pop()?.split(`.`).shift()||``;if(i){let e=i.textures||[],n=-1;for(let r of e)if(r.name===t){let e=r.pointer,i=e.substring(10);if(n=parseInt(i),isNaN(n)||n<0){console.error(`[MaterialX] Invalid texture index in pointer:`,e);return}else O&&console.log(`[MaterialX] Texture index found:`,n,`for`,t)}if(n<0){console.error(`[MaterialX] Texture not found in parser:`,t,this.parser.json);return}return this.parser.getDependency(`texture`,n)}return null}},e,this.context).then(e=>(e instanceof L&&this._generatedMaterials.push(e),e))}let o=new b;return o.name=`MaterialX_Fallback`,o}};function $e(e,t,n){e.register(e=>new Qe(e,t||{},n||{}))}async function et(e){if(await Ye(),!I.materialXModule)throw Error(`[MaterialX] module failed to initialize`);let t=I.materialXModule.createDocument();return t.setDataLibrary(I.materialXStdLib),await I.materialXModule.readFromXmlString(t,e,``),O&&console.log(`[MaterialX] root document parsed successfully`),t}async function tt(e,t,n,r,i){try{O&&console.log(`Creating MaterialX material: ${t}`);let a=await et(e);if(!I.materialXModule||!I.materialXGenerator||!I.materialXGenContext){console.warn(`[MaterialX] WASM module not ready, returning fallback material`);let e=new b;return e.name=`MaterialX_Fallback_${t}`,e}let o=null;O&&console.log(`[MaterialX] document`,a);let s=a.getMaterialNodes();O&&console.log(`[MaterialX] Found ${s.length} material nodes in document`,s);for(let e=0;ee.getNamePath()).join(`, `)}`);let e=new b;return e.color.set(16711935),e.name=`MaterialX_NoRenderable_${t}`,e}O&&console.log(`[MaterialX] Using renderable element for shader generation`);let c=I.materialXGenerator.getTarget(),l=typeof I.materialXModule.getAlphaMode==`function`?I.materialXModule.getAlphaMode(o,c):I.materialXModule.isTransparentSurface(o,c)?`blend`:`opaque`,u=l===`mask`,d=l===`blend`,f=u||d;{let e=I.materialXGenContext.getOptions();e.hwTransparency=f,e.hwTexcoordVerticalFlip=!0,e.fileTextureVerticalFlip=!0}O&&console.log(`[MaterialX] Generating MaterialX shaders...`);let p=o.getNamePath?o.getNamePath():o.getName(),m=I.materialXGenerator.generate(p,o,I.materialXGenContext),h=new L({name:t,shaderName:null,shader:m,context:i||{},parameters:{transparent:d,alphaTest:u?1e-4:0,...r?.parameters},loaders:n});return O&&console.log(`[MaterialX] material created:`,h.name),h}catch(n){let r=n;if(typeof n==`number`&&I?.materialXModule)try{let e=I.materialXModule.getExceptionDetailedMessage,t=I.materialXModule.getExceptionMessage;r=(typeof e==`function`?e(n):null)||(typeof t==`function`?t(n):null)||`WASM exception code ${n}`}catch{r=`WASM exception code ${n}`}console.error(`[MaterialX v${qe}] Error creating MaterialX material (${t}):\n${r}\n→ MaterialX source:\n`,e);let i=new b;return i.color.set(16711935),i.name=`MaterialX_Error_${t}`,i}}var nt={createMaterialXMaterial:tt};export{Xe as a,ue as c,se as d,L as i,le as l,Qe as n,Je as o,$e as r,Ye as s,nt as t,ce as u}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/materialx.CnHmG--Y.js.gz b/Needle/MenuScene/dist/assets/materialx.CnHmG--Y.js.gz deleted file mode 100644 index a370aca..0000000 Binary files a/Needle/MenuScene/dist/assets/materialx.CnHmG--Y.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/materialx.eMaybKAQ.js b/Needle/MenuScene/dist/assets/materialx.eMaybKAQ.js deleted file mode 100644 index e39cdb3..0000000 --- a/Needle/MenuScene/dist/assets/materialx.eMaybKAQ.js +++ /dev/null @@ -1 +0,0 @@ -import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"./materialx.CnHmG--Y.js";export{o as Experimental_API,e as MaterialXEnvironment,n as MaterialXLoader,t as MaterialXMaterial,r as preloadWasm,a as ready,i as useNeedleMaterialX}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/materialx.eMaybKAQ.js.gz b/Needle/MenuScene/dist/assets/materialx.eMaybKAQ.js.gz deleted file mode 100644 index 6f658a8..0000000 Binary files a/Needle/MenuScene/dist/assets/materialx.eMaybKAQ.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/needle-engine-particles.Ce6eiXqY.js b/Needle/MenuScene/dist/assets/needle-engine-particles.Ce6eiXqY.js deleted file mode 100644 index 27a5aa5..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine-particles.Ce6eiXqY.js +++ /dev/null @@ -1 +0,0 @@ -import{Ar as e,Bt as t,Qt as n,Xt as r,Zt as i,d as a,fn as o,kr as s,qt as c,tt as l,vn as u,wn as d,yr as f}from"./three@0.169.19.js";import{$a as p,Jr as m,Ka as h,Ua as g,Xi as _,Zn as v,_a as ee,ba as te,co as ne,ct as re,dn as y,ot as b,pa as x,ra as S,un as C,va as ie}from"./needle-engine-ui.D3ZoIJG5.js";import{n as ae}from"./gltf-progressive.BBJGcb3s.js";import{yt as oe}from"./needle-engine-webxr.DiiWSXeh.js";import{a as se,c as ce,i as le,n as ue,o as de,r as w,s as fe,t as pe}from"./three-quarks.DALdLWPD.js";var me=Math.sqrt(3),he=Math.sqrt(5);.5*(me-1),(3-me)/6;var ge=(he-1)/4,T=(5-he)/20,_e=e=>Math.floor(e)|0,ve=new Float64Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]);function ye(e=Math.random){let t=be(e),n=new Float64Array(t).map(e=>ve[e%32*4]),r=new Float64Array(t).map(e=>ve[e%32*4+1]),i=new Float64Array(t).map(e=>ve[e%32*4+2]),a=new Float64Array(t).map(e=>ve[e%32*4+3]);return function(e,o,s,c){let l,u,d,f,p,m=(e+o+s+c)*ge,h=_e(e+m),g=_e(o+m),_=_e(s+m),v=_e(c+m),ee=(h+g+_+v)*T,te=h-ee,ne=g-ee,re=_-ee,y=v-ee,b=e-te,x=o-ne,S=s-re,C=c-y,ie=0,ae=0,oe=0,se=0;b>x?ie++:ae++,b>S?ie++:oe++,b>C?ie++:se++,x>S?ae++:oe++,x>C?ae++:se++,S>C?oe++:se++;let ce=+(ie>=3),le=+(ae>=3),ue=+(oe>=3),de=+(se>=3),w=+(ie>=2),fe=+(ae>=2),pe=+(oe>=2),me=+(se>=2),he=+(ie>=1),ve=+(ae>=1),ye=+(oe>=1),be=+(se>=1),E=b-ce+T,D=x-le+T,xe=S-ue+T,O=C-de+T,Se=b-w+2*T,k=x-fe+2*T,A=S-pe+2*T,j=C-me+2*T,M=b-he+3*T,N=x-ve+3*T,P=S-ye+3*T,F=C-be+3*T,I=b-1+4*T,L=x-1+4*T,Ce=S-1+4*T,R=C-1+4*T,we=h&255,z=g&255,Te=_&255,B=v&255,V=.6-b*b-x*x-S*S-C*C;if(V<0)l=0;else{let e=we+t[z+t[Te+t[B]]];V*=V,l=V*V*(n[e]*b+r[e]*x+i[e]*S+a[e]*C)}let H=.6-E*E-D*D-xe*xe-O*O;if(H<0)u=0;else{let e=we+ce+t[z+le+t[Te+ue+t[B+de]]];H*=H,u=H*H*(n[e]*E+r[e]*D+i[e]*xe+a[e]*O)}let U=.6-Se*Se-k*k-A*A-j*j;if(U<0)d=0;else{let e=we+w+t[z+fe+t[Te+pe+t[B+me]]];U*=U,d=U*U*(n[e]*Se+r[e]*k+i[e]*A+a[e]*j)}let Ee=.6-M*M-N*N-P*P-F*F;if(Ee<0)f=0;else{let e=we+he+t[z+ve+t[Te+ye+t[B+be]]];Ee*=Ee,f=Ee*Ee*(n[e]*M+r[e]*N+i[e]*P+a[e]*F)}let De=.6-I*I-L*L-Ce*Ce-R*R;if(De<0)p=0;else{let e=we+1+t[z+1+t[Te+1+t[B+1]]];De*=De,p=De*De*(n[e]*I+r[e]*L+i[e]*Ce+a[e]*R)}return 27*(l+u+d+f+p)}}function be(e){let t=new Uint8Array(512);for(let e=0;e<512/2;e++)t[e]=e;for(let n=0;n<512/2-1;n++){let r=n+~~(e()*(256-n)),i=t[n];t[n]=t[r],t[r]=i}for(let e=256;e<512;e++)t[e]=t[e-256];return t}var E=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},D=class{time=0;value=0;inTangent=1/0;inWeight;outTangent=1/0;outWeight;weightedMode;constructor(e=0,t=0){this.time=e,this.value=t}};E([_()],D.prototype,`time`,void 0),E([_()],D.prototype,`value`,void 0),E([_()],D.prototype,`inTangent`,void 0),E([_()],D.prototype,`inWeight`,void 0),E([_()],D.prototype,`outTangent`,void 0),E([_()],D.prototype,`outWeight`,void 0),E([_()],D.prototype,`weightedMode`,void 0);var xe=class e{static linearFromTo(t,n,r){let i=new e,a=new D;a.time=0,a.value=t;let o=new D;return o.time=r,o.value=n,i.keys.push(a,o),i}static constant(t){let n=new e,r=new D;return r.time=0,r.value=t,n.keys.push(r),n}keys=[];clone(){let t=new e;return t.keys=this.keys?.map(e=>{let t=new D;return t.time=e.time,t.value=e.value,t.inTangent=e.inTangent,t.inWeight=e.inWeight,t.outTangent=e.outTangent,t.outWeight=e.outWeight,t.weightedMode=e.weightedMode,t})||[],t}get duration(){return!this.keys||this.keys.length==0?0:this.keys[this.keys.length-1].time}evaluate(t){if(!this.keys||this.keys.length==0)return 0;if(this.keys.length===1||this.keys[0].time>=t)return this.keys[0].value;for(let n=0;n=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Se=ne(`debugparticles`),k;(function(e){e[e.Billboard=0]=`Billboard`,e[e.Stretch=1]=`Stretch`,e[e.HorizontalBillboard=2]=`HorizontalBillboard`,e[e.VerticalBillboard=3]=`VerticalBillboard`,e[e.Mesh=4]=`Mesh`})(k||={});var A=class{alphaKeys=[];colorKeys=[];get duration(){return 1}evaluate(e,t){let n,r=0,i=null,a=0;for(let t=0;tt&&(t=r.value)}return t}};O([_()],I.prototype,`mode`,void 0),O([_()],I.prototype,`constant`,void 0),O([_()],I.prototype,`constantMin`,void 0),O([_()],I.prototype,`constantMax`,void 0),O([_(xe)],I.prototype,`curve`,void 0),O([_(xe)],I.prototype,`curveMin`,void 0),O([_(xe)],I.prototype,`curveMax`,void 0),O([_()],I.prototype,`curveMultiplier`,void 0);var L=class e{static constant(t){let n=new e;return n.constant(t),n}static betweenTwoColors(t,n){let r=new e;return r.betweenTwoColors(t,n),r}constant(e){return this.mode=M.Color,this.color=e,this}betweenTwoColors(e,t){return this.mode=M.TwoColors,this.colorMin=e,this.colorMax=t,this}mode=M.Color;color;colorMin;colorMax;gradient;gradientMin;gradientMax;static _temp=new y(0,0,0,1);static _temp2=new y(0,0,0,1);evaluate(t,n){let r=n===void 0?Math.random():n;switch(this.mode){case M.Color:case`Color`:return this.color;case M.Gradient:case`Gradient`:return this.gradient.evaluate(t,e._temp),e._temp;case M.TwoColors:case`TwoColors`:return e._temp.lerpColors(this.colorMin,this.colorMax,r);case M.TwoGradients:case`TwoGradients`:return this.gradientMin.evaluate(t,e._temp),this.gradientMax.evaluate(t,e._temp2),e._temp.lerp(e._temp2,r);case M.RandomColor:case`RandomColor`:let n=Math.random();return this.gradientMin.evaluate(t,e._temp),this.gradientMax.evaluate(t,e._temp2),e._temp.lerp(e._temp2,n)}return e._temp.set(16777215),e._temp.alpha=1,e._temp}};O([_()],L.prototype,`mode`,void 0),O([_(y)],L.prototype,`color`,void 0),O([_(y)],L.prototype,`colorMin`,void 0),O([_(y)],L.prototype,`colorMax`,void 0),O([_(A)],L.prototype,`gradient`,void 0),O([_(A)],L.prototype,`gradientMin`,void 0),O([_(A)],L.prototype,`gradientMax`,void 0);var Ce;(function(e){e[e.Hierarchy=0]=`Hierarchy`,e[e.Local=1]=`Local`,e[e.Shape=2]=`Shape`})(Ce||={});var R=class{cullingMode;duration;emitterVelocityMode;flipRotation;gravityModifier;gravityModifierMultiplier;loop;maxParticles;playOnAwake;prewarm;ringBufferLoopRange;ringBufferMode;scalingMode;simulationSpace;simulationSpeed;startColor;startDelay;startDelayMultiplier;startLifetime;startLifetimeMultiplier;startRotation;startRotationMultiplier;startRotation3D;startRotationX;startRotationXMultiplier;startRotationY;startRotationYMultiplier;startRotationZ;startRotationZMultiplier;startSize;startSize3D;startSizeMultiplier;startSizeX;startSizeXMultiplier;startSizeY;startSizeYMultiplier;startSizeZ;startSizeZMultiplier;startSpeed;startSpeedMultiplier;stopAction;useUnscaledTime};O([_(I)],R.prototype,`gravityModifier`,void 0),O([_(L)],R.prototype,`startColor`,void 0),O([_(I)],R.prototype,`startDelay`,void 0),O([_(I)],R.prototype,`startLifetime`,void 0),O([_(I)],R.prototype,`startRotation`,void 0),O([_(I)],R.prototype,`startRotationX`,void 0),O([_(I)],R.prototype,`startRotationY`,void 0),O([_(I)],R.prototype,`startRotationZ`,void 0),O([_(I)],R.prototype,`startSize`,void 0),O([_(I)],R.prototype,`startSizeX`,void 0),O([_(I)],R.prototype,`startSizeY`,void 0),O([_(I)],R.prototype,`startSizeZ`,void 0),O([_(I)],R.prototype,`startSpeed`,void 0);var we=class{cycleCount;maxCount;minCount;probability;repeatInterval;time;count;_performed=0;reset(){this._performed=0}run(e){if(e<=this.time)return 0;let t=0;if((this.cycleCount===0||this._performed=this.time+this.repeatInterval*this._performed&&(this._performed+=1,Math.random()e.reset())}getBurst(){let e=0;if(this.burstCount>0)for(let t=0;t=this.system.time&&n.reset(),e+=Math.round(n.run(this.system.time))}return e}};O([_()],z.prototype,`enabled`,void 0),O([_()],z.prototype,`bursts`,void 0),O([_(I)],z.prototype,`rateOverTime`,void 0),O([_()],z.prototype,`rateOverTimeMultiplier`,void 0),O([_(I)],z.prototype,`rateOverDistance`,void 0),O([_()],z.prototype,`rateOverDistanceMultiplier`,void 0);var Te=class{enabled;color};O([_(L)],Te.prototype,`color`,void 0);var B=class{enabled;separateAxes;size;sizeMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;_time=0;_temp=new e;evaluate(e,t,n){if(t||=this._temp,!this.enabled)return t.x=t.y=t.z=1,t;if(this.separateAxes)t.x=this.x.evaluate(e,n)*this.xMultiplier,t.y=this.y.evaluate(e,n)*this.yMultiplier,t.z=this.z.evaluate(e,n)*this.zMultiplier;else{let r=this.size.evaluate(e,n)*this.sizeMultiplier;t.x=r}return t}};O([_(I)],B.prototype,`size`,void 0),O([_(I)],B.prototype,`x`,void 0),O([_(I)],B.prototype,`y`,void 0),O([_(I)],B.prototype,`z`,void 0);var V;(function(e){e[e.Vertex=0]=`Vertex`,e[e.Edge=1]=`Edge`,e[e.Triangle=2]=`Triangle`})(V||={});var H=class t{get type(){return P[this.shapeType]}initialize(e){this.onInitialize(e),e.position.x=this._vector.x,e.position.y=this._vector.y,e.position.z=this._vector.z}toJSON(){return this}clone(){return new t}shapeType=P.Box;enabled=!0;alignToDirection=!1;angle=0;arc=360;arcSpread;arcSpeedMultiplier;arcMode;boxThickness;position;rotation;_rotation=new l;scale;radius;radiusThickness;sphericalDirectionAmount;randomDirectionAmount;randomPositionAmount;meshShapeType;meshRenderer;_meshObj;_meshGeometry;setMesh(e){this.meshRenderer=e,e?(this._meshObj=e.sharedMeshes[Math.floor(Math.random()*e.sharedMeshes.length)],this._meshGeometry=this._meshObj.geometry):(this._meshObj=void 0,this._meshGeometry=void 0)}system;_space;_worldSpaceMatrix=new r;_worldSpaceMatrixInverse=new r;constructor(){Se&&console.log(this)}update(e,t){}onUpdate(e,t,n,r){this.system=e,this._space=n,n===N.World&&(this._worldSpaceMatrix.copy(r.matrixWorld),this._worldSpaceMatrix.elements[0]=1,this._worldSpaceMatrix.elements[5]=1,this._worldSpaceMatrix.elements[10]=1,this._worldSpaceMatrixInverse.copy(this._worldSpaceMatrix).invert())}applyRotation(e){let t=this.rotation.x!==0||this.rotation.y!==0||this.rotation.z!==0;return t&&(this._rotation.x=g.toRadians(this.rotation.x),this._rotation.y=g.toRadians(this.rotation.y),this._rotation.z=g.toRadians(this.rotation.z),this._rotation.order=`ZYX`,e.applyEuler(this._rotation)),t}_vector=new e(0,0,0);_temp=new e(0,0,0);_triangle=new f;onInitialize(e){this._vector.set(0,0,0),e.mesh=void 0,e.mesh_geometry=void 0;let t=this._temp.copy(this.position),n=this._space===N.World;n&&t.applyQuaternion(this.system.worldQuaternion);let r=this.radius;if(n&&(r*=this.system.worldScale.x),this.enabled){switch(this.shapeType){case P.Box:Se&&C.DrawWireBox(this.position,this.scale,14540253,1),this._vector.x=Math.random()*this.scale.x-this.scale.x/2,this._vector.y=Math.random()*this.scale.y-this.scale.y/2,this._vector.z=Math.random()*this.scale.z-this.scale.z/2,this._vector.add(t);break;case P.Cone:this.randomConePoint(this.position,this.angle,r,this.radiusThickness,this.arc,this.arcMode,this._vector);break;case P.Sphere:this.randomSpherePoint(this.position,r,this.radiusThickness,this.arc,this._vector);break;case P.Circle:this.randomCirclePoint(this.position,r,this.radiusThickness,this.arc,this._vector);break;case P.MeshRenderer:let n=this.meshRenderer;n?.destroyed==0&&this.setMesh(n);let i=e.mesh=this._meshObj,a=e.mesh_geometry=this._meshGeometry;if(i&&a)switch(this.meshShapeType){case V.Vertex:{let t=a.getAttribute(`position`),n=Math.floor(Math.random()*t.count);this._vector.fromBufferAttribute(t,n),this._vector.applyMatrix4(i.matrixWorld),e.mesh_normal=n}break;case V.Edge:break;case V.Triangle:{let t=a.index;if(t){let n=Math.random(),r=Math.random();n+r>1&&(n=1-n,r=1-r);let o=Math.floor(Math.random()*(t.count/3)),s=o*3,c=o*3+1,l=o*3+2;s=t.getX(s),c=t.getX(c),l=t.getX(l);let u=a.getAttribute(`position`);this._triangle.a.fromBufferAttribute(u,s),this._triangle.b.fromBufferAttribute(u,c),this._triangle.c.fromBufferAttribute(u,l),this._vector.set(0,0,0).addScaledVector(this._triangle.a,n).addScaledVector(this._triangle.b,r).addScaledVector(this._triangle.c,1-(n+r)),this._vector.applyMatrix4(i.matrixWorld),e.mesh_normal=o}}break}break;default:this._vector.set(0,0,0),h()&&!globalThis.__particlesystem_shapetype_unsupported&&(console.warn(`ParticleSystem ShapeType is not supported:`,P[this.shapeType]),globalThis.__particlesystem_shapetype_unsupported=!0);break}this.randomizePosition(this._vector,this.randomPositionAmount)}this.applyRotation(this._vector),n&&(this._vector.applyQuaternion(this.system.worldQuaternion),this._vector.add(this.system.worldPos)),Se&&C.DrawSphere(this._vector,.03,16711680,.5,!0)}_dir=new e;getDirection(e,t){if(!this.enabled)return this._dir.set(0,0,1),this._dir;switch(this.shapeType){case P.Box:this._dir.set(0,0,1);break;case P.Cone:this._dir.set(0,0,1);break;case P.Circle:case P.Sphere:let n=t.x,r=t.y,i=t.z;this._dir.set(n,r,i),this.system?.worldspace?this._dir.sub(this.system.worldPos):this._dir.sub(this.position);break;case P.MeshRenderer:let a=e.mesh,o=e.mesh_geometry;if(a&&o)switch(this.meshShapeType){case V.Vertex:{let t=o.getAttribute(`normal`),n=e.mesh_normal;this._dir.fromBufferAttribute(t,n)}break;case V.Edge:break;case V.Triangle:{let t=o.index;if(t){let n=e.mesh_normal,r=t.getX(n*3),i=t.getX(n*3+1),s=t.getX(n*3+2),c=o.getAttribute(`position`),l=x(),u=x(),d=x();l.fromBufferAttribute(c,r),u.fromBufferAttribute(c,i),d.fromBufferAttribute(c,s),l.sub(u),d.sub(u),l.cross(d),this._dir.copy(l).multiplyScalar(-1);let f=ie(a);this._dir.applyQuaternion(f)}}break}break;default:this._dir.set(0,0,1);break}return this._space===N.World&&this._dir.applyQuaternion(this.system.worldQuaternion),this.applyRotation(this._dir),this._dir.normalize(),this.spherizeDirection(this._dir,this.sphericalDirectionAmount),this.randomizeDirection(this._dir,this.randomDirectionAmount),Se&&(C.DrawSphere(t,.01,8925952,.5,!0),C.DrawDirection(t,this._dir,8925952,.5,!0)),this._dir}static _randomQuat=new d;static _tempVec=new e;randomizePosition(e,n){if(n<=0)return;let r=t._tempVec;r.set(Math.random()*2-1,Math.random()*2-1,Math.random()*2-1),r.x*=n*this.scale.x,r.y*=n*this.scale.y,r.z*=n*this.scale.z,e.add(r)}randomizeDirection(e,n){if(n===0)return;let r=t._randomQuat,i=t._tempVec;i.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),r.setFromAxisAngle(i,n*Math.random()*Math.PI),e.applyQuaternion(r)}spherizeDirection(t,n){if(n===0)return;let r=Math.random()*Math.PI*2,i=Math.acos(1-Math.random()*2),a=new e(Math.sin(i)*Math.cos(r),Math.sin(i)*Math.sin(r),Math.cos(i));t.lerp(a,n)}randomSpherePoint(e,t,n,r,i){let a=Math.random(),o=Math.random(),s=2*Math.PI*a*(r/360),c=Math.acos(2*o-1),l=g.lerp(1,1-(1-Math.random())**Math.PI,n)*t,u=e.x+this.scale.x*(-l*Math.sin(c)*Math.cos(s)),d=e.y+this.scale.y*(l*Math.sin(c)*Math.sin(s)),f=e.z+this.scale.z*(l*Math.cos(c));i.x=u,i.y=d,i.z=f}randomCirclePoint(e,t,n,r,i){let a=Math.random(),o=2*Math.PI*a*(r/360),s=g.lerp(1,1-(1-Math.random())**Math.PI,n)*t,c=e.x+this.scale.x*s*Math.cos(o),l=e.y+this.scale.y*s*Math.sin(o),u=e.z;i.x=c,i.y=l,i.z=u}_loopTime=0;_loopDirection=1;randomConePoint(e,t,n,r,i,a,o){let s=0,c=0;switch(a){case F.Random:s=Math.random(),c=Math.random();break;case F.PingPong:this._loopTime>1&&(this._loopDirection=-1),this._loopTime<0&&(this._loopDirection=1);case F.Loop:s=.5,c=Math.random(),this._loopTime+=this.system.deltaTime*this._loopDirection;break}let l=2*Math.PI*s*(i/360);switch(a){case F.PingPong:case F.Loop:l+=Math.PI+.5,l+=this._loopTime*Math.PI*2,l%=g.toRadians(i);break}let u=Math.acos(2*c-1),d=g.lerp(1,1-(1-Math.random())**Math.PI,r)*n,f=e.x+-d*Math.sin(u)*Math.cos(l),p=e.y+d*Math.sin(u)*Math.sin(l),m=e.z;o.x=f*this.scale.x,o.y=p*this.scale.y,o.z=m*this.scale.z}};O([_()],H.prototype,`shapeType`,void 0),O([_()],H.prototype,`enabled`,void 0),O([_()],H.prototype,`alignToDirection`,void 0),O([_()],H.prototype,`angle`,void 0),O([_()],H.prototype,`arc`,void 0),O([_()],H.prototype,`arcSpread`,void 0),O([_()],H.prototype,`arcSpeedMultiplier`,void 0),O([_()],H.prototype,`arcMode`,void 0),O([_(e)],H.prototype,`boxThickness`,void 0),O([_(e)],H.prototype,`position`,void 0),O([_(e)],H.prototype,`rotation`,void 0),O([_(e)],H.prototype,`scale`,void 0),O([_()],H.prototype,`radius`,void 0),O([_()],H.prototype,`radiusThickness`,void 0),O([_()],H.prototype,`sphericalDirectionAmount`,void 0),O([_()],H.prototype,`randomDirectionAmount`,void 0),O([_()],H.prototype,`randomPositionAmount`,void 0),O([_()],H.prototype,`meshShapeType`,void 0),O([_(oe)],H.prototype,`meshRenderer`,void 0);var U=class{damping;enabled;frequency;octaveCount;octaveMultiplier;octaveScale;positionAmount;quality;remap;remapEnabled;remapMultiplier;remapX;remapXMultiplier;remapY;remapYMultiplier;remapZ;remapZMultiplier;scrollSpeedMultiplier;separateAxes;strengthMultiplier;strengthX;strengthXMultiplier;strengthY;strengthYMultiplier;strengthZ;strengthZMultiplier;_noise;_time=0;update(e){this._time+=e.time.deltaTime*this.scrollSpeedMultiplier}_temp=new e;apply(e,t,n,r,i,a){if(!this.enabled)return;this._noise||=ye(()=>0);let o=this._temp.set(t.x,t.y,t.z).multiplyScalar(this.frequency),s=this._noise(o.x,o.y,o.z,this._time),c=this._noise(o.x,o.y,o.z,this._time+1e3*this.frequency),l=this._noise(o.x,o.y,o.z,this._time+2e3*this.frequency);this._temp.set(s,c,l).normalize();let u=i/a,d=this.positionAmount.evaluate(u);this.separateAxes?(this._temp.x*=d*this.strengthXMultiplier,this._temp.y*=d*this.strengthYMultiplier,this._temp.z*=d*this.strengthZMultiplier):(this.strengthX&&(d*=this.strengthX.evaluate(u)*1.5),this._temp.multiplyScalar(d)),n.x+=this._temp.x,n.y+=this._temp.y,n.z+=this._temp.z}};O([_()],U.prototype,`damping`,void 0),O([_()],U.prototype,`enabled`,void 0),O([_()],U.prototype,`frequency`,void 0),O([_()],U.prototype,`octaveCount`,void 0),O([_()],U.prototype,`octaveMultiplier`,void 0),O([_()],U.prototype,`octaveScale`,void 0),O([_(I)],U.prototype,`positionAmount`,void 0),O([_()],U.prototype,`quality`,void 0),O([_(I)],U.prototype,`remap`,void 0),O([_()],U.prototype,`remapEnabled`,void 0),O([_()],U.prototype,`remapMultiplier`,void 0),O([_(I)],U.prototype,`remapX`,void 0),O([_()],U.prototype,`remapXMultiplier`,void 0),O([_(I)],U.prototype,`remapY`,void 0),O([_()],U.prototype,`remapYMultiplier`,void 0),O([_(I)],U.prototype,`remapZ`,void 0),O([_()],U.prototype,`remapZMultiplier`,void 0),O([_()],U.prototype,`scrollSpeedMultiplier`,void 0),O([_()],U.prototype,`separateAxes`,void 0),O([_()],U.prototype,`strengthMultiplier`,void 0),O([_(I)],U.prototype,`strengthX`,void 0),O([_()],U.prototype,`strengthXMultiplier`,void 0),O([_(I)],U.prototype,`strengthY`,void 0),O([_()],U.prototype,`strengthYMultiplier`,void 0),O([_(I)],U.prototype,`strengthZ`,void 0),O([_()],U.prototype,`strengthZMultiplier`,void 0);var Ee;(function(e){e[e.PerParticle=0]=`PerParticle`,e[e.Ribbon=1]=`Ribbon`})(Ee||={});var De;(function(e){e[e.Stretch=0]=`Stretch`,e[e.Tile=1]=`Tile`,e[e.DistributePerSegment=2]=`DistributePerSegment`,e[e.RepeatPerSegment=3]=`RepeatPerSegment`})(De||={});var W=class{enabled;attachRibbonToTransform=!1;colorOverLifetime;colorOverTrail;dieWithParticles=!0;inheritParticleColor=!0;lifetime;lifetimeMultiplier;minVertexDistance=.2;mode=Ee.PerParticle;ratio=1;ribbonCount=1;shadowBias=0;sizeAffectsLifetime=!1;sizeAffectsWidth=!1;splitSubEmitterRibbons=!1;textureMode=De.Stretch;widthOverTrail;widthOverTrailMultiplier;worldSpace=!1;getWidth(e,t,n,r){let i=this.widthOverTrail.evaluate(n,r);return e*=i,e}getColor(e,t,n){let r=this.colorOverTrail.evaluate(n),i=this.colorOverLifetime.evaluate(t);e.x*=r.r*i.r,e.y*=r.g*i.g,e.z*=r.b*i.b,`alpha`in r&&`alpha`in i&&(e.w*=r.alpha*i.alpha)}};O([_()],W.prototype,`enabled`,void 0),O([_()],W.prototype,`attachRibbonToTransform`,void 0),O([_(L)],W.prototype,`colorOverLifetime`,void 0),O([_(L)],W.prototype,`colorOverTrail`,void 0),O([_()],W.prototype,`dieWithParticles`,void 0),O([_()],W.prototype,`inheritParticleColor`,void 0),O([_(I)],W.prototype,`lifetime`,void 0),O([_()],W.prototype,`lifetimeMultiplier`,void 0),O([_()],W.prototype,`minVertexDistance`,void 0),O([_()],W.prototype,`mode`,void 0),O([_()],W.prototype,`ratio`,void 0),O([_()],W.prototype,`ribbonCount`,void 0),O([_()],W.prototype,`shadowBias`,void 0),O([_()],W.prototype,`sizeAffectsLifetime`,void 0),O([_()],W.prototype,`sizeAffectsWidth`,void 0),O([_()],W.prototype,`splitSubEmitterRibbons`,void 0),O([_()],W.prototype,`textureMode`,void 0),O([_(I)],W.prototype,`widthOverTrail`,void 0),O([_()],W.prototype,`widthOverTrailMultiplier`,void 0),O([_()],W.prototype,`worldSpace`,void 0);var G=class{enabled;space=N.Local;orbitalX;orbitalY;orbitalZ;orbitalXMultiplier;orbitalYMultiplier;orbitalZMultiplier;orbitalOffsetX;orbitalOffsetY;orbitalOffsetZ;speedModifier;speedModifierMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;_system;update(e){this._system=e}_temp=new e;_temp2=new e;_temp3=new e;_hasOrbital=!1;_index=0;_orbitalMatrix=new r;init(e){this._index==0&&(e.debug=!0),this._index+=1,e.orbitx=this.orbitalX.evaluate(Math.random()),e.orbity=this.orbitalY.evaluate(Math.random()),e.orbitz=this.orbitalZ.evaluate(Math.random()),this._hasOrbital=e.orbitx!=0||e.orbity!=0||e.orbitz!=0}apply(e,t,n,r,i,a,o){if(!this.enabled)return;let s=a/o,c=this.speedModifier.evaluate(s)*this.speedModifierMultiplier,l=this.x.evaluate(s),u=this.y.evaluate(s),d=this.z.evaluate(s);if(this._temp.set(-l,u,d),this._system&&this._system.main.simulationSpace===N.World&&this._temp.applyQuaternion(this._system.worldQuaternion),this._hasOrbital&&this._system?.worldPos){let e=this._temp2.set(n.x,n.y,n.z),t=this.orbitalXMultiplier,a=this.orbitalYMultiplier,o=this.orbitalZMultiplier,s=c*Math.PI*2*10,l=Math.cos(s*t),u=Math.sin(s*t),d=Math.cos(s*a),f=Math.sin(s*a),p=Math.cos(s*o),m=Math.sin(s*o),h=e.x*(d*p)+e.y*(d*m)+e.z*-f,g=e.x*(u*f*p-l*m)+e.y*(u*f*m+l*p)+e.z*(u*d),_=e.x*(l*f*p+u*m)+e.y*(l*f*m-u*p)+e.z*(l*d),v=this._temp3.set(e.x-h,e.y-g,e.z-_);v.normalize(),v.multiplyScalar(.2/i*Math.max(this.orbitalXMultiplier,this.orbitalYMultiplier,this.orbitalZMultiplier)),r.x+=v.x,r.y+=v.y,r.z+=v.z}r.x+=this._temp.x,r.y+=this._temp.y,r.z+=this._temp.z,r.x*=c,r.y*=c,r.z*=c}};O([_()],G.prototype,`enabled`,void 0),O([_()],G.prototype,`space`,void 0),O([_(I)],G.prototype,`orbitalX`,void 0),O([_(I)],G.prototype,`orbitalY`,void 0),O([_(I)],G.prototype,`orbitalZ`,void 0),O([_()],G.prototype,`orbitalXMultiplier`,void 0),O([_()],G.prototype,`orbitalYMultiplier`,void 0),O([_()],G.prototype,`orbitalZMultiplier`,void 0),O([_()],G.prototype,`orbitalOffsetX`,void 0),O([_()],G.prototype,`orbitalOffsetY`,void 0),O([_()],G.prototype,`orbitalOffsetZ`,void 0),O([_(I)],G.prototype,`speedModifier`,void 0),O([_()],G.prototype,`speedModifierMultiplier`,void 0),O([_(I)],G.prototype,`x`,void 0),O([_()],G.prototype,`xMultiplier`,void 0),O([_(I)],G.prototype,`y`,void 0),O([_()],G.prototype,`yMultiplier`,void 0),O([_(I)],G.prototype,`z`,void 0),O([_()],G.prototype,`zMultiplier`,void 0);var Oe;(function(e){e[e.Lifetime=0]=`Lifetime`,e[e.Speed=1]=`Speed`,e[e.FPS=2]=`FPS`})(Oe||={});var ke;(function(e){e[e.Grid=0]=`Grid`,e[e.Sprites=1]=`Sprites`})(ke||={});var Ae;(function(e){e[e.Custom=0]=`Custom`,e[e.Random=1]=`Random`,e[e.MeshIndex=2]=`MeshIndex`})(Ae||={});var je;(function(e){e[e.WholeSheet=0]=`WholeSheet`,e[e.SingleRow=1]=`SingleRow`})(je||={});var K=class{animation;enabled;cycleCount;frameOverTime;frameOverTimeMultiplier;numTilesX;numTilesY;startFrame;startFrameMultiplier;rowMode;rowIndex;spriteCount;timeMode;sampleOnceAtStart(){if(this.timeMode===Oe.Lifetime)switch(this.frameOverTime.mode){case j.Constant:case j.TwoConstants:case j.TwoCurves:case j.Curve:return!0}return!1}getStartIndex(){return this.sampleOnceAtStart()?Math.random()*(this.numTilesX*this.numTilesY):0}evaluate(e){if(!this.sampleOnceAtStart())return this.getIndex(e)}getIndex(e){let t=this.numTilesX*this.numTilesY;e*=this.cycleCount;let n=this.frameOverTime.evaluate(e%1);return n*=this.frameOverTimeMultiplier,n*=t,n%=t,n=Math.floor(n),n}};O([_()],K.prototype,`animation`,void 0),O([_()],K.prototype,`enabled`,void 0),O([_()],K.prototype,`cycleCount`,void 0),O([_(I)],K.prototype,`frameOverTime`,void 0),O([_()],K.prototype,`frameOverTimeMultiplier`,void 0),O([_()],K.prototype,`numTilesX`,void 0),O([_()],K.prototype,`numTilesY`,void 0),O([_(I)],K.prototype,`startFrame`,void 0),O([_()],K.prototype,`startFrameMultiplier`,void 0),O([_()],K.prototype,`rowMode`,void 0),O([_()],K.prototype,`rowIndex`,void 0),O([_()],K.prototype,`spriteCount`,void 0),O([_()],K.prototype,`timeMode`,void 0);var q=class{enabled;separateAxes;x;xMultiplier;y;yMultiplier;z;zMultiplier;evaluate(e,t){return this.enabled?this.separateAxes?0:this.z.evaluate(e,t)*-1:0}};O([_()],q.prototype,`enabled`,void 0),O([_()],q.prototype,`separateAxes`,void 0),O([_(I)],q.prototype,`x`,void 0),O([_()],q.prototype,`xMultiplier`,void 0),O([_(I)],q.prototype,`y`,void 0),O([_()],q.prototype,`yMultiplier`,void 0),O([_(I)],q.prototype,`z`,void 0),O([_()],q.prototype,`zMultiplier`,void 0);var J=class{enabled;range;separateAxes;x;xMultiplier;y;yMultiplier;z;zMultiplier;evaluate(e,t){if(!this.enabled)return 0;if(!this.separateAxes){let e=g.lerp(this.range.x,this.range.y,t);return this.z.evaluate(e)*-1}return 0}};O([_()],J.prototype,`enabled`,void 0),O([_()],J.prototype,`range`,void 0),O([_()],J.prototype,`separateAxes`,void 0),O([_(I)],J.prototype,`x`,void 0),O([_()],J.prototype,`xMultiplier`,void 0),O([_(I)],J.prototype,`y`,void 0),O([_()],J.prototype,`yMultiplier`,void 0),O([_(I)],J.prototype,`z`,void 0),O([_()],J.prototype,`zMultiplier`,void 0);var Y=class{enabled;dampen;drag;dragMultiplier;limit;limitMultiplier;separateAxes;limitX;limitXMultiplier;limitY;limitYMultiplier;limitZ;limitZMultiplier;multiplyDragByParticleSize=!1;multiplyDragByParticleVelocity=!1;space;_temp=new e;_temp2=new e;apply(e,t,n,r,i,a,o){if(this.enabled){let e=this.limit.evaluate(i)*this.limitMultiplier;if(t.length()>e){this._temp.copy(t).normalize().multiplyScalar(e);let r=this.dampen*.5;t.x=g.lerp(t.x,this._temp.x,r),t.y=g.lerp(t.y,this._temp.y,r),t.z=g.lerp(t.z,this._temp.z,r),n.x=g.lerp(n.x,this._temp.x,r),n.y=g.lerp(n.y,this._temp.y,r),n.z=g.lerp(n.z,this._temp.z,r)}}}};O([_()],Y.prototype,`enabled`,void 0),O([_()],Y.prototype,`dampen`,void 0),O([_(I)],Y.prototype,`drag`,void 0),O([_()],Y.prototype,`dragMultiplier`,void 0),O([_(I)],Y.prototype,`limit`,void 0),O([_()],Y.prototype,`limitMultiplier`,void 0),O([_()],Y.prototype,`separateAxes`,void 0),O([_(I)],Y.prototype,`limitX`,void 0),O([_()],Y.prototype,`limitXMultiplier`,void 0),O([_(I)],Y.prototype,`limitY`,void 0),O([_()],Y.prototype,`limitYMultiplier`,void 0),O([_(I)],Y.prototype,`limitZ`,void 0),O([_()],Y.prototype,`limitZMultiplier`,void 0),O([_()],Y.prototype,`multiplyDragByParticleSize`,void 0),O([_()],Y.prototype,`multiplyDragByParticleVelocity`,void 0),O([_()],Y.prototype,`space`,void 0);var Me;(function(e){e[e.Initial=0]=`Initial`,e[e.Current=1]=`Current`})(Me||={});var Ne=class t{enabled;curve;curveMultiplier;mode;clone(){let e=new t;return e.enabled=this.enabled,e.curve=this.curve?.clone(),e.curveMultiplier=this.curveMultiplier,e.mode=this.mode,e}system;get _lastWorldPosition(){return this.system._iv_lastWorldPosition||(this.system._iv_lastWorldPosition=new e),this.system._iv_lastWorldPosition}get _velocity(){return this.system._iv_velocity||(this.system._iv_velocity=new e),this.system._iv_velocity}_temp=new e;_firstUpdate=!0;awake(e){this.system=e,this.reset()}reset(){this._firstUpdate=!0}update(e){this.enabled&&this.system.worldspace!==!1&&(this._firstUpdate?(this._firstUpdate=!1,this._velocity.set(0,0,0),this._lastWorldPosition.copy(this.system.worldPos)):this._lastWorldPosition&&(this._velocity.copy(this.system.worldPos).sub(this._lastWorldPosition).multiplyScalar(1/this.system.deltaTime),this._lastWorldPosition.copy(this.system.worldPos)))}applyInitial(e){if(this.enabled&&this.system.worldspace!==!1&&this.mode===Me.Initial){let t=this.curve.evaluate(Math.random(),Math.random());this._temp.copy(this._velocity).multiplyScalar(t),e.x+=this._temp.x,e.y+=this._temp.y,e.z+=this._temp.z}}_frames=0;applyCurrent(e,t,n){if(this.enabled&&this.system&&this.system.worldspace!==!1&&this.mode===Me.Current){let r=this.curve.evaluate(t,n);this._temp.copy(this._velocity).multiplyScalar(r),e.x+=this._temp.x,e.y+=this._temp.y,e.z+=this._temp.z}}};O([_()],Ne.prototype,`enabled`,void 0),O([_(I)],Ne.prototype,`curve`,void 0),O([_()],Ne.prototype,`curveMultiplier`,void 0),O([_()],Ne.prototype,`mode`,void 0);var X=class{enabled;range;separateAxes;size;sizeMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;evaluate(e,t,n,r){let i=e.length(),a=g.remap(i,this.range.x,this.range.y,0,1),o=this.size.evaluate(a,n);return r.x*=o,r.y*=o,r.z*=o,r}};O([_()],X.prototype,`enabled`,void 0),O([_(s)],X.prototype,`range`,void 0),O([_()],X.prototype,`separateAxes`,void 0),O([_(I)],X.prototype,`size`,void 0),O([_()],X.prototype,`sizeMultiplier`,void 0),O([_(I)],X.prototype,`x`,void 0),O([_()],X.prototype,`xMultiplier`,void 0),O([_(I)],X.prototype,`y`,void 0),O([_()],X.prototype,`yMultiplier`,void 0),O([_(I)],X.prototype,`z`,void 0),O([_()],X.prototype,`zMultiplier`,void 0);var Pe=class{enabled;range;color;evaluate(e,t,n){let r=e.length(),i=g.remap(r,this.range.x,this.range.y,0,1),a=this.color.evaluate(i,t);n.x*=a.r,n.y*=a.g,n.z*=a.b,`alpha`in a&&(n.w*=a.alpha)}};O([_()],Pe.prototype,`enabled`,void 0),O([_(s)],Pe.prototype,`range`,void 0),O([_(L)],Pe.prototype,`color`,void 0),new e(1,1,1),new e(0,0,1);var Fe=class{system;particleSystem;subSystem;subParticleSystem;type=`NeedleParticleSubEmitter`;emitterType;emitterProbability;q_=new d;v_=new e;v2_=new e;_emitterMatrix=new de;_circularBuffer;constructor(e,t,n,r){this.system=e,this.particleSystem=t,this.subSystem=n,this.subParticleSystem=r,this.subParticleSystem&&this.subParticleSystem&&(this.subParticleSystem.onlyUsedByOther=!0),this._circularBuffer=new p(()=>new de,1e3)}clone(){throw Error(`Method not implemented.`)}initialize(e){e.emissionState={burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0},this._emitterMatrix.copy(this.subSystem.matrixWorld).invert().premultiply(this.system.matrixWorld),this._emitterMatrix.setPosition(0,0,0),this.emitterType===ze.Birth&&this.run(e)}update(e,t){this.run(e)}frameUpdate(e){}toJSON(){}reset(){}run(e){if(this.subSystem.currentParticles>=this.subSystem.main.maxParticles||!this.subParticleSystem||!e.emissionState||this.emitterProbability&&Math.random()>this.emitterProbability)return;let t=this.system.deltaTime;if(this.emitterType===ze.Death){let n=e.life;if(e[Qe]!==void 0&&(n=e[Qe]),!(e.age+t*1.2>=n))return;let r=this.subSystem.main.maxParticles-this.subSystem.currentParticles;e.emissionState.waitEmiting=r}let n=new de;n.set(1,0,0,e.position.x,0,1,0,e.position.y,0,0,1,e.position.z,0,0,0,1),this.particleSystem.worldSpace||n.multiplyMatrices(this._emitterMatrix,n),this.subParticleSystem.emit(t,e.emissionState,n)}},Z=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ie=ne(`debugparticles`),Le=ne(`noprogressive`),Re=ne(`debugprogressive`),ze;(function(e){e[e.Birth=0]=`Birth`,e[e.Collision=1]=`Collision`,e[e.Death=2]=`Death`,e[e.Trigger=3]=`Trigger`,e[e.Manual=4]=`Manual`})(ze||={});var Q=class extends b{renderMode;particleMaterial;trailMaterial;particleMesh;maxParticleSize;minParticleSize;velocityScale;cameraVelocityScale;lengthScale;start(){if(this.maxParticleSize!==.5&&this.minParticleSize!==0&&h()){let e=`ParticleSystem \"${this.name}\" has non-default min/max particle size. This may not render correctly. Please set min size to 0 and the max size to 0.5 and use the \"StartSize\" setting instead`;console.warn(e)}}get transparent(){return this.particleMaterial?.transparent??!1}getMaterial(e=!1){let r=e===!0&&this.trailMaterial?this.trailMaterial:this.particleMaterial;if(r){if(r.type===`MeshStandardMaterial`){Ie&&console.debug(`ParticleSystemRenderer.getMaterial: MeshStandardMaterial detected, converting to MeshBasicMaterial. See https://github.com/Alchemist0823/three.quarks/issues/101`),`map`in r&&r.map&&(r.map.colorSpace=t,r.map.premultiplyAlpha=!1);let i=new n;i.copy(r),e?this.trailMaterial=i:this.particleMaterial=i}r.map&&(r.map.colorSpace=t,r.map.premultiplyAlpha=!1),e&&r.side===0&&(r=r.clone(),r.side=1,e?this.trailMaterial=r:this.particleMaterial=r)}return r&&!Le&&r._didRequestTextureLOD===void 0&&(r._didRequestTextureLOD=0,Re&&console.log(`Load material LOD`,r.name),ae.assignTextureLOD(r,0)),r}getMesh(e){let t=null;if(!t&&(this.particleMesh instanceof i&&(t=this.particleMesh.geometry),t===null)){t=new u(1,1);let e=t.attributes.uv;for(let t=0;t=this.system.maxParticles)return 0;let e=this.system.emission.rateOverTime.evaluate(this.system.time/this.system.duration,Math.random());if(this.system.deltaTime>0){let t=this.system.emission.rateOverDistance.evaluate(this.system.time/this.system.duration,Math.random()),n=this._lastDistance/this.system.deltaTime*t;Number.isFinite(n)||(n=0),e+=n}let t=this.system.emission.getBurst();t>0&&(e+=t/this.system.deltaTime);let n=this.system.maxParticles-this.system.currentParticles;return g.clamp(e,0,n/this.system.deltaTime)}},We=class extends Ve{genValue(){return this.system.isPlaying,0}},Ge=class{system;get context(){return this.system.context}constructor(e){this.type=Object.getPrototypeOf(this).constructor.name||`ParticleSystemBaseBehaviour`,e&&(this.system=e)}type;initialize(e){}update(e,t){}frameUpdate(e){}toJSON(){throw Error(`Method not implemented.`)}clone(){throw Error(`Method not implemented.`)}reset(){}},Ke=class extends Ge{type=`NeedleTextureSheet`;update(e,t){let n=this.system.textureSheetAnimation;if(n.enabled){let t=e.age/e.life,r=n.evaluate(t);r!==void 0&&(e.uvTile=r)}}},qe=Symbol(`particleRotation`),Je=class extends Ge{type=`NeedleRotation`;initialize(e){e[qe]=Math.random()}update(e,t){if(e.rotation===void 0)return;let n=e.age/e.life;if(typeof e.rotation==`number`&&(this.system.rotationOverLifetime.enabled?e.rotation+=this.system.rotationOverLifetime.evaluate(n,e[qe])*t:this.system.renderer.renderMode===k.Billboard&&(e.rotation=Math.PI),this.system.rotationBySpeed.enabled)){let r=e.velocity.length();e.rotation+=this.system.rotationBySpeed.evaluate(n,r)*t}}},Ye=Symbol(`sizeLerpFactor`),Xe=new e,Ze=class extends Ge{type=`NeedleSize`;_minSize=0;_maxSize=1;initialize(e){e[Ye]=Math.random(),this._minSize=this.system.renderer.minParticleSize,this._maxSize=this.system.renderer.maxParticleSize}update(e,t){let n=e.age/e.life,r=1;this.system.sizeOverLifetime.enabled&&(r*=this.system.sizeOverLifetime.evaluate(n,void 0,e[Ye]).x);let i=1;this.system.renderer.renderMode!==k.Mesh&&(i=this.system.worldScale.x/this.system.cameraScale);let a=x(e.startSize).multiplyScalar(r*i);if(e.size.set(a.x,a.y,a.z),this.system.localspace){let t=gt(this.system,Xe);e.size.x*=t.x,e.size.y*=t.y,e.size.z*=t.z}}},Qe=Symbol(`particleLife`),$e=Symbol(`trailLifetime`),et=Symbol(`trailStartLength`),tt=Symbol(`trailWidthRandom`),nt=class extends Ge{type=`NeedleTrail`;initialize(e){e instanceof fe&&(e[Qe]=e.life,this.system.trails.enabled&&this.system.trails.dieWithParticles===!1&&(e[$e]=this.system.trails.lifetime.evaluate(Math.random(),Math.random()),e.life+=e[$e]),e[et]=e.length,e[tt]=Math.random())}update(e){if(this.system.trails?.enabled&&e instanceof fe){let t=e,n=e.age/e[Qe],r=e.previous.values(),i=e.previous.length;for(let a=0;ae[Qe]){e.velocity.set(0,0,0);let n=(e.age-e[Qe])/e[$e];t.length=g.lerp(e[et],0,n)}}}},rt=Symbol(`startVelocity`),it=Symbol(`gravityModifier`),at=Symbol(`gravitySpeed`),ot=Symbol(`velocity lerp factor`),st=new e;new d;var ct=class extends Ge{type=`NeedleVelocity`;_gravityDirection=new e;initialize(e){let t=this.system.main.simulationSpeed;e.startSpeed=this.system.main.startSpeed.evaluate(Math.random(),Math.random());let n=this.system.shape.getDirection(e,e.position);e.velocity.x=n.x*e.startSpeed,e.velocity.y=n.y*e.startSpeed,e.velocity.z=n.z*e.startSpeed,this.system.inheritVelocity?.enabled&&this.system.inheritVelocity.applyInitial(e.velocity),e[rt]?e[rt].copy(e.velocity):e[rt]=e.velocity.clone();let r=this.system.main.gravityModifier.evaluate(Math.random(),Math.random());e[it]=r*t,e[at]=r*t*.5,e[ot]=Math.random(),this.system.velocityOverLifetime?.init(e),this._gravityDirection.set(0,-1,0),this.system.main.simulationSpace===N.Local&&this._gravityDirection.applyQuaternion(this.system.worldQuaternionInverted).normalize()}update(e,t){let n=e[rt],r=e[it];if(r!==0){let i=r*e[at];st.copy(this._gravityDirection).multiplyScalar(i),e[at]+=t*.05,n.add(st)}e.velocity.copy(n);let i=e.age/e.life;this.system.inheritVelocity?.enabled&&this.system.inheritVelocity.applyCurrent(e.velocity,i,e[ot]);let a=this.system.noise;a.enabled&&a.apply(0,e.position,e.velocity,t,e.age,e.life);let o=this.system.sizeBySpeed;o?.enabled&&(e.size=o.evaluate(e.velocity,i,e[ot],e.size));let s=this.system.colorBySpeed;s?.enabled&&s.evaluate(e.velocity,e[ot],e.color);let c=this.system.velocityOverLifetime;c.enabled&&c.apply(e,0,e.position,e.velocity,t,e.age,e.life);let l=this.system.limitVelocityOverLifetime;if(l.enabled&&l.apply(e.position,n,e.velocity,e.size,i,t,1),this.system.worldspace){let t=this.system.worldScale;e.velocity.x*=t.x,e.velocity.y*=t.y,e.velocity.z*=t.z}}},lt=Symbol(`colorLerpFactor`),ut=new y(1,1,1,1),dt=new y(1,1,1,1),ft=class extends Ge{type=`NeedleColor`;initialize(e){}_init(e){let t=this.system.renderer.particleMaterial;dt.copy(this.system.main.startColor.evaluate(Math.random())),t?.color&&(ut.copy(t.color),dt.multiply(ut)),dt.convertLinearToSRGB(),e.startColor.set(dt.r,dt.g,dt.b,dt.alpha),e.color.copy(e.startColor),e[lt]=Math.random()}update(e,t){if(e.age===0&&this._init(e),this.system.colorOverLifetime.enabled){let t=e.age/e.life,n=this.system.colorOverLifetime.color.evaluate(t,e[lt]);e.color.set(n.r,n.g,n.b,`alpha`in n?n.alpha:1).multiply(e.startColor)}else e.color.copy(e.startColor)}},pt=class{system;emission;get anim(){return this.system.textureSheetAnimation}constructor(e){this.system=e,this.emission=new Ue(this.system)}get prewarm(){return!1}get material(){return this.system.renderer.getMaterial(this.system.trails.enabled)}get layers(){return this.system.gameObject.layers}update(){this.emission.update()}autoDestroy;get looping(){return this.system.main.loop}get duration(){return this.system.duration}get shape(){return this.system.shape}get startLife(){return new Be(this.system.main.startLifetime)}get startSpeed(){return new Be(this.system.main.startSpeed)}get startRotation(){return new Be(this.system.main.startRotation)}get startSize(){return new Be(this.system.main.startSize)}startLength;get startColor(){return new le(new ce(1,1,1,1))}get emissionOverTime(){return this.emission}get emissionOverDistance(){return new We(this.system)}emissionBursts;onlyUsedByOther;behaviors=[];get instancingGeometry(){return this.system.renderer.getMesh(this.system.renderer.renderMode).geometry}get renderMode(){if(this.system.trails.enabled===!0)return w.Trail;switch(this.system.renderer.renderMode){case k.Billboard:return w.BillBoard;case k.Stretch:return w.StretchedBillBoard;case k.HorizontalBillboard:return w.HorizontalBillBoard;case k.VerticalBillboard:return w.VerticalBillBoard;case k.Mesh:return w.Mesh}return w.BillBoard}rendererEmitterSettings={startLength:new se(220),followLocalOrigin:!1};get speedFactor(){let e=this.system.main.simulationSpeed;return this.system.renderer?.renderMode===k.Stretch&&(e*=this.system.renderer.velocityScale??1),e}flatWhiteTexture;clonedTexture={original:void 0,clone:void 0};get texture(){let e=this.material;if(e&&e.map){let n=e.map;if(this.clonedTexture.original!==n||!this.clonedTexture.clone){let e=n.clone();e.premultiplyAlpha=!1,e.colorSpace=t,this.clonedTexture.original=n,this.clonedTexture.clone=e}return this.clonedTexture.clone}return this.flatWhiteTexture||=v(new y(1,1,1,1),1),this.flatWhiteTexture}get startTileIndex(){return new He(this.system)}get uTileCount(){return this.anim.enabled?this.anim?.numTilesX:void 0}get vTileCount(){return this.anim.enabled?this.anim?.numTilesY:void 0}get renderOrder(){return 1}get blending(){return this.system.renderer.particleMaterial?.blending??1}get transparent(){return this.system.renderer.transparent}get worldSpace(){return this.system.main.simulationSpace===N.World}},mt=class{burstParticleIndex=0;burstParticleCount=0;isBursting=!1;travelDistance=0;previousWorldPos;burstIndex=0;burstWaveIndex=0;time=0;waitEmiting=0},$=class t extends b{play(e=!1){e&&re.foreachComponent(this.gameObject,e=>{e instanceof t&&e!==this&&e.play(!1)},!0),this._isPlaying=!0,this._particleSystem&&(this._particleSystem.emissionState.time=0,this._particleSystem.emitEnded=!1),this.emission?.reset()}pause(e=!0){e&&re.foreachComponent(this.gameObject,e=>{e instanceof t&&e!==this&&e.pause(!1)},!0),this._isPlaying=!1}stop(e=!0,n=!1){e&&re.foreachComponent(this.gameObject,e=>{e instanceof t&&e!==this&&e.stop(!1,n)},!0),this._isPlaying=!1,this._time=0,n&&this.reset()}reset(){this._time=0,this._particleSystem&&(this._particleSystem.particleNum=0,this._particleSystem.emissionState.time=0,this._particleSystem.emitEnded=!1,this.emission?.reset())}_state;emit(e){if(this._particleSystem){this.onUpdate(),e=Math.min(e,this.maxParticles-this.currentParticles),this._state||=new mt,this._state.waitEmiting=e,this._state.time=0;let t=this._particleSystem.emitEnded;this._particleSystem.emitEnded=!1,this._particleSystem.emit(this.deltaTime,this._state,this._particleSystem.emitter.matrixWorld),this._particleSystem.emitEnded=t}}get playOnAwake(){return this.main.playOnAwake}set playOnAwake(e){this.main.playOnAwake=e}colorOverLifetime;main;emission;sizeOverLifetime;shape;noise;trails;velocityOverLifetime;limitVelocityOverLifetime;inheritVelocity;colorBySpeed;textureSheetAnimation;rotationOverLifetime;rotationBySpeed;sizeBySpeed;get renderer(){return this._renderer}get isPlaying(){return this._isPlaying}get currentParticles(){return this._particleSystem?.particleNum??0}get maxParticles(){return this.main.maxParticles}get time(){return this._time}get duration(){return this.main.duration}get deltaTime(){return this.context.time.deltaTime*this.main.simulationSpeed}get scale(){return this.gameObject.scale.x}get cameraScale(){return this._cameraScale}_cameraScale=1;get container(){return this._container}get worldspace(){return this.main.simulationSpace===N.World}get localspace(){return this.main.simulationSpace===N.Local}__worldQuaternion=new d;get worldQuaternion(){return this.__worldQuaternion}_worldQuaternionInverted=new d;get worldQuaternionInverted(){return this._worldQuaternionInverted}_worldScale=new e;get worldScale(){return this._worldScale}_worldPositionFrame=-1;_worldPos=new e;get worldPos(){return this._worldPositionFrame!==this.context.time.frame&&(this._worldPositionFrame=this.context.time.frame,ee(this.gameObject,this._worldPos)),this._worldPos}get matrixWorld(){return this._container.matrixWorld}get isSubsystem(){return this._isUsedAsSubsystem}addBehaviour(e){return this._particleSystem?(e instanceof Ge&&(e.system=this),Ie&&console.debug(`Add custom ParticleSystem Behaviour`,e),this._particleSystem.addBehavior(e),!0):!1}removeBehaviour(e){if(!this._particleSystem)return!1;let t=this._particleSystem.behaviors,n=t.indexOf(e);return n===-1?!0:((h()||Ie)&&console.debug(`Remove custom ParticleSystem Behaviour`,n,e),t.splice(n,1),!0)}removeAllBehaviours(){return this._particleSystem?(this._particleSystem.behaviors.length=0,!0):!1}get behaviours(){return this._particleSystem?this._particleSystem.behaviors:null}get particleSystem(){return this._particleSystem??null}_renderer;_batchSystem;_particleSystem;_interface;_container;_time=0;_isPlaying=!0;_isUsedAsSubsystem=!1;_didPreWarm=!1;set bursts(e){for(let t=0;t0&&console.log(`SubEmitters: `,e,this),this._subEmitterSystems=e}_subEmitterSystems;onAfterDeserialize(e){if(this._subEmitterSystems&&Array.isArray(this._subEmitterSystems))for(let e of this._subEmitterSystems)e._deserialize(this.context,this.gameObject)}awake(){if(this._worldPositionFrame=-1,this._renderer=this.gameObject.getComponent(Q),!this.main)throw Error(`Not Supported: ParticleSystem needs a serialized MainModule. Creating new particle systems at runtime is currently not supported.`);this._container=new o,this._container.matrixAutoUpdate=!1,this.context.scene.add(this._container),this._batchSystem=new pe,this._batchSystem.name=this.gameObject.name,this._container.add(this._batchSystem),this._interface=new pt(this),this._particleSystem=new ue(this._interface),this._particleSystem.addBehavior(new Ze(this)),this._particleSystem.addBehavior(new ft(this)),this._particleSystem.addBehavior(new Ke(this)),this._particleSystem.addBehavior(new Je(this)),this._particleSystem.addBehavior(new ct(this)),this._particleSystem.addBehavior(new nt(this)),this._batchSystem.addSystem(this._particleSystem);let e=this._particleSystem.emitter;this.context.scene.add(e),this.inheritVelocity.system&&this.inheritVelocity.system!==this&&(this.inheritVelocity=this.inheritVelocity.clone()),this.inheritVelocity.awake(this),Ie&&(console.log(this),this.gameObject.add(new a(1)))}start(){this.addSubParticleSystems(),this.updateLayers(),this.renderer.particleMesh instanceof i&&this._interface.renderMode==w.Mesh&&ae.assignMeshLOD(this.renderer.particleMesh,0).then(e=>{e&&this.particleSystem&&this._interface.renderMode==w.Mesh&&(this.particleSystem.instancingGeometry=e)})}onDestroy(){this._container?.removeFromParent(),this._batchSystem?.removeFromParent(),this._particleSystem?.emitter.removeFromParent(),this._particleSystem?.dispose()}onEnable(){this.main&&(this.inheritVelocity&&(this.inheritVelocity.system=this),this._batchSystem&&(this._batchSystem.visible=!0),this.playOnAwake&&this.play(),this._isPlaying=this.playOnAwake)}onDisable(){this._batchSystem&&(this._batchSystem.visible=!1)}onBeforeRender(){this.main&&(this._didPreWarm===!1&&this.main?.prewarm===!0&&(this._didPreWarm=!0,this.preWarm()),this.onUpdate(),this.onSimulate(this.deltaTime))}preWarm(){if(!this.emission?.enabled||this.emission.rateOverTime.getMax()<=0)return;let e=1/60,t=this.main.duration,n=this.main.startLifetime.getMax(),r=Math.min(Math.max(t,n)/Math.max(.01,this.main.simulationSpeed),1e3),i=Math.ceil(r/e),a=Date.now();Ie&&console.log(`Particles ${this.name} - Prewarm for ${i} frames (${r} sec). Duration: ${t}, Lifetime: ${n}`);for(let t=0;t=this.maxParticles);t++){let t=Date.now()-a;if(t>2e3){console.warn(`Particles ${this.name} - Prewarm took too long. Aborting: ${t}`);break}this.onUpdate(),this.onSimulate(e)}}_lastBatchesCount=-1;onSimulate(e){if(this._batchSystem){let t=this.context.time.frameCount%60==0;this._lastBatchesCount!==this._batchSystem.batches.length&&(this._lastBatchesCount=this._batchSystem.batches.length,t=!0),t&&this.updateLayers(),this._batchSystem.update(e)}this._time+=e,this._time>this.duration&&(this._time=0)}updateLayers(){if(this._batchSystem)for(let e=0;ei.map(i=>d[i]); -import{n as e,r as t,t as n}from"./rolldown-runtime.CYVBeYYp.js";import{d as r}from"./materialx.CnHmG--Y.js";import{$n as i,A as a,Ar as o,At as s,B as c,Bt as l,Cn as u,Fr as d,Ft as f,Gn as p,H as m,Ir as h,Jt as g,Kn as _,L as v,Nt as ee,On as y,Ot as b,Pr as te,Qn as ne,Qt as re,S as ie,St as ae,Wt as oe,X as se,Xt as ce,Yt as le,Z as ue,Zn as de,Zt as x,_ as fe,_n as pe,_r as me,a as he,ct as ge,d as _e,dt as ve,et as ye,fn as S,gn as C,gr as be,h as xe,i as Se,in as Ce,it as we,jr as Te,jt as Ee,k as De,kr as w,lr as Oe,mn as ke,mr as Ae,nr as je,o as Me,on as Ne,or as Pe,p as Fe,pr as Ie,qt as T,rr as Le,rt as Re,sr as ze,st as Be,tr as Ve,tt as He,ur as Ue,ut as We,v as Ge,vn as Ke,w as qe,wn as E,x as Je,xr as Ye,y as Xe,yn as Ze}from"./three@0.169.19.js";import{a as Qe,c as $e,i as et,n as tt,o as D,r as nt,s as rt,t as it}from"./three-mesh-ui.CgGzZ3ml.js";import{A as at,C as ot,E as st,M as ct,S as lt,T as ut,_ as dt,a as ft,h as pt,i as mt,v as ht,w as gt,y as _t}from"./three-examples@0.169.19.js";import{n as vt,o as yt,r as bt,t as xt}from"./gltf-progressive.BBJGcb3s.js";var St=window.location.search.includes(`debugcontext`),O;(function(e){e.ContextRegistered=`ContextRegistered`,e.ContextCreationStart=`ContextCreationStart`,e.ContextCreated=`ContextCreated`,e.ContextFirstFrameRendered=`ContextFirstFrameRendered`,e.ContextDestroying=`ContextDestroying`,e.ContextDestroyed=`ContextDestroyed`,e.MissingCamera=`MissingCamera`,e.ContextClearing=`ContextClearing`,e.ContextCleared=`ContextCleared`})(O||={});var k=class{static get Current(){return globalThis[`NeedleEngine.Context.Current`]}static set Current(e){globalThis[`NeedleEngine.Context.Current`]=e}static get All(){return this.Registered}static Registered=[];static register(e){this.Registered.indexOf(e)===-1&&(St&&console.warn(`Registering context`),this.Registered.push(e),this.dispatchCallback(O.ContextRegistered,e))}static unregister(e){let t=this.Registered.indexOf(e);t!==-1&&(St&&console.warn(`Unregistering context`),this.Registered.splice(t,1))}static _callbacks={};static registerCallback(e,t){this._callbacks[e]||(this._callbacks[e]=[]),this._callbacks[e].push(t)}static unregisterCallback(e,t){if(!this._callbacks[e])return;let n=this._callbacks[e].indexOf(t);n!==-1&&this._callbacks[e].splice(n,1)}static dispatchCallback(e,t,n){if(!this._callbacks[e])return!0;let r={event:e,context:t};if(n)for(let e in n)r[e]=n[e];let i=[];return this._callbacks[e].forEach(e=>{let t=e(r);t instanceof Promise&&i.push(t)}),Promise.all(i)}static addContextCreatedCallback(e){this.registerCallback(O.ContextCreated,e)}static addContextDestroyedCallback(e){this.registerCallback(O.ContextDestroyed,e)}},Ct=new Map;function wt(e=globalThis.location?.hostname){if(Ct.has(e))return Ct.get(e);let t=/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|localhost/.test(e);return Ct.set(e,t),t===!0}function Tt(){return window.location.hostname.includes(`glitch.me`)}var Et=()=>e=>e;function Dt(e){return Et()(e)}function Ot(){return!!A(`debug`)}var kt=class{_factory;_cache=[];_maxSize;_index=0;constructor(e,t){this._factory=e,this._maxSize=t}get(){let e=this._index%this._maxSize;return this._index++,this._cache.length<=e&&(this._cache[e]=this._factory()),this._cache[e]}},At=!1,jt=[];typeof window<`u`&&setTimeout(()=>{if(At){let e={},t=new URL(window.location.href),n=new URL(t);n.searchParams.append(`console`,``);let r=n.toString().replace(/=$|=(?=&)/g,``);for(let n of jt){let r=new URL(t);r.searchParams.append(n,``),e[n]=r.toString().replace(/=$|=(?=&)/g,``)}console.log(`🌵 ?help: Debug Options for Needle Engine. -Append any of these parameters to the URL to enable specific debug options. -Example: ${r} will show an onscreen console window.`);let i=At===!0?``:` (containing "${At}")`;console.group(`Available URL parameters:`+i);for(let t of Object.keys(e).sort())typeof At==`string`&&!t.toLowerCase().includes(At.toLowerCase())||(console.groupCollapsed(t),console.log(`Reload with this flag enabled:`),console.log(e[t]),console.groupEnd());console.groupEnd()}},100);function Mt(){return new URLSearchParams(globalThis.location?.search)}function A(e){At&&!jt.includes(e)&&jt.push(e);let t=Mt();if(t.has(e)){let n=t.get(e);if(n){let e=Number(n);return isNaN(e)?n:e}else return!0}return!1}At=A(`help`);function Nt(e,t){let n=Mt();n.has(e)?n.set(e,t):n.append(e,t),document.location.search=n.toString()}function Pt(e,t,n=!0){let r=Mt();r.has(e)?t===null?r.delete(e):r.set(e,t):t!==null&&r.append(e,t),n?It(e,r):Lt(e,r)}function Ft(e,t,n){e.has(t)?e.set(t,n.toString()):e.append(t,n.toString())}function It(e,t,n){window.history.pushState(n,e,`?`+t.toString())}function Lt(e,t,n){window.history.replaceState(n,e,`?`+t.toString())}function Rt(e){for(var t=``,n=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`,r=n.length,i=0;i{setTimeout(t,e)})}function qt(e,t){if(e<=0)return Promise.resolve();if(t||=k.Current,!t)return Promise.reject(`No context`);let n=t.time.frameCount+e;return new Promise((e,r)=>{if(!t)return r(`No context`);let i=()=>{t.time.frameCount>=n&&(t.pre_update_callbacks.splice(t.pre_update_callbacks.indexOf(i),1),e())};t.pre_update_callbacks.push(i)})}var Jt=A(`debugresolveurl`),Yt=`rel:`;function Xt(e,t){return Zt(e,t)}function Zt(e,t){if(t===void 0)return Jt&&console.warn(`getPath: uri is undefined, returning uri`,t),t;if(t.startsWith(`./`))return t;if(t.startsWith(`http`))return Jt&&console.warn(`getPath: uri is absolute, returning uri`,t),t;if(e===void 0)return Jt&&console.warn(`getPath: source is undefined, returning uri`,t),t;t.startsWith(`rel:`)&&(t=t.substring(4));let n=e.lastIndexOf(`/`);if(n>=0){let r=e.substring(0,n+1);for(;r.endsWith(`/`)&&t.startsWith(`/`);)t=t.substring(1);let i=r+t;return Jt&&console.log(`source:`,e,`changed uri -from`,t,` -to `,i,` -basePath: `+r),i}return t}function Qt(e){if(e)return e=e.trim(),e=e.split(`?`)[0]?.split(`#`)[0],e}var $t=class{subscribeWrite(e){this.writeCallbacks.push(e)}unsubscribeWrite(e){let t=this.writeCallbacks.indexOf(e);t!==-1&&this.writeCallbacks.splice(t,1)}writeCallbacks=[];constructor(e,t){this._object=e,this._prop=t,this._wrapperProp=Symbol(`$`+t),this.apply()}_applied=!1;_object;_prop;_wrapperProp;apply(){if(this._applied||!this._object)return;let e=this._object,t=this._prop;if(e[t]===void 0)return;this._applied=!0,e[this._wrapperProp]!==void 0&&console.warn(`Watcher is being applied to an object that already has a wrapper property. This is not (yet) supported`);let n=e[t];e[this._wrapperProp]=n,Object.defineProperty(e,t,{get:()=>e[this._wrapperProp],set:t=>{e[this._wrapperProp]=t;for(let e of this.writeCallbacks)e(t,this._prop)}})}revoke(){if(!this._applied||!this._object)return;this._applied=!1;let e=this._object,t=this._prop;Reflect.deleteProperty(e,t),e[t]=e[this._wrapperProp],Reflect.deleteProperty(e,this._wrapperProp)}dispose(){this.revoke(),this.writeCallbacks.length=0,this._object=null}},en=class e{_watches=[];constructor(t,n){if(Array.isArray(n))for(let r of n)this._watches.push(new e(t,r));else this._watches.push(new $t(t,n))}subscribeWrite(e){for(let t of this._watches)t.subscribeWrite(e)}unsubscribeWrite(e){for(let t of this._watches)t.unsubscribeWrite(e)}apply(){for(let e of this._watches)e.apply()}revoke(){for(let e of this._watches)e.revoke()}dispose(){for(let e of this._watches)e.dispose();this._watches.length=0}},tn=Symbol(`needle:watches`);function nn(e,t){if(!e[tn])if(e instanceof w)e[tn]=new en(e,[`x`,`y`]);else if(e instanceof o)e[tn]=new en(e,[`x`,`y`,`z`]);else if(e instanceof Te||e instanceof E)e[tn]=new en(e,[`x`,`y`,`z`,`w`]);else return!1;return e[tn].subscribeWrite(t),!0}function rn(e,t){if(!e)return;let n=e[tn];n&&n.unsubscribeWrite(t)}var j;(function(e){let t;function n(){if(t!==void 0)return t;let e=window.navigator.userAgent,n=/Windows|MacOS|Mac OS/.test(e),r=/Windows NT/.test(e)&&/Edg/.test(e)&&!/Win64/.test(e);return t=n&&!r&&!y()}e.isDesktop=n;let r;function i(){return r===void 0?r=window.orientation!==void 0||navigator.userAgent.indexOf(`IEMobile`)!==-1?!0:/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent):r}e.isMobileDevice=i;function a(){return s()}e.isIPad=a;let o;function s(){if(o!==void 0)return o;let e=navigator.userAgent.toLowerCase();return o=/iPad/.test(navigator.userAgent)||e.includes(`macintosh`)&&`ontouchend`in document}e.isiPad=s;let c;function l(){return c===void 0?c=/Android/.test(navigator.userAgent):c}e.isAndroidDevice=l;let u;function d(){return u===void 0?u=/WebXRViewer\//i.test(navigator.userAgent):u}e.isMozillaXR=d;let f;function p(){return f===void 0?f=/NeedleAppClip\//i.test(navigator.userAgent):f}e.isNeedleAppClip=p;let m;function h(){if(m!==void 0)return m;if(y()||s())return m=!1;let e=navigator.userAgent.toLowerCase();return m=navigator.userAgentData?navigator.userAgentData.platform===`macOS`:e.includes(`mac os x`)||e.includes(`macintosh`)}e.isMacOS=h;let g;function _(){return g===void 0?g=s()&&`xr`in navigator&&ae():g}e.isVisionOS=_;let v,ee=[`iPad Simulator`,`iPhone Simulator`,`iPod Simulator`,`iPad`,`iPhone`,`iPod`];function y(){return v===void 0?v=ee.includes(navigator.platform)||navigator.userAgent.includes(`Mac`)&&`ontouchend`in document:v}e.isiOS=y;let b;function te(){return b===void 0&&(b=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)),b}e.isSafari=te;let ne;function re(){return ne===void 0?ne=navigator.userAgent.includes(`OculusBrowser`):ne}e.isQuest=re;let ie;function ae(){return ie===void 0&&(ie=document.createElement(`a`).relList.supports(`ar`)),ie}e.supportsQuickLookAR=ae;async function oe(){try{return(await navigator.permissions.query({name:`microphone`})).state!==`denied`}catch(e){return console.error("Error querying `microphone` permissions.",e),!1}}e.microphonePermissionsGranted=oe;let se;function ce(){if(se!==void 0)return se;let e=navigator.userAgent.match(/iPhone OS (\d+_\d+)/);if(e&&(se=e[1].replace(`_`,`.`)),!se){let e=navigator.userAgent.match(/(?:\(Macintosh;|iPhone;|iPad;).*Version\/(\d+\.\d+)/);e&&(se=e[1])}return se||=null,se}e.getiOSVersion=ce;let le;function ue(){if(le!==void 0)return le;let e=navigator.userAgent.match(/(?:CriOS|Chrome)\/(\d+\.\d+\.\d+\.\d+)/);return le=e?e[1].replace(`_`,`.`):null,le}e.getChromeVersion=ue;let de;function x(){if(de!==void 0)return de;let e=navigator.userAgent.match(/Version\/(\d+\.\d+)/);return de=e&&te()?e[1]:null,de}e.getSafariVersion=x})(j||={});function an(){return j.isDesktop()}function on(){return j.isMobileDevice()}function sn(){return j.isiPad()}function cn(){return j.isiPad()}function ln(){return j.isAndroidDevice()}function un(){return j.isMozillaXR()}function dn(){return j.isMacOS()}function fn(){return j.isiOS()}function pn(){return j.isSafari()}function mn(){return j.isQuest()}async function hn(){return j.microphonePermissionsGranted()}var gn=new WeakMap;function _n(e,t,n){if(!gn.get(e)){let t=new MutationObserver(t=>{yn(e,t)});gn.set(e,{observer:t,attributeChangedListeners:new Map}),t.observe(e,{attributes:!0})}let r=gn.get(e).attributeChangedListeners;return r.has(t)||r.set(t,[]),r.get(t).push(n),()=>{vn(e,t,n)}}function vn(e,t,n){if(!gn.get(e))return;let r=gn.get(e).attributeChangedListeners;if(!r.has(t))return;let i=r.get(t),a=i.indexOf(n);a!==-1&&(i.splice(a,1),i.length<=0&&(r.delete(t),gn.get(e)?.observer.disconnect(),gn.delete(e)))}function yn(e,t){let n=gn.get(e).attributeChangedListeners;for(let r of t)if(r.type===`attributes`){let t=r.attributeName,i=e.getAttribute(t);if(n.has(t))for(let e of n.get(t))e(i)}}var bn=class{reason;constructor(e){this.reason=e}};async function xn(e){let t=await Promise.allSettled(e).catch(e=>[new bn(e.message)]),n=!1,r=t.map(e=>`value`in e?e.value:(n=!0,new bn(e.reason)));return{anyFailed:n,results:r}}var Sn=A(`debugdebug`),Cn=!1;(A(`noerrors`)||A(`nooverlaymessages`))&&(Cn=!0);var wn=`needle_engine_global_error_container`,Tn;(function(e){e[e.Log=0]=`Log`,e[e.Warn=1]=`Warn`,e[e.Error=2]=`Error`})(Tn||={});function En(){return Fn}var Dn=[];function On(e){Dn.push(e)}var kn=!1;function An(...e){if(!kn){kn=!0;try{for(let t=0;t0&&(e+=` `),e+=r)}else typeof t==`string`&&(e=t);if(Rn.has(e))return;Rn.add(e)}let a=k.Current,o=a?.domElement??document.querySelector(`needle-engine`);if(a?.isInAR&&(o=a.arOverlayElement),o){if(Array.isArray(t)){let e=``;for(let n=0;n0&&(e+=` `),e+=r)}t=e}!t||t.length<=0||Hn(e,o,t,n)}}var Bn=new Map,Vn=.2;function Hn(e,t,n,r={}){if(n==null)return;let i=Gn(t);if(i.childElementCount>=20){let e=i.lastElementChild;Jn(e)}n.length>400&&(n=n.substring(0,400)+`...`);let a=r.key??n;if(Bn.has(a)){Bn.get(a)?.update(n,r);return}let o=Yn(e,n);i.prepend(o);let s=()=>{Bn.delete(a),Jn(o)},c=setTimeout(s,Math.max(Vn,r.duration??10)*1e3);Bn.set(a,{update:(e,t)=>{e.length>400&&(e=e.substring(0,400)+`...`),o.innerHTML=e,t.duration&&(clearTimeout(c),c=setTimeout(s,Math.max(Vn,t.duration)*1e3))},removeFunction:s})}function Un(){Sn&&console.log(`Clearing messages`);for(let e of Bn.values())e?.removeFunction.call(e);Bn.clear()}var Wn=` -@import url('https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap'); - -div[data-needle_engine_debug_overlay] { - font-family: 'Roboto Flex', sans-serif; - font-weight: 400; - font-size: 16px; -} - -div[data-needle_engine_debug_overlay] strong { - font-weight: 700; -} - -div[data-needle_engine_debug_overlay] a { - color: white; - text-decoration: none; - border-bottom: 1px solid rgba(255, 255, 255, 0.3); -} - -div[data-needle_engine_debug_overlay] a:hover { - text-decoration: none; - border: none; -} - -div[data-needle_engine_debug_overlay] .log strong { - color: rgba(200,200,200,.9); -} - -div[data-needle_engine_debug_overlay] .warn strong { - color: rgba(255,255,230, 1); -} - -div[data-needle_engine_debug_overlay] .error strong { - color: rgba(255,100,120, 1); -} -`;function Gn(e){globalThis[wn]||(globalThis[wn]=new Map);let t=globalThis[wn];if(t.has(e))return t.get(e);{let n=document.createElement(`div`);t.set(e,n),n.setAttribute(`data-needle_engine_debug_overlay`,``),n.classList.add(`debug-container`),n.style.cssText=` - position: absolute; - top: 0; - right: 5px; - padding-top: env(safe-area-inset-top, 0px); - max-width: 70%; - max-height: calc(100% - 105px); - z-index: 100000; - pointer-events: scroll; - display: flex; - align-items: end; - flex-direction: column; - color: white; - overflow: auto; - word-break: break-word; - `,j.isNeedleAppClip()&&(n.style.left=`5px`,n.style.right=`unset`);let r=document.querySelector(`meta[name="viewport"]`);r&&!r.getAttribute(`content`)?.includes(`viewport-fit=`)&&r.setAttribute(`content`,r.getAttribute(`content`)+`,viewport-fit=cover`),e.shadowRoot?e.shadowRoot.appendChild(n):e.appendChild(n);let i=document.createElement(`style`);return i.innerHTML=Wn,n.appendChild(i),n}}var Kn=Symbol(`logtype`),qn=new Map;function Jn(e){e.remove();let t=e[Kn],n=qn.get(t)??[];n.push(e),qn.set(t,n)}function Yn(e,t){if(qn.has(e)){let n=qn.get(e);if(n.length>0){let e=n.pop();return e.innerHTML=t,e}}let n=document.createElement(`div`);switch(n.setAttribute(`data-id`,`__needle_engine_debug_overlay`),n.style.marginRight=`5px`,n.style.padding=`.5em`,n.style.backgroundColor=`rgba(0,0,0,.9)`,n.style.marginTop=`5px`,n.style.marginBottom=`3px`,n.style.borderRadius=`8px`,n.style.pointerEvents=`all`,n.style.userSelect=`text`,n.style.maxWidth=`250px`,n.style.whiteSpace=`pre-wrap`,n.style[`backdrop-filter`]=`blur(10px)`,n.style[`-webkit-backdrop-filter`]=`blur(10px)`,n.style.backgroundColor=`rgba(20,20,20,.8)`,n.style.boxShadow=`inset 0 0 80px rgba(0,0,0,.2), 0 0 5px rgba(0,0,0,.2)`,n.style.border=`1px solid rgba(160,160,160,.2)`,n[Kn]=e,e){case Tn.Log:n.classList.add(`log`),n.style.color=`rgba(200,200,200,.7)`,n.style.backgroundColor=`rgba(40,40,40,.7)`;break;case Tn.Warn:n.classList.add(`warn`),n.style.color=`rgb(255, 255, 150)`,n.style.backgroundColor=`rgba(50,50,20,.8)`;break;case Tn.Error:n.classList.add(`error`),n.style.color=`rgb(255, 50, 50`,n.style.backgroundColor=`rgba(50,20,20,.8)`;break}return n.title=`Open the browser console (F12) for more information`,n.innerHTML=t,n}var Xn=A(`nodevlogs`),Zn,Qn;function M(){if(Xn)return!1;if(Zn!==void 0)return Zn;if(Qn!==void 0)return Qn;let e=wt();return e||=window.location.hostname.endsWith(`.local-credentialless.webcontainer.io`),Qn=e,e}function $n(e){Zn=e}var er=class{random(e,t){return Array.isArray(e)?e.length<=0?null:e[Math.floor(Math.random()*e.length)]:e!==void 0&&t!==void 0?Math.random()*(t-e)+e:Math.random()}randomVector3(e,t=0,n=1){e.x=this.random(t,n),e.y=this.random(t,n),e.z=this.random(t,n)}clamp(e,t,n){return en?n:e}clamp01(e){return this.clamp(e,0,1)}lerp(e,t,n){return n=n<0?0:n,n=n>1?1:n,e+(t-e)*n}inverseLerp(e,t,n){return(n-e)/(t-e)}remap(e,t,n,r,i){return r+(i-r)*(e-t)/(n-t)}moveTowards(e,t,n){return e+=n,(n<0&&e0&&e>t)&&(e=t),e}Rad2Deg=180/Math.PI;Deg2Rad=Math.PI/180;Epsilon=1e-5;toDegrees(e){return e*180/Math.PI}toRadians(e){return e*Math.PI/180}tan(e){return Math.tan(e)}gammaToLinear(e){return e**2.2}linearToGamma(e){return e**(1/2.2)}approximately(e,t,n=2**-52){for(let r of tr){let i=e[r],a=t[r];if(i===void 0||a===void 0)break;if(Math.abs(i-a)>n)return!1}return!0}easeInOutCubic(e){return e<.5?4*e*e*e:1-(-2*e+2)**3/2}},tr=[`x`,`y`,`z`,`w`],N=new er,nr=class{y;s;alpha=0;constructor(e){this.setAlpha(e),this.y=null,this.s=null}setAlpha(e){if(e<=0||e>1)throw Error();this.alpha=e}filter(e,t){t&&this.setAlpha(t);let n;return n=this.y?this.alpha*e+(1-this.alpha)*this.s:e,this.y=e,this.s=n,n}lastValue(){return this.y}reset(e){this.y=e,this.s=e}},rr=class{freq;minCutOff;beta;dCutOff;x;dx;lasttime;constructor(e,t=1,n=0,r=1){if(e<=0||t<=0||r<=0)throw Error();this.freq=e,this.minCutOff=t,this.beta=n,this.dCutOff=r,this.x=new nr(this.alpha(this.minCutOff)),this.dx=new nr(this.alpha(this.dCutOff)),this.lasttime=null}alpha(e){let t=1/this.freq;return 1/(1+1/(2*Math.PI*e)/t)}filter(e,t=null){this.lasttime&&t&&(this.freq=1/(t-this.lasttime)),this.lasttime=t;let n=this.x.lastValue(),r=n?(e-n)*this.freq:0,i=this.dx.filter(r,this.alpha(this.dCutOff)),a=this.minCutOff+this.beta*Math.abs(i);return this.x.filter(e,this.alpha(a))}reset(e){e!=null&&this.x.reset(e),this.x.alpha=this.alpha(this.minCutOff),this.dx.alpha=this.alpha(this.dCutOff),this.lasttime=null}},ir=class{x;y;z;constructor(e,t=1,n=0,r=1){this.x=new rr(e,t,n,r),this.y=new rr(e,t,n,r),this.z=new rr(e,t,n,r)}filter(e,t,n=null){t.x=this.x.filter(e.x,n),t.y=this.y.filter(e.y,n),t.z=this.z.filter(e.z,n)}reset(e){this.x.reset(e?.x),this.y.reset(e?.y),this.z.reset(e?.z)}},ar=`needle:cameraController`;function or(e){return e[ar]}function sr(e,t,n){n?e[ar]=t:e[ar]===t&&(e[ar]=null)}var cr=`needle:autofit`;function lr(e){return e[cr]===void 0?!0:e[cr]!==!1}function ur(e,t){e[cr]=t}var dr=void 0,fr={x:0,y:0,width:0,height:0},pr=A(`debugfocusrect`);function mr(e,t,n,r,i){e instanceof Element&&(pr&&e instanceof HTMLElement&&(e.style.outline=`2px dashed rgba(255, 150, 0, .8)`),e=e.getBoundingClientRect()),dr=i.domElement.getBoundingClientRect();let a=fr;a.x=e.x,a.y=e.y,a.width=e.width,a.height=e.height,a.x-=dr.x,a.y-=dr.y;let o=dr.width,s=dr.height,c=r.view,l=t.zoom,u=c?.offsetX||0,d=c?.offsetY||0,f=dr.width,p=dr.height;f/=l,p/=l,u=f*(l-1)*.5,d=p*(l-1)*.5;let m=a.x+a.width*.5,h=a.y+a.height*.5,g=dr.width*.5,_=dr.height*.5,v=m-g,ee=h-_;u-=v/l,d-=ee/l,t.offsetX!==void 0&&(u+=t.offsetX*(dr.width*.5)),t.offsetY!==void 0&&(d-=t.offsetY*(dr.height*.5));let y=c?.offsetX||u,b=c?.offsetY||d;u=N.lerp(y,u,n),d=N.lerp(b,d,n);let te=c?.width||o,ne=c?.height||s;f=N.lerp(te,f,n),p=N.lerp(ne,p,n),r.setViewOffset(o,s,u,d,f,p),r.updateProjectionMatrix(),t.damping>0&&(t.damping*=1-n,t.damping<.01&&(t.damping=0),t.damping=Math.max(0,t.damping))}function hr(e,t,n){let r=e.length(),i=t.length(),a=N.lerp(r,i,n);return e.lerp(t,n).normalize().multiplyScalar(a)}var gr=new E,_r=new E().setFromAxisAngle(new o(0,1,0),Math.PI);function vr(e,t){e.lookAt(t),e.quaternion.multiply(_r)}function yr(e,t,n=!0,r=!1){if(e===t)return;gr.copy(e.quaternion);let i=Or(t),a=Or(e);if(r){if(Fr(e,Pr(t)),n){let t=a.y,n=a.sub(Kr(e));n.y=t,e.lookAt(n),e.quaternion.multiply(_r)}Number.isNaN(e.quaternion.x)&&e.quaternion.copy(gr);return}n&&(i.y=a.y),e.lookAt(i),Number.isNaN(e.quaternion.x)&&e.quaternion.copy(gr)}function br(e,t,n,r=1){if(n){let i=P(0,0,0),a=t.x/window.innerWidth*2-1,o=-(t.y/window.innerHeight)*2+1;i.set(a,o,0),i.unproject(n);let s=n.worldPosition,c=e.worldPosition.distanceTo(s),l=i.sub(s);l.multiplyScalar(r*3.6*c);let u=n.worldPosition.add(l);return e.lookAt(u),u}return null}var xr=new kt(()=>new o,100);function P(e,t,n){let r=xr.get();return r.set(0,0,0),e instanceof o?r.copy(e):Array.isArray(e)?r.set(e[0],e[1],e[2]):e instanceof DOMPointReadOnly?r.set(e.x,e.y,e.z):typeof e==`number`?(r.x=e,r.y=t===void 0?r.x:t,r.z=n===void 0?r.x:n):typeof e==`object`&&(r.x=e.x,r.y=e.y,r.z=e.z),r}var Sr=new kt(()=>new a,30);function Cr(e){let t=Sr.get();return e?t.copy(e):t.set(0,0,0),t}var wr=new kt(()=>new E,100);function Tr(e,t,n,r){let i=wr.get();return i.identity(),e instanceof E?i.copy(e):e instanceof DOMPointReadOnly?i.set(e.x,e.y,e.z,e.w):typeof e==`number`&&t!==void 0&&n!==void 0&&r!==void 0?i.set(e,t,n,r):typeof e==`object`&&`x`in e&&`y`in e&&`z`in e&&`w`in e&&i.set(e.x,e.y,e.z,e.w),i}var Er=new kt(()=>new o,100),Dr=Symbol(`lastMatrixWorldUpdateKey`);function Or(e,t=null,n=!0){let r=t??Er.get();return e?e.parent?(n&&e.updateWorldMatrix(!0,!1),e.matrixWorldNeedsUpdate&&e[Dr]!==Date.now()&&(e[Dr]=Date.now(),e.updateMatrixWorld()),r.setFromMatrixPosition(e.matrixWorld),r):r.copy(e.position):r.set(0,0,0)}function kr(e,t){if(!e)return e;let n=Er.get();return t!==n&&n.copy(t),e.parent!==null&&e.parent.worldToLocal(n),e.position.set(n.x,n.y,n.z),e}function Ar(e,t,n,r){let i=Er.get();return i.set(t,n,r),kr(e,i),e}var jr=new kt(()=>new E,100),Mr=new E,Nr=new E;function Pr(e,t=null){if(!e)return jr.get().identity();let n=t??jr.get();return e.parent?(e.getWorldQuaternion(n),n):n.copy(e.quaternion)}function Fr(e,t){if(!e)return;t!==Mr&&Mr.copy(t);let n=Mr;(e?.parent)?.getWorldQuaternion(Nr),Nr.invert();let r=Nr.multiply(n);e.quaternion.set(r.x,r.y,r.z,r.w)}function Ir(e,t,n,r,i){Mr.set(t,n,r,i),Fr(e,Mr)}var Lr=new kt(()=>new o,100),Rr=new o;function zr(e,t=null){return t||=Lr.get(),e?e.parent?(e.getWorldScale(t),t):t.copy(e.scale):t.set(0,0,0)}function Br(e,t){if(!e)return;if(!e.parent){e.scale.copy(t);return}let n=Rr;e.parent.getWorldScale(n),e.scale.copy(t),e.scale.divide(n)}var Vr=new o,Hr=new E;function Ur(e){return Pr(e,Hr),Vr.set(0,0,1).applyQuaternion(Hr)}var Wr=new kt(()=>new o,100),Gr=new E;function Kr(e,t){return t||=Wr.get().set(0,0,1),Pr(e,Gr),t.applyQuaternion(Gr)}var qr=new He,Jr=new He,Yr=new o;function Xr(e){let t=jr.get();return e.getWorldQuaternion(t),Jr.setFromQuaternion(t),Jr}function Zr(e,t){Fr(e,jr.get().setFromEuler(t))}function Qr(e){let t=Xr(e),n=Yr;return n.set(t.x,t.y,t.z),n.x=N.toDegrees(n.x),n.y=N.toDegrees(n.y),n.z=N.toDegrees(n.z),n}function $r(e,t){ei(e,t.x,t.y,t.z,!0)}function ei(e,t,n,r,i=!0){i&&(t=N.toRadians(t),n=N.toRadians(n),r=N.toRadians(r)),qr.set(t,n,r),Mr.setFromEuler(qr),Fr(e,Mr)}function ti(e,t=!0){e&&(t?(function e(t){console.groupCollapsed((t.name?t.name:`(no name : `+t.type+`)`)+` %o`,t),t.children.forEach(e),console.groupEnd()})(e):e.traverse(function(e){for(var t=`|___`,n=e;n.parent!==null;)t=` `+t,n=n.parent;console.log(t+e.name+` <`+e.type+`>`)}))}function ni(e){let t=e?.name||``;if(!e)return t;let n=e.parent;for(;n;)t=n.name+`/`+t,n=n.parent;return t}function ri(e){if(e){let t=e;return t.blendMode!==void 0&&t.clampWhenFinished!==void 0&&t.enabled!==void 0&&t.fadeIn!==void 0&&t.getClip!==void 0}return!1}var ii=class e extends Ve{static vertex=` -varying vec2 vUv; -void main(){ - vUv = uv; - gl_Position = vec4(position.xy, 0., 1.0); -}`;constructor(){super({vertexShader:e.vertex,uniforms:{map:new Ye(null),flipY:new Ye(!0),writeDepth:new Ye(!1),depthTexture:new Ye(null)},fragmentShader:` -uniform sampler2D map; -uniform bool flipY; -uniform bool writeDepth; -uniform sampler2D depthTexture; - -varying vec2 vUv; - -void main(){ - vec2 uv = vUv; - if (flipY) uv.y = 1.0 - uv.y; - gl_FragColor = texture2D(map, uv); - - if (writeDepth) { - float depth = texture2D(depthTexture, uv).r; - gl_FragDepth = depth; - - // float linearDepth = (depth - 0.99) * 100.0; // Enhance near 1.0 values - // gl_FragColor = vec4(linearDepth, linearDepth, linearDepth, 1.0); - } -}`})}reset(){this.uniforms.map.value=null,this.uniforms.flipY.value=!0,this.uniforms.writeDepth.value=!1,this.uniforms.depthTexture.value=null,this.needsUpdate=!0,this.uniformsNeedUpdate=!0}},ai=class e{static planeGeometry=new Ke(2,2,1,1);static renderer=new h({antialias:!1,alpha:!0});static perspectiveCam=new C;static orthographicCam=new ke;static scene=new ne;static blitMaterial=new ii;static mesh=new x(e.planeGeometry,e.blitMaterial);static copyTexture(e,t){t||=this.blitMaterial,this.blitMaterial.reset();let n=t||this.blitMaterial;n.uniforms.map.value=e,n.needsUpdate=!0,n.uniformsNeedUpdate=!0;let r=n.vertexShader;n.vertexShader=ii.vertex;let i=this.mesh;i.material=n,i.frustumCulled=!1,this.scene.children.length=0,this.scene.add(i),this.renderer.setSize(e.image.width,e.image.height),this.renderer.clear(),this.renderer.render(this.scene,this.perspectiveCam);let a=new be(this.renderer.domElement);return a.name=`Copy`,a.needsUpdate=!0,n.vertexShader=r,a}static blit(e,t,n){let{renderer:r=this.renderer,blitMaterial:i=this.blitMaterial,flipY:o=!1,depthTexture:s=null,depthTest:c=!0,depthWrite:l=!0}=n||{};this.blitMaterial.reset(),i.uniforms.map&&(i.uniforms.map.value=e),i.uniforms.flipY&&(i.uniforms.flipY.value=o),s?(i.uniforms.writeDepth=new Ye(!0),i.uniforms.depthTexture.value=s):(i.uniforms.writeDepth=new Ye(!1),i.uniforms.depthTexture.value=null),i.needsUpdate=!0,i.uniformsNeedUpdate=!0;let u=this.mesh;u.material=i,u.frustumCulled=!1,this.scene.children.length=0,this.scene.add(u);let d=r.getRenderTarget(),f=r.getContext();c?f.enable(f.DEPTH_TEST):f.disable(f.DEPTH_TEST),r.state.buffers.depth.setMask(l),r.setClearColor(new a(0,0,0),0),r.setRenderTarget(t),r.clear(),r.render(this.scene,this.perspectiveCam),r.setRenderTarget(d),f.enable(f.DEPTH_TEST),r.state.buffers.depth.setMask(!0)}static textureToCanvas(e,t=!1){if(!e)return null;(t===!0||e.isCompressedTexture===!0)&&(e=oi(e));let n=e.image;if(ci(n)){let e=document.createElement(`canvas`);e.width=n.width,e.height=n.height;let t=e.getContext(`2d`);return t?(t.drawImage(n,0,0,n.width,n.height,0,0,e.width,e.height),e):(console.error(`Failed getting canvas 2d context`),null)}return null}};function oi(e){return ai.copyTexture(e)}function si(e,t=!1){return ai.textureToCanvas(e,t)}function ci(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas||typeof ImageBitmap<`u`&&e instanceof ImageBitmap}function li(e){let t=e.type;return t===`Mesh`||t===`SkinnedMesh`}function ui(e,t){t?e[`needle:rendercustomshadow`]=!0:e[`needle:rendercustomshadow`]=!1}function di(e){return!!(e&&(e[`needle:rendercustomshadow`]===!0||e[`needle:rendercustomshadow`]==null))}function fi(e,t=void 0,n=void 0,r=void 0){let i=r||new fe;i.makeEmpty();let a=[];function o(e){let r=!0;if(e.visible&&lr(e)!==!1&&!(e.type===`TransformControlsGizmo`||e.type===`TransformControlsPlane`)){if(e instanceof Ge&&(r=!1),e instanceof We&&(r=!1),e instanceof ct&&(r=!1),e.isGizmo===!0&&(r=!1),e.material instanceof je&&(r=!1),li(e)||(r=!1),n&&e.layers.test(n)===!1&&(r=!1),r&&(t&&Array.isArray(t)&&t?.includes(e)||typeof t==`function`&&t(e)===!0))return;if(e.isUI!==!0){if(r){let t=e.children;e.children=a;let n=e.position,r=e.scale;if(Number.isNaN(n.x)||Number.isNaN(n.y)||Number.isNaN(n.z)){console.warn(`Object \"${e.name}\" has NaN values in position or scale.... will ignore it`,n,r);return}e.geometry===null&&(e.geometry=void 0),i.expandByObject(e,!0),e.children=t}for(let t of e.children)o(t)}}}let s=!1;Array.isArray(e)||(e=[e]);for(let t of e)t&&(s=!0,t.updateMatrixWorld(),o(t));return s||console.warn(`No objects to fit camera to...`),i}function pi(e,t,n){let r=fi([e],n?.ignore),i=new o;r.getSize(i);let a=new o;r.getCenter(a);let s=new o;t.getSize(s);let c=new o;t.getCenter(c);let l=new o;l.set(s.x/i.x,s.y/i.y,s.z/i.z);let u=Math.min(l.x,l.y,l.z),d=n?.scale!==!1;if(d&&Br(e,zr(e).multiplyScalar(u)),n?.position!==!1){let n=new o;r.getCenter(n),n.y=r.min.y;let i=new o;t.getCenter(i),i.y=t.min.y;let a=i.clone().sub(n);d&&a.multiplyScalar(u),kr(e,Or(e).add(a))}return{boundsBefore:r,scale:l}}function mi(e,t){let n=fi([e]),r=new o;n.getCenter(r),r.y=n.min.y;let i=t.clone().sub(r);return kr(e,Or(e).add(i)),{offset:i,bounds:n}}function hi(e,t,n,r){if(Array.isArray(t)){let n=!0;for(let r=0;r{M()&&k.Current?.isInXR&&(_i(!0),wi(`error`,...e))});function _i(e){if(e){if(gi)return;gi=!0,xi()}else{if(!gi)return;gi=!1,Si()}}var vi={log:void 0,warn:void 0,error:void 0},yi=class{familyName=`needle-xr`;root=null;context=null;defaultFontSize=.06;constructor(){this.ensureFont()}onEnable(){this.context=k.Current||k.All[0],this.context.pre_render_callbacks.push(this.onBeforeRender)}onDisable(){this.context?.pre_render_callbacks.splice(this.context?.pre_render_callbacks.indexOf(this.onBeforeRender),1),this.root?.removeFromParent()}targetObject=new S;userForwardViewPoint=new o;oneEuroFilter=new ir(90,.8);_lastElementRemoveTime=0;onBeforeRender=()=>{let e=this.context?.mainCamera;if(this.context&&e instanceof C){let t=this.getRoot();Number.isNaN(t.position.x)&&t.position.set(0,0,0),Number.isNaN(t.quaternion.x)&&t.quaternion.set(0,0,0,1),this.context.scene.add(this.targetObject);let n=this.context.xr?.rigScale??1,r=3.5*n,i=e.worldForward;i.y=0,i.normalize().multiplyScalar(r),this.userForwardViewPoint.copy(e.worldPosition).sub(i),this.targetObject.position.distanceTo(this.userForwardViewPoint)>2*n&&(this.targetObject.position.copy(this.userForwardViewPoint),yr(this.targetObject,e,!0,!0),this.targetObject.rotateY(Math.PI)),this.oneEuroFilter.filter(this.targetObject.position,t.position,this.context.time.time);let a=this.context.time.deltaTime;if(t.quaternion.slerp(this.targetObject.quaternion,a*5),t.scale.setScalar(n),this.targetObject.removeFromParent(),this.context.scene.add(t),this.context.time.time-this._lastElementRemoveTime>.1){this._lastElementRemoveTime=this.context.time.time;let e=Date.now();for(let t=0;t2e4){n.removeFromParent(),this._textBuffer.push(n),this._activeTexts.splice(t,1);break}}}}};addLog(e,t){let n=this.getRoot(),r=this.getText(),i=16777215,a=0;switch(e){case`log`:i=16777215,a=0;break;case`warn`:i=16772761,a=4465152;break;case`error`:i=16755370,a=7798784;break}t.length>1e3&&(t=t.substring(0,1e3)+`...`),r.textContent=`[`+new Date().toISOString().split(`T`)[1].split(`.`)[0]+`] `+t,r.visible=!0,r._activatedTime=Date.now(),n.add(r),this._activeTexts.push(r),this.context&&this.context.scene.add(n),r.set({backgroundColor:i,color:a}),D.update()}ensureFont(){let e=D.FontLibrary.getFontFamily(this.familyName);e||(e=D.FontLibrary.addFontFamily(this.familyName),e.addVariant(`normal`,`normal`,`https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json`,`https://cdn.needle.tools/static/fonts/msdf/arial/arial.png`)?.addEventListener(`ready`,()=>{D.update()}))}textOptions={fontSize:this.defaultFontSize,fontFamily:this.familyName,padding:.03,margin:.005,color:0,backgroundColor:16777215,backgroundOpacity:.4,borderRadius:.03,offset:.025};_textBuffer=[];_activeTexts=[];getText(){let e=this.getRoot();if(this._textBuffer.length>0){let e=this._textBuffer.pop();return e.visible=!0,setTimeout(()=>this.disableDepthTestRecursive(e),100),e}if(e.children.length>20&&this._activeTexts.length>0)return this._activeTexts.shift();let t=new D.Text(this.textOptions);return setTimeout(()=>this.disableDepthTestRecursive(t),500),setTimeout(()=>this.disableDepthTestRecursive(t),1500),t}disableDepthTestRecursive(e,t=0){for(let n=0;nn&&t[r]===`0`;)r--;return t.substring(0,r+1)}return e.toString()}else if(Array.isArray(e)){let n=`[`;for(let i=0;i=60&&(o+=` -`,o+=i(t),n+=o,o=``)}return n+=o,n+=` -}`,n}return e}function i(e){let t=``;for(let n=0;ne.stopAllAction()),this.mixers.length=0}registerAnimationMixer(e){if(!e){console.warn(`AnimationsRegistry.registerAnimationMixer called with null or undefined mixer`);return}this.mixers.includes(e)||this.mixers.push(e)}unregisterAnimationMixer(e){if(!e){console.warn(`AnimationsRegistry.unregisterAnimationMixer called with null or undefined mixer`);return}let t=this.mixers.indexOf(e);t!==-1&&this.mixers.splice(t,1)}},Pi=class{static testIfRootCanAnimate(e,t){let n=e.getRoot();return n&&(n.userData.static||n.matrixAutoUpdate===!1||n.matrixWorldAutoUpdate===!1)?((t===!0||t===void 0&&M())&&console.warn(`AnimationUtils: The root object (${n.name||n.type}) of this AnimationAction has matrixAutoUpdate or matrixWorldAutoUpdate set to false. This may prevent the animation from working correctly. If the object is marked as static, try to change it to dynamic.`,{static:n.userData.static,name:n.userData.name,tag:n.userData.tag,matrixAutoUpdate:n.matrixAutoUpdate,matrixWorldAutoUpdate:n.matrixWorldAutoUpdate}),!1):!0}static tryGetActionsFromMixer(e){return e._actions||null}static tryGetAnimationClipsFromObjectHierarchy(e,t){if(t||=[],e)e.animations&&t.push(...e.animations);else return t;if(e.children)for(let n of e.children)this.tryGetAnimationClipsFromObjectHierarchy(n,t);return t}static autoplayAnimations(e){if(!e||!e.animations)return console.debug(`No animations found in file`),null;let t=`scene`in e?e.scene:e,n=[];for(let i=0;i0)for(let e=0;e=0;e--){let t=r[e];t.prefix===n&&(t.prefix=null),t.postfix===n&&(t.postfix=null),!t.prefix&&!t.postfix&&r.splice(e,1)}}var $i=Symbol(`Needle:Patches:WrappedFunction`);function ea(e,t,n){if(e[$i])return e;let r=function(...r){aa(t,n,this,...r);let i=e.apply(this,r);return oa(t,n,this,i,...r),i};return r[$i]=!0,r}var ta=`Needle:Patches`;function na(){return globalThis[`Needle:Patches`]||(globalThis[ta]=new WeakMap),globalThis[ta]}function ra(e,t){let n=na().get(e);return n?n.get(t):null}function ia(e,t,n,r){let i=na().get(e);i||(i=new Map,na().set(e,i));let a=i.get(t);a||(a=[],i.set(t,a)),a.push({prefix:n,postfix:r})}function aa(e,t,n,...r){if(!n)return;let i=ra(e,t);if(i)for(let e of i)e.prefix?.call(n,...r)}function oa(e,t,n,r,...i){if(!n)return;let a=ra(e,t);if(a)for(let e of a)e.postfix?.call(n,r,...i)}function sa(e,t){if(window.SPECTOR){console.log(window.SPECTOR);let n=new URLSearchParams(window.location.search);if(n.has(`spector`)){let r=Number.parseInt(n.get(`spector`)||`0`)||0;console.log(`Scheduled Spector capture at frame #`+r);let i=new window.SPECTOR.Spector;i.spyCanvases=!0,a();return;function a(){if(r>e.time.frame)return window.requestAnimationFrame(()=>a());let n=i.captureCanvas(t);n&&n instanceof Promise?n.then(()=>i.displayUI()):i.displayUI()}}else M()&&console.debug(`Spector available: Add '?spector=' to the URL to enable it and capture a frame.`)}}function ca(e){let t=e;return!!(t.parser&&t.parser.json)}var la;(function(e){e[e.None=0]=`None`,e[e.DontExport=1]=`DontExport`})(la||={});var ua=Symbol(`component-name`);function da(e){return e&&e.isComponent}var fa=Symbol(`object`),pa=new kt(()=>new o,20),ma=class{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return pa.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return pa.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return pa.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}constructor(e,t,n,r,i,a){this._point=e,this.distance=t,this._normal=n,this.impulse=r,this.friction=i,this._tangentVelocity=a}},ha=class{contacts;constructor(e,t,n){this.me=e,this._collider=t,this._gameObject=t.gameObject,this.contacts=n}me;_collider;get collider(){return this._collider}_gameObject;get gameObject(){return this._gameObject}get rigidBody(){return this.collider?.attachedRigidbody}},ga=class{object;collider;constructor(e,t){this.object=e,this.collider=t}},_a=class e{context;static _managers=new WeakMap;static get(e){return da(e)?this._managers.get(e.context):this._managers.get(e)}constructor(e){this.context=e,this.root.style.cssText=` - position: absolute; - width: 1px; height: 1px; - padding: 0; margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; - `,this.root.setAttribute(`role`,`region`),this.root.setAttribute(`aria-label`,`3D Needle Engine scene`),this.liveRegion.setAttribute(`aria-live`,`polite`),this.liveRegion.setAttribute(`aria-atomic`,`true`),this.liveRegion.setAttribute(`role`,`status`),this.root.appendChild(this.liveRegion),this.enabled=!0}_enabled;set enabled(t){t!==this._enabled&&(this._enabled=t,t?(e._managers.set(this.context,this),(this.context.domElement.shadowRoot||this.context.domElement).prepend(this.root)):this.root.remove())}clear(){this.root.childNodes.forEach(e=>e.remove()),this.root.appendChild(this.liveRegion)}dispose(){this.root.remove(),e._managers.delete(this.context)}root=document.createElement(`div`);liveRegion=document.createElement(`div`);treeElements=new WeakMap;updateElement(e,t){let n=this.treeElements.get(e);n||(n=document.createElement(`div`),this.treeElements.set(e,n),this.root.appendChild(n),typeof t==`object`&&(t.role&&n.setAttribute(`role`,t.role),t.label&&n.setAttribute(`aria-label`,t.label),t.hidden!==void 0&&n.setAttribute(`aria-hidden`,String(t.hidden)),t.busy!==void 0&&n.setAttribute(`aria-busy`,String(t.busy))))}focus(e){let t=this.treeElements.get(e);t&&t.focus()}unfocus(e){let t=this.treeElements.get(e);t&&t.blur()}hover(e,t){let n=this.treeElements.get(e);this.liveRegion.textContent=t||n?.getAttribute(`aria-label`)||``}removeElement(e){this.treeElements.get(e)?.remove(),this.treeElements.delete(e)}set liveRegionMode(e){this.liveRegion.setAttribute(`aria-live`,e)}},va,ya=null;function ba(){return va}function xa(e){if(e==null){console.warn(`Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup.`);return}ya!==e&&(ya=e,va=new e)}var Sa=n(((e,t)=>{(function(){var e=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,n={rotl:function(e,t){return e<>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return n.rotl(e,8)&16711935|n.rotl(e,24)&4278255360;for(var t=0;t0;e--)t.push(Math.floor(Math.random()*256));return t},bytesToWords:function(e){for(var t=[],n=0,r=0;n>>5]|=e[n]<<24-r%32;return t},wordsToBytes:function(e){for(var t=[],n=0;n>>5]>>>24-n%32&255);return t},bytesToHex:function(e){for(var t=[],n=0;n>>4).toString(16)),t.push((e[n]&15).toString(16));return t.join(``)},hexToBytes:function(e){for(var t=[],n=0;n>>6*(3-a)&63)):n.push(`=`);return n.join(``)},base64ToBytes:function(t){t=t.replace(/[^A-Z0-9+\/]/gi,``);for(var n=[],r=0,i=0;r>>6-i*2);return n}};t.exports=n})()})),Ca=n(((e,t)=>{var n={utf8:{stringToBytes:function(e){return n.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(n.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],n=0;n{t.exports=function(e){return e!=null&&(n(e)||r(e)||!!e._isBuffer)};function n(e){return!!e.constructor&&typeof e.constructor.isBuffer==`function`&&e.constructor.isBuffer(e)}function r(e){return typeof e.readFloatLE==`function`&&typeof e.slice==`function`&&n(e.slice(0,0))}})),Ta=t(n(((e,t)=>{(function(){var e=Sa(),n=Ca().utf8,r=wa(),i=Ca().bin,a=function(t,o){t.constructor==String?t=o&&o.encoding===`binary`?i.stringToBytes(t):n.stringToBytes(t):r(t)?t=Array.prototype.slice.call(t,0):!Array.isArray(t)&&t.constructor!==Uint8Array&&(t=t.toString());for(var s=e.bytesToWords(t),c=t.length*8,l=1732584193,u=-271733879,d=-1732584194,f=271733878,p=0;p>>24)&16711935|(s[p]<<24|s[p]>>>8)&4278255360;s[c>>>5]|=128<>>9<<4)+14]=c;for(var m=a._ff,h=a._gg,g=a._hh,_=a._ii,p=0;p>>0,u=u+ee>>>0,d=d+y>>>0,f=f+b>>>0}return e.endian([l,u,d,f])};a._ff=function(e,t,n,r,i,a,o){var s=e+(t&n|~t&r)+(i>>>0)+o;return(s<>>32-a)+t},a._gg=function(e,t,n,r,i,a,o){var s=e+(t&r|n&~r)+(i>>>0)+o;return(s<>>32-a)+t},a._hh=function(e,t,n,r,i,a,o){var s=e+(t^n^r)+(i>>>0)+o;return(s<>>32-a)+t},a._ii=function(e,t,n,r,i,a,o){var s=e+(n^(t|~r))+(i>>>0)+o;return(s<>>32-a)+t},a._blocksize=16,a._digestsize=16,t.exports=function(t,n){if(t==null)throw Error(`Illegal argument `+t);var r=e.wordsToBytes(a(t,n));return n&&n.asBytes?r:n&&n.asString?i.bytesToString(r):e.bytesToHex(r)}})()}))(),1),Ea=new Map,Da=new Map,Oa=0;function ka(e,t,n){if(Ea.has(t)||Ea.set(t,[]),Ea.get(t).push({method:e,options:{once:!1,...n}}),Oa<30){let e=Da.get(t);e&&e?.length>100&&(Oa+=1,console.warn(`You have ${e.length} methods registered for Event ${t}. - -This might be a performance issue! -Consider unregistering the methods when they are not needed anymore! - -To unregister you can call the function returned by your event hook (e.g.const unregister = onStart(...)) - -or by using the once option like onStart(()=>{}, { once:true }). - -See https://engine.needle.tools/docs/scripting.html#special-lifecycle-hooks for more information.`))}}function Aa(e,t){let n=Da.get(t);if(n){for(let t=0;t0&&Fa(e,r,n);let i=Ea.get(t);if(i&&i.length>0){let r=[...i];i.length=0,Fa(e,r,n),r.length>0&&(Da.has(t)||Da.set(t,[]),Da.get(t).push(...r))}}var Na=[],Pa={context:null};function Fa(e,t,n){Na.length=0;for(let e=0;eAa(e,O.ContextCreated)}function Ra(e,t){return ka(e,O.ContextClearing,t),()=>Aa(e,O.ContextClearing)}function za(e,t){return ka(e,O.ContextDestroying,t),()=>Aa(e,O.ContextDestroying)}function Ba(e,t){return ka(e,z.Start,t),()=>Aa(e,z.Start)}function Va(e,t){return ka(e,z.Update,t),()=>Aa(e,z.Update)}function Ha(e,t){return ka(e,z.OnBeforeRender,t),()=>Aa(e,z.OnBeforeRender)}function Ua(e,t){return ka(e,z.OnAfterRender,t),()=>Aa(e,z.OnAfterRender)}var Wa=A(`debuglicense`),Ga=[],Ka=`basic`;Wa&&console.log(`License Type: `+Ka);function qa(){switch(Ka){case`pro`:case`enterprise`:return!0}return!1}function Ja(){switch(Ka){case`indie`:return!0}return!1}function Ya(){switch(Ka){case`edu`:return!0}return!1}function Xa(){return qa()||Ja()||Ya()}function Za(e){if(qa()||Ja()||Ya())return e(!0);Ga.push(e)}function Qa(e){for(let t of Ga)try{t(e)}catch{}}var $a;(function(e){window.addEventListener(`error`,e=>{a(B.Current,`unhandled_error`,e)}),window.addEventListener(`unhandledrejection`,e=>{a(B.Current,`unhandled_promise_rejection`,{message:e.reason?.message,stack:e.reason?.stack,timestamp:Date.now()})}),La((e=>t(e)),{once:!0});function t(e){if(!n(e)){Wa&&console.debug(`Telemetry is disabled via no-telemetry attribute`);return}return o({site_id:`dabb8317376f`,type:`pageview`,pathname:window.location.pathname,hostname:window.location.hostname,page_title:document.title,referrer:document.referrer,user_agent:navigator.userAgent,querystring:window.location.search,language:navigator.language,screenWidth:window.screen.width,screenHeight:window.screen.height,event_name:`page_view`}).then(t=>{if(t instanceof Response&&t.ok&&wt()){let t=(e.domElement?.getAttribute(`src`)||``)+Bi+Vi+Hi+Ui;window.sessionStorage.getItem(`session_key`)!==t&&(window.sessionStorage.setItem(`session_key`,t),i(e,`info`,{src:e.domElement?.getAttribute(`src`)||``,version:Bi,generator:Vi,build_time:Hi,public_key:Ui}))}})}function n(e){let t=e?.domElement;if(t||=document.querySelector(`needle-engine`),!t&&!e)return!1;let n=t?.getAttribute(`no-telemetry`);return(n===``||n===`true`||n===`1`)&&(Ka===`pro`||Ka===`enterprise`)?(Wa&&console.debug(`Telemetry is disabled via no-telemetry attribute`),!1):!0}e.isAllowed=n;let r=`dabb8317376f`;async function i(e,t,i){if(!n(e)){Wa&&console.debug(`Telemetry is disabled`);return}return o({site_id:r,type:`custom_event`,pathname:window.location.pathname,event_name:t,properties:i?JSON.stringify(i):void 0})}e.sendEvent=i;async function a(e,t,i){if(!n(e)){Wa&&console.debug(`Telemetry is disabled`);return}return i instanceof ErrorEvent?i={message:i.message,stack:i.error?.stack,filename:i.filename,lineno:i.lineno,colno:i.colno,timestamp:i.timeStamp||Date.now()}:i instanceof Error&&(i={message:i.message,stack:i.stack,timestamp:Date.now()}),o({site_id:r,type:`error`,event_name:t||`error`,properties:JSON.stringify({error_name:t,message:i.message,stack:i.stack,filename:i.filename,lineno:i.lineno,colno:i.colno,timestamp:i.timestamp})})}e.sendError=a;function o(e){try{return fetch(`https://needle.tools/api/v1/rum/t`,{method:`POST`,body:JSON.stringify(e),headers:{"Content-Type":`application/json`},keepalive:!0,mode:`cors`,priority:`low`}).catch(e=>{Wa&&console.error(`Failed to send telemetry`,e)})}catch(e){Wa&&console.error(e)}return Promise.resolve()}})($a||={}),k.registerCallback(O.ContextRegistered,e=>{ao(e.context),io(e.context),setTimeout(()=>fo(e.context),2e3)});var eo=void 0,to=!1,no=``;async function ro(){if(eo)return eo;if(Ka===`basic`)try{let e=`https://needle.tools/api/v1/needle-engine/check?location=`+encodeURIComponent(window.location.href)+`&version=`+Bi+`&generator=`+encodeURIComponent(Vi),t=await fetch(e,{method:`GET`}).catch(e=>{Wa&&console.error(`License check failed`,e)});t?.status===200?(to=!1,Wa&&console.log(`License check succeeded`),Ka=`pro`,Qa(!0)):t?.status===403?(Qa(!1),to=!0,no=await t.text()):(Qa(!1),Wa&&console.log(`License check failed with status `+t?.status))}catch(e){Qa(!1),Wa&&console.error(`License check failed`,e)}else Wa&&console.log(`Runtime license check is skipped because license is already applied as "`+Ka+`"`)}eo=ro();async function io(e){function t(){let e=document.createElement(`div`);e.className=`needle-forbidden`,e.style.cssText=` - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - pointer-events: all; - zIndex: 2147483647; - line-height: 1.5; - backdrop-filter: blur(15px); - -webkit-backdrop-filter: blur(15px); - `;let t=e.style.cssText,n=document.createElement(`div`);e.appendChild(n),n.style.cssText=` - position: absolute; - left: 0; - right: 0; - top:0; - bottom: 0; - padding: 10%; - color: white; - font-size: 20px; - font-family: sans-serif; - text-align: center; - pointer-events: all; - display: flex; - justify-content: center; - align-items: center; - background-color: rgba(0,0,0,.3); - text-shadow: 0 0 2px black; - `;let r=n.style.cssText,i=no?.length>1?no:`This web application has been paused.
You might be in violation of the Needle Engine terms of use.
Please contact the Needle support if you think this is a mistake.`;return n.innerHTML=i,setInterval(()=>{n.innerHTML!==i&&(n.innerHTML=i),n.parentNode!==e&&e.appendChild(n),e.style.cssText!==t&&(e.style.cssText=t),n.style.cssText!==r&&(n.style.cssText=r)},500),e}let n=t(),r=n.style.cssText;setInterval(()=>{to===!0&&(n.style.cssText!==r&&(n=t()),e.domElement.shadowRoot?n.parentNode!==e.domElement.shadowRoot&&e.domElement.shadowRoot?.appendChild(n):n.parentNode!=document.body&&document.body.appendChild(n))},500)}async function ao(e){try{if(!qa()&&!Ja())return oo(e)}catch(t){return Wa&&console.log(`License check failed`,t),oo(e)}Wa&&oo(e)}async function oo(e){let t=!1;e.domElement.addEventListener(`ready`,()=>t=!0),await eo?.catch(()=>{}),!(qa()||Ja())&&(Xa()===!1&&uo(),t?so(e):e.domElement.addEventListener(`ready`,()=>{so(e)}))}function so(e){let t=` - position: relative; - display: block; - background-size: 20px; - background-position: 10px 5px; - background-repeat:no-repeat; - background-image:url('${co}'); - background-max-size: 40px; - padding: 10px; - padding-left: 30px; - `;if(Ka===`edu`)navigator.webdriver?console.log(`This project is supported by Needle for Education – https://needle.tools`):console.log(`%c This project is supported by Needle for Education – https://needle.tools`,t);else return;let n=document.createElement(`div`);n.className=`needle-non-commercial-use`,n.innerHTML=`Made with Needle for Education`,e.domElement.shadowRoot?.appendChild(n);let r=` - position: absolute; - font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; - font-size: 12px; - color: rgb(100, 100, 100); - /*mix-blend-mode: difference;*/ - background-color: transparent; - z-index: 10000; - - cursor: pointer; - user-select: none; - opacity: 0; - - bottom: 6px; - right: 12px; - transform: translateY(0px); - transition: all .5s ease-in-out 1s; - `;n.style.cssText=r,n.addEventListener(`click`,()=>{window.open(`https://needle.tools`,`_blank`)});let i=n.style.cssText;setTimeout(()=>{r=r.replace(`opacity: 0`,`opacity: 1`),r=r.replace(`transform: translateY(10px)`,`transform: translateY(0)`),n.style.cssText=r,i=n.style.cssText},100);let a=setInterval(()=>{let t=e.domElement.shadowRoot||e.domElement;n.parentNode!==t&&t.appendChild(n),i!=n.style.cssText&&(n.style.cssText=r,i=n.style.cssText)},1e3);Ya()&&setTimeout(()=>{clearInterval(a),n?.remove(),setTimeout(()=>{e.domElement.parentNode&&so(e)},1e3*60*5)},2e4)}var co=`data:image/webp;base64,UklGRrABAABXRUJQVlA4WAoAAAAQAAAAHwAAHwAAQUxQSKEAAAARN6CmbSM4WR7vdARON11EBDq3fLiNbVtVzpMCPlKAEzsx0Y/x+Ovuv4dn0EFE/ydAvz6YggXzgh5sVgXM/zOC/4sii7qgGvB5N7hmuQYwkvazWAu1JPW41FXSHq6pnaQWvqYH18Fc0j1hO/BFTtIeSBlJi5w6qIIO7IOrwhFsB2Yxukif0FTRLpXswHR8MxbslKe9VZsn/Ub5C7YFOpqSTABWUDgg6AAAAFAGAJ0BKiAAIAA+7VyoTqmkpCI3+qgBMB2JbACdMt69DwMIQBLhkTO6XwY00UEDK6cNIDnuNibPf0EgAP7Y1myuiQHLDsF/0h5unrGh6WAbv7aegg2ZMd3uRKfT/3SJztcaujYfTvMXspfCTmYcoO6a+vhC3ss4M8uM58t4siiu59I4aOl59e9Sr6xoxYlHf2v+NnBNpJYeJf8jABQAId/PXuBkLEFkiCucgSGEcfhvajql/j3reCGl0M5/9gQWy7ayNPs+wlvIxFnNfSlfuND4CZOCyxOHhRqOmHN4ULHo3tCSrUNvgAA=`,lo=0;async function uo(e){let t=Date.now();if(t-lo<2e3)return;lo=t;let n=` - position: relative; - display: block; - font-size: 18px; - background-size: 20px; - background-position: 10px 5px; - background-repeat:no-repeat; - background-image:url('${co}'); - background-max-size: 40px; - margin-bottom: 5px; - margin-top: .3em; - margin-bottom: .5em; - padding: .2em; - padding-left: 25px; - border-radius: .5em; - border: 2px solid rgba(160,160,160,.3); - `,r=`Needle Engine — No license active, commercial use is not allowed. Visit https://needle.tools/pricing for more information and licensing options! v${Bi}`;B.Current?.xr||navigator.webdriver?console.log(r):console.log(`%c `+r,n)}async function fo(e){if(!window.crossOriginIsolated){if(!$a.isAllowed(e)){Wa&&console.debug(`Telemetry is disabled via no-telemetry attribute`);return}try{{let e=window.location.href.split(`?`)[0],t={license:Ka,url:e,hostname:window.location.hostname,pathname:window.location.pathname,version:Bi,generator:Vi,build_time:Hi,public_key:Ui},n=navigator.sendBeacon?.(`https://needle.tools/api/v1/needle-engine/ping`,JSON.stringify(t));Wa&&console.debug(`Sent beacon: `+n)}}catch(e){Wa&&console.log(`Failed to send non-commercial usage message to analytics backend`,e)}}}var po=typeof Ta==`function`?Ta:Ta.default,mo;(function(e){e.baseUrl=`https://networking.needle.tools`;function t(e){return po(new Uint8Array(e))}e.hashMD5=t;function n(e){let t=po(new Uint8Array(e),{encoding:`binary`,asBytes:!0});return btoa(String.fromCharCode(...t))}e.hashMD5_Base64=n;function r(e){let t=new Uint8Array(e);return crypto.subtle.digest(`SHA-256`,t).then(e=>btoa(String.fromCharCode(...new Uint8Array(e))))}e.hashSha256=r;function i(e){let t=e.filesize/1024/1024;return Xa()?t<50:t<5}e.canUpload=i;async function a(t,r){let i=e.baseUrl;if(!i)return console.error(`Blob storage base url is not set`),null;if(!t.name)return console.error(`Upload: file name is missing`),null;let a=null;a=t instanceof File?await t.arrayBuffer():t.data;let o=a.byteLength,s=o/1024/1024;if(s>50)return r?.silent!==!0&&Ei(`File (${s.toFixed(1)}MB) is too large for uploading (see console for details)`),console.warn(`Your file is too large for uploading (${s.toFixed(1)}MB). Max allowed size is 50MB`),null;if(!Xa()&&s>5)return r?.silent!==!0&&Ei(`File is too large for uploading. Please get a commercial license to upload files larger than 5MB`),console.warn(`Your file is too large for uploading (${s.toFixed(1)}MB). Max size is 5MB for non-commercial users. Please get a commercial license at https://needle.tools/pricing for larger files (up to 50MB)`),null;if(o<1)return console.warn(`Your file is too small for uploading (${s.toFixed(1)}MB). Min size is 1 byte`),null;let c=n(a),l={filename:t.name,"Content-Md5":c,"Content-Type":t.type||`application/octet-stream`,FileSize:o.toString(),"Content-Disposition":`attachment; filename=\"${t.name}\"`,"x-amz-server-side-encryption":`AES256`},u=await fetch(i+`/api/needle/blob`,{method:`POST`,headers:l,signal:r?.abort}).then(e=>e.json()).catch(e=>(console.error(e),null));if(u==null)return console.warn(`Upload failed...`),null;if(`error`in u)return console.error(u.error),null;if(`upload`in u&&u.upload){console.debug(`Uploading file`,u.upload);let e=!1,t=null;for(let i=0;i<3;i++)try{if(e)break;if(r?.abort?.aborted)return console.debug(`Aborted upload`),null;let a=await n(u.upload);a instanceof Error?(t=a,await Kt(1e3*i)):a.ok&&(console.debug(`File uploaded successfully`),e=!0)}catch(e){console.error(e)}if(!e)return console.error(t?.message||`Failed to upload file`),null;function n(e){return r?.onProgress?.call(null,{progress01:0,state:`inprogress`}),fetch(e,{method:`PUT`,headers:l,body:a,signal:r?.abort}).then(e=>(r?.onProgress?.call(null,{progress01:1,state:`finished`}),e)).catch(e=>e)}}if(`download`in u){let e=i+u.download;return console.debug(`File found in blob storage`,e),{key:u.key,success:!0,download_url:e}}return null}e.upload=a;function o(t){return`${e.baseUrl}/api/needle/blob/${t}`}e.getBlobUrlForKey=o;async function s(e,t){let n=new we;n.setResponseType(`arraybuffer`);let r=await n.loadAsync(e,e=>{t&&t.call(null,e)});return r instanceof ArrayBuffer?new Uint8Array(r):(console.error(`Download failed, no arraybuffer returned`),null)}e.download=s})(mo||={});var ho=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function go(e){return typeof e==`string`&&ho.test(e)}var _o=[];for(let e=0;e<256;++e)_o.push((e+256).toString(16).slice(1));function vo(e,t=0){return _o[e[t+0]]+_o[e[t+1]]+_o[e[t+2]]+_o[e[t+3]]+`-`+_o[e[t+4]]+_o[e[t+5]]+`-`+_o[e[t+6]]+_o[e[t+7]]+`-`+_o[e[t+8]]+_o[e[t+9]]+`-`+_o[e[t+10]]+_o[e[t+11]]+_o[e[t+12]]+_o[e[t+13]]+_o[e[t+14]]+_o[e[t+15]]}function yo(e){if(!go(e))throw TypeError(`Invalid UUID`);let t,n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=t&255,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=t&255,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=t&255,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=t&255,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=t&255,n}function bo(e){e=unescape(encodeURIComponent(e));let t=[];for(let n=0;n>>32-t}function Eo(e){let t=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof e==`string`){let t=unescape(encodeURIComponent(e));e=[];for(let n=0;n>>0;l=c,c=s,s=To(o,30)>>>0,o=i,i=a}n[0]=n[0]+i>>>0,n[1]=n[1]+o>>>0,n[2]=n[2]+s>>>0,n[3]=n[3]+c>>>0,n[4]=n[4]+l>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,n[0]&255,n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,n[1]&255,n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,n[2]&255,n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,n[3]&255,n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,n[4]&255]}var Do=Co(`v5`,80,Eo),Oo;(function(e){e[e.OnConnection=0]=`OnConnection`,e[e.OnRoomJoin=1]=`OnRoomJoin`,e[e.Queued=2]=`Queued`,e[e.Immediate=3]=`Immediate`})(Oo||={}),k.registerCallback(O.ContextCreated,e=>{let t=e.context;Ho(t),Io(t)});var ko=A(`debugcomponents`),Ao=`eff8ba80-635d-11ec-90d6-0242ac120003`,jo=class e{get seed(){return this._seed}set seed(e){this._seed=e}_originalSeed;_seed;constructor(t){typeof t==`string`&&(t=e.hash(t)),this._originalSeed=t,this._seed=t}reset(){this._seed=this._originalSeed}generateUUID(e){if(typeof e==`string`)return Do(e,Ao);let t=this._seed;return--this._seed,Do(t.toString(),Ao)}initialize(t){typeof t==`string`?this._seed=e.hash(t):this._seed=t}static createFromString(t){return new e(this.hash(t))}static hash(e){let t=0;for(let n=0;n{ko&&console.log(`[Remote] Destroyed`,e.scene,t);let n=jf(t.guid,e.scene);n&&zf(n)})}var Lo=class{filename;hash;size;constructor(e,t,n){this.filename=e,this.hash=t,this.size=n}},Ro=class{guid;originalGuid;seed;visible;hostData;dontSave;parent;position;rotation;scale;preventCreation=void 0;deleteStateOnDisconnect;constructor(e,t){this.originalGuid=e,this.guid=t}};function zo(e,t,n,r){let i=e;if(!i.guid)return console.warn(`Can not instantiate: No guid`,i),null;if(t.context||=B.Current,!t.context)return console.error(`Missing network instantiate options / reference to network connection in sync instantiate`),null;let a=t?{...t}:null,{instance:o,seed:s}=Uo(i,t);if(o){let e=o;if(e.guid){ko&&console.log(`[Local] new instance`,`gameobject:`,o?.guid);let c=new Ro(i.guid,e.guid);c.seed=s,t.deleteOnDisconnect===!0&&(c.deleteStateOnDisconnect=!0),a&&(a.position&&(Array.isArray(a.position)?c.position={x:a.position[0],y:a.position[1],z:a.position[2]}:c.position={x:a.position.x,y:a.position.y,z:a.position.z}),a.rotation&&(a.rotation instanceof He?a.rotation=new E().setFromEuler(a.rotation):a.rotation instanceof Array&&(a.rotation=new E().fromArray(a.rotation)),c.rotation={x:a.rotation.x,y:a.rotation.y,z:a.rotation.z,w:a.rotation.w}),a.scale&&(Array.isArray(a.scale)?c.scale={x:a.scale[0],y:a.scale[1],z:a.scale[2]}:c.scale={x:a.scale.x,y:a.scale.y,z:a.scale.z})),c.position||={x:e.position.x,y:e.position.y,z:e.position.z},c.rotation||={x:e.quaternion.x,y:e.quaternion.y,z:e.quaternion.z,w:e.quaternion.w},c.scale||={x:e.scale.x,y:e.scale.y,z:e.scale.z},c.visible=i.visible,a?.parent&&(typeof a.parent==`string`?c.parent=a.parent:a.parent?.guid?c.parent=a.parent.guid:a.parent instanceof ne?c.parent=`scene`:console.warn(`Unsupported parent type in sync instantiate options: `+a.parent?.name)),c.hostData=n,r===!1&&(c.dontSave=!0),!t?.context?.connection&&M()&&console.debug(`Object will be instantiated but it will not be synced: not connected`,i.guid),t.context.connection.isInRoom&&Vo.push(new WeakRef(e)),t?.context?.connection.send(Mo.NewInstanceCreated,c)}else console.warn(`Missing guid, can not send new instance event`,e)}return o}function Bo(){return Math.random()*9999999}var Vo=[];function Ho(e){let t=e.connection.beginListen(Mo.NewInstanceCreated,async t=>{let n=await Ko(t.originalGuid,e.scene);if(t.preventCreation===!0)return;if(!n){console.warn(`could not find object that was instantiated: `+t.guid);return}let r=new Tf;t.position&&(r.position=new o(t.position.x,t.position.y,t.position.z)),t.rotation&&(r.rotation=new E(t.rotation.x,t.rotation.y,t.rotation.z,t.rotation.w)),t.scale&&(r.scale=new o(t.scale.x,t.scale.y,t.scale.z)),r.parent=t.parent,t.seed&&(r.idProvider=new jo(t.seed)),r.visible=t.visible,r.context=e,ko&&e.alias&&console.log(`[Remote] instantiate in: `+e.alias);let i=Wf(n,r);Vo.push(new WeakRef(i)),i&&(t.parent===`scene`&&e.scene.add(i),ko&&console.log(`[Remote] new instance`,`gameobject:`,i?.guid,n))}),n=e.connection.beginListen(`left-room`,()=>{Vo.length>0&&console.debug(`Left networking room, cleaning up ${Vo.length} instantiated objects`);for(let e of Vo){let t=e.deref();t&&t.destroy()}Vo.length=0});return()=>{e.connection.stopListen(Mo.NewInstanceCreated,t),e.connection.stopListen(`left-room`,n)}}function Uo(e,t){let n=Bo(),r=t??new Tf;return r.idProvider=new jo(n),{seed:n,instance:Wf(e,r)}}var Wo={};function Go(e,t){Wo[e]=t}async function Ko(e,t){let n=Wo[e];if(n!=null){let t=await n(e);if(t)return t}return qo(e,t)}function qo(e,t){if(t===null||!e)return null;if(t.guid===e)return t;if(t.children)for(let n of t.children){let t=qo(e,n);if(t)return t}return null}var Jo=A(`gizmos`),Yo=A(`debugextension`),Xo=A(`debugresolvedependencies`),Zo=[`/extensions/`,`extensions/`],Qo=[{prefix:`/nodes/`,dependencyName:`node`},{prefix:`/meshes/`,dependencyName:`mesh`},{prefix:`/materials/`,dependencyName:`material`},{prefix:`/textures/`,dependencyName:`texture`},{prefix:`/animations/`,dependencyName:`animation`},{prefix:`nodes/`,dependencyName:`node`},{prefix:`meshes/`,dependencyName:`mesh`},{prefix:`materials/`,dependencyName:`material`},{prefix:`textures/`,dependencyName:`texture`},{prefix:`animations/`,dependencyName:`animation`}];async function $o(e,t){Xo&&console.log(e,t);let n=[];ns(Qo,e,t,n);let r=await Promise.all(n);return typeof t==`string`&&r.length===1?r[0]:r}function es(e,t){return!e||!t?!1:e[`needle:identifier`]!=null&&t[`needle:identifier`]!=null?e[`needle:identifier`]===t[`needle:identifier`]:!1}function ts(e,t){e[`needle:identifier`]=t}function ns(e,t,n,r){if(typeof n==`object`&&n)for(let i of Object.keys(n)){let a=n[i];if(typeof a==`string`){let o=rs(t,a);if(o!=null)typeof o.then==`function`?r.push(o.then(e=>n[i]=e)):n[i]=o;else{let o=is(e,t,a);if(o){r.push(o.then(e=>(n[i]=e,e)));continue}}}else if(Array.isArray(a))for(let n=0;na[n]=e)):a[n]=o;continue}for(let o of e){let e=as(o.prefix,i);if(e>=0){Xo&&console.log(o,e,o.dependencyName),r.push(t.getDependency(o.dependencyName,e).then(e=>a[n]=e));break}}typeof i==`object`&&ns(e,t,i,r)}else typeof a==`object`&&ns(e,t,a,r)}else if(typeof n==`string`){let i=is(e,t,n);i&&r.push(i)}}function rs(e,t){if(e&&e.plugins&&typeof t==`string`){for(let n of Zo)if(t.startsWith(n)){let r=t.substring(n.length),i=r.indexOf(`/`);i>=0&&(r=r.substring(0,i));let a=e.plugins[r];if(Yo&&console.log(r,a),typeof a?.resolve==`function`){let i=t.substring(n.length+r.length+1);return a.resolve(e,i)}break}}return null}function is(e,t,n){for(let r of e){let e=as(r.prefix,n);if(e>=0)return Xo&&console.warn(`GET DEPENDENCY`,r,e,r.dependencyName),t.getDependency(r.dependencyName,e)}return null}function as(e,t){if(typeof t==`string`&&t.startsWith(e)){let n=t.substring(e.length),r=Number.parseInt(n);if(r>=0)return r}return-1}var os=`NEEDLE_persistent_assets`;function ss(e){return e?.___persistentAsset===!0}var cs=class{get name(){return os}parser;constructor(e){this.parser=e}async afterRoot(e){if(!this.parser?.json?.extensions)return;let t=this.parser.json.extensions[os];if(!t)return;Yo&&console.log(t);let n=[];for(let e of t?.assets){let t=$o(this.parser,e);t&&n.push(t)}await Promise.all(n)}resolve(e,t){let n=Number.parseInt(t);if(n>=0){Yo&&console.log(t);let r=e.json.extensions[os];if(r){let e=r?.assets[n];if(e&&typeof e==`object`){e.___persistentAsset=!0;let t=e.__type;t&&ji.get(t)}return e}}return null}},ls=A(`debugserializer`),us=new class{register(e,t){if(this.typeMap.has(e)){let n=this.typeMap.get(e);if(n===t)return;ls&&console.warn(`Type: `+e+` is already registered`,t,n)}ls&&console.log(`Register type serializer`,t.name,t,e),this.typeMap.set(e,t)}typeMap=new Map;getSerializer(e){if(e)return this.typeMap.get(e)}getSerializerForConstructor(e,t=0){if(t>20)return;if(!e||!e.constructor){ls&&console.log(`invalid type`);return}let n=e.name,r=this.getSerializer(e);if(r!==void 0)return ls&&console.log(`FOUND SERIALIZER`,r?.name,e.name,e.constructor.name,`for type: `+n,r,e,this.typeMap),r;let i=Object.getPrototypeOf(e);if(i&&i!==e){let e=this.getSerializerForConstructor(i,++t);if(e){let t=i.constructor||i.prototype;ls&&console.log(`FOUND SERIALIZER(in constructor) `+t.constructor.name,t.name,t,e),this.register(t,e)}return e}ls&&console.warn(`No serializer found for `+n,e,e.name,e.constructor.name)}},ds=class{name;constructor(e,t){if(this.name=t,Array.isArray(e))for(let t of e)us.register(t,this);else us.register(e,this)}},fs=class{isDevMode=wt();cache={};registerDefinedKeys(e,t){if(this.isDevMode&&this.cache[e]===void 0){this.cache[e]=Object.keys(t);let n=t;n.$serializedTypes&&Object.keys(n.$serializedTypes)&&this.cache[e].push(...Object.keys(n.$serializedTypes)),ls&&console.log(`registerDefinedKeys for `+e,this.cache[e],t)}}getDefinedKey(e,t){return this.cache[e]===void 0?!1:this.cache[e].includes(t)}},ps=class{root;gltf;gltfId;object;target;nodeId;nodeToObject;objectToNode;context;path;type;serializable;implementationInformation;constructor(e){this.root=e}};function ms(e,t){let n=e.$serializedTypes;if(n===void 0)return null;let r={};for(let i in n){let n=e[i];if(typeof n==`object`&&n){let e=us.getSerializerForConstructor(n);if(e){r[i]=e.onSerialize(n,t);continue}}r[i]=n}function i(t){let n=ji._types;for(let[t,r]of n)if(r===e.constructor)return t;return t.__name||t.constructor.name}return r.name=i(e),typeof e.guid==`string`&&(r.guid=e.guid),r}var hs=[];function gs(e,t){return e?(typeof e.$serializedTypes==`object`&&(t||={},Object.assign(t,e.$serializedTypes)),gs(Object.getPrototypeOf(e),t)):t}function _s(e,t,n){if(!e)return!1;if(n.target=e,e.onBeforeDeserialize!==void 0){let r=e.onBeforeDeserialize(t,n);if(typeof r==`boolean`)return r}let r=gs(e);if(t){if(typeof t.guid==`string`&&(e.guid=t.guid),r)for(let i in r){let a=r[i],o=t[i];if(ls&&console.log(i,o,e,a),e[i]!==void 0&&o===void 0||(n.type=void 0,n.path=i,n.serializable=a,e.onBeforeDeserializeMember!==void 0&&e.onBeforeDeserializeMember(i,o,n)===!0))continue;if(a===null)e[i]=o;else{if(Array.isArray(a))for(let t=0;tPlease rename "`+t+`" to "`+a+`" in `+r),console.warn(`Please use lowercase for field: "`+t+`" in `+r,o,e));continue}if(o!=null){if(typeof o==`object`&&(i===void 0||!i.isObject3D)){if(typeof o.node==`number`||typeof o.guid==`string`){if(o.could_not_resolve)continue;if(!(i!==void 0&&Object.keys(i).length>1)){zn(Tn.Warn,`Missing serialization for object reference!\n\nPlease change to: \n@serializable(Object3D)\n${a}? : Object3D;\n\nin ${r}.ts\nSee documentation`),console.warn(r,a,e[a],e);continue}}else if(!Array.isArray(i)){let e=i.constructor?.name;if(e===`Object`&&!i.constructor[`did_warn:missing_serializable`]){i.constructor[`did_warn:missing_serializable`]=!0;let t=`You might be missing a @serializable(Type) decorator for field "`+a+`" in `+r+`.ts`;console.warn(t+`\n${a}:`,o,e),zn(Tn.Warn,`Dev Warning: Are you missing a type in @serializable? Please check the browser console for details`)}}}if(typeof i==`string`&&typeof o==`string`&&(o.endsWith(`.gltf`)||o.endsWith(`.glb`))){zn(Tn.Warn,`Missing serialization for object reference!\n\nPlease change to: \n@serializable(AssetReference)\n${a}? : AssetReference;\n\nin script ${r}.ts\ndocumentation`),console.warn(r,a,e[a],e);continue}}}}function bs(e,t){for(let n of Object.keys(t)){let r=t[n];if(typeof r==`object`&&r&&r!==void 0){let t=e[n];if(!t){ls&&console.log(n,`is undefined on`,e);continue}for(let e of Object.keys(r))if(t[e]===void 0&&Ss(r[e])&&!Ss(t)){let n=xs(t,e);if(n&&(n?.writable===void 0||n?.writable===!1)&&n.set===void 0){ls&&console.warn(`Property is not writable "`+e+`"`,t,n,r[e],t[e]);continue}t[e]=r[e]}}}}function xs(e,t){for(;e;){let n=Object.getOwnPropertyDescriptor(e,t);if(n)return n;e=Object.getPrototypeOf(e)}}function Ss(e){switch(typeof e){case`number`:case`string`:case`boolean`:return!0}return!1}function Cs(e,t,n,r,i){let a=typeof t==`function`&&t.prototype===void 0,o=t;if(a)try{if(o=t?.call(t,i),a=!1,o==null)return}catch(t){console.error(`Error in callback`,t,e)}if(n.type=o,!a&&i&&(i instanceof T||i instanceof x||i instanceof ie||i instanceof Se))return i;if(r||={serializer:us.getSerializerForConstructor(o)},i&&typeof i==`object`&&ss(i)){if(i.__concreteInstance)return i.__concreteInstance;let t=i;if(!t.$serializedTypes&&o.prototype.$serializedTypes&&(t.$serializedTypes=o.prototype.$serializedTypes),t.$serializedTypes&&_s(t,e,n),i&&o!==void 0)try{let t=null;r.serializer&&(t=r.serializer.onDeserialize(e,n)),t||(t=new o,Yo&&console.log(`Create concrete instance for persistent asset`,i,`instance:`,t),Es(t,i)),i.__concreteInstance=t,i=t}catch(e){console.error(`Error creating instance or creating values on instance`,e,i,o)}return i}if(Array.isArray(e)){let i=[];for(let a=0;a=0&&this._context.pre_update_callbacks.splice(e,1);for(let e in this._assetReferences)this._assetReferences[e]?.unload();this._assetReferences={}}preUpdate=()=>{};findAssetReference(e){return this._assetReferences[e]||null}registerAssetReference(e){return e.url&&(this._assetReferences[e.url]?console.warn(`Asset reference already registered`,e):this._assetReferences[e.url]=e),e}unregisterAssetReference(e){e.url&&delete this._assetReferences[e.url]}},As=Symbol(`assetReference`),js=class e{static getOrCreateFromUrl(t,n){if(!n&&(n=B.Current,!n))throw Error(`Context is required when sourceId is a string. When you call this method from a component you can call it with "getOrCreate(this, url)" where "this" is the component.`);let r=n.addressables,i=r.findAssetReference(t);if(i)return i;let a=new e(t,n.hash);return r.registerAssetReference(a),a}static getOrCreate(t,n,r){if(typeof t==`string`){if(!r&&(r=B.Current,!r))throw Error(`Context is required when sourceId is a string. When you call this method from a component you can call it with "getOrCreate(this, url)" where "this" is the component.`)}else r=t.context,t=t.sourceId;let i=Zt(t,n);Os&&console.log(`GetOrCreate Addressable from`,t,n,`FinalPath=`,i);let a=r.addressables,o=a.findAssetReference(i);if(o)return o;let s=new e(i,r.hash);return a.registerAssetReference(s),s}isAssetReference=!0;get rawAsset(){return this._rawAsset}get asset(){return this._glbRoot??(this._rawAsset?.scene||null)}set asset(e){e?this._rawAsset={animations:e.animations,scene:e,scenes:[e]}:this._rawAsset=null}get uri(){return this._url}get url(){return this._url}get urlName(){return this._urlName}get hasUrl(){return this._url!==void 0&&(this._url.startsWith(`http`)||this._url.startsWith(`blob:`)||this._url.startsWith(`www.`)||this._url.includes(`/`))}_rawAsset=null;_glbRoot;_url;_urlName;_progressListeners=[];_isLoadingRawBinary=!1;_rawBinary;constructor(...e){typeof e[0]==`object`?`url`in e[0]?this._url=e[0].url:(this._url=``,e[0].asset&&(this.asset=e[0].asset)):(this._url=e[0],e[2]instanceof S&&(this.asset=e[2]));let t=this._url.lastIndexOf(`/`);if(t>=0){this._urlName=this._url.substring(t+1);let e=this._urlName.lastIndexOf(`.`);e>=0&&(this._urlName=this._urlName.substring(0,e))}else this._urlName=this._url;Go(this._url,this.onResolvePrefab.bind(this))}async onResolvePrefab(e){return e===this.url&&(this.mustLoad&&await this.loadAssetAsync(),this.asset)?this.asset:null}get mustLoad(){return!this.asset||this.asset.__destroyed===!0||Nf(this.asset)===!0}_loadingPromise=null;isLoaded(){return this._rawBinary||this.asset!==void 0}unload(){this.asset&&(Os&&console.log(`Unload`,this.asset),`scene`in this.asset&&this.asset.scene&&zf(this.asset.scene,!0,!0),zf(this.asset,!0,!0)),this.asset=null,this._rawBinary=void 0,this._glbRoot=null,this._loadingPromise=null,B.Current&&B.Current.addressables.unregisterAssetReference(this)}async preload(){return!this.mustLoad||this._isLoadingRawBinary?null:this._rawBinary===void 0?(this._isLoadingRawBinary=!0,Os&&console.log(`Preload`,this.url),this._rawBinary=(await mo.download(this.url,e=>{this.raiseProgressEvent(e)}))?.buffer??null,this._isLoadingRawBinary=!1,this._rawBinary):this._rawBinary}async loadAssetAsync(e){if(Os&&console.log(`[AssetReference] loadAssetAsync`,this.url),!this.mustLoad)return this.asset?.parent&&console.warn(`[AssetReference] "${this.urlName}" is already loaded and parented to "${this.asset.parent.name||`scene`}". loadAssetAsync() returns the same shared instance — use .instantiate() to create a new copy.`),this.asset;if(e&&this._progressListeners.push(e),this._loadingPromise!==null)return this._loadingPromise.then(e=>this.asset);let t=B.Current;if(this._rawBinary){if(!(this._rawBinary instanceof ArrayBuffer))return console.error(`[AssetReference] Failed loading – Invalid data. Must be of type ArrayBuffer. `+typeof this._rawBinary),null;this._loadingPromise=ba().parseSync(t,this._rawBinary,this.url,null),this.raiseProgressEvent(new ProgressEvent(`progress`,{loaded:this._rawBinary.byteLength,total:this._rawBinary.byteLength}))}else Os&&console.log(`Load async`,this.url),this._loadingPromise=ba().loadSync(t,this.url,this.url,null,e=>{this.raiseProgressEvent(e)});this._loadingPromise.finally(()=>this._loadingPromise=null);let n=await this._loadingPromise;return this._progressListeners.length=0,this._glbRoot=this.tryGetActualGameObjectRoot(n),n?(n[As]=this,this._glbRoot&&(this._glbRoot[As]=this),this.asset&&(this.asset[As]=this),ep(t),n.scene!==void 0&&(this._rawAsset=n),this.asset):null}instantiate(e){return this.onInstantiate(e,!1)}instantiateSynced(e,t=!0){return this.onInstantiate(e,!0,t)}beginListenDownload(e){this._progressListeners.indexOf(e)<0&&this._progressListeners.push(e)}endListenDownload(e){let t=this._progressListeners.indexOf(e);t>=0&&this._progressListeners.splice(t,1)}raiseProgressEvent(e){for(let t of this._progressListeners)t(this,e)}static currentlyInstantiating=new Map;async onInstantiate(t,n=!1,r){let i=B.Current,a=new Tf;if(t instanceof S?a.parent=t:t&&(Object.assign(a,t),a.cloneAssign(t)),a.parent===void 0&&(a.parent=i.scene),this.mustLoad&&await this.loadAssetAsync(),Os&&console.log(`Instantiate`,this.url,`parent:`,t),this.asset){Os&&console.log(`Add to scene`,this.asset);let t=e.currentlyInstantiating.get(this.url);if(t!==void 0&&t>=1e4)return console.error(`Recursive or too many instantiations of `+this.url+` in the same frame (`+t+`)`),null;try{if(t===void 0&&(t=0),t+=1,e.currentlyInstantiating.set(this.url,t),n){a.context=i;let e=this.asset;e.guid=this.url;let t=zo(e,a,void 0,r);if(t)return t}else{let e=Wf(this.asset,a);if(e)return e}}finally{i.post_render_callbacks.push(()=>{t===void 0||t<0?t=0:--t,e.currentlyInstantiating.set(this.url,t)})}}else Os&&console.warn(`Failed to load asset`,this.url);return null}tryGetActualGameObjectRoot(e){if(e&&e.scene){let t=e.scene;if(t.isGroup&&t.children.length===1&&t.children[0].name+`glb`===t.name){let e=t.children[0];return e.animations=t.animations,e}else return t}return null}};new class extends ds{constructor(){super([js],`AssetReferenceSerializer`)}onSerialize(e,t){if(e&&e.uri!==void 0&&typeof e.uri==`string`)return e.uri}onDeserialize(e,t){if(typeof e==`string`)return t.context?t.gltfId?js.getOrCreate(t.gltfId,e,t.context):(console.error(`Missing source id`),null):(console.error(`Missing context`),null);if(e instanceof S){if(!t.context)return console.error(`Missing context`),null;if(!t.gltfId)return console.error(`Missing source id`),null;let n=e,r=t.context,i=n.guid??n.uuid,a=r.addressables.findAssetReference(i);if(a)return a;let o=new js(i,void 0,n);return r.addressables.registerAssetReference(o),o}return null}};var Ms=Promise.resolve(null),Ns=class e{static imageReferences=new Map;static getOrCreate(t){let n=e.imageReferences.get(t);return n||(n=new e(t),e.imageReferences.set(t,n)),n}constructor(e){this.url=e}url;_bitmap;_bitmapObject;dispose(){this._bitmapObject&&this._bitmapObject.close(),this._bitmap=void 0}createHTMLImage(){let e=new Image;return e.src=this.url,e}loader=null;createTexture(){return this.url?(this.loader||=new me,this.loader.setCrossOrigin(`anonymous`),this.loader.loadAsync(this.url).then(e=>(e&&!e.name?.length&&(e.name=this.url.split(`/`).pop()??this.url),e))):(console.error(`Can not load texture without url`),Ms)}getBitmap(){return this._bitmap||=new Promise((e,t)=>{let n=document.createElement(`img`);n.addEventListener(`load`,()=>{this._bitmap=createImageBitmap(n).then(t=>(this._bitmapObject=t,e(t),t))}),n.addEventListener(`error`,t=>{console.error(`Failed to load image:`+this.url,t),e(null)}),n.src=this.url}),this._bitmap}},Ps=class extends ds{constructor(){super([Ns],`ImageReferenceSerializer`)}onSerialize(e,t){return null}onDeserialize(e,t){if(typeof e==`string`){let n=Zt(t.gltfId,e);return Ns.getOrCreate(n)}}};new Ps;var Fs=class e{static cache=new Map;static getOrCreate(t){let n=e.cache.get(t);return n||(n=new e(t),e.cache.set(t,n)),n}async loadRaw(){return this.res||=fetch(this.url),this.res.then(e=>e.blob())}async loadText(){return this.res||=fetch(this.url),this.res.then(e=>e.text())}url;res;constructor(e){this.url=e}},Is=class extends ds{constructor(){super([Fs],`FileReferenceSerializer`)}onSerialize(e,t){return null}onDeserialize(e,t){if(typeof e==`string`){let n=Zt(t.gltfId,e);return Fs.getOrCreate(n)}}};new Is;var Ls;(function(e){e.Visible=`application-visible`,e.Hidden=`application-hidden`,e.MuteChanged=`application-mutechanged`})(Ls||={});var Rs=!1,zs=[];function Bs(){if(Rs)return;M()&&console.debug(`[Needle Engine] User input registered: Media playback is now allowed.`),Rs=!0;let e=[...zs];zs.length=0,e.forEach(e=>e())}document.addEventListener(`mousedown`,Bs),document.addEventListener(`pointerup`,Bs),document.addEventListener(`click`,Bs),document.addEventListener(`dragstart`,Bs),document.addEventListener(`touchend`,Bs),document.addEventListener(`keydown`,Bs),typeof window<`u`&&`userActivation`in navigator&&navigator.userActivation?.isActive&&(M()&&console.debug(`[Needle Engine] User input already active: Media playback is now allowed.`),zs.length=0,Rs=!0);var Vs=class e extends EventTarget{static get userInteractionRegistered(){return Rs}static registerWaitForAllowAudio=e.registerWaitForInteraction;static registerWaitForInteraction(e){if(e!==null){if(Rs){e();return}zs.indexOf(e)===-1&&zs.push(e)}}static unregisterWaitForInteraction(e){let t=zs.indexOf(e);t!==-1&&zs.splice(t,1)}_mute=!1;get muted(){return this._mute}set muted(e){e!==this._mute&&(this._mute=e,this.dispatchEvent(new Event(Ls.MuteChanged)))}context;get hasFocus(){return document.hasFocus()}get isVisible(){return this._isVisible}_isVisible=!0;constructor(e){super(),this.context=e,window.addEventListener(`visibilitychange`,this.onVisiblityChanged.bind(this),!1)}onVisiblityChanged(e){switch(e.target.visibilityState){case`hidden`:this._isVisible=!1,this.dispatchEvent(new Event(Ls.Hidden));break;case`visible`:this._isVisible=!0,this.dispatchEvent(new Event(Ls.Visible));break}}};function*Hs(e,t=null){let n=t?t.time:B.Current.time,r=n.time;for(;n.time-rt=!1),e.catch(()=>t=!1);t;)yield}var Gs;(function(e){e[e.Quad=0]=`Quad`,e[e.Cube=1]=`Cube`,e[e.Sphere=2]=`Sphere`,e[e.Cylinder=3]=`Cylinder`,e[e.RoundedCube=10]=`RoundedCube`})(Gs||={});var Ks=class{static createText(e,t){let n=null,r=t?.font||Ys(t?.familyFamily||null);r instanceof lt?n=this.#e(e,r,t):n??=new ie;let i=t?.color||16777215,a=new x(n,t?.material??new Ce({color:i}));return this.applyDefaultObjectOptions(a,t),r instanceof Promise?r.then(n=>{a.geometry=this.#e(e,n,t),t?.onGeometry&&t.onGeometry(a)}):t?.onGeometry&&t.onGeometry(a),a}static#e(e,t,n){let r=n?.depth||.1;return new gt(e,{font:t,size:1,depth:r,height:r,bevelEnabled:n?.bevel||!1,bevelThickness:.01,bevelOffset:.01,bevelSize:.01})}static createOccluder(e){let t=new re({colorWrite:!1,depthWrite:!0,side:2});return this.createPrimitive(e,{material:t})}static createPrimitive(e,t){let n,r=t?.color||16777215;switch(e){case`Quad`:case Gs.Quad:{let e=new Ke(1,1,1,1),i=t?.material??new Ce({color:r});t?.texture&&`map`in i&&(i.map=t.texture),n=new x(e,i),n.name=`Quad`}break;case`Cube`:case Gs.Cube:{let e=new Xe(1,1,1),i=t?.material??new Ce({color:r});t?.texture&&`map`in i&&(i.map=t.texture),n=new x(e,i),n.name=`Cube`}break;case Gs.RoundedCube:case`RoundedCube`:{let e=qs(1,1,1,.1,2),i=t?.material??new Ce({color:r});t?.texture&&`map`in i&&(i.map=t.texture),n=new x(e,i),n.name=`RoundedCube`}break;case`Sphere`:case Gs.Sphere:{let e=new Ue(.5,16,16),i=t?.material??new Ce({color:r});t?.texture&&`map`in i&&(i.map=t.texture),n=new x(e,i),n.name=`Sphere`}break;case`Cylinder`:case Gs.Cylinder:{let e=new c(.5,.5,1,32),i=t?.material??new Ce({color:r});t?.texture&&`map`in i&&(i.map=t.texture),n=new x(e,i),n.name=`Cylinder`}break;case`ShaderBall`:n=new ve,n.name=`ShaderBall`,Qs(n,t);break}return this.applyDefaultObjectOptions(n,t),n}static createSprite(e){let t=new Ae({color:16777215});e?.texture&&`map`in t&&(t.map=e.texture);let n=new Ie(t);return this.applyDefaultObjectOptions(n,e),n}static applyDefaultObjectOptions(e,t){e.receiveShadow=!0,e.castShadow=!0,t?.name&&(e.name=t.name),t?.position&&(Array.isArray(t.position)?e.position.set(t.position[0],t.position[1],t.position[2]):e.position.set(t.position.x||0,t.position.y||0,t.position.z||0)),t?.rotation&&(Array.isArray(t.rotation)?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2]):e.rotation.set(t.rotation.x||0,t.rotation.y||0,t.rotation.z||0)),t?.scale&&(typeof t.scale==`number`?e.scale.set(t.scale,t.scale,t.scale):Array.isArray(t.scale)?e.scale.set(t.scale[0],t.scale[1],t.scale[2]):e.scale.set(t.scale.x||1,t.scale.y||1,t.scale.z||1)),t?.receiveShadow!=null&&(e.receiveShadow=t.receiveShadow),t?.castShadow!=null&&(e.castShadow=t.castShadow),t?.parent&&t.parent.add(e)}};function qs(e,t,n,r,i){let a=new Le,o=1e-5,s=r-o;a.absarc(o,o,o,-Math.PI/2,-Math.PI,!0),a.absarc(o,t-s*2,o,Math.PI,Math.PI/2,!0),a.absarc(e-s*2,t-s*2,o,Math.PI/2,0,!0),a.absarc(e-s*2,o,o,0,-Math.PI/2,!0);let c=new Re(a,{bevelEnabled:!0,bevelSegments:i*2,steps:1,bevelSize:s,bevelThickness:r,curveSegments:i,UVGenerator:{generateTopUV:(n,r)=>{let i=[];for(let n=0;n{let c=[];return c.push(new w(r[i]/e,r[i+1]/t)),c.push(new w(r[a]/e,r[a+1]/t)),c.push(new w(r[o]/e,r[o+1]/t)),c.push(new w(r[s]/e,r[s+1]/t)),c}}});return c.scale(1,1,1-r),c.center(),c.index||c.setIndex(Array.from({length:c.attributes.position.count},(e,t)=>t)),c.computeVertexNormals(),c}var Js=new Map;function Ys(e){let t=``;switch(e){default:case`OpenSans`:t=`https://cdn.needle.tools/static/fonts/facetype/Open Sans_Regular_ascii.json`;break;case`Helvetiker`:t=`https://cdn.needle.tools/static/fonts/facetype/Helvetiker_Regular_ascii.json`;break}if(Js.has(t)){let e=Js.get(t);if(e)return e}let n=new ot,r=new Promise((e,r)=>{n.load(t,n=>{Js.set(t,n),e(n)},void 0,r)});return Js.set(t,r),r}var Xs=!1,Zs=null;function Qs(e,t){if(Zs===null){let e=new at,t=yt(null);e.setDRACOLoader(t.dracoLoader),e.setKTX2Loader(t.ktx2Loader),Xs=!0,Zs=e.loadAsync(`https://cdn.needle.tools/static/models/shaderball.glb`).then(e=>{let t=e.scene;return t.position.y-=.5,t}).catch(e=>(console.warn(`Failed to load shaderball mesh: `+e.message),ec())).finally(()=>{Xs=!1})}if(Xs){let n=ec();n.name=`ShaderBall-Placeholder`;let r=n.children[0];r?.type===`Mesh`&&$s(r,t),e.add(n)}Zs.then(n=>{e.children.forEach(t=>{t.name===`ShaderBall-Placeholder`&&e.remove(t)});let r=n.clone(),i=r.children[0];i?.type===`Mesh`&&(i.geometry.attributes.tangent||i.geometry.computeTangents(),$s(i,t)),e.add(r)})}function $s(e,t){if(t?.color||t?.material||t?.texture){let n=t?.material??e.material?.clone()??new Ce;t.color&&`color`in n&&n.color instanceof a&&n.color.set(t.color),t?.texture&&`map`in n&&(n.map=t.texture),e.material=n}}function ec(){return new ve().add(Ks.createPrimitive(`Sphere`,{material:new re({transparent:!0,opacity:.1})}))}var I=A(`debuginput`),tc;(function(e){e.Mouse=`mouse`,e.Touch=`touch`,e.Controller=`controller`,e.Hand=`hand`})(tc||={});var nc;(function(e){e.PointerDown=`pointerdown`,e.PointerUp=`pointerup`,e.PointerMove=`pointermove`})(nc||={});var rc;(function(e){e.KeyDown=`keydown`,e.KeyUp=`keyup`,e.KeyPressed=`keypress`})(rc||={});var L;(function(e){e.PointerDown=`pointerdown`,e.PointerUp=`pointerup`,e.PointerMove=`pointermove`,e.KeyDown=`keydown`,e.KeyUp=`keyup`,e.KeyPressed=`keypress`})(L||={});var ic=class extends PointerEvent{clientZ;deviceIndex;origin;source;mode;get isSpatial(){return this.mode!=`screen`}get ray(){return this._ray||=new p(this.space.worldPosition.clone(),this.space.worldForward.clone()),this._ray}set ray(e){this._ray=e}get hasRay(){return this._ray!==void 0}_ray;space;isClick=!1;isDoubleClick=!1;get used(){return this._used}_used=!1;use(){this._used=!0}get pointerId(){return this._pointerid}_pointerid;get pointerType(){return this._pointerType}_pointerType;buttonName=void 0;get type(){return this._type}_type;metadata={};intersections=[];constructor(e,t,n){super(e,n),this.clientZ=n.clientZ,this._pointerid=n.pointerId,this._pointerType=n.pointerType,this._type=e,this.deviceIndex=n.deviceIndex,this.origin=n.origin,this.source=t,this.mode=n.mode,this._ray=n.ray,this.space=n.device,this.buttonName=n.buttonName}_immediatePropagationStopped=!1;get immediatePropagationStopped(){return this._immediatePropagationStopped}_propagationStopped=!1;get propagationStopped(){return this._immediatePropagationStopped||this._propagationStopped}stopImmediatePropagation(){this._immediatePropagationStopped=!0,super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}stopPropagation(){this._propagationStopped=!0,super.stopPropagation(),this.source?.stopPropagation(),I&&console.warn(`Stop propagation...`,this.pointerId,this.pointerType)}},ac=class extends KeyboardEvent{source;constructor(e,t,n){super(e,n),this.source=t}stopImmediatePropagation(){super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}},oc=class{key;keyType;source;constructor(e){this.key=e.key,this.keyType=e.type,this.source=e}},sc;(function(e){e[e.Early=-100]=`Early`,e[e.Default=0]=`Default`,e[e.Late=100]=`Late`})(sc||={});var cc=class{_eventListeners={};addEventListener(e,t,n){if(this._eventListeners[e]||(this._eventListeners[e]=[]),!t||typeof t!=`function`){console.error(`Invalid call to addEventListener: callback is required and must be a function!`);return}n=n?{...n}:{};let r=0;n?.queue!=null&&(r=n.queue);let i=this._eventListeners[e],a=i.find(e=>e.priority===r);a?a.listeners.push({callback:t,options:n}):(i.push({priority:r,listeners:[{callback:t,options:n}]}),i.sort((e,t)=>e.priority-t.priority))}removeEventListener(e,t,n){if(!this._eventListeners[e]||!t)return;let r=this._eventListeners[e];if(n?.queue!=null){let e=r.find(e=>e.priority===n.queue);if(!e)return;let i=e.listeners.findIndex(e=>e.callback===t);i>=0&&e.listeners.splice(i,1)}else for(let e of r){let n=e.listeners.findIndex(e=>e.callback===t);n>=0&&e.listeners.splice(n,1)}}dispatchEvent(e){let t=!1;if(e instanceof ac){let t=this._eventListeners[e.type];if(t)for(let n of t)for(let t=0;t10&&this._setCursorTypes.shift(),this.updateCursor()}unsetCursor(e){for(let t=this._setCursorTypes.length-1;t>=0;t--)if(this._setCursorTypes[t]===e){this._setCursorTypes.splice(t,1),this.updateCursor();break}}updateCursor(){this._setCursorTypes?.length==0?this.context.domElement.style.cursor=`default`:this.context.domElement.style.cursor=this._setCursorTypes[this._setCursorTypes.length-1]}getIsPointerIdInUse(e){for(let t of this._pointerEventsPressed)if(t.pointerId===e&&t.used)return!0;return!1}getPointerPressedCount(){let e=0;for(let t=0;t=this._pointerPositions.length?null:this._pointerPositions[e]}getPointerPositionLastFrame(e){return e>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[e]}getPointerPositionDelta(e){return e>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[e]}getPointerPositionRC(e){return e>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[e]}getPointerDown(e){return e>=this._pointerDown.length?!1:this._pointerDown[e]}getPointerUp(e){return e>=this._pointerUp.length?!1:this._pointerUp[e]}getPointerPressed(e){return e>=this._pointerPressed.length?!1:this._pointerPressed[e]}getPointerClicked(e){return e>=this._pointerClick.length?!1:this._pointerClick[e]}getPointerDoubleClicked(e){return e>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[e]}getPointerDownTime(e){return e>=this._pointerDownTime.length?-1:this._pointerDownTime[e]}getPointerUpTime(e){return e>=this._pointerUpTime.length?-1:this._pointerUpTime[e]}getPointerLongPress(e){return e>=this._pointerDownTime.length?!1:this.getPointerPressed(e)&&this.context.time.time-this._pointerDownTime[e]>this._longPressTimeThreshold}getIsMouse(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]===tc.Mouse}getIsTouch(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]===tc.Touch}getTouchesPressedCount(){let e=0;for(let t=0;t=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[e]}getMouseWheelDeltaY(e=0){return e>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[e]}getPointerEvent(e){if(!(e>=this._pointerEvent.length))return this._pointerEvent[e]??void 0}*foreachPointerId(e){for(let t=0;t=0&&n.splice(r,1)}getFirstPressedButtonForPointer(e){let t=this._pressedStack.get(e);if(t)return t[0]}getLatestPressedButtonForPointer(e){let t=this._pressedStack.get(e);if(t)return t[t.length-1]}getKeyDown(e){if(e!==void 0)return this.isKeyDown(e);for(let e in this.keysPressed){let t=this.keysPressed[e];if(t.startFrame===this.context.time.frameCount)return t.key}return null}getKeyPressed(e){if(e!==void 0)return this.isKeyPressed(e);for(let e in this.keysPressed){let t=this.keysPressed[e];if(t.pressed)return t.key}return null}getKeyUp(e){if(e!==void 0)return this.isKeyUp(e);for(let e in this.keysPressed){let t=this.keysPressed[e];return t.pressed===!1&&t.frame===this.context.time.frameCount}return null}isKeyDown(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;let t=this.getCodeForCommonKeyName(e);if(t!==null){for(let e of t)if(this.isKeyDown(e))return!0;return!1}let n=this.keysPressed[e];return n?n.startFrame===this.context.time.frameCount&&n.pressed:!1}isKeyUp(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;let t=this.getCodeForCommonKeyName(e);if(t!==null){for(let e of t)if(this.isKeyUp(e))return!0;return!1}let n=this.keysPressed[e];return n?n.frame===this.context.time.frameCount&&n.pressed===!1:!1}isKeyPressed(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;let t=this.getCodeForCommonKeyName(e);if(t!==null){for(let e of t)if(this.isKeyPressed(e))return!0;return!1}let n=this.keysPressed[e];return n&&n.pressed||!1}getCodeForCommonKeyName(e){if(e.length===1){if(e>=`0`&&e<=`9`)return[`Digit`+e];if(e>=`a`&&e<=`z`)return[`Key`+e.toUpperCase()];if(e==` `)return[`Space`]}switch(e){case`shift`:case`Shift`:return[`ShiftLeft`,`ShiftRight`];case`control`:case`Control`:return[`ControlLeft`,`ControlRight`];case`alt`:case`Alt`:return[`AltLeft`,`AltRight`]}return null}createInputEvent(e){switch(e.type){case L.PointerDown:I&&Ti(`Create Pointer down`),this.onDownButton(e.deviceIndex,e.button),this.onDown(e);break;case L.PointerMove:I&&Ti(`Create Pointer move`),this.onMove(e);break;case L.PointerUp:I&&Ti(`Create Pointer up`),this.onUp(e),this.onReleaseButton(e.deviceIndex,e.button);break}}convertScreenspaceToRaycastSpace(e){return e.x=(e.x-this.context.domX)/this.context.domWidth*2-1,e.y=-((e.y-this.context.domY)/this.context.domHeight)*2+1,e}constructor(e){this.context=e,this.context.post_render_callbacks.push(this.onEndOfFrame)}_htmlEventSource;bindEvents(){this.unbindEvents(),this._htmlEventSource=this.context.renderer.domElement,window.addEventListener(`contextmenu`,this.onContextMenu),this._htmlEventSource.addEventListener(`pointerdown`,this.onPointerDown,{passive:!0}),window.addEventListener(`pointermove`,this.onPointerMove,{passive:!0,capture:!0}),window.addEventListener(`pointerup`,this.onPointerUp,{passive:!0}),window.addEventListener(`pointercancel`,this.onPointerCancel,{passive:!0}),window.addEventListener(`touchstart`,this.onTouchStart,{passive:!0}),window.addEventListener(`touchmove`,this.onTouchMove,{passive:!0}),window.addEventListener(`touchend`,this.onTouchEnd,{passive:!0}),this._htmlEventSource.addEventListener(`wheel`,this.onMouseWheel,{passive:!0}),window.addEventListener(`wheel`,this.onWheelWindow,{passive:!0}),window.addEventListener(`keydown`,this.onKeyDown,!1),window.addEventListener(`keypress`,this.onKeyPressed,!1),window.addEventListener(`keyup`,this.onKeyUp,!1),window.addEventListener(`blur`,this.onLostFocus)}unbindEvents(){for(let e in this._eventListeners)this._eventListeners[e].length=0;window.removeEventListener(`contextmenu`,this.onContextMenu),this._htmlEventSource?.removeEventListener(`pointerdown`,this.onPointerDown),window.removeEventListener(`pointermove`,this.onPointerMove),window.removeEventListener(`pointerup`,this.onPointerUp),window.removeEventListener(`pointercancel`,this.onPointerCancel),window.removeEventListener(`touchstart`,this.onTouchStart),window.removeEventListener(`touchmove`,this.onTouchMove),window.removeEventListener(`touchend`,this.onTouchEnd),this._htmlEventSource?.removeEventListener(`wheel`,this.onMouseWheel,!1),window.removeEventListener(`wheel`,this.onWheelWindow,!1),window.removeEventListener(`keydown`,this.onKeyDown,!1),window.removeEventListener(`keypress`,this.onKeyPressed,!1),window.removeEventListener(`keyup`,this.onKeyUp,!1),window.removeEventListener(`blur`,this.onLostFocus)}dispose(){let e=this.context.post_render_callbacks.indexOf(this.onEndOfFrame);e>=0&&this.context.post_render_callbacks.splice(e,1),this.unbindEvents()}onLostFocus=()=>{for(let e in this.keysPressed)this.keysPressed[e].pressed=!1};_receivedPointerMoveEventsThisFrame=[];onEndOfFrame=()=>{this._receivedPointerMoveEventsThisFrame.length=0;for(let e=0;e{this.canReceiveInput(e)};keysPressed={};onKeyDown=e=>{if(I&&console.log(`key down ${e.code}, ${this.context.application.hasFocus}`,e),!this.context.application.hasFocus)return;let t=this.keysPressed[e.code];if(t&&t.pressed)return;this.keysPressed[e.code]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:e.key,code:e.code};let n=new ac(L.KeyDown,e,e);this.onDispatchEvent(n)};onKeyPressed=e=>{if(!this.context.application.hasFocus)return;let t=this.keysPressed[e.code];if(!t)return;t.pressed=!0,t.frame=this.context.time.frameCount+1;let n=new ac(L.KeyPressed,e,e);this.onDispatchEvent(n)};onKeyUp=e=>{if(!this.context.application.hasFocus)return;let t=this.keysPressed[e.code];if(!t)return;t.pressed=!1,t.frame=this.context.time.frameCount+1;let n=new ac(L.KeyUp,e,e);this.onDispatchEvent(n)};onWheelWindow=e=>{document.pointerLockElement&&this.onMouseWheel(e)};onMouseWheel=e=>{if(this.canReceiveInput(e)===!1)return;this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;let t=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=t+e.deltaY};onPointerDown=e=>{if(this.context.isInAR||this.canReceiveInput(e)===!1)return;e.target instanceof HTMLElement&&e.target.setPointerCapture(e.pointerId);let t=this.getPointerId(e);I&&Ti(`pointer down #${t}, identifier:${e.pointerId}`);let n=this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),r=new ic(L.PointerDown,e,{origin:this,mode:`screen`,deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:n,pressure:e.pressure});this.onDown(r)};onPointerMove=e=>{if(this.context.isInAR||this._receivedPointerMoveEventsThisFrame.includes(e.pointerId))return;this._receivedPointerMoveEventsThisFrame.push(e.pointerId);let t=e.button;e.pointerType===`mouse`&&(t=this.getFirstPressedButtonForPointer(0)??0);let n=this.getPointerId(e,t);t===-1&&(t=n);let r=this.getAndUpdateSpatialObjectForScreenPosition(n,e.clientX,e.clientY),i=new ic(L.PointerMove,e,{origin:this,mode:`screen`,deviceIndex:0,pointerId:n,button:t,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:r,pressure:e.pressure});this.onMove(i)};onPointerCancel=e=>{this.context.isInAR||(I&&console.log(`Pointer cancel`,e),this.onPointerUp(e))};onPointerUp=e=>{if(this.context.isInAR)return;e.target instanceof HTMLElement&&e.target.releasePointerCapture(e.pointerId);let t=this.getPointerId(e),n=new ic(L.PointerUp,e,{origin:this,mode:`screen`,deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),pressure:e.pressure});this.onUp(n),this._pointerIds[t]=-1,I&&console.log(`ID=`+t,`PointerId=`+e.pointerId,`ALL:`,[...this._pointerIds])};getPointerId(e,t){return e.pointerType===`mouse`?0+(t??e.button):this.getPointerIndex(e.pointerId)}getButtonName(e){let t=e.button;if(e.pointerType===`mouse`)switch(t){case 0:return`left`;case 1:return`middle`;case 2:return`right`}return`unknown`}onTouchStart=e=>{if(this.context.isInAR)for(let t=0;t{if(this.context.isInAR)for(let t=0;t{if(this.context.isInAR)for(let t=0;t=t.x&&n<=t.right&&r>=t.y&&r<=t.bottom;return I&&!i&&console.log(`Not in rect`,t,n,r),i}onDown(e){let t=e.pointerId;if(this.getPointerPressed(t)){I&&console.warn(`Received pointerDown event for pointerId that is already pressed: ${t}/${e.button}`,I?e:``);return}if(I&&console.log(e.pointerType,`DOWN`,t,e.button),this.isInRect(e)){for(this.setPointerState(t,this._pointerPressed,!0),this.setPointerState(t,this._pointerDown,!0),this.setPointerStateT(t,this._pointerEvent,e.source);t>=this._pointerTypes.length;)this._pointerTypes.push(e.pointerType);for(this._pointerTypes[t]=e.pointerType;t>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new o);for(this._pointerPositionDown[t].set(e.clientX,e.clientY,e.clientZ??0);t>=this._pointerPositions.length;)this._pointerPositions.push(new w);this._pointerPositions[t].set(e.clientX,e.clientY),t>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[t]=this.context.time.realtimeSinceStartup,this.updatePointerPosition(e),this._pointerEventsPressed.push(e),this.onDispatchEvent(e)}}onMove(e){let t=e.pointerId,n=this.getPointerPressed(t);n===!1&&!this.isInRect(e)||e.pointerType===tc.Touch&&!n||(this.updatePointerPosition(e),this.setPointerStateT(t,this._pointerEvent,e.source),this.onDispatchEvent(e))}onUp(e){let t=e.pointerId;if(!this.getPointerPressed(t)){I&&console.warn(`Received pointerUp for pointerId that is not pressed: ${t}/${e.button}`,I?e:``);return}I&&console.log(e.pointerType,`UP`,t),this.setPointerState(t,this._pointerPressed,!1),this.setPointerStateT(t,this._pointerEvent,e.source),this.setPointerState(t,this._pointerUp,!0),this.updatePointerPosition(e);for(let e=this._pointerEventsPressed.length-1;e>=0;e--)if(this._pointerEventsPressed[e].pointerId===t){this._pointerEventsPressed.splice(e,1);break}if(!this._pointerPositionDown[t]){I&&Ei(`[Received pointer up event without matching down event for button: `+t),console.warn(`Received pointer up event without matching down event for button: `+t);return}let n=this._pointerUpTime[t],r=this._pointerDownTime[t],i=this.context.time.realtimeSinceStartup,a=i-r;if(t>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),this._pointerUpTime[t]=i,a<1){let r=e.clientX-this._pointerPositionDown[t].x,a=e.clientY-this._pointerPositionDown[t].y,o=0;if(e.isSpatial&&e.clientZ!=null&&(o=e.clientZ-this._pointerPositionDown[t].z,r*=200,a*=200,o*=200),Math.abs(r)<5&&Math.abs(a)<5&&Math.abs(o)<5){this.setPointerState(t,this._pointerClick,!0),e.isClick=!0;let s=i-n;I&&console.log(`CLICK`,t,r,a,o,s),s0&&(this.setPointerState(t,this._pointerDoubleClick,!0),e.isDoubleClick=!0)}}this.onDispatchEvent(e)}updatePointerPosition(e){let t=e.pointerId;for(;t>=this._pointerPositions.length;)this._pointerPositions.push(new w);for(;t>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new w);for(;t>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new w);let n=this._pointerPositionsLastFrame[t];n.copy(this._pointerPositions[t]);let r=this._pointerPositionsDelta[t],i=e.clientX-n.x,a=e.clientY-n.y;if(e.source instanceof MouseEvent||e.source instanceof TouchEvent){let t=e.source;i===0&&t.movementX!==0&&(i=t.movementX||0),a===0&&t.movementY!==0&&(a=t.movementY||0)}r.x+=i,r.y+=a,this._pointerPositions[t].x=e.clientX,this._pointerPositions[t].y=e.clientY;let o=e.clientX,s=e.clientY;for(;t>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new w);let c=this._pointerPositionsRC[t];c.set(o,s),this.convertScreenspaceToRaycastSpace(c)}getPointerIndex(e){let t=-1;for(let n=0;n(e.postprocess(t),t.name=`PMREM_`+t.name,lc&&console.log(`NEEDLE_pmrem: loaded PMREM texture`,t),t))):(console.warn(`NEEDLE_pmrem: No KTX2Loader available on GLTFLoader — cannot load PMREM texture`),null)}static postprocess(e){return e.mapping=306,e}},dc=`NEEDLE_lightmaps`,fc=A(`debuglightmapsextension`)||A(`debuglightmaps`),pc;(function(e){e[e.Lightmap=0]=`Lightmap`,e[e.Skybox=1]=`Skybox`,e[e.Reflection=2]=`Reflection`})(pc||={});var mc=class{get name(){return dc}parser;registry;source;constructor(e,t,n){this.parser=e,this.registry=t,this.source=n}afterRoot(e){let t=this.parser.json.extensions;if(t){let e=t[dc];if(e){let t=e.textures;return t?.length?(fc&&console.log(e),new Promise(async(e,n)=>{let r=[];for(let e of t)if(e.pointer){fc&&console.log(e);let t=null;if(e.pointer.startsWith(`/textures/`)||e.pointer.startsWith(`textures/`))fc&&console.log(`Load texture from gltf`,e.pointer),t=$o(this.parser,e.pointer).then(t=>this.resolveTexture(e,t));else if(typeof e.pointer==`string`){fc&&console.log(`Load texture from path`,e.pointer);let n=Zt(this.source,e.pointer),r=n.endsWith(`.pmrem.ktx2`),i;i=n.endsWith(`.exr`)?new _t(this.parser.options.manager):n.endsWith(`.hdr`)?new ht(this.parser.options.manager):r?this.parser.options.ktx2Loader:new me(this.parser.options.manager),t=i.loadAsync(n,void 0).then(t=>(r&&t&&uc.postprocess(t),this.resolveTexture(e,t)))}else e.pointer;t&&r.push(t)}let i=await xn(r);i?.anyFailed&&(M()||fc)&&console.error(`[NEEDLE_lightmaps]Error during extension loading:`,i),e()})):null}}return null}resolveTexture(e,t){let n=t;fc&&console.log(`Light Texture loaded:`,n),n?.isTexture&&(this.registry?(n.colorSpace=l,this.registry.registerTexture(this.source,e.type,n,e.index)):console.log(pc[e.type],e.pointer,n))}},hc=!!A(`debuglightmaps`),gc=class{context;map=new Map;clear(){this.map.clear()}constructor(e){this.context=e}registerTexture(e,t,n,r){hc&&console.log(`Registering `,pc[t]+` "`+e+`"`,n),this.map.has(e)||this.map.set(e,new Map);let i=this.map.get(e),a=i?.get(t)??[];a.length0)for(let e=0;e`+(t/r.lastScreenCoverage).toFixed(0)+(n?``:`,`)}let d=o?o[i]?.density:-1,f=`LOD `+n.mesh_lod+` -TEX `+n.texture_lod;if(_c==`density`&&(f+=` -`+a+` tris -`+(d/r.lastScreenCoverage).toFixed(0)+` dens -`+(r.lastScreenCoverage*100).toFixed(1)+`% cov -`+(r.lastCentrality*100).toFixed(1)+`% centr -`+(vc.min.x.toFixed(2)+`-`+vc.max.x.toFixed(2)+`x`+vc.min.y.toFixed(2)+`-`+vc.max.y.toFixed(2))+` scr`),r.lastScreenCoverage>.1){let t=e,n=t.worldForward,r=t.worldPosition,a=P(n).multiplyScalar(c*.7).add(s),o=a.distanceTo(r),u=l[Math.min(l.length-1,Math.max(0,i))]+`88`,d=this.context.domHeight>0?screen.height/this.context.domHeight:1,p=e.isPerspectiveCamera?Math.tan(e.fov*Math.PI/180/2):1;H.DrawLabel(a,f,o*.012*d*p,void 0,16777215,u)}}}}},xc=new Int32Array(2),Sc=new Float32Array(xc.buffer),Cc=new Float64Array(xc.buffer),wc=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1,Tc=class e{constructor(e,t){this.low=e|0,this.high=t|0}static create(t,n){return t==0&&n==0?e.ZERO:new e(t,n)}toFloat64(){return(this.low>>>0)+this.high*4294967296}equals(e){return this.low==e.low&&this.high==e.high}};Tc.ZERO=new Tc(0,0);var Ec;(function(e){e[e.UTF8_BYTES=1]=`UTF8_BYTES`,e[e.UTF16_STRING=2]=`UTF16_STRING`})(Ec||={});var Dc=class e{constructor(e){this.bytes_=e,this.position_=0}static allocate(t){return new e(new Uint8Array(t))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(e){this.position_=e}capacity(){return this.bytes_.length}readInt8(e){return this.readUint8(e)<<24>>24}readUint8(e){return this.bytes_[e]}readInt16(e){return this.readUint16(e)<<16>>16}readUint16(e){return this.bytes_[e]|this.bytes_[e+1]<<8}readInt32(e){return this.bytes_[e]|this.bytes_[e+1]<<8|this.bytes_[e+2]<<16|this.bytes_[e+3]<<24}readUint32(e){return this.readInt32(e)>>>0}readInt64(e){return new Tc(this.readInt32(e),this.readInt32(e+4))}readUint64(e){return new Tc(this.readUint32(e),this.readUint32(e+4))}readFloat32(e){return xc[0]=this.readInt32(e),Sc[0]}readFloat64(e){return xc[+!wc]=this.readInt32(e),xc[+!!wc]=this.readInt32(e+4),Cc[0]}writeInt8(e,t){this.bytes_[e]=t}writeUint8(e,t){this.bytes_[e]=t}writeInt16(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8}writeUint16(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8}writeInt32(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8,this.bytes_[e+2]=t>>16,this.bytes_[e+3]=t>>24}writeUint32(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8,this.bytes_[e+2]=t>>16,this.bytes_[e+3]=t>>24}writeInt64(e,t){this.writeInt32(e,t.low),this.writeInt32(e+4,t.high)}writeUint64(e,t){this.writeUint32(e,t.low),this.writeUint32(e+4,t.high)}writeFloat32(e,t){Sc[0]=t,this.writeInt32(e,xc[0])}writeFloat64(e,t){Cc[0]=t,this.writeInt32(e,xc[+!wc]),this.writeInt32(e+4,xc[+!!wc])}getBufferIdentifier(){if(this.bytes_.length>10)+55296,(t&1023)+56320))}return r}__union_with_string(e,t){return typeof e==`string`?this.__string(t):this.__union(e,t)}__indirect(e){return e+this.readInt32(e)}__vector(e){return e+this.readInt32(e)+4}__vector_len(e){return this.readInt32(e+this.readInt32(e))}__has_identifier(e){if(e.length!=4)throw Error(`FlatBuffers: file identifier must be length 4`);for(let t=0;t<4;t++)if(e.charCodeAt(t)!=this.readInt8(this.position()+4+t))return!1;return!0}createLong(e,t){return Tc.create(e,t)}createScalarList(e,t){let n=[];for(let r=0;rthis.minalign&&(this.minalign=t);let r=~(this.bb.capacity()-this.space+n)+1&t-1;for(;this.space=0&&this.vtable[t]==0;t--);let n=t+1;for(;t>=0;t--)this.addInt16(this.vtable[t]==0?0:e-this.vtable[t]);this.addInt16(e-this.object_start);let r=(n+2)*2;this.addInt16(r);let i=0,a=this.space;outer_loop:for(t=0;t=0;t--)this.writeInt8(e.charCodeAt(t))}this.prep(this.minalign,4+r),this.addOffset(e),r&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space)}finishSizePrefixed(e,t){this.finish(e,t,!0)}requiredField(e,t){let n=this.bb.capacity()-e,r=n-this.bb.readInt32(n);if(this.bb.readInt16(r+t)==0)throw Error(`FlatBuffers: field `+t+` must be set`)}startVector(e,t,n){this.notNested(),this.vector_num_elems=t,this.prep(4,e*t),this.prep(n,e*t)}endVector(){return this.writeInt32(this.vector_num_elems),this.offset()}createSharedString(e){if(!e)return 0;if(this.string_maps||=new Map,this.string_maps.has(e))return this.string_maps.get(e);let t=this.createString(e);return this.string_maps.set(e,t),t}createString(e){if(!e)return 0;let t;if(e instanceof Uint8Array)t=e;else{t=[];let n=0;for(;n=56320)r=i;else{let t=e.charCodeAt(n++);r=(i<<10)+t+-56613888}r<128?t.push(r):(r<2048?t.push(r>>6&31|192):(r<65536?t.push(r>>12&15|224):t.push(r>>18&7|240,r>>12&63|128),t.push(r>>6&63|128)),t.push(r&63|128))}}this.addInt8(0),this.startVector(1,t.length,1),this.bb.setPosition(this.space-=t.length);for(let e=0,n=this.space,r=this.bb.bytes();e{t.push(e)})},async load(){if(n.MODULE)return n.MODULE;let r=await e();n.MODULE=r,n.MAYBEMODULE=r;for(let e of t)e(r);return t.length=0,r}};return n}var Pc={MaterialX:Nc(()=>r(()=>import(`./materialx.eMaybKAQ.js`),__vite__mapDeps([0,1,2,3]),import.meta.url)),RAPIER_PHYSICS:Nc(()=>r(()=>import(`./rapier3d.DBFmcAzL.js`).then(e=>e.t),__vite__mapDeps([4,2]),import.meta.url)),POSTPROCESSING:Nc(()=>r(()=>import(`./needle-engine.dep.DFJFZC0m.js`),__vite__mapDeps([5,6,3,2]),import.meta.url)),POSTPROCESSING_AO:Nc(()=>r(()=>import(`./N8AO.C2WXsanG.js`),__vite__mapDeps([7,8,6,3,2,9]),import.meta.url)),PEERJS:Nc(()=>r(()=>import(`./peerjs.UdR1_Ath.js`).then(e=>e.t),__vite__mapDeps([10,2]),import.meta.url))},Fc=void 0;function Ic(){return Fc}function Lc(e){Fc=e}async function Rc(e,t){let n=(await Pc.PEERJS.load()).default;return t||={},t={...Fc,...t},e?new n(e,t):new n(t)}async function zc(){let e=await Pc.PEERJS.load();return e.default===void 0?e:e.default}var Bc;(function(e){e.ConnectionList=`connection-list`})(Bc||={});var Vc=class{get isHost(){return this._host!==void 0}_host;_client;_clientData;constructor(){this.onEnable()}onEnable(){this.trySetupHost(`HOST-5980e65c-8438-453e-8b35-f13c736dcd81`)}async trySetupHost(e){let t=new(await(zc()))(e);t.on(`error`,t=>{console.error(t),this._host=void 0,this.trySetupClient(e)}),t.on(`open`,e=>{this._host=new Uc(t)})}async trySetupClient(e){this._client=new(await(zc())),this._client.on(`error`,e=>{console.error(`Client error`,e)}),this._client.on(`open`,t=>{console.log(`client connected`,t),this._clientData=this._client.connect(e,{metadata:{id:t}}),this._clientData.on(`open`,()=>{console.log(`Connected to host`)}),this._clientData.on(`data`,e=>{console.log(`<<`,e)})})}},Hc=class{_peer;constructor(e){this._peer=e}},Uc=class extends Hc{get isHost(){return!0}_connections=[];constructor(e){super(e),console.log(`I AM THE HOST`),this._peer?.on(`connection`,this.onConnection.bind(this)),this._peer.on(`close`,()=>{this.broadcast(`BYE`)}),setInterval(()=>{this.broadcast(`HELLO`)},2e3)}onConnection(e){console.log(`host connection`,e),e.on(`open`,()=>{this._connections.push(e),this.broadcastConnection(e)})}broadcastConnection(e){let t=this._connections.map(e=>e.metadata?.id).filter(e=>e!==void 0);this.broadcast({type:Bc.ConnectionList,connections:t})}broadcast(e){if(e!=null){console.log(`>>`,e);for(let t in this._peer.connections){let n=this._peer.connections[t];if(n)if(Array.isArray(n))for(let t of n)t&&t.send(e);else console.warn(n)}}}},Wc=`https://urls.needle.tools/default-networking-backend/index`,Gc=`wss://networking-2.needle.tools/socket`,Kc=!!A(`debugnet`),qc=!!(Kc||A(`debugowner`)),Jc=A(`debugnetbin`),Yc;(function(e){e.ConnectionInfo=`connection-start-info`})(Yc||={});var Xc;(function(e){e.Join=`join-room`,e.Leave=`leave-room`,e.JoinedRoom=`joined-room`,e.LeftRoom=`left-room`,e.UserJoinedRoom=`user-joined-room`,e.UserLeftRoom=`user-left-room`,e.RoomStateSent=`room-state-sent`})(Xc||={});var Zc=class{room;viewId;allowEditing;inRoom},Qc=class{room},$c=class{userId},el;(function(e){e.RequestHasOwner=`request-has-owner`,e.ResponseHasOwner=`response-has-owner`,e.RequestIsOwner=`request-is-owner`,e.ResponseIsOwner=`response-is-owner`,e.RequestOwnership=`request-ownership`,e.GainedOwnership=`gained-ownership`,e.RemoveOwnership=`remove-ownership`,e.LostOwnership=`lost-ownership`,e.GainedOwnershipBroadcast=`gained-ownership-broadcast`,e.LostOwnershipBroadcast=`lost-ownership-broadcast`})(el||={});var tl=class{guid;connection;get hasOwnership(){return this._hasOwnership}get isOwned(){return this._isOwned}get isConnected(){return this.connection.isConnected}_hasOwnership=!1;_isOwned=void 0;_gainSubscription;_lostSubscription;_hasOwnerResponse;constructor(e,t){this.connection=e,this.guid=t,this._gainSubscription=this.onGainedOwnership.bind(this),this._lostSubscription=this.onLostOwnership.bind(this),e.beginListen(el.LostOwnership,this._lostSubscription),e.beginListen(el.GainedOwnershipBroadcast,this._gainSubscription),this._hasOwnerResponse=this.onHasOwnerResponse.bind(this),e.beginListen(el.ResponseHasOwner,this._hasOwnerResponse)}_isWaitingForOwnershipResponseCallback=null;updateIsOwned(){this.connection.send(el.RequestHasOwner,{guid:this.guid})}onHasOwnerResponse(e){e.guid===this.guid&&(this._isOwned=e.value)}requestOwnershipIfNotOwned(){return this._isWaitingForOwnershipResponseCallback===null?(this._isWaitingForOwnershipResponseCallback=this.waitForHasOwnershipRequestResponse.bind(this),this.connection.beginListen(el.ResponseHasOwner,this._isWaitingForOwnershipResponseCallback),this.connection.send(el.RequestHasOwner,{guid:this.guid}),this):this}waitForHasOwnershipRequestResponse(e){e.guid===this.guid&&(this._isWaitingForOwnershipResponseCallback&&=(this.connection.stopListen(el.ResponseHasOwner,this._isWaitingForOwnershipResponseCallback),null),this._isOwned=e.value,e.value||(qc&&console.log(`request ownership`,this.guid),this.requestOwnership()))}requestOwnershipAsync(){return new Promise((e,t)=>{this.requestOwnership();let n=0,r=()=>{if(n++>10)return t(`Timeout`);setTimeout(()=>{this.hasOwnership?e(this):r()},100)};r()})}requestOwnership(){return qc&&console.log(`Request ownership`,this.guid),this.connection.send(el.RequestOwnership,{guid:this.guid}),this}freeOwnership(){return this.connection.send(el.RemoveOwnership,{guid:this.guid}),this._isWaitingForOwnershipResponseCallback&&=(this.connection.stopListen(el.ResponseHasOwner,this._isWaitingForOwnershipResponseCallback),null),this}destroy(){this.connection.stopListen(el.GainedOwnership,this._gainSubscription),this.connection.stopListen(el.LostOwnership,this._lostSubscription),this.connection.stopListen(el.ResponseHasOwner,this._hasOwnerResponse),this._isWaitingForOwnershipResponseCallback&&=(this.connection.stopListen(el.ResponseHasOwner,this._isWaitingForOwnershipResponseCallback),null)}onGainedOwnership(e){e.guid===this.guid&&(this._isOwned=!0,this.connection.connectionId===e.owner?(qc&&console.log(`GAINED OWNERSHIP`,this.guid),this._hasOwnership=!0):this._hasOwnership=!1)}onLostOwnership(e){e===this.guid&&(qc&&console.log(`LOST OWNERSHIP`,this.guid),this._hasOwnership=!1,this._isOwned=!1)}},nl=class{context;_peer=null;constructor(e){this.context=e}get peer(){return this._peer||=new Vc,this._peer}tryGetState(e){return e===`invalid`?null:this._state[e]}get connectionId(){return this._connectionId}get isDebugEnabled(){return Kc}get isConnected(){return this.connected}get currentRoomName(){return this._currentRoomName}get allowEditing(){return this._currentRoomAllowEditing}get currentRoomViewId(){return this._currentRoomViewId}getViewOnlyUrl(){if(this.currentRoomViewId===null)return null;let e=new URL(window.location.href);return e.searchParams.set(`view`,this.currentRoomViewId),e.href}get isInRoom(){return this._isInRoom}get currentLatency(){return this._currentDelay}get currentServerUrl(){return this._ws?.url??null}sendPing(){this.send(`ping`,{time:this.context.time.time})}userIsInRoom(e){return this._currentInRoom.indexOf(e)!==-1}_usersInRoomCopy=[];usersInRoom(e=null){e||=this._usersInRoomCopy,e.length=0;for(let t of this._currentInRoom)e.push(t);return e}joinRoom(e,t=!1){return e?e.length>1024?(console.error(`Room name too long, can not join: "`+e+`". Max length is 1024 characters.`),!1):(this.isInRoom&&this.currentRoomName!==e&&console.warn(`Needle Engine is already connected to a networking room. Connecting to multiple rooms is not supported`),this.connect(),Kc&&console.log(`join: `+e),this.send(Xc.Join,{room:e,viewOnly:t},Oo.OnConnection),!0):(console.error(`Missing room name, can not join: "`+e+`"`),!1)}leaveRoom(e=null){return e||=this.currentRoomName,e?(this.send(Xc.Leave,{room:e}),!0):(console.error(`Missing room name, can not join: "`+e+`"`),!1)}send(e,t=null,n=Oo.Queued){if(t===null&&(t={}),n===Oo.Queued){this._defaultMessagesBuffer.push({key:e,value:t});return}return this.sendWithWebsocket(e,t,n)}sendDeleteRemoteState(e){this.send(`delete-state`,{guid:e,dontSave:!0}),delete this._state[e]}sendDeleteRemoteStateAll(){this.send(`delete-all-state`),this._state={}}sendBinary(e){Jc&&console.log(`<< send binary`,this.context.time.frame,e.length/1024+` KB`),this._ws?.send(e)}_defaultMessagesBuffer=[];_defaultMessagesBufferArray=[];sendBufferedMessagesNow(){if(!this._ws)return;this._defaultMessagesBufferArray.length=0;let e=Object.keys(this._defaultMessagesBuffer).length;for(let t in this._defaultMessagesBuffer){let n=this._defaultMessagesBuffer[t];if(e<=1){this.sendWithWebsocket(n.key,n.value,Oo.Immediate);break}let r=this.toMessage(n.key,n.value);this._defaultMessagesBufferArray.push(r)}if(this._defaultMessagesBuffer.length=0,this._defaultMessagesBufferArray.length>0&&Kc&&console.log(`SEND BUFFERED`,this._defaultMessagesBufferArray.length),this._defaultMessagesBufferArray.length<=0)return;let t=JSON.stringify(this._defaultMessagesBufferArray);this._ws?.send(t)}beginListen(e,t){return this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t),t}stopListening(e,t){return this.stopListen(e,t)}stopListen(e,t){if(!t||!this._listeners[e])return;let n=this._listeners[e].indexOf(t);n>=0&&this._listeners[e].splice(n,1)}beginListenBinary(e,t){return this._listenersBinary[e]||(this._listenersBinary[e]=[]),this._listenersBinary[e].push(t),t}stopListenBinary(e,t){if(!this._listenersBinary[e])return;let n=this._listenersBinary[e].indexOf(t);n>=0&&this._listenersBinary[e].splice(n,1)}netWebSocketUrlProvider;registerProvider(e){this.netWebSocketUrlProvider=e}async connect(e){if(this.connected&&e&&e!==Gc)return Promise.reject(`Can not connect to different server url. Please disconnect first.`);if(this.connected)return Promise.resolve(!0);e&&console.debug(`Connecting to user provided url `+e);let t=e||this.netWebSocketUrlProvider?.getWebsocketUrl();return t?Gc=t:Tt()&&(Gc=`wss://`+window.location.host+`/socket`),this.connectWebsocket()}disconnect(){this._ws?.close(),this._ws=void 0,Gc=void 0,this._currentRoomAllowEditing=!0,this._currentRoomName=null,this._currentRoomViewId=null,this._isInRoom=!1,this._currentInRoom.length=0,this._state={},this._currentDelay=-1}_listeners={};_listenersBinary={};connected=!1;channelId;_connectionId=null;_ws;_waitingForSocket={};_isInRoom=!1;_currentRoomName=null;_currentRoomViewId=null;_currentRoomAllowEditing=!0;_currentInRoom=[];_state={};_currentDelay=-1;_connectingToWebsocketPromise=null;connectWebsocket(){return this._connectingToWebsocketPromise?this._connectingToWebsocketPromise:this._connectingToWebsocketPromise=new Promise(async(e,t)=>{let n=!1,i=t=>{n||(n=!0,e(t))};if(Gc===void 0&&(console.log(`Fetch default backend url: `+Wc),Gc=await(await fetch(Wc)).text()),Gc===void 0){i(!1);return}console.debug(`Connecting to networking backend on -`+Gc);let a=await r(()=>import(`./needle-engine.BJP2NBoC.js`).then(e=>e.t),__vite__mapDeps([11,2]),import.meta.url),o=a.default?.WebsocketBuilder??a.WebsocketBuilder,s=a.default?.ExponentialBackoff??a.ExponentialBackoff,c=new o(Gc).withMaxRetries(10).withBackoff(new s(2e3,4)).onOpen(()=>{this._connectingToWebsocketPromise=null,this._ws=c,this.connected=!0,M()||Kc?console.log(`Connected to networking backend -`+Gc):console.debug(`Connected to networking backend`,Gc),i(!0),this.onSendQueued(Oo.OnConnection)}).onClose(e=>{this._connectingToWebsocketPromise=null,this.connected=!1,this._isInRoom=!1,i(!1);let t=`Websocket connection closed...`;Gc?.includes(`/socket`)||(t+=` Do you perhaps mean to connect to "/socket"?`),console.error(t)}).onError(e=>{console.error(`Websocket connection failed...`),i(!1),$a.sendEvent(this.context,`networking`,{event:`connection_error`})}).onRetry(()=>{console.log(`Retry connecting to networking websocket`)}).build();c.addEventListener(a.WebsocketEvent.message,(e,t)=>{this.onMessage(e,t)})})}onMessage(e,t){let n=t.data;try{if(typeof n!=`string`){n.size&&this.handleIncomingBinaryMessage(n);return}let e=JSON.parse(n);if(Array.isArray(e))for(let t of e)this.handleIncomingStringMessage(t);else this.handleIncomingStringMessage(e);return}catch(e){Kc&&n===`pong`?console.log(`<<`,n):M()&&console.error(`Failed to parse message`,e)}}async handleIncomingBinaryMessage(e){Jc&&console.log(`<< bin`,this.context.time.frame);let t=await e.arrayBuffer(),n=new Dc(new Uint8Array(t)),r=n.getBufferIdentifier(),i=this._listenersBinary[r],a=jc(n),o=Mc(a);if(o&&typeof o==`string`&&(this._state[o]=a),!i)return;let s=a??n;for(let e of i)e(s)}handleIncomingStringMessage(e){if(Kc&&console.log(`<<`,e.key??e),e.key)switch(e.key){case Yc.ConnectionInfo:if(e.data){let t=e.data;t&&(console.assert(t.id!==void 0&&t.id!==null&&t.id.length>0,`server did not send connection id`,t.id),console.debug(`Your id is: `+t.id,this.context.alias??``),this._connectionId=t.id,$a.sendEvent(this.context,`networking`,{event:`connected`}))}else console.warn(`Expected connection id in `+e.key);break;case Xc.JoinedRoom:if(Kc&&console.log(e),e){this._isInRoom=!0;let t=e;this._currentRoomName=t.room,this._currentRoomViewId=t.viewId,this._currentRoomAllowEditing=t.allowEditing??!0,this._currentInRoom.length=0,this._currentInRoom.push(...t.inRoom),(Jc||M())&&console.debug(`Joined Needle Engine Room: `+t.room);let n=new URL(window.location.href);n.searchParams.has(`room`)&&n.searchParams.delete(`room`),n.searchParams.set(`view`,this._currentRoomViewId),console.debug(`Room view id: ${this._currentRoomViewId}\n${n.href}`)}this.onSendQueued(Oo.OnRoomJoin),$a.sendEvent(this.context,`networking`,{event:`joined_room`,room:this._currentRoomName});break;case Xc.LeftRoom:let t=e;t.room===this.currentRoomName&&(this._isInRoom=!1,this._currentRoomName=null,this._currentRoomAllowEditing=!0,this._currentInRoom.length=0,(Jc||M())&&console.debug(`Left Needle Engine Room: `+t.room)),$a.sendEvent(this.context,`networking`,{event:`left_room`,room:t.room});break;case Xc.UserJoinedRoom:if(e.data){let t=e.data;this._currentInRoom.push(t.userId),Kc&&console.log(t.userId+` joined`,`now in room:`,this._currentInRoom)}break;case Xc.UserLeftRoom:if(e.data){let t=e.data,n=this._currentInRoom.indexOf(t.userId);n>=0&&(Kc&&console.log(t.userId+` left`,`now in room:`,this._currentInRoom),this._currentInRoom.splice(n,1)),t.userId===this.connectionId&&console.log(`you left the room`)}break;case`all-room-state-deleted`:Kc&&console.log(`RECEIVED all-room-state-deleted`),this._state={};break;case`ping`:case`pong`:let n=e.data?.time;n&&(this._currentDelay=this.context.time.time-n),Kc&&console.log(`Current latency: ${(this._currentDelay*1e3).toFixed()} ms`,`Clients in room: `+this._currentInRoom?.length);break}let t=e.data;t&&(this._state[t.guid]=t);let n=this._listeners[e.key];if(n){n=[...n];for(let t of n)try{t(e.data)}catch(t){console.error(`Error invoking callback for "`+e.key+`"`,t)}}}toMessage(e,t){return{key:e,data:t}}sendWithWebsocket(e,t,n=Oo.OnRoomJoin){if(!this._ws){let r=this._waitingForSocket[n]||[];r.push(()=>this.sendWithWebsocket(e,t,n)),this._waitingForSocket[n]=r;return}let r=JSON.stringify(this.toMessage(e,t));Kc&&console.log(`>>`,e),this._ws.send(r)}onSendQueued(e){let t=this._waitingForSocket[e];if(t){for(let e of t)e();t.length=0}}},rl=A(`debugplayerview`),il;(function(e){e.Browser=`browser`,e.Headset=`headset`,e.Handheld=`handheld`})(il||={});var al=class{userId;context;viewDevice=il.Browser;get currentObject(){return this._object}set currentObject(e){this._object=e}get isConnected(){return this.context.connection.userIsInRoom(this.userId)}removed=!1;_object;constructor(e,t){this.userId=e,this.context=t}},ol=class{context;playerViews=new Map;constructor(e){this.context=e}setPlayerView(e,t,n){let r=this.playerViews.get(e);r||(r=new al(e,this.context),this.playerViews.set(e,r)),r.viewDevice=n,r.currentObject=t,r.removed=!1}getPlayerView(e){if(e){if(!this.context.connection.userIsInRoom(e)){this.playerViews.delete(e);return}return this.playerViews.get(e)}}removePlayerView(e,t){let n=this.playerViews.get(e);n?.viewDevice===t&&(rl&&console.log(`REMOVE`,e),n.removed=!0,this.playerViews.delete(e))}},sl=new we;async function cl(e){return new Promise((t,n)=>{sl.load(e,t,void 0,n)})}var ll=new Uint8Array(4);ll[0]=255,ll[1]=255,ll[2]=255,ll[3]=255;var ul=new m(ll,1,1,y);function dl(e,t=1){let n=`alpha`in e,r=t*t,i=new Uint8Array(4*r),a=Math.floor(e.r*255),o=Math.floor(e.g*255),s=Math.floor(e.b*255);for(let t=0;t{let r=this.loaded.get(t);r?e(r):n(`Shader not found`)});let n=new ml(e,await cl(t));return this.loaded.set(t,n),n}};function hl(e,t){let n=e.elements;t||=[],t.length=0;for(let e=0;e<16;e+=4){let r=n[e],i=n[e+1],a=n[e+2],o=n[e+3],s=new Te(r,i,a,o);t.push(s)}return t}var gl=[],_l=[];function vl(e,t){if(gl.length===0)for(let e=0;e<27;e++)gl.push(0);t||=gl;for(let e=0;e<27;e++)_l[e]=t[e];t=_l,e.unity_SHAr={value:new Te(t[9],t[3],t[6],t[0])},e.unity_SHBr={value:new Te(t[12],t[15],t[18],t[21])},e.unity_SHAg={value:new Te(t[10],t[4],t[7],t[1])},e.unity_SHBg={value:new Te(t[13],t[16],t[19],t[22])},e.unity_SHAb={value:new Te(t[11],t[5],t[8],t[2])},e.unity_SHBb={value:new Te(t[14],t[17],t[20],t[23])},e.unity_SHC={value:new Te(t[24],t[25],t[26],1)}}var yl=class{vertexShader;fragmentShader;technique;constructor(e,t,n){this.vertexShader=e,this.fragmentShader=t,this.technique=n}};async function bl(e,t){if(!e)return console.error(`Can not find technique: no shader data`),null;let n=e.programs[t],r=n.vertexShader,i=n.fragmentShader;if(r!==void 0&&i!==void 0){let n=e.shaders[r],a=e.shaders[i];if(n.uri&&a.uri||n.code&&a.code){if(!n.code&&n.uri&&await xl(n),!a.code&&a.uri&&await xl(a),!n.code||!a.code)return null;let r=e.techniques[t];return new yl(n.code,a.code,r)}}return console.error(`Shader technique not found`,t),null}async function xl(e){let t=e.uri;t&&(t.endsWith(`.glsl`)?e.code=(await new we().loadAsync(t)).toString():e.code=Sl(e.uri))}function Sl(e){return decodeURIComponent(Array.prototype.map.call(atob(e),function(e){return`%`+(`00`+e.charCodeAt(0).toString(16)).slice(-2)}).join(``))}var Cl=A(`debugenvlight`),wl;(function(e){e[e.Skybox=0]=`Skybox`,e[e.Trilight=1]=`Trilight`,e[e.Flat=3]=`Flat`,e[e.Custom=4]=`Custom`})(wl||={});var Tl;(function(e){e[e.Skybox=0]=`Skybox`,e[e.Custom=1]=`Custom`})(Tl||={});var El=class{context;constructor(e){this.context=e,this.context.pre_update_callbacks.push(this.preUpdate.bind(this))}_currentLightSettingsId;_sceneLightSettings;get currentLightSettingsId(){return this._currentLightSettingsId}preUpdate(){let e=this.context.time;this._timevec4.x=e.time,this._timevec4.y=Math.sin(e.time),this._timevec4.z=Math.cos(e.time),this._timevec4.w=e.deltaTime}_timevec4=new Te;get timeVec4(){return this._timevec4}get environmentIntensity(){if(!this._sceneLightSettings||!this._currentLightSettingsId)return 1;let e=this._sceneLightSettings.get(this._currentLightSettingsId);return e?e.ambientIntensity:1}get sceneLightSettings(){return this._sceneLightSettings?.values()}enable(e){e instanceof js&&(e=e.url);let t=this._sceneLightSettings?.get(e);return t?(Cl&&console.log(`Enable scene light settings`,e,t),e!==this._currentLightSettingsId&&this._currentLightSettingsId&&this.disable(this._currentLightSettingsId),this._currentLightSettingsId=e,t.enabled=!0,!0):(Cl&&console.warn(`No light settings found for`,e),!1)}disable(e){if(e instanceof js&&(e=e.url),e==null)return!1;let t=this._sceneLightSettings?.get(e);return t?(Cl&&console.log(`Disable scene light settings`,e,t),t.enabled=!1,!0):!1}enableCurrent(){return this._currentLightSettingsId?(this.enable(this._currentLightSettingsId),this._currentLightSettingsId??null):null}disableCurrent(){if(this._currentLightSettingsId){let e=this._currentLightSettingsId;return this.disable(this._currentLightSettingsId),e}return null}internalRegisterSceneLightSettings(e){let t=e.sourceId;if(!t){console.error(`Missing source id for scene light settings, can not register:`,e);return}Cl&&console.log(`Register `+e?.sourceId+` lighting`,e),this._sceneLightSettings||=new Map,this._sceneLightSettings.set(t,e)}internalUnregisterSceneLightSettings(e){let t=e.sourceId;if(!t){console.error(`Missing source id for scene light settings, can not unregister:`,e);return}Cl&&console.log(`Unregister `+e?.sourceId+` lighting`,e),this._sceneLightSettings&&this._sceneLightSettings.delete(t)}internalRegisterReflection(e,t){Cl&&console.log(`Register reflection`,e,t);let n=new Dl(this.context,t,1);this._lighting[e]=n}internalGetReflection(e){return this._lighting[e]}__currentReflectionId=null;internalEnableReflection(e){this.__currentReflectionId=e;let t=this._sceneLightSettings?.get(e);switch(Cl&&console.log(`Enable reflection`,e,t?wl[t.ambientMode]:`Unknown ambient mode`,t),t?.ambientMode){case wl.Skybox:case wl.Custom:let t=this.internalGetReflection(e);if(t&&t.Source){Cl&&console.log(`Setting environment reflection`,t);let e=this.context.scene,n=t.Source;return n.mapping!==306&&(n.mapping=303),e.environment=n,e.environmentIntensity=this.environmentIntensity||1,n}else Cl&&console.warn(`Could not find reflection for source`,e);break}if(t?.environmentReflectionSource===Tl.Custom)switch(t?.ambientMode){case wl.Trilight:if(t.ambientTrilight){let e=t.ambientTrilight,n=fl(e[0],e[1],e[2],64,64);return n.colorSpace=de,n.mapping=303,this.context.scene.environment=n,n}else console.error(`Missing ambient trilight`,t.sourceId);case wl.Flat:if(t.ambientLight){let e=dl(t.ambientLight,64);return e.colorSpace=de,e.mapping=303,this.context.scene.environment=e,e}else console.error(`Missing ambientlight`,t.sourceId)}return null}internalDisableReflection(e){if(e&&e!==this.__currentReflectionId){Cl&&console.log(`Not disabling reflection for`,e,`because it is not the current light settings id`,this.__currentReflectionId);return}Cl&&console.log(`Disable reflection`,e);let t=this.context.scene;t.environment=null}_lighting={}},Dl=class{get Source(){return this._source}_source;constructor(e,t,n=1){this._source=t,t.mapping!==306&&(t.mapping=303)}},Ol=A(`timescale`),kl=1;typeof Ol==`number`&&(kl=Ol);var Al=class{get time(){return this._time}set time(e){this._time=e}_time=0;get deltaTime(){return this._deltaTime}set deltaTime(e){this._deltaTime=e}_deltaTime=0;get deltaTimeUnscaled(){return this._deltaTimeUnscaled}_deltaTimeUnscaled=0;timeScale=1;get frame(){return this._frame}set frame(e){this._frame=e}_frame=0;get frameCount(){return this.frame}get realtimeSinceStartup(){return this.clock.elapsedTime}get fps(){return 1/this.deltaTime}get smoothedFps(){return this._smoothedFps}get smoothedDeltaTime(){return 1/this._smoothedFps}clock=new De;_smoothedFps=0;_smoothedDeltaTime=0;_fpsSamples=[];_fpsSampleIndex=0;constructor(){typeof kl==`number`&&(this.timeScale=kl)}update(){this.deltaTime=this.clock.getDelta(),this.deltaTime=Math.min(.1,this.deltaTime),this._deltaTimeUnscaled=this.deltaTime,this.deltaTime<=0&&(this.deltaTime=1e-12),this.deltaTime*=this.timeScale,this.frame+=1,this.time+=this.deltaTime,this._fpsSamples.length<60?this._fpsSamples.push(this.deltaTime):this._fpsSamples[this._fpsSampleIndex++%60]=this.deltaTime;let e=0;for(let t=0;t=0&&t>=0){let n=i.tonemapping_pars_fragment.substring(e,t+42);i.tonemapping_pars_fragment=i.tonemapping_pars_fragment.replace(n,` -float startCompression = 0.8; -float desaturation = 0.5; -// Patched tonemapping function -vec3 NeutralToneMapping( vec3 color ) { - color *= toneMappingExposure; - - float d = 1. - startCompression; - // float peak = dot(color, vec3(0.299, 0.587, 0.114)); - float peak = max(color.r, max(color.g, color.b)); - if (peak < startCompression) return color; - float newPeak = 1. - d * d / (peak + d - startCompression); - float invPeak = 1. / peak; - - float extraBrightness = dot(color * (1. - startCompression * invPeak), vec3(1, 1, 1)); - - color *= newPeak * invPeak; - float g = 1. - 3. / (desaturation * extraBrightness + 3.); - return mix(color, vec3(1, 1, 1), g); -} -`)}else M()&&console.error(`Couldn't find NeutralToneMapping in ShaderChunk.tonemapping_pars_fragment`)}function Pl(){let e=i.tonemapping_pars_fragment.indexOf(`vec3 AgXToneMapping( vec3 color ) {`),t=i.tonemapping_pars_fragment.indexOf(`return color;`,e);if(e>=0&&t>=0){let n=i.tonemapping_pars_fragment.substring(e,t+13);i.tonemapping_pars_fragment=i.tonemapping_pars_fragment.replace(n,` -// 0: Default, 1: Golden, 2: Punchy -#define AGX_LOOK 0 - -vec3 userSlope = vec3(1.0); -vec3 userOffset = vec3(0.0); -vec3 userPower = vec3(1.0); -float userSaturation = 1.0; - -// Mean error^2: 3.6705141e-06 -vec3 _agxDefaultContrastApprox(vec3 x) { - vec3 x2 = x * x; - vec3 x4 = x2 * x2; - - return + 15.5 * x4 * x2 - - 40.14 * x4 * x - + 31.96 * x4 - - 6.868 * x2 * x - + 0.4298 * x2 - + 0.1191 * x - - 0.00232; -} - -vec3 _agx(vec3 val) { - const mat3 agx_mat = mat3( - 0.842479062253094, 0.0423282422610123, 0.0423756549057051, - 0.0784335999999992, 0.878468636469772, 0.0784336, - 0.0792237451477643, 0.0791661274605434, 0.879142973793104); - - const float min_ev = -12.47393; - const float max_ev = 4.026069; - - // val = pow(val, vec3(2.2)); - - // Input transform (inset) - val = agx_mat * val; - - // Log2 space encoding - val = clamp(log2(val), min_ev, max_ev); - val = (val - min_ev) / (max_ev - min_ev); - - // Apply sigmoid function approximation - val = _agxDefaultContrastApprox(val); - - return val; -} - -vec3 _agxEotf(vec3 val) { - const mat3 agx_mat_inv = mat3( - 1.19687900512017, -0.0528968517574562, -0.0529716355144438, - -0.0980208811401368, 1.15190312990417, -0.0980434501171241, - -0.0990297440797205, -0.0989611768448433, 1.15107367264116); - - // Inverse input transform (outset) - val = agx_mat_inv * val; - - // sRGB IEC 61966-2-1 2.2 Exponent Reference EOTF Display - // NOTE: We're linearizing the output here. Comment/adjust when - // *not* using a sRGB render target - val = pow(val, vec3(2.2)); - - return val; -} - -vec3 _agxLook(vec3 val) { - const vec3 lw = vec3(0.2126, 0.7152, 0.0722); - float luma = dot(val, lw); - - // Default - vec3 offset = vec3(0.0); - vec3 slope = vec3(1.0); - vec3 power = vec3(1.0); - float sat = 1.0; - - #if AGX_LOOK == 1 - // Golden - slope = vec3(1.0, 0.9, 0.5); - power = vec3(0.8); - sat = 0.8; - #elif AGX_LOOK == 2 - // Punchy - slope = vec3(1.0); - power = vec3(1.35, 1.35, 1.35); - sat = 1.4; - #endif - - // Needle - slope = vec3(1.05); - power = vec3(1.10, 1.10, 1.10); - sat = 1.15; - - // User - // slope = userSlope; - // offset = userOffset; - // power = userPower; - // sat = userSaturation; - - // ASC CDL - val = pow(val * slope + offset, power); - return luma + sat * (val - luma); -} - - -vec3 AgXToneMapping( vec3 color ) { - // apply AGX - color *= toneMappingExposure; - color = max(color, vec3(0.001)); // Prevent NaN - color = _agx(color); - color = _agxLook(color); // Optional - color = _agxEotf(color); - return color; -`)}else M()&&console.error(`Couldn't find AgXToneMapping in ShaderChunk.tonemapping_pars_fragment`)}function Fl(e){if(typeof e==`string`)switch(e=e.toLowerCase(),e){case`none`:return 0;case`neutral`:return 7;case`aces`:return 4;case`agx`:return 6;case`khronos_neutral`:return 7;default:console.warn(`[PostProcessing] Unknown tone mapping mode`,e);return}}var Il=[];function Ll(e){Il.indexOf(e)===-1&&Il.push(e)}function Rl(e){let t=Il.indexOf(e);t!==-1&&Il.splice(t,1)}var zl=[];function Bl(e){zl.indexOf(e)===-1&&zl.push(e)}function Vl(e){let t=zl.indexOf(e);t!==-1&&zl.splice(t,1)}function Hl(e){globalThis.dispatchEvent(new CustomEvent(`needle-xrsession-start`,{detail:e}));for(let t=0;t`);``+btoa(` `);var Gl=`data:image/svg+xml;charset=utf-8;base64,`+btoa(``),Kl;(function(e){function t(e){return e===`0`||e?.toLowerCase()===`false`}e.isFalsey=t;function n(e,n,r){let i=e.getAttribute(n);return t(i)?null:(r?.onAttribute?.call(null,i),i)}e.getAttributeValueIfNotFalsey=n;function r(e,n,r){let i=e.getAttribute(n);return i===null?null:t(i)?(r?.onAttribute?.call(null,i,!0),!1):(r?.onAttribute?.call(null,i,!1),i)}e.getAttributeAndCheckFalsey=r})(Kl||={});async function ql(e){if(!globalThis.QRCode){let e=`https://cdn.jsdelivr.net/gh/davidshimjs/qrcodejs@gh-pages/qrcode.min.js`,t=document.head.querySelector(`script[src="${e}"]`);t||(t=document.createElement(`script`),t.src=e,document.head.appendChild(t)),await new Promise((e,n)=>{t.addEventListener(`load`,()=>{e(!0)})})}let t=globalThis.QRCode,n=e.domElement??document.createElement(`div`),r=new t(n,{width:e.width??256,height:e.height??256,colorDark:`#000000`,colorLight:`#ffffff`,correctLevel:e.showLogo?t.CorrectionLevel.H:t.CorrectLevel.M,...e}),i=r?._oQRCode.moduleCount||0,a=r?._oDrawing?._elCanvas,o=.25;o=i<40?Math.floor(i/4)/i:Math.floor(i/6)/i;let s=Math.floor(i/20)/i;try{let t=await Jl(a,{showLogo:e.showLogo,logoSize:o,logoPadding:s}).catch(e=>{});t&&(n.innerHTML=``,n.append(t))}catch{}if(e.showUrl!==!1&&e.text){let t=n.querySelector(`.qr-code-link-label`),r=e.text.replace(/^(https?:\/\/)?(www\.)?/,``).replace(/\/+$/,``).replace(/\?+$/,``);if(r=`Scan to visit `+r,t)t.textContent=r;else{let t=document.createElement(`div`);t.classList.add(`qr-code-link-label`),e.text=r,t.textContent=e.text,t.addEventListener(`click`,e=>{e.stopImmediatePropagation()}),t.style.textAlign=`center`,t.style.fontSize=`0.8em`,t.style.marginTop=`0.1em`,t.style.color=`#000000`,t.style.fontFamily=`'Roboto Flex', sans-serif`,t.style.opacity=`0.5`,t.style.wordBreak=`break-all`,t.style.wordWrap=`break-word`,t.style.marginBottom=`0.3em`,n.style.width=`calc(210px + 20px)`,n.appendChild(t)}}return n}async function Jl(e,t){if(!e)return;let n=t.logoPadding||1/32,r=new Image,i=document.querySelector(`needle-engine`);i||console.debug(`[QR Code] No web component found`);let a=Xa(),o=null;if(o=Kl.getAttributeAndCheckFalsey(i,`qrcode-logo-src`),a&&t.showLogo!==!0&&o===!1||(o||=Kl.getAttributeAndCheckFalsey(i,`logo-src`),a&&t.showLogo!==!0&&o===!1)||(o||=Kl.getAttributeAndCheckFalsey(i,`loading-logo-src`,{onAttribute:()=>{M()?console.warn(`[QR Code] 'loading-logo-src' is deprecated, please use 'logo-src' or 'qrcode-logo-src' instead.`):console.debug(`[QR Code] 'loading-logo-src' is deprecated.`)}}),a&&t.showLogo!==!0&&o===!1)||(o&&!a&&(console.warn(`[QR Code] Custom logo is only available with a commercial license. Using default Needle logo. Please get a commercial license at https://needle.tools/pricing.`),o=null),o||=Wl,!o))return;let s=!1;t.showLogo!==!1&&(r.src=o,s=await new Promise((e,t)=>{r.onload=()=>e(!0),r.onerror=t=>{let n=o===Wl?null:`'`+o+`'`;console.error(`[QR Code] Error loading logo image for QR code`,n,M()?t:``),e(!1)}}));let c=document.createElement(`canvas`);c.width=e.width+8,c.height=e.height+8;let l=c.getContext(`2d`);if(!l)return;l.fillStyle=`#ffffff`,l.fillRect(0,0,c.width,c.height),l.drawImage(e,8/2,8/2),l.imageSmoothingEnabled=!0,l.imageSmoothingQuality=`high`,l.mozImageSmoothingEnabled=!0,l.webkitImageSmoothingEnabled=!0,l.globalCompositeOperation=`lighten`;let u=l.createLinearGradient(0,0,0,c.height);u.addColorStop(0,`rgb(45, 45, 45)`),u.addColorStop(1,`rgb(45, 45, 45)`),l.fillStyle=u,l.fillRect(0,0,c.width,c.height),l.globalCompositeOperation=`source-over`;let d=Math.min(e.width,e.height)*(t.logoSize||.25),f=d;if(s){let t=r.width/r.height;t>1?f=d/t:d=f*t;let i=n*e.width,a=Math.max(d,f),o=Math.round(a+i),s=Math.round(a+i),u=(c.width-a)/2,p=(c.height-a)/2;l.shadowColor=`transparent`,l.shadowBlur=20;let m=Math.round(u-i/2),h=Math.round(p-i/2);l.beginPath(),l.moveTo(m+0,h),l.lineTo(m+o-0,h),l.quadraticCurveTo(m+o,h,m+o,h+0),l.lineTo(m+o,h+s-0),l.quadraticCurveTo(m+o,h+s,m+o-0,h+s),l.lineTo(m+0,h+s),l.quadraticCurveTo(m,h+s,m,h+s-0),l.lineTo(m,h+0),l.quadraticCurveTo(m,h,m+0,h),l.fillStyle=`#ffffff`,l.closePath(),l.fill(),l.clip(),l.shadowColor=`transparent`;let g=(c.width-d)/2,_=(c.height-f)/2;l.drawImage(r,g,_,d,f)}let p=c.toDataURL(`image/png`),m=document.createElement(`img`);return m.src=p,m.style.width=`100%`,m.style.height=`auto`,m}var Yl=`Material Symbols Outlined`;function Xl(e){let t=document.createElement(`span`);return t.style.maxWidth=`48px`,t.style.maxHeight=`48px`,t.style.overflow=`hidden`,t.classList.add(`material-symbols-outlined`,`notranslate`),t.setAttribute(`translate`,`no`),t.innerText=e,t.style.visibility=`hidden`,t.style.userSelect=`none`,t.setAttribute(`role`,`img`),t.setAttribute(`aria-label`,e+` icon`),t.setAttribute(`aria-hidden`,`true`),tu(Yl).then(n=>{n?(t.style.visibility=``,t.innerText=e):e===`more_vert`?(t.style.visibility=``,t.innerText=`More`):t.style.display=`none`}),t}function Zl(e){return e.classList?.contains(`material-symbols-outlined`)||!1}var Ql=new Map;async function $l(e){if(await tu(Yl),Ql.has(e))return Ql.get(e);let t=document.createElement(`canvas`);t.width=48,t.height=48;let n=t.getContext(`2d`);if(n){n.font=`48px '${Yl}'`,n.fillStyle=`black`,n.fillText(e,0,48);let r=t.toDataURL(),i=new be;return i.name=e+` icon`,i.image=new Image,i.image.src=r,i.needsUpdate=!0,Ql.set(e,i),i}return Ql.set(e,null),null}var eu=new Map;async function tu(e,t=5,n=0){document.fonts.check(`1em '${e}'`)||await document.fonts.ready;let r=eu.get(e)||document.fonts.load(`1em '${e}'`).then(e=>e?.length>0).finally(()=>{eu.delete(e)});return eu.set(e,r),await r?!0:n{setTimeout(()=>{r(tu(e,t,n+1))},1e3)}):!1}function nu(e,t){e.setAttribute(`priority`,String(t))}function ru(e){let t=e.getAttribute(`priority`);if(t){let e=Number.parseFloat(t);if(!Number.isNaN(e))return e}}var iu=class e{static _instance;static get instance(){return this.getOrCreate()}static getOrCreate(){return this._instance||=new e,this._instance}static create(){return new e}_fullscreenButton;get fullscreenButton(){return this._fullscreenButton}createFullscreenButton(e){if(this._fullscreenButton)return this._fullscreenButton;if(!document.fullscreenEnabled)return M()&&console.warn(`NeedleMenu: Fullscreen button could not be created, device doesn't support the Fullscreen API`),null;let t=document.createElement(`button`);this._fullscreenButton=t,t.classList.add(`fullscreen-button`),t.title=`Click to enter fullscreen mode`,nu(t,3);let n=Xl(`fullscreen`),r=Xl(`fullscreen_exit`);return t.appendChild(n),t.onclick=()=>{document.fullscreenElement?document.exitFullscreen():`webkitRequestFullscreen`in e.domElement&&typeof e.domElement.webkitRequestFullscreen==`function`?e.domElement.webkitRequestFullscreen():`requestFullscreen`in e.domElement&&e.domElement.requestFullscreen()},document.addEventListener(`fullscreenchange`,()=>{document.fullscreenElement?(n.remove(),t.appendChild(r),t.title=`Click to enter fullscreen mode`):(r.remove(),t.appendChild(n),t.title=`Click to exit fullscreen mode`)}),globalThis.addEventListener(`needle-xrsession-start`,()=>{t.style.display=`none`}),globalThis.addEventListener(`needle-xrsession-end`,()=>{t.style.display=``}),t}_muteButton;get muteButton(){return this._muteButton}createMuteButton(e){if(this._muteButton)return this._muteButton;let t=document.createElement(`button`);this._muteButton=t,t.classList.add(`mute-button`),t.title=`Click to mute/unmute`;let n=Xl(`volume_off`),r=Xl(`volume_up`);return nu(t,1),e.application.muted?t.appendChild(n):t.appendChild(r),t.onclick=()=>{e.application.muted?(n.remove(),t.appendChild(r),e.application.muted=!1):(r.remove(),t.appendChild(n),e.application.muted=!0)},t}_qrButton;get qrButton(){return this._qrButton}_customQRButtonUrl;set qrButtonUrl(e){try{new URL(e),this._customQRButtonUrl=e}catch{console.warn(`[Needle] QR code button URL is not a valid URL '${e}'`)}}get qrButtonUrl(){return this._customQRButtonUrl||window.location.href}createQRCode(e){if(this._qrButton)return this._qrButton;let t=this,n=document.createElement(`button`);this._qrButton=n,n.innerText=`QR Code`,n.prepend(Xl(`qr_code`)),n.title=`Scan this QR code with your phone to open this page`,this.hideElementDuringXRSession(n),nu(this._qrButton,20);let r=document.createElement(`div`);r.style.cssText=` - position: fixed; - display: inline-block; - padding: 0.5rem; - background-color: white; - border-radius: 0.4rem; - cursor: pointer; - z-index: 1000; - box-shadow: 0 0 12px rgba(0, 0, 0, 0.2); - `;let i=document.createElement(`div`);i.classList.add(`qr-code-container`),r.appendChild(i),n.addEventListener(`click`,()=>{if(r.parentNode)return o();M()&&window.location.href.includes(`://localhost`)&&Ei(`To access your website from another device in the same local network you have to use the IP address instead of localhost. The IP address is logged in your development server console when you start the server.`),a()});async function a(){await s();let t=document.body.querySelector(`needle-engine`),a=e?.anchorElement?.parentElement||t||document.body;a.appendChild(r);let c=i.getBoundingClientRect(),l=n.getBoundingClientRect();r.style.left=l.left+l.width*.5-c.width*.5+`px`,l.top{r.style.opacity=`1`,window.addEventListener(`click`,o,{once:!0})}),window.addEventListener(`resize`,o),window.addEventListener(`scroll`,o),document.fullscreenElement?document.fullscreenElement.appendChild(r):a.appendChild(r)}function o(){r.style.pointerEvents=`none`,r.style.transition=`opacity 0.2s`,r.style.opacity=`0`,setTimeout(()=>r.parentNode?.removeChild(r),500),window.removeEventListener(`click`,o),window.removeEventListener(`resize`,o),window.removeEventListener(`scroll`,o)}async function s(){let e=await ql({text:t.qrButtonUrl,width:200,height:200});i.innerHTML=``,i.appendChild(e)}return n.addEventListener(`pointerenter`,()=>{s()},{once:!0}),n}hideElementDuringXRSession(e){Ll(t=>{e[`previous-display`]=e.style.display,e.style.display=`none`}),Bl(t=>{e[`previous-display`]!=null&&(e.style.display=e[`previous-display`])})}},au=`https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap`,ou=`https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0&display=block`;function su(e,t){let n=t?.element||document.head,r=Array.from(n.querySelectorAll(`link[href*='${e}']`));if(r.length<=0){let t=document.createElement(`link`);t.href=e,t.rel=`preload`,t.as=`style`,t.crossOrigin=``,t.onload=()=>{t.rel=`stylesheet`},n.appendChild(t),r.push(t)}if(t?.loadedCallback)for(let e=0;e - :host { - position: relative; - min-width: fit-content; - /* height: 100%; can not have height 100% because of align-items: stretch; in the parent */ - display: flex; - } - - .wrapper { - position: relative; - display: grid; - grid-template-columns: auto auto; - padding: .1rem; - } - .wrapper:hover { - cursor: pointer; - } - img { - height: 100%; - align-self: end; - transition: transform 0.2s; - } - img.with-text { - width: 11.5ch; - &:hover { - transform: scale(1.02); - } - } - img.compact { - width: 1.7em; - &:hover { - transform: scale(1.1); - } - } - span { - font-size: 1rem; - white-space: nowrap; - } - -
- -
- `,this._root.appendChild(e.content.cloneNode(!0)),this.wrapper=this._root.querySelector(`.wrapper`),this._root.appendChild(this.wrapper),this.logoElement=this._root.querySelector(`img.logo`),this.addEventListener(`click`,()=>{globalThis.open(`https://needle.tools`,`_blank`)})}ensureInitialized(){this._didInitialize||(this._didInitialize=!0,this.initializeDom())}connectedCallback(){this.ensureInitialized(),this.wrapper&&(this.wrapper.setAttribute(`title`,`Made with Needle Engine`),this.setAttribute(`aria-label`,`Needle Engine logo. Click to open the Needle Engine website.`))}_root;wrapper;logoElement;setLogoVisible(e){this.ensureInitialized(),this.logoElement&&(this.logoElement.style.display=e?`block`:`none`)}setType(e){this.ensureInitialized(),this.logoElement&&(e===`full`?(this.logoElement.src=Gl,this.logoElement.classList.remove(`with-text`),this.logoElement.classList.remove(`compact`)):(this.logoElement.src=Wl,this.logoElement.classList.add(`with-text`),this.logoElement.classList.add(`compact`)))}},du=A(`debugspatialmenu`),fu=class{_context;needleMenu;htmlButtonsMap=new Map;enabled=!0;constructor(e,t){this._context=e,this._context.pre_render_callbacks.push(this.preRender),this.needleMenu=t;let n=this.needleMenu.shadowRoot?.querySelector(`.options`);n?new MutationObserver(e=>{if(this.enabled&&!(this._context.isInXR==0&&!du))for(let t of e)t.type===`childList`&&(t.addedNodes.forEach(e=>{this.createButtonFromHTMLNode(e)}),t.removedNodes.forEach(e=>{let t=e,n=this.htmlButtonsMap.get(t);n&&(this.htmlButtonsMap.delete(t),n.remove(),D.update())}))}).observe(n,{childList:!0}):console.error(`Could not find options container in needle menu`)}setEnabled(e){this.enabled=e,e||this.menu?.removeFromParent()}userRequestedMenu=!1;setDisplay(e){return this.enabled?(this.userRequestedMenu=e,!0):!1}onDestroy(){let e=this._context.pre_render_callbacks.indexOf(this.preRender);e>-1&&this._context.pre_render_callbacks.splice(e,1)}uiisDirty=!1;markDirty(){this.uiisDirty=!0}_showNeedleLogo;showNeedleLogo(e){this._showNeedleLogo=e}_wasInXR=!1;preRender=()=>{if(!this.enabled){this.menu?.removeFromParent();return}du&&j.isDesktop()&&this.updateMenu();let e=this._context.xr;if(!(e?.running&&(e?.isPassThrough||e?.isVR))){this._wasInXR&&(this._wasInXR=!1,this.onExitXR());return}this._wasInXR||(this._wasInXR=!0,this.onEnterXR()),this.updateMenu()};onEnterXR(){let e=this.needleMenu.shadowRoot?.querySelector(`.options`);e&&e.childNodes.forEach(e=>{this.createButtonFromHTMLNode(e)})}onExitXR(){this.menu?.removeFromParent()}createButtonFromHTMLNode(e){let t=this.getMenu(),n=this.htmlButtonsMap.get(e);if(n){n.add();return}if(e instanceof HTMLButtonElement){let n=this.createButton(t,e);this.htmlButtonsMap.set(e,n),n.add()}else e instanceof HTMLSlotElement&&e.assignedNodes().forEach(e=>{this.createButtonFromHTMLNode(e)})}_menuTarget=new S;positionFilter=new ir(90,.5);updateMenu(){let e=this.getMenu();this.handleNeedleWatermark(),this._context.scene.add(e);let t=this._context.mainCamera,n=this._context.xr?.rigScale||1;if(t){let r=t.worldPosition,i=t.worldForward.multiplyScalar(-1),a=i.y>.6,o=i.y>.4,s=(e.visible?o:a)||this.userRequestedMenu,c=!e.visible&&s;e.visible=s||j.isDesktop()&&du,i.multiplyScalar(3*n),r.add(i),c&&(e.position.copy(this._menuTarget.position),e.position.y+=.25,this._menuTarget.position.copy(e.position),this.positionFilter.reset(e.position),e.quaternion.copy(this._menuTarget.quaternion),this.markDirty());let l=this._menuTarget.position.distanceTo(r);(c||l>1.5*n)&&(this.ensureRenderOnTop(this.menu),this._menuTarget.position.copy(r),this._context.scene.add(this._menuTarget),yr(this._menuTarget,this._context.mainCamera,!0,!0),this._menuTarget.removeFromParent()),this.positionFilter.filter(this._menuTarget.position,e.position,this._context.time.time),this.menu?.quaternion.slerp(this._menuTarget.quaternion,this._context.time.deltaTime*5),this.menu?.scale.setScalar(n)}this.uiisDirty&&(this.uiisDirty=!1,D.update())}ensureRenderOnTop(e,t=0){e instanceof x&&(e.material.depthTest=!1,e.material.depthWrite=!1),e.renderOrder=1e3+t*2;for(let n of e.children)this.ensureRenderOnTop(n,t+1)}familyName=`Needle Spatial Menu`;menu;get isVisible(){return this.menu?.visible}getMenu(){if(this.menu)return this.menu;this.ensureFont(),this.menu=new D.Block({boxSizing:`border-box`,fontFamily:this.familyName,height:`auto`,fontSize:.1,color:0,lineHeight:1,backgroundColor:16777215,backgroundOpacity:.55,borderRadius:1,whiteSpace:`pre-wrap`,flexDirection:`row`,alignItems:`center`,padding:new Te(0,.05,0,.05),borderColor:0,borderOpacity:.05,borderWidth:.005});let e=ji.get(`ObjectRaycaster`);return e&&Dp(this.menu,new e),this.menu}_poweredByNeedleElement;handleNeedleWatermark(){if(!this._poweredByNeedleElement){this._poweredByNeedleElement=new D.Block({width:`auto`,height:`auto`,fontSize:.05,whiteSpace:`pre-wrap`,flexDirection:`row`,flexWrap:`wrap`,justifyContent:`center`,margin:.02,borderRadius:.02,padding:.02,backgroundColor:16777215,backgroundOpacity:1}),this._poweredByNeedleElement[`needle:use_eventsystem`]=!0;let e=new mu(this._context,()=>globalThis.open(`https://needle.tools`,`_self`));Dp(this._poweredByNeedleElement,e);let t=new D.Text({textContent:`Powered by`,width:`auto`,height:`auto`}),n=new D.Text({textContent:`needle`,width:`auto`,height:`auto`,fontSize:.07,margin:new Te(0,0,0,.02)});this._poweredByNeedleElement.add(t),this._poweredByNeedleElement.add(n),this.menu?.add(this._poweredByNeedleElement),this.markDirty(),new me().load(`https://cdn.needle.tools/static/branding/poweredbyneedle.webp`,r=>{if(r){e.allowModifyUI=!1,t.removeFromParent(),n.removeFromParent();let i=r.image.width/r.image.height;this._poweredByNeedleElement?.set({backgroundImage:r,backgroundOpacity:1,width:.1*i,height:.1}),this.markDirty()}})}if(this.menu){let e=this.menu.children.indexOf(this._poweredByNeedleElement);!this._showNeedleLogo&&qa()?e>=0&&(this._poweredByNeedleElement.removeFromParent(),this.markDirty()):(this._poweredByNeedleElement.visible=!0,this.menu.add(this._poweredByNeedleElement),e!==this.menu.children.indexOf(this._poweredByNeedleElement)&&this.markDirty())}}ensureFont(){let e=D.FontLibrary.getFontFamily(this.familyName);e||(e=D.FontLibrary.addFontFamily(this.familyName),e.addVariant(`normal`,`normal`,`https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json`,`https://cdn.needle.tools/static/fonts/msdf/arial/arial.png`)?.addEventListener(`ready`,()=>{this.markDirty()}))}createButton(e,t){let n=new D.Block({width:`auto`,height:`auto`,whiteSpace:`pre-wrap`,flexDirection:`row`,flexWrap:`wrap`,justifyContent:`center`,backgroundColor:16777215,backgroundOpacity:0,padding:.02,margin:.01,borderRadius:.02,cursor:`pointer`,fontSize:.05}),r=new D.Text({textContent:``,width:`auto`,justifyContent:`center`,alignItems:`center`,backgroundOpacity:0,backgroundColor:16777215,fontFamily:this.familyName,color:0,borderRadius:.02,padding:.01});return n.add(r),n[`needle:use_eventsystem`]=!0,Dp(n,new mu(this._context,()=>t.click())),new pu(this,e,t,n,r)}},pu=class{menu;root;htmlbutton;spatialContainer;spatialText;spatialIcon;constructor(e,t,n,r,i){this.menu=e,this.root=t,this.htmlbutton=n,this.spatialContainer=r,this.spatialText=i,new MutationObserver(e=>{for(let t of e)t.type===`attributes`?t.attributeName===`style`&&this.updateVisible():t.type===`childList`&&this.updateText()}).observe(n,{attributes:!0,childList:!0}),this.updateText()}add(){this.spatialContainer.parent!=this.root&&(this.root.add(this.spatialContainer),this.menu.markDirty(),this.updateVisible(),this.updateText())}remove(){this.spatialContainer.parent&&(this.spatialContainer.removeFromParent(),this.menu.markDirty())}updateVisible(){let e=this.spatialContainer.visible;this.spatialContainer.visible=this.htmlbutton.style.display!==`none`,e!==this.spatialContainer.visible&&this.menu.markDirty()}_lastText=``;updateText(){let e=``,t=``;this.htmlbutton.childNodes.forEach(n=>{n.nodeType===Node.TEXT_NODE?e+=n.textContent:n instanceof HTMLElement&&Zl(n)&&n.textContent&&(t=n.textContent)}),this._lastText!==e&&(this._lastText=e,this.spatialText.name=e,this.spatialText.set({textContent:e}),this.menu.markDirty()),e.length<=0?this.spatialText.parent&&(this.spatialText.removeFromParent(),this.menu.markDirty()):this.spatialText.parent||(this.spatialContainer.add(this.spatialText),this.menu.markDirty()),t&&this.createIcon(t)}_lastTexture;async createIcon(e){if(!this.spatialIcon){let t=await $l(e);if(t&&!this.spatialIcon){let e=.08,n=new D.Block({width:e,height:e,backgroundColor:16777215,backgroundImage:t,backgroundOpacity:1,margin:new Te(0,.005,0,0)});this.spatialIcon=n,this.spatialContainer.add(n),this.menu.markDirty()}}if(e!=this._lastTexture){this._lastTexture=e;let t=await $l(e);t&&(this.spatialIcon?.set({backgroundImage:t}),this.menu.markDirty())}let t=this.spatialContainer.children.indexOf(this.spatialIcon);t>0&&(this.spatialContainer.children.splice(t,1),this.spatialContainer.children.unshift(this.spatialIcon),this.menu.markDirty())}},mu=class{isComponent=!0;enabled=!0;get activeAndEnabled(){return!0}__internalAwake(){}__internalEnable(){}__internalDisable(){}__internalStart(){}onEnable(){}onDisable(){}gameObject;allowModifyUI=!0;get element(){return this.gameObject}context;onclick;constructor(e,t){this.context=e,this.onclick=t}onPointerEnter(){this.context.input.setCursor(`pointer`),this.allowModifyUI&&(this.element.set({backgroundOpacity:1}),D.update())}onPointerExit(){this.context.input.unsetCursor(`pointer`),this.allowModifyUI&&(this.element.set({backgroundOpacity:0}),D.update())}onPointerDown(e){e.use()}onPointerUp(e){e.use()}onPointerClick(e){e.use(),this.onclick()}},hu=`needle-menu`,gu=A(`debugmenu`),_u=A(`debugnoncommercial`),vu=class{static setElementPriority(e,t){nu(e,t)}static getElementPriority(e){return ru(e)}_context;_menu;_spatialMenu;constructor(e){this._menu=yu.getOrCreate(e.domElement,e),this._menu.ensureInitialized(),this._context=e,this._spatialMenu=new fu(e,this._menu),window.addEventListener(`message`,this.onPostMessage),Ll(this.onStartXR)}onDestroy(){window.removeEventListener(`message`,this.onPostMessage),this._menu.remove(),this._spatialMenu.onDestroy()}onPostMessage=e=>{if(e.origin===globalThis.location.origin&&typeof e.data==`object`){let t=e.data,n=t.type;if(n===`needle:menu`){let e=t.button;if(e){if(!e.label)return console.error(`NeedleMenu: buttoninfo.label is required`);if(!e.onclick)return console.error(`NeedleMenu: buttoninfo.onclick is required`);let t=document.createElement(`button`);if(t.textContent=e.label,e.icon){let n=Xl(e.icon);t.prepend(n)}e.priority&&t.setAttribute(`priority`,e.priority.toString()),t.onclick=()=>{if(e.onclick){let t=e.onclick.startsWith(`http`)||e.onclick.startsWith(`www.`),n=e.target||`_blank`;t?globalThis.open(e.onclick,n):console.error(`NeedleMenu: onclick is not a valid link`,e.onclick)}},$a.sendEvent(this._context,`needle-menu`,{action:`button_added_via_postmessage`}),this._menu.appendChild(t)}else gu&&console.error(`NeedleMenu: unknown postMessage event`,t)}else gu&&console.warn(`NeedleMenu: unknown postMessage type`,n,t)}};onStartXR=e=>{e.session.isScreenBasedAR&&(this._menu.previousParent=this._menu.parentNode,this._context.arOverlayElement.appendChild(this._menu),e.session.session.addEventListener(`end`,this.onExitXR),this._menu.closeFoldout())};onExitXR=()=>{this._menu.previousParent&&(this._menu.previousParent.appendChild(this._menu),delete this._menu.previousParent)};setPosition(e){this._menu.setPosition(e)}setVisible(e){this._menu.setVisible(e)}showNeedleLogo(e){this._menu.showNeedleLogo(e),this._spatialMenu?.showNeedleLogo(e)}get logoIsVisible(){return this._menu.logoIsVisible}showSpatialMenu(e){this._spatialMenu.setEnabled(e)}setSpatialMenuVisible(e){this._spatialMenu.setDisplay(e)}get spatialMenuIsVisible(){return this._spatialMenu.isVisible}showQRCodeButton(e){if(e===`desktop-only`&&(e=!j.isMobileDevice()),e){let e=iu.getOrCreate().createQRCode();return e.style.display=``,this._menu.appendChild(e),e}else{let e=iu.getOrCreate().qrButton;return e&&(e.style.display=`none`),e??null}}showAudioPlaybackOption(e){if(!e){this._muteButton?.remove();return}this._muteButton=iu.getOrCreate().createMuteButton(this._context),this._menu.appendChild(this._muteButton)}_muteButton;showFullscreenOption(e){if(!e){this._fullscreenButton?.remove();return}this._fullscreenButton=iu.getOrCreate().createFullscreenButton(this._context),this._fullscreenButton&&this._menu.appendChild(this._fullscreenButton)}_fullscreenButton;appendChild(e){return this._menu.appendChild(e)}},yu=class e extends HTMLElement{static create(){return customElements.get(hu)||customElements.define(hu,e),document.createElement(hu)}static getOrCreate(t,n){let r=t.querySelector(hu);return!r&&t.shadowRoot&&(r=t.shadowRoot.querySelector(hu)),r||=window.document.body.querySelector(hu),r||(r=e.create(),t.shadowRoot?t.shadowRoot.appendChild(r):t.appendChild(r)),r._domElement=t,r._context=n,r}_domElement=null;_context=null;_didInitialize=!1;constructor(){super()}initializeDom(){let e=document.createElement(`template`);e.innerHTML=` - -
-
-
-
-
-
- -
-
- -
-
- -
- -
- `;let t=this.attachShadow({mode:`open`});cu(),su(ou,{loadedCallback:()=>{this.handleSizeChange()}}),su(ou,{element:t});let n=e.content.cloneNode(!0);t?.appendChild(n),this.root=t.querySelector(`#root`),this.wrapper=this.root?.querySelector(`.wrapper`),this.options=this.root?.querySelector(`.options.main-container`),this.optionsCompactMode=this.root?.querySelector(`.options.compact-only`),this.logoContainer=this.root?.querySelector(`.logo`),this.compactMenuButton=this.root?.querySelector(`.compact-menu-button`),this.compactMenuButton.append(Xl(`more_vert`)),this.foldout=this.root?.querySelector(`.foldout`),this.root?.appendChild(this.wrapper),this.wrapper.classList.add(`wrapper`);let r=uu.create();r.setType(`compact`),r.style.minHeight=`1rem`,this.logoContainer.append(r),this.logoContainer.addEventListener(`click`,()=>{globalThis.open(`https://needle.tools`,`_blank`)});try{window.requestAnimationFrame(()=>Za(e=>{if(e==1&&Xa()&&!_u){let e=this._userRequestedLogoVisible;e===void 0&&(e=!1),this.___onSetLogoVisible(e)}else this.___onSetLogoVisible(!0)}))}catch(e){console.error(`[Needle Menu] License check failed.`,e)}this.compactMenuButton.addEventListener(`click`,e=>{e.preventDefault(),this.root.classList.toggle(`open`)});let i=this._context;setTimeout(()=>i=this._context);let a=0,o=(e,t)=>{gu&&console.log(`Set menu visible`,t),i?.isInAR&&i.arOverlayElement?e!=i.arOverlayElement&&i.arOverlayElement.appendChild(this):this.parentNode!=this._domElement?.shadowRoot&&this._domElement?.shadowRoot?.appendChild(this),this.style.display=t?`flex`:`none`,this.style.visibility=`visible`,this.style.opacity=`1`},s=!1;new MutationObserver(e=>{if(!s)try{s=!0,this.onChangeDetected(e);let t=this?.parentNode;if((this.style.display!=`flex`||this.style.visibility!=`visible`||this.style.opacity!=`1`||t!=this._domElement?.shadowRoot)&&!Xa()){let e=a++;wt()&&this._userRequestedMenuVisible===!1?(e===0&&o(t,this._userRequestedMenuVisible),e===1&&console.warn(`Needle Menu Warning: You need a PRO license to hide the Needle Engine menu → The menu will be visible in your deployed website if you don't have a PRO license. See https://needle.tools/pricing for details.`)):e===0?o(t,!0):setTimeout(()=>o(t,!0),5)}}finally{s=!1}}).observe(this.root,{childList:!0,subtree:!0,attributes:!0}),gu&&this.___insertDebugOptions()}ensureInitialized(){this._didInitialize||(this._didInitialize=!0,this.initializeDom())}_sizeChangeInterval;connectedCallback(){this.ensureInitialized(),window.addEventListener(`resize`,this.handleSizeChange),this.handleMenuVisible(),this._sizeChangeInterval=setInterval(()=>this.handleSizeChange(void 0,!1),5e3),setTimeout(()=>{this._domElement?.addEventListener(`resize`,this.handleSizeChange),this._domElement?.addEventListener(`click`,this.#e)},1)}disconnectedCallback(){window.removeEventListener(`resize`,this.handleSizeChange),clearInterval(this._sizeChangeInterval),this._domElement?.removeEventListener(`resize`,this.handleSizeChange),this._context?.domElement.removeEventListener(`click`,this.#e)}#e=e=>{if(!e.defaultPrevented&&e.target==this._domElement&&e instanceof PointerEvent&&e.button===0&&this.root.classList.contains(`open`)){let t=this.foldout.getBoundingClientRect(),n=e;n.clientX>t.left&&n.clientXt.top&&n.clientY{$a.sendEvent(this._context,`needle-menu`,{action:`button_clicked`,element:t.target instanceof Node?t.target.nodeName:e.nodeName,label:e.textContent,title:e instanceof HTMLElement?e.title:void 0,pointerid:t instanceof PointerEvent?t.pointerId:void 0})}))}append(...e){for(let t of e)if(typeof t==`string`){let e=document.createTextNode(t);this.trackElement(e),this.options.appendChild(e)}else this.trackElement(t),this.options.appendChild(t)}appendChild(e){if(!(e instanceof Node)){let t=document.createElement(`button`);if(t.textContent=e.label,t.onclick=e.onClick,t.setAttribute(`priority`,e.priority?.toString()??`0`),e.title&&(t.title=e.title),e.icon){let n=Xl(e.icon);e.iconSide===`right`?t.appendChild(n):t.prepend(n)}e.class&&t.classList.add(e.class),e=t}return this.trackElement(e),this.options.appendChild(e)}prepend(...e){for(let t of e)if(typeof t==`string`){let e=document.createTextNode(t);this.trackElement(e),this.options.prepend(e)}else this.trackElement(t),this.options.prepend(t)}_isHandlingChange=!1;_pauseMutationObserverOptionsContainer=!1;onChangeDetected(e){if(!this._isHandlingChange){this._isHandlingChange=!0;try{this.handleMenuVisible();for(let t of e)t.target==this.options&&(this._pauseMutationObserverOptionsContainer||this.onOptionsChildrenChanged(t))}finally{this._isHandlingChange=!1}}}onOptionsChildrenChanged(e){if(this.root.classList.toggle(`has-options`,this.hasAnyVisibleOptions),this.root.classList.toggle(`has-no-options`,!this.hasAnyVisibleOptions),this.handleSizeChange(void 0,!0),e.type===`childList`&&e.addedNodes.length>0){let e=Array.from(this.options.children);e.sort((e,t)=>parseInt(e.getAttribute(`priority`)||`0`)-parseInt(t.getAttribute(`priority`)||`0`));let t=!1;for(let n=0;n{if(!this._domElement)return;let n=this._domElement.clientWidth;if(n<100){clearTimeout(this._timeoutHandleSize),this.root.classList.add(`compact`),this.foldout.classList.add(`floating-panel-style`);return}let r=n-20;if(!t&&Math.abs(r-this._lastAvailableWidthChange)<1)return;this._lastAvailableWidthChange=r,clearTimeout(this._timeoutHandleSize),this._timeoutHandleSize=setTimeout(()=>{let e=o();e<0?(this.root.classList.add(`compact`),this.foldout.classList.add(`floating-panel-style`)):e>0&&(this.root.classList.remove(`compact`),this.foldout.classList.remove(`floating-panel-style`),o()<0&&(this.root.classList.add(`compact`),this.foldout.classList.add(`floating-panel-style`))),this._pauseMutationObserverOptionsContainer=!0,this.updateCompactFoldoutItem(),window.requestAnimationFrame(()=>this._pauseMutationObserverOptionsContainer=!1)},150);let i=()=>{let e=0;return e+=this.options.getBoundingClientRect().width,e+=this.optionsCompactMode.getBoundingClientRect().width,e+=10*this.options.childElementCount,e+=this.logoContainer.style.display==`none`?0:this.logoContainer.getBoundingClientRect().width,e},a=-1,o=()=>{let e=r-i();return gu&&e!==a&&(a=e,Ti(`Menu space left: ${e.toFixed(0)}px`)),e}};updateCompactFoldoutItem(){if(this.root.classList.contains(`compact`)){let e=null,t=-1e7,n=n=>{if(n instanceof HTMLElement){let r=vu.getElementPriority(n);if(r!==void 0&&r>=t){let i=window.getComputedStyle(n);if(i.display===`none`||i.visibility===`hidden`||i.opacity===`0`)return;e=n,t=r}}};for(let e=0;e{this.options.appendChild(e)});let t=e;this.optionsCompactMode.appendChild(t)}else e||this.optionsCompactMode.childNodes.forEach(e=>{this.options.appendChild(e)})}else this.optionsCompactMode.childNodes.forEach(e=>{this.options.appendChild(e)})}___insertDebugOptions(){window.addEventListener(`keydown`,e=>{e.key===`p`&&this.setPosition(this.root.classList.contains(`top`)?`bottom`:`top`)});let e=document.createElement(`button`);e.textContent=`Hide Buttons`,e.onclick=()=>{let e=Array(this.options.children.length);for(let t=0;t{for(let t of e)this.options.appendChild(t)},1e3)},this.appendChild(e);let t=document.createElement(`button`);t.textContent=`Toggle Logo`,t.addEventListener(`click`,()=>{this.logoContainer.style.display=this.logoContainer.style.display===`none`?``:`none`}),this.appendChild(t)}},R=A(`debugcontext`),bu=A(`stats`),xu=A(`debugactive`),Su=A(`debugframerate`),Cu=A(`debugcoroutine`),wu={},Tu=class{name;alias;hash;runInBackground;domElement;renderer;camera;scene},z;(function(e){e[e.Start=-1]=`Start`,e[e.EarlyUpdate=0]=`EarlyUpdate`,e[e.Update=1]=`Update`,e[e.LateUpdate=2]=`LateUpdate`,e[e.OnBeforeRender=3]=`OnBeforeRender`,e[e.OnAfterRender=4]=`OnAfterRender`,e[e.PrePhysicsStep=9]=`PrePhysicsStep`,e[e.PostPhysicsStep=10]=`PostPhysicsStep`,e[e.Undefined=-1]=`Undefined`})(z||={});function Eu(e,t){if(!e)return;if(!e.isComponent){(M()||R)&&console.error(`Registered script is not a Needle Engine component. -The script will be ignored. Please make sure your component extends "Behaviour" imported from "@needle-tools/engine" -`,e);return}t||(t=B.Current,R&&console.warn(`> Registering component without context`));let n=t?.new_scripts;n.includes(e)||n.push(e)}var B=class e{static _defaultTargetFramerate={value:90,toString(){return this.value}};static get DefaultTargetFrameRate(){return e._defaultTargetFramerate.value}static set DefaultTargetFrameRate(t){e._defaultTargetFramerate.value=t}static _defaultWebglRendererParameters={antialias:!0,alpha:!1,powerPreference:j.isiOS()||j.isMacOS()?`default`:`high-performance`,stencil:!0};static get DefaultWebGLRendererParameters(){return e._defaultWebglRendererParameters}get version(){return Bi}static get Current(){return k.Current}static set Current(e){k.Current=e}static get All(){return k.All}name;alias;isManagedExternally=!1;isPaused=!1;runInBackground=!1;targetFrameRate;physicsSteps=1;hash;domElement;appendHTMLElement(e){return this.domElement.shadowRoot?this.domElement.shadowRoot.appendChild(e):this.domElement.appendChild(e)}get resolutionScaleFactor(){return this._resolutionScaleFactor}set resolutionScaleFactor(e){if(e!==this._resolutionScaleFactor&&typeof e==`number`){if(e<=0){console.error(`Invalid resolution scale factor`,e);return}this._resolutionScaleFactor=e,this.updateSize()}}_resolutionScaleFactor=1;_boundingClientRectFrame=-1;_boundingClientRect=null;_domX;_domY;calculateBoundingClientRect(){if(this.xr){this._domX=0,this._domY=0;return}this._boundingClientRectFrame!==this.time.frame&&(this._boundingClientRectFrame=this.time.frame,this._boundingClientRect=this.domElement.getBoundingClientRect(),this._domX=this._boundingClientRect.x,this._domY=this._boundingClientRect.y)}get domWidth(){return this.isInAR?window.innerWidth:this.domElement.clientWidth}get domHeight(){return this.isInAR?window.innerHeight:this.domElement.clientHeight}get domX(){return this.calculateBoundingClientRect(),this._domX}get domY(){return this.calculateBoundingClientRect(),this._domY}get isInXR(){return this.renderer?.xr?.isPresenting||!1}xr=null;get xrSessionMode(){return this.xr?.mode}get isInVR(){return this.xrSessionMode===`immersive-vr`}get isInAR(){return this.xrSessionMode===`immersive-ar`}get isInPassThrough(){return this.xr?this.xr.isPassThrough:!1}get xrSession(){return this.renderer?.xr?.getSession()}get xrFrame(){return this._xrFrame}get xrCamera(){return this.renderer.xr.isPresenting?this.renderer?.xr?.getCamera():void 0}_xrFrame=null;get arOverlayElement(){let e=this.domElement;return typeof e.getAROverlayContainer==`function`?e.getAROverlayContainer():this.domElement}get currentFrameEvent(){return this._currentFrameEvent}_currentFrameEvent=z.Undefined;scene;renderer;composer=null;scripts=[];scripts_pausedChanged=[];scripts_earlyUpdate=[];scripts_update=[];scripts_lateUpdate=[];scripts_onBeforeRender=[];scripts_onAfterRender=[];scripts_WithCorroutines=[];scripts_immersive_vr=[];scripts_immersive_ar=[];coroutines={};post_setup_callbacks=[];pre_update_callbacks=[];pre_render_callbacks=[];post_render_callbacks=[];pre_update_oneshot_callbacks=[];new_scripts=[];new_script_start=[];new_scripts_pre_setup_callbacks=[];new_scripts_post_setup_callbacks=[];new_scripts_xr=[];mainCameraComponent=void 0;get mainCamera(){if(this._mainCamera)return this._mainCamera;if(this.mainCameraComponent){let e=this.mainCameraComponent;return e.threeCamera||e.buildCamera(),e.threeCamera}return this._fallbackCamera||=new C(75,this.domWidth/this.domHeight,.1,1e3),this._fallbackCamera}set mainCamera(e){this._mainCamera=e}_mainCamera=null;_fallbackCamera=null;application;animations;time;input;physics;connection;assets;mainLight=null;get rendererData(){return this.sceneLighting}sceneLighting;addressables;lightmaps;players;lodsManager;menu;accessibility;get isCreated(){return this._isCreated}get rootSourceId(){return this.rootSceneSourceIdentifiers[0]||void 0}_needsUpdateSize=!1;_isCreated=!1;_isCreating=!1;_isVisible=!1;_stats=bu?new ut:null;constructor(e){this.name=e?.name||``,this.alias=e?.alias,this.domElement=e?.domElement||document.body,this.hash=e?.hash,e?.renderer&&(this.renderer=e.renderer,this.isManagedExternally=!0),e?.runInBackground!==void 0&&(this.runInBackground=e.runInBackground),e?.scene?this.scene=e.scene:this.scene=new ne,e?.camera&&(this._mainCamera=e.camera),this.application=new Vs(this),this.time=new Al,this.input=new cc(this),this.physics=new jd(this),this.connection=new nl(this),this.assets=new Vd,this.sceneLighting=new El(this),this.addressables=new ks(this),this.lightmaps=new gc(this),this.players=new ol(this),this.menu=new vu(this),this.lodsManager=new bc(this),this.animations=new Ni(this),this.accessibility=new _a(this);let t=()=>this._needsUpdateSize=!0;window.addEventListener(`resize`,t),this._disposeCallbacks.push(()=>window.removeEventListener(`resize`,t));let n=new ResizeObserver(e=>this._needsUpdateSize=!0);n.observe(this.domElement),this._disposeCallbacks.push(()=>n.disconnect()),this._intersectionObserver=new IntersectionObserver(e=>{this._isVisible=e[0].isIntersecting}),this._disposeCallbacks.push(()=>this._intersectionObserver?.disconnect()),k.register(this)}createNewRenderer(t){if(this.renderer?.dispose(),t={...e.DefaultWebGLRendererParameters,...t},!t.canvas){let e=this.domElement?.shadowRoot?.querySelector(`canvas`);e?(t.canvas=e,R&&console.log(`Using canvas from shadow root`,e)):R&&console.warn(`No canvas found in shadow root, creating new canvas. This may cause input events to not work correctly. To fix this, make sure to use the canvas provided by the Needle Engine Web Component (e.g. by using context.createNewRenderer() without parameters or passing the canvas from the shadow root explicitly).`)}return R&&console.log(`Using Renderer Parameters:`,t,this.domElement),this.renderer=new h(t),this.renderer.domElement.setAttribute(`aria-label`,`3D rendering`),this.renderer.domElement.setAttribute(`role`,`img`),this.renderer.debug.checkShaderErrors=M()||A(`checkshadererrors`)===!0,this.renderer.toneMappingExposure=1,this.renderer.toneMapping=0,this.renderer.setClearColor(new a(`lightgrey`),0),this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=2,this.renderer.setSize(this.domWidth,this.domHeight),this.renderer.outputColorSpace=de,this.renderer.nodes={library:new Fe,modelViewMatrix:null,modelNormalViewMatrix:null},this.lodsManager.setRenderer(this.renderer),this.input.bindEvents(),sa(this,this.renderer.domElement),this.renderer}_intersectionObserver=null;internalOnUpdateVisible(){this._intersectionObserver?.disconnect(),this._intersectionObserver?.observe(this.domElement)}_disposeCallbacks=[];requestSizeUpdate(){this._needsUpdateSize=!0}maxRenderResolution;get devicePixelRatio(){return this._devicePixelRatio}set devicePixelRatio(e){e!==this._devicePixelRatio&&(this._devicePixelRatio=e,this._needsUpdateSize=!0)}_devicePixelRatio=`auto`;updateSize(e=!1){if(e||!this.isManagedExternally&&this.renderer.xr?.isPresenting===!1){this._needsUpdateSize=!1;let e=this.resolutionScaleFactor,t=this.domWidth*e,n=this.domHeight*e;this.maxRenderResolution&&(this.maxRenderResolution.x=Math.max(1,this.maxRenderResolution.x),t=Math.min(this.maxRenderResolution.x,t),this.maxRenderResolution.y=Math.max(1,this.maxRenderResolution.y),n=Math.min(this.maxRenderResolution.y,n));let r=this.mainCamera;this.updateAspect(r),this.renderer.setSize(t,n,!0),this.renderer.domElement.style.width=`100%`,this.renderer.domElement.style.height=`100%`;let i=typeof this.devicePixelRatio==`number`?this.devicePixelRatio:this.devicePixelRatio===`auto`?Math.min(2,window.devicePixelRatio):void 0;i!==void 0&&this.renderer.setPixelRatio(i),this.composer&&(this.composer.setSize?.call(this.composer,t,n),i!==void 0&&`setPixelRatio`in this.composer&&typeof this.composer.setPixelRatio==`function`&&this.composer.setPixelRatio?.call(this.composer,window.devicePixelRatio))}}updateAspect(e,t,n){if(!e)return;t===void 0&&(t=this.domWidth),n===void 0&&(n=this.domHeight);let r=t/n;if(e.isPerspectiveCamera){let t=e,n=t.aspect;t.aspect=r,n!==t.aspect&&e.updateProjectionMatrix()}else if(e.isOrthographicCamera){let t=e,n=t.top-t.bottom,i=n*r/2,a=n/2;(t.left!=-i||t.top!=a)&&(t.left=-i,t.right=i,t.top=a,t.bottom=-a,e.updateProjectionMatrix())}}recreate(){this.clear(),this.create(this._originalCreationArgs)}_originalCreationArgs;async onCreate(e){return this.create(e)}async create(e){try{this._isCreating=!0,e!==this._originalCreationArgs&&(this._originalCreationArgs=Gt(e)),window.addEventListener(`unhandledrejection`,this.onUnhandledRejection);let t=await this.internalOnCreate(e);return this._isCreated=t,t}finally{window.removeEventListener(`unhandledrejection`,this.onUnhandledRejection),this._isCreating=!1}}onUnhandledRejection=e=>{this.onError(e.reason)};onError(e){this.domElement.dispatchEvent(new CustomEvent(`error`,{detail:e}))}clear(){k.dispatchCallback(O.ContextClearing,this),ja(this,O.ContextClearing),zf(this.scene,!0,!0),this.scene=new ne,this.addressables?.dispose(),this.lightmaps?.clear(),this.physics?.engine?.clearCaches(),this.lodsManager.disable(),this.accessibility?.clear(),this._onBeforeRenderListeners.clear(),this._onAfterRenderListeners.clear(),this.isManagedExternally||this.renderer&&(this.renderer.renderLists.dispose(),this.renderer.state.reset(),this.renderer.resetState()),k.dispatchCallback(O.ContextCleared,this)}dispose(){this.internalOnDestroy(),this.accessibility.dispose()}onDestroy(){this.internalOnDestroy()}internalOnDestroy(){e.Current=this,k.dispatchCallback(O.ContextDestroying,this),ja(this,O.ContextDestroying),this.clear(),this.renderer?.setAnimationLoop(null),this.renderer&&(this.renderer.setClearAlpha(0),this.renderer.clear(),this.isManagedExternally||(R&&console.log(`Disposing renderer`),this.renderer.dispose())),this.scene=null,this.renderer=null,this.input.dispose(),this.menu.onDestroy(),this.animations.onDestroy();for(let e of this._disposeCallbacks)try{e()}catch(t){console.error(`Error in on dispose callback:`,t,e)}this.domElement?.parentElement&&this.domElement.parentElement.removeChild(this.domElement),this._isCreated=!1,k.dispatchCallback(O.ContextDestroyed,this),ja(this,O.ContextDestroyed),k.unregister(this),e.Current===this&&(e.Current=null)}registerCoroutineUpdate(e,t,n){return typeof t?.next==`function`?(this.coroutines[n]||(this.coroutines[n]=[]),this.coroutines[n].push({comp:e,main:t}),t):(console.error(`Registered invalid coroutine function from `+e.name+` -Coroutine functions must be generators: "*myCoroutine() {...}" -Start a coroutine from a component by calling "this.startCoroutine(myCoroutine())"`),t)}unregisterCoroutineUpdate(e,t){if(!this.coroutines[t])return;let n=this.coroutines[t].findIndex(t=>t.main===e);n>=0&&this.coroutines[t].splice(n,1)}stopAllCoroutinesFrom(e){for(let t in this.coroutines){let n=this.coroutines[t];for(let t=n.length-1;t>=0;t--)n[t].comp===e&&n.splice(t,1)}}_cameraStack=[];setCurrentCamera(e){if(!e)return;if(e.threeCamera||e.buildCamera(),!e.threeCamera){console.warn(`Camera component is missing camera`,e);return}let t=this._cameraStack.indexOf(e);t>=0&&this._cameraStack.splice(t,1),this._cameraStack.push(e),this.mainCameraComponent=e;let n=e.threeCamera;n.isPerspectiveCamera&&this.updateAspect(n),this.mainCameraComponent?.applyClearFlagsIfIsActiveCamera()}removeCamera(e){if(!e)return;let t=this._cameraStack.indexOf(e);if(t>=0&&this._cameraStack.splice(t,1),this.mainCameraComponent===e&&(this.mainCameraComponent=void 0,this._cameraStack.length>0)){let e=this._cameraStack[this._cameraStack.length-1];this.setCurrentCamera(e)}}_onBeforeRenderListeners=new Map;_onAfterRenderListeners=new Map;addBeforeRenderListener(e,t){if(!this._onBeforeRenderListeners.has(e.uuid)){let t=[];this._onBeforeRenderListeners.set(e.uuid,t),e.onBeforeRender=this._createRenderCallbackWrapper(t)}this._onBeforeRenderListeners.get(e.uuid).push(t)}removeBeforeRenderListener(e,t){if(this._onBeforeRenderListeners.has(e.uuid)){let n=this._onBeforeRenderListeners.get(e.uuid),r=n.indexOf(t);r>=0&&n.splice(r,1)}}addAfterRenderListener(e,t){if(!this._onAfterRenderListeners.has(e.uuid)){let t=[];this._onAfterRenderListeners.set(e.uuid,t),e.onAfterRender=this._createRenderCallbackWrapper(t)}this._onAfterRenderListeners.get(e.uuid)?.push(t)}removeAfterRenderListener(e,t){if(this._onAfterRenderListeners.has(e.uuid)){let n=this._onAfterRenderListeners.get(e.uuid),r=n.indexOf(t);r>=0&&n.splice(r,1)}}_createRenderCallbackWrapper(e){return(t,n,r,i,a,o)=>{for(let s=0;s{if(R||M()){if(Di(`Needle Engine dependencies failed to load. Please check the console for more details`),e instanceof ReferenceError){let t=`YourComponentName`,n=e.message.indexOf(`'`);if(n>0){let r=e.message.indexOf(`'`,n+1);if(r>0){let i=e.message.substring(n+1,r);i.length>3&&(t=i)}}console.error(`Needle Engine dependencies failed to load:\n\n# Make sure you don't have circular imports in your scripts!\n\nPossible solutions: \n→ Replace @serializable(${t}) in your script with @serializable(Behaviour)\n→ If you only need type information try importing the type only, e.g: import { type ${t} }\n\n---`,e);return}console.error(`Needle Engine dependencies failed to load`,e)}}).then(()=>{R&&console.log(`Needle Engine dependencies are ready`)})),this.clear();let i=this.renderer,a=!i||i.isDisposed===!0;this.isManagedExternally===!1&&a?this.createNewRenderer():this.lodsManager.setRenderer(this.renderer),this.renderer?.setAnimationLoop(null),e.Current=this,await k.dispatchCallback(O.ContextCreationStart,this);let o=!0,s;try{e.Current=this,s=t?await this.internalLoadInitialContent(n,t):[]}catch(e){console.error(e),o=!1}if(!o)return this.onError(`Failed to load initial content`),!1;if(n!==this._createId||t?.abortSignal?.aborted)return!1;if(this.internalOnUpdateVisible(),!this.renderer)return R&&console.warn(`Context has no renderer (perhaps it was disconnected?`,this.domElement.isConnected),!1;!this.isManagedExternally&&!this.domElement.shadowRoot&&this.domElement.prepend(this.renderer.domElement),e.Current=this,e.Current=this;for(let e=0;e{let n=e;if(n?.isCamera){if(dp(n.gameObject),!n.activeAndEnabled)return;if(n.tag===`MainCamera`)return t=n,!0;t=n}}),t?this.setCurrentCamera(t):!k.dispatchCallback(O.MissingCamera,this,{files:s})&&!this.mainCamera&&!this.isManagedExternally&&console.warn(`Missing camera in main scene`,this)}this.input.bindEvents(),e.Current=this,ep(this),this.physics.engine&&(this.physics.engine?.step(0),this.physics.engine?.postStep()),!this.isManagedExternally&&this.composer&&this.mainCamera,this._needsUpdateSize=!0,this._stats&&(this._stats.showPanel(0),this._stats.dom.style.position=`absolute`,this.domElement.shadowRoot?.appendChild(this._stats.dom)),R&&ti(this.scene,!0),this.targetFrameRate===void 0?(R&&console.warn(`No target framerate set, using default`,e.DefaultTargetFrameRate),this.targetFrameRate=e._defaultTargetFramerate):R&&console.log(`Target framerate set to`,this.targetFrameRate),this._dispatchReadyAfterFrame=!0;let c=k.dispatchCallback(O.ContextCreated,this,{files:s});if(c){let e=this.domElement;`internalSetLoadingMessage`in e&&typeof e.internalSetLoadingMessage==`function`&&e?.internalSetLoadingMessage(`finish loading`),await c}if(t?.abortSignal?.aborted)return!1;let l=this.rootSourceId;return l&&this.sceneLighting.enable(l),ja(this,O.ContextCreated),R&&console.log(`Context Created...`,this.renderer,this.renderer.domElement),this._isCreating=!1,!this.isManagedExternally&&!t?.abortSignal?.aborted&&this.restartRenderLoop(),!0}rootSceneSourceIdentifiers=[];async internalLoadInitialContent(e,t){this.rootSceneSourceIdentifiers.length=0;let n=[];if(t.files.length===0)return n;let r=[...t.files];this.rootSceneSourceIdentifiers.push(...r);let i={name:``,progress:null,index:0,count:r.length},a=ba();for(let o=0;o{t.abortSignal?.aborted||(i.name=s,i.progress=e,i.index=o,i.count=r.length,t.onLoadingProgress?.call(this,i))});t?.onLoadingFinished?.call(this,o,s,c??null),c?n.push({src:s,file:c}):console.warn(`Could not load file: `+s)}if(e!==this._createId||t.abortSignal?.aborted){R&&console.log(`Aborting loading because create id changed or abort signal was set`,e,this._createId);for(let e of n)if(e&&e.file)for(let t of e.file.scenes)zf(t,!0,!0)}else{let e=!1;for(let t of n)t&&t.file&&(t.file.scene?(e=!0,this.scene.add(t.file.scene)):console.warn(`No scene found in loaded file`));if(!e){for(let e of n)if(e&&e.file&&`parser`in e.file){let t=0;if(!Array.isArray(e.file.parser.json.materials))continue;for(let n=0;n{this.isManagedExternally||this.update(e,t)}),!0):(console.error(`Can not start render loop without renderer`),!1)}_renderlooperrors=0;update(t,n){if(n===void 0&&(n=null),M()||R||$f())try{this.internalStep(t,n),this._renderlooperrors=0}catch(t){this._renderlooperrors+=1,(M()||R)&&(t instanceof Error||t instanceof TypeError)&&Ti(`Caught unhandled exception during render-loop - see console for details.`,{type:Tn.Error}),console.error(`Frame #`+this.time.frame+` -`,t),this._renderlooperrors>=3&&(console.warn(`Stopping render loop due to error`),this.renderer.setAnimationLoop(null),$a.sendError(e.Current,`renderloop`,t instanceof Error?t:Error(String(t)))),this.domElement.dispatchEvent(new CustomEvent(`error`,{detail:t}))}else this.internalStep(t,n)}updatePhysics(e){this.internalUpdatePhysics(e)}setCameraFocusRect(e,t){let n=this._focusRect;if(this._focusRect=e,t&&Object.assign(this.focusRectSettings,t),t?.damping===void 0&&n){let e=n;n instanceof HTMLElement&&(e=n.getBoundingClientRect()),e&&`top`in e&&e.bottom>=-100&&e.right>=-100&&e.top<=window.innerHeight+100&&e.left<=window.innerWidth+100&&(this.focusRectSettings.damping=.2)}}get focusRect(){return this._focusRect}get focusRectSize(){let e=this._focusRect;if(e&&(e instanceof DOMRect||`width`in e&&`height`in e&&`x`in e&&`y`in e))return{x:e.x,y:e.y,width:e.width,height:e.height};if(e instanceof HTMLElement){let t=e.getBoundingClientRect();return{x:t.x,y:t.y,width:t.width,height:t.height}}return null}focusRectSettings={damping:0,zoom:1,offsetX:0,offsetY:0};_focusRect=null;_lastTimestamp=0;_accumulatedTime=0;_dispatchReadyAfterFrame=!1;internalStep(e,t){this.internalOnBeforeRender(e,t)!==!1&&(this.internalOnRender(),this.internalOnAfterRender())}internalOnBeforeRender(t,n){this.renderer.info.autoReset=!!n,this.renderer.info.autoReset===!1&&this.renderer.info.reset(),this._needsVisibleUpdate=!0;let r=n!==null&&this._xrFrame===null;if(this._xrFrame=n,r&&this.domElement.dispatchEvent(new CustomEvent(`xr-session-started`,{detail:{context:this,session:this.xrSession,frame:n}})),this._currentFrameEvent=z.Undefined,this.isManagedExternally===!1&&this.isInXR===!1&&this.targetFrameRate!==void 0){this._lastTimestamp===0&&(this._lastTimestamp=t),this._accumulatedTime+=(t-this._lastTimestamp)/1e3,this._lastTimestamp=t;let e=this.targetFrameRate;if(typeof e==`object`&&(e=e.value),this._accumulatedTime<1/(e+1))return!1;this._accumulatedTime=0}if(this._stats?.begin(),e.Current=this,this.onHandlePaused())return!1;for(e.Current=this,this.time.update(),Su&&console.log(`FPS`,this.time.smoothedFps.toFixed(0)),ep(this),lp(this.scene),np(this),ja(this,z.Start);this._cameraStack.length>0&&(!this.mainCameraComponent||this.mainCameraComponent.destroyed);){this._cameraStack.splice(this._cameraStack.length-1,1);let e=this._cameraStack[this._cameraStack.length-1];this.setCurrentCamera(e)}if(this.pre_update_oneshot_callbacks){for(let e in this.pre_update_oneshot_callbacks)this.pre_update_oneshot_callbacks[e]();this.pre_update_oneshot_callbacks.length=0}if(this.pre_update_callbacks)for(let e in this.pre_update_callbacks)this.pre_update_callbacks[e]();this._currentFrameEvent=z.EarlyUpdate;for(let t=0;t0&&this.internalUpdatePhysics(this.physicsSteps),this.isVisibleToUser||this.runInBackground){this._currentFrameEvent=z.OnBeforeRender;for(let t=0;t0?this.time.deltaTime/e.damping:1;mr(this._focusRect,this.focusRectSettings,t,this.mainCamera,this.renderer)}}return!0}internalUpdatePhysics(e){if(!this.physics.engine)return!1;let t=e,n=this.time.deltaTime/t;for(let e=0;e0){let e=i[i.length-1].next();if(e.done&&i.pop(),t(e)&&(r.chained||=[],r.chained.push(e.value)),!e.done)continue}let a=r.main.next();if(a.done===!0){n.splice(e,1),--e;continue}let o=a.value;if(t(o)){if(o.next().done)continue;r.chained||=[],r.chained.push(o)}else if(o instanceof Promise){let e=o;r.chained||=[];let t=Ws(e);r.chained?.push(t);continue}}catch(e){console.error(e)}}function t(e){return!!(e&&e.next&&e.return)}}},Du={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};async function Ou(e){let t=await fetch(e);if(t.ok)return t.json();throw Error(t.statusText)}async function ku(e){if(!e)throw Error(`No basePath supplied`);return await Ou(`${e}/profilesList.json`)}async function Au(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let i=await ku(t),a;if(e.profiles.some(e=>{let n=i[e];return n&&(a={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!a}),!a){if(!n)throw Error(`No matching profile name found`);let e=i[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);a={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let o=await Ou(a.profilePath),s;if(r){let t;if(t=e.handedness===`any`?o.layouts[Object.keys(o.layouts)[0]]:o.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${a.profileId}`);t.assetPath&&(s=a.profilePath.replace(`profile.json`,t.assetPath))}return{profile:o,assetPath:s}}var ju={xAxis:0,yAxis:0,button:0,state:Du.ComponentState.DEFAULT};function Mu(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let i=Math.atan2(t,e);n=Math.cos(i),r=Math.sin(i)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var Nu=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===Du.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(ju)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:i,normalizedYAxis:a}=Mu(e,t);switch(this.componentProperty){case Du.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?i:.5;break;case Du.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?a:.5;break;case Du.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case Du.ComponentProperty.STATE:this.valueNodeProperty===Du.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=+!!this.states.includes(r);break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},Pu=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new Nu(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:Du.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(e){if(this.values.state=Du.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=Du.ComponentState.PRESSED:(t.touched||this.values.button>Du.ButtonTouchThreshold)&&(this.values.state=Du.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===Du.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>Du.AxisTouchThreshold&&(this.values.state=Du.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===Du.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>Du.AxisTouchThreshold&&(this.values.state=Du.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},Fu=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new Pu(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},Iu=new ce().makeRotationY(Math.PI),Lu=new E().setFromAxisAngle(new o(0,1,0),Math.PI),Ru=A(`debugwebxr`),zu=class{priority=-1e5;gameObject;isXRRig(){return!0}get isActive(){return this.gameObject.visible}constructor(){if(this.gameObject=new S,this.gameObject.name=`Implicit XR Rig`,Ru){let e=Sd(16733661);e.position.y+=.5,this.gameObject.add(e)}}},Bu=A(`debugwebxr`),Vu=A(`debugcustomgesture`),Hu=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,Uu=`generic-trigger`,Wu=new E().setFromEuler(new He(g.degToRad(0),g.degToRad(-90),g.degToRad(-90))),Gu=new o(.04,-.04,0),Ku=class{xr;get context(){return this.xr.context}inputSource;index=0;emitEvents=!0;get connected(){return this._connected}_connected=!0;get isTracking(){return this._isTracking}_isTracking=!1;get gamepad(){return this.__gamepad??=this.inputSource.gamepad}__gamepad;get isHand(){return this.hand!=null}get hand(){return this.__hand??=this.inputSource.hand}__hand;get handObject(){return this.context.renderer.xr.getHand(this.index)}get profiles(){return this.inputSource.profiles}get layout(){return this._layout}get targetRayMode(){return this.inputSource.targetRayMode}get targetRaySpace(){return this.inputSource.targetRaySpace}get gripSpace(){return this.inputSource.gripSpace}get side(){return this.__side??=this.inputSource.handedness}__side=void 0;get isRight(){return this.side===`right`}get isLeft(){return this.side===`left`}get isStylus(){return this._isMxInk}getHitTestSource(){return this._hitTestSource||this._requestHitTestSource(),this._hitTestSource}get hasHitTestSource(){return this._hitTestSource}cancelHitTestSource(){this._hitTestSource&&=(this._hitTestSource.cancel(),void 0)}_hitTestSource=void 0;_hasSelectEvent=!1;get hasSelectEvent(){return this._hasSelectEvent}_isMxInk=!1;_isMetaQuestTouchController=!1;getHitTest(){return this.xr.getHitTest(this)}_handJointPoses=new Map;getHandJointPose(e,t){if(t||=this.xr.frame,!this.hand||!t?.getJointPose||!this.xr.referenceSpace)return null;let n=this._handJointPoses?.get(e);return n||(n=t.getJointPose(e,this.xr.referenceSpace),n&&this._handJointPoses.set(e,n),n)}_gripMatrix=new ce;_gripPosition=new o;_gripQuaternion=new E;_linearVelocity=new o;_rayPositionRaw=new o;_rayRotationRaw=new E;_rayMatrix=new ce;_rayPosition=new o;_rayQuaternion=new E;get gripPosition(){return P(this._gripPosition)}get gripQuaternion(){return Tr(this._gripQuaternion)}get gripMatrix(){return this._gripMatrix}get gripLinearVelocity(){return P(this._linearVelocity).applyQuaternion(Lu)}get rayPosition(){return P(this._rayPosition)}get rayQuaternion(){return Tr(this._rayQuaternion)}get gripWorldPosition(){return P(this._gripWorldPosition)}_gripWorldPosition=new o;get gripWorldQuaternion(){return Tr(this._gripWorldQuaternion)}_gripWorldQuaternion=new E;get rayWorldPosition(){return P(this._rayWorldPosition)}_rayWorldPosition=new o;updateRayWorldPosition(){let e=this.xr.context.mainCamera?.parent;this._rayWorldPosition.copy(this._rayPositionRaw),e&&this._rayWorldPosition.applyMatrix4(e.matrixWorld)}get rayWorldQuaternion(){return Tr(this._rayWorldQuaternion)}_rayWorldQuaternion=new E;get pinchPosition(){return P(this._pinchPosition)}_pinchPosition=new o;updateRayWorldQuaternion(){let e=this.xr.context.mainCamera?.parent,t=e?Pr(e):void 0;this._rayWorldQuaternion.copy(this._rayRotationRaw).multiply(Lu),t&&this._rayWorldQuaternion.premultiply(t)}get ray(){return this._ray.origin.copy(this.rayWorldPosition),this._ray.direction.copy(P(0,0,1).applyQuaternion(this.rayWorldQuaternion)),this._ray}_ray;_hand_wristDotUp=void 0;get handWristDotUp(){if(this._hand_wristDotUp!==void 0)return this._hand_wristDotUp;let e=this.handObject?.joints.wrist;if(e){let t=P(0,1,0).applyQuaternion(e.quaternion);return this._hand_wristDotUp=P(0,1,0).dot(t)}}get isHandUpsideDown(){return this.handWristDotUp===void 0?!1:this.handWristDotUp<-.7}get isTeleportGesture(){return this.isHandUpsideDown&&this.getGesture(`pinch`)?.isDown}get object(){return this._object}_object;_gripSpaceObject;_raySpaceObject;model=null;_debugAxesHelper=new _e(.15);_debugGripAxesHelper=new _e(.07);_debugRayAxesHelper=new _e(.07);async getModelUrl(){return this.getMotionController?.then(e=>e?.assetUrl||null)}constructor(e,t,n){this.xr=e,this.inputSource=t,this.index=n,this._object=new S,this._object.name=`NeedleXRController_${n}`,Bu&&(this._object.add(this._debugAxesHelper),this._gripSpaceObject=new S,this._raySpaceObject=new S,this._gripSpaceObject.name=`NeedleXRController_${n}_gripSpace`,this._raySpaceObject.name=`NeedleXRController_${n}_raySpace`,this._gripSpaceObject.add(this._debugGripAxesHelper),this._raySpaceObject.add(this._debugRayAxesHelper),this.xr.context.scene.add(this._gripSpaceObject),this.xr.context.scene.add(this._raySpaceObject)),this.xr.context.scene.add(this._object),this._ray=new p,this.pointerInit={origin:this,pointerType:this.hand?`hand`:`controller`,deviceIndex:this.index,pointerId:-1,mode:this.inputSource.targetRayMode,ray:this._ray,device:this._object,buttonName:`none`},this.initialize(),this.subscribeEvents()}_hitTestSourcePromise=null;_requestHitTestSource(){return this._hitTestSourcePromise?this._hitTestSourcePromise:this.xr.mode===`immersive-ar`&&this.inputSource.targetRayMode===`tracked-pointer`&&this.xr.session.requestHitTestSourceForTransientInput?this._hitTestSourcePromise=this.xr.session.requestHitTestSourceForTransientInput({profile:this.inputSource.profiles[0],offsetRay:new XRRay})?.then(e=>(this._hitTestSourcePromise=null,this.connected?this._hitTestSource=e:(e.cancel(),null)))??null:null}onPointerHits=e=>{};onUpdate(e){this.onUpdateFrame(e),this.updateInputEvents(),this.onUpdateMove()}onRenderDebug(){H.DrawSphere(this.rayWorldPosition,.003),H.DrawDirection(this.rayWorldPosition,P(0,0,10).applyQuaternion(this.rayWorldQuaternion));let e=(this.inputSource.gripSpace?this.gripWorldPosition:this.object.worldPosition).sub(this.object.worldForward.multiplyScalar(.1)),t=this.inputSource.profiles.join(` -`),n=`Controller[${this.index}] (${this.inputSource.targetRayMode}, ${this.side}) -C:${this.connected?`x`:`-`} T:${this.isTracking?`x`:`-`} Hand:${this.inputSource.hand?`x`:`-`} Pen: ${this._isMxInk?`x`:`-`}`;if(this.inputSource.hand&&(n+=`\nPinch: ${this.getGesture(`pinch`)?.value.toFixed(3)}`),n+=` -`+t,n+=` -`+(this.inputSource.targetRaySpace?`Ray: x`:`Ray: -`)+(this.inputSource.gripSpace?` Grip: x`:` Grip: -`)+(this.inputSource.gamepad?` Gamepad: ${this.inputSource.gamepad.mapping}`:` Gamepad: -`),this.inputSource.gamepad){let e=this.inputSource.gamepad,t=`[btns `+e.buttons.length+`]: `+e.buttons.map(e=>e.value.toPrecision(1)).join(`,`);t+=` -[axes `+e.axes.length+`]: `+e.axes.map(e=>e.toPrecision(1)).join(`,`),n+=` -`+t}if(this._layout){n+=` -Layout: `;for(let e of Object.keys(this._layout.components||{})){let t=this.getStick(e),r=this._layout.components[e]?.gamepadIndices,i=r?Object.entries(r).map(e=>e[0][0].toUpperCase()+e[0].slice(1)+`=`+e[1]).join(`,`):``;n+=`\n ${e}: ${this._layout.components[e]?.type} [${i}] (${t.x.toPrecision(2)},${t.y.toPrecision(2)})`}}H.DrawLabel(e,n,.006)}onUpdateFrame(e){if(this._handJointPoses.clear(),this._hand_wristDotUp=void 0,!this.xr.referenceSpace||!this.inputSource.gamepad?.connected){this._isTracking=!1;return}let t=e.getPose(this.inputSource.targetRaySpace,this.xr.referenceSpace);this._isTracking=t!=null;let n=null,r=null,i=null,a=null;if(t){let e=t.transform;this._rayMatrix.fromArray(e.matrix).premultiply(Iu),this._rayMatrix.decompose(this._rayPosition,this._rayQuaternion,P(1,1,1)),i=P(e.position),a=Tr(e.orientation),this._rayPositionRaw.copy(i),this._rayRotationRaw.copy(a)}if(this.inputSource.gripSpace){let t=e.getPose(this.inputSource.gripSpace,this.xr.referenceSpace);if(t){let e=t.transform;if(n=P(e.position),r=Tr(e.orientation),this._gripMatrix.fromArray(e.matrix).premultiply(Iu),this._gripMatrix.decompose(this._gripPosition,this._gripQuaternion,P(1,1,1)),`linearVelocity`in t&&t.linearVelocity){let e=t.linearVelocity;this._linearVelocity.set(e.x,e.y,e.z)}}}this.xr.context.mainCamera?.parent&&(this._object.parent!==this.xr.context.mainCamera?.parent&&this.xr.context.mainCamera.parent.add(this._object),this._gripSpaceObject!==void 0&&this._gripSpaceObject?.parent!==this.xr.context.mainCamera?.parent&&this.xr.context.mainCamera.parent.add(this._gripSpaceObject),this._raySpaceObject!==void 0&&this._raySpaceObject?.parent!==this.xr.context.mainCamera?.parent&&this.xr.context.mainCamera.parent.add(this._raySpaceObject));let o=this.hand;if(o){let t=!1,i=o.get(`wrist`),a=i&&this.getHandJointPose(i,e);if(a){t=!0;let e=a.transform.position,n=a.transform.orientation;this._object.position.set(e.x,e.y,e.z),this._object.quaternion.set(n.x,n.y,n.z,n.w).multiply(Lu)}t||(this._object.position.copy(this._rayPosition),this._object.quaternion.copy(this._rayQuaternion).multiply(Lu));let s=o.get(`middle-finger-metacarpal`),c=s&&this.getHandJointPose(s,e);c&&(this._gripMatrix.fromArray(c.transform.matrix).premultiply(Iu),this._gripMatrix.decompose(this._gripPosition,this._gripQuaternion,P(1,1,1)),n=P().copy(c.transform.position),r=Tr().copy(c.transform.orientation),r.multiply(Wu),n.add(P(Gu).applyQuaternion(r)))}else this.inputSource.gripSpace&&this.targetRayMode===`transient-pointer`&&n&&r?(this._object.position.copy(n),this._object.quaternion.copy(r).multiply(Lu)):i&&a&&(this._object.position.copy(i),this._object.quaternion.copy(a).multiply(Lu));Bu&&(i&&a&&(this._raySpaceObject?.position.copy(i),this._raySpaceObject?.quaternion.copy(a).multiply(Lu)),n&&r&&(this._gripSpaceObject?.position.copy(n),this._gripSpaceObject?.quaternion.copy(r).multiply(Lu)));let s=this.xr.context.mainCamera?.parent,c=s?Pr(s):void 0;n&&r&&(this._gripWorldPosition.copy(n),s&&this._gripWorldPosition.applyMatrix4(s.matrixWorld),this._gripWorldQuaternion.copy(r),this._gripWorldQuaternion.multiply(Lu),c&&this._gripWorldQuaternion.premultiply(c)),this.updateRayWorldPosition(),this.updateRayWorldQuaternion()}onDisconnected(){this._connected=!1,Bu&&console.warn(`Controller disconnected`,this.index);for(let e of this._object.children)this.xr.context.scene.attach(e);this._object?.removeFromParent(),this._debugAxesHelper?.removeFromParent(),this._debugGripAxesHelper?.removeFromParent(),this._debugRayAxesHelper?.removeFromParent(),this._gripSpaceObject?.removeFromParent(),this._raySpaceObject?.removeFromParent(),this.unsubscribeEvents(),this._hitTestSource&&=(this._hitTestSource.cancel(),void 0)}getButton(e){if(!this._layout)return;switch(e){case`primary-button`:if(this.isLeft)e=`x-button`;else if(this.isRight)e=`a-button`;else return;break;case`primary`:return this.hand?this.getGesture(`pinch`):this.toNeedleGamepadButton(0,e);case`xr-standard-trigger`:if(this.inputSource.gamepad)return this.toNeedleGamepadButton(0,e);break;case`xr-standard-squeeze`:if(this.inputSource.gamepad)return this.toNeedleGamepadButton(1,e);break;case`xr-standard-thumbstick`:if(this.inputSource.gamepad)return this.toNeedleGamepadButton(3,e);break}if(this._buttonMap.has(e))return this.toNeedleGamepadButton(this._buttonMap.get(e),e);let t=this._layout?.components[e];if(t?.gamepadIndices)switch(t.type){case`button`:case`squeeze`:if(this.inputSource.gamepad){let n=t.gamepadIndices.button;return this._buttonMap.set(e,n),this.toNeedleGamepadButton(n,e)}break;default:console.warn(`Unsupported component type`,t.type);break}this._buttonMap.set(e,void 0)}getGesture(e){let t=this.states[e];if(!t)return null;this.states[e]=t;let n=this._needleGamepadButtons[e]||new Ju(void 0,e);return n.pressed=t.pressed,n.value=t.value,n.isDown=t.isDown,n.isUp=t.isUp,this._needleGamepadButtons[e]=n,n}getPointerId(e){if((e===`primary`||e===`pinch`)&&(e=0),typeof e!=`number`){let t=this._buttonMap.get(e);if(t===void 0)return;e=t}return this.index*10+e}_needleGamepadButtons={};toNeedleGamepadButton(e,t){if(!this.inputSource.gamepad?.buttons)return;let n=this.inputSource.gamepad?.buttons[e],r=this.states[e],i=this._needleGamepadButtons[e]||new Ju(e,t);return n&&(i.pressed=n.pressed,i.value=n.value,i.touched=n.touched),r&&(i.isDown=r.isDown,i.isUp=r.isUp),this._needleGamepadButtons[e]=i,i}getStick(e){if(!this._layout||this.isHand)return{x:0,y:0,z:0};e===`primary`&&this._layout.components[`xr-standard-thumbstick`]&&(e=`xr-standard-thumbstick`);let t=this._layout?.components[e];if(t?.gamepadIndices)switch(t.type){case`thumbstick`:case`touchpad`:if(this.inputSource.gamepad){let e=t.gamepadIndices.xAxis,n=t.gamepadIndices.yAxis,r=this.inputSource.gamepad.axes[e]||0,i=this.inputSource.gamepad.axes[n]||0;r*=-1,i*=-1;let a=t.gamepadIndices.button,o=this.inputSource.gamepad?.buttons[a]?.value||0;return{x:r,y:i,z:o}}}return{x:0,y:0,z:0}}_buttonMap=new Map;_motioncontroller;_layout;getMotionController;initialize(){if(this._hasSelectEvent=this.profiles.includes(`generic-hand-select`)||this.profiles.some(e=>e.startsWith(`generic-trigger`)),this._isMetaQuestTouchController=this.profiles.includes(`meta-quest-touch-plus`)||this.profiles.includes(`oculus-touch-v3`),this._isMxInk=this.profiles.includes(`logitech-mx-ink`),!this._layout){if(this.inputSource.targetRayMode===`transient-pointer`)return;this.getMotionController=Au(this.inputSource,Hu,Uu).then(e=>{if(!this.connected)return null;if(this._motioncontroller=new Fu(this.inputSource,e.profile,e.assetPath||``),this._layout=e.profile.layouts[this.inputSource.handedness],this._layout){if(!this._layout.gamepad?.length){this._layout.gamepad=[];for(let e in this._layout.components){let t=this._layout.components[e];this._layout.gamepad[t.gamepadIndices.button]=e}}this.profiles.length>=1&&this.profiles[0]===`htc-vive-focus-plus`&&this.inputSource.gamepad&&this.inputSource.gamepad.axes.length===4&&!this._layout.components[`xr-standard-thumbstick`]&&(this._layout.components[`xr-standard-thumbstick`]={type:`thumbstick`,gamepadIndices:{xAxis:2,yAxis:3}})}return this._motioncontroller}).catch(e=>(this.inputSource&&console.warn(`Couldn't initialize motion controller profile for `,this.inputSource,e),null))}}emitPointerDownEvent=!0;emitPointerUpEvent=!0;emitPointerMoveEvent=!0;pointerMoveDistanceThreshold=.03;pointerMoveAngleThreshold=.05;subscribeEvents(){this.xr.session.addEventListener(`selectstart`,this.onSelectStart),this.xr.session.addEventListener(`selectend`,this.onSelectEnd),this.xr.session.addEventListener(`squeezestart`,this.onSequeezeStart),this.xr.session.addEventListener(`squeezeend`,this.onSequeezeEnd)}unsubscribeEvents(){this.xr.session.removeEventListener(`selectstart`,this.onSelectStart),this.xr.session.removeEventListener(`selectend`,this.onSelectEnd),this.xr.session.removeEventListener(`squeezestart`,this.onSequeezeStart),this.xr.session.removeEventListener(`squeezeend`,this.onSequeezeEnd)}_selectButtonIndex=void 0;_squeezeButtonIndex=void 0;onSelectStart=e=>{if(!this.emitPointerDownEvent||this.inputSource!==e.inputSource)return;this.onUpdateFrame(e.frame),this._hasSelectEvent=!0;let t=this._layout?.selectComponentId,n=this._layout?.components[t]?.gamepadIndices?.button;n!==void 0&&(this._selectButtonIndex=n),!Vu&&(Bu&&H.DrawDirection(this.rayWorldPosition,P(0,.01,1).applyQuaternion(this.rayWorldQuaternion),16711680,10),this.emitPointerEvent(L.PointerDown,this._selectButtonIndex||0,`xr-standard-trigger`,!0,e))};onSelectEnd=e=>{this.emitPointerUpEvent&&(Vu||this.inputSource===e.inputSource&&this.emitPointerEvent(L.PointerUp,this._selectButtonIndex||0,`xr-standard-trigger`,!0,e))};onSequeezeStart=e=>{this.emitPointerDownEvent&&this.inputSource===e.inputSource&&(this._squeezeButtonIndex=this._layout?.components[`xr-standard-squeeze`]?.gamepadIndices?.button,this._squeezeButtonIndex!==void 0&&(Bu&&H.DrawDirection(this.rayWorldPosition,P(0,.01,1).applyQuaternion(this.rayWorldQuaternion),255,10),this.emitPointerEvent(L.PointerDown,this._squeezeButtonIndex||0,`xr-standard-squeeze`,!0,e)))};onSequeezeEnd=e=>{this.emitPointerUpEvent&&this.inputSource===e.inputSource&&this._squeezeButtonIndex!==void 0&&this.emitPointerEvent(L.PointerUp,this._squeezeButtonIndex||0,`xr-standard-squeeze`,!0,e)};states={};updateInputEvents(){if(this.gamepad?.buttons){for(let e=0;e0&&!n.pressed?(r=`pointerdown`,n.isDown=!0,n.isUp=!1):t.value===0&&n.pressed?(r=`pointerup`,n.isDown=!1,n.isUp=!0):n.pressed&&(r=`pointermove`,n.isDown=!1,n.isUp=!1),n.pressed=t.value>0,n.value=t.value):(t.pressed&&!n.pressed?(r=`pointerdown`,n.isDown=!0,n.isUp=!1):!t.pressed&&n.pressed?(r=`pointerup`,n.isDown=!1,n.isUp=!0):(n.isDown=!1,n.isUp=!1),n.pressed=t.pressed,n.value=t.value),this.states[e]=n;let i=e!==this._selectButtonIndex&&e!==this._squeezeButtonIndex;if(r!=null&&i){let n=this._layout?.gamepad[e];this._isMxInk&&e===4&&(n=`stylus-touch`),this._isMxInk&&e===5&&(n=`stylus-tip`),(Bu||Vu)&&console.log(`Emitting pointer event`,r,e,n,t.value,this.gamepad,this._layout),this.emitPointerEvent(r,e,n??`none`,!1,null,t.value)}}if(this._isMetaQuestTouchController){let e=this.gamepad.buttons.length-1,t=this.states[e];if(t&&t.isDown){let e=this.context.menu;e.spatialMenuIsVisible?e.setSpatialMenuVisible(!1):this.context.menu.setSpatialMenuVisible(!0)}}}if(this.hand){let e=this.handObject;if(e){let t=e.joints[`index-finger-tip`],n=e.joints[`thumb-tip`];if(t&&n){let e=t.position.distanceTo(n.position);this._pinchPosition.lerpVectors(t.position,n.position,.5);let r=this.xr.context.mainCamera?.parent;if(r&&this._pinchPosition.applyMatrix4(r.matrixWorld),e!==0){let t=.02,n=.01,r=this.states.pinch||new qu,i=(t+n)*1.5;r.value=1-(e-t)/i;let a=et+n;a&&!r.pressed?(Vu&&console.log(`pinch start`,e),r.isDown=!0,r.isUp=!1,r.pressed=!0):o&&r.pressed?(r.isDown=!1,r.isUp=!0,r.pressed=!1):(r.isDown=!1,r.isUp=!1),this.states.pinch=r}}}}}_didMoveLastFrame=!1;_lastPointerMovePosition=new o;_lastPointerMoveQuaternion=new E;onUpdateMove(){if(!this.emitPointerMoveEvent)return;let e=!1;if(this._lastPointerMovePosition.distanceTo(this.gripWorldPosition)>this.pointerMoveDistanceThreshold*this.xr.rigScale&&(e=!0),e||this._lastPointerMoveQuaternion.angleTo(this.gripWorldQuaternion)>this.pointerMoveAngleThreshold&&(e=!0),e){this._didMoveLastFrame=!0,this._lastPointerMovePosition.copy(this.gripWorldPosition),this._lastPointerMoveQuaternion.copy(this.gripWorldQuaternion),Bu&&H.DrawLabel(this.rayWorldPosition.add(this.object.worldForward.multiplyScalar(.1)),`move`,.01);let e=this.xr.context.input.getFirstPressedButtonForPointer(this.index);e===void 0&&(e=0);let t=this.gamepad?.buttons[e]?.value;this.emitPointerEvent(`pointermove`,e,`none`,!1,null,t)}else this._didMoveLastFrame=!1}pointerInit;emitPointerEvent(e,t,n,r,i=null,a){if(!this.emitEvents){Bu&&e!==L.PointerMove&&console.warn(`Pointer events are disabled for this controller`,this.index,e,t);return}if(this.xr.mode===`immersive-vr`||this.xr.isPassThrough){this.pointerInit.origin=this,this.pointerInit.pointerId=this.getPointerId(t),this.pointerInit.pointerType=this.hand?`hand`:`controller`,this.pointerInit.button=t,this.pointerInit.buttonName=n,this.pointerInit.isPrimary=r,this.pointerInit.mode=this.inputSource.targetRayMode,this.pointerInit.ray=this.ray,this.pointerInit.device=this.object,this.pointerInit.pressure=a,this.pointerInit.clientX=this._rayPosition.x/this.xr.rigScale,this.pointerInit.clientY=this._rayPosition.y/this.xr.rigScale,this.pointerInit.clientZ=this._rayPosition.z/this.xr.rigScale;let o=B.Current;B.Current=this.xr.context,Bu&&e!==`pointermove`&&console.warn(`Pointer event`,e,t,n,{...this.pointerInit}),this.xr.context.input.createInputEvent(new ic(e,i,this.pointerInit)),B.Current=o}}},qu=class{isDown=!1;isUp=!1;pressed=!1;value=0},Ju=class{index;name;touched=!1;pressed=!1;value=0;isDown=!1;isUp=!1;constructor(e,t){this.index=e,this.name=t}},Yu=A(`debugwebxr`),Xu=class{controllerStates=[];userId;context;userStateEvtName;constructor(e,t){this.userId=e,this.context=t,this.userStateEvtName=`xr-sync-user-state-`+e,this.context.connection.beginListen(this.userStateEvtName,this.onReceivedControllerState)}dispose(){this.context.connection.stopListen(this.userStateEvtName,this.onReceivedControllerState)}onReceivedControllerState=e=>{Yu&&console.log(`XRSync: Received change for ${this.userId}: ${e.type} ${e.handedness}; tracked=${e.isTracking}`);let t=!1;for(let n=0;n=0;t--){let n=this.controllerStates[t],r=!1;for(let t=0;tt.index===e.index);if(t){let n=!1;n||=t.isTracking!=e.isTracking,n&&(t.isTracking=e.isTracking,this.context.connection.send(this.userStateEvtName,t))}else{let t={guid:this.userId+`-`+e.index,isTracking:e.isTracking,handedness:e.side,index:e.index,type:e.hand?`hand`:`controller`};this.controllerStates.push(t),this.context.connection.send(this.userStateEvtName,t),Yu&&console.log(`XRSync: ${t.type} ${t.handedness} added`,t.index)}}},Zu=class{hasState(e){return e?this._states.has(e):!1}isTracking(e,t){if(!e)return;let n=this._states.get(e);if(n)return n.controllerStates.find(e=>e.handedness===t)?.isTracking||!1}getDeviceType(e,t){if(!e)return;let n=this._states.get(e);if(n)return n.controllerStates.find(e=>e.handedness===t)?.type||`unknown`}context;constructor(e){this.context=e,this.context.connection.beginListen(Xc.JoinedRoom,this.onJoinedRoom),this.context.connection.beginListen(Xc.LeftRoom,this.onLeftRoom),this.context.connection.beginListen(Xc.UserJoinedRoom,this.onOtherUserJoinedRoom),this.context.connection.beginListen(Xc.UserLeftRoom,this.onOtherUserLeftRoom)}destroy(){this.context.connection.stopListen(Xc.JoinedRoom,this.onJoinedRoom),this.context.connection.stopListen(Xc.LeftRoom,this.onLeftRoom),this.context.connection.stopListen(Xc.UserJoinedRoom,this.onOtherUserJoinedRoom),this.context.connection.stopListen(Xc.UserLeftRoom,this.onOtherUserLeftRoom)}onJoinedRoom=()=>{if(this.context.connection.connectionId){this._states.has(this.context.connection.connectionId)||(Yu&&console.log(`XRSync: Local user joined room`,this.context.connection.connectionId),this._states.set(this.context.connection.connectionId,new Xu(this.context.connection.connectionId,this.context)));for(let e of this.context.connection.usersInRoom())this._states.has(e)||this._states.set(e,new Xu(e,this.context))}};onLeftRoom=()=>{this.context.connection.connectionId&&(this._states.has(this.context.connection.connectionId)||(this._states.get(this.context.connection.connectionId)?.dispose(),this._states.delete(this.context.connection.connectionId)))};onOtherUserJoinedRoom=e=>{let t=e.userId;this._states.has(t)||(Yu&&console.log(`XRSync: Remote user joined room`,t),this._states.set(t,new Xu(t,this.context)))};onOtherUserLeftRoom=e=>{let t=e.userId;this._states.has(t)||(this._states.get(t)?.dispose(),this._states.delete(t))};_states=new Map;onUpdate(e){this.context.connection.isConnected&&this.context.connection.connectionId&&this._states.get(this.context.connection.connectionId)?.update(e)}onExitXR(e){this.context.connection.isConnected&&this.context.connection.connectionId&&this._states.get(this.context.connection.connectionId)?.onExitXR(e)}},Qu=class{_fadeToColorQuad;_fadeToColorMaterial;constructor(){this._fadeToColorMaterial=new re({color:0,transparent:!0,depthTest:!1,fog:!1,side:2}),this._fadeToColorQuad=new x(new Ke(10,10),this._fadeToColorMaterial)}dispose(){this._fadeToColorQuad.geometry.dispose(),this._fadeToColorMaterial.dispose()}update(e,t){let n=this._fadeToColorQuad,r=this._fadeToColorMaterial;n.parent!==e&&r.opacity>0?e.add(n):r.opacity===0&&n.removeFromParent(),n.layers.set(2),n.material=this._fadeToColorMaterial,n.position.z=-1,n.renderOrder=1/0;let i=this._requestedFadeValue;r.opacity=N.lerp(r.opacity,i,t/.03),Math.abs(r.opacity-i)<=.01&&this._transitionResolve&&(this._transitionResolve(),this._transitionResolve=null,this._transitionPromise=null,this._requestedFadeValue=0)}remove(){this._fadeToColorQuad.removeFromParent()}fadeTransition(){if(this._transitionPromise)return this._transitionPromise;this._requestedFadeValue=1;let e=new Promise(e=>{this._transitionResolve=e});return this._transitionPromise=e,e}_requestedFadeValue=0;_transitionPromise=null;_transitionResolve=null},$u=class e{static _active=null;static get active(){return this._active}static _requestInFlight=!1;static async start(t,n){if(this._active)return console.error(`Cannot start a new XR session while one is already active`),null;if(this._requestInFlight)return console.error(`Cannot start a new XR session while a request is already in flight`),null;if(`xr`in navigator&&navigator.xr){if(!n)return console.error(`XRSessionInit must be provided`),null;this._requestInFlight=!0;let r=await navigator.xr.requestSession(t,n).catch(e=>{console.error(`Failed to start temporary XR session:`,e)});return r?(r.addEventListener(`end`,()=>{this._active=null}),this._requestInFlight?(this._requestInFlight=!1,this._active=new e(t,n,r),this._active):(r.end(),null)):(this._requestInFlight=!1,null)}return null}static async handoff(){return this._active?this._active.handoff():null}static async stop(){this._requestInFlight=!1,this._active&&(await this._active.end(),await Kt(100)),this._active=null}_session;_mode;_init;get isAR(){return this._mode===`immersive-ar`}get isVR(){return this._mode===`immersive-vr`}_renderer;_camera;_scene;constructor(e,t,n){this._mode=e,this._init=t,this._session=n,this._session.addEventListener(`end`,this.onEnd),this._renderer=new h({alpha:!0,antialias:!0}),this._renderer.outputColorSpace=`srgb`,this._renderer.setPixelRatio(Math.min(2,window.devicePixelRatio)),this._renderer.setSize(window.innerWidth,window.innerHeight,!0),j.isNeedleAppClip()&&window.requestAnimationFrame(()=>{let e=Math.min(2,window.devicePixelRatio),t=Math.floor(window.innerWidth*e),n=Math.floor(window.innerHeight*e);this._renderer.domElement.width=t,this._renderer.domElement.height=n}),this._renderer.setAnimationLoop(this.onFrame),this._renderer.xr.setSession(n),this._renderer.xr.enabled=!0,this._camera=new C,this._scene=new ne,this._scene.fog=new Be(4473924,10,250),this._scene.add(this._camera),this.setupScene()}end(){return this._session?this._session.end():Promise.resolve()}async handoff(){if(!this._session)throw Error(`Cannot handoff a session that has already ended`);let e={session:this._session,mode:this._mode,init:this._init};return await this.onBeforeHandoff(),this.onEnd(),this._session=null,e}onEnd=()=>{this._session?.removeEventListener(`end`,this.onEnd),this._renderer.setAnimationLoop(null),this._renderer.dispose(),this._scene.clear()};_lastTime=0;_frames=0;onFrame=(e,t)=>{let n=e-this._lastTime;this.update(e,n),this._camera.parent!==this._scene&&this._scene.add(this._camera),this._renderer.render(this._scene,this._camera),this._lastTime=e,this._frames++};_roomFlyObjects=[];_logoObject=null;get _logoDistance(){return this.isAR?.3:5}get _logoScale(){return this.isAR?.04:1}update(e,t){let n=e*4e-4;for(let e=0;e{if(!r)return;t.material.opacity=1;let a=1024;n.width=a,n.height=a,r.imageSmoothingQuality=`high`;let o=a*.19,s=e?1:i.width/i.height;if(!e){let e=n.height-o*1.5,t=e*s,a=(n.width-t)/2;r.drawImage(i,a,0,t,e)}let c=a*.12,l=`Loading...`;r.shadowBlur=0,r.fillStyle=this.isAR?`white`:`rgba(255,255,255,0.4)`,r.font=`${c}px Arial`,r.shadowBlur=a*.02,r.shadowColor=`rgba(0,0,0,0.5)`,r.shadowOffsetX=0,r.shadowOffsetY=0;let u=r.measureText(l);r.fillText(l,n.width/2-u.width/2,n.height-o/4),r.font=`${c}px Arial`,r.fillText(l,n.width/2-u.width/2,n.height-o/4);let d=new me().load(n.toDataURL());d.generateMipmaps=!0,d.colorSpace=`srgb`,d.anisotropy=4;let f=n.width/n.height;t.scale.x=this._logoScale*f*window.devicePixelRatio,t.scale.y=this._logoScale*window.devicePixelRatio,t.material.map=d,t.material.needsUpdate=!0};i.onload=()=>o(!1),i.onerror=t=>{console.error(`Failed to load temporary XR logo:`,e,t),i.src=Wl},i.crossOrigin=`anonymous`,i.src=e;let s=new ue(16777215,1);s.position.set(0,20,0),s.castShadow=!1,this._scene.add(s);let c=new ue(16777215,1);c.position.set(0,-1,0),c.castShadow=!1,this._scene.add(c);let l=new Ze(16777215,1,100,1);if(l.position.set(0,2,0),l.castShadow=!1,l.distance=200,this._scene.add(l),this.isAR===!1)for(let e=0;e<100;e++){let e=new Ce({color:2236962,metalness:1,roughness:.8}),t=Gs.Sphere,n=Ks.createPrimitive(t,{material:e});n.position.x=N.random(-50,50),n.position.y=N.random(-2,50),n.position.z=N.random(-50,50),n.rotation.x=N.random(0,Math.PI*2),n.rotation.y=N.random(0,Math.PI*2),n.rotation.z=N.random(0,Math.PI*2),n.scale.multiplyScalar(.5+Math.random()*10);let r=n.position.distanceTo(this._camera.position)-n.scale.x;r<10&&(n.position.z+=5,n.position.multiplyScalar(1+1/r)),this._roomFlyObjects.push(n),this._scene.add(n)}}},ed;(function(e){let t=[];function n(){t?.length||M()&&console.warn(`No USDZ exporters found – cannot export USDZ for QuickLook.`);for(let e of t)e.exportAndOpen();return!0}e.exportAndOpen=n;function r(e){t.push(e)}e.registerExporter=r;function i(e){if(!t)return;let n=t.indexOf(e);n>=0&&t.splice(n,1)}e.unregisterExporter=i})(ed||={});var V=A(`debugwebxr`),td=A(`stats`),nd=0;function rd(e){let t=null,n=e;return t=n.getAROverlayContainer?n.getAROverlayContainer():e,t}id();async function id(){let e=`immersive-vr`;try{if(j.isNeedleAppClip()?e=`immersive-ar`:await navigator.xr?.isSessionSupported(`immersive-vr`)||(e=`immersive-ar`),!await navigator.xr?.isSessionSupported(`immersive-ar`)&&e===`immersive-ar`)return}catch(e){console.debug(`[NeedleXRSession:granted] Error while checking XR support:`,e);return}if(A(`debugasap`)){let t=globalThis[`needle:XRSession`];if(t instanceof Promise){delete globalThis[`needle:XRSession`],k.addContextCreatedCallback(async n=>{if(!t)return;_i(!0);let r=await t;if(r){let t=pd.getDefaultSessionInit(e);pd.setSession(e,r,t,n.context)}else console.error(`[NeedleXRSession:granted] ASAP session was rejected`);t=void 0});return}}if(`xr`in navigator){if(/WebXRViewer\//i.test(navigator.userAgent)){console.warn(`WebXRViewer does not support addEventListener`);return}navigator.xr?.addEventListener(`sessiongranted`,async()=>{let t=sessionStorage.getItem(`needle_xr_session_mode`),n=sessionStorage.getItem(`needle_xr_session_init`)??null,r=n?JSON.parse(n):null,i=null;if(cd()&&(await $u.start(t||e,r||pd.getDefaultSessionInit(e)).catch(e=>console.warn(`[NeedleXRSession:granted] TemporaryXRContext start failed:`,e)),await ld(),i=await $u.handoff()),i)pd.setSession(i.mode,i.session,i.init,B.Current);else if(t&&n){console.log(`[NeedleXRSession:granted] Restore last session`);let e=JSON.parse(n);pd.start(t,e).catch(e=>console.warn(e))}else pd.start(e).catch(e=>console.warn(`[NeedleXRSession:granted] failed:`,e))},{once:!0})}}function ad(e,t){sessionStorage.setItem(`needle_xr_session_mode`,e),sessionStorage.setItem(`needle_xr_session_init`,JSON.stringify(t))}function od(){sessionStorage.removeItem(`needle_xr_session_mode`),sessionStorage.removeItem(`needle_xr_session_init`)}var sd=new Set;k.registerCallback(O.ContextCreationStart,async e=>{sd.add(e.context)}),k.registerCallback(O.ContextCreated,async e=>{sd.delete(e.context),ud(e.context?.domElement.getAttribute(`autostart`)||null)});function cd(){return sd.size>0}function ld(){return new Promise(e=>{let t=Date.now(),n=setInterval(()=>{(!cd()||Date.now()-t>6e4)&&(clearInterval(n),e())},100)})}j.isDesktop()&&M()&&window.addEventListener(`keydown`,e=>{(e.key===`x`||e.key===`Escape`)&&pd.active&&pd.stop()});function ud(e){if(e)switch(e?.toLowerCase()){case`ar`:Vs.registerWaitForInteraction(()=>{pd.start(`ar`)});break}}var dd=Symbol(`initial-fov`),fd=Symbol(`initial-near`),pd=class e{static _sync=null;static getXRSync(e){return this._sync||=new Zu(e),this._sync}static get currentSessionRequest(){return this._currentSessionRequestMode}static _currentSessionRequestMode=null;static get active(){return this._activeSession}static get activeMode(){return this._activeSession?.mode??null}static get xrSystem(){return`xr`in navigator?navigator.xr:void 0}static isXRSupported(){return Promise.all([this.isVRSupported(),this.isARSupported()]).then(e=>e.some(e=>e)).catch(()=>!1)}static isVRSupported(){return this.isSessionSupported(`immersive-vr`)}static isARSupported(){return this.isSessionSupported(`immersive-ar`)}static isSessionSupported(e){return this.xrSystem?.isSessionSupported(e).catch(e=>(V&&console.error(e),!1))??Promise.resolve(!1)}static _currentSessionRequest;static _activeSession;static onSessionRequestStart(e){this._sessionRequestStartListeners.push(e)}static offSessionRequestStart(e){let t=this._sessionRequestStartListeners.indexOf(e);t>=0&&this._sessionRequestStartListeners.splice(t,1)}static _sessionRequestStartListeners=[];static onSessionRequestEnd(e){this._sessionRequestEndListeners.push(e)}static offSessionRequestEnd(e){let t=this._sessionRequestEndListeners.indexOf(e);t>=0&&this._sessionRequestEndListeners.splice(t,1)}static _sessionRequestEndListeners=[];static onXRSessionStart(e){this._xrStartListeners.push(e)}static offXRSessionStart(e){let t=this._xrStartListeners.indexOf(e);t>=0&&this._xrStartListeners.splice(t,1)}static _xrStartListeners=[];static onXRSessionEnd(e){this._xrEndListeners.push(e)}static offXRSessionEnd(e){let t=this._xrEndListeners.indexOf(e);t>=0&&this._xrEndListeners.splice(t,1)}static _xrEndListeners=[];static onControllerAdded(e){this._controllerAddedListeners.push(e)}static offControllerAdded(e){let t=this._controllerAddedListeners.indexOf(e);t>=0&&this._controllerAddedListeners.splice(t,1)}static _controllerAddedListeners=[];static onControllerRemoved(e){this._controllerRemovedListeners.push(e)}static offControllerRemoved(e){let t=this._controllerRemovedListeners.indexOf(e);t>=0&&this._controllerRemovedListeners.splice(t,1)}static _controllerRemovedListeners=[];static offerSession(t,n,r){return`xr`in navigator&&navigator.xr&&`offerSession`in navigator.xr?(typeof navigator.xr.offerSession==`function`&&(console.log(`WebXR offerSession is available - requesting mode: `+t),n==`default`&&(n=this.getDefaultSessionInit(t)),navigator.xr.offerSession(t,{...n}).then(i=>e.setSession(t,i,n,r)).catch(e=>{console.log(`XRSession offer rejected (perhaps because another call to offerSession was made or a call to requestSession was made)`)})),!0):!1}static getDefaultSessionInit(e){switch(e){case`immersive-ar`:let t=[`anchors`,`local-floor`,`layers`,`dom-overlay`,`hit-test`,`unbounded`];return j.isVisionOS()||t.push(`hand-tracking`),{optionalFeatures:t};case`immersive-vr`:let n=[`local-floor`,`bounded-floor`,`high-fixed-foveation-level`,`layers`];return j.isVisionOS()||n.push(`hand-tracking`),{optionalFeatures:n};default:return console.warn(`No default session init for mode`,e),{}}}static async start(t,n,r){if(n||={},j.isiOS()){let e=await this.isARSupported().catch(()=>!1);if(j.isVisionOS()&&!e&&(t===`ar`||t===`immersive-ar`)&&(t=`quicklook`),t===`quicklook`)return $a.sendEvent(B.Current,`xr`,{action:`quicklook_export`,source:`NeedleXRSession.start`}),ed.exportAndOpen(),null;if(!e&&(t===`immersive-ar`||t===`ar`)){this.invokeSessionRequestStart(`immersive-ar`,n);let e=new URL(`https://appclip.apple.com/id?p=tools.needle.launch-app.Clip`);e.searchParams.set(`url`,location.href);let r=e.toString();$a.sendEvent(B.Current,`xr`,{action:`app_clip_launch`,source:`NeedleXRSession.start`,url:r});let i=window.top||window;try{console.debug(`iOS device detected - opening Needle App Clip for AR experience`,{mode:t,init:n,url:e}),i.location.href=r}catch(e){console.warn(`Error navigating to AppClip `+r+` -`,e),window===window.top?window.location.href=r:window.open(r,`_blank`)}return setTimeout(()=>{this.invokeSessionRequestEnd(`immersive-ar`,n||{},null)},3e3),null}}if(t===`quicklook`)return console.warn(`QuickLook mode is only supported on iOS devices`),null;if(t==`ar`&&(t=`immersive-ar`),M()&&A(`debugxrpreroom`))return console.warn(`Debug: Starting temporary XR session`),await $u.start(t,n||e.getDefaultSessionInit(t)),null;if(this._currentSessionRequest)return console.warn(`A XRSession is already being requested`),(V||M())&&Ei(`A XRSession is already being requested`),this._currentSessionRequest.then(()=>this._activeSession);if(this._activeSession)return console.error(`A XRSession is already running`),this._activeSession;if(r||=B.Current,r||=k.All[0],!r)throw Error(`No Needle Engine Context found`);switch(t){case`immersive-ar`:{if(await this.xrSystem?.isSessionSupported(`immersive-ar`)!==!0)return console.error(t+` is not supported by this browser.`),null;let e=this.getDefaultSessionInit(t),i=rd(r.domElement);i&&!j.isQuest()&&(e.domOverlay={root:i},e.optionalFeatures.push(`dom-overlay`)),n={...e,...n}}break;case`immersive-vr`:if(await this.xrSystem?.isSessionSupported(`immersive-vr`)!==!0)return console.error(t+` is not supported by this browser.`),null;n={...this.getDefaultSessionInit(t),...n};break;default:console.warn(`No default session init for mode`,t);break}n.optionalFeatures??=[],n.requiredFeatures??=[],await $u.stop();let i=t==`immersive-ar`?r.scripts_immersive_ar:r.scripts_immersive_vr;V?console.log(`%cRequesting ${t} session`,`font-weight:bold;`,n,i):console.log(`%cRequesting ${t} session`,`font-weight:bold;`);for(let e of i)e.onBeforeXR&&e.activeAndEnabled&&!e.destroyed&&e.onBeforeXR(t,n);this.invokeSessionRequestStart(t,n),V&&Ti(`Requesting `+t+` session (`+Date.now()+`)`),$a.sendEvent(B.Current,`xr`,{action:`session_request`,mode:t,features:(n.requiredFeatures??[]).concat(n.optionalFeatures??[]).join(`,`),source:`NeedleXRSession.start`}),this._currentSessionRequest=navigator?.xr?.requestSession(t,n),this._currentSessionRequestMode=t;let a=await this._currentSessionRequest?.catch(e=>{console.error(e,`Code: `+e?.code),e?.code===9&&Ei(`Couldn't start XR session. Make sure you allow the required permissions.`),console.log(`If the specified XR configuration is not supported (e.g. entering AR doesnt work) - make sure you access the website on a secure connection (HTTPS) and your device has the required permissions (e.g. camera access)`),location.protocol===`http:`&&Ei(`XR requires a secure connection (HTTPS)`)});return this._currentSessionRequest=void 0,this._currentSessionRequestMode=null,this.invokeSessionRequestEnd(t,n,a),a?this.setSession(t,a,n,r):(console.warn(`XR Session request was rejected`),null)}static invokeSessionRequestStart(e,t){for(let n of this._sessionRequestStartListeners)n({mode:e,init:t})}static invokeSessionRequestEnd(e,t,n){for(let r of this._sessionRequestEndListeners)r({mode:e,init:t,newSession:n||null})}static setSession(t,n,r,i){if(this._activeSession)return console.error(`A XRSession is already running`),this._activeSession;let a=t==`immersive-ar`?i.scripts_immersive_ar:i.scripts_immersive_vr;return this._activeSession=new e(t,n,i,{scripts:a,controller_added:this._controllerAddedListeners,controller_removed:this._controllerRemovedListeners,init:r}),n.addEventListener(`end`,this.onEnd),V?console.log(`%cStarted ${t} session`,`font-weight:bold;`,a):console.log(`%cStarted ${t} session`,`font-weight:bold;`),this._activeSession}static $_stop_request=Symbol();static stop(){let e=this._activeSession;e&&(e[this.$_stop_request]===void 0?(V&&console.log(`[NeedleXRSession] Stopping XR Session... (new)`),e[this.$_stop_request]=setTimeout(()=>{e.end()})):V&&console.warn(`[NeedleXRSession] XR Session stop already requested`))}static onEnd=()=>{V&&console.log(`XR Session ended`),this._activeSession=null};context;get sync(){return e._sync}get running(){return!this._ended&&this.session!=null}session;mode;get interactionMode(){return this.session.interactionMode}get visibilityState(){return this.session.visibilityState}get isVisibleBlurred(){return this.session.visibilityState===`visible-blurred`}get isSystemKeyboardSupported(){return this.session.isSystemKeyboardSupported}get environmentBlendMode(){return this.session.environmentBlendMode}get frame(){return this.context.xrFrame}controllers=[];get leftController(){return this.controllers.find(e=>e.side===`left`)}get rightController(){return this.controllers.find(e=>e.side===`right`)}getController(e){return typeof e==`number`?this.controllers[e]||null:this.controllers.find(t=>t.side===e)||null}get isPassThrough(){return!!(this.environmentBlendMode!==`opaque`&&this.interactionMode===`world-space`||this.mode===`immersive-ar`&&this.environmentBlendMode!==`opaque`&&this.controllers.some(e=>e.inputSource.targetRayMode===`tracked-pointer`)||M()&&j.isDesktop()&&this.mode===`immersive-ar`)}get isAR(){return this.mode===`immersive-ar`}get isVR(){return this.mode===`immersive-vr`}get isScreenBasedAR(){return this.isAR&&!this.isPassThrough}get posePosition(){return this._transformPosition}get poseOrientation(){return this._transformOrientation}get referenceSpace(){return this.context.renderer.xr.getReferenceSpace()}get viewerPose(){return this._viewerPose}get isTrackingImages(){if(this.frame&&`getImageTrackingResults`in this.frame&&typeof this.frame.getImageTrackingResults==`function`)try{let e=this.frame.getImageTrackingResults();for(let t of e)if(t.trackingState===`tracked`)return!0}catch{return!1}return!1}get rig(){let e=this._rigs[0]??null;return e?.gameObject&&Nf(e.gameObject)||e?.isActive===!1?(this.updateActiveXRRig(),this._rigs[0]??null):e}_rigScale=1;_lastRigScaleUpdate=-1;get rigScale(){return this._rigs[0]?(this._lastRigScaleUpdate!==this.context.time.frame&&(this._lastRigScaleUpdate=this.context.time.frame,this._rigScale=this._rigs[0].gameObject.worldScale.x),this._rigScale):1}addRig(e){this._rigs.indexOf(e)>=0||(e.priority===void 0&&(e.priority=0),this._rigs.push(e),this.updateActiveXRRig())}removeRig(e){let t=this._rigs.indexOf(e);t!==-1&&(this._rigs.splice(t,1),this.updateActiveXRRig())}setRigActive(e){let t=this._rigs.indexOf(e),n=this._rigs[0];this._rigs.splice(t,1),this._rigs.unshift(e),e.priority=n?.priority??0,this.updateActiveXRRig()}getUserOffsetInRig(){let e=this.context.mainCamera?.position;if(!e||!this.rig)return P(0,0,0);let t=P(e);return t.x*=-1,t.z*=-1,t.applyQuaternion(Tr(this.rig.gameObject.quaternion)),t}updateActiveXRRig(){let e=this._rigs[0]??null;this._defaultRig.gameObject.parent!==this.context.scene&&this.context.scene.add(this._defaultRig.gameObject),this._defaultRig.gameObject.visible=!0,this._rigs.includes(this._defaultRig)||this._rigs.push(this._defaultRig);let t=this._rigs[0];t&&t.priority===void 0&&(t.priority=0);for(let e=1;et.priority)&&(t=n)}}if(e!==t){let e=this._rigs.indexOf(t);e>=0&&this._rigs.splice(e,1),this._rigs.unshift(t)}V&&(e===t?console.log(`Updated Active XR Rig:`,t,`prev:`,e):console.log(`Updated Active XRRig:`,t,` (the same as before)`))}_rigs=[];_viewerHitTestSource=null;getHitTest(e){if(e)return this.getControllerHitTest(e);if(!this._viewerHitTestSource)return null;let t=this._viewerHitTestSource,n=this.frame.getHitTestResults(t);if(n.length>0){let e=n[0];return this.convertHitTestResult(e)}return null}getControllerHitTest(e){let t=e.getHitTestSource();if(!t)return null;let n=this.frame.getHitTestResultsForTransientInput(t);for(let t of n)if(t.inputSource===e.inputSource)for(let e of t.results)return this.convertHitTestResult(e);return null}convertHitTestResult(e){let t=this.context.renderer.xr.getReferenceSpace(),n=t&&e.getPose(t);if(n){let t=P(n.transform.position),r=Tr(n.transform.orientation),i=this.context.mainCamera;if(i?.parent!==this._cameraRenderParent&&t.applyMatrix4(Iu),i?.parent){t.applyMatrix4(i.parent.matrixWorld),r.multiply(Lu);let e=Pr(i.parent);e.premultiply(Lu),r.premultiply(e)}return{hit:e,position:t,quaternion:r}}return null}convertSpace(e){let t=P(e.position);t.applyMatrix4(Iu);let n=Tr(e.orientation);return n.premultiply(Lu),{position:t,quaternion:n}}_defaultRig;_xr_scripts;_xr_update_scripts=[];_inactive_scripts=[];_controllerAdded;_controllerRemoved;_originalCameraWorldPosition;_originalCameraWorldRotation;_originalCameraWorldScale;_originalCameraParent;_mainCamera=null;constructor(e,t,n,r){ad(e,r.init),this.session=t,this.mode=e,this.context=n,(V||A(`console`))&&_i(!0),this._xr_scripts=[...r.scripts],this._xr_update_scripts=this._xr_scripts.filter(e=>typeof e.onUpdateXR==`function`),this._controllerAdded=r.controller_added,this._controllerRemoved=r.controller_removed,ka(this.onBefore,z.LateUpdate),this.context.pre_render_callbacks.push(this.onBeforeRender),this.context.post_render_callbacks.push(this.onAfterRender),(r.init.optionalFeatures?.includes(`hit-test`)||r.init.requiredFeatures?.includes(`hit-test`))&&t.requestReferenceSpace(`viewer`).then(e=>t.requestHitTestSource?.call(t,{space:e})?.then(e=>this._viewerHitTestSource=e).catch(e=>console.error(e))).catch(e=>console.error(e)),this.context.mainCamera&&(this._originalCameraWorldPosition=Or(this.context.mainCamera,new o),this._originalCameraWorldRotation=Pr(this.context.mainCamera,new E),this._originalCameraWorldScale=zr(this.context.mainCamera,new o),this._originalCameraParent=this.context.mainCamera.parent,this.context.mainCamera instanceof C&&(this.context.mainCamera[dd]=this.context.mainCamera.fov)),this._defaultRig=new zu,this.context.scene.add(this._defaultRig.gameObject),this.addRig(this._defaultRig);for(let e=0;e{for(let t of e.removed)this.disconnectInputSource(t);for(let t of e.added)this.onInputSourceAdded(t)}),this.context.xr=this,this.context.renderer.xr.setSession(this.session).then(this.onRendererSessionSet),`controllerAutoUpdate`in this.context.renderer.xr?(console.debug(`Disabling three.js controllerAutoUpdate`),this.context.renderer.xr.controllerAutoUpdate=!1):V&&console.warn(`controllerAutoUpdate is not available in three.js - cannot disable it`),j.isNeedleAppClip()&&window.requestAnimationFrame(()=>{let e=this.context.renderer.domElement,t=window.devicePixelRatio||1,n=e.width,r=e.height,i=Math.floor(window.innerWidth*t),a=Math.floor(window.innerHeight*t);(Math.abs(n-i)>2||Math.abs(r-a)>2)&&(e.width=i,e.height=a,console.debug(`Applied DPR scaling for Needle AppClip XR session`,t,e.width,e.height))})}onRendererSessionSet=()=>{this.running&&(this.context.renderer.xr.enabled=!0,this.context.renderer.xr.updateCamera(this.context.mainCamera),this.context.mainCameraComponent?.applyClearFlags())};onInputSourceAdded=e=>{if(e.targetRayMode===`screen`)return;let t=0;for(let n=0;nt.inputSource===e)){console.debug(`Controller already exists for input source`,t);return}else if(this._newControllers.find(t=>t.inputSource===e)){console.debug(`Controller already registered for input source`,t);return}let n=new Ku(this,e,t);this._newControllers.push(n)};disconnectInputSource(e){let t=(t,n)=>{if(t.inputSource===e){V&&console.log(`Disconnecting controller`,t.index);let e=n.indexOf(t);e>=0&&n.splice(e,1),this.invokeControllerEvent(t,this._controllerRemoved,`removed`);let r={xr:this,controller:t,change:`removed`};for(let e of this._xr_scripts)e.onXRControllerRemoved&&e.onXRControllerRemoved(r);t.onDisconnected()}},n=[...this.controllers];for(let e=n.length-1;e>=0;e--){let r=n[e];t(r,this.controllers)}let r=[...this._newControllers];for(let e=r.length-1;e>=0;e--){let n=r[e];t(n,this._newControllers)}}end(){this._ended||this.session.end().catch(e=>console.warn(e))}_ended=!1;_newControllers=[];onEnd=t=>{if(this._ended)return;this._ended=!0,console.debug(`XR Session ended`),$a.sendEvent(B.Current,`xr`,{action:`session_end`,mode:this.mode,source:`NeedleXRSession.onEnd`}),od(),this.onAfterRender(),this.revertCustomForward(),this._didStart=!1,this._previousCameraParent=null,this.requestedCameraNearPlane=null,Aa(this.onBefore,z.LateUpdate);let n=this.context.pre_render_callbacks.indexOf(this.onBeforeRender);n>=0&&this.context.pre_render_callbacks.splice(n,1);let r=this.context.post_render_callbacks.indexOf(this.onAfterRender);r>=0&&this.context.post_render_callbacks.splice(r,1),this.context.xr=null,this.context.renderer.xr.enabled=!1,this.context.pre_update_oneshot_callbacks.push(()=>{this.context.mainCameraComponent?.applyClearFlags(),this.context.mainCameraComponent?.applyClippingPlane()}),Ul({session:this});for(let t of e._xrEndListeners)t({xr:this});let i=[...this.controllers];for(let e=0;e{let n=t.xrFrame;if(!n)return;this.context.xr=this,this.context.mainCameraComponent&&this.context.mainCameraComponent!==this._mainCamera&&(this._mainCamera=this.context.mainCameraComponent),this.rig?.isActive==0&&(V&&console.warn(`Latest rig is not active - trying to activate a different rig`,this.rig),this.updateActiveXRRig()),this.rig&&this._mainCamera?.gameObject&&this._mainCamera?.gameObject?.parent!==this.rig.gameObject&&this.rig.gameObject.add(this._mainCamera?.gameObject),this.internalUpdateState(),this.applyCustomForward();let r={xr:this};if(!this._didStart){if(this._didStart=!0,this.mode===`immersive-vr`){let e=fi(this.context.scene.children);if(e){let t=e.getSize(P());if(t.length()>0){let n=this._defaultRig.gameObject;n.position.set(e.min.x+t.x*.5,e.min.y,e.max.z+t.z*.5+1.5);let r=e.getCenter(P());r.y=n.position.y,n.lookAt(r)}}}Hl({session:this}),Bs();for(let t of e._xrStartListeners)t(r);let t=[...this._xr_scripts];V&&console.log(`NeedleXRSession start, handle scripts:`,t);for(let e of t){if(e.destroyed){this._script_to_remove.push(e);continue}if(!e.activeAndEnabled){this.markInactive(e);continue}this.invokeCallback_EnterXR(e);for(let t of this.controllers)this.invokeCallback_ControllerAdded(e,t)}}else if(this.context.new_scripts_xr.length>0){let e=[...this.context.new_scripts_xr];for(let t=0;t0){let e=[...this._newControllers];this._newControllers.length=0;for(let t of e){if(!t.connected){console.warn(`New controller is not connected`,t);continue}this.controllers.push(t);for(let e of this._xr_scripts){if(e.destroyed){this._script_to_remove.push(e);continue}e.activeAndEnabled!==!1&&this.invokeCallback_ControllerAdded(e,t)}}this.controllers.sort((e,t)=>e.index-t.index)}V&&this.context.time.frame%30==0&&this.controllers.length<=0&&this.session.inputSources.length>0&&(_i(!0),console.error(`XRControllers are not added but inputSources are present`));for(let e of this._xr_update_scripts){if(e.destroyed===!0){this._script_to_remove.push(e);continue}if(e.activeAndEnabled===!1){this.markInactive(e);continue}e.onUpdateXR&&e.onUpdateXR(r)}if(this.handleInactiveScripts(),this._script_to_remove.length>0){let e=[...new Set(this._script_to_remove)];this._script_to_remove.length=0;for(let t of e)!t.destroyed&&this.running&&t.onLeaveXR?.(r),this.removeScript(t)}this.sync?.onUpdate(this),this.onRenderDebug()};onRenderDebug(){if(V)for(let e of this.controllers)e.onRenderDebug();if((V||td)&&this.rig&&(nd++,nd>=20)){let e=this.rig.gameObject.worldPosition,t=this.rig.gameObject.worldForward;e.add(t.multiplyScalar(1.5));let n=this.rig.gameObject.worldUp;e.add(n.multiplyScalar(2.5));let r=``;if(r+=`${this.context.time.smoothedFps.toFixed(0)} FPS`,r+=`, calls: ${this.context.renderer.info.render.calls}, tris: ${this.context.renderer.info.render.triangles.toLocaleString()}`,V||td)for(let e of this.controllers)r+=`\n${e.hand?`hand`:`ctrl`} ${e.inputSource.handedness}[${e.index}] con:${e.connected} tr:${e.isTracking} hts:${e.hasHitTestSource?`yes`:`no`}`;nd=0,H.DrawLabel(e,r,void 0,1/60*20)}}onBeforeRender=()=>{this.context.mainCamera&&(this.updateFade(this.context.mainCamera),this.requestedCameraNearPlane!==null&&this.context.mainCamera instanceof C&&(this.context.mainCamera.near=this.requestedCameraNearPlane,this.requestedCameraNearPlane=null))};onAfterRender=()=>{if(this.onUpdateFade_PostRender(),j.isDesktop()||!this._renderOnceOnDevice){let e=this.context.renderer;if(e.xr.isPresenting&&this.context.mainCamera){this._renderOnceOnDevice=!0;let t=e.xr.enabled,n=e.getRenderTarget(),r=this.context.scene.background;e.xr.enabled=!1,e.setRenderTarget(null),this.isPassThrough&&(this.context.scene.background=null),this.context.composer?this.context.composer.render(this.context.time.deltaTime):e.render(this.context.scene,this.context.mainCamera),e.xr.enabled=t,e.setRenderTarget(n),this.context.scene.background=r}}};addScript(e){return this._xr_scripts.includes(e)?!1:(V&&console.log(`Register new XRScript`,e),this._xr_scripts.push(e),typeof e.onUpdateXR==`function`&&this._xr_update_scripts.push(e),!0)}markInactive(e){if(!(this._inactive_scripts.indexOf(e)>=0)){this.removeScript(e,!1),this._inactive_scripts.push(e);for(let t of this.controllers)this.invokeCallback_ControllerRemoved(e,t);this.invokeCallback_LeaveXR(e)}}handleInactiveScripts(){if(this._inactive_scripts.length>0)for(let e=this._inactive_scripts.length-1;e>=0;e--){let t=this._inactive_scripts[e];if(t.activeAndEnabled){this._inactive_scripts.splice(e,1),this.addScript(t),this.invokeCallback_EnterXR(t);for(let e of this.controllers)this.invokeCallback_ControllerAdded(t,e)}}}_script_to_remove=[];removeScript(e,t=!0){V&&console.log(`Remove XRScript`,e);let n=this._xr_scripts.indexOf(e);n>=0&&this._xr_scripts.splice(n,1);let r=this._xr_update_scripts.indexOf(e);if(r>=0&&this._xr_update_scripts.splice(r,1),t){let t=this._inactive_scripts.indexOf(e);t>=0&&this._inactive_scripts.splice(t,1)}}invokeCallback_EnterXR(e){e.onEnterXR&&e.onEnterXR({xr:this})}invokeCallback_ControllerAdded(e,t){e.onXRControllerAdded&&e.onXRControllerAdded({xr:this,controller:t,change:`added`})}invokeCallback_ControllerRemoved(e,t){e.onXRControllerRemoved&&e.onXRControllerRemoved({xr:this,controller:t,change:`removed`})}invokeCallback_LeaveXR(e){e.onLeaveXR&&!e.destroyed&&e.onLeaveXR({xr:this})}syncCameraCullingMask(){let e=this.context.xrCamera,t=this.context.mainCameraComponent?.cullingMask;if(e&&t!==void 0){for(let n of e.cameras)n.layers.mask=t;e.layers.mask=t}else if(e){for(let t of e.cameras)t.layers.enableAll();e.layers.enableAll()}}invokeControllerEvent(e,t,n){for(let r=t.length-1;r>=0;r--){let i=t[r];if(i)try{i({xr:this,controller:e,change:n})}catch(e){console.error(e)}}}_camera;_cameraRenderParent=new S().rotateY(Math.PI);_previousCameraParent;_customforward=!0;originalCameraNearPlane;requestedCameraNearPlane=null;applyCustomForward(){if(this.context.mainCamera&&this._customforward){this._camera=this.context.mainCamera,this._camera.parent!==this._cameraRenderParent&&(this._previousCameraParent=this._camera.parent,this._previousCameraParent?.add(this._cameraRenderParent)),this._cameraRenderParent.name=`XR Camera Render Parent`,this._cameraRenderParent.add(this._camera);{let e=.02;if(this.rig){let t=zr(this.rig.gameObject);e*=t.x}this._camera instanceof C&&Math.abs(this._camera.near-e)>.001&&(this.isAR?this.originalCameraNearPlane=this._camera.near:this._camera.near=e,V&&console.debug(`Setting camera near plane to ${e} (was ${this.originalCameraNearPlane}) to account for XR rendering scale`))}}}revertCustomForward(){this._camera&&this._previousCameraParent&&this._previousCameraParent.add(this._camera),this._previousCameraParent=null,this._camera instanceof C&&this.originalCameraNearPlane!=null&&(this._camera.near=this.originalCameraNearPlane,this.originalCameraNearPlane=void 0)}_viewerPose;_transformOrientation=new E;_transformPosition=new o;internalUpdateState(){let e=this.context.renderer.xr.getReferenceSpace();if(!e){this._viewerPose=void 0;return}if(this._viewerPose=this.frame.getViewerPose(e),this._viewerPose){let e=this._viewerPose.transform;this._transformPosition.set(e.position.x,e.position.y,e.position.z),this._transformOrientation.set(e.orientation.x,e.orientation.y,e.orientation.z,e.orientation.w)}}_transition;get transition(){return this._transition||=new Qu,this._transition}fadeTransition(){return this._transition||=new Qu,this._transition.fadeTransition()}updateFade(e){this._transition&&e instanceof C&&this._transition.update(e,this.context.time.deltaTime)}onUpdateFade_PostRender(){this._transition?.remove()}},md=class e extends a{alpha=1;get isRGBAColor(){return!0}set a(e){this.alpha=e}get a(){return this.alpha}constructor(e,t,n,r){super(),typeof e==`number`&&typeof t==`number`&&typeof n==`number`?(this.set(e,t,n),this.alpha=typeof r==`number`?r:1):e!==void 0&&(this.set(e),this.alpha=1)}clone(){let e=super.clone();return e.alpha=this.alpha,e}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,`alpha`in e&&typeof e.alpha==`number`?this.alpha=e.alpha:typeof e.a==`number`&&(this.alpha=e.a),this}lerp(e,t){let n=e;return n.alpha!=null&&(this.alpha=N.lerp(this.alpha,n.alpha,t)),super.lerp(e,t)}lerpColors(e,t,n){let r=e,i=t;return r.alpha!=null&&i.alpha!=null&&(this.alpha=N.lerp(r.alpha,i.alpha,n)),super.lerpColors(e,t,n)}multiply(e){let t=e;return t.alpha!=null&&(this.alpha*=t.alpha),super.multiply(e)}fromArray(e,t=0){return this.alpha=e[t+3],super.fromArray(e,t)}static fromColorRepresentation(t){if(typeof t==`string`){if(t.trim()===`transparent`)return new e(0,0,0,0);if(t.startsWith(`#`)&&t.length===9){let n=parseInt(t.slice(1,9),16),r=n>>24&255,i=n>>16&255,a=n>>8&255,o=n>>0&255;return new e(r/255,i/255,a/255,o/255)}else if(t.startsWith(`#`)){let n=parseInt(t.slice(1),16),r=n>>16&255,i=n>>8&255,a=n>>0&255;return new e(r/255,i/255,a/255,1)}else if(t.startsWith(`rgba`)){let n=t.slice(5,-1).split(`,`).map(Number);return new e(n[0]/255,n[1]/255,n[2]/255,n[3])}else if(t.startsWith(`rgb`)){let n=t.slice(4,-1).split(`,`).map(Number);return new e(n[0]/255,n[1]/255,n[2]/255,1)}}else if(Array.isArray(t)){if(t.length===4)return new e(t[0],t[1],t[2],t[3]);if(t.length===3)return new e(t[0],t[1],t[2],1);console.error(`Invalid color array length. Expected 3 or 4, got `+t.length)}return new e(t)}},hd=new o,gd=new o,_d=new E,vd=A(`debuggizmos`),yd=8947848,bd=32,H=class e{constructor(){}static enabled=!0;static isGizmo(e){return e[wd]!==void 0}static setVisible(e){for(let t of Td.timedObjectsBuffer)t.visible=e}static DrawLabel(t,n,r=.05,i=0,a,o,s){if(!e.enabled)return null;a||=yd;let c=pd.active?.rigScale??1,l=Td.getTextLabel(i,n,r*c,a,o);return s instanceof S&&s.add(l),l.position.x=t.x,l.position.y=t.y,l.position.z=t.z,l}static DrawRay(t,n,r=yd,i=0,a=!0){if(!e.enabled)return;let o=Td.getLine(i),s=o.geometry.getAttribute(`position`);s.setXYZ(0,t.x,t.y,t.z),hd.set(n.x,n.y,n.z).multiplyScalar(999999999),s.setXYZ(1,t.x+hd.x,t.y+hd.y,t.z+hd.z),s.needsUpdate=!0,o.material.depthTest=a,o.material.depthWrite=!1,o.material.fog=!1,Cd(o.material,r)}static DrawDirection(t,n,r=yd,i=0,a=!0,o=1){if(!e.enabled)return;let s=Td.getLine(i),c=s.geometry.getAttribute(`position`);c.setXYZ(0,t.x,t.y,t.z),n.w===void 0?(hd.set(n.x,n.y,n.z),hd.multiplyScalar(o)):(hd.set(0,0,-o),_d.set(n.x,n.y,n.z,n.w),hd.applyQuaternion(_d)),c.setXYZ(1,t.x+hd.x,t.y+hd.y,t.z+hd.z),c.needsUpdate=!0,s.material.depthTest=a,s.material.depthWrite=!1,Cd(s.material,r)}static DrawLine(t,n,r=yd,i=0,a=!0){if(!e.enabled)return;let o=Td.getLine(i),s=o.geometry.getAttribute(`position`);s.setXYZ(0,t.x,t.y,t.z),s.setXYZ(1,n.x,n.y,n.z),s.needsUpdate=!0,o.material.depthTest=a,o.material.depthWrite=!1,o.material.fog=!1,Cd(o.material,r)}static DrawCircle(t,n,r,i=yd,a=0,o=!0){if(!e.enabled)return;let s=Td.getCircle(a);s.position.set(t.x,t.y,t.z),s.scale.set(r,r,r),s.quaternion.setFromUnitVectors(this._up,hd.set(n.x,n.y,n.z).normalize()),s.material.depthTest=o,s.material.depthWrite=!1,s.material.fog=!1,Cd(s.material,i)}static DrawWireSphere(t,n,r=yd,i=0,a=!0){if(!e.enabled)return;let o=Td.getSphere(n,i,!0);Ar(o,t.x,t.y,t.z),o.material.depthTest=a,o.material.depthWrite=!1,o.material.fog=!1,Cd(o.material,r)}static DrawSphere(t,n,r=yd,i=0,a=!0){if(!e.enabled)return;let o=Td.getSphere(n,i,!1);Ar(o,t.x,t.y,t.z),o.material.depthTest=a,o.material.depthWrite=!1,Cd(o.material,r)}static DrawWireBox(t,n,r=yd,i=0,a=!0,o=void 0){if(!e.enabled)return;let s=Td.getBox(i);s.position.set(t.x,t.y,t.z),s.scale.set(n.x,n.y,n.z),o?s.quaternion.copy(o):s.quaternion.identity(),s.material.depthTest=a,s.material.wireframe=!0,s.material.depthWrite=!1,s.material.fog=!1,Cd(s.material,r)}static DrawWireBox3(t,n=yd,r=0,i=!0){if(!e.enabled)return;let a=Td.getBox(r);a.position.copy(t.getCenter(hd)),a.scale.copy(t.getSize(hd)),a.material.depthTest=i,a.material.wireframe=!0,a.material.depthWrite=!1,a.material.fog=!1,Cd(a.material,n)}static _up=new o(0,1,0);static DrawArrow(t,n,r=yd,i=0,a=!0,o=!1){if(!e.enabled)return;let s=Td.getArrowHead(i);s.position.set(n.x,n.y,n.z),s.quaternion.setFromUnitVectors(this._up.set(0,1,0),hd.set(n.x,n.y,n.z).sub(gd.set(t.x,t.y,t.z)).normalize());let c=hd.set(n.x,n.y,n.z).sub(gd.set(t.x,t.y,t.z)).length()*.1;s.scale.set(c,c,c),s.material.depthTest=a,s.material.wireframe=o,Cd(s.material,r),this.DrawLine(t,n,r,i,a)}static DrawWireMesh(e){let t=Td.getMesh(e.duration??0);`mesh`in e?(t.geometry=e.mesh.geometry,t.matrixWorld.copy(e.mesh.matrixWorld)):(t.geometry=e.geometry,t.matrixWorld.copy(e.matrix)),t.matrixAutoUpdate=!1,t.matrixWorldAutoUpdate=!1,t.material.depthTest=e.depthTest??!0,t.material.wireframe=!0,Cd(t.material,e.color??yd)}},xd=new Xe(1,1,1);function Sd(e=null){let t=new a(e??14540253);return new f(new ye(xd),new ee({color:t}))}function Cd(e,t){if(Array.isArray(e)){for(let n of e)Cd(n,t);return}let n=t instanceof md?t.a:1;e.color.set(t),e.opacity=n,e.transparent=n<1}var wd=Symbol(`GizmoCache`),Td=class{static familyName=`needle-gizmos`;static ensureFont(){let e=D.FontLibrary.getFontFamily(this.familyName);e||(e=D.FontLibrary.addFontFamily(this.familyName),e.addVariant(`normal`,`normal`,`https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json`,`https://cdn.needle.tools/static/fonts/msdf/arial/arial.png`)?.addEventListener(`ready`,()=>{D.update()}))}static getTextLabel(e,t,n,r,i){this.ensureFont();let a=this.textLabelCache.pop(),o=1;i&&typeof i==`string`&&i?.length>=8&&i.startsWith(`#`)?(o=parseInt(i.substring(7),16)/255,i=i.substring(0,7),vd&&console.log(i,o)):typeof i==`object`&&i.a!==void 0&&(o=i.a);let s={boxSizing:`border-box`,fontFamily:this.familyName,width:`auto`,fontSize:n,color:r,lineHeight:1,backgroundColor:i??void 0,backgroundOpacity:o,textContent:t,borderRadius:.5*n,padding:.8*n,whiteSpace:`pre`,offset:.05*n};if(a)a.set(s);else{a=new Qe(s);let e=this,t=a;t.setText=function(t){this.set({textContent:t}),e.tmuiNeedsUpdate=!0}}return this.tmuiNeedsUpdate=!0,this.registerTimedObject(B.Current,a,e,this.textLabelCache),a}static getBox(e){let t=this.boxesCache.pop();return t||=new x(new Xe(1,1,1)),this.registerTimedObject(B.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new Ee;let e=t.geometry.getAttribute(`position`);e||(e=new Je(new Float32Array(6),3),t.geometry.setAttribute(`position`,e))}return t.frustumCulled=!1,this.registerTimedObject(B.Current,t,e,this.linesCache),t}static getCircle(e){let t=this.circlesCache.pop();if(!t){t=new Ee;let e=t.geometry.getAttribute(`position`);if(!e){e=new Je(new Float32Array(bd*3),3),t.geometry.setAttribute(`position`,e);let n=P(0,1,0),r=P(0,0,1),i=P(r);i.cross(n).normalize();let a=P(i),o=Math.PI*2/(bd-1);for(let t=0;t{this.onBeforeRender(e,this.timedObjectsBuffer)};this.contextBeforeRenderCallbacks.set(e,t),e.pre_render_callbacks.push(t)}else if(e.pre_render_callbacks[e.pre_render_callbacks.length-1]!==i){let t=e.pre_render_callbacks.indexOf(i);t>=0&&e.pre_render_callbacks.splice(t,1),e.pre_render_callbacks.push(i)}if(!a){let t=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,t),e.post_render_callbacks.push(t)}else if(e.post_render_callbacks[e.post_render_callbacks.length-1]!==a){let t=e.post_render_callbacks.indexOf(a);t>=0&&e.post_render_callbacks.splice(t,1),e.post_render_callbacks.push(a)}t.traverse(e=>{e.layers.disableAll(),e.layers.enable(2)}),t.renderOrder=999999,t[wd]=r,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(B.Current.time.realtimeSinceStartup+n),e.scene.add(t)}static timedObjectsBuffer=[];static timesBuffer=[];static contextPostRenderCallbacks=new Map;static contextBeforeRenderCallbacks=new Map;static tmuiNeedsUpdate=!1;static onBeforeRender(e,t){this.tmuiNeedsUpdate&&(this.tmuiNeedsUpdate=!1,D.update());for(let n=0;n=0;e--){let i=t[e];r>=n[e]-1e-6&&(t.splice(e,1),n.splice(e,1),i.removeFromParent(),Nf(i)!=1&&i[wd].push(i))}}},Ed=A(`debugphysics`),Dd=A(`debugworker`),Od=new s,kd=class{static AllLayers=4294967295;ray;cam;screenPoint;raycaster;results;targets;recursive=!0;minDistance;maxDistance;lineThreshold;layerMask;ignore;testObject;useAcceleratedRaycast;allowSlowRaycastFallback=!0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new w),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setLayer(e){Od.set(e),this.layerMask=Od}setMask(e){this.layerMask||=new s;let t=this.layerMask;t?t.mask=e:this.layerMask=e}},Ad=class{distance;point;object;constructor(e,t,n){this.object=e,this.distance=t,this.point=n}},jd=class e{static _raycasting=0;static get raycasting(){return this._raycasting>0}raycastPhysicsFast(e,t=void 0,n=1/0,r=!0){return this.context.physics.engine?.raycast(e,t,{maxDistance:n,solid:r})??null}raycastPhysicsFastAndGetNormal(e,t=void 0,n=1/0,r=!0){return this.context.physics.engine?.raycastAndGetNormal(e,t,{maxDistance:n,solid:r})??null}sphereOverlapPhysics(e,t){return this.context.physics.engine?.sphereOverlap(e,t)??null}context;engine;constructor(e){this.context=e}raycaster=new _;defaultRaycastOptions=new kd;targetBuffer=[,];defaultThresholds={Mesh:{},Line:{threshold:-1},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=[];sphereMask=new s;sphere=new Oe;sphereOverlap(e,t,n=!0,r=!1,i=null){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;let a=this.sphereMask;a.enableAll(),a.disable(2);for(let o of this.context.scene.children)this.intersectSphere(o,e,t,a,this.sphereResults,n,r,i);return this.sphereResults.sort((e,t)=>e.distance-t.distance)}raycastFromRay(e,t=null){let n=t??this.defaultRaycastOptions;n.ray=e;let r=this.raycast(n);return n===this.defaultRaycastOptions&&(n.ray=void 0),r}raycast(t=null){Ed&&performance.mark(`raycast.start`),t||=this.defaultRaycastOptions;let n=t.screenPoint??this.context.input.mousePositionRC,r=t.raycaster??this.raycaster;if(r.near=t.minDistance??0,r.far=t.maxDistance??1/0,r.params=this.defaultThresholds,t.lineThreshold===void 0&&(t.lineThreshold=-1),r.params.Line={threshold:t.lineThreshold},t.ray)r.ray.copy(t.ray);else{let e=t.cam??this.context.mainCamera;if(!e)return Ed&&console.error(`Can not perform raycast - no main camera found`),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];let i=this.context.xrCamera;this.context.isInXR&&i instanceof Me&&i.cameras.length>0?r.setFromCamera(n,i.cameras[0]):r.setFromCamera(n,e)}let i=t.targets;i||(i=this.targetBuffer,i.length=1,i[0]=this.context.scene);let a=t.results;this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),a||=(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=[]),this.defaultRaycastOptions.results),t.layerMask===void 0?(r.layers.enableAll(),r.layers.disable(2)):t.layerMask instanceof s?r.layers.mask=t.layerMask.mask:r.layers.mask=t.layerMask,Ed&&console.time(`raycast`),a.length=0,e._raycasting++,this.intersect(this.raycaster,i,a,t),a.sort((e,t)=>e.distance-t.distance);let o=t.ignore;return o!==void 0&&o.length>0&&(a=a.filter(e=>!o.includes(e.object))),e._raycasting--,Ed&&(console.timeEnd(`raycast`),console.warn(`#`+this.context.time.frame+`, hits:`,a?.length?[...a]:`nothing`),performance.mark(`raycast.end`),performance.measure(`raycast`,`raycast.start`,`raycast.end`)),a}intersect(e,t,n,r){for(let i of t){if(!i||i.visible===!1||H.isGizmo(i)||r.lineThreshold!==void 0&&r.lineThreshold<0&&i instanceof Ee)continue;let t=!0,a=i,o=a.geometry;if(i.raycastAllowed===!1&&(t=!1),t&&r.testObject){let e=r.testObject?.(i);if(e===!1)continue;e===`continue in children`&&(t=!1)}else t&&(o&&Md(o)||(t=!1));if(t){let t=n.length,s=i.raycastPreference||`lod`,c=s!==`bounds`;if(r.precise===!1&&(c=!1),o&&(c||=o.getAttribute(`position`)?.array?.length<64),a instanceof ct&&(c=!1),s===`lod`){let e=bt(i);e&&(a.geometry=e)}if(!c&&Id(a,e,n)||(r.useAcceleratedRaycast===!1?e.intersectObject(a,!1,n):Ld.runMeshBVHRaycast(e,a,n,this.context,r)),a.geometry=o,Ed&&n.length!=t){let e=n[n.length-1];H.DrawWireSphere(e.point,.1,7798784,1,!1),H.DrawWireMesh({mesh:i,depthTest:!1,duration:.2,color:7798784})}}r.recursive!==!1&&this.intersect(e,i.children,n,r)}return n}tempBoundingBox=new fe;intersectSphere(e,t,n,r,i,a,o,s){let c=e&&e.isMesh&&e.layers.test(r)&&!H.isGizmo(e);c&&=e.visible,c&&=!(e instanceof Ee),c&&=!(e instanceof ct);let l=e,u=l.geometry;if(c&&s){let t=s(e);if(t===!1)return;t===`continue in children`&&(c=!1)}if(u&&Md(u)||(c=!1),c){if(o){let e=this.sphere;e.center.copy(t),e.radius=n;let r=i.length;if(Ld.runMeshBVHRaycast(this.sphere,l,i,this.context,{}),r!=i.length&&!a)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){l.matrixWorldNeedsUpdate&&l.updateWorldMatrix(!1,!1);let r=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(l.matrixWorld),o=this.sphere;if(o.center.copy(t),o.radius=n,o.intersectsBox(r)){let t=Or(e),n=new Ad(e,t.distanceTo(o.center),t);if(i.push(n),!a)return}}}if(e.children)for(let c of e.children){let e=i.length;if(this.intersectSphere(c,t,n,r,i,a,o,s),e!=i.length&&!a)return}}};function Md(e){return!(e.index&&e.index.array.length<3)}var Nd=new Oe,Pd=new pe,Fd=new le;function Id(e,t,n){let r=e._computeIntersections;if(!r)return!1;let i=e[`_computeIntersections:Needle`];return i||=e[`_computeIntersections:Needle`]=function(e,t,n){let r=this,i=r.geometry.boundingSphere;if(i){if(r instanceof ct){Pd.setFromNormalAndCoplanarPoint(P(0,1,0),P(0,-r.position.y,0)),Pd.applyMatrix4(r.matrixWorld,Fd);let n=e.ray.intersectPlane(Pd,P());if(n){Nd.copy(i),Nd.applyMatrix4(r.matrixWorld);let a=P(n).sub(e.ray.origin).length();aNd.radius){let e=i.clone().normalize();t.push({distance:a,point:n,object:r,normal:e})}}}},e._computeIntersections=i,t.intersectObject(e,!1,n),e._computeIntersections=r,!0}var Ld;(function(e){let t=0;function n(e,n,r,i,y){if(!n.geometry||!n.geometry.hasAttribute(`position`))return!1;let b=n.geometry;if(n?.isSkinnedMesh){let e=n,t=e.bvhNeedsUpdate;if(!e.staticGenerator)l(),s&&(e.staticGenerator=new s(n),e.staticGenerator.applyWorldTransforms=!1,e.staticGeometry=e.staticGenerator.generate(),b.boundsTree=c?.call(e.staticGeometry),e.staticGeometryLastUpdate=performance.now()+Math.random()*200,e.bvhNeedsUpdate=!0);else if(b.boundsTree&&(e.autoUpdateMeshBvhInterval!==void 0&&e.autoUpdateMeshBvhInterval>=0||t===!0)){let r=performance.now(),i=r-e.staticGeometryLastUpdate,a=e.autoUpdateMeshBvhInterval??100;(t||i>a)&&(Ed&&console.warn(`Physics: updating skinned mesh bvh for ${n.name} after ${i.toFixed(2)}ms`),e.bvhNeedsUpdate=!1,e.staticGeometryLastUpdate=r,e.staticGenerator?.generate(e.staticGeometry),b.boundsTree.refit())}}else if(!b.boundsTree){d||ee();let e=!0;if((i.xr||b[h]===!1||b.getAttribute(`position`)?.isInterleavedBufferAttribute||b.index&&b.index?.isInterleavedBufferAttribute||t>10)&&(e=!1),e&&p){if(b[m]===void 0){let e=null;if(v.length>0){let t=v.shift();t&&!t.running&&(e=t)}if(!e&&g.length<3)try{Dd&&console.warn(`[GenerateMeshBVHWorker] Creating worker with import.meta.url:`,import.meta.url),e=new p,g.push(e)}catch(e){e instanceof DOMException&&e.name===`SecurityError`?(console.warn(`Failed to create MeshBVH worker, falling back to main thread generation. This can happen when running from file://, if the browser does not support workers or if the browser is blocking workers for other reasons.`),console.debug(e),t+=10):(console.error(`Failed to create MeshBVH worker. Please see below for more details:`),console.log(e)),t++}if(e!=null&&!e.running){let t=n.name;Ed&&console.log(`<<<< worker start`,t,e),b[m]=`queued`,performance.mark(`bvh.create.start`);let r=b.clone();try{e.generate(r).then(e=>{b[m]=`done`,b.boundsTree=e}).catch(e=>{b[m]=`failed - `+e?.message,b[h]=!1,Ed&&console.error(`Failed to generate mesh bvh on worker`,e)}).finally(()=>{Ed&&console.log(`>>>>> worker done`,t,{hasBoundsTre:b.boundsTree!=null}),v.push(e),r.dispose(),performance.mark(`bvh.create.end`),performance.measure(`bvh.create (worker)`,`bvh.create.start`,`bvh.create.end`)})}catch(e){console.error(`Failed to generate mesh bvh on worker`,e)}}else Ed&&console.warn(`No worker available`)}}else (!f||!e)&&(l(),o&&(performance.mark(`bvh.create.start`),b.boundsTree=new o(b),performance.mark(`bvh.create.end`),performance.measure(`bvh.create`,`bvh.create.start`,`bvh.create.end`)))}if(e instanceof _){let t=e,i=n.raycast;if(b.boundsTree)l(),a&&(n.acceleratedRaycast||(n.acceleratedRaycast=a.bind(n),Ed&&console.debug(`Physics: bind acceleratedRaycast fn to \"${n.name}\"`)),n.raycast=n.acceleratedRaycast);else if(Ed&&console.warn(`No bounds tree found for mesh`,n.name,{workerTask:b[m],hasAcceleratedRaycast:a!=null}),y.allowSlowRaycastFallback===!1&&(b.getAttribute(`position`)?.array?.length??0)>2e3)return Ed&&console.warn(`Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false`),!1;let o=t.firstHitOnly;return t.firstHitOnly=!1,t.intersectObject(n,!1,r),t.firstHitOnly=o,n.raycast=i,!0}else if(e instanceof Oe){let t=b.boundsTree;if(t){let i=e;if(u.copy(n.matrixWorld).invert(),i.applyMatrix4(u),t.intersectsSphere(i)){let e=Or(n),t=new Ad(n,e.distanceTo(i.center),e);r.push(t)}}return!0}return!1}e.runMeshBVHRaycast=n;let i=!1,a=null,o=null,s=null,c=null;function l(){i||(i=!0,r(()=>import(`./needle-engine.dep.B3nA4wQ5.js`).then(e=>{a=e.acceleratedRaycast,o=e.MeshBVH,s=e.StaticGeometryGenerator,c=e.computeBoundsTree}),__vite__mapDeps([12,13,3,2]),import.meta.url).catch(e=>{(Ed||M())&&console.error(`Failed to load BVH library...`,e.message)}))}let u=new ce,d=!1,f=!1,p=null,m=Symbol(`Needle:MeshBVH-Worker`),h=Symbol(`Needle:MeshBVH-CanUseWorker`),g=[],v=[];function ee(){d=!0,f=!0,r(()=>import(`./GenerateMeshBVHWorker.DMD7ZOpN.js`).then(e=>{p=e.GenerateMeshBVHWorker}),__vite__mapDeps([14,15,2,16,1,3,17,18,19,20,21,22,6,13]),import.meta.url).catch(e=>{Ed||M()?console.warn(`Failed to setup mesh bvh worker`):console.debug(`Failed to setup mesh bvh worker`,e)}).finally(()=>{f=!1})}})(Ld||={});var Rd=Symbol(`gltf-loader-internal-usage-tracker`),zd=A(`debugusers`),Bd=class e{get name(){return`NEEDLE_internal_usage_tracker`}static isLoading(t){return e._loadingProcesses>0}static _loadingProcesses=0;parser;_getDependency;_loadingId;_loadedObjects=new Set;constructor(e){this.parser=e,this._getDependency=this.parser.getDependency,this._loadingId=Date.now().toString()}beforeRoot(){e._loadingProcesses++;let t=this,n=this._getDependency;return this.parser.getDependency=function(e,r){let i=n.call(this,e,r);return i.then(e=>(e&&(t._loadedObjects.add(e),e[Rd]=t._loadingId),e)),i},null}afterRoot(t){e._loadingProcesses--,this.parser.getDependency=this._getDependency;for(let e of this._loadedObjects)delete e[Rd],e instanceof S&&(e.parent||e instanceof x&&setTimeout(()=>{zd&&console.warn(`> GLTF LOADER: Mesh not used in scene!`,e),e.material=null,e.geometry=null},1e3));return null}},Vd=class{constructor(){window.addEventListener(`unhandledrejection`,e=>{if(e.defaultPrevented)return;let t=e?.reason?.path;if(t){let n=t[0];n&&n.tagName===`IMG`&&(console.warn(`Could not load image: -`+n.src),e.preventDefault())}})}},Hd=A(`trackresources`);function Ud(){return Hd===`dispose`}var Wd=!0;Hd===0&&(Wd=!1);function Gd(e){Wd=e}function Kd(){return Wd}var qd=Symbol(`disposable`);function Jd(e,t){e&&(e[qd]=t,nf&&console.warn(`Set disposable`,t,e))}var Yd=Symbol(`disposed`);function Xd(e){return e[Yd]===!0}function U(e){if(e){if(e[qd]===!1){nf&&console.warn(`Object is marked as not disposable`,e);return}if(typeof e==`object`&&(e[Yd]=!0),e instanceof ne)U(e.environment),U(e.background),U(e.customDepthMaterial),U(e.customDistanceMaterial);else if(e instanceof ze)U(e.geometry),U(e.material),U(e.skeleton),U(e.bindMatrix),U(e.bindMatrixInverse),U(e.customDepthMaterial),U(e.customDistanceMaterial),e.visible=!1;else if(e instanceof x)U(e.geometry),U(e.material),U(e.customDepthMaterial),U(e.customDistanceMaterial),e.visible=!1;else if(e instanceof S)e.visible=!1;else if(e instanceof ie){Zd(e);for(let t of Object.keys(e.attributes)){let n=e.attributes[t];U(n)}}else if(e instanceof Je||e instanceof ae)nf&&console.warn(`BufferAttribute dispose not supported`,e.count);else if(e instanceof Array)for(let t of e)t instanceof T&&U(t);else if(e instanceof T){Zd(e);for(let t of Object.keys(e)){let n=e[t];n instanceof be&&U(n)}let t=e.uniforms;if(t)for(let e of Object.keys(t)){let n=t[e];n instanceof be?U(n):n instanceof Ye&&U(n.value)}}else e instanceof be?(Zd(e),Zd(e.source),e.source?.data instanceof ImageBitmap&&Zd(e.source.data)):e instanceof Pe?(Zd(e.boneTexture),e.boneTexture=null):e instanceof xe||!(e instanceof S)&&nf&&console.warn(`Unknown object type`,e)}}function Zd(e){e&&((nf||Ud()||Hd)&&console.warn(`🧨 FREE`,e),e instanceof ImageBitmap||`dispose`in e&&typeof e.dispose==`function`&&e.dispose())}function Qd(e){e instanceof x||e instanceof ze}var $d=new Set;function ef(e,t,n=null,r){if(r||(r=$d,r.clear()),!e)return r;let i=e[rf];if(i)for(let e of i)r.has(e)||n?.call(null,e)!==!1&&(r.add(e),t&&ef(e,!0,n,r));return r}function tf(e){return e[af]}var nf=A(`debugresourceusers`)||A(`debugmemory`),rf=Symbol(`needle-resource-users`),af=Symbol(`needle-resource-users-count`);function of(e,t){Zi(e,t,function(e,t){Wd&&!jd.raycasting&&(lf(rf,this,e,!1),lf(rf,this,t,!0))})}Wd&&(of(x.prototype,`material`),of(x.prototype,`geometry`),of(T.prototype,`map`),of(T.prototype,`bumpMap`),of(T.prototype,`alphaMap`),of(T.prototype,`normalMap`),of(T.prototype,`displacementMap`),of(T.prototype,`roughnessMap`),of(T.prototype,`metalnessMap`),of(T.prototype,`emissiveMap`),of(T.prototype,`specularMap`),of(T.prototype,`envMap`),of(T.prototype,`lightMap`),of(T.prototype,`aoMap`),of(T.prototype,`gradientMap`));function sf(e){if(Wd===!1)return;let t=e[rf];if(t)for(let n of t)lf(rf,n,e,!1)}Wd&&Zi(T.prototype,`dispose`,function(){sf(this)});var cf=0;function lf(e,t,n,r){if(cf>0)return;if(Array.isArray(n)){for(let i of n)lf(e,t,i,r);return}if(!n)return;let i=n[e];if(i||=new Set,r){if(t&&!i.has(t)){i.add(t);let e=n[af]||0;e+=1,n[af]=e,nf&&console.warn(`🟢 Added user of "${n.type}"`,t,n,e,`users:`,i)}}else if(t&&i.has(t)){i.delete(t);let e=n[af]||0;e>0&&(--e,n[af]=e),nf&&console.warn(`🔴 Removed user of "${n.type}"`,t,n,e,`users:`,i),e<=0&&(Bd.isLoading(n)||(Hd&&console.warn(`🔴 Removed all user of "${n.type}"`,n),Ud()&&U(n)))}n[e]=i}try{Zi(h.prototype,`render`,function(){cf++},function(){cf--})}catch(e){console.warn(`Could not wrap WebGLRenderer.render`,e)}var uf=Symbol(`NEEDLE_NEED_UPDATE_INSTANCE`),df=Symbol(`isUsingInstancing`),ff=Symbol(`instancingRenderer`),pf=Symbol(`instancingAutoUpdateBounds`),mf=class e{static isUsingInstancing(e){return e[df]===!0}static getRenderer(e){return e[ff]||null}setAutoUpdateBounds(t,n){let r=e.getRenderer(t);r&&(r[pf]=n)}static markDirty(t,n=!0){if(t&&(this.isUsingInstancing(t)&&(t[uf]=!0,t.matrixWorldNeedsUpdate=!0),n))for(let n of t.children)e.markDirty(n,!0)}},hf=new Map;function gf(e,t){if(!e)return;if(!t){console.warn(`No prototype found`,e,e.prototype,e.constructor);return}let n=hf.get(t);n&&n.apply(e)}function _f(e){let t=vf(e.prototype);hf.set(e,t)}function vf(e){return new yf(e)}var yf=class{$symbol;extensions;descriptors;constructor(e){this.$symbol=Symbol(`prototype-extension`),this.extensions=Object.keys(e),this.descriptors=[];for(let t=0;t.5),e.visible=t,e.visible}function Of(e){return e.needle_isActiveInHierarchy||Af(e)}function kf(e,t){e[df]=t}function Af(e){return mf.isUsingInstancing(e)}function jf(e,t){return Wt(e,t,!0,!0)}var Mf=Symbol(`isDestroyed`);function Nf(e){return e[Mf]}function Pf(e,t){e[Mf]=t}var Ff=Symbol(`isDontDestroy`);function If(e,t=!0){e[Ff]=t}var Lf=[],Rf=[];function zf(e,t=!0,n=!1){Lf.length=0,Rf.length=0,Bf(e,t,!0);for(let e of Lf)e.gameObject=null,e.context=null;for(let e of Rf)Pf(e,!0),n&&(U(e),Qd(e));Rf.length=0,Lf.length=0}function Bf(e,t=!0,n=!0){if(e==null)return;let r=e;if(r.isComponent){if(r[Ff])return;Lf.push(r);let e=r.gameObject;r.__internalDisable(),r.__internalDestroy(),r.gameObject=e;return}if(e[Ff])return;let i=e;Cf&&console.log(i),Rf.push(i);let a=i.userData?.components;if(a!=null&&Array.isArray(a)){let e=a.length;for(let n=0;nr)){for(let n of e.userData.components)t&&n?.isComponent===!0&&n instanceof t,yield n;if(n===!0)for(let n of e.children)yield*Hf(n,t,!0,r,i+1)}}function Uf(e,t,n,r=0){if(e){if(e.isObject3D||``+e,r>1e3){console.warn(`Failed to iterate components: too many levels`);return}if(e.userData?.components)for(let n=0;n0&&(l.animations=[...t.animations]);let u=t.parent;if(u&&u.add(l),n?.position)if(Array.isArray(n.position)){let e=new o;e.fromArray(n.position),l.worldPosition=e}else l.worldPosition=n.position;else l.position.copy(t.position);if(n?.rotation){if(n.rotation instanceof E)l.worldQuaternion=n.rotation;else if(n.rotation instanceof He)l.worldQuaternion=Tr().setFromEuler(n.rotation);else if(Array.isArray(n.rotation)){let e=new He;e.fromArray(n.rotation),l.worldQuaternion=Tr().setFromEuler(e)}}else l.quaternion.copy(t.quaternion);if(n?.scale)if(Array.isArray(n.scale)){let e=new o;e.fromArray(n.scale),n.scale=e}else l.scale.copy(n.scale);else l.scale.copy(t.scale);if(n?.parent&&n.parent!==`scene`){let r=null;if(r=typeof n.parent==`string`?Wt(n.parent,e.scene,!0):n.parent,r){let e=n.keepWorldPosition===!0?r.attach:r.add;e?e.call(r,l):console.error(`Invalid parent object`,r,`received when instantiating:`,t)}else console.warn(`could not find parent:`,n.parent)}for(let[e,n]of Object.entries(t.userData))e!==`components`&&(l.userData[e]=n);if(t.userData?.components){let e=t.userData.components,n=[];l.userData.components=n;for(let t=0;t`,s),i.push(s))}}else if(typeof n==`object`){let i=Yf(r,e,n,t);i===void 0?wf&&console.warn(`Could not find new instance for`,e,n):r[e]=i}}}}function Yf(e,t,n,r){if(n!=null){if(n.isComponent===!0){let i=n.gameObject;if(i){let a=i.uuid,o=r[a]?.clone;if(!o){wf&&console.log(`reference did not change`,t,e,n);return}let s=i.userData.components.indexOf(n);if(s>=0&&o.isObject3D)return wf&&console.log(t,a),o.userData.components[s];console.warn(`could not find component`,t,n)}}else if(n.isObject3D===!0){if(t===`gameObject`)return;let e=n;if(e){let i=r[e.uuid]?.clone;if(i)return wf&&console.log(t,`old`,n,`new`,i),i}}else if(n.isVector4||n.isVector3||n.isVector2||n.isQuaternion||n.isEuler)return n.clone();else if(n.isColor===!0)return n.clone();else if(n.isEventList===!0)return n.__internalOnInstantiate(r)}}function Xf(e,t){try{t?e(t):e()}catch(e){return console.error(e),!1}return!0}var Zf=A(`debugnewscripts`),Qf=A(`debughierarchy`),W=[];function $f(){return W.length>0}function ep(e){if(Zf&&console.log(`Register new components`,e.new_scripts.length,[...e.new_scripts],e.alias?`element: `+e.alias:e.hash,e),e.new_scripts_pre_setup_callbacks.length>0){for(let t of e.new_scripts_pre_setup_callbacks)t&&t();e.new_scripts_pre_setup_callbacks.length=0}if(!(e.new_scripts.length<=0)){W.length=0,e.new_scripts.length>0&&W.push(...e.new_scripts),e.new_scripts.length=0;for(let t=0;t=0&&t.splice(n,1)}function op(e,t){if(e){let n=e;if(n.onBeforeXR||n.onEnterXR||n.onUpdateXR||n.onLeaveXR||n.onXRControllerAdded||n.onXRControllerRemoved)return!(t!=null&&n.supportsXR?.(t)===!1)}return!1}var sp=!0;function cp(){sp=!0}function lp(e,t=!1){if(Ji.experimentalSmartHierarchyUpdate){if(!t&&!sp)return;sp=!1}if(e||=k.Current.scene,!e){console.trace(`Invalid call - no current context.`);return}let n=Ef(e);up(e,n,!0)||(Zf||M()?console.error(`Error updating hierarchy -Do you have circular references in your project? Click here for more information.`,e):console.error(`Failed to update active state in hierarchy of "`+e.name+`"`,e),console.warn(` ↑ this error might be caused by circular references. Please make sure you don't have files with circular references (e.g. one GLB 1 is loading GLB 2 which is then loading GLB 1 again).`))}function up(e,t,n,r=0){if(r>1e3)return console.warn(`Hierarchy is too deep (> 1000 level) - will abort updating active state`),!1;let i=Ef(e);if(t&&(t=i,t&&e.parent&&r===0)){let n=e.parent;t=n[Wi],t===void 0&&(n instanceof ne||(t=!0))}let a=e[Wi]!==t;if(a&&(e[Wi]=t,Qf&&console.warn(`ACTIVE CHANGE`,{name:e.name,activeSelf:i,visible:e.visible,activeInHierarchy:t,changed:a,go:e}),n)){let n=e.userData?.components;if(n)for(let e=n.length-1,r=-1;e>-1;e--){let r=n[e];if(t){if(r?.enabled){try{r.__internalAwake()}catch(e){console.error(e)}r.enabled&&r.__internalEnable()}}else r&&r.__didAwake&&r.enabled&&(r.__didEnable=!1,r.onDisable())}}let o=e.children;if(o){if(!a&&!t){let e=!0;for(let t=0,i=o.length;tbp||globalThis.NEEDLE_DEBUG_GETCOMPONENT===!0;function Sp(e){return e==null||e.isObject3D?e:e.object&&e.object.isObject3D?e.object:e}function Cp(e,t){if(!e||!e.userData.components)return t;let n=e.userData.components.indexOf(t);return n<0?t:(Ri.dispatchComponentLifecycleEvent(`removing-component`,t),t.gameObject=null,e.userData.components.splice(n,1),t)}function wp(e,t,n){return Mp(e,t)||Op(e,t,n)}var Tp;function Ep(){return Tp??=new jo(`addComponentIdProvider`)}function Dp(e,t,n=!0){e.userData||={},e.userData.components||(e.userData.components=[]),e.userData.components.push(t),t.gameObject=e,(t.guid===void 0||t.guid===`invalid`)&&(t.guid=Ep().generateUUID()),bf(e),Eu(t,t.context);try{n&&t.__internalAwake&&(dp(e),t.activeAndEnabled&&t.__internalAwake()),Ri.dispatchComponentLifecycleEvent(`component-added`,t)}catch(e){console.error(e)}return t}function Op(e,t,n,r){if(typeof t==`function`){let i=new t;n&&i.__internalNewInstanceCreated(n);let a=!0;return r?.callAwake!=null&&(a=r.callAwake),Dp(e,i,a)}if(t.destroyed)return console.warn(`Can not move/add a destroyed component`,t),t;if(t.gameObject===e)return t;if(t.gameObject&&t.gameObject.userData?.components){let e=t.gameObject.userData.components.indexOf(t);t.gameObject.userData.components.splice(e,1)}if(e.userData||={},!e.userData.components)e.userData.components=[];else if(e.userData.components.includes(t))return t;return e.userData.components.push(t),t.gameObject=e,(t.guid===void 0||t.guid===`invalid`)&&(t.guid=Ep().generateUUID()),n&&t._internalInit(n),Eu(t,t.context),t}function kp(e){if(e.gameObject&&e.gameObject.userData.components){let t=e.gameObject.userData.components.indexOf(e);e.gameObject.userData.components.splice(t,1)}e.__internalDisable&&e.__internalDisable(),ip(e,e.context??B.Current),e.destroy(),e.gameObject=null}var Ap=!1;function jp(e,t,n){if(e==null)return null;if(!e.isObject3D)return console.error(`Object is not object3D`),null;if(!e?.userData?.components||(typeof t==`string`&&(Ap||(Ap=!0,console.warn(`Accessing components by name is not supported. -Please use the component type instead. This may keep working in local development but it will fail when bundling your application. - -You can import other modules your main module to get access to types -or if you use npmdefs you can make types available globally using globalThis: -https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis`,t))),xp()&&console.log(`[onGetComponent] FIND`,t),t==null))return null;for(let r=0;r{if(t.length){let e=t[0];if(typeof e==`string`&&e.includes(`[hmr] Failed to reload `)){console.log(`[Needle Engine] Hot reloading failed`),window.location.reload();return}}e.apply(console,t)}}function Yp(e){Bp&&console.log(`[HMR] Apply changes`,e,Object.keys(e)),Jp();for(let t of Object.keys(e))try{Vp=!0;let n=ji.get(t);if(!n){Bp&&console.log(`[HMR] Type not found: `+t);continue}let r=e[t],i=Hp.get(r.name),a=`[Needle Engine] Updating type: `+t,o=i?.length??-1;o>0?a+=` x`+o:a+=` (No instances registered)`,console.log(a);let s=Object.getOwnPropertyNames(n.prototype),c=Object.getOwnPropertyDescriptors(r.prototype);for(let r in c)c[r].writable&&(n.prototype[r]=e[t].prototype[r]);for(let e of s)c[e]||delete n.prototype[e];if(i){let e=new r,t=Object.getOwnPropertyDescriptors(e);for(let n of i){let i=n,a=i.isComponent===!0,o=a?i.activeAndEnabled:!0,s=a?i.context:void 0;try{if(a&&s&&ip(i,s),a&&o&&(i.enabled=!1),n.onBeforeHotReloadFields&&n.onBeforeHotReloadFields()===!1)continue;for(let i in t)if(t[i].writable){if(n[i]===void 0)n[i]=e[i];else if(typeof n[i]==`function`&&!n[i].prototype){let e=n[i];if(e.name===`bound `)continue;let t=e.name.substring(6),a=r.prototype[t];a&&(n[i]=a.bind(n))}}n.onAfterHotReloadFields&&n.onAfterHotReloadFields()}finally{a&&s&&rp(i,s),a&&o&&(i.enabled=!0)}}}}catch(e){if(Bp)console.error(e);else return!1}finally{Vp=!1,zn(Tn.Log,`Script changes applied (HMR)`)}return!0}var Xp=e({Behaviour:()=>K,Component:()=>K,GameObject:()=>G}),G=class e extends S{guid;static isDestroyed(e){return Nf(e)}static setActive(e,t,n=!0){e&&(Df(e,t),lp(e),t&&n&&np(B.Current,e))}static isActiveSelf(e){return Ef(e)}static isActiveInHierarchy(e){return Of(e)}static markAsInstancedRendered(e,t){kf(e,t)}static isUsingInstancing(e){return Af(e)}static foreachComponent(e,t,n=!0){return Vf(e,t,n)}static instantiateSynced(e,t){return e?zo(e,t):null}static instantiate(e,t=null){return`isAssetReference`in e,Wf(e,t)}static destroySynced(e,t,n=!0){if(!e)return;let r=e;t??=B.Current,Po(r,t.connection,n)}static destroy(e,t=!0){return zf(e,t)}static add(t,n,r){if(!(!t||!n)){if(t===n){console.warn(`Can not add object to self`,t);return}r||=B.Current,n.add(t),Df(t,!0),lp(t),r?e.foreachComponent(t,e=>{rp(e,r),!e.__internalDidAwakeAndStart&&r.new_script_start.includes(e)===!1&&r.new_script_start.push(e)},!0):console.warn(`Missing context`)}}static remove(t){t&&(t.parent?.remove(t),Df(t,!1),lp(t),e.foreachComponent(t,e=>{tp(e)},!0))}static invokeOnChildren(e,t,...n){this.invoke(e,t,!0,n)}static invoke(e,t,n=!1,...r){e&&this.foreachComponent(e,e=>{let n=e[t];n&&typeof n==`function`&&n?.call(e,...r)},n)}static addNewComponent(e,t,n,r=!0){return Op(e,t,n,{callAwake:r})}static addComponent(e,t,n,r){return Op(e,t,n,r)}static moveComponent(e,t){return Op(e,t)}static removeComponent(e){return Cp(e.gameObject,e),e}static getOrAddComponent(e,t){return wp(e,t)}static getComponent(e,t){return e===null?null:Mp(e,t)}static getComponents(e,t,n=null){return e===null?n??[]:Np(e,t,n)}static findByGuid(e,t){return jf(e,t)}static findObjectOfType(e,t,n=!0){return Rp(e,t??B.Current,n)}static findObjectsOfType(e,t){let n=[];return zp(e,n,t),n}static getComponentInChildren(e,t,n=!1){return Pp(e,t,n)}static getComponentsInChildren(e,t,n=null){return Fp(e,t,n??void 0)}static getComponentInParent(e,t){return Ip(e,t)}static getComponentsInParent(e,t,n=null){return Lp(e,t,n)}static getAllComponents(e){let t=e.userData?.components;return t?[...t]:[]}static*iterateComponents(e){let t=e?.userData?.components;if(t&&Array.isArray(t))for(let e=0;e=.5),!this.__didAwake){this.__isEnabled=e;return}e?this.__internalEnable():this.__internalDisable()}get worldPosition(){return Or(this.gameObject)}set worldPosition(e){kr(this.gameObject,e)}setWorldPosition(e,t,n){Ar(this.gameObject,e,t,n)}get worldQuaternion(){return Pr(this.gameObject)}set worldQuaternion(e){Fr(this.gameObject,e)}setWorldQuaternion(e,t,n,r){Ir(this.gameObject,e,t,n,r)}get worldEuler(){return Xr(this.gameObject)}set worldEuler(e){Zr(this.gameObject,e)}get worldRotation(){return this.gameObject.worldRotation}set worldRotation(e){this.setWorldRotation(e.x,e.y,e.z,!0)}setWorldRotation(e,t,n,r=!0){ei(this.gameObject,e,t,n,r)}static _forward=new o;get forward(){return e._forward.set(0,0,-1).applyQuaternion(this.worldQuaternion)}static _right=new o;get right(){return e._right.set(1,0,0).applyQuaternion(this.worldQuaternion)}static _up=new o;get up(){return e._up.set(0,1,0).applyQuaternion(this.worldQuaternion)}_eventListeners=new Map;addEventListener(e,t){this._eventListeners[e]=this._eventListeners[e]||[],this._eventListeners[e].push(t)}removeEventListener(e,t){if(!this._eventListeners[e])return;let n=this._eventListeners[e].indexOf(t);n>=0&&this._eventListeners[e].splice(n,1)}dispatchEvent(e){if(!e||!this._eventListeners[e.type])return!1;let t=this._eventListeners[e.type];for(let n=0;n0}var em=class{_context;get context(){return this._context??B.Current}get isStateMachineBehaviour(){return!0}},tm=class{name;nameHash;normalizedTime;length;speed;action;hasTransitions;constructor(e,t,n,r){this.name=e.name,this.nameHash=e.hash,this.normalizedTime=t,this.length=n,this.speed=r,this.action=e.motion.action||null,this.hasTransitions=e.transitions?.length>0||!1}};function nm(e,t){return{name:`Empty`,isLooping:!1,guid:t?.generateUUID()??g.generateUUID(),index:-1,clip:new Se(e,0,[])}}var rm;(function(e){e[e.If=1]=`If`,e[e.IfNot=2]=`IfNot`,e[e.Greater=3]=`Greater`,e[e.Less=4]=`Less`,e[e.Equals=6]=`Equals`,e[e.NotEqual=7]=`NotEqual`})(rm||={});var im;(function(e){e[e.Float=1]=`Float`,e[e.Int=3]=`Int`,e[e.Bool=4]=`Bool`,e[e.Trigger=9]=`Trigger`})(im||={});var q=A(`debuganimatorcontroller`),am=A(`debugrootmotion`),om=class e{static createFromClips(t,n={looping:!1,autoTransition:!0,transitionDuration:0}){let r=[];for(let e=0;e=this.model.layers.length){console.warn(`invalid layer`);return}let i=this.model.layers[t].stateMachine;for(let t of i.states)if(t.name===e||t.hash===e){q&&console.log(`transition to `,t),this.transitionTo(t,r,n);return}console.warn(`Could not find `+e+` to play`)}reset(){this.setStartTransition()}setBool(e,t){let n=typeof e==`string`?`name`:`hash`;return this.model?.parameters?.filter(t=>t[n]===e).forEach(e=>e.value=t)}getBool(e){let t=typeof e==`string`?`name`:`hash`;return this.model?.parameters?.find(n=>n[t]===e)?.value??!1}setFloat(e,t){let n=typeof e==`string`?`name`:`hash`,r=this.model?.parameters?.filter(t=>t[n]===e);return r.forEach(e=>e.value=t),r?.length>0}getFloat(e){let t=typeof e==`string`?`name`:`hash`;return this.model?.parameters?.find(n=>n[t]===e)?.value??0}setInteger(e,t){let n=typeof e==`string`?`name`:`hash`;return this.model?.parameters?.filter(t=>t[n]===e).forEach(e=>e.value=t)}getInteger(e){let t=typeof e==`string`?`name`:`hash`;return this.model?.parameters?.find(n=>n[t]===e)?.value??0}setTrigger(e){q&&console.log(`SET TRIGGER`,e);let t=typeof e==`string`?`name`:`hash`;return this.model?.parameters?.filter(n=>n[t]===e).forEach(e=>e.value=!0)}resetTrigger(e){let t=typeof e==`string`?`name`:`hash`;return this.model?.parameters?.filter(n=>n[t]===e).forEach(e=>e.value=!1)}getTrigger(e){let t=typeof e==`string`?`name`:`hash`;return this.model?.parameters?.find(n=>n[t]===e)?.value??!1}isInTransition(){return this._activeStates.length>1}setSpeed(e){this._speed=e}_speed=1;FindState(e){return this.findState(e)}findState(e){if(!e)return null;if(Array.isArray(this.model.layers)){for(let t of this.model.layers)for(let n of t.stateMachine.states)if(n.name===e||n.hash==e)return n}return null}getCurrentStateInfo(){if(!this._activeState)return null;let e=this._activeState.motion.action;if(!e)return null;let t=this._activeState.motion.clip.duration,n=t<=0?0:Math.abs(e.time/t);return new tm(this._activeState,n,t,this._speed)}get currentAction(){return this._activeState&&this._activeState.motion.action||null}normalizedStartOffset=0;animator;model;get context(){return this.animator?.context}get mixer(){return this._mixer}dispose(){if(this._mixer.stopAllAction(),this.animator){this._mixer.uncacheRoot(this.animator.gameObject);for(let e of this._activeStates)e.motion.clip&&this.mixer.uncacheAction(e.motion.clip,this.animator.gameObject)}this.context?.animations.unregisterAnimationMixer(this._mixer)}bind(e){e?this.animator!==e&&(this._mixer&&(this._mixer.stopAllAction(),this.context?.animations.unregisterAnimationMixer(this._mixer)),this.animator=e,this._mixer=new he(this.animator.gameObject),this.context?.animations.registerAnimationMixer(this._mixer),this.createActions(this.animator)):console.error(`AnimatorController.bind: animator is null`)}clone(){if(typeof this.model==`string`)return console.warn(`AnimatorController has not been resolved, can not create model from string`,this.model),null;q&&console.warn(`AnimatorController clone()`,this.model);let t=Gt(this.model,(t,n,r)=>r==null?!0:!(r.type===`Object3D`||r.isObject3D===!0||ri(r)||r.tracks!==void 0||r instanceof e));return console.assert(t!==this.model),new e(t)}update(e){if(!this.animator)return;this.evaluateTransitions(),this.updateActiveStates(e);let t=this.animator.context.time.deltaTime;this.animator.applyRootMotion&&this.rootMotionHandler?.onBeforeUpdate(e),this._mixer.update(t),this.animator.applyRootMotion&&this.rootMotionHandler?.onAfterUpdate(e)}_mixer;_activeState;get activeState(){return this._activeState}constructor(e){this.model=e,q&&console.log(this)}_activeStates=[];updateActiveStates(e){for(let t=0;t1&&(q||M())&&console.warn(`Multiple layers are not supported yet `+this.animator?.name);for(let e of this.model.layers){let t=e.stateMachine;t.defaultState===void 0&&(q&&console.warn(`AnimatorController default state is undefined, will assign state 0 as default`,e),t.defaultState=0);let n=t.states[t.defaultState];this.transitionTo(n,0,this.normalizedStartOffset);break}}evaluateTransitions(){let e=!1;if(!this._activeState){if(this.setStartTransition(),!this._activeState)return;e=!0}let t=this._activeState,n=t.motion.action,r=0;for(let e of t.transitions){if(++r,!e.hasExitTime&&e.conditions.length<=0)continue;let i=!0;for(let t of e.conditions)if(!this.evaluateCondition(t)){i=!1;break}if(i)if(n){let r=t.motion.clip.duration,i=r<=0?1:Math.abs(n.time/r),a=e.exitTime;n.timeScale<0&&(a=1-a);let o=!1;if(e.hasExitTime?n.timeScale>0?o=i>=e.exitTime:n.timeScale<0&&(o=1-i>=e.exitTime):o=!0,o){for(let t of e.conditions){let e=this.model.parameters.find(e=>e.name===t.parameter);e?.type===im.Trigger&&e.value&&(e.value=!1)}if(n.clampWhenFinished=!0,q){let t=this.getState(e.destinationState,0);console.log(`Transition to ${e.destinationState} / ${t?.name}`,e,` -Timescale: `+n.timeScale,` -Normalized time: `+i.toFixed(3),` -Exit Time: `+a,e.hasExitTime)}this.transitionTo(e.destinationState,e.duration,e.offset);return}}else{this.transitionTo(e.destinationState,e.duration,e.offset);return}}n&&this.setTimescale(n,t);let i=!1;if(t.motion.isLooping&&n&&(n.time>=n.getClip().duration?(i=!0,n.reset(),n.time=0,n.play()):n.time<=0&&n.timeScale<0&&(i=!0,n.reset(),n.time=n.getClip().duration,n.play())),!i&&t&&!e&&n&&this.animator&&t.behaviours){let e=n?.getClip().duration,r=n.time/e,i=new tm(this._activeState,r,e,this._speed);for(let e of t.behaviours)e.instance&&e.instance.onStateUpdate?.call(e.instance,this.animator,i,0)}}setTimescale(e,t){let n=t.speed??1;t.speedParameter&&(n*=this.getFloat(t.speedParameter)),n!==void 0&&(e.timeScale=n*this._speed)}getState(e,t){return typeof e==`number`&&(e==-1&&(e=this.model.layers[t].stateMachine.defaultState,e===void 0&&(q&&console.warn(`AnimatorController default state is undefined: `,this.model,`Layer: `+t),e=0)),e=this.model.layers[t].stateMachine.states[e]),e}_heldActions=[];releaseHeldActions(e){for(let t of this._heldActions)t.fadeOut(e);this._heldActions.length=0}transitionTo(e,t,n){if(!this.animator||(e=this.getState(e,0),!e?.motion||!e.motion.clip||!(e.motion.clip instanceof Se)))return;let r=this._activeState===e;if(r){let t=e.motion;if(!t.action_loopback&&t.clip){let e=this.rootMotionHandler?this.animator.gameObject.matrix.clone():null;this._mixer.uncacheAction(t.clip,this.animator.gameObject),e&&e.decompose(this.animator.gameObject.position,this.animator.gameObject.quaternion,this.animator.gameObject.scale),t.action_loopback=this.createAction(t.clip)}}if(this._activeState?.behaviours&&this._activeState.motion.action){let e=this._activeState?.motion.clip.duration,t=this._activeState.motion.action.time/e,n=new tm(this._activeState,t,e,this._speed);for(let e of this._activeState.behaviours)e.instance?.onStateExit?.call(e.instance,this.animator,n,0)}let i=this._activeState?.motion.action;r&&(e.motion.action=e.motion.action_loopback,e.motion.action_loopback=i);let a=this._activeState;this._activeState=e;let o=e.motion?.action,s=e.motion.clip;if(s?.duration<=0&&s.tracks.length<=0?i&&this._heldActions.push(i):i&&(i.fadeOut(t),this.releaseHeldActions(t)),o){if(n=Math.max(0,Math.min(1,n)),e.cycleOffsetParameter){let t=this.getFloat(e.cycleOffsetParameter);typeof t==`number`?(t<0&&(t+=1),n+=t,n%=1):q&&console.warn(`AnimatorController cycle offset parameter is not a number`,e.cycleOffsetParameter)}else typeof e.cycleOffset==`number`&&(n+=e.cycleOffset,n%=1);o.isRunning()&&o.stop(),o.reset(),o.enabled=!0,this.setTimescale(o,e);let i=e.motion.clip.duration;if(o.time=r?0:n*i,o.timeScale<0&&(o.time=i-o.time),o.clampWhenFinished=!0,o.setLoop(oe,0),t>0?o.fadeIn(t):o.weight=1,o.play(),window.requestAnimationFrame(()=>Pi.testIfRootCanAnimate(o)),this.rootMotionHandler&&this.rootMotionHandler.onStart(o),this._activeStates.includes(e)||this._activeStates.push(e),this._activeState.behaviours){let t=new tm(e,n,i,this._speed);for(let e of this._activeState.behaviours)e.instance?.onStateEnter?.call(e.instance,this.animator,t,0)}}else q&&(e.__warned_no_motion||(e.__warned_no_motion=!0,console.warn(`No action`,e.motion,this)));q&&console.log(`TRANSITION FROM `+a?.name+` TO `+e.name,t,i,o,o?.getEffectiveTimeScale(),o?.getEffectiveWeight(),o?.isRunning(),o?.isScheduled(),o?.paused)}createAction(e){if(this._mixer.existingAction(e)&&this._mixer.uncacheAction(e,this.animator?.gameObject),this.animator?.applyRootMotion){this.rootMotionHandler||=new lm(this);let t=this.animator.gameObject;return this.rootMotionHandler.createClip(this._mixer,t,e)}else return this._mixer.clipAction(e)}evaluateCondition(e){let t=this.model.parameters.find(t=>t.name===e.parameter);if(!t)return!1;switch(e.mode){case rm.If:return t.value===!0;case rm.IfNot:return t.value===!1;case rm.Greater:return t.value>e.threshold;case rm.Less:return t.valuee.node.name===this.animator?.gameObject?.name);e?n.motion.clip=e.clip:(q||M())&&console.warn(`Could not find clip for animator "`+this.animator?.gameObject?.name+`"`,n.motion.clips.map(e=>e.node.name))}if(!n.motion.clip){q&&console.warn(`No clip assigned to state`,n);let e=new Se(void 0,void 0,[]);n.motion.clip=e}if(n.motion?.clip){let e=n.motion.clip;if(e instanceof Se){let t=this.createAction(e);n.motion.action=t}else (q||M())&&console.warn(`No valid animationclip assigned`,n)}if(n.behaviours&&Array.isArray(n.behaviours))for(let e of n.behaviours){if(!e?.typeName)continue;let t=ji.get(e.typeName);if(t){let r=new t;r.isStateMachineBehaviour&&(r._context=this.context??void 0,Es(r,e.properties),e.instance=r),q&&console.log(`Created animator controller behaviour`,n.name,e.typeName,e.properties,r)}else (q||M())&&console.warn(`Could not find AnimatorBehaviour type: `+e.typeName)}}}}*enumerateActions(){if(this.model.layers)for(let e of this.model.layers){let t=e.stateMachine;for(let e=0;e(n.createInterpolant=r,this.createdInterpolant=r(),this.originalEvaluate=this.createdInterpolant.evaluate.bind(this.createdInterpolant),this.customEvaluate=e=>{if(this.originalEvaluate)return t(e,this.originalEvaluate(e))},this.createdInterpolant.evaluate=this.customEvaluate,this.createdInterpolant)}dispose(){this.createdInterpolant&&this.originalEvaluate&&(this.createdInterpolant.evaluate=this.originalEvaluate),this.track=void 0,this.createdInterpolant=null,this.originalEvaluate=void 0,this.customEvaluate=void 0}},cm=class e{static lastObjPosition={};static lastObjRotation={};static firstKeyframeRotation={};static spaceRotation={};static effectiveSpaceRotation={};static clipOffsetRotation={};set action(e){this._action=e}get action(){return this._action}get cacheId(){return this.root.uuid}_action;root;clip;positionWrapper=null;rotationWrapper=null;context;positionChange=new o;rotationChange=new E;constructor(t,n,r,i,a){if(this.context=t,this.root=n,this.clip=r,e.firstKeyframeRotation[this.cacheId]||(e.firstKeyframeRotation[this.cacheId]=new E),a){let t=a.values;e.firstKeyframeRotation[this.cacheId].set(t[0],t[1],t[2],t[3])}e.spaceRotation[this.cacheId]||(e.spaceRotation[this.cacheId]=new E),e.effectiveSpaceRotation[this.cacheId]||(e.effectiveSpaceRotation[this.cacheId]=new E),e.clipOffsetRotation[this.cacheId]=new E,a&&e.clipOffsetRotation[this.cacheId].set(a.values[0],a.values[1],a.values[2],a.values[3]).invert(),this.handlePosition(r,i),this.handleRotation(r,a)}onStart(t){if(t.getClip()!==this.clip)return;e.lastObjRotation[this.cacheId]||(e.lastObjRotation[this.cacheId]=this.root.quaternion.clone());let n=e.lastObjRotation[this.cacheId];if(e.spaceRotation[this.cacheId].copy(n),am){let e=new He().setFromQuaternion(n);console.log(`START`,this.clip.name,N.toDegrees(e.y),this.root.position.z)}}getClipRotationOffset(){return e.clipOffsetRotation[this.cacheId]}_prevTime=0;handlePosition(t,n){if(n){let t=this.root;am&&t.add(new _e),e.lastObjPosition[this.cacheId]||(e.lastObjPosition[this.cacheId]=this.root.position.clone());let r=new o,i=new o;this.positionWrapper=new sm(n,(e,n)=>{let a=this.action.getEffectiveWeight();return am&&t.position.length()>8&&t.position.set(0,t.position.y,0),e>this._prevTime&&(r.set(n[0],n[1],n[2]),r.sub(i),r.multiplyScalar(a),r.applyQuaternion(this.getClipRotationOffset()),r.applyQuaternion(t.quaternion),this.positionChange.copy(r)),i.fromArray(n),this._prevTime=e,n[0]=0,n[1]=0,n[2]=0,n})}}static identityQuaternion=new E;handleRotation(e,t){if(t){if(am){let n=t.values,r=new He().setFromQuaternion(new E(n[0],n[1],n[2],n[3]));console.log(e.name,t.name,`FIRST ROTATION IN TRACK`,N.toDegrees(r.y));let i=t.values.length-4,a=new E().set(n[i],n[i+1],n[i+2],n[i+3]),o=new He().setFromQuaternion(a);console.log(e.name,t.name,`LAST ROTATION IN TRACK`,N.toDegrees(o.y))}let n=0,r=new E,i=new E;this.rotationWrapper=new sm(t,(e,t)=>(e>n&&(i.set(t[0],t[1],t[2],t[3]),r.invert(),i.multiply(r),this.rotationChange.copy(i)),r.fromArray(t),n=e,t[0]=0,t[1]=0,t[2]=0,t[3]=1,t))}}onBeforeUpdate(e){this.positionChange.set(0,0,0),this.rotationChange.set(0,0,0,1)}onAfterUpdate(t){return!this.action||(t*=this.action.getEffectiveWeight(),t<=0)?!1:(this.positionChange.multiplyScalar(t),this.rotationChange.slerp(e.identityQuaternion,1-t),!0)}},lm=class{controller;handler=[];root;basePosition=new o;baseQuaternion=new E;baseRotation=new He;constructor(e){this.controller=e}createClip(e,t,n){this.root=t,t&&`name`in t&&t.name;let r=this.findRootTrack(n,`.position`),i=this.findRootTrack(n,`.quaternion`),a=new cm(this.controller.context,t,n,r,i);this.handler.push(a);let o=e.clipAction(n);return a.action=o,o}onStart(e){for(let t of this.handler)t.onStart(e)}onBeforeUpdate(e){this.basePosition.copy(this.root.position),this.baseQuaternion.copy(this.root.quaternion);for(let t of this.handler)t.onBeforeUpdate(e)}summedPosition=new o;summedRotation=new E;onAfterUpdate(e){if(!(e<=0)){this.root.position.copy(this.basePosition),this.root.quaternion.copy(this.baseQuaternion),this.summedPosition.set(0,0,0),this.summedRotation.set(0,0,0,1);for(let t of this.handler)t.onAfterUpdate(e)&&(this.summedPosition.add(t.positionChange),this.summedRotation.multiply(t.rotationChange));this.root.position.add(this.summedPosition),this.root.quaternion.multiply(this.summedRotation)}}findRootTrack(e,t){let n=e.tracks;if(!n)return null;for(let e of n)if(e.name.endsWith(t))return e;return null}};new class extends ds{onSerialize(e,t){}onDeserialize(e,t){if(t.type===om&&e?.__type===`AnimatorController`)return new om(e)}}(om);var um=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},dm=A(`debuganimator`),fm=class extends K{get isAnimationComponent(){return!0}applyRootMotion=!1;hasRootMotion=!1;keepAnimatorControllerStateOnDisable=!1;set runtimeAnimatorController(e){this._animatorController&&this._animatorController.model===e||(e?e instanceof om?(e.animator&&e.animator!==this&&(console.warn(`AnimatorController can not be bound to multiple animators`,e.model?.name),e.model||console.error(`AnimatorController has no model`),e=new om(e.model)),this._animatorController=e,this._animatorController.bind(this)):(dm&&console.log(`Assign animator controller`,e,this),this._animatorController=new om(e),this.__didAwake&&this._animatorController.bind(this)):this._animatorController=null)}get runtimeAnimatorController(){return this._animatorController}getCurrentStateInfo(){return this.runtimeAnimatorController?.getCurrentStateInfo()}get currentAction(){return this.runtimeAnimatorController?.currentAction||null}get parametersAreDirty(){return this._parametersAreDirty}_parametersAreDirty=!1;get isDirty(){return this._isDirty}_isDirty=!1;Play(e,t=-1,n=-1/0,r=0){this.play(e,t,n,r)}play(e,t=-1,n=-1/0,r=0){this.runtimeAnimatorController?.play(e,t,n,r),this._isDirty=!0}Reset(){this.reset()}reset(){this._animatorController?.reset(),this._isDirty=!0}SetBool(e,t){this.setBool(e,t)}setBool(e,t){dm&&console.log(`setBool`,e,t),this.runtimeAnimatorController?.getBool(e)!==t&&(this._parametersAreDirty=!0),this.runtimeAnimatorController?.setBool(e,t)}GetBool(e){return this.getBool(e)}getBool(e){let t=this.runtimeAnimatorController?.getBool(e)??!1;return dm&&console.log(`getBool`,e,t),t}toggleBool(e){this.setBool(e,!this.getBool(e))}SetFloat(e,t){this.setFloat(e,t)}setFloat(e,t){this.runtimeAnimatorController?.getFloat(e)!==t&&(this._parametersAreDirty=!0),dm&&console.log(`setFloat`,e,t),this.runtimeAnimatorController?.setFloat(e,t)}GetFloat(e){return this.getFloat(e)}getFloat(e){let t=this.runtimeAnimatorController?.getFloat(e)??-1;return dm&&console.log(`getFloat`,e,t),t}SetInteger(e,t){this.setInteger(e,t)}setInteger(e,t){this.runtimeAnimatorController?.getInteger(e)!==t&&(this._parametersAreDirty=!0),dm&&console.log(`setInteger`,e,t),this.runtimeAnimatorController?.setInteger(e,t)}GetInteger(e){return this.getInteger(e)}getInteger(e){let t=this.runtimeAnimatorController?.getInteger(e)??-1;return dm&&console.log(`getInteger`,e,t),t}SetTrigger(e){this.setTrigger(e)}setTrigger(e){this._parametersAreDirty=!0,dm&&console.log(`setTrigger`,e),this.runtimeAnimatorController?.setTrigger(e)}ResetTrigger(e){this.resetTrigger(e)}resetTrigger(e){this._parametersAreDirty=!0,dm&&console.log(`resetTrigger`,e),this.runtimeAnimatorController?.resetTrigger(e)}GetTrigger(e){this.getTrigger(e)}getTrigger(e){let t=this.runtimeAnimatorController?.getTrigger(e);return dm&&console.log(`getTrigger`,e,t),t}IsInTransition(){return this.isInTransition()}isInTransition(){return this.runtimeAnimatorController?.isInTransition()??!1}SetSpeed(e){return this.setSpeed(e)}setSpeed(e){e!==this._speed&&(dm&&console.log(`setSpeed`,e),this._speed=e,this._animatorController?.animator==this&&this._animatorController.setSpeed(e))}set minMaxSpeed(e){this._speed=N.lerp(e.x,e.y,Math.random()),this._animatorController?.animator==this&&this._animatorController.setSpeed(this._speed)}set minMaxOffsetNormalized(e){this._normalizedStartOffset=N.lerp(e.x,e.y,Math.random()),this.runtimeAnimatorController?.animator==this&&(this.runtimeAnimatorController.normalizedStartOffset=this._normalizedStartOffset)}_speed=1;_normalizedStartOffset=0;_animatorController=null;awake(){dm&&console.log(`ANIMATOR`,this.name,this),this.gameObject&&this.initializeRuntimeAnimatorController()}_initializeWithRuntimeAnimatorController;initializeRuntimeAnimatorController(e=!1){let t=e||this.runtimeAnimatorController!==this._initializeWithRuntimeAnimatorController;if(this.runtimeAnimatorController&&t){let e=this.runtimeAnimatorController.clone();this._initializeWithRuntimeAnimatorController=e,e?(console.assert(this.runtimeAnimatorController!==e),this.runtimeAnimatorController=e,console.assert(this.runtimeAnimatorController===e),this.runtimeAnimatorController.bind(this),this.runtimeAnimatorController.setSpeed(this._speed),this.runtimeAnimatorController.normalizedStartOffset=this._normalizedStartOffset):console.warn(`Could not clone animator controller`,this.runtimeAnimatorController)}}onDisable(){this.keepAnimatorControllerStateOnDisable||this._animatorController?.reset()}onBeforeRender(){this._isDirty=!1,this._parametersAreDirty=!1,!$p(this.gameObject)&&this._animatorController&&this._animatorController.update(1)}};um([F()],fm.prototype,`applyRootMotion`,void 0),um([F()],fm.prototype,`hasRootMotion`,void 0),um([F()],fm.prototype,`keepAnimatorControllerStateOnDisable`,void 0),um([F()],fm.prototype,`runtimeAnimatorController`,null);var pm=[],mm=class{enabled=!0;target;methodName;arguments;get canClone(){return this.target instanceof Object}constructor(e,t,n,r){this.target=e,this.methodName=t||null,this.arguments=n,r!=null&&(this.enabled=r)}invoke(...e){if(this.enabled!==!1){if(typeof this.target==`function`)this.arguments?(pm.length=0,e!==void 0&&e.length>0&&pm.push(...e),pm.push(...this.arguments),this.target(...this.arguments),pm.length=0):this.target(...e);else if(this.methodName!=null){let t=this.target[this.methodName];typeof t==`function`?this.arguments?(pm.length=0,e!==void 0&&e.length>0&&pm.push(...e),pm.push(...this.arguments),t.call(this.target,...pm),pm.length=0):t.call(this.target,...e):this.arguments?e!==void 0&&e.length>0?this.target[this.methodName]=e[0]:this.target[this.methodName]=this.arguments[0]:this.target[this.methodName]=e[0]}}}},hm=e=>/^[A-Z]*$/.test(e),gm=class extends Event{args},_m=class e{isEventList=!0;__internalOnInstantiate(t){let n=[];for(let e=0;ee instanceof Object&&e.uuid?t[e.uuid].clone:e?.isComponent?t[e.guid].clone:e);n.push(new mm(e.clone,r.methodName,i,r.enabled))}else M()&&console.warn(`Could not find target for event listener`)}}}return new e(n)}target;key;setEventTarget(e,t){if(this.key=e,this.target=t,this.key!==void 0){let e=``,t=!1;for(let n of this.key)t&&hm(n)&&(e+=`-`),t=!0,e+=n.toLowerCase();this.key=e}}get listenerCount(){return this.methods?.length??0}get isInvoking(){return this._isInvoking}_isInvoking=!1;methods=[];_methodsCopy=[];static from(...t){return new e(t)}constructor(e){if(this.methods=[],Array.isArray(e))for(let t of e)t instanceof mm?this.methods.push(t):typeof t==`function`&&this.methods.push(new mm(t));else typeof e==`function`&&this.methods.push(new mm(e))}invoke(...e){if(this._isInvoking)return console.warn(`Circular event invocation detected. Please check your event listeners for circular references.`,this),!1;if(this.methods?.length<=0)return!1;this._isInvoking=!0;try{this._methodsCopy.length=0,this._methodsCopy.push(...this.methods);for(let t of this._methodsCopy)t.invoke(...e);if(typeof this.target==`object`&&typeof this.key==`string`){let t=this.target.dispatchEvent;if(typeof t==`function`){let n=new gm(this.key);n.args=e,t.call(this.target,n)}}}finally{this._isInvoking=!1,this._methodsCopy.length=0}return!0}addEventListener(e){return this.methods.push(new mm(e)),()=>this.removeEventListener(e)}removeEventListener(e){if(!e)return!1;let t=!1;for(let n=this.methods.length-1;n>=0;n--)this.methods[n].target===e&&(this.methods[n].enabled=!1,this.methods.splice(n,1),t=!0);return t}removeAllEventListeners(){this.methods.length=0}},vm=Symbol(`previous-visibility`),ym=class e extends d{render(e,t,n){if(`addPass`in n)this._unsupported_effectcomposer_warning||=(console.warn(`RenderTexture.render() does not yet support EffectComposer`),!0);else if(n instanceof h){this.onBeforeRender();let r=n.getRenderTarget(),i=n.xr.enabled;n.xr.enabled=!1,n.setRenderTarget(this),n.clear(!0,!0,!0),n.render(e,t),n.setRenderTarget(r),n.xr.enabled=i,this.onAfterRender()}}static _userSet=new Set;onBeforeRender(){e._userSet.clear();let t=ef(this.texture,!0,null,e._userSet);for(let e of t)e instanceof x&&(e[vm]=e.visible,e.visible=!1)}onAfterRender(){for(let t of e._userSet)t instanceof x&&(t.visible=t[vm]);e._userSet.clear()}},bm=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},xm=A(`debuggroundprojection`),Sm=` -#ifdef NEEDLE_USE_CUBE_UV_MAP -varying vec3 vNeedleGroundProjectionWorldDirection; -#endif -`,Cm=` -${Sm} -uniform float needleGroundProjectionBlurriness; -uniform float needleGroundProjectionBlending; -uniform float needleGroundProjectionAlphaFactor; -uniform float needleGroundProjectionBackgroundIntensity; - -float needleGroundProjectionSmoothstep(float edge0, float edge1, float x) { - float t = clamp((x - edge0) / max(edge1 - edge0, 0.000001), 0.0, 1.0); - return t * t * (3.0 - 2.0 * t); -} - -float needleGroundProjectionDistance() { - return length(vec2(0.0, vMapUv.y)); -} - -float needleGroundProjectionBlurFactor(float needleGroundProjectionDistanceValue) { - return clamp(needleGroundProjectionSmoothstep(0.5, 1.0, needleGroundProjectionDistanceValue * 2.0), 0.0, 1.0); -} -`,wm=` -#ifdef USE_MAP - - float needleGroundProjectionDistanceValue = needleGroundProjectionDistance(); - float needleGroundProjectionBlurFactorValue = needleGroundProjectionBlurFactor(needleGroundProjectionDistanceValue); - vec4 sampledDiffuseColor; - - #ifdef NEEDLE_USE_CUBE_UV_MAP - sampledDiffuseColor = textureCubeUV( - map, - normalize( vNeedleGroundProjectionWorldDirection ), - needleGroundProjectionBlurriness * needleGroundProjectionBlurFactorValue - ); - #else - #ifdef USE_MIPMAP_BIAS - sampledDiffuseColor = texture2D( map, vMapUv, mipmapBias ); - #else - sampledDiffuseColor = texture2D( map, vMapUv ); - #endif - #endif - - #ifdef DECODE_VIDEO_TEXTURE - - // use inline sRGB decode until browsers properly support SRGB8_ALPHA8 with video textures (#26516) - - sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w ); - - #endif - - sampledDiffuseColor.rgb *= mix(1.0, needleGroundProjectionBackgroundIntensity, needleGroundProjectionBlurFactorValue); - diffuseColor *= sampledDiffuseColor; - -#endif -`,Tm=` -#ifdef USE_MAP - if (needleGroundProjectionBlending > 0.000001) { - float needleGroundProjectionBrightness = dot(diffuseColor.rgb, vec3(0.299, 0.587, 0.114)); - float needleGroundProjectionStepFactor = needleGroundProjectionBlending - needleGroundProjectionBrightness * 0.1; - diffuseColor.a *= pow( - 1.0 - needleGroundProjectionBlending * needleGroundProjectionSmoothstep( - 0.35 * needleGroundProjectionStepFactor, - 0.45 * needleGroundProjectionStepFactor, - needleGroundProjectionDistanceValue - ), - 5.0 - ); - } -#endif -diffuseColor.a *= needleGroundProjectionAlphaFactor; -`;function Em(e){let t=e.image?.height;if(!t)return null;let n=Math.log2(t)-2,r=1/t;return{texelWidth:1/(3*Math.max(2**n,112)),texelHeight:r,maxMip:n}}function Dm(e){let t=e.userData;return t.needleGroundProjectionUniforms??={needleGroundProjectionBlurriness:{value:0},needleGroundProjectionBlending:{value:0},needleGroundProjectionAlphaFactor:{value:1},needleGroundProjectionBackgroundIntensity:{value:1}}}function Om(e,t){let n=Dm(e);e.onBeforeCompile=e=>{e.uniforms.needleGroundProjectionBlurriness=n.needleGroundProjectionBlurriness,e.uniforms.needleGroundProjectionBlending=n.needleGroundProjectionBlending,e.uniforms.needleGroundProjectionAlphaFactor=n.needleGroundProjectionAlphaFactor,e.uniforms.needleGroundProjectionBackgroundIntensity=n.needleGroundProjectionBackgroundIntensity,e.vertexShader=e.vertexShader.replace(`#include `,`#include \n${Sm}`).replace(`#include `,`#include -#ifdef NEEDLE_USE_CUBE_UV_MAP - // GroundedSkybox mirrors geometry on Z, so undo that before deriving the sampling direction. - vNeedleGroundProjectionWorldDirection = transformDirection( vec3( position.x, position.y, -position.z ), modelMatrix ); -#endif`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include -${Cm} -#include `).replace(`#include `,wm).replace(`#include `,`${Tm}\n#include `)};let r=e.defines??={},i=JSON.stringify(r),a=t.mapping===306?Em(t):null;a?(r.NEEDLE_USE_CUBE_UV_MAP=1,r.ENVMAP_TYPE_CUBE_UV=1,r.CUBEUV_TEXEL_WIDTH=a.texelWidth,r.CUBEUV_TEXEL_HEIGHT=a.texelHeight,r.CUBEUV_MAX_MIP=`${a.maxMip}.0`):(delete r.NEEDLE_USE_CUBE_UV_MAP,delete r.ENVMAP_TYPE_CUBE_UV,delete r.CUBEUV_TEXEL_WIDTH,delete r.CUBEUV_TEXEL_HEIGHT,delete r.CUBEUV_MAX_MIP),i!==JSON.stringify(r)&&(e.needsUpdate=!0)}var km=class extends K{applyOnAwake=!1;autoFit=!0;set radius(e){this._radius=e,this._projection&&this.updateProjection()}get radius(){return this._radius}_radius=50;set height(e){this._height=e,this._projection&&this.updateProjection()}get height(){return this._height}_height=3;set arBlending(e){this._arblending=e,this._needsTextureUpdate=!0}get arBlending(){return this._arblending}_arblending=0;_lastBackground;_lastRadius;_lastHeight;_projection;_watcher;awake(){this.applyOnAwake&&this.updateAndCreate()}onEnable(){this.context.time.frameCount>0&&this.applyOnAwake&&this.updateAndCreate(),this._watcher||(this._watcher=new en(this.context.scene,`background`),this._watcher.subscribeWrite(e=>{xm&&console.log(`Background changed`,this.context.scene.background),this._needsTextureUpdate=!0}))}onDisable(){this._watcher?.revoke(),this._projection?.removeFromParent()}onEnterXR(){this.activeAndEnabled&&(this._needsTextureUpdate=!0,this.updateProjection())}async onLeaveXR(){this.activeAndEnabled&&(await qt(1),this.updateProjection())}onBeforeRender(){if(this._projection&&this.scene.backgroundRotation&&this._projection.rotation.copy(this.scene.backgroundRotation),this._projection&&this.context.scene.background instanceof be){let e=this.context.scene.backgroundBlurriness??0,t=this._lastBlurriness!==e;this.updateProjectionMaterial(this.context.scene.background,t||this._needsTextureUpdate)}}updateAndCreate(){this.updateProjection(),this._watcher?.apply()}_needsTextureUpdate=!1;updateProjection(){if(!this.context.scene.background){this._projection?.removeFromParent();return}let e=this.context.scene.background;if(!(e instanceof be)){this._projection?.removeFromParent();return}if((this.context.xr?.isPassThrough||this.context.xr?.isAR)&&this.arBlending===0){this._projection?.removeFromParent();return}if(!this.gameObject||this.destroyed)return;let t=!0,n=e!==this._lastBackground||this._height!==this._lastHeight||this._radius!==this._lastRadius;if(!this._projection||n){xm&&console.log(`Create/Update Ground Projection`,e.name),this._projection?.removeFromParent();try{this._projection=new ct(e,this._height,this._radius,64),Om(this._projection.material,e)}catch(e){console.error(`Error creating three GroundProjection`,e);return}this._projection.position.y=this._height-0,this._projection.name=`GroundProjection`,ui(this._projection,!1)}else t=!1;if(this._projection.parent||this.gameObject.add(this._projection),this.autoFit&&t){this._projection.updateWorldMatrix(!0,!0);let e=fi(this.context.scene.children,[this._projection]),t=e.min.y;if(t<1/0){let n=P();n.x=e.min.x+(e.max.x-e.min.x)*.5;let r=zr(this.gameObject).x;n.y=t+this._height*r-0,n.z=e.min.z+(e.max.z-e.min.z)*.5,kr(this._projection,n)}xm&&H.DrawWireBox3(e,65280,5)}this.updateProjectionMaterial(e,!0),this._lastBackground=e,this._lastHeight=this._height,this._lastRadius=this._radius,this._needsTextureUpdate=!1}_blurrynessShader=null;_lastBlurriness=-1;updateProjectionMaterial(e,t=!1){if(!this._projection)return;let n=this.context.scene.backgroundBlurriness??0,r=e.mapping===306,i=e;if(!r&&n>.001){let r=!!this._projection.material.map&&this._projection.material.map!==e;t||!r?i=this.updateBlurriness(e,n):this._projection.material.map&&(i=this._projection.material.map)}this._projection.material.map!==i&&(this._projection.material.map=i);let a=this._projection.material.map??e;a.mapping=e.mapping,Om(this._projection.material,a);let o=Dm(this._projection.material);o.needleGroundProjectionBlurriness.value=r?n:0,o.needleGroundProjectionBackgroundIntensity.value=this.context.scene.backgroundIntensity??1;let s=this._projection.material.transparent;this._projection.material.transparent=this.context.xr?.isAR===!0&&this.arBlending>1e-6,o.needleGroundProjectionBlending.value=this._projection.material.transparent?this.arBlending:0,o.needleGroundProjectionAlphaFactor.value=this.context.isInPassThrough?.95:1,s!==this._projection.material.transparent&&(this._projection.material.needsUpdate=!0),this._projection.material.depthTest=!0,this._projection.material.depthWrite=!1,this._lastBlurriness=n,this._needsTextureUpdate=!1}updateBlurriness(e,t){xm&&console.log(`Update Blurriness`,t),this._blurrynessShader??=new Ve({name:`GroundProjectionBlurriness`,uniforms:{map:{value:e},blurriness:{value:t}},vertexShader:Am,fragmentShader:jm}),this._blurrynessShader.depthWrite=!1,this._blurrynessShader.uniforms.map.value=e,this._blurrynessShader.uniforms.blurriness.value=t,e.needsUpdate=!0;let n=ai.copyTexture(e,this._blurrynessShader);return n.mapping=e.mapping,n}};bm([F()],km.prototype,`applyOnAwake`,void 0),bm([F()],km.prototype,`autoFit`,void 0),bm([F()],km.prototype,`radius`,null),bm([F()],km.prototype,`height`,null),bm([F()],km.prototype,`arBlending`,null);var Am=` - varying vec2 vUv; - - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); - } -`,jm=` - uniform sampler2D map; - uniform float blurriness; - varying vec2 vUv; - - const float PI = 3.14159265359; - - // Gaussian function - float gaussian(float x, float sigma) { - return exp(-(x * x) / (2.0 * sigma * sigma)) / (sqrt(2.0 * PI) * sigma); - } - - // Custom smoothstep function for desired falloff - float customSmoothstep(float edge0, float edge1, float x) { - float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); - return t * t * (3.0 - 2.0 * t); - } - - void main() { - vec2 center = vec2(0.0, 0.0); - vec2 pos = vUv; - pos.x = 0.0; // Only consider vertical distance - float distance = length(pos - center); - - // Calculate blur amount based on custom falloff - float blurAmount = customSmoothstep(0.5, 1.0, distance * 2.0); - blurAmount = clamp(blurAmount, 0.0, 1.0); // Ensure blur amount is within valid range - - // Gaussian blur - vec2 pixelSize = 1.0 / vec2(textureSize(map, 0)); - vec4 color = vec4(0.0); - float totalWeight = 0.0; - int blurSize = int(60.0 * min(1.0, blurriness) * blurAmount); // Adjust blur size based on distance and blurriness - if (blurSize <= 0) { - gl_FragColor = texture2D(map, vUv); - return; - } - float lodLevel = log2(float(blurSize)) * 0.5; // Compute LOD level - - for (int x = -blurSize; x <= blurSize; x++) { - for (int y = -blurSize; y <= blurSize; y++) { - vec2 offset = vec2(float(x), float(y)) * pixelSize * blurAmount; - float weight = gaussian(length(vec2(float(x), float(y))), 1000.0 * blurAmount); // Use a fixed sigma value - color += textureLod(map, vUv + offset, lodLevel) * weight; - totalWeight += weight; - } - } - - color = totalWeight > 0.0 ? color / totalWeight : texture2D(map, vUv); - - gl_FragColor = color; - - // #include - // #include - - // Uncomment to visualize blur amount - // gl_FragColor = vec4(blurAmount, 0.0, 0.0, 1.0); - } -`;function Mm(e){if(pd.active)return console.warn(`[OrbitControls] Can not fit camera while XR session is active`),null;let t=B.Current;if(!t)return console.warn(`[OrbitControls] No context found`),null;let n=e?.camera||t.mainCamera;if(!n)return console.warn(`No camera or controls found to fit camera to objects...`),null;e||={},e.autoApply=e.autoApply!==!1,e.minZoom||=0,e.maxZoom||=1/0;let{centerCamera:r,cameraNearFar:i=`auto`,fitOffset:a=1.1,fov:s=n instanceof C?n?.fov:-1}=e,c=new o,l=new o,u=n instanceof C?n.aspect:1,d=fi(e.objects||t.scene,void 0,n?.layers),f=d.clone();d.getCenter(l);let p=new o;if(d.getSize(p),n instanceof C&&n.updateProjectionMatrix(),n.updateMatrixWorld(),d.applyMatrix4(n.matrixWorldInverse),d.getSize(c),d.setFromCenterAndSize(l,c),Number.isNaN(c.x)||Number.isNaN(c.y)||Number.isNaN(c.z))return console.warn(`Camera fit size resultet in NaN`,n,d),null;if(c.length()<=1e-10)return console.warn(`Camera fit size is zero`,d),null;let m=s,h=2*Math.atan(Math.tan(m*Math.PI/360/2)*u)/Math.PI*360,g=c.y/(2*Math.atan(Math.PI*m/360)),_=c.x/(2*Math.atan(Math.PI*h/360)),v=a*Math.max(g,_)+c.z/2;e.maxZoom=v*10,e.minZoom=v*.01,e.debug===!0&&console.log(`Fit camera to objects`,{fitHeightDistance:g,fitWidthDistance:_,distance:v,verticalFov:m,horizontalFov:h});let ee=.05,y=l.clone();if(y.y-=c.y*ee,e.targetOffset&&(e.targetOffset.x!==void 0&&(y.x+=e.targetOffset.x),e.targetOffset.y!==void 0&&(y.y+=e.targetOffset.y),e.targetOffset.z!==void 0&&(y.z+=e.targetOffset.z)),e.relativeTargetOffset&&(e.relativeTargetOffset.x!==void 0&&(y.x+=e.relativeTargetOffset.x*c.x),e.relativeTargetOffset.y!==void 0&&(y.y+=e.relativeTargetOffset.y*c.y),e.relativeTargetOffset.z!==void 0&&(y.z+=e.relativeTargetOffset.z*c.z)),i==null||i==`auto`){let t=Rp(km),r=t?t.radius:0,i=Math.max(p.x,p.y,p.z,r);n instanceof C&&(n.near=v/100,n.far=i+v*10,n.updateProjectionMatrix()),t&&(e.maxZoom=Math.max(Math.min(e.maxZoom,r*.5),v))}e.currentZoom!==void 0&&(e.currentZoome.maxZoom&&(e.maxZoom=e.currentZoom*1.1));let b=l.clone();e.fitDirection?b.sub(new o().copy(e.fitDirection).multiplyScalar(1e6)):b.sub(n.worldPosition),r===`y`&&(b.y=0),b.normalize(),b.multiplyScalar(v),r===`y`&&(b.y+=-ee*4*v);let te=l.clone().sub(b);return e.cameraOffset&&(e.cameraOffset.x!==void 0&&(te.x+=e.cameraOffset.x),e.cameraOffset.y!==void 0&&(te.y+=e.cameraOffset.y),e.cameraOffset.z!==void 0&&(te.z+=e.cameraOffset.z)),e.relativeCameraOffset&&(e.relativeCameraOffset.x!==void 0&&(te.x+=e.relativeCameraOffset.x*c.x),e.relativeCameraOffset.y!==void 0&&(te.y+=e.relativeCameraOffset.y*c.y),e.relativeCameraOffset.z!==void 0&&(te.z+=e.relativeCameraOffset.z*c.z)),n.parent&&(te=n.parent.worldToLocal(te)),e.debug&&(H.DrawWireBox3(d,16777011,10),H.DrawWireBox3(f,65280,10)),e.autoApply&&(n.position.copy(te),n.lookAt(y),s>0&&n instanceof C&&(n.fov=s,n.updateProjectionMatrix())),{camera:n,position:te,lookAt:y,fov:e.fov}}var Nm=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Pm=class extends K{constraintActive=!0;locked=!1;sources=[];setConstraintPosition(e){let t=this.sources[0];t&&(t.worldPosition=e)}};Nm([F()],Pm.prototype,`constraintActive`,void 0),Nm([F()],Pm.prototype,`locked`,void 0),Nm([F(S)],Pm.prototype,`sources`,void 0);var Fm=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}x(){return this.bb.readFloat32(this.bb_pos)}y(){return this.bb.readFloat32(this.bb_pos+4)}z(){return this.bb.readFloat32(this.bb_pos+8)}static sizeOf(){return 12}static createVec3(e,t,n,r){return e.prep(4,12),e.writeFloat32(r),e.writeFloat32(n),e.writeFloat32(t),e.offset()}},Im=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}position(e){return(e||new Fm).__init(this.bb_pos,this.bb)}rotation(e){return(e||new Fm).__init(this.bb_pos+12,this.bb)}scale(e){return(e||new Fm).__init(this.bb_pos+24,this.bb)}static sizeOf(){return 36}static createTransform(e,t,n,r,i,a,o,s,c,l){return e.prep(4,36),e.prep(4,12),e.writeFloat32(l),e.writeFloat32(c),e.writeFloat32(s),e.prep(4,12),e.writeFloat32(o),e.writeFloat32(a),e.writeFloat32(i),e.prep(4,12),e.writeFloat32(r),e.writeFloat32(n),e.writeFloat32(t),e.offset()}},Lm=class e{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSyncedTransformModel(t,n){return(n||new e).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsSyncedTransformModel(t,n){return t.setPosition(t.position()+4),(n||new e).__init(t.readInt32(t.position())+t.position(),t)}guid(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}fast(){let e=this.bb.__offset(this.bb_pos,6);return e?!!this.bb.readInt8(this.bb_pos+e):!1}transform(e){let t=this.bb.__offset(this.bb_pos,8);return t?(e||new Im).__init(this.bb_pos+t,this.bb):null}dontSave(){let e=this.bb.__offset(this.bb_pos,10);return e?!!this.bb.readInt8(this.bb_pos+e):!1}static startSyncedTransformModel(e){e.startObject(4)}static addGuid(e,t){e.addFieldOffset(0,t,0)}static addFast(e,t){e.addFieldInt8(1,+t,0)}static addTransform(e,t){e.addFieldStruct(2,t,0)}static addDontSave(e,t){e.addFieldInt8(3,+t,0)}static endSyncedTransformModel(e){return e.endObject()}static finishSyncedTransformModelBuffer(e,t){e.finish(t)}static finishSizePrefixedSyncedTransformModelBuffer(e,t){e.finish(t,void 0,!0)}},Rm;(function(e){e[e.Average=0]=`Average`,e[e.Multiply=1]=`Multiply`,e[e.Minimum=2]=`Minimum`,e[e.Maximum=3]=`Maximum`})(Rm||={});var zm;(function(e){e[e.Discrete=0]=`Discrete`,e[e.Continuous=1]=`Continuous`})(zm||={});var J;(function(e){e[e.None=0]=`None`,e[e.FreezePositionX=2]=`FreezePositionX`,e[e.FreezePositionY=4]=`FreezePositionY`,e[e.FreezePositionZ=8]=`FreezePositionZ`,e[e.FreezePosition=14]=`FreezePosition`,e[e.FreezeRotationX=16]=`FreezeRotationX`,e[e.FreezeRotationY=32]=`FreezeRotationY`,e[e.FreezeRotationZ=64]=`FreezeRotationZ`,e[e.FreezeRotation=112]=`FreezeRotation`,e[e.FreezeAll=126]=`FreezeAll`})(J||={});var Bm;(function(e){e[e.None=0]=`None`,e[e.X=2]=`X`,e[e.Y=4]=`Y`,e[e.Z=8]=`Z`,e[e.All=-1]=`All`})(Bm||={});var Vm=function(e,t){return function(n,r,i){Hm(n,r,i,e,t)}};function Hm(e,t,n,r,i){if(!i&&!r&&!e.onValidate)return;if(n!==void 0){console.error(`Invalid usage of validate decorator. Only fields can be validated.`,e,t,n),Ti(`Invalid usage of validate decorator. Only fields can be validated. Property: `+t,{type:Tn.Error});return}let a=``;if(a=typeof t==`string`?t:t.name,e.__internalAwake){let t=Symbol(a),n=e.__internalAwake;e.__internalAwake=function(){if(!this.onValidate){M()&&console.warn(`Usage of @validate decorate detected but there is no onValidate method in your class: "`+e.constructor?.name+`"`);return}if(this[t]===void 0){this[t]=this[a];let e=this[a];if(e instanceof w||e instanceof o||e instanceof Te||e instanceof E){let e=this[a];nn(e,()=>{this.onValidate(a)})}Object.defineProperty(this,a,{set:function(e){if(this[Ts]===!0)this[t]=e;else{r?.call(this,e);let n=this[t];this[t]=e,this.onValidate?.call(this,a,n)}},get:function(){return i?.call(this),this[t]}})}n.call(this)}}}var Um=function(e){return function(t,n,r){let i=``;i=typeof n==`string`?n:n.name;let a=e.prototype,o=Object.getOwnPropertyDescriptor(a,i);if(!o?.value){console.warn(`Can not apply prefix: type does not have method named`,n,e);return}let s=o.value,c=t[i];Object.defineProperty(a,i,{value:function(...e){let t=c?.call(this,...e);if(t instanceof Promise){t.then(t=>{if(t!==!1)return s.call(this,...e)});return}if(t!==!1)return s.call(this,...e)}})}},Wm=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Gm=class{get isDirty(){return this.positionChanged||this.rotationChanged}positionChanged=!1;rotationChanged=!1;position;quaternion;_positionKeys=[`x`,`y`,`z`];_quaternionKeys=[`_x`,`_y`,`_z`,`_w`];reset(e=!1){if(this.positionChanged=!1,this.rotationChanged=!1,this.mute=!1,e){if(this.position)for(let e of this._positionKeys)delete this.position[e];if(this.quaternion)for(let e of this._quaternionKeys)delete this.quaternion[e]}}syncValues(){for(let e of this._positionKeys)this.position[e]=this.obj.position[e];for(let e of this._quaternionKeys)this.quaternion[e]=this.obj.quaternion[e]}mute=!1;applyValues(){if(this.positionChanged&&this.position)for(let e of this._positionKeys){let t=this.position[e];t!==void 0&&(this.obj.position[e]=t)}if(this.rotationChanged&&this.quaternion)for(let e of this._quaternionKeys){let t=this.quaternion[e];t!==void 0&&(this.obj.quaternion[e]=t)}}context;obj;_positionWatch;_rotationWatch;constructor(e,t){this.context=t,this.obj=e}start(e,t){this.reset(),e&&(this._positionWatch||=new en(this.obj.position,[`x`,`y`,`z`]),this._positionWatch.apply(),this.position={},this._positionWatch.subscribeWrite((e,t)=>{if(this.context.physics.engine?.isUpdating||this.mute)return;let n=this.position[t];Math.abs(n-e)<1e-5||(this.position[t]=e,this.positionChanged=!0)})),t&&(this._rotationWatch||=new en(this.obj.quaternion,[`_x`,`_y`,`_z`,`_w`]),this._rotationWatch.apply(),this.quaternion={},this._rotationWatch.subscribeWrite((e,t)=>{if(this.context.physics.engine?.isUpdating||this.mute)return;let n=this.quaternion[t];Math.abs(n-e)<1e-5||(this.quaternion[t]=e,this.rotationChanged=!0)}));let n=this.obj.matrixWorld.multiplyMatrices.bind(this.obj.matrixWorld),r=new ce;this.obj.matrixWorld.multiplyMatrices=(e,t)=>(this.context.physics.engine?.isUpdating||this.mute||r.equals(e)||(this.positionChanged=!0,this.rotationChanged=!0,r.copy(e)),n(e,t))}stop(){this._positionWatch?.revoke(),this._rotationWatch?.revoke()}},Km=class e extends K{get isRigidbody(){return!0}autoMass=!0;set mass(e){e!==this._mass&&(this._mass=e,this._propertiesChanged=!0,this.__didAwake&&(this.autoMass=!1))}get mass(){return this.autoMass?this.context.physics.engine?.getBody(this)?.mass()??-1:this._mass}_mass=0;useGravity=!0;centerOfMass=new o(0,0,0);constraints=J.None;isKinematic=!1;drag=0;angularDrag=1;detectCollisions=!0;sleepThreshold=.01;collisionDetectionMode=zm.Discrete;get lockPositionX(){return(this.constraints&J.FreezePositionX)!==0}get lockPositionY(){return(this.constraints&J.FreezePositionY)!==0}get lockPositionZ(){return(this.constraints&J.FreezePositionZ)!==0}get lockRotationX(){return(this.constraints&J.FreezeRotationX)!==0}get lockRotationY(){return(this.constraints&J.FreezeRotationY)!==0}get lockRotationZ(){return(this.constraints&J.FreezeRotationZ)!==0}set lockPositionX(e){e?this.constraints|=J.FreezePositionX:this.constraints&=~J.FreezePositionX}set lockPositionY(e){e?this.constraints|=J.FreezePositionY:this.constraints&=~J.FreezePositionY}set lockPositionZ(e){e?this.constraints|=J.FreezePositionZ:this.constraints&=~J.FreezePositionZ}set lockRotationX(e){e?this.constraints|=J.FreezeRotationX:this.constraints&=~J.FreezeRotationX}set lockRotationY(e){e?this.constraints|=J.FreezeRotationY:this.constraints&=~J.FreezeRotationY}set lockRotationZ(e){e?this.constraints|=J.FreezeRotationZ:this.constraints&=~J.FreezeRotationZ}set gravityScale(e){this._gravityScale=e}get gravityScale(){return this._gravityScale}_gravityScale=1;dominanceGroup=0;static tempPosition=new o;_propertiesChanged=!1;_currentVelocity=new o;_smoothedVelocity=new o;_smoothedVelocityGetter=new o;_lastPosition=new o;_watch;awake(){this._watch=void 0,this._propertiesChanged=!1}onEnable(){this._watch||=new Gm(this.gameObject,this.context),this._watch.start(!0,!0),this.startCoroutine(this.beforePhysics(),z.LateUpdate),M()&&(globalThis.NEEDLE_USE_RAPIER?Pc.RAPIER_PHYSICS.ready().then(async()=>{await qt(3),this.context.physics.engine?.getBody(this)||console.warn(`Rigidbody could not be created. Ensure \"${this.name}\" has a Collider component.`)}):console.warn(`Rigidbody could not be created: Rapier physics are explicitly disabled.`))}onDisable(){this._watch?.stop(),this.context.physics.engine?.removeBody(this)}onDestroy(){this.context.physics.engine?.removeBody(this)}onValidate(){this._propertiesChanged=!0}*beforePhysics(){for(;;)this._propertiesChanged&&(this._propertiesChanged=!1,this.context.physics.engine?.updateProperties(this)),this._watch?.isDirty?(this._watch.mute=!0,this._watch.applyValues(),this.context.physics.engine?.updateBody(this,this._watch.positionChanged,this._watch.rotationChanged),this._watch.reset()):this._watch?.syncValues(),this.captureVelocity(),yield}teleport(e,t=!0){this._watch?.reset(!0),t?this.gameObject.position.set(e.x,e.y,e.z):this.setWorldPosition(e.x,e.y,e.z),this.resetForcesAndTorques(),this.resetVelocities()}resetForces(e=!0){this.context.physics.engine?.resetForces(this,e)}resetTorques(e=!0){this.context.physics.engine?.resetTorques(this,e)}resetVelocities(){this.setVelocity(0,0,0),this.setAngularVelocity(0,0,0)}resetForcesAndTorques(){this.resetForces(),this.resetTorques()}wakeUp(){this.context.physics.engine?.wakeup(this)}get isSleeping(){return this.context.physics.engine?.isSleeping(this)}updateProperties(){return this._propertiesChanged=!1,this.context.physics.engine?.updateProperties(this)}applyForce(e,t,n=!0){this._propertiesChanged&&this.updateProperties(),this.context.physics.engine?.addForce(this,e,n)}applyImpulse(e,t=!0){this._propertiesChanged&&this.updateProperties(),this.context.physics.engine?.applyImpulse(this,e,t)}setForce(e,t,n,r=!0){this.context.physics.engine?.resetForces(this,r),typeof e==`number`?(t??=0,n??=0,this.context.physics.engine?.addForce(this,{x:e,y:t,z:n},r)):this.context.physics.engine?.addForce(this,e,r)}getVelocity(){let e=this.context.physics.engine?.getLinearVelocity(this);return e?(this._currentVelocity.x=e.x,this._currentVelocity.y=e.y,this._currentVelocity.z=e.z,this._currentVelocity):this._currentVelocity.set(0,0,0)}setVelocity(e,t,n,r=!0){if(e instanceof o){let t=e;this.context.physics.engine?.setLinearVelocity(this,t,r);return}t===void 0||n===void 0||this.context.physics.engine?.setLinearVelocity(this,{x:e,y:t,z:n},r)}getAngularVelocity(){let e=this.context.physics.engine?.getAngularVelocity(this);return e?(this._currentVelocity.x=e.x,this._currentVelocity.y=e.y,this._currentVelocity.z=e.z,this._currentVelocity):this._currentVelocity.set(0,0,0)}setAngularVelocity(e,t,n,r=!0){if(typeof e==`object`){let t=e;this.context.physics.engine?.setAngularVelocity(this,t,r);return}if(t===void 0||n===void 0||typeof t==`boolean`){console.warn(`setAngularVelocity expects either a Vec3 or 3 numbers`);return}this.context.physics.engine?.setAngularVelocity(this,{x:e,y:t,z:n},r)}setTorque(e,t,n){typeof e==`number`?this.setAngularVelocity(e,t,n):this.setAngularVelocity(e)}get smoothedVelocity(){return this._smoothedVelocityGetter.copy(this._smoothedVelocity),this._smoothedVelocityGetter.multiplyScalar(1/this.context.time.deltaTime)}setBodyFromGameObject(e=null){}captureVelocity(){let t=this.gameObject.matrixWorld;e.tempPosition.setFromMatrixPosition(t);let n=e.tempPosition.sub(this._lastPosition);this._lastPosition.copy(e.tempPosition),this._smoothedVelocity.lerp(n,this.context.time.deltaTime/.1)}};Wm([Vm()],Km.prototype,`autoMass`,void 0),Wm([F()],Km.prototype,`mass`,null),Wm([Vm(),F()],Km.prototype,`useGravity`,void 0),Wm([F(o)],Km.prototype,`centerOfMass`,void 0),Wm([Vm(),F()],Km.prototype,`constraints`,void 0),Wm([Vm(),F()],Km.prototype,`isKinematic`,void 0),Wm([Vm(),F()],Km.prototype,`drag`,void 0),Wm([Vm(),F()],Km.prototype,`angularDrag`,void 0),Wm([Vm(),F()],Km.prototype,`detectCollisions`,void 0),Wm([Vm(),F()],Km.prototype,`sleepThreshold`,void 0),Wm([Vm(),F()],Km.prototype,`collisionDetectionMode`,void 0),Wm([Vm()],Km.prototype,`_gravityScale`,void 0),Wm([Vm()],Km.prototype,`dominanceGroup`,void 0),new o,new E,new o;var qm=A(`debugsync`),Jm=`STRS`;Ac(Jm,Lm.getRootAsSyncedTransformModel);var Ym=new Oc;function Xm(e,t,n=!0){Ym.clear();let r=Ym.createString(e);Lm.startSyncedTransformModel(Ym),Lm.addGuid(Ym,r),Lm.addFast(Ym,n);let i=t.worldPosition,a=t.worldEuler,o=t.gameObject.scale;Lm.addTransform(Ym,Im.createTransform(Ym,i.x,i.y,i.z,a.x,a.y,a.z,o.x,o.y,o.z));let s=Lm.endSyncedTransformModel(Ym);return Ym.finish(s,Jm),Ym.asUint8Array()}var Zm=0,Qm=0;Va(e=>{let t=e.connection.currentServerUrl?.includes(`glitch`)?10:40;Qm=Math.floor(Zm/t),Zm=0,qm&&Qm>0&&console.log(`Sync Transform Fast Interval`,Qm)});var $m=class extends K{overridePhysics=!0;interpolatePosition=!0;interpolateRotation=!0;fastMode=!1;syncDestroy=!1;_model=null;_needsUpdate=!0;rb=null;_wasKinematic=!1;_receivedDataBefore=!1;_targetPosition;_targetRotation;_receivedFastUpdate=!1;_shouldRequestOwnership=!1;requestOwnership(){qm&&console.log(`Request ownership`),this._model?this._model.requestOwnership():(this._shouldRequestOwnership=!0,this._needsUpdate=!0)}freeOwnership(){this._model?.freeOwnership()}hasOwnership(){return this._model?.hasOwnership??void 0}isOwned(){return this._model?.isOwned}joinedRoomCallback=null;receivedDataCallback=null;awake(){qm&&console.log(`new instance`,this.guid,this),this._receivedDataBefore=!1,this._targetPosition=new o,this._targetRotation=new E,this.lastPosition=new o,this.lastRotation=new E,this.lastScale=new o,this.rb=G.getComponentInChildren(this.gameObject,Km),this.rb&&(this._wasKinematic=this.rb.isKinematic),this.receivedUpdate=!0,this._model=new tl(this.context.connection,this.guid),this.context.connection.isConnected&&this.tryGetLastState(),this.joinedRoomCallback=this.tryGetLastState.bind(this),this.context.connection.beginListen(Xc.JoinedRoom,this.joinedRoomCallback),this.receivedDataCallback=this.onReceivedData.bind(this),this.context.connection.beginListenBinary(Jm,this.receivedDataCallback)}onDestroy(){this.syncDestroy&&Fo(this.guid,this.context.connection),this._model=null,this.context.connection.stopListen(Xc.JoinedRoom,this.joinedRoomCallback),this.context.connection.stopListenBinary(Jm,this.receivedDataCallback)}tryGetLastState(){let e=this.context.connection.tryGetState(this.guid);e&&this.onReceivedData(e)}tempEuler=new He;onReceivedData(e){if(!this.destroyed&&typeof e.guid==`function`&&e.guid()===this.guid){qm&&console.log(`new data`,this.context.connection.connectionId,this.context.time.frameCount,this.guid,e),this.receivedUpdate=!0,this._receivedFastUpdate=e.fast();let t=e.transform();if(t){mf.markDirty(this.gameObject,!0);let e=t.position();e&&(this.interpolatePosition&&this._targetPosition?.set(e.x(),e.y(),e.z()),(!this.interpolatePosition||!this._receivedDataBefore)&&this.setWorldPosition(e.x(),e.y(),e.z()));let n=t.rotation();n&&(this.tempEuler.set(n.x(),n.y(),n.z()),this.interpolateRotation&&this._targetRotation.setFromEuler(this.tempEuler),(!this.interpolateRotation||!this._receivedDataBefore)&&Zr(this.gameObject,this.tempEuler));let r=t.scale();r&&this.gameObject.scale.set(r.x(),r.y(),r.z())}this._receivedDataBefore=!0}}onEnable(){this.lastPosition.copy(this.worldPosition),this.lastRotation.copy(this.worldQuaternion),this.lastScale.copy(this.gameObject.scale),this._needsUpdate=!0,this._model&&this._model.updateIsOwned()}onDisable(){this._model&&this._model.freeOwnership()}receivedUpdate=!1;lastPosition;lastRotation;lastScale;onBeforeRender(){if(!this.activeAndEnabled||!this.context.connection.isConnected)return;if(!this.context.connection.isInRoom||!this._model){qm&&console.log(`no model or room`,this.name,this.guid,this.context.connection.isInRoom);return}this._shouldRequestOwnership&&(this._shouldRequestOwnership=!1,this._model.requestOwnership());let e=this.worldPosition,t=this.worldQuaternion,n=this.gameObject.scale;if(this._model.isOwned&&!this.receivedUpdate){let r=this._model.hasOwnership||this.fastMode?1e-4:.001;(e.distanceTo(this.lastPosition)>r||t.angleTo(this.lastRotation)>r||n.distanceTo(this.lastScale)>r)&&(this._model.hasOwnership?this._needsUpdate=!0:(qm&&console.log(this.guid,`reset because not owned but`,this.gameObject.name,this.lastPosition),this.worldPosition=this.lastPosition,e.copy(this.lastPosition),this.worldQuaternion=this.lastRotation,t.copy(this.lastRotation),this.gameObject.scale.copy(this.lastScale),mf.markDirty(this.gameObject,!0),this._needsUpdate=!1))}if(this._model&&!this._model.hasOwnership&&this._model.isOwned&&this._receivedDataBefore){let e=this._receivedFastUpdate||this.fastMode?.5:.3,t=!1;if(this.interpolatePosition&&this._targetPosition){let n=this.worldPosition;n.lerp(this._targetPosition,e),this.worldPosition=n,t=!0}if(this.interpolateRotation&&this._targetRotation){let n=this.worldQuaternion;n.slerp(this._targetRotation,e),this.worldQuaternion=n,t=!0}t&&mf.markDirty(this.gameObject,!0)}if(this.receivedUpdate=!1,this.lastPosition.copy(e),this.lastRotation.copy(t),this.lastScale.copy(n),!this._model||!this._model||this._model.hasOwnership===void 0||!this._model.hasOwnership)return;this.rb&&this.overridePhysics&&this._wasKinematic!==void 0&&(qm&&console.log(`reset kinematic`,this.rb.name,this._wasKinematic),this.rb.isKinematic=this._wasKinematic);let r=this.rb||this.fastMode;if(this._needsUpdate&&(this.context.time.frameCount%10==0||r)){if(Zm++,r&&Qm>0&&this.context.time.frameCount%Qm!==0)return;qm&&console.debug(`[SyncedTransform] Send update`,this.context.connection.connectionId,this.guid,this.gameObject.name,this.gameObject.guid),this._needsUpdate=!1;let e=Xm(this.guid,this,!!r);this.context.connection.sendBinary(e)}}},eh=class e{event;get deviceIndex(){return this.event.deviceIndex}get pointerId(){return this.event.pointerId}button;buttonName;get pressure(){return this.event.pressure}get used(){return this._used}_used=!1;use(){this._used||(this._used=!0,this.event.use())}_propagationStopped=!1;get propagationStopped(){return this._propagationStopped}stopPropagation(){this._propagationStopped=!0,this.event.stopImmediatePropagation()}stopImmediatePropagation(){this._propagationStopped=!0,this.event.stopImmediatePropagation()}z__pointer_ctured=!1;setPointerCapture(){this.z__pointer_ctured=!0}z__pointer_cture_rleased=!1;releasePointerCapture(){this.z__pointer_cture_rleased=!0}inputSource;get mode(){return this.event.mode}object;point;normal;face;distance;instanceId;intersection;isDown;isUp;isPressed;isClick;isDoubleClick;input;constructor(e,t){this.event=t,this.input=e,this.button=t.button}clone(){let t=new e(this.input,this.event);return Object.assign(t,this),t}Use(){this.use()}StopPropagation(){this.event.stopImmediatePropagation()}};function th(e,t){return G.foreachComponent(e,e=>{if(!e.enabled)return;let n=e;if(t)switch(t){case`pointerdown`:if(n.onPointerDown)return!0;break;case`pointerup`:if(n.onPointerUp||n.onPointerClick)return!0;break;case`pointermove`:if(n.onPointerEnter||n.onPointerExit||n.onPointerMove)return!0;break}else if(n.onPointerDown||n.onPointerUp||n.onPointerEnter||n.onPointerExit||n.onPointerClick)return!0},!1)===!0}var nh=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},rh=class extends K{awake(){gh.createIfNoneExists(this.context)}onEnable(){gh.get(this.context)?.register(this)}onDisable(){gh.get(this.context)?.unregister(this)}},ih=class extends rh{targets=null;raycastHits=[];ignoreSkinnedMeshes=!1;start(){this.targets=[this.gameObject]}performRaycast(e=null){if(!this.targets)return null;e??=new kd,e.targets=this.targets,e.results=this.raycastHits,e.useAcceleratedRaycast=!0;let t=e.testObject;this.ignoreSkinnedMeshes&&(e.testObject=e=>e instanceof ze?`continue in children`:t?t(e):!0);let n=this.context.physics.raycast(e);return e.testObject=t,n}};nh([F()],ih.prototype,`ignoreSkinnedMeshes`,void 0);var ah=class extends ih{constructor(){super(),this.ignoreSkinnedMeshes=!0}},oh=class e extends rh{static allow=!0;performRaycast(t){if(!pd.active||!e.allow||!t?.ray)return null;let n=t.ray.origin;return this.context.physics.sphereOverlap(n,.015,!1,!0)}},sh=class{static getObject(e){let t=e[Yi];return t&&(e=t.isComponent===!0?t.gameObject:t),e}static isInteractable(e,t){if(t&&(t.canvasGroup=void 0,t.graphic=void 0),e==null||!e.visible||(e=this.getObject(e),!e.visible))return!1;let n=this.tryFindCanvasGroup(e);if(n?.isCanvasGroup===!0&&(t&&(t.canvasGroup=n),n.blocksRaycasts===!1||n.interactable===!1))return!1;let r=Vf(e,e=>{if(e.isGraphic===!0)return e},!1);return t&&r?.isGraphic===!0&&(t.graphic=r),!(r?.raycastTarget===!1||r?.layer===2)}static tryFindCanvasGroup(e){if(!e)return null;let t=Vf(e,e=>{if(e.activeAndEnabled){let t=e;if(t.blocksRaycasts!==void 0&&t.interactable!==void 0)return t}},!1);return t===void 0?this.tryFindCanvasGroup(e.parent):t}};function ch(e){return e[Yi]||(e.parent?ch(e.parent):null)}function lh(e){return e.isUI===!0||typeof e[Yi]==`object`}function uh(e,t){if(!e)return;let n=e.material;if(n?.isMaterial===!0){let r=e.parent;r&&r.isText,n.side=t.doubleSided??!0?2:0,n.shadowSide=t.doubleSided?2:0,e.castShadow=t.castShadows?t.castShadows:!1,e.receiveShadow=t.receiveShadows?t.receiveShadows:!1}for(let n of e.children)uh(n,t)}function dh(e,t,n){e[t]===void 0&&console.warn(`Field`,t,`is undefined on`,e);let r=Proxy.revocable(e[t],{set(e,t,r,i){let a=e[t],o=Reflect.set(e,t,r,i);return n(r,a),o}}),i=r.revoke,a=e[t];return r.revoke=()=>{e[t]=a,i()},e[t]=r.proxy,r}var fh=Symbol(`Scheduled action`);function ph(e,t,n=z.OnBeforeRender){let r=e[fh];r||=e[fh]={};let i=t.name;r[n]||(r[n]={});let a=r[n];if(a[i])return;function*o(){t?.call(e),a[i]=null}a[i]=e.startCoroutine(o(),n)}var mh=A(`debugeventsystem`),hh;(function(e){e.BeforeHandleInput=`BeforeHandleInput`,e.AfterHandleInput=`AfterHandleInput`})(hh||={}),La(e=>{gh.createIfNoneExists(e)});var gh=class e extends K{static ensureUpdateMeshUI(e,t,n=!1){_h.update(e,t,n)}static markUIDirty(e){_h.markDirty()}static createIfNoneExists(t){t.scene.getComponent(e)||t.scene.addComponent(e)}static get(t){return this.createIfNoneExists(t),t.scene.getComponent(e)}static get instance(){return this.get(B.Current)}raycaster=[];register(e){e&&this.raycaster&&!this.raycaster.includes(e)&&this.raycaster?.push(e)}unregister(e){let t=this.raycaster?.indexOf(e);t!==void 0&&t!==-1&&this.raycaster?.splice(t,1)}get hasActiveUI(){return this.currentActiveMeshUIComponents.length>0}get isHoveringObjects(){return this.hoveredByID.size>0}awake(){this.gameObject!==this.context.scene&&(console.debug(`[Needle Engine] EventSystem is only allowed on the scene root. Disabling EventSystem on '${this.gameObject.name}'`),this.enabled=!1)}start(){this.context.scene.getComponent(rh)||this.context.scene.addComponent(ih)}onEnable(){this.context.input.addEventListener(L.PointerDown,this.onPointerEvent),this.context.input.addEventListener(L.PointerUp,this.onPointerEvent),this.context.input.addEventListener(L.PointerMove,this.onPointerEvent)}onDisable(){this.context.input.removeEventListener(L.PointerDown,this.onPointerEvent),this.context.input.removeEventListener(L.PointerUp,this.onPointerEvent),this.context.input.removeEventListener(L.PointerMove,this.onPointerEvent)}pressedByID=new Map;hoveredByID=new Map;onBeforeRender(){this.resetMeshUIStates()}onPointerEvent=e=>{if(e===void 0||e.propagationStopped||e.defaultPrevented||e.used)return;let t=new eh(this.context.input,e);this._currentPointerEventName=e.type,t.inputSource=this.context.input,t.isClick=e.isClick,t.isDoubleClick=e.isDoubleClick,t.isDown=e.type==L.PointerDown,t.isUp=e.type==L.PointerUp,t.isPressed=this.context.input.getPointerPressed(e.pointerId);let n=new kd;e.hasRay?n.ray=e.ray:n.screenPoint=this.context.input.getPointerPositionRC(e.pointerId),n.allowSlowRaycastFallback=e.isClick||e.isDoubleClick;let r=this.performRaycast(n);if(mh&&(t.isDown?console.log(`DOWN`,{id:t.pointerId,hits:r.length}):t.isUp&&console.log(`UP`,{id:t.pointerId,hits:r.length}),t.isClick&&console.log(`CLICK`,{id:t.pointerId,hits:r.length})),r){for(let t of r)t.event=e,e.intersections.push(t);e.origin.onPointerHits&&e.origin.onPointerHits({sender:this,event:e,hits:r})}mh&&t.isClick&&Ti(`EventSystem: `+t.pointerId+` - `+this.context.time.frame+` - Up:`+t.isUp+`, Down:`+t.isDown);let i={sender:this,args:t,hasActiveUI:this.currentActiveMeshUIComponents.length>0};this.dispatchEvent(new CustomEvent(hh.BeforeHandleInput,{detail:i})),this.handleIntersections(r,t),this.dispatchEvent(new CustomEvent(hh.AfterHandleInput,{detail:i}))};_sortedHits=[];_testObjectsCache=new Map;_currentlyActiveRaycaster=null;_currentPointerEventName=null;shouldRaycastObject=e=>{let t=e&&`getComponent`in e?e.getComponent(rh):null;if(t&&t!=this._currentlyActiveRaycaster)return!1;let n=null;if(lh(e)&&(n=e[Yi]?.gameObject),this._testObjectsCache.has(e)||n&&this._testObjectsCache.has(n))return this._testObjectsCache.get(e)===!1?`continue in children`:!0;{let t=th(e,this._currentPointerEventName);if(!t&&n&&(t=th(n,this._currentPointerEventName)),t){this._testObjectsCache.set(e,!0);for(let t of e.children)this.shouldRaycastObject_AddToYesCache(t);return!0}return this._testObjectsCache.set(e,!1),`continue in children`}};shouldRaycastObject_AddToYesCache(e){this._testObjectsCache.set(e,!0);for(let t of e.children)this.shouldRaycastObject_AddToYesCache(t)}performRaycast(e){if(!this.raycaster)return null;this._testObjectsCache.clear(),this._sortedHits.length=0,e.testObject=this.shouldRaycastObject;for(let t of this.raycaster){if(!t.activeAndEnabled)continue;this._currentlyActiveRaycaster=t;let n=t.performRaycast(e);this._currentlyActiveRaycaster=null,n&&n.length>0&&this._sortedHits.push(...n)}return this._sortedHits.sort((e,t)=>e.distance-t.distance),this._sortedHits}assignHitInformation(e,t){t?(e.intersection=t,e.point=t.point,e.normal=t.normal,e.face=t.face,e.distance=t.distance,e.instanceId=t.instanceId):(e.intersection=void 0,e.point=void 0,e.normal=void 0,e.face=void 0,e.distance=void 0,e.instanceId=void 0)}handleIntersections(e,t){if(e?.length){e=this.sortCandidates(e);for(let n of e){if(t.event.immediatePropagationStopped)return!1;if(this.assignHitInformation(t,n),this.handleEventOnObject(n.object,t))return!0}}this.assignHitInformation(t,e?.[0]),this.invokePointerCapture(t);let n=this.hoveredByID.get(t.pointerId);return n&&this.propagatePointerExit(n.obj,n.data,null),this.hoveredByID.delete(t.pointerId),t.isUp&&(this.pressedByID.get(t.pointerId)?.handlers.forEach(e=>this.invokeOnPointerUp(t,e)),this.pressedByID.delete(t.pointerId)),!1}_sortingBuffer=[];_noDepthTestingResults=[];sortCandidates(e){this._sortingBuffer.length=0,this._noDepthTestingResults.length=0;for(let t=0;t{t(e)},!1),e=e.parent}handleMainInteraction(e,t,n){let r=this.pressedByID.get(t.pointerId),i=n!==e,a=!0;switch(t.event.pointerType){case`mouse`:case`touch`:let e=this.context.input.getPointerPositionLastFrame(t.pointerId),n=this.context.input.getPointerPosition(t.pointerId);a=e&&!N.approximately(e,n);break;case`controller`:case`hand`:break}this.propagate(e,e=>{let n=e;n.interactable!==!1&&(!n.activeAndEnabled||!n.enabled||(n.onPointerEnter&&i&&this.handlePointerEnter(n,t),t.isDown&&n.onPointerDown&&(n.onPointerDown(t),r?.handlers.add(n),this.handlePointerCapture(t,n)),n.onPointerMove&&(a&&n.onPointerMove(t),this.handlePointerCapture(t,n)),t.isUp&&(n.onPointerUp&&(this.invokeOnPointerUp(t,n),r?.handlers.delete(n)),n.onPointerExit&&t.event?.pointerType===tc.Touch&&(this.handlePointerExit(n,t),this.hoveredByID.delete(t.pointerId))),t.isClick&&n.onPointerClick&&n.onPointerClick(t)))}),t.isUp&&(r?.handlers.forEach(e=>{this.invokeOnPointerUp(t,e)}),this.pressedByID.delete(t.pointerId))}propagatePointerExit(e,t,n){this.propagate(e,e=>{if(!e.gameObject||e.destroyed)return;let r=e;if(r.onPointerExit||r.onPointerEnter){if(n&&this.isChild(n,e.gameObject))return;this.handlePointerExit(r,t)}})}invokeOnPointerUp(e,t){t.onPointerUp?.call(t,e),this.releasePointerCapture(e,t)}handlePointerEnter(e,t){e.onPointerEnter&&this.updatePointerState(e,t.pointerId,this.pointerEnterSymbol,!0)&&e.onPointerEnter(t),this.updatePointerState(e,t.pointerId,this.pointerExitSymbol,!1)}handlePointerExit(e,t){e.onPointerExit&&this.updatePointerState(e,t.pointerId,this.pointerExitSymbol,!0)&&e.onPointerExit(t),this.updatePointerState(e,t.pointerId,this.pointerEnterSymbol,!1)}updatePointerState(e,t,n,r){let i=e[n];if(r)return i&&i.includes(t)?!1:(i||=[],i.push(t),e[n]=i,!0);{if(!i||!i.includes(t))return!1;let e=i.indexOf(t);return e!==-1&&i.splice(e,1),!0}}_capturedPointer={};handlePointerCapture(e,t){if(e.z__pointer_ctured){e.z__pointer_ctured=!1;let n=e.pointerId;if(t.onPointerMove){let e=this._capturedPointer[n]||[];e.push(t),this._capturedPointer[n]=e}else M()&&!t.z__warned_no_pointermove&&(t.z__warned_no_pointermove=!0,console.warn(`PointerCapture was requested but the component doesn't implement onPointerMove. It will not receive any pointer events`))}else e.z__pointer_cture_rleased&&(e.z__pointer_cture_rleased=!1,this.releasePointerCapture(e,t))}releasePointerCapture(e,t){let n=e.pointerId;if(this._capturedPointer[n]){let e=this._capturedPointer[n].indexOf(t);e!==-1&&(this._capturedPointer[n].splice(e,1),mh&&console.log(`released pointer capture`,n,t,this._capturedPointer))}}invokePointerCapture(e){if(e.event.type===L.PointerMove){let t=e.pointerId,n=this._capturedPointer[t];if(n){mh&&console.log(`Captured`,t,n);for(let t=0;t0&&_h.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},vh=A(`debugorbit`),yh=A(`freecam`),bh=A(`debugcamerafit`),xh=A(`smoothcam`),Sh={LEFT:``,UP:``,RIGHT:``,BOTTOM:``},Ch=void 0,wh;(function(e){e.CameraTargetReached=`target-reached`})(wh||={});var Th=class extends CustomEvent{constructor(e,t){super(wh.CameraTargetReached,{detail:{controls:e,type:t}})}},X=class extends K{get isCameraController(){return!0}get controls(){return this._controls}get controllerObject(){return this._cameraObject}onStartInteraction(e){this.controls?.addEventListener(`start`,e)}autoTarget=!0;autoFit=!1;enableRotate=!0;autoRotate=!1;autoRotateSpeed=1;minAzimuthAngle=1/0;maxAzimuthAngle=1/0;minPolarAngle=0;maxPolarAngle=Math.PI;enableKeys=!1;enableDamping=!0;dampingFactor=.1;enableZoom=!0;minZoom=0;maxZoom=1/0;zoomSpeed=1;zoomToCursor=!1;enablePan=!0;lookAtTarget=null;lockLookAtTarget=!0;lookAtConstraint01=1;lookAtConstraint;allowInterrupt=!0;middleClickToFocus=!0;doubleClickToFocus=!0;clickBackgroundToFitScene=2;get targetElement(){return this._controls?.domElement??this._targetElement}set targetElement(e){this._targetElement=e,this._controls&&this._controls.domElement!==e&&(this._controls.disconnect(),this._controls.domElement=e,this._controls.connect())}_targetElement=null;debugLog=!1;get targetLerpSpeed(){return 5}set targetLerpSpeed(e){this.targetLerpDuration=1/e}get targetLerpDuration(){return this._lookTargetLerpDuration}set targetLerpDuration(e){this._lookTargetLerpDuration=e}_lookTargetLerpDuration=1;targetBounds=null;rotateLeft(e){this._controls?._rotateLeft(e)}rotateUp(e){this._controls?._rotateUp(e)}pan(e,t){this._controls?._pan(e,t)}zoomIn(e){e>0?this._controls?._dollyIn(1-e):e<0&&this._controls?._dollyOut(1+e)}_controls=null;_cameraObject=null;_lookTargetLerpActive=!1;_lookTargetStartPosition=new o;_lookTargetEndPosition=new o;_lookTargetLerp01=0;_cameraLerpActive=!1;_cameraStartPosition=new o;_cameraEndPosition=new o;_cameraLerp01=0;_cameraLerpDuration=0;_fovLerpActive=!1;_fovLerpStartValue=0;_fovLerpEndValue=0;_fovLerp01=0;_fovLerpDuration=0;_inputs=0;_enableTime=0;_startedListeningToKeyEvents=!1;_eventSystem;_afterHandleInputFn;_camera=null;_syncedTransform;_didSetTarget=0;_didApplyLookAtTarget=!1;awake(){vh&&console.debug(`OrbitControls`,this),this.lookAtConstraint&&(console.warn(`[OrbitControls] lookAtConstraint is deprecated, use lookTarget and lockLookAtTarget instead. This will be removed in a future version.`),!this.lookAtTarget&&this.lookAtConstraint.sources?.[0]&&(this.lookAtTarget=this.lookAtConstraint.sources[0],this.lockLookAtTarget=this.lookAtConstraint.locked)),this._didSetTarget=0,this._didApplyLookAtTarget=!1,this._startedListeningToKeyEvents=!1,this.context.domElement.cameraControls===!1&&(this.enabled=!1)}start(){this._eventSystem=gh.get(this.context)??void 0,this._eventSystem&&(this._afterHandleInputFn=this.afterHandleInput.bind(this),this._eventSystem.addEventListener(hh.AfterHandleInput,this._afterHandleInputFn))}onDestroy(){this._controls?.dispose(),this._eventSystem?.removeEventListener(hh.AfterHandleInput,this._afterHandleInputFn)}onEnable(){this._didSetTarget=0,this._didApplyLookAtTarget=!1,this._enableTime=this.context.time.time;let e=G.getComponent(this.gameObject,Z);this._camera=e;let t=e?.threeCamera;if(!t&&this.gameObject instanceof C&&(t=this.gameObject),t&&sr(t,this,!0),!this._controls&&t instanceof S){this._cameraObject=t;let e=this.targetElement??this.context.renderer.domElement,n=t?.quaternion.clone();this._controls=new pt(t,e),t?.quaternion.copy(n),Ch===void 0&&(Ch={...this._controls.keys});let r=Or(t),i=this.gameObject.worldForward,a=r.clone().sub(i.multiplyScalar(2.5));this._controls.target.copy(a)}if(this._controls)if(yh&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,j.isMobileDevice()&&(this.doubleClickToFocus=!0)),this._controls.addEventListener(`start`,this.onControlsChangeStarted),this._controls.addEventListener(`endMovement`,this.onControlsChangeEnded),!this._startedListeningToKeyEvents&&this.enableKeys)this._startedListeningToKeyEvents=!0,this._controls.listenToKeyEvents(this.context.domElement);else try{this._controls.stopListenToKeyEvents()}catch{}this._syncedTransform=G.getComponent(this.gameObject,$m)??void 0,this.context.pre_render_callbacks.push(this.__onPreRender),this._activePointerEvents=[],this.context.input.addEventListener(`pointerdown`,this._onPointerDown,{queue:sc.Early}),this.context.input.addEventListener(`pointerdown`,this._onPointerDownLate,{queue:sc.Late}),this.context.input.addEventListener(`pointerup`,this._onPointerUp,{queue:sc.Early}),this.context.input.addEventListener(`pointerup`,this._onPointerUpLate,{queue:sc.Late})}onDisable(){if(this._camera?.threeCamera&&sr(this._camera.threeCamera,this,!1),this._controls){this._controls.enabled=!1,this._controls.autoRotate=!1,this._controls.removeEventListener(`start`,this.onControlsChangeStarted),this._controls.removeEventListener(`endMovement`,this.onControlsChangeEnded);try{this._controls.stopListenToKeyEvents()}catch{}this._startedListeningToKeyEvents=!1}this._activePointerEvents.length=0,this.context.input.removeEventListener(`pointerdown`,this._onPointerDown),this.context.input.removeEventListener(`pointerdown`,this._onPointerDownLate),this.context.input.removeEventListener(`pointerup`,this._onPointerUp),this.context.input.removeEventListener(`pointerup`,this._onPointerUpLate)}_activePointerEvents;_lastTimeClickOnBackground=-1;_clickOnBackgroundCount=0;_onPointerDown=e=>{this._activePointerEvents.push(e)};_onPointerDownLate=e=>{e.used&&this._controls&&(this._controls.enabled=!1)};_onPointerUp=e=>{for(let t=this._activePointerEvents.length-1;t>=0;t--){let n=this._activePointerEvents[t];if(n.pointerId===e.pointerId&&n.button===e.button){this._activePointerEvents.splice(t,1);break}}if(this.clickBackgroundToFitScene>0&&e.isClick&&e.button===0){if(e.hasRay||e.intersections.push(...this.context.physics.raycast()),e.intersections.length<=0){let e=this.context.time.time-this._lastTimeClickOnBackground;this._lastTimeClickOnBackground=this.context.time.time,this.clickBackgroundToFitScene<=1||e=this.clickBackgroundToFitScene-1&&(this.autoRotate=!1,this.fitCamera({objects:this.context.scene,immediate:!1}))):this._clickOnBackgroundCount=0}vh&&console.log(this.clickBackgroundToFitScene,e.intersections.length,this._clickOnBackgroundCount)}};_onPointerUpLate=e=>{this.doubleClickToFocus&&e.isDoubleClick&&!e.used&&this.setTargetFromRaycast()};updateTargetNow(e){vh&&console.warn(`OrbitControls: updateTargetNow is using raycasting to update the target immediately. This can be expensive and should be used with caution.`,e);let t=new p(this._cameraObject?.worldPosition,this._cameraObject?.worldForward.multiplyScalar(-1)),n=this.context.physics.raycastFromRay(t,e),r=n.length>0?n[0]:void 0;r&&r.distance>this.minZoom&&r.distance{vh&&console.debug(`OrbitControls: Change started`),this._controls&&(this._orbitStartAngle=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle(),this._zoomStartDistance=this._controls.getDistance()),this._syncedTransform&&this._syncedTransform.requestOwnership()};onControlsChangeEnded=()=>{if(vh&&console.debug(`OrbitControls: Change ended`,{autoTarget:this.autoTarget}),this._controls&&this.autoTarget){let e=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle()-this._orbitStartAngle;Math.abs(e)<.01?(vh&&console.debug(`OrbitControls: Update target`,{deltaAngle:e}),this.updateTargetNow({allowSlowRaycastFallback:!1})):vh&&console.debug(`OrbitControls: No target update`,{deltaAngle:e})}};_shouldDisable=!1;afterHandleInput(e){e.detail.args.pointerId===0&&(e.detail.args.isDown?this._controls&&this._eventSystem&&(this._shouldDisable=this._eventSystem.hasActiveUI):(!e.detail.args.isPressed||e.detail.args.isUp)&&(this._shouldDisable=!1))}onPausedChanged(e){this._controls&&e&&(this._controls.enabled=!1)}onBeforeRender(){if(this._controls){if(this._cameraObject!==this.context.mainCamera){this._controls.enabled=!1;return}if(this._controls.enabled=!0,(this.context.input.getPointerDown(1)||this.context.input.getPointerDown(2)||this.context.input.mouseWheelChanged||this.context.input.getPointerPressed(0)&&this.context.input.getPointerPositionDelta(0)?.length())&&(this._inputs+=1),this._inputs>0&&this.allowInterrupt&&(this.enableRotate&&(this.autoRotate=!1),this._cameraLerpActive=!1,this._lookTargetLerpActive=!1),this._inputs=0,this.autoTarget&&this._didSetTarget++===0){let e=G.getComponent(this.gameObject,Z);if(e&&!this.setLookTargetFromConstraint()){this.debugLog&&console.log(`NO TARGET`);let t=Or(e.threeCamera),n=new o(0,0,-Math.max(.01,t.length())).applyMatrix4(e.threeCamera.matrixWorld);vh&&H.DrawLine(t,n,5592575,10),this.setLookTargetPosition(n,!0)}if(!this.setLookTargetFromConstraint()){let e=new kd;e.screenPoint=new w(0,0),e.lineThreshold=.1;let t=this.context.physics.raycast(e);t.length>0&&this.setLookTargetPosition(t[0].point,!0),bh&&console.log(`OrbitControls hits`,...t)}}if(this.middleClickToFocus&&this.context.input.getPointerClicked(1)&&this.setTargetFromRaycast(),this._lookTargetLerpActive||this._cameraLerpActive||this._fovLerpActive){if(this._cameraLerpActive&&this._cameraObject)if(this._cameraLerp01+=this.context.time.deltaTime/this._cameraLerpDuration,this._cameraLerp01>=1)this._cameraObject.position.copy(this._cameraEndPosition),this._cameraLerpActive=!1,this.dispatchEvent(new Th(this,`camera`));else{let e=N.easeInOutCubic(this._cameraLerp01);this._cameraObject.position.lerpVectors(this._cameraStartPosition,this._cameraEndPosition,e)}if(this._lookTargetLerpActive)if(this._lookTargetLerp01+=this.context.time.deltaTime/this._lookTargetLerpDuration,this._lookTargetLerp01>=1)this.lerpLookTarget(this._lookTargetEndPosition,this._lookTargetEndPosition,1),this._lookTargetLerpActive=!1,this.dispatchEvent(new Th(this,`lookat`));else{let e=N.easeInOutCubic(this._lookTargetLerp01);this.lerpLookTarget(this._lookTargetStartPosition,this._lookTargetEndPosition,e)}if(this._fovLerpActive&&this._cameraObject){let e=this._cameraObject;if(this._fovLerp01+=this.context.time.deltaTime/this._fovLerpDuration,this._fovLerp01>=1)e.fov=this._fovLerpEndValue,this._fovLerpActive=!1;else{let t=N.easeInOutCubic(this._fovLerp01);e.fov=N.lerp(this._fovLerpStartValue,this._fovLerpEndValue,t)}e.updateProjectionMatrix()}}if(this.targetBounds){let e=this._controls.target,t=this.targetBounds.worldPosition,n=P(this.targetBounds.worldScale).multiplyScalar(.5),r=P(t).sub(n),i=P(t).add(n),a=P(this._controls.target).clamp(r,i),o=.1;o<=0?e.copy(a):e.lerp(a,this.context.time.deltaTime/o),this._lookTargetLerpActive&&(o<=0?this._lookTargetEndPosition.copy(a):this._lookTargetEndPosition.lerp(a,this.context.time.deltaTime/(o*5))),vh&&H.DrawWireBox(t,n.multiplyScalar(2),16755200)}if(this._controls){this.debugLog&&(this._controls.domElement=this.context.renderer.domElement);let e=1/(this.context.focusRectSettings?.zoom||1);if(this._controls.enabled=!this._shouldDisable&&this._camera===this.context.mainCameraComponent&&!this.context.isInXR&&!this._activePointerEvents.some(e=>e.used),this._controls.keys=this.enableKeys?Ch:Sh,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,this._controls.zoomSpeed=this.zoomSpeed,this._controls.zoomToCursor=this.zoomToCursor,this._controls.enableDamping=this.enableDamping,this._controls.dampingFactor=this.dampingFactor,this._controls.enablePan=this.enablePan,this._controls.panSpeed=e,this._controls.enableRotate=this.enableRotate,this._controls.minAzimuthAngle=this.minAzimuthAngle,this._controls.maxAzimuthAngle=this.maxAzimuthAngle,this._controls.minPolarAngle=this.minPolarAngle,this._controls.maxPolarAngle=this.maxPolarAngle,yh||(this._camera?.threeCamera?.type===`PerspectiveCamera`?(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom,this._controls.minZoom=0,this._controls.maxZoom=1/0):(this._controls.minDistance=0,this._controls.maxDistance=1/0,this._controls.minZoom=this.minZoom,this._controls.maxZoom=this.maxZoom)),typeof xh==`number`||xh===!0){this._controls.enableDamping=!0;let e=typeof xh==`number`?xh:.99;this._controls.dampingFactor=Math.max(.001,1-Math.min(1,e))}this.allowInterrupt||(this._lookTargetLerpActive&&(this._controls.enablePan=!1),this._cameraLerpActive&&(this._controls.enableRotate=!1,this._controls.autoRotate=!1),(this._lookTargetLerpActive||this._cameraLerpActive)&&(this._controls.enableZoom=!1)),this.context.isInXR||(!yh&&this.lookAtTarget&&!this._lookTargetLerpActive&&(this.lockLookAtTarget?this.setLookTargetFromConstraint(this.lookAtConstraint01):this._didApplyLookAtTarget||(this._didApplyLookAtTarget=!0,this.setLookTargetFromConstraint(1))),this._controls.update(this.context.time.deltaTime),vh&&H.DrawWireSphere(this._controls.target,.1,65280))}}}__onPreRender=()=>{let e=this.context.pre_render_callbacks.indexOf(this.__onPreRender);e>=0&&this.context.pre_render_callbacks.splice(e,1),this.autoFit&&(this.autoFit=!1,this.fitCamera({centerCamera:`y`,immediate:!0,objects:this.scene.children}))};setCameraAndLookTarget(e,t=!1){if(!e)return(M()||vh)&&console.warn(`[OrbitControls] setCameraAndLookTarget target is null`),!1;if(!(e instanceof S)&&!(e instanceof Z))return(M()||vh)&&console.warn(`[OrbitControls] setCameraAndLookTarget target is not an Object3D or Camera`),!1;e instanceof Z&&(e=e.gameObject);let n=e.worldPosition,r=e.worldForward;e instanceof qe&&(vh&&console.debug(`[OrbitControls] setCameraAndLookTarget flip forward direction for camera`),r.multiplyScalar(-1));let i=new p(n,r);return vh&&H.DrawRay(i.origin,i.direction,16711680,10),this.setTargetFromRaycast(i,t)||this.setLookTargetPosition(i.at(2,P()),t),this.setCameraTargetPosition(n,t),!0}setCameraTargetPosition(e,t=!1){e&&(e instanceof S&&(e=Or(e)),this._cameraEndPosition||=new o,this._cameraEndPosition.copy(e),t===!0?(this._cameraLerpActive=!1,this._cameraObject&&this._cameraObject.position.copy(this._cameraEndPosition)):this._cameraObject&&(this._cameraLerpActive=!0,this._cameraLerp01=0,this._cameraStartPosition.copy(this._cameraObject?.position),typeof t==`number`?this._cameraLerpDuration=t:this._cameraLerpDuration=this.targetLerpDuration))}get cameraLerpActive(){return this._cameraLerpActive}stopCameraLerp(){this._cameraLerpActive=!1}setFieldOfView(e,t=!1){if(!this._controls||typeof e!=`number`)return;let n=this._camera?.threeCamera;n&&(t===!0?n.fov=e:(this._fovLerpActive=!0,this._fovLerp01=0,this._fovLerpStartValue=n.fov,this._fovLerpEndValue=e,typeof t==`number`?this._fovLerpDuration=t:this._fovLerpDuration=this.targetLerpDuration))}setLookTargetPosition(e=null,t=!1){this._controls&&e&&(e instanceof S&&(e=Or(e)),this._lookTargetEndPosition.copy(e),this._didSetTarget++,vh&&(console.warn(`OrbitControls: setLookTargetPosition`,e,t),H.DrawWireSphere(this._lookTargetEndPosition,.2,16711680,2)),t===!0?this.lerpLookTarget(this._lookTargetEndPosition,this._lookTargetEndPosition,1):(this._lookTargetLerpActive=!0,this._lookTargetLerp01=0,this._lookTargetStartPosition.copy(this._controls.target),typeof t==`number`?this._lookTargetLerpDuration=t:this._lookTargetLerpDuration=this.targetLerpDuration))}get lookTargetLerpActive(){return this._lookTargetLerpActive}stopLookTargetLerp(){this._lookTargetLerpActive=!1}setLookTargetFromConstraint(e=1){return!this._controls||!this.lookAtTarget?!1:(this.lookAtTarget.getWorldPosition(this._lookTargetEndPosition),this.lerpLookTarget(this._controls.target,this._lookTargetEndPosition,e),!0)}lerpLookTarget(e,t,n){this._controls&&(n>=1?this._controls.target.copy(t):this._controls.target.lerpVectors(e,t,n),this.lookAtTarget&&this.lockLookAtTarget&&(this.lookAtTarget.worldPosition=this._controls.target))}setTargetFromRaycast(e,t=!1){if(!this.controls)return!1;let n=e?this.context.physics.raycastFromRay(e):this.context.physics.raycast();for(let e of n)if(e.distance>0&&G.isActiveInHierarchy(e.object)){let n=ch(e.object);if(n&&n.canvas?.screenspace)break;return this.setLookTargetPosition(e.point,t),!0}return!1}fitCamera(e,t){let n;if(Array.isArray(e)||e&&`type`in e?n=e:e&&typeof e==`object`&&!(e instanceof S)&&!Array.isArray(e)&&(t=e,n=t.objects),n&&!Array.isArray(n)&&(n=[n]),(!Array.isArray(n)||n&&n.length<=0)&&(n=this.context.scene.children),!Array.isArray(n)||n.length<=0){console.warn(`No objects to fit camera to...`);return}let r=Mm({objects:[...n],...t,autoApply:!1,context:this.context,camera:this._cameraObject,currentZoom:this._controls?.getDistance()||void 0,minZoom:this.minZoom,maxZoom:this.maxZoom});r&&(this.setLookTargetPosition(r.lookAt,t?.immediate||!1),this.setCameraTargetPosition(r.position,t?.immediate||!1),this.setFieldOfView(t?.fov,t?.immediate||!1),this.onBeforeRender())}_haveAttachedKeyboardEvents=!1};Y([F()],X.prototype,`autoTarget`,void 0),Y([F()],X.prototype,`autoFit`,void 0),Y([F()],X.prototype,`enableRotate`,void 0),Y([F()],X.prototype,`autoRotate`,void 0),Y([F()],X.prototype,`autoRotateSpeed`,void 0),Y([F()],X.prototype,`minAzimuthAngle`,void 0),Y([F()],X.prototype,`maxAzimuthAngle`,void 0),Y([F()],X.prototype,`minPolarAngle`,void 0),Y([F()],X.prototype,`maxPolarAngle`,void 0),Y([F()],X.prototype,`enableKeys`,void 0),Y([F()],X.prototype,`enableDamping`,void 0),Y([F()],X.prototype,`dampingFactor`,void 0),Y([F()],X.prototype,`enableZoom`,void 0),Y([F()],X.prototype,`minZoom`,void 0),Y([F()],X.prototype,`maxZoom`,void 0),Y([F()],X.prototype,`zoomSpeed`,void 0),Y([F()],X.prototype,`enablePan`,void 0),Y([F(S)],X.prototype,`lookAtTarget`,void 0),Y([F()],X.prototype,`lockLookAtTarget`,void 0),Y([F()],X.prototype,`lookAtConstraint01`,void 0),Y([F(Pm)],X.prototype,`lookAtConstraint`,void 0),Y([F()],X.prototype,`allowInterrupt`,void 0),Y([F()],X.prototype,`middleClickToFocus`,void 0),Y([F()],X.prototype,`doubleClickToFocus`,void 0),Y([F()],X.prototype,`clickBackgroundToFitScene`,void 0),Y([F()],X.prototype,`targetLerpDuration`,null),Y([F(S)],X.prototype,`targetBounds`,void 0);var Eh=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Dh;(function(e){e[e.None=0]=`None`,e[e.Skybox=1]=`Skybox`,e[e.SolidColor=2]=`SolidColor`,e[e.Uninitialized=4]=`Uninitialized`})(Dh||={});var Oh=A(`debugcam`),kh=A(`debugscreenpointtoray`),Z=class e extends K{get isCamera(){return!0}get aspect(){return this._cam instanceof C?this._cam.aspect:this.context.domWidth/this.context.domHeight}set aspect(e){this._cam instanceof C&&this._cam.aspect!==e&&(this._cam.aspect=e,this._cam.updateProjectionMatrix())}get fieldOfView(){return this._cam instanceof C?this._cam.fov:this._fov}set fieldOfView(e){let t=this.fieldOfView!=e;if(this._fov=e,t&&this._cam&&this._cam instanceof C){if(this._fov===void 0){console.warn(`Can not set undefined fov on PerspectiveCamera`);return}this._cam.fov=this._fov,this._cam.updateProjectionMatrix()}}get nearClipPlane(){return this._nearClipPlane}set nearClipPlane(e){let t=this._nearClipPlane!=e;this._nearClipPlane=e,this._cam&&(t||this._cam.near!=e)&&(this._cam.near=e,this._cam.updateProjectionMatrix())}_nearClipPlane=.1;get farClipPlane(){return this._farClipPlane}set farClipPlane(e){let t=this._farClipPlane!=e;this._farClipPlane=e,this._cam&&(t||this._cam.far!=e)&&(this._cam.far=e,this._cam.updateProjectionMatrix())}_farClipPlane=1e3;applyClippingPlane(){this._cam&&(this._cam.near=this._nearClipPlane,this._cam.far=this._farClipPlane,this._cam.updateProjectionMatrix())}get clearFlags(){return this._clearFlags}set clearFlags(e){if(typeof e==`string`)switch(e){case`skybox`:e=Dh.Skybox;break;case`solidcolor`:e=Dh.SolidColor;break;default:e=Dh.None;break}e!==this._clearFlags&&(this._clearFlags=e,this.applyClearFlagsIfIsActiveCamera())}orthographic=!1;orthographicSize=5;ARBackgroundAlpha=0;set cullingMask(e){this._cullingMask=e,this._cam&&(this._cam.layers.mask=e)}get cullingMask(){return this._cam?this._cam.layers.mask:this._cullingMask}_cullingMask=4294967295;set cullingLayer(e){this.cullingMask=(1<>>0}set backgroundBlurriness(e){e!==this._backgroundBlurriness&&(e===void 0?this._backgroundBlurriness=void 0:this._backgroundBlurriness=Math.min(Math.max(e,0),1),this.applyClearFlagsIfIsActiveCamera())}get backgroundBlurriness(){return this._backgroundBlurriness}_backgroundBlurriness=void 0;set backgroundIntensity(e){e!==this._backgroundIntensity&&(e===void 0?this._backgroundIntensity=void 0:this._backgroundIntensity=Math.min(Math.max(e,0),10),this.applyClearFlagsIfIsActiveCamera())}get backgroundIntensity(){return this._backgroundIntensity}_backgroundIntensity=void 0;set backgroundRotation(e){e!==this._backgroundRotation&&(e===void 0?this._backgroundRotation=void 0:this._backgroundRotation=e,this.applyClearFlagsIfIsActiveCamera())}get backgroundRotation(){return this._backgroundRotation}_backgroundRotation=void 0;set environmentIntensity(e){this._environmentIntensity=e}get environmentIntensity(){return this._environmentIntensity}_environmentIntensity=void 0;get backgroundColor(){return this._backgroundColor??null}set backgroundColor(e){e&&(this._backgroundColor||=new md(1,1,1,1),this._backgroundColor.copy(e),(!(`alpha`in e)||e.alpha===void 0)&&(this._backgroundColor.alpha=1),this.applyClearFlagsIfIsActiveCamera())}set targetTexture(e){this._targetTexture=e}get targetTexture(){return this._targetTexture}_targetTexture=null;_backgroundColor;_fov;_cam=null;_clearFlags=Dh.SolidColor;_skybox;get cam(){return this.threeCamera}get threeCamera(){return this.activeAndEnabled&&this.buildCamera(),this._cam}static _origin=new o;static _direction=new o;screenPointToRay(t,n,r){let i=this.threeCamera,a=e._origin;a.set(t,n,-1),this.context.input.convertScreenspaceToRaycastSpace(a),kh&&console.log(`screenPointToRay`,t.toFixed(2),n.toFixed(2),`now:`,a.x.toFixed(2),a.y.toFixed(2),`isInXR:`+this.context.isInXR),a.z=-1,a.unproject(i);let o=e._direction.set(a.x,a.y,a.z),s=Or(i);return o.sub(s),o.normalize(),r?(r.set(s,o),r):new p(s.clone(),o.clone())}_frustum;getFrustum(){return this._frustum||(this._frustum=new ge,this.updateFrustum()),this._frustum}updateFrustum(){this._frustum||=new ge,this._frustum.setFromProjectionMatrix(this.getProjectionScreenMatrix(this._projScreenMatrix,!0),this.context.renderer.coordinateSystem)}getProjectionScreenMatrix(e,t){return t&&this._projScreenMatrix.multiplyMatrices(this.threeCamera.projectionMatrix,this.threeCamera.matrixWorldInverse),e===this._projScreenMatrix?e:e.copy(this._projScreenMatrix)}_projScreenMatrix=new ce;awake(){kh&&window.addEventListener(`pointerdown`,e=>{let t=e.clientX,n=e.clientY;console.log(`touch`,t.toFixed(2),n.toFixed(2));let r=this.screenPointToRay(t,n),i=`#`+Math.floor(Math.random()*16777215).toString(16);H.DrawRay(r.origin,r.direction,i,10)})}onEnable(){Oh&&console.log(`Camera enabled: \"${this.name}\". ClearFlags=${Dh[this._clearFlags]}`,this),this.buildCamera(),(this.tag==`MainCamera`||!this.context.mainCameraComponent)&&(this.context.setCurrentCamera(this),jh(this)),this.applyClearFlagsIfIsActiveCamera({applySkybox:!0})}onDisable(){this.context.removeCamera(this)}onLeaveXR(e){this.fieldOfView=this._fov}onBeforeRender(){if(this._cam&&(this._frustum&&this.updateFrustum(),this._clearFlags===Dh.SolidColor&&this.applyClearFlagsIfIsActiveCamera(),this._targetTexture)){this.context.isManagedExternally&&(this._warnedAboutExternalRenderer||(this._warnedAboutExternalRenderer=!0,console.warn(`Rendering with external renderer is not supported yet. This may not work or throw errors. Please remove the the target texture from your camera: `+this.name,this.targetTexture))),this.context.composer;let e=this.context.renderer;if(e){let t=this.context.mainCameraComponent;this.applyClearFlags(),this._targetTexture.render(this.context.scene,this._cam,e),t?.applyClearFlags()}}}buildCamera(){if(this._cam)return;let e=this.gameObject.isCamera,t=null;if(e?(t=this.gameObject,t?.layers.enableAll(),t instanceof C&&(this._fov=t.fov)):t=this.gameObject.children[0],t&&t.isCamera)t instanceof C&&(this._fov&&(t.fov=this._fov),t.near=this._nearClipPlane,t.far=this._farClipPlane,t.updateProjectionMatrix());else if(!this.orthographic)t=new C(this.fieldOfView,window.innerWidth/window.innerHeight,this._nearClipPlane,this._farClipPlane),this.fieldOfView&&(t.fov=this.fieldOfView),this.gameObject.add(t);else{let e=this.orthographicSize*100;t=new ke(window.innerWidth/-e,window.innerWidth/e,window.innerHeight/e,window.innerHeight/-e,this._nearClipPlane,this._farClipPlane),this.gameObject.add(t)}this._cam=t,this._cam.layers.mask=this._cullingMask,this.tag==`MainCamera`&&this.context.setCurrentCamera(this)}applyClearFlagsIfIsActiveCamera(e){this.context.mainCameraComponent===this&&this.applyClearFlags(e)}applyClearFlags(t){if(!this._cam){Oh&&console.log(`Camera does not exist (apply clear flags)`);return}if(this.fieldOfView=this.fieldOfView,Oh){let e=`[Camera] Apply ClearFlags: ${Dh[this._clearFlags]} - \"${this.name}\"`;console.debug(e)}let n=this.context.domElement.getAttribute(`background-image`)||this.context.domElement.getAttribute(`background-color`);switch(this._clearFlags){case Dh.None:return;case Dh.Skybox:if(e.backgroundShouldBeTransparent(this.context)&&(!this.ARBackgroundAlpha||this.ARBackgroundAlpha<.001)){this.context.scene.background=null,this.context.renderer.setClearColor(0,0);return}(!this.scene.background||!this._skybox||t?.applySkybox===!0)&&this.applySceneSkybox(),this._backgroundBlurriness!==void 0&&!this.context.domElement.getAttribute(`background-blurriness`)?this.context.scene.backgroundBlurriness=this._backgroundBlurriness:Oh&&console.warn(`Camera \"${this.name}\" has no background blurriness`),this._backgroundIntensity!==void 0&&!this.context.domElement.getAttribute(`background-intensity`)&&(this.context.scene.backgroundIntensity=this._backgroundIntensity),this._backgroundRotation!==void 0&&!this.context.domElement.getAttribute(`background-rotation`)?this.context.scene.backgroundRotation=this._backgroundRotation:Oh&&console.warn(`Camera \"${this.name}\" has no background intensity`);break;case Dh.SolidColor:if(this._backgroundColor&&!n){let t=this._backgroundColor.alpha;e.backgroundShouldBeTransparent(this.context)&&(t=this.ARBackgroundAlpha??0),this.context.scene.background=null,this.context.xr?.isVR?this.context.renderer.setClearColor(Cr(this._backgroundColor).convertLinearToSRGB()):this.context.renderer.setClearColor(this._backgroundColor,t)}else this._backgroundColor||Oh&&console.warn(`[Camera] has no background color \"${this.name}\" `);break;case Dh.Uninitialized:n||(this.context.scene.background=null,this.context.renderer.setClearColor(0,0));break}}applySceneSkybox(){this._skybox||=new Ah(this),this._skybox.apply()}static backgroundShouldBeTransparent(e){let t=e.renderer.xr?.getSession();if(!t)return!1;if(typeof t._transparent==`boolean`)return t._transparent;let n=t.environmentBlendMode;Oh&&Ti(`Environment blend mode: `+n+` on `+navigator.userAgent);let r=n===`additive`||n===`alpha-blend`;if(e.isInAR&&n===`opaque`){if(navigator.userAgent?.includes(`OculusBrowser`))r=!0;else if(navigator.userAgent?.includes(`Mozilla`)&&navigator.userAgent?.includes(`Mobile WebXRViewer/v2`))r=!0;else if(j.isNeedleAppClip())return!0}return t._transparent=r,r}};Eh([F()],Z.prototype,`aspect`,null),Eh([F()],Z.prototype,`fieldOfView`,null),Eh([F()],Z.prototype,`nearClipPlane`,null),Eh([F()],Z.prototype,`farClipPlane`,null),Eh([F()],Z.prototype,`clearFlags`,null),Eh([F()],Z.prototype,`orthographic`,void 0),Eh([F()],Z.prototype,`orthographicSize`,void 0),Eh([F()],Z.prototype,`ARBackgroundAlpha`,void 0),Eh([F()],Z.prototype,`cullingMask`,null),Eh([F()],Z.prototype,`backgroundBlurriness`,null),Eh([F()],Z.prototype,`backgroundIntensity`,null),Eh([F(He)],Z.prototype,`backgroundRotation`,null),Eh([F()],Z.prototype,`environmentIntensity`,null),Eh([F(md)],Z.prototype,`backgroundColor`,null),Eh([F(ym)],Z.prototype,`targetTexture`,null);var Ah=class{_camera;_skybox;get context(){return this._camera?.context}constructor(e){this._camera=e}apply(){if(this._skybox=this.context.lightmaps.tryGetSkybox(this._camera.sourceId),!this._skybox)this._did_log_failed_to_find_skybox||(this._did_log_failed_to_find_skybox=!0,console.warn(`Camera \"${this._camera.name}\" has no skybox texture. ${this._camera.sourceId}`));else if(this.context.scene.background!==this._skybox){let e=this.context.domElement.getAttribute(`background-image`)||this.context.domElement.getAttribute(`background-color`);Oh&&console.debug(`[Camera] Apply Skybox ${this._skybox?.name} ${e} - \"${this._camera.name}\"`),e?.length||(this._skybox.mapping!==306&&(this._skybox.mapping=303),this.context.scene.background=this._skybox)}}};function jh(e){A(`freecam`)&&e.context.mainCameraComponent===e&&G.getOrAddComponent(e.gameObject,X)}var Mh=A(`debugshadowcomponents`);tt.prototype.interactable={get(){return this.interactive},set(e){this.interactable=e}};var Nh=class e extends K{isRoot(){return this.Root?.gameObject===this.gameObject}get canvas(){let e=this.Root;return e?.isCanvas?e:null}get Canvas(){return this.canvas}markDirty(){gh.markUIDirty(this.context)}get shadowComponent(){return this._shadowComponent}set shadowComponent(e){this._shadowComponent=e}_shadowComponent=null;_controlsChildLayout=!0;get controlsChildLayout(){return this._controlsChildLayout}set controlsChildLayout(e){this._controlsChildLayout=e,this.shadowComponent&&(this.shadowComponent.autoLayout=e)}_root=void 0;get Root(){return this._root===void 0&&(this._root=G.getComponentInParent(this.gameObject,Ph)),this._root}_parentComponent=void 0;__internalNewInstanceCreated(e){return super.__internalNewInstanceCreated(e),this.shadowComponent=null,this._root=void 0,this._parentComponent=void 0,this}onEnable(){super.onEnable()}addShadowComponent(t,n){if(!t)return;this.removeShadowComponent();let r=this.isRoot()?this.gameObject:this.gameObject.parent;if(this._parentComponent=G.getComponentInParent(r,e),!this._parentComponent){console.warn(`Component \"${this.name}\" doesn't have a UI parent anywhere. Do you have an UI element outside a Canvas? UI components must be a child of a Canvas component`,this);return}t.name=this.name+` (`+(this.constructor.name??`UI`)+`)`,t.autoLayout=this._parentComponent.controlsChildLayout,t[Yi]=this,this.setShadowComponentOwner(t);let i=!1;if(this.Root?.gameObject===this.gameObject)this.gameObject.add(t);else{let e=this._parentComponent.shadowComponent;e&&(e?.add(t),i=!0)}this.shadowComponent=t,n&&n.shadowComponent&&this.shadowComponent&&n.shadowComponent.add(this.shadowComponent),Jo&&t.add(new _e(.5)),this.onAfterAddedToScene(),i&&rt(),Mh&&console.warn(`Added shadow component`,this.shadowComponent)}setShadowComponentOwner(e){if(e&&(e[Yi]===void 0||e[Yi]===this)&&(e[Yi]=this,e.children))for(let t of e.children)this.setShadowComponentOwner(t)}traverseOwnedShadowComponents(e,t,n){if(e&&e[Yi]===t){n(e);for(let r of e.children)this.traverseOwnedShadowComponents(r,t,n)}}removeShadowComponent(){this.shadowComponent&&this.shadowComponent.removeFromParent()}onAfterAddedToScene(){}setInteractable(e){this.shadowComponent&&(this.shadowComponent.interactable=e)}},Ph=class extends Nh{awake(){super.awake()}},Fh=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ih=A(`debugui`),Lh=A(`debuguilayout`),Rh=class{width;height},zh=class{x;y;width;height},Bh=new o,Vh=new ce,Hh=new E,Uh=class e extends Nh{get parent(){return this._parentRectTransform}get translation(){return this.gameObject.position}get rotation(){return this.gameObject.quaternion}get scale(){return this.gameObject.scale}_anchoredPosition;get anchoredPosition(){return this._anchoredPosition||=new w,this._anchoredPosition}set anchoredPosition(e){this._anchoredPosition=e}sizeDelta=new w(100,100);pivot=new w(.5,.5);anchorMin=new w(0,0);anchorMax=new w(1,1);minWidth;minHeight;get width(){let e=this.sizeDelta.x;return this.anchorMin.x!==this.anchorMax.x&&this._parentRectTransform&&(e=this._parentRectTransform.width*(this.anchorMax.x-this.anchorMin.x),e+=this.sizeDelta.x),this.minWidth!==void 0&&e{this.markDirty()}),dh(this,`sizeDelta`,()=>{this.markDirty()}),dh(this,`pivot`,()=>{this.markDirty()}),dh(this,`anchorMin`,()=>{this.markDirty()}),dh(this,`anchorMax`,()=>{this.markDirty()})}onEnable(){super.onEnable(),this.rectBlock||=new S,this.lastMatrix||=new ce,this._lastAnchoring||=new w,this._initialPosition||=new o,this._anchoredPosition||=new w,this.addShadowComponent(this.rectBlock),this._transformNeedsUpdate=!0,this.canvas?.registerTransform(this)}onDisable(){super.onDisable(),this.removeShadowComponent(),this.canvas?.unregisterTransform(this)}onParentRectTransformChanged(e){this._transformNeedsUpdate||this.onApplyTransform(Lh?`${e.name} changed`:void 0)}get isDirty(){return this._transformNeedsUpdate||=!this.lastMatrix.equals(this.gameObject.matrix),this._transformNeedsUpdate}markDirty(){this._transformNeedsUpdate||(Lh&&console.warn(`RectTransform markDirty()`,this.name),this._transformNeedsUpdate=!0,this._lastUpdateFrame=-1)}updateTransform(){(this._transformNeedsUpdate||!this.lastMatrix.equals(this.gameObject.matrix))&&this.canUpdate()&&this.onApplyTransform(this._transformNeedsUpdate?`Marked dirty`:`Matrix changed`)}canUpdate(){return this._transformNeedsUpdate&&this.activeAndEnabled&&this._lastUpdateFrame!==this.context.time.frame}onApplyTransform(t){if(this.context.time.frameCount===this._lastUpdateFrame)return;this._lastUpdateFrame=this.context.time.frameCount;let n=this.shadowComponent;if(n){this.gameObject.parent?this._parentRectTransform=G.getComponentInParent(this.gameObject.parent,e):this._parentRectTransform=void 0,this._transformNeedsUpdate=!1,Lh&&console.warn(`RectTransform → ApplyTransform`,this.name+` because `+t),this.isRoot()?this.Root.screenspace||(n.rotation.y=Math.PI):(n.matrix.identity(),n.matrixAutoUpdate=!1,Bh.set(0,0,0),this.applyPivot(Bh),n.matrix.setPosition(Bh.x,Bh.y,0),(this.gameObject.quaternion.x||this.gameObject.quaternion.y||this.gameObject.quaternion.z)&&(Hh.copy(this.gameObject.quaternion),Hh.x*=-1,Hh.z*=-1,Vh.makeRotationFromQuaternion(Hh),n.matrix.premultiply(Vh)),Bh.set(0,0,0),this.applyAnchoring(Bh),this.canvas?.screenspace?Bh.z+=.1:Bh.z+=.01,Vh.identity(),Vh.setPosition(Bh.x,Bh.y,Bh.z),n.matrix.premultiply(Vh),n.matrix.scale(this.gameObject.scale)),this.lastMatrix.copy(this.gameObject.matrix);for(let e of Hf(this.gameObject,Nh,!0,1)){if(e===this||!e.activeAndEnabled)continue;let t=e;t.onParentRectTransformChanged&&t.onParentRectTransformChanged(this)}}}_lastAnchoring;applyAnchoring(e){this._lastAnchoring||=new w;let t=this._lastAnchoring.sub(this._anchoredPosition);this.gameObject.position.x+=t.x,this.gameObject.position.y+=t.y,this._lastAnchoring.copy(this._anchoredPosition),e.x+=this._initialPosition.x-this.gameObject.position.x,e.y+=this._initialPosition.y-this.gameObject.position.y,e.z+=this._initialPosition.z-this.gameObject.position.z;let n=this._parentRectTransform;if(n){let t=0,r=1-this.anchorMax.y-this.anchorMin.y;t-=n.height*.5*r,e.y+=t;let i=0,a=1-this.anchorMax.x-this.anchorMin.x;i-=n.width*.5*a,e.x+=i}}applyPivot(e){if(this.pivot&&!this.isRoot()){let t=this.pivot.x-.5;e.x-=t*this.sizeDelta.x*this.gameObject.scale.x;let n=this.pivot.y-.5;e.y-=n*this.sizeDelta.y*this.gameObject.scale.y}}getBasicOptions(){let e={width:this.sizeDelta.x,height:this.sizeDelta.y,offset:0,backgroundOpacity:0,borderWidth:0,borderRadius:0,borderOpacity:0,letterSpacing:-.03};return this.ensureValidSize(e),e}ensureValidSize(e,t=1e-4){return e.width<=0&&(e.width=t),e.height<=0&&(e.height=1e-4),e}_createdBlocks=[];_createdTextBlocks=[];createNewBlock(e){e={...this.getBasicOptions(),...e},Ih&&console.log(this.name,e);let t=new tt(e);return this._createdBlocks.push(t),t}createNewText(e){Ih&&console.log(e),e={...this.getBasicOptions(),...e},Ih&&console.log(this.name,e);let t=new Qe(e);return this._createdTextBlocks.push(t),t}};Fh([F(w)],Uh.prototype,`anchoredPosition`,null),Fh([F(w)],Uh.prototype,`sizeDelta`,void 0),Fh([F(w)],Uh.prototype,`pivot`,void 0),Fh([F(w)],Uh.prototype,`anchorMin`,void 0),Fh([F(w)],Uh.prototype,`anchorMax`,void 0);var Wh=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Gh=class extends K{effectColor;effectDistance};Wh([F(md)],Gh.prototype,`effectColor`,void 0),Wh([F(w)],Gh.prototype,`effectDistance`,void 0);var Kh=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},qh={backgroundColor:new a(1,1,1),backgroundOpacity:1,borderColor:new a(1,1,1),borderOpacity:1},Jh=class e extends Nh{get isGraphic(){return!0}get color(){return this._color||=new md(1,1,1,1),this._color}set color(e){(!this._color||this._color.r!==e.r||this._color.g!==e.g||this._color.b!==e.b||this._color.alpha!==e.alpha)&&(this._color||=new md(1,1,1,1),this._color.copy(e),this.onColorChanged())}_alphaFactor=1;setAlphaFactor(e){this._alphaFactor=e,this.onColorChanged()}get alphaFactor(){return this._alphaFactor}sRGBColor=new a(1,0,1);onColorChanged(){if(this.uiObject){this.sRGBColor.copy(this._color),this.sRGBColor.convertLinearToSRGB(),qh.backgroundColor=this.sRGBColor,qh.backgroundOpacity=this._color.alpha;let e=this.uiObject._simpleState__activeStates?.[0];if(e){let t=this.uiObject._simpleState__states?.[e];t&&(`backgroundColor`in t&&(qh.backgroundColor=t.backgroundColor),`backgroundOpacity`in t&&(qh.backgroundOpacity=t.backgroundOpacity))}qh.backgroundOpacity*=this._alphaFactor,this.applyEffects(qh,this._alphaFactor),this.uiObject.set(qh),this.markDirty()}}get m_Color(){return this._color}raycastTarget=!0;uiObject=null;_color=null;_rect=null;_stateManager=null;get rectTransform(){if(this._rect||=G.getComponent(this.gameObject,Uh),!this._rect)throw Error(`Not Supported: Make sure to add a RectTransform component before adding a UI Graphic component.`);return this._rect}onParentRectTransformChanged(){this.uiObject?.set({width:this.rectTransform.width,height:this.rectTransform.height}),this.markDirty()}__internalNewInstanceCreated(e){return super.__internalNewInstanceCreated(e),this._rect=null,this.uiObject=null,this._stateManager=null,this._color&&=this._color.clone(),this}setState(e){this.makePanel(),this.uiObject&&(this.uiObject.setState(e),this?.markDirty())}setupState(e){this.makePanel(),this.uiObject&&(this._stateManager||=new it(this.uiObject),this.uiObject.setupState(e.state,e.attributes))}setOptions(e){this.makePanel(),this.uiObject&&this.uiObject.set(e)}awake(){super.awake(),this.makePanel(),dh(this,`_color`,()=>ph(this,this.onColorChanged))}onEnable(){super.onEnable(),this.uiObject&&(this.rectTransform.shadowComponent?.add(this.uiObject),this.addShadowComponent(this.uiObject,this.rectTransform))}onDisable(){super.onDisable(),this.uiObject&&this.removeShadowComponent()}_currentlyCreatingPanel=!1;makePanel(){if(this.uiObject||this._currentlyCreatingPanel)return;this._currentlyCreatingPanel=!0;let e={backgroundColor:this.color,backgroundOpacity:this.color.alpha,offset:.015};this.onBeforeCreate(e),this.applyEffects(e),this.onCreate(e),this.controlsChildLayout=!1,this._currentlyCreatingPanel=!1,this.onAfterCreated(),this.onColorChanged()}onBeforeCreate(e){}onCreate(e){this.uiObject=this.rectTransform.createNewBlock(e),this.uiObject.name=this.name}onAfterCreated(){}applyEffects(e,t=1){let n=this.gameObject?.getComponent(Gh);n&&(n.effectDistance&&(e.borderWidth=Math.max(Math.abs(n.effectDistance.x),Math.abs(n.effectDistance.y))),n.effectColor&&(e.borderColor=n.effectColor,e.borderOpacity=n.effectColor.alpha*t))}static textureCache=new Map;async setTexture(t){if(this.setOptions({backgroundOpacity:0}),t){if(e.textureCache.has(t))t=e.textureCache.get(t);else if(!t.isRenderTargetTexture){let n=t.clone();n.colorSpace=l,e.textureCache.set(t,n),t=n}this.setOptions({backgroundImage:t,borderRadius:0,backgroundOpacity:this.color.alpha,backgroundSize:`stretch`}),vt.assignTextureLOD(t,0).then(n=>{n instanceof be&&(t&&e.textureCache.set(t,n),this.setOptions({backgroundImage:n}),this.markDirty())})}else this.setOptions({backgroundImage:void 0,borderRadius:0,backgroundOpacity:this.color.alpha});this.markDirty()}onAfterAddedToScene(){super.onAfterAddedToScene(),this.shadowComponent&&(this.shadowComponent.offset=this.shadowComponent.position.z)}};Kh([F(md)],Jh.prototype,`color`,null),Kh([F()],Jh.prototype,`raycastTarget`,void 0);var Yh=class extends Jh{_flippedObject=!1;onAfterCreated(){this.uiObject&&!this._flippedObject&&(this._flippedObject=!0,this.uiObject.scale.y*=-1)}},Xh=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Zh=A(`debugtext`),Q;(function(e){e[e.UpperLeft=0]=`UpperLeft`,e[e.UpperCenter=1]=`UpperCenter`,e[e.UpperRight=2]=`UpperRight`,e[e.MiddleLeft=3]=`MiddleLeft`,e[e.MiddleCenter=4]=`MiddleCenter`,e[e.MiddleRight=5]=`MiddleRight`,e[e.LowerLeft=6]=`LowerLeft`,e[e.LowerCenter=7]=`LowerCenter`,e[e.LowerRight=8]=`LowerRight`})(Q||={});var Qh;(function(e){e[e.Truncate=0]=`Truncate`,e[e.Overflow=1]=`Overflow`})(Qh||={});var $h;(function(e){e[e.Wrap=0]=`Wrap`,e[e.Overflow=1]=`Overflow`})($h||={});var eg;(function(e){e[e.Normal=0]=`Normal`,e[e.Bold=1]=`Bold`,e[e.Italic=2]=`Italic`,e[e.BoldAndItalic=3]=`BoldAndItalic`})(eg||={});var tg=class extends Jh{alignment=Q.UpperLeft;verticalOverflow=Qh.Truncate;horizontalOverflow=$h.Wrap;lineSpacing=1;supportRichText=!1;font;fontStyle=eg.Normal;setAlphaFactor(e){super.setAlphaFactor(e),this.uiObject?.set({fontOpacity:this.color.alpha*this.alphaFactor}),this.markDirty()}get text(){return this._text}set text(e){e!==this._text&&(this._text=e,this.feedText(this.text,this.supportRichText),this.markDirty(),this.context.accessibility.updateElement(this,{label:this.text}))}set_text(e){this.text=e}get fontSize(){return this._fontSize}set fontSize(e){this._fontSize=e,this.uiObject?.set({fontSize:e})}sRGBTextColor=new a(1,0,1);onColorChanged(){this.sRGBTextColor.copy(this.color),this.sRGBTextColor.convertLinearToSRGB(),this.uiObject?.set({color:this.sRGBTextColor,fontOpacity:this.color.alpha})}onParentRectTransformChanged(){super.onParentRectTransformChanged(),this.uiObject&&this.updateOverflow()}onBeforeCanvasRender(e){this.updateOverflow()}updateOverflow(){let e=this.uiObject?._overflow;e&&(e._needsUpdate=!0)}onCreate(e){Zh&&console.log(this),this.horizontalOverflow==$h.Overflow&&(e.whiteSpace=`pre`),this.verticalOverflow==Qh.Truncate&&(this.context.renderer.localClippingEnabled=!0,e.overflow=`hidden`),this.horizontalOverflow==$h.Overflow&&(this.verticalOverflow,Qh.Truncate),e.lineHeight=this.lineSpacing,delete e.backgroundOpacity,delete e.backgroundColor,Zh&&(e.backgroundColor=16750848,e.backgroundOpacity=.5);let t=this.rectTransform;e={...e,...this.getTextOpts()},this.getAlignment(e),Zh&&(e.backgroundColor=Math.random()*16777215,e.backgroundOpacity=.1),this.uiObject=t.createNewText(e),this.feedText(this.text,this.supportRichText)}onAfterAddedToScene(){super.onAfterAddedToScene(),this.handleTextRenderOnTop()}_text=``;_fontSize=12;_textMeshUi=null;getTextOpts(){let e=this.fontSize,t={color:this.color,fontOpacity:this.color.alpha,fontSize:e,fontKerning:`normal`};return this.setFont(t,this.fontStyle),t}onEnable(){super.onEnable(),this.context.accessibility.updateElement(this,{role:`text`,label:this.text,hidden:!1}),this._didHandleTextRenderOnTop=!1,this.uiObject&&this.uiObject.addAfterUpdate(()=>{this.setShadowComponentOwner(this.uiObject),this.markDirty()}),setTimeout(()=>this.markDirty(),10),this.canvas?.registerEventReceiver(this)}onDisable(){super.onDisable(),this.canvas?.unregisterEventReceiver(this),this.context.accessibility.updateElement(this,{hidden:!0})}onDestroy(){super.onDestroy(),this.context.accessibility.removeElement(this)}getAlignment(e){switch(e.flexDirection=`column`,this.alignment){case Q.UpperLeft:case Q.MiddleLeft:case Q.LowerLeft:e.textAlign=`left`;break;case Q.UpperCenter:case Q.MiddleCenter:case Q.LowerCenter:e.textAlign=`center`;break;case Q.UpperRight:case Q.MiddleRight:case Q.LowerRight:e.textAlign=`right`;break}switch(this.alignment){default:case Q.UpperLeft:case Q.UpperCenter:case Q.UpperRight:e.alignItems=`start`;break;case Q.MiddleLeft:case Q.MiddleCenter:case Q.MiddleRight:e.alignItems=`center`;break;case Q.LowerLeft:case Q.LowerCenter:case Q.LowerRight:e.alignItems=`end`;break}return e}feedText(e,t){if(Zh&&console.log(`feedText`,this.uiObject,e,t),this.uiObject)if(this._textMeshUi||=[],this.uiObject.children.length=0,!t||e.length===0)this.uiObject.textContent=e;else{let t=this.getNextTag(e);if(!t){this.uiObject.textContent=``,this.setOptions({textContent:e});return}else if(t.startIndex>0){for(let e=this.uiObject.children.length-1;e>=0;e--){let t=this.uiObject.children[e];t.isUI&&(this.uiObject.remove(t),t.clear())}let n=new et({textContent:e.substring(0,t.startIndex),color:`inherit`});this.uiObject.add(n)}let n=[];for(;t;){let r=this.getNextTag(e,t.endIndex),i={fontFamily:this.uiObject?.get(`fontFamily`),color:`inherit`,textContent:``};if(r){i.textContent=this.getText(e,t,r),this.handleTag(t,i,n);let a=new et(i);this.uiObject?.add(a)}else{i.textContent=e.substring(t.endIndex),this.handleTag(t,i,n);let r=new et(i);this.uiObject?.add(r)}t=r}}}_didHandleTextRenderOnTop=!1;handleTextRenderOnTop(){this._didHandleTextRenderOnTop||(this._didHandleTextRenderOnTop=!0,this.startCoroutine(this.renderOnTopCoroutine()))}*renderOnTopCoroutine(){if(!this.canvas)return;let e=[],t=this.canvas,n={renderOnTop:t.renderOnTop,depthWrite:t.depthWrite,doubleSided:t.doubleSided};for(;;){let t=!1;if(this._textMeshUi)for(let r=0;r6?t.color=parseInt(`0x`+e.type.substring(7)):t.color=new a(1,1,1)}else if(e.type==`b`){this.setFont(t,eg.Bold);let r=new ng(e,{fontWeight:700});n.push(r)}else if(e.type==`i`){this.setFont(t,eg.Italic);let r=new ng(e,{fontStyle:`italic`});n.push(r)}}}getText(e,t,n){return e.substring(t.endIndex,n.startIndex)}getNextTag(e,t=0){let n=e.indexOf(`<`,t),r=e.indexOf(`>`,n);if(n>=0&&r>=0){let t=e.substring(n+1,r);return{type:t,startIndex:n,endIndex:r+1,isEndTag:t.startsWith(`/`)}}return null}setFont(e,t){if(!this.font)return;let n=this.font,r=this.getFamilyNameWithCorrectSuffix(n,t);Zh&&console.log(`Selected font family:`+r);let i=nt.getFontFamily(r);switch(i||=nt.addFontFamily(r),e.fontFamily=i,t){default:case eg.Normal:e.fontWeight=400,e.fontStyle=`normal`;break;case eg.Bold:e.fontWeight=700,e.fontStyle=`normal`;break;case eg.Italic:e.fontWeight=400,e.fontStyle=`italic`;break;case eg.BoldAndItalic:e.fontStyle=`italic`,e.fontWeight=400}let a=i.getVariant(e.fontWeight,e.fontStyle);if(!a){let t=r;t?.endsWith(`-msdf.json`)||(t+=`-msdf.json`);let n=r;n?.endsWith(`.png`)||(n+=`.png`),a=i.addVariant(e.fontWeight,e.fontStyle,t,n),a?.addEventListener(`ready`,()=>{this.markDirty()})}}getFamilyNameWithCorrectSuffix(e,t){(e.startsWith(`https:`)||e.startsWith(`http:`))&&(e=new URL(e).pathname);let n=e.lastIndexOf(`-`);if(n<0)return e;let r=e.substring(n+1)?.toLowerCase();if(rg.includes(r))return Zh&&console.warn(`Unsupported font style: `+r),e;let i=e.lastIndexOf(`/`),a=e;i>=0&&(a=a.substring(i+1));let o=a[0]===a[0].toUpperCase(),s=e.substring(0,n>i?n:e.length);switch(Zh&&console.log(`Select font: `,e,eg[t],a,o,s),t){case eg.Normal:return o?s+`-Regular`:s+`-regular`;case eg.Bold:return o?s+`-Bold`:s+`-bold`;case eg.Italic:return o?s+`-Italic`:s+`-italic`;case eg.BoldAndItalic:return o?s+`-BoldItalic`:s+`-bolditalic`;default:return e}}};Xh([F()],tg.prototype,`alignment`,void 0),Xh([F()],tg.prototype,`verticalOverflow`,void 0),Xh([F()],tg.prototype,`horizontalOverflow`,void 0),Xh([F()],tg.prototype,`lineSpacing`,void 0),Xh([F()],tg.prototype,`supportRichText`,void 0),Xh([F(URL)],tg.prototype,`font`,void 0),Xh([F()],tg.prototype,`fontStyle`,void 0),Xh([F()],tg.prototype,`text`,null),Xh([F()],tg.prototype,`fontSize`,null);var ng=class{tag;previousValues;constructor(e,t){this.tag=e,this.previousValues=t}},rg=[`medium`,`mediumitalic`,`black`,`blackitalic`,`thin`,`thinitalic`,`extrabold`,`light`,`lightitalic`,`semibold`],$=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ig=A(`debuguilayout`),ag=class{left=0;right=0;top=0;bottom=0;get vertical(){return this.top+this.bottom}get horizontal(){return this.left+this.right}};$([F()],ag.prototype,`left`,void 0),$([F()],ag.prototype,`right`,void 0),$([F()],ag.prototype,`top`,void 0),$([F()],ag.prototype,`bottom`,void 0);var og;(function(e){e[e.UpperLeft=0]=`UpperLeft`,e[e.UpperCenter=1]=`UpperCenter`,e[e.UpperRight=2]=`UpperRight`,e[e.MiddleLeft=3]=`MiddleLeft`,e[e.MiddleCenter=4]=`MiddleCenter`,e[e.MiddleRight=5]=`MiddleRight`,e[e.LowerLeft=6]=`LowerLeft`,e[e.LowerCenter=7]=`LowerCenter`,e[e.LowerRight=8]=`LowerRight`,e[e.Custom=9]=`Custom`})(og||={});var sg;(function(e){e.Horizontal=`x`,e.Vertical=`y`})(sg||={});var cg=class extends K{_rectTransform=null;get rectTransform(){return this._rectTransform}onParentRectTransformChanged(e){this._needsUpdate=!0}_needsUpdate=!1;get isDirty(){return this._needsUpdate}get isLayoutGroup(){return!0}updateLayout(){this._rectTransform&&(ig&&console.warn(`Layout Update`,this.context.time.frame,this.name),this._needsUpdate=!1,this.onCalculateLayout(this._rectTransform))}childAlignment=og.UpperLeft;reverseArrangement=!1;spacing=0;padding;minWidth=0;minHeight=0;flexibleHeight=0;flexibleWidth=0;preferredHeight=0;preferredWidth=0;start(){this._needsUpdate=!0}onEnable(){ig&&console.log(this.name,this),this._rectTransform=this.gameObject.getComponent(Uh);let e=this.gameObject.getComponentInParent(gg);e&&e.registerLayoutGroup(this),this._needsUpdate=!0}onDisable(){let e=this.gameObject.getComponentInParent(gg);e&&e.unregisterLayoutGroup(this)}set m_Spacing(e){e!==this.spacing&&(this._needsUpdate=!0,this.spacing=e)}get m_Spacing(){return this.spacing}};$([F()],cg.prototype,`childAlignment`,void 0),$([F()],cg.prototype,`reverseArrangement`,void 0),$([F()],cg.prototype,`spacing`,void 0),$([F(ag)],cg.prototype,`padding`,void 0),$([F()],cg.prototype,`minWidth`,void 0),$([F()],cg.prototype,`minHeight`,void 0),$([F()],cg.prototype,`flexibleHeight`,void 0),$([F()],cg.prototype,`flexibleWidth`,void 0),$([F()],cg.prototype,`preferredHeight`,void 0),$([F()],cg.prototype,`preferredWidth`,void 0);var lg=class extends cg{childControlHeight=!0;childControlWidth=!0;childForceExpandHeight=!1;childForceExpandWidth=!1;childScaleHeight=!1;childScaleWidth=!1;onCalculateLayout(e){let t=this.primaryAxis,n=e.width,r=n,i=e.height,a=i;r-=this.padding.horizontal,a-=this.padding.vertical,t===sg.Horizontal?this.padding.horizontal:this.padding.vertical;let o=t===sg.Horizontal,s=o?`y`:`x`,c=o?this.childControlWidth:this.childControlHeight,l=o?this.childControlHeight:this.childControlWidth,u=o?this.childForceExpandWidth:this.childForceExpandHeight,d=o?this.childForceExpandHeight:this.childForceExpandWidth,f=o?a:r,p=o?n:i,m=.5*(o?this.childAlignment%3:Math.floor(this.childAlignment/3)),h=0;o?h+=this.padding.left:h+=this.padding.top;let g=0,_=0;for(let e=0;e0&&(v=e/_)}let y=0;y+=this.padding.left,y-=this.padding.right,m!==0&&(h=p-g,h*=m,h-=ee*m,o?(h-=this.padding.right*m,h+=this.padding.left*(1-m),hh&&(h=e-v*.5+p+this.padding.left,h-=m)}let g=h;t===sg.Vertical&&(g=-g),a.anchoredPosition[t]!==g&&(a.anchoredPosition[t]=g),h+=m,h+=this.spacing,b+=1}}}};$([F()],lg.prototype,`childControlHeight`,void 0),$([F()],lg.prototype,`childControlWidth`,void 0),$([F()],lg.prototype,`childForceExpandHeight`,void 0),$([F()],lg.prototype,`childForceExpandWidth`,void 0),$([F()],lg.prototype,`childScaleHeight`,void 0),$([F()],lg.prototype,`childScaleWidth`,void 0);var ug=class extends lg{get primaryAxis(){return sg.Vertical}},dg=class extends lg{get primaryAxis(){return sg.Horizontal}},fg=class extends cg{onCalculateLayout(){}},pg=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},mg;(function(e){e[e.ScreenSpaceOverlay=0]=`ScreenSpaceOverlay`,e[e.ScreenSpaceCamera=1]=`ScreenSpaceCamera`,e[e.WorldSpace=2]=`WorldSpace`,e[e.Undefined=-1]=`Undefined`})(mg||={});var hg=A(`debuguilayout`),gg=class e extends Ph{get isCanvas(){return!0}get screenspace(){return this.renderMode!==mg.WorldSpace}set renderOnTop(e){e!==this._renderOnTop&&(this._renderOnTop=e,this.onRenderSettingsChanged())}get renderOnTop(){return this._renderOnTop===void 0?!!(this.screenspace&&this._renderMode===mg.ScreenSpaceOverlay):this._renderOnTop}_renderOnTop;set depthWrite(e){this._depthWrite!==e&&(this._depthWrite=e,this.onRenderSettingsChanged())}get depthWrite(){return this._depthWrite}_depthWrite=!1;set doubleSided(e){this._doubleSided!==e&&(this._doubleSided=e,this.onRenderSettingsChanged())}get doubleSided(){return this._doubleSided}_doubleSided=!0;set castShadows(e){this._castShadows!==e&&(this._castShadows=e,this.onRenderSettingsChanged())}get castShadows(){return this._castShadows}_castShadows=!1;set receiveShadows(e){this._receiveShadows!==e&&(this._receiveShadows=e,this.onRenderSettingsChanged())}get receiveShadows(){return this._receiveShadows}_receiveShadows=!1;get renderMode(){return this._renderMode}set renderMode(e){this._renderMode!==e&&(this._renderMode=e,this.onRenderSettingsChanged())}_renderMode=mg.Undefined;_rootCanvas;set rootCanvas(t){this._rootCanvas instanceof e||(this._rootCanvas=t)}get rootCanvas(){return this._rootCanvas}_scaleFactor=1;get scaleFactor(){return this._scaleFactor}set scaleFactor(e){this._scaleFactor=e}worldCamera;planeDistance=-1;awake(){this.shadowComponent=this.gameObject,this.previousParent=this.gameObject.parent,hg&&console.log(`Canvas.Awake()`,this.previousParent?.name+`/`+this.gameObject.name),super.awake()}start(){this.applyRenderSettings()}onEnable(){super.onEnable(),this._updateRenderSettingsRoutine=void 0,this._lastMatrixWorld=new ce,this.applyRenderSettings(),document.addEventListener(`resize`,this._boundRenderSettingsChanged),this.context.pre_render_callbacks.push(this.onBeforeRenderRoutine),this.context.post_render_callbacks.push(this.onAfterRenderRoutine)}onDisable(){super.onDisable(),document.removeEventListener(`resize`,this._boundRenderSettingsChanged);let e=this.context.pre_render_callbacks.indexOf(this.onBeforeRenderRoutine);e!==-1&&this.context.pre_render_callbacks.splice(e,1);let t=this.context.post_render_callbacks.indexOf(this.onAfterRenderRoutine);t!==-1&&this.context.post_render_callbacks.splice(t,1)}_boundRenderSettingsChanged=this.onRenderSettingsChanged.bind(this);previousParent=null;_lastMatrixWorld=null;_rectTransforms=[];registerTransform(e){this._rectTransforms.push(e)}unregisterTransform(e){let t=this._rectTransforms.indexOf(e);t!==-1&&this._rectTransforms.splice(t,1)}_layoutGroups=new Map;registerLayoutGroup(e){let t=e.gameObject;this._layoutGroups.set(t,e)}unregisterLayoutGroup(e){let t=e.gameObject;this._layoutGroups.delete(t)}_receivers=[];registerEventReceiver(e){this._receivers.push(e)}unregisterEventReceiver(e){let t=this._receivers.indexOf(e);t!==-1&&this._receivers.splice(t,1)}async onEnterXR(e){this.screenspace?(e.xr.isVR||e.xr.isPassThrough)&&(this.gameObject.visible=!1):(this.gameObject.visible=!1,await qt(1).then(()=>{this.gameObject.visible=!0}))}onLeaveXR(e){this.screenspace&&(e.xr.isVR||e.xr.isPassThrough)&&(this.gameObject.visible=!0)}onBeforeRenderRoutine=()=>{if(this.previousParent=this.gameObject.parent,(this.context.xr?.isVR||this.context.xr?.isPassThrough)&&this.screenspace){this.gameObject.visible=!1,this.gameObject.removeFromParent();return}this.renderOnTop||this.screenspace?this.gameObject.removeFromParent():(this.onUpdateRenderMode(),this.handleLayoutUpdates(),this.shadowComponent?.updateMatrixWorld(!0),this.shadowComponent?.updateWorldMatrix(!0,!0),this.invokeBeforeRenderEvents(),gh.ensureUpdateMeshUI($e,this.context))};onAfterRenderRoutine=()=>{if((this.context.xr?.isVR||this.context.xr?.isPassThrough)&&this.screenspace){this.previousParent?.add(this.gameObject);return}if((this.screenspace||this.renderOnTop)&&this.previousParent&&this.context.mainCamera){this.screenspace?this.context.mainCamera?.add(this.gameObject):this.previousParent.add(this.gameObject);let e=this.context.renderer.autoClear,t=this.context.renderer.autoClearColor;this.context.renderer.autoClear=!1,this.context.renderer.autoClearColor=!1,this.context.renderer.clearDepth(),this.onUpdateRenderMode(!0),this.handleLayoutUpdates(),this.shadowComponent?.updateMatrixWorld(!0),this.invokeBeforeRenderEvents(),gh.ensureUpdateMeshUI($e,this.context,!0),this.context.renderer.render(this.gameObject,this.context.mainCamera),this.context.renderer.autoClear=e,this.context.renderer.autoClearColor=t,this.previousParent.add(this.gameObject)}this._lastMatrixWorld?.copy(this.gameObject.matrixWorld)};invokeBeforeRenderEvents(){for(let e of this._receivers)e.onBeforeCanvasRender?.(this)}handleLayoutUpdates(){this._lastMatrixWorld===null&&(this._lastMatrixWorld=new ce);let e=!this._lastMatrixWorld.equals(this.gameObject.matrixWorld);hg&&e&&console.log(`Canvas Layout changed`,this.context.time.frameCount,this.name);for(let t of this._rectTransforms){e&&t.markDirty();let n=this._layoutGroups.get(t.gameObject);t.isDirty&&!n&&(n=t.gameObject.getComponentInParent(cg)),(t.isDirty||n?.isDirty)&&(hg&&console.log(`CANVAS UPDATE ### `+t.name+` ##################################### `+this.context.time.frame),n?.updateLayout(),t.updateTransform())}}applyRenderSettings(){this.onRenderSettingsChanged()}_updateRenderSettingsRoutine;onRenderSettingsChanged(){this._updateRenderSettingsRoutine||=this.startCoroutine(this._updateRenderSettingsDelayed(),z.OnBeforeRender)}*_updateRenderSettingsDelayed(){if(yield,this._updateRenderSettingsRoutine=void 0,this.shadowComponent){this.onUpdateRenderMode(),uh(this.shadowComponent,this);for(let e of G.getComponentsInChildren(this.gameObject,Nh))uh(e.shadowComponent,this)}}_activeRenderMode=-1;_lastWidth=-1;_lastHeight=-1;onUpdateRenderMode(e=!1){if(!e&&this._renderMode===this._activeRenderMode&&this._lastWidth===this.context.domWidth&&this._lastHeight===this.context.domHeight)return;this._activeRenderMode=this._renderMode;let t=this.context.mainCameraComponent,n=10;switch(t&&t.nearClipPlane>0&&t.farClipPlane>0&&(n=N.lerp(t.nearClipPlane,t.farClipPlane,.01)),this._renderMode===mg.ScreenSpaceCamera&&(this.worldCamera&&(t=this.worldCamera),this.planeDistance>0&&(n=this.planeDistance)),this._renderMode){case mg.ScreenSpaceOverlay:case mg.ScreenSpaceCamera:if(this._lastWidth=this.context.domWidth,this._lastHeight=this.context.domHeight,!t)return;let e=n+.01;this.gameObject.position.x=0,this.gameObject.position.y=0,this.gameObject.position.z=-e,this.gameObject.quaternion.identity();let r=this.gameObject.getComponent(Uh),i=!1;r.sizeDelta.x!==this.context.domWidth&&(i=!0),r.sizeDelta.y!==this.context.domHeight&&(i=!0);let a=t.fieldOfView*Math.PI/180,o=2*Math.tan(a/2)*Math.abs(e);this.gameObject.scale.x=o/this.context.domHeight,this.gameObject.scale.y=o/this.context.domHeight,this.gameObject.scale.z=.01,i&&(r.sizeDelta.x=this.context.domWidth,r.sizeDelta.y=this.context.domHeight,r?.markDirty());break;case mg.WorldSpace:this._lastWidth=-1,this._lastHeight=-1;break}}};pg([F()],gg.prototype,`renderOnTop`,null),pg([F()],gg.prototype,`depthWrite`,null),pg([F()],gg.prototype,`doubleSided`,null),pg([F()],gg.prototype,`castShadows`,null),pg([F()],gg.prototype,`receiveShadows`,null),pg([F()],gg.prototype,`renderMode`,null),pg([F(gg)],gg.prototype,`rootCanvas`,null),pg([F()],gg.prototype,`scaleFactor`,null),pg([F(Z)],gg.prototype,`worldCamera`,void 0),pg([F()],gg.prototype,`planeDistance`,void 0);var _g=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},vg=class extends K{get alpha(){return this._alpha}set alpha(e){e!==this._alpha&&(this._alpha=e,this.markDirty())}get isCanvasGroup(){return!0}_alpha=1;interactable=!0;blocksRaycasts=!0;_isDirty=!1;markDirty(){this._isDirty||(this._isDirty=!0,this.startCoroutine(this.applyChangesDelayed(),z.OnBeforeRender))}*applyChangesDelayed(){this._isDirty=!1,this.applyChangesNow()}_buffer=[];applyChangesNow(){this._buffer.length=0;for(let e of G.getComponentsInChildren(this.gameObject,Nh,this._buffer)){let t=e;t.setAlphaFactor&&t.setAlphaFactor(this._alpha)}}};_g([F()],vg.prototype,`alpha`,null),_g([F()],vg.prototype,`interactable`,void 0),_g([F()],vg.prototype,`blocksRaycasts`,void 0);var yg=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},bg=class{texture=null;rect};yg([F(be)],bg.prototype,`texture`,void 0);var xg=class extends Yh{set image(e){this.sprite||=new bg,this.sprite.texture=e,this.onAfterCreated()}get image(){return this.sprite?this.sprite.texture:null}get sprite(){return this._sprite}set sprite(e){this._sprite!==e&&(this._sprite=e,this.onAfterCreated())}_sprite;pixelsPerUnitMultiplier=1;isBuiltinSprite(){let e=this.sprite;switch(e?.texture?.name){case`InputFieldBackground`:case`UISprite`:case`Background`:case`Knob`:return!0}return!e?.texture?.name?.length&&e?.texture?.image?.width===32&&e?.texture?.image?.height===32}onBeforeCreate(e){super.onBeforeCreate(e),this.isBuiltinSprite()&&(e.borderRadius=5/this.pixelsPerUnitMultiplier,this.sprite?.texture?.name===`Knob`&&(e.borderRadius=999))}onAfterCreated(){this.__didAwake&&(super.onAfterCreated(),!this.isBuiltinSprite()&&this.setTexture(this.sprite?.texture))}};yg([F(bg)],xg.prototype,`sprite`,null),yg([F()],xg.prototype,`pixelsPerUnitMultiplier`,void 0);var Sg=class extends Yh{get mainTexture(){return this._mainTexture}set mainTexture(e){this._mainTexture!==e&&(this._mainTexture=e,this.onAfterCreated())}_mainTexture;onAfterCreated(){this.__didAwake&&(super.onAfterCreated(),this.setTexture(this.mainTexture))}};yg([F(be)],Sg.prototype,`mainTexture`,null);var Cg=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},wg=A(`debugbutton`),Tg;(function(e){e[e.None=0]=`None`,e[e.ColorTint=1]=`ColorTint`,e[e.SpriteSwap=2]=`SpriteSwap`,e[e.Animation=3]=`Animation`})(Tg||={});var Eg=class{colorMultiplier;disabledColor;fadeDuration;highlightedColor;normalColor;pressedColor;selectedColor};Cg([F()],Eg.prototype,`colorMultiplier`,void 0),Cg([F(md)],Eg.prototype,`disabledColor`,void 0),Cg([F()],Eg.prototype,`fadeDuration`,void 0),Cg([F(md)],Eg.prototype,`highlightedColor`,void 0),Cg([F(md)],Eg.prototype,`normalColor`,void 0),Cg([F(md)],Eg.prototype,`pressedColor`,void 0),Cg([F(md)],Eg.prototype,`selectedColor`,void 0);var Dg=class{disabledTrigger;highlightedTrigger;normalTrigger;pressedTrigger;selectedTrigger},Og=class extends K{click(){this.onClick?.invoke()}onClick=new _m;_isHovered=0;onPointerEnter(e){let t=e.event.pointerType===`mouse`&&e.button===0;t&&(this._isHovered+=1),wg&&console.warn(`Button Enter`,t,this._isHovered,this.animationTriggers?.highlightedTrigger,this.animator),this.interactable&&(this.transition==Tg.Animation&&this.animationTriggers&&this.animator?this.animator.setTrigger(this.animationTriggers.highlightedTrigger):this.transition===Tg.ColorTint&&this.colors&&this._image?.setState(`hovered`),t&&this.context.input.setCursor(`pointer`))}onPointerExit(){--this._isHovered,this._isHovered<0&&(this._isHovered=0),wg&&console.log(`Button Exit`,this._isHovered,this.animationTriggers?.highlightedTrigger,this.animator),this.interactable&&(this._isHovered>0||(this._isHovered=0,this.transition==Tg.Animation&&this.animationTriggers&&this.animator?this.animator.setTrigger(this.animationTriggers.normalTrigger):this.transition===Tg.ColorTint&&this.colors&&this._image?.setState(`normal`),this.context.input.unsetCursor(`pointer`)))}onPointerDown(e){wg&&console.log(`Button Down`,this.animationTriggers?.highlightedTrigger,this.animator),this.interactable&&(this.transition==Tg.Animation&&this.animationTriggers&&this.animator?this.animator.setTrigger(this.animationTriggers.pressedTrigger):this.transition===Tg.ColorTint&&this.colors&&this._image?.setState(`pressed`))}onPointerUp(e){wg&&console.warn(`Button Up`,this.animationTriggers?.highlightedTrigger,this.animator,this._isHovered),this.interactable&&(this.transition==Tg.Animation&&this.animationTriggers&&this.animator?this.animator.setTrigger(this._isHovered?this.animationTriggers.highlightedTrigger:this.animationTriggers.normalTrigger):this.transition===Tg.ColorTint&&this.colors&&this._image?.setState(this._isHovered?`hovered`:`normal`))}onPointerClick(e){if(this.interactable&&!(e.button!==0&&e.event.pointerType===tc.Mouse)&&(wg&&(console.warn(`Button Click`,this.onClick),Ti(`CLICKED button `+this.name+` at `+this.context.time.frameCount)),this.onClick&&this.onClick.listenerCount>0&&(this.onClick.invoke(),e.use(),this.context.accessibility.focus(this),wg))){let e=this.gameObject.worldPosition;e.add(this.gameObject.worldUp.multiplyScalar(1+Math.random()*.5)),H.DrawLabel(e,`CLICK:`+Date.now(),.1,1+Math.random()*.5)}}colors;transition;animationTriggers;animator;set interactable(e){this._interactable=e,this._image&&(this._image.setInteractable(e),e?this._image.setState(`normal`):this._image.setState(`disabled`))}get interactable(){return this._interactable}_interactable=!0;set_interactable(e){this.interactable=e}awake(){super.awake(),wg&&console.log(this),this._isInit=!1,this.init()}start(){this._image?.setInteractable(this.interactable),this.gameObject.getComponentInParent(rh)||this.gameObject.addComponent(ah)}onEnable(){super.onEnable(),this.context.accessibility.updateElement(this,{role:`button`,label:this.gameObject.name+` button`,hidden:!1})}onDisable(){super.onDisable(),this.context.accessibility.updateElement(this,{hidden:!0})}onDestroy(){this.context.accessibility.removeElement(this),this._isHovered&&this.context.input.unsetCursor(`pointer`)}_requestedAnimatorTrigger;*setAnimatorTriggerAtEndOfFrame(e){this._requestedAnimatorTrigger=e,yield,yield,this._requestedAnimatorTrigger==e&&this.animator?.setTrigger(e)}_isInit=!1;_image;init(){this._isInit||(this._isInit=!0,this._image=G.getComponent(this.gameObject,xg),this._image&&(this.stateSetup(this._image),this.interactable?this._image.setState(`normal`):this._image.setState(`disabled`)))}stateSetup(e){e.setInteractable(this.interactable);let t=this.getFinalColor(e.color,this.colors?.normalColor),n={state:`normal`,attributes:{backgroundColor:t,backgroundOpacity:t.alpha}};e.setupState(n);let r=this.getFinalColor(e.color,this.colors?.highlightedColor),i={state:`hovered`,attributes:{backgroundColor:r,backgroundOpacity:r.alpha}};e.setupState(i);let a=this.getFinalColor(e.color,this.colors?.pressedColor),o={state:`pressed`,attributes:{backgroundColor:a,backgroundOpacity:a.alpha}};e.setupState(o);let s=this.getFinalColor(e.color,this.colors?.selectedColor),c={state:`selected`,attributes:{backgroundColor:s,backgroundOpacity:s.alpha}};e.setupState(c);let l=this.getFinalColor(e.color,this.colors?.disabledColor),u={state:`disabled`,attributes:{backgroundColor:l,backgroundOpacity:l.alpha}};e.setupState(u)}getFinalColor(e,t){return t?e.clone().multiply(t).convertLinearToSRGB():e.clone().convertLinearToSRGB()}};Cg([F(_m)],Og.prototype,`onClick`,void 0),Cg([F(Eg)],Og.prototype,`colors`,void 0),Cg([F()],Og.prototype,`transition`,void 0),Cg([F(Dg)],Og.prototype,`animationTriggers`,void 0),Cg([F(fm)],Og.prototype,`animator`,void 0),Cg([F()],Og.prototype,`interactable`,null);var kg=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ag=A(`debuginputfield`),jg=class e extends K{get text(){return this.textComponent?.text??``}set text(e){this.textComponent&&(this.textComponent.text=e,this.placeholder&&(e.length>0?this.placeholder.gameObject.visible=!1:this.placeholder.gameObject.visible=!0))}get isFocused(){return e.active===this}textComponent;placeholder;onValueChanged;onEndEdit;static active=null;static activeTime=-1;static htmlField=null;static htmlFieldFocused=!1;inputEventFn;_iosEventFn;start(){Ag&&console.log(this.name,this)}onEnable(){e.htmlField||(e.htmlField=document.createElement(`input`),e.htmlField.style.width=`0px`,e.htmlField.style.height=`0px`,e.htmlField.style.padding=`0px`,e.htmlField.style.border=`none`,e.htmlField.style.overflow=`hidden`,e.htmlField.style.caretColor=`transparent`,e.htmlField.style.outline=`none`,e.htmlField.classList.add(`ar`),e.htmlField.onfocus=()=>e.htmlFieldFocused=!0,e.htmlField.onblur=()=>e.htmlFieldFocused=!1,document.body.append(e.htmlField)),this.inputEventFn||=this.onInput.bind(this),e.htmlField.addEventListener(`keyup`,this.inputEventFn),this.placeholder&&this.textComponent?.text.length&&G.setActive(this.placeholder.gameObject,!1),j.isiOS()&&(this._iosEventFn=this.processInputOniOS.bind(this),window.addEventListener(`click`,this._iosEventFn))}onDisable(){e.htmlField?.removeEventListener(`keyup`,this.inputEventFn),this.onDeselected(),this._iosEventFn&&window.removeEventListener(`click`,this._iosEventFn)}clear(){e.active===this&&e.htmlField?(e.htmlField.value=``,this.setTextFromInputField()):(this.textComponent&&(this.textComponent.text=``),this.placeholder&&G.setActive(this.placeholder.gameObject,!0))}select(){this.onSelected()}deselect(){this.onDeselected()}onPointerEnter(e){e.event.pointerType===`mouse`&&e.button===0&&this.context.input.setCursor(`text`)}onPointerExit(e){this.context.input.unsetCursor(`text`)}onPointerClick(t){Ag&&console.log(`CLICK`,t,e.active),e.activeTime=this.context.time.time,e.active!==this&&this.startCoroutine(this.activeLoop(),z.LateUpdate),this.selectInputField()}*activeLoop(){for(this.onSelected();e.active===this&&!(this.context.input.getPointerClicked(0)&&this.context.time.time-e.activeTime>.2);)this.setTextFromInputField(),yield;this.onDeselected()}onSelected(){if(e.active!==this&&(Ag&&console.log(`Select`,this.name,this,e.htmlField,this.context.isInXR,this.context.arOverlayElement,this.textComponent?.text,e.htmlField?.value),e.active?.onDeselected(),e.active=this,this.placeholder&&G.setActive(this.placeholder.gameObject,!1),e.htmlField)){if(e.htmlField.value=this.textComponent?.text||``,Ag&&console.log(`set input field value`,e.htmlField.value),this.context.isInXR){let t=this.context.arOverlayElement;t&&t.append(e.htmlField)}this.selectInputField()}}onDeselected(){e.active===this&&(e.active=null,Ag&&console.log(`Deselect`,this.name,this),e.htmlField&&(e.htmlField.blur(),document.body.append(e.htmlField)),this.placeholder&&(!this.textComponent||this.textComponent.text.length<=0)&&G.setActive(this.placeholder.gameObject,!0),e.htmlField&&this.onEndEdit?.invoke(e.htmlField.value))}update(){e.active===this&&this.textComponent?.markDirty()}onInput(t){if(e.active===this){if(Ag&&console.log(t.code,t,e.htmlField?.value,this.textComponent?.text),t.code===`Escape`||t.code===`Enter`){this.onDeselected();return}e.htmlField&&(this.textComponent&&(this.setTextFromInputField(),this.placeholder&&G.setActive(this.placeholder.gameObject,this.textComponent.text.length<=0)),this.selectInputField())}}setTextFromInputField(){if(this.textComponent&&e.htmlField){let t=this.textComponent.text,n=e.htmlField.value,r=this.textComponent.text!==e.htmlField.value;this.textComponent.text=e.htmlField.value,r&&(Ag&&console.log(`[InputField] value changed:`,n,t),this.onValueChanged?.invoke(n,t))}}selectInputField(){e.htmlField&&(Ag&&console.log(`Focus Inputfield`,e.htmlFieldFocused,e.htmlField),e.htmlField.setSelectionRange(e.htmlField.value.length,e.htmlField.value.length),j.isiOS()?(e.htmlField.style.display=`block`,e.htmlField.focus({preventScroll:!0})):setTimeout(()=>e.htmlField?.focus(),1))}processInputOniOS(){let e=this.context.physics.raycast();if(!e.length)return;let t=e[0].object,n=ch(t);(n?.gameObject===this.gameObject||n?.gameObject.parent===this.gameObject)&&this.selectInputField()}};kg([F(tg)],jg.prototype,`textComponent`,void 0),kg([F(tg)],jg.prototype,`placeholder`,void 0),kg([F(_m)],jg.prototype,`onValueChanged`,void 0),kg([F(_m)],jg.prototype,`onEndEdit`,void 0);var Mg=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ng=class extends K{id=null;keepAspect=!1;_object=null;onEnable(){if(this._object){this.gameObject.add(this._object);return}if(!this.id||!this.context.mainCamera)return;let e=document.getElementById(this.id);if(!e){console.warn(`Could not find element with id "`+this.id+`"`);return}e.style.display=`block`,e.style.visibility=`hidden`;let t=new mt;t.listenToPointerEvents(this.context.renderer,this.context.mainCamera),this.gameObject.add(t);let n=new ft(e);t.add(n),n.visible=!1;let r=n.material;r.transparent=!0,setTimeout(()=>{n.visible=!0;let e=Qr(this.gameObject).clone();ei(this.gameObject,0,0,0),this.gameObject.updateMatrixWorld();let r=new fe;r.setFromObject(t),this.setWorldRotation(e.x,e.y,e.z);let i=r.max.x-r.min.x,a=r.max.y-r.min.y;if(this.keepAspect){let e=i/a;i>a?n.scale.set(1/i,1/a/e,1):n.scale.set(1/i*e,1/a,1)}else n.scale.set(1/i,1/a,1);let o=this.gameObject.scale;n.scale.multiply(o)},1)}onDisable(){this._object?.removeFromParent()}};Mg([F()],Ng.prototype,`id`,void 0),Mg([F()],Ng.prototype,`keepAspect`,void 0);export{om as $,kt as $a,ji as $i,al as $n,ts as $r,ef as $t,ih as A,kr as Aa,fa as Ai,Xl as An,vn as Ao,ic as Ar,jf as At,Bm as B,ur as Ba,Yi as Bi,Ll as Bn,nn as Bo,js as Br,Pf as Bt,Z as C,vr as Ca,La as Ci,yu as Cn,Ht as Co,mc as Cr,Fp as Ct,gh as D,hi as Da,ba as Di,ou as Dn,It as Do,L as Dr,gp as Dt,X as E,mi as Ea,ka as Ei,su as En,Et as Eo,sc as Er,Cp as Et,Jm as F,ei as Fa,da as Fi,Ul as Fn,Pt as Fo,Ws as Fr,Ef as Ft,Pm as G,ir as Ga,Bi as Gi,Tl as Gn,fs as Gr,_f as Gt,Rm as H,lr as Ha,Hi,Ml as Hn,wt as Ho,Is as Hr,bf as Ht,Xm as I,Br as Ia,ca as Ii,Hl as In,Lt as Io,Hs as Ir,Nf as It,ym as J,Tn as Ja,Ki as Ji,bl as Jn,Es as Jr,mf as Jt,Mm as K,M as Ka,Wi as Ki,Dl as Kn,ps as Kr,pf as Kt,Km as L,hr as La,ta as Li,Vl as Ln,Qt as Lo,Vs as Lr,Af as Lt,eh as M,Fr as Ma,ma as Mi,Zl as Mn,Ut as Mo,Ks as Mr,Hf as Mt,th as N,Ir as Na,la as Ni,ql as Nn,Ft as No,Gs as Nr,Wf as Nt,sh as O,ui as Oa,xa as Oi,au as On,zt as Oo,oc as Or,Tf as Ot,$m as P,$r as Pa,ga as Pi,Wl as Pn,Nt as Po,Us as Pr,Of as Pt,fm as Q,Pn as Qa,Pi as Qi,ul as Qn,es as Qr,U as Qt,Um as R,si as Ra,Zi as Ri,Rl as Rn,Wt as Ro,Ls as Rr,kf as Rt,Ph as S,ti as Sa,za as Si,vu as Sn,Rt as So,pc as Sr,Np as St,Th as T,br as Ta,Va as Ti,cu as Tn,Dt as To,cc as Tr,wp as Tt,J as U,N as Ua,Vi as Ui,Al as Un,O as Uo,Ns as Ur,Sf as Ut,zm as V,sr as Va,Ji as Vi,Fl as Vn,Tt as Vo,Fs as Vr,If as Vt,Fm as W,rr as Wa,Ui as Wi,wl as Wn,k as Wo,Ps as Wr,gf as Wt,_m as X,En as Xa,F as Xi,hl as Xn,ms as Xr,Vd as Xt,mm as Y,Un as Ya,Ri as Yi,vl as Yn,_s as Yr,uf as Yt,gm as Z,Nn as Za,Fi as Zi,dl as Zn,cs as Zr,Qd as Zt,Gh as _,Or as _a,Ja as _i,B as _n,un as _o,kc as _r,Rp as _t,Sg as a,ai as aa,jo as ai,Bd as an,Gt as ao,nl as ar,Qp as at,Rh as b,zr as ba,Ha as bi,wu as bn,fn as bo,Mc as br,Pp as bt,mg as c,Ur as ca,Ho as ci,Ad as cn,A as co,Xc as cr,G as ct,ag as d,Cr as da,Fo as di,md as dn,ln as do,qc as dr,Up as dt,Mi as ea,$o as ei,tf as en,j as eo,ol as er,rm as et,ug as f,Tr as fa,Po as fi,pd as fn,Ot as fo,Vc as fr,Gp as ft,Yh as g,Xr as ga,Xa as gi,Iu as gn,on as go,Pc as gr,kp as gt,Jh as h,Kr as ha,mo as hi,Ku as hn,dn as ho,Lc as hr,Dp as ht,xg as i,_i as ia,Mo as ii,Gd as in,_n as io,Qc as ir,nm as it,oh as j,Ar as ja,ha as ji,$l as jn,Zt as jo,tc as jr,Vf as jt,ah as k,Zr as ka,ua as ki,iu as kn,Yt as ko,ac as kr,zf as kt,fg as l,fi as la,Bo as li,Sd as ln,Xt as lo,$c as lr,Yp as lt,Q as m,di as ma,Oo as mi,Zu as mn,sn as mo,Rc as mr,Op as mt,jg as n,Ti as na,Jo as ni,Kd as nn,bn as no,Yc as nr,tm as nt,vg as o,oi as oa,Ro as oi,jd as on,Kt as oo,el as or,K as ot,tg as p,P as pa,zo as pi,ed as pn,an as po,Ic as pr,Kp as pt,km as q,$n as qa,Gi as qi,El as qn,ds as qr,ff as qt,Og as r,Ei as ra,Lo as ri,Jd as rn,en as ro,Zc as rr,em as rt,gg as s,pi as sa,Io as si,kd as sn,qt as so,tl as sr,Xp as st,Ng as t,Di as ta,Yo as ti,Xd as tn,xn as to,il as tr,im as tt,dg as u,ni as ua,Go as ui,H as un,Mt as uo,Kc as ur,Wp as ut,zh as v,Pr as va,qa as vi,Tu as vn,mn as vo,Ac as vr,zp as vt,Dh as w,yr as wa,Ba as wi,uu as wn,hn as wo,uc as wr,Lp as wt,Nh as x,ri as xa,Ra as xi,Eu as xn,cn as xo,Oc as xr,Ip as xt,Uh as y,Qr as ya,Ua as yi,z as yn,pn as yo,jc as yr,Mp as yt,Vm as z,or as za,Qi as zi,Bl as zn,rn as zo,ks as zr,Df as zt}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine-ui.D3ZoIJG5.js.gz b/Needle/MenuScene/dist/assets/needle-engine-ui.D3ZoIJG5.js.gz deleted file mode 100644 index 4201857..0000000 Binary files a/Needle/MenuScene/dist/assets/needle-engine-ui.D3ZoIJG5.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/needle-engine-webxr.DiiWSXeh.js b/Needle/MenuScene/dist/assets/needle-engine-webxr.DiiWSXeh.js deleted file mode 100644 index e91fa15..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine-webxr.DiiWSXeh.js +++ /dev/null @@ -1,325 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./needle-engine.dep.BzZBR-mM.js","./needle-engine.D6xdy26G.js","./three@0.169.19.js","./rolldown-runtime.CYVBeYYp.js"])))=>i.map(i=>d[i]); -import{d as e}from"./materialx.CnHmG--Y.js";import{$t as t,A as n,Ar as r,At as i,Bt as a,Cn as o,Cr as s,Dt as c,Et as l,Fr as u,G as d,Gt as f,Ir as p,It as m,Jt as h,K as g,Kn as _,Mt as ee,On as te,Qn as ne,Qt as v,R as re,S as ie,Sn as ae,Vt as oe,Wn as y,Wt as se,Xn as ce,Xt as b,Yn as le,Zn as ue,Zt as x,_ as de,_n as fe,_r as pe,a as me,an as he,b as ge,d as _e,dt as ve,er as ye,fn as S,gn as be,gr as xe,gt as Se,ht as Ce,i as we,in as Te,jr as C,kr as Ee,l as De,lt as Oe,m as ke,mn as Ae,nt as je,pt as Me,qt as Ne,r as Pe,rn as Fe,sr as Ie,tn as Le,tr as Re,tt as ze,u as Be,ur as Ve,vn as He,wn as Ue,wr as We,x as Ge,xr as Ke}from"./three@0.169.19.js";import{$a as qe,$i as Je,$r as Ye,Aa as Xe,An as Ze,Ba as Qe,Bi as $e,Bn as et,Bo as tt,Br as w,C as nt,Co as rt,Cr as it,Ct as at,Di as ot,Ei as st,Er as ct,Fi as lt,Gi as ut,Gn as dt,Ho as ft,Ht as pt,Ia as mt,Jn as ht,Jt as gt,Ka as T,Kt as _t,L as vt,Lr as yt,Lt as bt,Ma as xt,Mr as St,N as Ct,Ni as wt,Nr as Tt,Nt as Et,Oa as Dt,P as Ot,Q as kt,Qi as At,Qn as jt,Qr as Mt,Qt as Nt,Rr as Pt,Sn as Ft,Sr as It,Tt as Lt,Ua as Rt,Uo as zt,Vt as Bt,Wn as Vt,Wo as Ht,X as Ut,Xi as E,Xn as Wt,Yn as Gt,Yt as Kt,Zi as qt,Zr as Jt,_a as Yt,_n as Xt,_t as Zt,an as Qt,ba as $t,c as en,co as D,cr as O,ct as k,dn as tn,ei as nn,eo as A,fi as rn,fn as j,gn as an,gr as on,hn as sn,j as cn,jo as ln,kn as un,kt as dn,la as fn,ln as pn,m as M,ma as mn,mi as hn,mr as gn,mt as _n,na as vn,ni as yn,nn as bn,o as xn,oo as Sn,ot as N,p as Cn,pa as wn,pn as Tn,q as En,qi as Dn,qt as On,ra as kn,s as An,so as jn,sr as Mn,ta as Nn,ti as Pn,to as Fn,tr as In,un as Ln,va as Rn,vi as zn,wi as Bn,wr as Vn,x as Hn,y as Un,yn as Wn,yt as Gn,z as Kn,zn as qn,zo as Jn}from"./needle-engine-ui.D3ZoIJG5.js";import{A as Yn,M as Xn,b as Zn,c as Qn,f as $n,l as er,m as tr,o as nr,p as rr,r as ir,s as ar,u as or,v as sr,x as cr,y as lr}from"./three-examples@0.169.19.js";import{a as ur,c as dr,i as fr,n as P,o as pr,r as mr,s as hr}from"./gltf-progressive.BBJGcb3s.js";var gr=D(`debugwebxr`),_r=class{static tryFindAvatarObjects(e,t,n){if(n.head&&n.leftHand&&n.rightHand)return;let r=e.name.toLocaleLowerCase();!n.head&&r.includes(`head`)&&(gr&&console.log(`FOUND AVATAR HEAD`,e.name),n.head=new w(``,t,e)),r.includes(`hand`)&&(!n.leftHand&&r.includes(`left`)&&(gr&&console.log(`FOUND AVATAR LEFT HAND`,e.name),n.leftHand=new w(``,t,e)),!n.rightHand&&r.includes(`right`)&&(gr&&console.log(`FOUND AVATAR RIGHT HAND`,e.name),n.rightHand=new w(``,t,e)));for(let r=0;r=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},yr=D(`debuganimation`),br=class{x;y},xr=class extends N{get isAnimationComponent(){return!0}addClip(e){this.animations||=[],this.animations.includes(e)||this.animations.push(e)}playAutomatically=!0;randomStartTime=!1;minMaxSpeed;minMaxOffsetNormalized;loop=!0;clampWhenFinished=!1;get time(){if(this.actions){for(let e of this.actions)if(e.isRunning())return e.time}return 0}set time(e){if(this.actions)for(let t of this.actions)t.time=e}get duration(){if(this.actions){for(let e of this.actions)if(e.isRunning())return e.getClip().duration}return 0}_tempAnimationClipBeforeGameObjectExisted=null;get clip(){return this.animations?.length?this.animations[0]:null}set clip(e){if(!this.__didAwake){yr&&console.warn(`Assign clip during serialization`,e),this._tempAnimationClipBeforeGameObjectExisted=e;return}e&&(this.gameObject.animations||(this.gameObject.animations=[]),!this.animations.includes(e)&&(this.animations.length>0?this.animations.splice(0,0,e):this.animations.push(e)))}set clips(e){this.animations=e}_tempAnimationsArray;set animations(e){e==null||!Array.isArray(e)||(this.gameObject?this.gameObject.animations=e:this._tempAnimationsArray=e)}get animations(){return this.gameObject?.animations||this._tempAnimationsArray||[]}mixer=void 0;get actions(){return this._actions}set actions(e){this._actions=e}_actions;_handles;awake(){this.mixer=void 0,yr&&console.log(`Animation Awake`,this.name,this),this._tempAnimationsArray&&=(this.animations=this._tempAnimationsArray,void 0),this._tempAnimationClipBeforeGameObjectExisted&&=(this.clip=this._tempAnimationClipBeforeGameObjectExisted,null),this.actions=[],this._handles=[]}onEnable(){if(this.playAutomatically&&this.animations?.length>0){let e=Math.floor(Math.random()*this.animations.length),t=this.animations[e];this.play(e,{exclusive:!0,fadeDuration:0,startTime:this.randomStartTime?Math.random()*t.duration:0,loop:this.loop,clampWhenFinished:this.clampWhenFinished})}}update(){this.mixer&&(this.mixer.update(this.context.time.deltaTime),this._handles.forEach(e=>e.update()))}onDisable(){this.mixer&&this.mixer.stopAllAction()}onDestroy(){this.context.animations.unregisterAnimationMixer(this.mixer)}getAction(e){return this.actions?.find(t=>t.getClip().name===e)||null}get isPlaying(){if(this.actions){for(let e=0;e=this.animations.length){yr&&console.log(`No animation at index`,e);return}e=this.animations[e]}else typeof e==`string`&&(e=this.animations.find(t=>t.name===e));if(!e){console.error(`Could not find clip`,e);return}let n=this.actions.find(t=>t.getClip()===e);if(!n){console.error(`Could not find action`,e);return}t?.fadeDuration?n.fadeOut(t.fadeDuration):n.stop()}pause(e,t=!1){if(e===void 0){for(let e of this.actions)e.paused=!t;return}else if(typeof e==`number`){if(e>=this.animations.length){yr&&console.log(`No animation at index`,e);return}e=this.animations[e]}else typeof e==`string`&&(e=this.animations.find(t=>t.name===e));if(!e){console.error(`Could not find clip`,e);return}let n=this.actions.find(t=>t.getClip()===e);if(!n){console.error(`Could not find action`,e);return}n.paused=!t}resume(){for(let e of this.actions)e.paused=!1}play(e=0,t){if(yr&&console.log(`PLAY`,e),this.ensureMixer(),!this.mixer){yr&&console.warn(`Missing mixer`,this);return}e===void 0&&(e=0);let n=e;if(typeof e==`number`){if(e>=this.animations.length){yr&&console.log(`No animation at index`,e);return}n=this.animations[e]}else typeof e==`string`&&(n=this.animations.find(t=>t.name===e));if(!n){console.error(`Could not find clip`,e);return}t||={};for(let e of this.actions)if(e.getClip()===n)return this.internalOnPlay(e,t);if(!n.tracks){console.warn(`Clip is no AnimationClip`,n);return}let r=this.mixer.clipAction(n);return this.actions.push(r),this.internalOnPlay(r,t)}internalOnPlay(e,t){var n=this.actions.find(t=>t===e);if(n===e&&n.isRunning()&&n.time=e.getClip().duration&&(e.time=0);t?.minMaxSpeed?e.timeScale=Rt.lerp(t.minMaxSpeed.x,t.minMaxSpeed.y,Math.random()):e.timeScale=t?.speed??1,t?.loop==null?e.loop=se:e.loop=t.loop?f:se,t?.clampWhenFinished&&(e.clampWhenFinished=!0),e.paused=!1,e.play(),window.requestAnimationFrame(()=>At.testIfRootCanAnimate(e)),yr&&console.log(`PLAY`,e.getClip().name,e);let r=new Sr(e,this.mixer,t,e=>{this._handles.splice(this._handles.indexOf(r),1)});return this._handles.push(r),r.waitForFinish()}tryFindHandle(e){for(let t of this._handles)if(t.action===e)return t}ensureMixer(){if(!this.mixer){let e=`animationMixer`;this.gameObject[e]&&(this.mixer=this.gameObject[e]),(!this.mixer||!this.mixer.clipAction)&&(this.mixer=new me(this.gameObject),this.gameObject[e]=this.mixer)}this.context.animations.registerAnimationMixer(this.mixer)}};vr([E()],xr.prototype,`playAutomatically`,void 0),vr([E()],xr.prototype,`randomStartTime`,void 0),vr([E(br)],xr.prototype,`minMaxSpeed`,void 0),vr([E(br)],xr.prototype,`minMaxOffsetNormalized`,void 0),vr([E()],xr.prototype,`loop`,void 0),vr([E()],xr.prototype,`clampWhenFinished`,void 0),vr([E(we)],xr.prototype,`clips`,null);var Sr=class{mixer;action;promise=null;_options;_resolveCallback=null;_resolvedOrRejectedCallback;constructor(e,t,n,r){this.action=e,this.mixer=t,this._resolvedOrRejectedCallback=r,this._options=n}waitForFinish(){return this.promise?this.promise:(this.promise=new Promise(e=>{this._resolveCallback=e}),this.mixer.addEventListener(`finished`,this.onFinished),this.promise)}update(){this._options&&this._options.endTime!==void 0&&this.action.time>this._options.endTime&&(this._options.loop===!0?this.action.time=this._options.startTime??0:(this.action.time=this._options.endTime,this.action.timeScale=0,this.onResolve()))}onResolve(){this.dispose(),this._resolvedOrRejectedCallback?.call(this,this),this._resolveCallback?.call(this,this.action)}onFinished=e=>{e.action===this.action&&this.onResolve()};dispose(){this.mixer.removeEventListener(`finished`,this.onFinished)}},Cr=class extends N{get listener(){return this._listener??=new De,this._listener}_listener=null;onEnable(){yt.registerWaitForInteraction(this.onInteraction),this.addListenerIfItExists()}onDisable(){yt.unregisterWaitForInteraction(this.onInteraction),this.removeListenerIfItExists()}onInteraction=()=>{this.destroyed||this.listener!=null&&this.addListenerIfItExists()};addListenerIfItExists(){let e=this._listener;if(!e||e?.parent)return;let t=this.context.mainCameraComponent||k.getComponentInParent(this.gameObject,nt);t?.threeCamera?t.threeCamera.add(e):this.gameObject.add(e),e.filter?(e.gain.connect(e.filter),e.filter.connect(e.context.destination)):e.gain.connect(e.context.destination)}removeListenerIfItExists(){let e=this._listener;e&&(e.removeFromParent(),e.filter&&e.filter.disconnect(),e.gain&&e.gain.disconnect())}},wr=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},F=D(`debugaudio`),Tr;(function(e){e[e.Logarithmic=0]=`Logarithmic`,e[e.Linear=1]=`Linear`,e[e.Custom=2]=`Custom`})(Tr||={});var I=class e extends N{static get userInteractionRegistered(){return yt.userInteractionRegistered}static registerWaitForAllowAudio(e){yt.registerWaitForInteraction(e)}clip=``;playOnAwake=!1;preload=!0;playInBackground=!0;get isPlaying(){return this.sound?.isPlaying??!1}get duration(){return this.sound?.buffer?.duration}get time01(){let e=this.duration;return e&&this.sound?this.sound?.context.currentTime/e:0}set time01(e){let t=this.duration;t&&this.sound&&(this.time=e*t)}get time(){return this.sound?.source?this.sound.source?.context.currentTime-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;let t=this.isPlaying;this.stop(),this.sound.offset=e,t&&this.play()}}get loop(){return this.sound&&(this._loop=this.sound.getLoop()),this._loop}set loop(e){this._loop=e,this.sound&&this.sound.setLoop(e)}get spatialBlend(){return this._spatialBlend}set spatialBlend(e){e!==this._spatialBlend&&(this._spatialBlend=e,this._needUpdateSpatialDistanceSettings=!0)}get minDistance(){return this._minDistance}set minDistance(e){this._minDistance!==e&&(this._minDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get maxDistance(){return this._maxDistance}set maxDistance(e){this._maxDistance!==e&&(this._maxDistance=e,this._needUpdateSpatialDistanceSettings=!0)}_spatialBlend=0;_minDistance=1;_maxDistance=100;get volume(){return this._volume}set volume(e){this._volume=e,this.sound&&!this.context.application.muted&&(F&&console.log(this.name,`audio set volume`,e),this.sound.setVolume(e))}_volume=1;set pitch(e){this.sound&&this.sound.setPlaybackRate(e)}get pitch(){return this.sound?this.sound.getPlaybackRate():1}rollOffMode=0;_loop=!1;sound=null;helper=null;wasPlaying=!1;audioLoader=null;shouldPlay=!1;_lastClipStartedLoading=null;_audioElement=null;get Sound(){if(!this.sound&&e.userInteractionRegistered){let e=this.gameObject.getComponent(Cr)??this.context.mainCamera.getComponent(Cr)??Zt(Cr,this.context,!1);!e&&this.context.mainCamera&&(e=this.context.mainCamera.addComponent(Cr)),e?.listener?(this.sound=new ae(e.listener),this.gameObject?.add(this.sound)):F&&console.warn(`No audio listener found in scene - can not play audio`)}return this.sound}get ShouldPlay(){return this.shouldPlay}get audioContext(){return this.sound?.context}awake(){F&&console.log(`[AudioSource]`,this),this.audioLoader=new Be,this.playOnAwake&&(this.shouldPlay=!0),this.preload&&typeof this.clip==`string`&&this.audioLoader.load(this.clip,this.createAudio,()=>{},console.error)}onEnable(){this.sound&&this.gameObject.add(this.sound),e.userInteractionRegistered?this.playOnAwake&&this.context.application.isVisible&&this.play():e.registerWaitForAllowAudio(()=>{this.enabled&&!this.destroyed&&this.shouldPlay&&this.onNewClip(this.clip)}),globalThis.addEventListener(`visibilitychange`,this.onVisibilityChanged),this.context.application.addEventListener(Pt.MuteChanged,this.onApplicationMuteChanged)}onDisable(){globalThis.removeEventListener(`visibilitychange`,this.onVisibilityChanged),this.context.application.removeEventListener(Pt.MuteChanged,this.onApplicationMuteChanged),this.pause()}onVisibilityChanged=()=>{switch(document.visibilityState){case`hidden`:(this.playInBackground===!1||A.isMobileDevice())&&(this.wasPlaying=this.isPlaying,this.isPlaying&&this.pause());break;case`visible`:F&&console.log(`visible`,this.enabled,this.playOnAwake,!this.isPlaying,e.userInteractionRegistered,this.wasPlaying),this.enabled&&this.playOnAwake&&!this.isPlaying&&e.userInteractionRegistered&&this.wasPlaying&&this.play();break}};onApplicationMuteChanged=()=>{this.context.application.muted?this.sound?.setVolume(0):this.sound?.setVolume(this.volume)};createAudio=t=>{if(this.destroyed){F&&console.warn(`AudioSource destroyed, not creating audio`,this.name);return}F&&console.log(`AudioBuffer finished loading`,t);let n=this.Sound;if(!n){F&&console.warn(`Failed getting sound?`,this.name);return}n.isPlaying&&n.stop(),t&&n.setBuffer(t),n.loop=this._loop,this.context.application.muted?n.setVolume(0):n.setVolume(this.volume),n.autoplay=this.shouldPlay&&e.userInteractionRegistered,this.applySpatialDistanceSettings(),n.isPlaying&&n.stop(),e.registerWaitForAllowAudio(this.__onAllowAudioCallback)};__onAllowAudioCallback=()=>{this.shouldPlay&&this.play()};applySpatialDistanceSettings(){let e=this.sound;if(!e)return;this._needUpdateSpatialDistanceSettings=!1;let t=Rt.lerp(10*this._maxDistance/Math.max(1e-4,this.spatialBlend),this._minDistance,this.spatialBlend);switch(F&&console.log(this.name,this._minDistance,this._maxDistance,this.spatialBlend,`Ref distance=`+t),e.setRefDistance(t),e.setMaxDistance(Math.max(.01,this._maxDistance)),this.rollOffMode){case Tr.Logarithmic:e.setDistanceModel(`exponential`);break;case Tr.Linear:e.setDistanceModel(`linear`);break;case Tr.Custom:console.warn(`Custom rolloff for AudioSource is not supported: `+this.name);break}this.spatialBlend>0?F&&!this.helper&&(this.helper=new tr(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}async onNewClip(e){if(e&&(this.clip=e),typeof e==`string`)if(F&&console.log(e),e.endsWith(`.mp3`)||e.endsWith(`.wav`)){if(this.audioLoader||=new Be,this.shouldPlay=!0,this._lastClipStartedLoading===e){F&&console.log(`Is currently loading:`,this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=e,F&&console.log(`load audio`,e);let t=await this.audioLoader.loadAsync(e).catch(console.error);if(this.destroyed)return;this._lastClipStartedLoading===e&&(this._lastClipStartedLoading=null),t&&this.createAudio(t)}else console.warn(`Unsupported audio clip type`,e);else this.shouldPlay=!0,this.createAudio()}play(e=void 0){!e&&this.clip&&(e=this.clip),e!==void 0&&typeof e!=`string`&&!(e instanceof MediaStream)&&(T()&&console.warn(`Called play on AudioSource with unknown argument type:`,e+` -Using the assigned clip instead:`,this.clip),e=this.clip);let t=!this.sound||e&&e!==this.clip;if(typeof e==`string`&&!this.audioLoader&&(t=!0),(e instanceof MediaStream||typeof e==`string`)&&(this.clip=e),t){this.shouldPlay=!0,this.onNewClip(e);return}if(this.shouldPlay=!0,this._hasEnded=!1,F&&console.log(`play`,this.sound?.getVolume(),this.sound),this.sound&&!this.sound.isPlaying){let e=this.context.application.muted;e&&this.sound.setVolume(0),this.gameObject?.add(this.sound),this.clip instanceof MediaStream?(this.sound.setMediaStreamSource(this.clip),this._audioElement||(this._audioElement=document.createElement(`audio`),this._audioElement.style.display=`none`),this._audioElement.parentNode||this.context.domElement.shadowRoot?.append(this._audioElement),this._audioElement.srcObject=this.clip,this._audioElement.autoplay=!1):(this._audioElement&&this._audioElement.remove(),this.sound.play(e?.1:0))}}pause(){F&&console.log(`Pause`,this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.isPlaying&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,this.sound.pause()),this._audioElement?.remove()}stop(){F&&console.log(`Pause`,this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,F&&console.log(this._lastContextTime),this.sound.stop()),this._audioElement?.remove()}_lastContextTime=0;_hasEnded=!0;_needUpdateSpatialDistanceSettings=!1;update(){this.helper&&(this.isPlaying&&this.helper.update(),this.helper.visible=this.isPlaying),this._needUpdateSpatialDistanceSettings&&this.applySpatialDistanceSettings(),this.sound&&!this.sound.isPlaying&&this.shouldPlay&&!this._hasEnded&&(this._hasEnded=!0,F&&console.log(`Audio clip ended`,this.clip),this.dispatchEvent(new CustomEvent(`ended`,{detail:this})))}};wr([E(URL)],I.prototype,`clip`,void 0),wr([E()],I.prototype,`playOnAwake`,void 0),wr([E()],I.prototype,`preload`,void 0),wr([E()],I.prototype,`playInBackground`,void 0),wr([E()],I.prototype,`loop`,null),wr([E()],I.prototype,`spatialBlend`,null),wr([E()],I.prototype,`minDistance`,null),wr([E()],I.prototype,`maxDistance`,null),wr([E()],I.prototype,`volume`,null),wr([E()],I.prototype,`pitch`,null),wr([E()],I.prototype,`rollOffMode`,void 0);var Er=D(`debugautosync`),Dr=Symbol(`syncerId`),Or=new class{_syncers={};getOrCreateSyncer(e){if(!e.guid)return null;if(this._syncers[e.guid])return this._syncers[e.guid];let t=new kr(e);return t[Dr]=e.guid,this._syncers[t[Dr]]=t,t}removeSyncer(e){delete this._syncers[e[Dr]]}},kr=class{comp;constructor(e){this.comp=e}hasChanges=!1;changedProperties={};get networkingKey(){return this.comp.guid}_isReceiving=!1;_isInit=!1;init(e){if(this._isInit)return;this._isInit=!0,this.comp=e,this.comp.context.post_render_callbacks.push(this.onHandleSending),this.comp.context.connection.beginListen(this.networkingKey,this.onHandleReceiving);let t=this.comp.context.connection.tryGetState(this.comp.guid);t&&this.onHandleReceiving(t)}destroy(){this._isInit&&=(this.comp.context.post_render_callbacks.splice(this.comp.context.post_render_callbacks.indexOf(this.onHandleSending),1),this.comp.context.connection.stopListen(this.networkingKey,this.onHandleReceiving),this.comp=null,!1)}notifyChanged(e,t){this._isReceiving||(Er&&console.log(`Property changed: `+e,t),this.hasChanges=!0,this.changedProperties[e]=t)}onHandleSending=()=>{if(!this.hasChanges)return;this.hasChanges=!1;let e=this.comp.context.connection;if(!e||!e.isConnected||!e.isInRoom){for(let e in this.changedProperties)delete this.changedProperties[e];return}for(let t in this.changedProperties){let n=this.changedProperties[t];Er&&console.log(`SEND`,this.comp.guid,this.networkingKey),e.send(this.networkingKey,{guid:this.comp.guid,property:t,data:n},hn.Queued),delete this.changedProperties[t]}};onHandleReceiving=e=>{if(Er&&console.log(`SYNCFIELD RECEIVE`,this.comp.name,this.comp.guid,e),this._isInit&&this.comp&&e.guid===this.comp.guid)try{this._isReceiving=!0,this.comp[e.property]=e.data}catch(e){console.error(e)}finally{this._isReceiving=!1}}};function Ar(e,t){let n=t!==e;return!n&&e&&t&&(Array.isArray(e)&&Array.isArray(t)||typeof e==`object`&&typeof t==`object`)&&(n=!0),n}var jr=Symbol(`AutoSyncHandler`);function Mr(e){if(e[jr])return e[jr];let t=Or.getOrCreateSyncer(e);return t?.init(e),e[jr]=t,t}function Nr(e){let t=e[jr];t&&(Or.removeSyncer(t),t.destroy(),delete e[jr])}var Pr=function(e=null){return function(t,n){let r=``;r=typeof n==`string`?n:n.name;let i=null,a;typeof e==`string`?a=t[e]:typeof e==`function`&&(a=e),a==null&&(T()||Er)&&e!=null&&console.warn(`syncField: no callback function found for property "`+r+`"`,`"`+e+`"`);let o=t,s=o.__internalAwake;if(typeof s!=`function`){(Er||T())&&console.error(`@syncField can currently only used on Needle Engine Components, custom object of type "`+t?.constructor?.name+`" is not supported`,t);return}Er&&console.log(r);let c=Symbol(r);o.__internalAwake=function(){if(this[c]===void 0){if(this[c]=this[r],i=Or.getOrCreateSyncer(this),Object.getOwnPropertyDescriptor(this,r)?.set===void 0){let e=!1;Object.defineProperty(this,r,{set:function(t){let n=this[c];if(this[c]=t,e){(T()||Er)&&console.warn(`Recursive call detected`,r);return}e=!0;try{let e=Ar(t,n);Er&&console.log(`SyncField assignment`,r,`changed?`,e,t,a),e&&a?.call(this,t,n)!==!1&&Mr(this)?.notifyChanged(r,t)}finally{e=!1}},get:function(){return this[c]},configurable:!0,enumerable:!0})}i?.init(this),s.call(this)}};let l=o.__internalDestroy;o.__internalDestroy=function(){Nr(this),l.call(this)}}},Fr=new Map;function Ir(e,t){if(Fr.has(e))return Fr.get(e);let n=Lr(new URL(e,window.location.href),t);return Fr.set(e,n),n.finally(()=>{Fr.delete(e)}),n}async function Lr(e,t){if(!e)return Promise.resolve(null);let n=e.pathname,r=e.toString().toLowerCase().includes(`pmrem`)||e.searchParams.get(`pmrem`)!=null,i=n.endsWith(`.exr`),a=n.endsWith(`.hdr`),o=n.endsWith(`.ktx2`),s;if(i)s=new lr;else if(a)s=new sr;else if(o){let{ktx2Loader:e}=pr(t);s=e}else s=new pe;let c=e.toString();return await s.loadAsync(c).then(e=>{if(e){let t=n.lastIndexOf(`/`);e.name=n.substring(t>=0?t+1:0),r?e.mapping=306:e.mapping=304,s instanceof pe&&(e.colorSpace=ue)}return e}).catch(t=>(console.warn(`Failed to load texture from url:`,e),null))}var Rr=D(`debugavatar`),zr=class e extends N{static getAvatar(t){return t>=0&&t{this.target&&e&&e.guid===this.avatar?.guid&&Xe(this.target,e.position)})}update(){if((!this.context.connection.isConnected||this._model?.hasOwnership)&&(Br.LastChangeTime!==this._lastPoiChangedTime&&(this._lastPoiChangedTime=Br.LastChangeTime,this._lookDuration=0),this.selectTarget(),this._currentTargetObject&&this.context.time.frameCount%10==0&&this.target)){let e=Yt(this._currentTargetObject);Xe(this.target,e),this.context.connection.isConnected&&this.avatar&&(this.context.connection.send(Vr.TargetChanged,this._targetModel),this._targetModel.guid=this.avatar.guid,this._targetModel.position.copy(e))}}selectTarget(){if(this.context.time.time-this._lastUpdateTime>this._lookDuration){this._lastUpdateTime=this.context.time.time,this._lookDuration=Math.random()*.5+.2;let e=Br.Pois;if(e.length>0){let t=e[Math.floor(Math.random()*e.length)];if(t&&t.obj){if(t.avatar&&t.avatar===this.avatar)return;this._currentTargetObject=t.obj}}}}},L=D(`debugnetworkingstreams`),R;(function(e){e.Connected=`peer-user-connected`,e.StreamReceived=`receive-stream`,e.StreamEnded=`call-ended`,e.Disconnected=`peer-user-disconnected`,e.UserJoined=`user-joined`})(R||={});var Wr=class{type=R.StreamEnded;userId;direction;constructor(e,t){this.userId=e,this.direction=t}},Gr=class{type=R.StreamReceived;userId;stream;target;constructor(e,t,n){this.userId=e,this.stream=t,this.target=n}},Kr=class{guid;peerId;dontSave=!0;constructor(e,t){this.guid=e.id,this.peerId=t}},qr;(function(e){e.Incoming=`incoming`,e.Outgoing=`outgoing`})(qr||={});var Jr=class extends je{peerId;userId;direction;call;get stream(){return this._stream}_stream=null;_isDisposed=!1;close(){this._isDisposed||(this._isDisposed=!0,this.call.close(),Qr(this._stream))}get isOpen(){return this.call.peerConnection?.connectionState===`connected`}get isOpening(){return this.call.peerConnection?.connectionState===`connecting`}get isClosed(){return!this.isOpen||this._isDisposed}constructor(e,t,n,r=null){super(),this.peerId=t.peer,this.userId=e,this.call=t,this.direction=n,this._stream=r,t.on(`stream`,t=>{if(L&&console.log(`Receive stream`,` -Audio:`,t.getAudioTracks(),` -Video:`,t.getVideoTracks()),this._stream=t,n===qr.Incoming){let n=new Gr(e,t,this);this.dispatchEvent(n)}}),t.on(`close`,()=>{this.dispatchEvent(new Wr(e,n))})}};function Yr(e){return e=e.replace(`a=fmtp:111 minptime=10;useinbandfec=1`,`a=fmtp:111 ptime=5;useinbandfec=1;stereo=1;maxplaybackrate=48000;maxaveragebitrat=128000;sprop-stereo=1`),e}var Xr=class e extends je{static instances=new Map;static getOrCreate(t,n){if(e.instances.has(n))return e.instances.get(n);let r=new e(t,n);return e.instances.set(n,r),r}getMyPeerId(){if(this.context.connection.connectionId)return this.getPeerIdFromUserId(this.context.connection.connectionId)}getPeerIdFromUserId(e){return this.id+`-`+e}getUserIdFromPeerId(e){return e.substring(this.id.length+1)}makeCall(e,t){if(!t?.id){L?console.warn(`Can not make a call: mediastream has no id or is undefined`):console.debug(`Can not make a call: mediastream has no id or is undefined`);return}let n={metadata:{userId:this.context.connection.connectionId,streamId:t.id},sdpTransform:e=>Yr(e)},r=this._peer?.call(e,t,n);if(r){let n=this.registerCall(r,qr.Outgoing,t);return L&&console.warn(`📞 CALL ${e}`,` -Outgoing:`,this._outgoingCalls,` -Incoming:`,this._incomingCalls),n}else L&&console.error(`Failed to make call`,e,t,this._peer)}closeAll(){for(let e of this._incomingCalls)e.close();for(let e of this._outgoingCalls)e.close();this.updateCalls()}updateCalls=()=>{for(let e=this._incomingCalls.length-1;e>=0;e--){let t=this._incomingCalls[e];t.isClosed&&!t.isOpening&&this._incomingCalls.splice(e,1)}for(let e=this._outgoingCalls.length-1;e>=0;e--){let t=this._outgoingCalls[e],n=!1;t.isClosed&&!t.isOpening&&(t.stream?.active?L&&console.warn(`!!! Stream is still active, don't remove call`,t.userId,`Your id: `+this.context.connection.connectionId):(L&&console.warn(`!!! Remove closed call`,t.userId),n=!0)),this.context.connection.userIsInRoom(t.userId)===!1&&(L&&console.warn(`!!! User is not in room anymore, remove call`,t.userId),n=!0),n&&(t.close(),this._outgoingCalls.splice(e,1))}};get peer(){return this._peer}get incomingCalls(){return this._incomingCalls}id;context;_incomingCalls=[];_outgoingCalls=[];_peer;constructor(e,t){super(),this.context=e,this.id=t,this.setupPeer();let n=Object.getOwnPropertyDescriptor(navigator,`getUserMedia`)?.writable;try{n?navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia:L&&console.warn(`[PeerJs] getUserMedia is not writable`)}catch(e){L&&console.error(`[PeerJs] Error setting getUserMedia`,e)}}_enabled=!1;_enabledPeer=!1;onConnectRoomFn=this.onConnectRoom.bind(this);enable(){this._enabled||(this._enabled=!0,this.context.connection.beginListen(O.JoinedRoom,this.onConnectRoomFn),this.subscribePeerEvents())}disable(){this._enabled&&(this._enabled=!1,this.context.connection.stopListen(O.JoinedRoom,this.onConnectRoomFn),this.unsubscribePeerEvents())}onConnectRoom(){this.setupPeer()}async setupPeer(){if(this.context.connection.connectionId&&!this._enabledPeer){if(this._enabledPeer=!0,!this._peer){let e=this.getMyPeerId();e?this._peer=await gn(e):console.error(`Failed to setup peerjs because we dont have a connection id`,this.context.connection.connectionId)}this._enabled&&this.subscribePeerEvents()}}subscribePeerEvents(){this._peer&&(this._peer.on(`open`,this.onPeerConnect),this._peer.on(`close`,this.onPeerClose),this._peer.on(`call`,this.onPeerReceivingCall),this._peer.on(`disconnected`,this.onPeerDisconnected),this._peer.on(`error`,this.onPeerError))}unsubscribePeerEvents(){this._peer&&(this._peer.off(`open`,this.onPeerConnect),this._peer.off(`close`,this.onPeerClose),this._peer.off(`call`,this.onPeerReceivingCall),this._peer.off(`disconnected`,this.onPeerDisconnected),this._peer.off(`error`,this.onPeerError))}onPeerConnect=e=>{if(L&&console.log(`PEER opened as`,e),e===null){console.error(`Peer connection failed`,e);return}this.context.connection.send(R.Connected,new Kr(this,e))};onPeerClose=()=>{L&&console.log(`PEER closed`),this.updateCalls()};onPeerDisconnected=()=>{L&&console.log(`PEER disconnected`),this.updateCalls()};onPeerError=e=>{L&&console.error(`PEER error`,e)};onPeerReceivingCall=e=>{e.answer(void 0,{sdpTransform:e=>Yr(e)}),this.registerCall(e,qr.Incoming,null)};registerCall(e,t,n){let r=e.metadata;(!r||!r.userId)&&console.error(`Missing call metadata`,e);let i=r.userId;t===qr.Incoming&&L?console.warn(`← Receive call from`,e.metadata,e.connectionId):L&&console.warn(`→ Make call to`,e.metadata);let a=t===qr.Incoming?this._incomingCalls:this._outgoingCalls,o=new Jr(i,e,t,n);return a.push(o),e.on(`error`,e=>{console.error(`Call error`,e)}),e.on(`close`,()=>{L&&console.log(`Call ended`,e.metadata);let n=a.indexOf(o);n!==-1&&a.splice(n,1),o.close(),this.dispatchEvent(new Wr(i,t))}),o.addEventListener(R.StreamEnded,e=>{this.dispatchEvent(e)}),t===qr.Incoming&&(o.addEventListener(R.StreamReceived,e=>{this.dispatchEvent(e)}),e.on(`stream`,()=>{L&&console.log(`Received stream for call`,e.metadata);let t=0,n=setInterval(()=>{let r=t===0;!o.isOpen&&r&&(L&&console.warn(`Close call because stream is not active`,e.metadata),t+=1,clearInterval(n),o.close())},2e3)})),o}},Zr=class e extends je{static create(t,n){let r=Xr.getOrCreate(t.context,n||t.context.connection.connectionId||t.guid);return new e(t.context,r)}context;peer;_sendingStreams=new Map;debug=!1;constructor(e,t){if(super(),lt(e)){let n=e;e=n.context,t=Xr.getOrCreate(n.context,n.guid)}else typeof t==`string`&&(t=Xr.getOrCreate(e,t));if(!e)throw Error(`Failed to create NetworkedStreams because context is undefined`);if(!(e instanceof Xt))throw Error(`Failed to create NetworkedStreams because context is not an instance of Context`);if(!t)throw Error(`Failed to create NetworkedStreams because peer is undefined`);this.context=e,this.peer=t,L&&(this.debug=!0)}startSendingStream(e){this._sendingStreams.has(e)?console.warn(`Received start sending stream with stream that is already being sent`):(this._sendingStreams.set(e,[]),this.updateSendingCalls())}stopSendingStream(e){if(e){let t=this._sendingStreams.get(e);if(t){for(let e of t)e.close();t.length=0}this._sendingStreams.delete(e),t&&this.debug&&this.debugLogCurrentState()}this.updateSendingCalls()}_enabled=!1;get enabled(){return this._enabled}enable(){this._enabled||(this._enabled=!0,this.peer.enable(),this.peer.addEventListener(R.StreamReceived,this.onCallStreamReceived),this.peer.addEventListener(R.StreamEnded,this.onCallEnded),this.context.connection.beginListen(R.Connected,this.onUserConnected),this.context.connection.beginListen(O.JoinedRoom,this.onJoinedRoom),this.context.connection.beginListen(O.UserJoinedRoom,this.onJoinedRoom),this.context.connection.beginListen(O.UserLeftRoom,this.onUserLeft),this.context.connection.beginListen(O.LeftRoom,this.onLeftRoom),this._tickIntervalId=setInterval(this.tick,5e3))}disable(){this._enabled&&(this._enabled=!1,this.peer.disable(),this.peer.removeEventListener(R.StreamReceived,this.onCallStreamReceived),this.peer.removeEventListener(R.StreamEnded,this.onCallEnded),this.context.connection.stopListen(R.Connected,this.onUserConnected),this.context.connection.stopListen(O.JoinedRoom,this.onJoinedRoom),this.context.connection.stopListen(O.UserJoinedRoom,this.onJoinedRoom),this.context.connection.stopListen(O.UserLeftRoom,this.onUserLeft),this.context.connection.stopListen(O.LeftRoom,this.onLeftRoom),this._tickIntervalId!=null&&(clearInterval(this._tickIntervalId),this._tickIntervalId=void 0))}_tickIntervalId;tick=()=>{this.updateSendingCalls()};onJoinedRoom=e=>{this._sendingStreams.size>0&&(this.debug&&console.warn(`${e?.userId?`User ${e.userId}`:`You`} joined room`,e,this._sendingStreams.size),this.updateSendingCalls())};onLeftRoom=e=>{this.debug&&console.warn(`${e?.userId||`You`} left room`,e),this.stopCallsToUsersThatAreNotInTheRoomAnymore(),this.peer.closeAll()};onCallStreamReceived=e=>{this.debug&&console.log(`Call with `+e.userId+` started`),this.dispatchEvent({type:R.StreamReceived,target:this,stream:e.stream,userId:e.userId}),this.debug&&this.debugLogCurrentState()};onCallEnded=e=>{this.debug&&console.log(`Call with `+e.userId+` ended`),this.dispatchEvent(e),this.debug&&this.debugLogCurrentState()};onUserConnected=e=>{if(this.peer.id===e.guid){this.debug&&console.log(`PEER USER CONNECTED`,e.guid,e,this._sendingStreams.size);let t=this._sendingStreams.keys().next().value;if(!t)return;this.peer.makeCall(e.peerId,t)}else L&&console.log(`Unknown user connected`,e.guid,e.peerId)};onUserLeft=e=>{this.debug&&console.log(`User left room: `+e.userId),this.stopCallsToUsersThatAreNotInTheRoomAnymore()};updateSendingCalls(){let e=this.context.connection.connectionId;for(let t of this._sendingStreams.keys()){let n=this._sendingStreams.get(t)||[];for(let r of this.context.connection.usersInRoom()){if(r===e)continue;let i=this.peer.getPeerIdFromUserId(r);if(n.find(e=>e.peerId===i&&e.direction===qr.Outgoing&&!e.isClosed&&e.stream?.active))L&&console.debug(`Already have a call with user `+r+` / peer `+i);else{let e=this.peer.makeCall(i,t);e&&n.push(e)}}this._sendingStreams.set(t,n)}this.stopCallsToUsersThatAreNotInTheRoomAnymore()}stopCallsToUsersThatAreNotInTheRoomAnymore(){for(let e of this._sendingStreams.keys()){let t=this._sendingStreams.get(e);if(t)for(let e=t.length-1;e>=0;e--){let n=t[e];this.context.connection.userIsInRoom(n.userId)?L&&(this.context.connection.connectionId===n.userId?console.warn(`You are still in the room [${e}] ${n.userId}`):console.log(`User is still in room [${e}] ${n.userId}`)):(L&&console.log(`Remove call ${[e]} to user that is not in room anymore ${n.userId}`),n.close(),t.splice(e,1))}}this.peer.updateCalls(),this.debug&&this.debugLogCurrentState()}debugLogCurrentState(){console.warn(`You (${this.context.connection.connectionId}) are currently sending ${this._sendingStreams.size} and receiving ${this.peer.incomingCalls.length} calls (${this.peer.incomingCalls.map(e=>e.userId).join(`, `)})`,this.peer.incomingCalls)}};function Qr(e){if(e&&e instanceof MediaStream)for(let t of e.getTracks())t.stop()}var $r=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ei=`noVoip`,ti=D(`debugvoip`),ni=class extends N{autoConnect=!0;runInBackground=!0;createMenuButton=!0;debug=!1;_net;_menubutton;awake(){ti&&(this.debug=!0),this.debug&&(console.log(`VOIP debugging: press 'v' to toggle mute or 'c' to toggle connect/disconnect`),window.addEventListener(`keydown`,async e=>{switch(e.key.toLowerCase()){case`v`:console.log(`MUTE?`,!this.isMuted),this.setMuted(!this.isMuted);break;case`c`:this.isSending?this.disconnect():this.connect();break}}),window.addEventListener(`blur`,()=>{console.log(`VOIP: MUTE ON BLUR`),this.setMuted(!0)}),window.addEventListener(`focus`,()=>{console.log(`VOIP: UNMUTE ON FOCUS`),this.setMuted(!1)}))}onEnable(){this._net||=Zr.create(this),this.debug&&(this._net.debug=!0),this._net.addEventListener(R.StreamReceived,this.onReceiveStream),this._net.addEventListener(R.StreamEnded,this.onStreamEnded),this._net.enable(),this.autoConnect&&this.context.connection.isConnected&&this.connect(),this.context.connection.beginListen(O.JoinedRoom,this.onJoinedRoom),this.context.connection.beginListen(O.LeftRoom,this.onLeftRoom),this.onEnabledChanged(),this.updateButton(),window.addEventListener(`visibilitychange`,this.onVisibilityChanged)}onDisable(){this._net&&(this._net.stopSendingStream(this._outputStream),this._net.removeEventListener(R.StreamReceived,this.onReceiveStream),this._net.removeEventListener(R.StreamEnded,this.onStreamEnded),this._net?.disable()),this.context.connection.stopListen(O.JoinedRoom,this.onJoinedRoom),this.context.connection.stopListen(O.LeftRoom,this.onLeftRoom),this.onEnabledChanged(),this.updateButton(),window.removeEventListener(`visibilitychange`,this.onVisibilityChanged)}onDestroy(){this._menubutton?.remove(),this._menubutton=void 0}_allowSending=!0;_outputStream=null;get isSending(){return this._outputStream!=null&&this._outputStream.active}async connect(e){return this._net?this.context.connection.isConnected?await A.microphonePermissionsGranted()?(this._allowSending=!0,this._net?.stopSendingStream(this._outputStream),Qr(this._outputStream),this._outputStream=await this.getAudioStream(e),this._outputStream?(this.debug&&console.log(`VOIP: Got audio stream`),this._net?.startSendingStream(this._outputStream),this.updateButton(),!0):(this.updateButton(),await A.microphonePermissionsGranted()?console.error(`VOIP: Could not get audio stream - please make sure to connect an audio device and grant microphone permissions`):Nn(`Microphone permissions not granted: Please grant microphone permissions to use voice chat`),(this.debug||T())&&console.log(`VOIP: Failed to get audio stream`),!1)):(console.error(`Cannot connect to voice chat - microphone permissions not granted`),this.updateButton(),!1):(console.error(`Cannot connect to voice chat - not connected to server`),this.updateButton(),!1):(console.error(`Cannot connect to voice chat - NetworkedStreams not initialized. Make sure the component is enabled before calling this method.`),!1)}disconnect(e){e?.remember&&(this._allowSending=!1),this._net?.stopSendingStream(this._outputStream),Qr(this._outputStream),this._outputStream=null,this.updateButton()}setMuted(e){let t=this._outputStream?.getAudioTracks();if(t)for(let n of t)n.enabled=!e}get isMuted(){if(this._outputStream===null)return!1;let e=this._outputStream?.getAudioTracks();if(e){for(let t of e)if(!t.enabled)return!0}return!1}async updateButton(){if(this.createMenuButton){if(this._menubutton||(this._menubutton=document.createElement(`button`),this._menubutton.addEventListener(`click`,()=>{this.isSending?this.disconnect({remember:!0}):this.connect(),A.microphonePermissionsGranted().then(e=>{e||kn(`Microphone permissions not granted. Please allow your browser to use the microphone to be able to talk. Click on the button on the left side of your browser's address bar to allow microphone permissions.`)})})),this._menubutton){this.context.menu.appendChild(this._menubutton),this.activeAndEnabled?this._menubutton.style.display=``:this._menubutton.style.display=`none`,this._menubutton.title=this.isSending?`Click to disable your microphone`:`Click to enable your microphone`;let e=(this.isSending,``),t=this.isSending?`mic`:`mic_off`;await A.microphonePermissionsGranted()||(e=`No Permission`,t=`mic_off`,this._menubutton.title=`Microphone permissions not granted. Please allow your browser to use the microphone to be able to talk. This can usually be done in the addressbar of the webpage.`),this._menubutton.innerText=e,this._menubutton.prepend(Ze(t)),this.context.connection.isConnected==0?this._menubutton.setAttribute(`disabled`,``):this._menubutton.removeAttribute(`disabled`)}}else this.activeAndEnabled||this._menubutton?.remove()}getFrequency(e){return this.unsupported_getfrequency||(this.unsupported_getfrequency=!0,T()&&kn(`VOIP: getFrequency is currently not supported`),console.warn(`VOIP: getFrequency is currently not supported`)),null}async getAudioStream(e){if(!navigator.mediaDevices.getUserMedia)return console.error(`No getDisplayMedia support`),null;let t=async e=>await navigator.mediaDevices.getUserMedia({audio:e??!0,video:!1}).catch(e=>(console.warn(`VOIP failed getting audio stream`,e),null)),n=await t(e);if(!n)return null;if(A.isiOS()&&e?.deviceId===void 0){let n=(await navigator.mediaDevices.enumerateDevices()).find(e=>(e.kind===`audioinput`||e.kind===`audiooutput`)&&!e.label.includes(`iPhone`));if(n){let r=Object.assign({},e);return r.deviceId=n.deviceId,await t(r)}}return n}onJoinedRoom=async()=>{this.debug&&console.log(`VOIP: Joined room`),await Sn(300),this.autoConnect&&!this.isSending&&this._allowSending&&this.connect()};onLeftRoom=()=>{this.debug&&console.log(`VOIP: Left room`),this.disconnect();for(let e of this._incomingStreams.values())Qr(e.srcObject);this._incomingStreams.clear()};_incomingStreams=new Map;onReceiveStream=e=>{let t=e.target.userId,n=e.stream,r=this._incomingStreams.get(t);r||(r=new Audio,this._incomingStreams.set(t,r)),r.srcObject=n,r.setAttribute(`autoplay`,`true`),yt.registerWaitForInteraction(()=>{r?.play().catch(e=>{console.error(`VOIP: Failed to play audio`,e)})})};onStreamEnded=e=>{Qr(this._incomingStreams.get(e.userId)?.srcObject),this._incomingStreams.delete(e.userId)};onEnabledChanged=()=>{for(let e of this._incomingStreams){let t=e[1];t.muted=!this.enabled}};onVisibilityChanged=()=>{if(this.runInBackground)return;let e=document.visibilityState!==`visible`;this.setMuted(e);for(let t of this._incomingStreams){let n=t[1];n.muted=e}}};$r([E()],ni.prototype,`autoConnect`,void 0),$r([E()],ni.prototype,`runInBackground`,void 0),$r([E()],ni.prototype,`createMenuButton`,void 0);var ri=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ii=D(`debugmouth`),ai=class extends N{idle=[];talking=[];marker=null;voip=null;lastMouthChangeTime=0;mouthChangeLength=0;awake(){setTimeout(()=>{this.voip=k.findObjectOfType(ni,this.context),this.marker||=k.getComponentInParent(this.gameObject,zr)},3e3)}update(){if(!this.voip||this.context.time.frameCount%10!=0)return;let e=this.marker?.connectionId??null;if(!e){ii&&(e=null);return}let t=this.voip.getFrequency(e)??0;this.updateLips(t)}updateLips(e){if(this.context.time.time-this.lastMouthChangeTime>this.mouthChangeLength){if(this.mouthChangeLength=.05+Math.random()*.1,this.talking&&this.talking.length>0&&e>30){this.lastMouthChangeTime=this.context.time.time;let e=Math.floor(Math.random()*this.talking.length);this.setMouthShapeActive(this.talking,e)}else if(this.idle.length>0&&this.context.time.time-this.lastMouthChangeTime>.5){this.lastMouthChangeTime=this.context.time.time;let e=Math.floor(Math.random()*this.idle.length);this.setMouthShapeActive(this.idle,e)}}}setMouthShapeActive(e,t){if(e){e==this.idle?this.talking.map(e=>e.visible=!1):this.idle.map(e=>e.visible=!1);for(let n=0;n=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ci=D(`debugxrflags`),li=D(`disablexrflags`);li&&console.warn(`XRFlags are disabled`);var ui;(function(e){e[e.Never=0]=`Never`,e[e.Browser=1]=`Browser`,e[e.AR=2]=`AR`,e[e.VR=4]=`VR`,e[e.FirstPerson=8]=`FirstPerson`,e[e.ThirdPerson=16]=`ThirdPerson`,e[e.All=4294967295]=`All`})(ui||={});var di=class e{static Global=new e;Mask=ui.Browser|ui.ThirdPerson;Has(e){return(this.Mask&e)!==0}Set(e){ci&&console.warn(`Set XR flag state to`,e),this.Mask=e,fi.Apply()}Enable(e){this.Mask|=e,fi.Apply()}Disable(e){this.Mask&=~e,fi.Apply()}Toggle(e){this.Mask^=e,fi.Apply()}EnableAll(){this.Mask=-1,fi.Apply()}DisableAll(){this.Mask=0,fi.Apply()}},fi=class e extends N{static registry=[];static Apply(){for(let e of this.registry)e.UpdateVisible(di.Global)}static firstApply;static buffer=new di;visibleIn;awake(){e.registry.push(this)}onEnable(){e.firstApply?this.UpdateVisible(di.Global):(e.firstApply=!0,e.Apply())}onDestroy(){let t=e.registry.indexOf(this);t>=0&&e.registry.splice(t,1)}get isOn(){return this.gameObject.visible}UpdateVisible(t=null){if(li)return;let n,r=t;if(r&&typeof r==`number`&&(console.assert(typeof r==`number`,`XRFlag.UpdateVisible: state must be a number`,r),ci&&console.log(r),e.buffer.Mask=r,t=e.buffer),t instanceof di?(ci&&console.warn(this.name,`use passed in mask`,t.Mask,this.visibleIn),n=t.Has(this.visibleIn)):(ci&&console.log(this.name,`use global mask`),di.Global.Has(this.visibleIn)),n!==void 0)if(n)ci&&console.log(this.name,`is visible`,this.gameObject.uuid),k.setActive(this.gameObject,!0);else{if(ci&&console.log(this.name,`is not visible`,this.gameObject.uuid),!this.gameObject.visible)return;this.gameObject.visible=!1}}};si([E()],fi.prototype,`visibleIn`,void 0);var pi=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},mi=class extends N{eyes=[];lastBlinkTime=0;blinkLength=0;eyesOpen=!0;state=null;awake(){this.state=k.getComponentInParent(this.gameObject,fi)}update(){if(!(!this.gameObject||!this.gameObject.visible)&&!(!this.eyes||!Array.isArray(this.eyes)||this.eyes.length===0)&&this.context.time.time-this.lastBlinkTime>this.blinkLength){if(this.lastBlinkTime=this.context.time.time,this.state&&!this.state.isOn||!this.activeAndEnabled)return;if(this.eyesOpen=!this.eyesOpen,this.blinkLength=Math.random(),this.eyesOpen?(this.blinkLength*=3,this.blinkLength+=.5,Math.random()<.1&&(this.blinkLength=.1+Math.random()*.2)):(this.blinkLength*=Math.random()*.2,this.blinkLength+=.1),Math.random()<.1&&(this.blinkLength*=3),this.blinkLength=Math.max(.2,this.blinkLength),this.blinkLength=Math.min(3,this.blinkLength),this.eyes)for(let e of this.eyes)e&&(e.visible=this.eyesOpen)}}};pi([E(S)],mi.prototype,`eyes`,void 0),pi([E()],mi.prototype,`lastBlinkTime`,void 0),pi([E()],mi.prototype,`blinkLength`,void 0),pi([E()],mi.prototype,`eyesOpen`,void 0);var hi=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},gi=class e extends N{head=null;eyes=null;target=null;brain=null;awake(){this.brain||=k.getComponentInParent(this.gameObject,Ur),this.brain||=k.addComponent(this.gameObject,Ur),this.brain&&this.target&&(this.brain.controlledTarget=this.target)}vec=new r;static forward=new r(0,0,1);currentTargetPoint=new r;update(){let t=this.target;if(t&&this.head){let n=this.eyes;if(n){let r=Yt(t);this.currentTargetPoint.lerp(r,this.context.time.deltaTime/.1);let i=Yt(this.head),a=this.vec.copy(this.currentTargetPoint).sub(i).normalize();if(a.length()<.1)return;let o=e.forward;if(o.set(0,0,1),o.applyQuaternion(Rn(this.head)),o.dot(a)>.45)for(let e=0;e=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},vi=class extends N{get isCollider(){return!0}attachedRigidbody=null;isTrigger=!1;sharedMaterial;membership=[0];filter;awake(){super.awake(),this.attachedRigidbody||=this.gameObject.getComponentInParent(vt)}start(){this.attachedRigidbody||=this.gameObject.getComponentInParent(vt)}onEnable(){this.attachedRigidbody||=this.gameObject.getComponentInParent(vt)}onDisable(){this.context.physics.engine?.setColliderEnabled(this,!1)||this.context.physics.engine?.removeBody(this)}onDestroy(){this.context.physics.engine?.removeBody(this)}get body(){return this.context.physics.engine?.getBody(this)}updateProperties=()=>{this.context.physics.engine?.updateProperties(this)};updatePhysicsMaterial(){this.context.physics.engine?.updatePhysicsMaterial(this)}};_i([E(vt)],vi.prototype,`attachedRigidbody`,void 0),_i([E()],vi.prototype,`isTrigger`,void 0),_i([E()],vi.prototype,`sharedMaterial`,void 0),_i([E()],vi.prototype,`membership`,void 0),_i([E()],vi.prototype,`filter`,void 0);var yi=class extends vi{radius=.5;center=new r(0,0,0);onEnable(){super.onEnable(),this.context.physics.engine?.setColliderEnabled(this,!0)||this.context.physics.engine?.addSphereCollider(this),tt(this.gameObject.scale,this.updateProperties)}onDisable(){super.onDisable(),Jn(this.gameObject.scale,this.updateProperties)}onValidate(){this.updateProperties()}};_i([Kn(),E()],yi.prototype,`radius`,void 0),_i([E(r)],yi.prototype,`center`,void 0);var bi=class e extends vi{static add(t,n){let r=_n(t,e);return r.autoFit(),n?.rigidbody===!0&&_n(t,vt,{isKinematic:!1}),r}size=new r(1,1,1);center=new r(0,0,0);onEnable(){super.onEnable(),this.context.physics.engine?.setColliderEnabled(this,!0)||this.context.physics.engine?.addBoxCollider(this,this.size),tt(this.gameObject.scale,this.updateProperties)}onDisable(){super.onDisable(),Jn(this.gameObject.scale,this.updateProperties)}onValidate(){this.updateProperties()}autoFit(e){let t=this.gameObject,n=t.position.clone(),i=t.quaternion.clone(),a=t.scale.clone(),o=t.parent;t.position.set(0,0,0),t.quaternion.set(0,0,0,1),t.scale.set(1,1,1),t.parent=null,t.updateMatrix();let s=fn([t]);t.position.copy(n),t.quaternion.copy(i),t.scale.copy(a),t.parent=o,e?.debug===!0&&Ln.DrawWireBox3(s,16768256,20),this.size=s.getSize(new r)||new r(1,1,1),this.center=s.getCenter(new r)||new r(0,0,0),this.size.length()<=0&&this.size.set(.01,.01,.01)}};_i([Kn(),E(r)],bi.prototype,`size`,void 0),_i([E(r)],bi.prototype,`center`,void 0);var xi=class extends vi{sharedMesh;convex=!1;onEnable(){if(super.onEnable(),!(!this.context.physics.engine||this.context.physics.engine.setColliderEnabled(this,!0)))if(this.sharedMesh?.isMesh||(this.gameObject instanceof x||this.gameObject instanceof ve)&&(this.sharedMesh=this.gameObject),this.sharedMesh?.isMesh)this.context.physics.engine.addMeshCollider(this,this.sharedMesh,this.convex),P.assignMeshLOD(this.sharedMesh,0).then(e=>{e&&this.activeAndEnabled&&this.context.physics.engine&&this.sharedMesh&&(this.context.physics.engine.removeBody(this),this.sharedMesh.geometry=e,this.context.physics.engine.addMeshCollider(this,this.sharedMesh,this.convex))});else{let e=this.sharedMesh;if(e?.isGroup){console.warn(`MeshCollider mesh is a group \"${this.sharedMesh?.name||this.gameObject.name}\", adding all children as colliders. This is currently not fully supported (colliders can not be removed from world again)`,this);let t=[];for(let n in e.children){let r=e.children[n];r.isMesh&&(this.context.physics.engine.addMeshCollider(this,r,this.convex),t.push(P.assignMeshLOD(r,0)))}Promise.all(t).then(e=>{if(e.some(e=>e)==0)return;this.context.physics.engine?.removeBody(this);let t=new x;for(let n of e)n&&this.activeAndEnabled&&(t.geometry=n,this.context.physics.engine?.addMeshCollider(this,t,this.convex))})}else (T()||D(`showcolliders`))&&console.warn(`[MeshCollider] A MeshCollider mesh is assigned to an unknown object on \"${this.gameObject.name}\", but it's neither a Mesh nor a Group. Please double check that you attached the collider component to the right object and report a bug otherwise!`,this)}}};_i([E(x)],xi.prototype,`sharedMesh`,void 0),_i([E()],xi.prototype,`convex`,void 0);var Si=class extends vi{center=new r(0,0,0);radius=.5;height=2;onEnable(){super.onEnable(),this.context.physics.engine?.setColliderEnabled(this,!0)||this.context.physics.engine?.addCapsuleCollider(this,this.height,this.radius)}};_i([E(r)],Si.prototype,`center`,void 0),_i([E()],Si.prototype,`radius`,void 0),_i([E()],Si.prototype,`height`,void 0);var Ci=Symbol(`customVisibilityFlag`);function wi(e,t){e.layers[Ci]=t}var Ti=Symbol(`DidPatchLayers`);function Ei(){let e=i.prototype;if(e[Ti])return;e[Ti]=!0;let t=e.test;e.test=function(e){return this[Ci]===!1?!1:t.call(this,e)}}var Di=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Oi=D(`debugcontactshadows`);Bn(e=>{let t=e.domElement.getAttribute(`contactshadows`)||e.domElement.getAttribute(`contact-shadows`);if(t!=null&&t!=`0`&&t!=`false`){console.debug("Auto-creating ContactShadows because of `contactshadows` attribute");let n=ki.auto(e),r=parseFloat(t);isNaN(r)||(n.opacity=r,n.darkness=r)}});var ki=class e extends N{static _instances=new Map;static auto(t,n){if(t||=Xt.Current,!t)throw Error(`No context provided and no current context set.`);let r=this._instances.get(t);if(!r||r.destroyed){let n=new S;n.name=`ContactShadows`,r=_n(n,e,{autoFit:!1,occludeBelowGround:!1}),this._instances.set(t,r)}return t.scene.add(r.gameObject),r.fitShadows(n),r}autoFit=!1;darkness=.5;opacity=.5;blur=4;occludeBelowGround=!1;backfaceShadows=!0;minSize;manualUpdate=!1;set needsUpdate(e){this._needsUpdate=e}get needsUpdate(){return this._needsUpdate}_needsUpdate=!1;shadowsRoot=new S;shadowCamera;shadowGroup=new ve;renderTarget;renderTargetBlur;plane;occluderMesh;blurPlane;planeMaterial;depthMaterial;horizontalBlurMaterial;verticalBlurMaterial;textureSize=512;fitShadows(e={}){Oi&&console.warn(`Fitting shadows to scene`),Qe(this.shadowsRoot,!1);let t=fn(e.object||this.context.scene,[this.shadowsRoot]),n=Math.max(1,this.blur/32),i=t.max.x-t.min.x,a=t.max.z-t.min.z;t.expandByVector(new r(n*i,0,n*a)),Oi&&Ln.DrawWireBox3(t,16776960,60),this.gameObject.parent&&t.applyMatrix4(this.gameObject.parent.matrixWorld.clone().invert());let o=t.min,s=Math.max(1e-5,(t.max.y-o.y)*.002);t.max.y+=s,this.shadowsRoot.position.set((o.x+t.max.x)/2,o.y-s,(o.z+t.max.z)/2),this.shadowsRoot.scale.set(t.max.x-o.x,t.max.y-o.y,t.max.z-o.z),e.positionOffset&&(e.positionOffset.x!==void 0&&(this.shadowsRoot.position.x+=e.positionOffset.x),e.positionOffset.y!==void 0&&(this.shadowsRoot.position.y+=e.positionOffset.y),e.positionOffset.z!==void 0&&(this.shadowsRoot.position.z+=e.positionOffset.z)),e.scaleFactor&&(e.scaleFactor.x!==void 0&&(this.shadowsRoot.scale.x*=e.scaleFactor.x),e.scaleFactor.y!==void 0&&(this.shadowsRoot.scale.y*=e.scaleFactor.y),e.scaleFactor.z!==void 0&&(this.shadowsRoot.scale.z*=e.scaleFactor.z)),this.applyMinSize(),this.shadowsRoot.matrixWorldNeedsUpdate=!0,Oi&&console.log(`Fitted shadows to scene`,this.shadowsRoot.scale.clone())}awake(){e._instances.set(this.context,this),this.shadowsRoot.hideFlags=wt.DontExport,Qe(this.shadowsRoot,!1)}start(){Oi&&console.log(`Create ContactShadows on `+this.gameObject.name,this),this.gameObject.add(this.shadowsRoot),this.shadowsRoot.add(this.shadowGroup),this.renderTarget=new u(this.textureSize,this.textureSize),this.renderTarget.texture.generateMipmaps=!1,this.renderTargetBlur=new u(this.textureSize,this.textureSize),this.renderTargetBlur.texture.generateMipmaps=!1;let e=new He(1,1).rotateX(Math.PI/2);this.gameObject instanceof x&&(console.warn(`ContactShadows can not be added to a Mesh. Please add it to a Group or an empty Object`),wi(this.gameObject,!1)),this.plane=new x(e,this.planeMaterial=new v({map:this.renderTarget.texture,opacity:this.opacity,color:0,transparent:!0,depthWrite:!1,side:0})),this.plane.scale.y=-1,this.plane.layers.set(2),this.shadowsRoot.add(this.plane),this.plane&&(this.plane.renderOrder=1),this.occluderMesh=new x(this.plane.geometry,new v({depthWrite:!0,stencilWrite:!0,colorWrite:!1,side:1})).translateY(-1e-4),this.occluderMesh.renderOrder=-100,this.occluderMesh.layers.set(2),this.shadowsRoot.add(this.occluderMesh),this.blurPlane=new x(e),this.blurPlane.visible=!1,this.shadowGroup.add(this.blurPlane),this.shadowCamera=new Ae(-1/2,1/2,1/2,-1/2,0,1),this.shadowCamera.layers.enableAll(),this.shadowCamera.rotation.x=Math.PI/2,this.shadowCamera.matrixWorldAutoUpdate=!1,this.shadowGroup.add(this.shadowCamera),this.shadowCamera.updateMatrix(),this.depthMaterial=new t,this.depthMaterial.userData.darkness={value:this.darkness},this.depthMaterial.blending=5,this.depthMaterial.blendEquation=104,this.depthMaterial.onBeforeCompile=e=>{this.depthMaterial&&(e.uniforms.darkness=this.depthMaterial.userData.darkness,e.fragmentShader=` - uniform float darkness; - ${e.fragmentShader.replace(`gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );`,`gl_FragColor = vec4( vec3( 1.0 ), ( 1.0 - fragCoordZ ) * darkness * opacity * (gl_FrontFacing ? 1.0 : 0.66) );`)} - `)},this.depthMaterial.depthTest=!1,this.depthMaterial.depthWrite=!1,this.horizontalBlurMaterial=new Re(rr),this.horizontalBlurMaterial.depthTest=!1,this.verticalBlurMaterial=new Re($n),this.verticalBlurMaterial.depthTest=!1,this.shadowGroup.visible=!1,this.autoFit?this.fitShadows():this.applyMinSize()}onEnable(){this._needsUpdate=!0}onDestroy(){e._instances.get(this.context)===this&&e._instances.delete(this.context),this.renderTarget?.dispose(),this.renderTargetBlur?.dispose(),this.depthMaterial?.dispose(),this.horizontalBlurMaterial?.dispose(),this.verticalBlurMaterial?.dispose(),this.blurPlane?.geometry.dispose(),this.plane?.geometry.dispose(),this.occluderMesh?.geometry.dispose()}onBeforeRender(e){if(this.manualUpdate&&!this._needsUpdate)return;if(this._needsUpdate=!1,!this.renderTarget||!this.renderTargetBlur||!this.depthMaterial||!this.shadowCamera||!this.blurPlane||!this.shadowGroup||!this.plane||!this.horizontalBlurMaterial||!this.verticalBlurMaterial||!this.planeMaterial){Oi&&console.error(`ContactShadows: not initialized yet`);return}this.depthMaterial.userData.darkness.value=this.darkness,this.planeMaterial.opacity=this.opacity;let t=this.context.scene,n=this.context.renderer,r=n.getRenderTarget();this.shadowGroup.visible=!0,this.occluderMesh&&(this.occluderMesh.visible=!1);let i=this.plane.visible;this.plane.visible=!1,this.gameObject instanceof x&&wi(this.gameObject,!1);let a=t.background;t.background=null,t.overrideMaterial=this.depthMaterial,this.backfaceShadows?this.depthMaterial.side=2:this.depthMaterial.side=0;let o=n.getClearAlpha();n.setClearAlpha(0);let s=n.xr.enabled;n.xr.enabled=!1;let c=this.context.scene.matrixWorldAutoUpdate;this.context.scene.matrixWorldAutoUpdate=!1;let l=n.renderLists.get(t,0),u=l.transparent;Ai.length=0,l.transparent=Ai,ji.length=0;for(let e of l.opaque){if(!e.object.visible)continue;let t=e.material,n=e.material.colorWrite==0||t.wireframe===!0||mn(e.object)===!1;!n&&e.material.isLineMaterial&&(n=!0),!n&&e.material.isPointsMaterial&&(n=!0),n&&(ji.push(e.object),e.object[`needle:visible`]=e.object.visible,e.object.visible=!1)}this.shadowCamera.parent?this.shadowCamera.matrixWorld.multiplyMatrices(this.shadowCamera.parent.matrixWorld,this.shadowCamera.matrix):this.shadowCamera.matrixWorld.copy(this.shadowCamera.matrix),this.shadowCamera.matrixWorldInverse.copy(this.shadowCamera.matrixWorld).invert(),n.setRenderTarget(this.renderTarget),n.clear(),n.render(t,this.shadowCamera),l.transparent=u;for(let e of ji)e[`needle:visible`]!=null&&(e.visible=e[`needle:visible`]);t.overrideMaterial=null;let d=Math.max(this.blur,.05);this.blurShadow(d*2),this.blurShadow(d*.5),this.shadowGroup.visible=!1,this.occluderMesh&&(this.occluderMesh.visible=this.occludeBelowGround),this.plane.visible=i,n.setRenderTarget(r),n.setClearAlpha(o),t.background=a,n.xr.enabled=s,this.context.scene.matrixWorldAutoUpdate=c}blurShadow(e){if(!this.blurPlane||!this.shadowCamera||!this.renderTarget||!this.renderTargetBlur||!this.horizontalBlurMaterial||!this.verticalBlurMaterial)return;this.blurPlane.visible=!0;let t=this.shadowsRoot.worldScale,n=(t.x+t.z)/2,r=t.z/n,i=t.x/n;this.blurPlane.material=this.horizontalBlurMaterial,this.blurPlane.material.uniforms.tDiffuse.value=this.renderTarget.texture,this.horizontalBlurMaterial.uniforms.h.value=e*1/this.textureSize*r;let a=this.context.renderer,o=a.getRenderTarget();a.setRenderTarget(this.renderTargetBlur),a.render(this.blurPlane,this.shadowCamera),this.blurPlane.material=this.verticalBlurMaterial,this.blurPlane.material.uniforms.tDiffuse.value=this.renderTargetBlur.texture,this.verticalBlurMaterial.uniforms.v.value=e*1/this.textureSize*i,a.setRenderTarget(this.renderTarget),a.render(this.blurPlane,this.shadowCamera),this.blurPlane.visible=!1,a.setRenderTarget(o)}applyMinSize(){this.minSize&&this.shadowsRoot.scale.set(Math.max(this.minSize.x||0,this.shadowsRoot.scale.x),Math.max(this.minSize.y||0,this.shadowsRoot.scale.y),Math.max(this.minSize.z||0,this.shadowsRoot.scale.z))}};Di([E()],ki.prototype,`autoFit`,void 0),Di([E()],ki.prototype,`darkness`,void 0),Di([E()],ki.prototype,`opacity`,void 0),Di([E()],ki.prototype,`blur`,void 0),Di([E()],ki.prototype,`occludeBelowGround`,void 0),Di([E()],ki.prototype,`backfaceShadows`,void 0);var Ai=[],ji=[],Mi=D(`debugstencil`);function Ni(e,t){return(e&1<=0;e--){let n=r[e];if(Ni(n.layer,t)){Mi&&console.log(n),setTimeout(()=>{ft()&&bt(t.gameObject)&&(kn(`Stencil not supported on instanced objects`),console.warn(`Stencil not supported on instanced objects`,t))},500);for(let e=0;et.name===e);r?(r.value=t,r.textureTransform=n):this._overrides.push({name:e,value:t,textureTransform:n})}getOverride(e){return this._overrides.find(t=>t.name===e)}removeOveride(e){let t=this._overrides.findIndex(t=>t.name===e);t>=0&&this._overrides.splice(t,1)}clearAllOverrides(){this._overrides=[]}get overrides(){return this._overrides}hasOverrides(){return this._overrides.length>0}setDefine(e,t){this._defines[e]=t}clearDefine(e){this._defines[e]=void 0}getDefines(){return this._defines}getCacheKey(){let e=[],t=Object.keys(this._defines).sort();for(let n of t){let t=this._defines[n];t!==void 0&&e.push(`d:${n}=${t}`)}for(let t of this._overrides){if(t.value===null)continue;let n=``;if(t.value instanceof xe){if(n=t.value.uuid||`texture`,t.textureTransform){let e=t.textureTransform;e.offset&&(n+=`;to:${e.offset.x},${e.offset.y}`),e.repeat&&(n+=`;tr:${e.repeat.x},${e.repeat.y}`)}}else if(Array.isArray(t.value))n=t.value.join(`,`);else if(t.value&&typeof t.value==`object`&&`r`in t.value){let e=t.value;n=`${e.r},${e.g},${e.b},${e.a===void 0?``:e.a}`}else if(t.value&&typeof t.value==`object`&&`x`in t.value){let e=t.value;n=`${e.x},${e.y}${e.z===void 0?``:`,${e.z}`}${e.w===void 0?``:`,${e.w}`}`}else n=String(t.value);e.push(`${t.name}=${n}`)}return e.join(`;`)}},Ui=Symbol(`originalValues`),Wi=Symbol(`savedTextureTransforms`);function Gi(e){let t=Vi.getBlock(e);if(t)return{block:t,owner:e};if(e.parent&&e.parent.type===`Group`&&(t=Vi.getBlock(e.parent),t))return{block:t,owner:e.parent}}var Ki=Symbol(`beforeRenderingFlag`),qi=new WeakMap,Ji=new WeakMap,Yi=function(e,t,n,r){let i=Gi(this)?.block;if(i&&i.hasOverrides()){let e=i.getOverride(`transmission`)?.value,t=i.getOverride(`transparent`)?.value;e!==void 0&&typeof e==`number`&&`transmission`in n&&e!==n.transmission&&(Ji.set(this,n.transmission),n.transmission=e),t!==void 0&&typeof t==`boolean`&&t!==n.transparent&&(qi.set(this,n.transparent),n.transparent=t)}},Xi=function(e,t,n,r){let i=qi.get(e);i!==void 0&&(qi.delete(e),n.transparent=i);let a=Ji.get(e);a!==void 0&&(Ji.delete(e),n.transmission=a)},Zi=function(e,t,n,r,i,a){let o=this.material;if(!o)return;if(Array.isArray(o)){if(!o.includes(i))return}else if(o!==i)return;this[Ki]===void 0&&(this[Ki]=new WeakSet),this[Ki].add(i);let s=Gi(this);if(!s)return;let{block:c,owner:l}=s,u=c.overrides,d=i,f=c.getDefines(),p=Object.keys(f);if(p.length>0){d.defines||={};for(let e of p){let t=f[e];t!==void 0&&(d.defines[e]=t)}}if(u.length===0&&p.length===0)return;let m=p.length>0;d[Ui]||(d[Ui]=[]);let h=d[Ui];for(let e of u){if(e.value===null)continue;let t=d[e.name],n=h.find(t=>t.name===e.name);if(n?n.value=t:h.push({name:e.name,value:t}),!m&&!!t!=!!e.value&&(m=!0),d[e.name]=e.value,e.textureTransform&&e.value instanceof xe){let t=e.value;d[Wi]||(d[Wi]=[]),d[Wi].push({name:e.name,offsetX:t.offset.x,offsetY:t.offset.y,repeatX:t.repeat.x,repeatY:t.repeat.y});let n=e.textureTransform;n.offset&&t.offset.copy(n.offset),n.repeat&&t.repeat.copy(n.repeat)}}m&&(d.needsUpdate=!0),d._forceRefresh=!0},Qi=function(e,t,n,r,i,a){if(this[Ki]===void 0||!this[Ki].has(i))return;this[Ki].delete(i);let o=Gi(this);if(!o)return;let{block:s,owner:c}=o,l=s.overrides,u=i,d=u[Ui],f=s.getDefines(),p=Object.keys(f),m=!1;if(p.length>0&&u.defines){for(let e of p)delete u.defines[e];m=!0}if(l.length===0){m&&(u.needsUpdate=!0,u._forceRefresh=!0);return}if(!d)return;let h=u[Wi];if(h&&h.length>0){for(let e of h){let t=l.find(t=>t.name===e.name);t?.value instanceof xe&&(t.value.offset.set(e.offsetX,e.offsetY),t.value.repeat.set(e.repeatX,e.repeatY))}h.length=0}for(let e of l){let t=d.find(t=>t.name===e.name);t&&(!m&&!!e.value!=!!t.value&&(m=!0),u[e.name]=t.value)}m&&(u.needsUpdate=!0),u._forceRefresh=!0};function $i(e,t){e.type===`Group`?e.children.forEach(n=>{(n.type===`Mesh`||n.type===`SkinnedMesh`)&&ea(n,e,t)}):(e.type===`Mesh`||e.type===`SkinnedMesh`)&&ea(e,e,t)}function ea(e,t,n){if(!Vi.isHooked(e,t)){if(Vi.addHook(e,t),e[`needle:materialPropertyBlock`]=n,!e.onBeforeRender)e.onBeforeRender=Zi;else{let t=e.onBeforeRender;e.onBeforeRender=function(e,n,r,i,a,o){t.call(this,e,n,r,i,a,o),Zi.call(this,e,n,r,i,a,o)}}if(!e.onAfterRender)e.onAfterRender=Qi;else{let t=e.onAfterRender;e.onAfterRender=function(e,n,r,i,a,o){Qi.call(this,e,n,r,i,a,o),t.call(this,e,n,r,i,a,o)}}e.onBeforeRenderListPush=Yi,e.onAfterRenderListPush=Xi}}var ta=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},na=D(`debugreflectionprobe`),ra=D(`noreflectionprobe`),ia=null;new Ue;var aa=Symbol(`reflectionProbeKey`),oa=class e extends N{static _probes=new Map;static testBox=new de;static isUsingReflectionProbe(e){return!!e[aa]}static onEnabled=new Ut;static onDisabled=new Ut;static get(t,n,r,i){if(!t||t.isObject3D!==!0||ra)return null;let a=e._probes.get(n);if(a){for(let e of a)if(e.__didAwake||e.__internalAwake(),e.activeAndEnabled){if(i){if(e.gameObject===i)return e}else if(e.isInBox(t))return na&&console.log(`Found reflection probe`,t.name,e.name),e}}return na&&console.debug(`Did not find reflection probe`,t.name,r,t),null}_texture;_textureUrlInFlight;set texture(e){if(this._texture!==e){if(typeof e==`string`){na&&console.debug(`[ReflectionProbe] Loading reflection probe texture from URL: ${e}`),this._textureUrlInFlight=e,Ir(ln(this.sourceId,e),this.context.renderer).then(t=>{this._textureUrlInFlight===e&&t&&(this._textureUrlInFlight=void 0,na&&console.debug(`[ReflectionProbe] Successfully loaded reflection probe texture: ${e}`),this.texture=t)});return}this.__didAwake&&(this._textureUrlInFlight=void 0),this._texture=e,na&&console.debug(`[ReflectionProbe] Set reflection probe texture `+(e?.name||`(removed)`)),e&&(e instanceof re||e.mapping===306||e.mapping!==303&&(e.mapping=303),e.colorSpace=a,e.needsUpdate=!0)}}get texture(){return this._texture}intensity=1;center=new r;size=new r(1,1,1);__lightmapIntensityScale=!0;isInBox(t){return ia??=new de,ia.setFromCenterAndSize(this.gameObject.worldPosition.add(this.center),this.size),fn([t],void 0,void 0,e.testBox),e.testBox.isEmpty()?ia.containsPoint(t.worldPosition):ia?.intersectsBox(e.testBox)}constructor(){super(),e._probes.has(this.context)||e._probes.set(this.context,[]),e._probes.get(this.context)?.push(this)}awake(){this._texture&&(this._texture.mapping!==306&&(this._texture.mapping=303),this._texture.colorSpace=a,this._texture.needsUpdate=!0)}update(){na&&(ia??=new de,ia.setFromCenterAndSize(this.gameObject.worldPosition.add(this.center),this.size),Ln.DrawWireBox3(ia,5592320))}onEnable(){e.onEnabled?.invoke(this)}onDisable(){e.onDisabled?.invoke(this)}start(){this._texture||console.warn(`[ReflectionProbe] Missing texture. Please assign a custom cubemap texture. To use reflection probes assign them to your renderer's "anchor" property.`)}onDestroy(){let t=e._probes.get(this.context);if(t){let e=t.indexOf(this);e>=0&&t.splice(e,1)}}apply(e){if(ra||!this.enabled||!this.texture)return;let t=Hi.get(e);t.setOverride(`envMap`,this.texture),t.setOverride(`envMapRotation`,this.gameObject.rotation);let n=this.intensity;this.__lightmapIntensityScale&&t.getOverride(`lightMap`)&&(n/=Math.PI),t.setOverride(`envMapIntensity`,n)}unapply(e){let t=Hi.get(e);t&&t.getOverride(`envMap`)?.value===this.texture&&t.removeOveride(`envMap`)}};ta([E([xe,String])],oa.prototype,`texture`,null),ta([E()],oa.prototype,`intensity`,void 0),ta([E(r)],oa.prototype,`center`,void 0),ta([E(r)],oa.prototype,`size`,void 0);var sa=D(`debugexr`),ca=class{get name(){return`EXT_texture_exr`}parser;constructor(e){this.parser=e,sa&&console.log(e)}loadTexture(e){let t=this.name,n=this.parser,r=n.json.textures[e];if(sa&&console.log(`EXT_texture_exr.loadTexture`,e,r),!r.extensions||!r.extensions[t])return null;let i=r.extensions[t],a=new lr(n.options.manager);return sa&&console.log(`EXT_texture_exr.loadTexture`,i),n.loadTextureImage(e,i.source,a)}};typeof window<`u`&&window.addEventListener(`unhandledrejection`,e=>{});var la=Pn,ua=`$___Export_Components`,da=`NEEDLE_components`,fa=class{[Dn]},pa=class{node;nodeIndex;nodeDef;constructor(e,t,n){this.node=e,this.nodeIndex=t,this.nodeDef=n}},ma=class{get name(){return da}exportContext;objectToNodeMap={};context;writer;registerExport(e){e.register(e=>{if(`serializeUserData`in e){let t=e.serializeUserData.bind(e);this.writer=e,e.serializeUserData=(n,r)=>{try{this.serializeUserData(n,r)&&(e.extensionsUsed[this.name]=!0),t(n,r)}finally{this.afterSerializeUserData(n,r)}}}return this})}beforeParse(){this.exportContext={},this.objectToNodeMap={}}serializeUserData(e,t){let n=e.userData?.components;return!n||n.length<=0?!1:(delete e.userData.components,e[ua]=n,!0)}afterSerializeUserData(e,t){if(e.type===`Scene`&&la&&console.log(`DONE`,JSON.stringify(t)),e[ua]===void 0)return;let n=e[ua];delete e[ua],n!==null&&(e.userData.components=n)}writeNode(e,t){let n=this.writer.json.nodes.length;la&&console.log(e.name,n,e.uuid);let r=new pa(e,n,t);this.exportContext[n]=r,this.objectToNodeMap[e.uuid]=n}afterParse(e){la&&console.log(`AFTER`,e);for(let e in this.exportContext){let t=this.exportContext[e],n=t.node,r=t.nodeDef,i=t.nodeIndex,a=n.userData?.components;if(!a||a.length<=0)continue;let o=new fa;r.extensions=r.extensions||{},r.extensions[this.name]=o,this.context.object=n,this.context.nodeId=i,this.context.objectToNode=this.objectToNodeMap;let s=[];for(let e of a){this.context.target=e;let t=ot().writeBuiltinComponentData(e,this.context);t!==null&&s.push(t)}s.length>0&&(o[Dn]=s,la&&console.log(`DID WRITE`,n,`nodeIndex`,i,s))}}parser;nodeToObjectMap={};gltf=null;beforeRoot(){return la&&console.log(`BEGIN LOAD`),this.nodeToObjectMap={},null}async afterRoot(e){this.gltf=e;let t=e.parser,n=t?.extensions;if(!n)return;let r=n[this.name];la&&console.log(`After root`,e,this.parser,n);let i=[];if(r===!0){let n=t.json.nodes;if(n){for(let e=0;e`/materials/`+(e.material??0)),r=!0)}}!r&&(la||T())&&console.warn(`[NEEDLE_components] Component '${o.name}' on object '${n.name}' is not added to a mesh or failed to retrieve materials from glTF.`)}o&&this.parser&&r.push(nn(this.parser,o).catch(e=>console.error(`Error while resolving references (see console for details) -`,e,n,o))),n.userData=n.userData||{},n.userData[Dn]=n.userData.builtin_components||[],n.userData[Dn].push(o)}await Promise.all(r).catch(e=>{console.error(`Error while loading components`,e)})}}},ha=`NEEDLE_gameobject_data`,ga=class{get name(){return ha}parser;constructor(e){this.parser=e}afterRoot(e){let t=[];for(let e=0;enull)}async findAndApplyExtensionData(e,t){let n=await this.parser.getDependency(`node`,e);n&&this.applyExtensionData(n,t)}applyExtensionData(e,t){t.layers===void 0&&(t.layers=0),e.userData.layer=t.layers,e.layers.disableAll(),e.layers.set(t.layers),e.userData.tag=t.tag??`none`,e.hideFlags=0,e.userData.static=t.static??!1,e.visible=t.activeSelf??!0,e.guid=t.guid}},_a=`NEEDLE_lighting_settings`,va=D(`debugenvlight`),ya=class{get name(){return _a}parser;sourceId;context;constructor(e,t,n){this.parser=e,this.sourceId=t,this.context=n}afterRoot(e){let t=this.parser.json.extensions;if(t){let r=t[_a];if(r){va&&console.log(`Loaded "`+this.name+`", src: "`+this.sourceId+`"`,r);let t;if(e.scene.children.length===1){let n=e.scene.children[0];t=k.addComponent(n,ba,{},{callAwake:!1})}else{let n=new S;n.name=`LightSettings `+this.sourceId,e.scene.add(n),t=k.addComponent(n,ba,{},{callAwake:!1})}t.sourceId=this.sourceId,t.ambientIntensity=r.ambientIntensity,t.ambientLight=new n().fromArray(r.ambientLight),Array.isArray(r.ambientTrilight)&&(t.ambientTrilight=r.ambientTrilight.map(e=>new n().fromArray(e))),t.ambientMode=r.ambientMode,t.environmentReflectionSource=r.environmentReflectionSource}}return null}};Ht.registerCallback(zt.ContextCreated,e=>{let t=e.context,n=k.findObjectOfType(ba,t);n?.sourceId&&(n.enabled=!0)});var ba=class extends N{ambientMode=Vt.Skybox;ambientLight;ambientTrilight;ambientIntensity=1;environmentReflectionSource=dt.Skybox;_hasReflection=!1;_ambientLightObj;_hemisphereLightObj;awake(){if(this.sourceId){let e=this.environmentReflectionSource===dt.Skybox?It.Skybox:It.Reflection,t=this.context.lightmaps.tryGet(this.sourceId,e,0);this._hasReflection=t!=null,t&&this.context.sceneLighting.internalRegisterReflection(this.sourceId,t)}this.enabled=!1,this.context.sceneLighting.internalRegisterSceneLightSettings(this),va&&window.addEventListener(`keydown`,e=>{if(!this.destroyed)switch(e.key){case`l`:this.enabled=!this.enabled;break}});let e=this.gameObject.userData?.components;if(e){let t=e.indexOf(this);e.splice(t,1),e.push(this)}}onDestroy(){this.context.sceneLighting.internalUnregisterSceneLightSettings(this)}calculateIntensityFactor(e){let t=Math.max(e.r,e.g,e.b);return 2.2*Rt.lerp(0,1.33,t)}onEnable(){if(va&&console.warn(`💡🟡 >>> Enable lighting`,this.sourceId,this.enabled,this),this.ambientMode==Vt.Flat){if(this.ambientLight&&!this._ambientLightObj){let e=this.calculateIntensityFactor(this.ambientLight);this._ambientLightObj=new Pe(this.ambientLight,this.ambientIntensity*e),va&&console.log(`Created ambient light`,this.sourceId,this._ambientLightObj,this.ambientIntensity,e)}this._ambientLightObj&&this.gameObject.add(this._ambientLightObj)}else if(this.ambientMode===Vt.Trilight){if(this.ambientTrilight){let e=this.ambientTrilight[0],t=this.ambientTrilight[this.ambientTrilight.length-1],n=this.calculateIntensityFactor(t);this._hemisphereLightObj=new Me(t,e,this.ambientIntensity*n),this.gameObject.add(this._hemisphereLightObj),va&&console.log(`Created hemisphere ambient light`,this.sourceId,this._hemisphereLightObj,this.ambientIntensity,n)}}else this._ambientLightObj&&this._ambientLightObj.removeFromParent(),this._hemisphereLightObj&&this._hemisphereLightObj.removeFromParent();this.sourceId&&(this.context.domElement.getAttribute(`environment-image`)||this.context.sceneLighting.internalEnableReflection(this.sourceId))}onDisable(){va&&console.warn(`💡⚫ <<< Disable lighting:`,this.sourceId,this),this._ambientLightObj&&this._ambientLightObj.removeFromParent(),this._hemisphereLightObj&&this._hemisphereLightObj.removeFromParent(),this.sourceId&&this.context.sceneLighting.internalDisableReflection(this.sourceId)}},xa;(function(e){async function t(e,t){if(!e)throw Error(`URL or XML string is required to load a MaterialX material`);let n=await on.MaterialX.load(),r=e.trimStart().startsWith(`<`),i=r?e:await fetch(e).then(e=>e.text()).catch(console.error);if(!i)return console.warn(`Failed to load MaterialX file from url`,e),null;let a;if(t?.url||!r){let n=(t?.url||e).split(`/`);n.pop(),a=n.join(`/`)}let o=new pe;return n.Experimental_API.createMaterialXMaterial(i,t?.materialNameOrIndex??0,{getTexture:async e=>(!e.startsWith(`http`)&&!e.startsWith(`data:`)&&!e.startsWith(`blob:`)&&!e.startsWith(`file:`)&&a&&(e=a+`/`+e),o.loadAsync(e).catch(t=>{console.warn(`Failed to load texture for MaterialX material ${e}`,t)}))},{cacheKey:e})}e.loadFromUrl=t})(xa||={});var Sa=class extends oe{loadAsync(e,t){return new Promise((n,r)=>{this.load(e,n,t,r)})}load(e,t,n,r){n?.({type:`progress`,loaded:0,total:0}),xa.loadFromUrl(e,{}).then(n=>{n?t(this.onLoaded(n)):r?.(Error(`Failed to load MaterialX material from url: `+e))})}onLoaded(e){return St.createPrimitive(`ShaderBall`,{material:e})}},Ca=class{context;loader;url;parser;get name(){return`materialx-loading-helper`}constructor(e,t,n,r){this.context=e,this.loader=t,this.url=n,this.parser=r}mtlxLoader;async beforeRoot(){if(this.parser.json.extensions?.NEEDLE_materials_mtlx){let e=await on.MaterialX.load();try{this.mtlxLoader=new e.MaterialXLoader(this.parser,{cacheKey:`${this.url}:materialx`,parameters:{precision:this.context.renderer?.capabilities.precision}},{getFrame:()=>this.context.time.frame,getTime:()=>this.context.time.time})}catch(e){console.error(e)}}}loadMaterial(e){return this.mtlxLoader?this.mtlxLoader.loadMaterial(e):null}},wa;(function(e){e[e.Fragment=35632]=`Fragment`,e[e.Vertex=35633]=`Vertex`})(wa||={});var Ta;(function(e){e[e.INT=5124]=`INT`,e[e.FLOAT=5126]=`FLOAT`,e[e.FLOAT_VEC2=35664]=`FLOAT_VEC2`,e[e.FLOAT_VEC3=35665]=`FLOAT_VEC3`,e[e.FLOAT_VEC4=35666]=`FLOAT_VEC4`,e[e.INT_VEC2=35667]=`INT_VEC2`,e[e.INT_VEC3=35668]=`INT_VEC3`,e[e.INT_VEC4=35669]=`INT_VEC4`,e[e.BOOL=35670]=`BOOL`,e[e.BOOL_VEC2=35671]=`BOOL_VEC2`,e[e.BOOL_VEC3=35672]=`BOOL_VEC3`,e[e.BOOL_VEC4=35673]=`BOOL_VEC4`,e[e.FLOAT_MAT2=35674]=`FLOAT_MAT2`,e[e.FLOAT_MAT3=35675]=`FLOAT_MAT3`,e[e.FLOAT_MAT4=35676]=`FLOAT_MAT4`,e[e.SAMPLER_2D=35678]=`SAMPLER_2D`,e[e.SAMPLER_3D=35680]=`SAMPLER_3D`,e[e.SAMPLER_CUBE=35681]=`SAMPLER_CUBE`,e[e.UNKNOWN=0]=`UNKNOWN`})(Ta||={});var Ea=D(`debugcustomshader`),Da=`NEEDLE_techniques_webgl`,Oa;(function(e){e[e.INT=5124]=`INT`,e[e.FLOAT=5126]=`FLOAT`,e[e.FLOAT_VEC2=35664]=`FLOAT_VEC2`,e[e.FLOAT_VEC3=35665]=`FLOAT_VEC3`,e[e.FLOAT_VEC4=35666]=`FLOAT_VEC4`,e[e.INT_VEC2=35667]=`INT_VEC2`,e[e.INT_VEC3=35668]=`INT_VEC3`,e[e.INT_VEC4=35669]=`INT_VEC4`,e[e.BOOL=35670]=`BOOL`,e[e.BOOL_VEC2=35671]=`BOOL_VEC2`,e[e.BOOL_VEC3=35672]=`BOOL_VEC3`,e[e.BOOL_VEC4=35673]=`BOOL_VEC4`,e[e.FLOAT_MAT2=35674]=`FLOAT_MAT2`,e[e.FLOAT_MAT3=35675]=`FLOAT_MAT3`,e[e.FLOAT_MAT4=35676]=`FLOAT_MAT4`,e[e.SAMPLER_2D=35678]=`SAMPLER_2D`,e[e.SAMPLER_3D=35680]=`SAMPLER_3D`,e[e.SAMPLER_CUBE=35681]=`SAMPLER_CUBE`,e[e.UNKNOWN=0]=`UNKNOWN`})(Oa||={});var ka=class{objectToWorldMatrix=new b;worldToObjectMatrix=new b;objectToWorld=[];worldToObject=[];updateFrom(e){this.objectToWorldMatrix.copy(e.matrixWorld),Wt(this.objectToWorldMatrix,this.objectToWorld),this.worldToObjectMatrix.copy(e.matrixWorld).invert(),Wt(this.worldToObjectMatrix,this.worldToObject)}},Aa;(function(e){e[e.Off=0]=`Off`,e[e.Front=1]=`Front`,e[e.Back=2]=`Back`})(Aa||={});var ja;(function(e){e[e.Never=1]=`Never`,e[e.Less=2]=`Less`,e[e.Equal=3]=`Equal`,e[e.LEqual=4]=`LEqual`,e[e.Greater=5]=`Greater`,e[e.NotEqual=6]=`NotEqual`,e[e.GEqual=7]=`GEqual`,e[e.Always=8]=`Always`})(ja||={});var Ma=class e extends y{identifier;onBeforeRenderSceneCallback=this.onBeforeRenderScene.bind(this);clone(){let e=super.clone();return Pa(e),e}constructor(e,...t){super(...t),this.identifier=e,Ea&&console.log(this),this.type=`NEEDLE_CUSTOM_SHADER`,this.uniforms[this._objToWorldName]||(this.uniforms[this._objToWorldName]={value:[]}),this.uniforms[this._worldToObjectName]||(this.uniforms[this._worldToObjectName]={value:[]}),this.uniforms[this._viewProjectionName]||(this.uniforms[this._viewProjectionName]={value:[]}),this.uniforms[this._sphericalHarmonicsName],(this.depthTextureUniform||this.opaqueTextureUniform)&&Xt.Current.pre_render_callbacks.push(this.onBeforeRenderSceneCallback)}dispose(){super.dispose();let e=Xt.Current.pre_render_callbacks.indexOf(this.onBeforeRenderSceneCallback);e>=0&&Xt.Current.pre_render_callbacks.splice(e,1)}_sphericalHarmonicsName=`unity_SpecCube0`;_objToWorldName=`hlslcc_mtx4x4unity_ObjectToWorld`;_worldToObjectName=`hlslcc_mtx4x4unity_WorldToObject`;static viewProjection=new b;static _viewProjectionValues=[];_viewProjectionName=`hlslcc_mtx4x4unity_MatrixVP`;static viewMatrix=new b;static _viewMatrixValues=[];_viewMatrixName=`hlslcc_mtx4x4unity_MatrixV`;static _worldSpaceCameraPosName=`_WorldSpaceCameraPos`;static _worldSpaceCameraPos=new r;static _mainLightColor=new C;static _mainLightPosition=new r;static _lightData=new C;_rendererData=new ka;get depthTextureUniform(){if(this.uniforms)return this.uniforms._CameraDepthTexture}get opaqueTextureUniform(){if(this.uniforms)return this.uniforms._CameraOpaqueTexture}onBeforeRenderScene(){this.opaqueTextureUniform&&Xt.Current.setRequireColor(!0),this.depthTextureUniform&&Xt.Current.setRequireDepth(!0)}onBeforeRender(e,t,n,r,i,a){r.attributes.tangent||r.computeTangents(),this.onUpdateUniforms(n,i)}onUpdateUniforms(t,n){let r=Xt.Current;if(t&&(e.viewProjection&&this.uniforms[this._viewProjectionName]&&(e.viewProjection.copy(t.projectionMatrix).multiply(t.matrixWorldInverse),Wt(e.viewProjection,e._viewProjectionValues)),e.viewMatrix&&this.uniforms[this._viewMatrixName]&&(e.viewMatrix.copy(t.matrixWorldInverse),Wt(e.viewMatrix,e._viewMatrixValues)),this.uniforms[e._worldSpaceCameraPosName]&&e._worldSpaceCameraPos.setFromMatrixPosition(t.matrixWorld)),this.uniforms._TimeParameters&&(this.uniforms._TimeParameters.value=r.sceneLighting.timeVec4),this.uniforms._Time){let e=this.uniforms._Time.value;e.x=r.sceneLighting.timeVec4.x/20,e.y=r.sceneLighting.timeVec4.x,e.z=r.sceneLighting.timeVec4.x*2,e.w=r.sceneLighting.timeVec4.x*3}if(this.uniforms._SinTime){let e=this.uniforms._SinTime.value;e.x=Math.sin(r.sceneLighting.timeVec4.x/8),e.y=Math.sin(r.sceneLighting.timeVec4.x/4),e.z=Math.sin(r.sceneLighting.timeVec4.x/2),e.w=Math.sin(r.sceneLighting.timeVec4.x)}if(this.uniforms._CosTime){let e=this.uniforms._CosTime.value;e.x=Math.cos(r.sceneLighting.timeVec4.x/8),e.y=Math.cos(r.sceneLighting.timeVec4.x/4),e.z=Math.cos(r.sceneLighting.timeVec4.x/2),e.w=Math.cos(r.sceneLighting.timeVec4.x)}if(this.uniforms.unity_DeltaTime){let e=this.uniforms.unity_DeltaTime.value;e.x=r.time.deltaTime,e.y=1/r.time.deltaTime,e.z=r.time.smoothedDeltaTime,e.w=1/r.time.smoothedDeltaTime}let i=r.mainLight;if(i){let t=Yt(i.gameObject,e._mainLightPosition);this.uniforms._MainLightPosition={value:t.normalize()},e._mainLightColor.set(i.color.r,i.color.g,i.color.b,0),this.uniforms._MainLightColor={value:e._mainLightColor};let n=i.intensity;e._lightData.z=n,this.uniforms.unity_LightData={value:e._lightData}}if(t&&(e.viewProjection&&this.uniforms[this._viewProjectionName]&&(this.uniforms[this._viewProjectionName].value=e._viewProjectionValues),e.viewMatrix&&this.uniforms[this._viewMatrixName]&&(this.uniforms[this._viewMatrixName].value=e._viewMatrixValues),this.uniforms[e._worldSpaceCameraPosName]&&(this.uniforms[e._worldSpaceCameraPosName]={value:e._worldSpaceCameraPos}),r.mainCameraComponent)){if(this.uniforms._ProjectionParams){let e=this.uniforms._ProjectionParams.value;e.x=1,e.y=r.mainCameraComponent.nearClipPlane,e.z=r.mainCameraComponent.farClipPlane,e.w=1/e.z,this.uniforms._ProjectionParams.value=e}if(this.uniforms._ZBufferParams){let e=this.uniforms._ZBufferParams.value,t=r.mainCameraComponent;e.x=1-t.farClipPlane/t.nearClipPlane,e.y=t.farClipPlane/t.nearClipPlane,e.z=e.x/t.farClipPlane,e.w=e.y/t.farClipPlane,this.uniforms._ZBufferParams.value=e}if(this.uniforms._ScreenParams){let e=this.uniforms._ScreenParams.value;e.x=r.domWidth,e.y=r.domHeight,e.z=1+1/e.x,e.w=1+1/e.y,this.uniforms._ScreenParams.value=e}if(this.uniforms._ScaledScreenParams){let e=this.uniforms._ScaledScreenParams.value;e.x=r.domWidth,e.y=r.domHeight,e.z=1+1/e.x,e.w=1+1/e.y,this.uniforms._ScaledScreenParams.value=e}}let a=this.depthTextureUniform;a&&(a.value=r.depthTexture);let o=this.opaqueTextureUniform;if(o&&(o.value=r.opaqueColorTexture),n){let e=this._rendererData;e.updateFrom(n),this.uniforms[this._worldToObjectName].value=e.worldToObject,this.uniforms[this._objToWorldName].value=e.objectToWorld}this.uniformsNeedUpdate=!0}},Na=class{get name(){return Da}parser;identifier;constructor(e,t){this.parser=e,this.identifier=t}loadMaterial(e){let t=this.parser.json.materials[e];if(!t)return Ea&&console.log(e,this.parser.json.materials),null;if(!t.extensions||!t.extensions.NEEDLE_techniques_webgl)return Ea&&console.log(`Material ${e} does not use NEEDLE_techniques_webgl`),null;Ea&&console.log(`Material ${e} uses NEEDLE_techniques_webgl`,t);let n=t.extensions[Da].technique;if(n<0)return console.debug(`Material ${e} does not have a valid technique index`),null;let r=this.parser.json.extensions[Da];if(!r)return Ea?console.error(`Missing shader data`,this.parser.json.extensions):console.debug(`Missing custom shader data in parser.json.extensions`),null;Ea&&console.log(r);let i=r.techniques[n];return i?new Promise(async(e,o)=>{let s=await ht(r,i.program),c=s?.fragmentShader,l=s?.vertexShader;if(!c||!l)return o();Ea&&console.log(`loadMaterial`,t,s);let u={},d=i.uniforms;(l.includes(`_Time`)||c.includes(`_Time`))&&(u._Time={value:new C(0,0,0,0)}),(l.includes(`_SinTime`)||c.includes(`_SinTime`))&&(u._SinTime={value:new C(0,0,0,0)}),(l.includes(`_CosTime`)||c.includes(`_CosTime`))&&(u._CosTime={value:new C(0,0,0,0)}),(l.includes(`unity_DeltaTime`)||c.includes(`unity_DeltaTime`))&&(u.unity_DeltaTime={value:new C(0,0,0,0)});for(let e in d){let t=e;switch(t){case`_TimeParameters`:u[t]={value:new C};break;case`hlslcc_mtx4x4unity_MatrixV`:case`hlslcc_mtx4x4unity_MatrixVP`:u[t]={value:[]};break;case`_MainLightPosition`:case`_MainLightColor`:case`_WorldSpaceCameraPos`:u[t]={value:[0,0,0,1]};break;case`unity_OrthoParams`:break;case`unity_SpecCube0`:u[t]={value:null};break;default:case`_ScreenParams`:case`_ZBufferParams`:case`_ProjectionParams`:u[t]={value:[0,0,0,0]};break;case`_CameraOpaqueTexture`:case`_CameraDepthTexture`:u[t]={value:null};break}}let f=!1;if(t.extensions&&t.extensions.NEEDLE_techniques_webgl){let e=t.extensions[Da];if(e.technique===n){Ea&&console.log(t.name,`Material Properties`,e);for(let t in e.values){let n=e.values[t];if(typeof n==`string`){if(n.startsWith(`/textures/`)){let e=n.substring(10),r=Number.parseInt(e);if(r>=0){let e=await this.parser.getDependency(`texture`,r);e instanceof xe&&(e.colorSpace=a,e.needsUpdate=!0),u[t]={value:e};continue}}switch(t){case`alphaMode`:n===`BLEND`&&(f=!0);continue}}if(Array.isArray(n)&&n.length===4){u[t]={value:new C(n[0],n[1],n[2],n[3])};continue}u[t]={value:n}}}}let p=new Ma(this.identifier,{name:t.name??``,uniforms:u,vertexShader:l,fragmentShader:c,lights:!1});switch(p.glslVersion=Oe,p.vertexShader=p.vertexShader.replace(`#version 300 es`,``),p.fragmentShader=p.fragmentShader.replace(`#version 300 es`,``),u._Cull?.value){case Aa.Off:p.side=2;break;case Aa.Front:p.side=1;break;case Aa.Back:p.side=0;break;default:p.side=0;break}switch(u._ZTest?.value){case ja.Equal:p.depthTest=!0,p.depthFunc=4;break;case ja.NotEqual:p.depthTest=!0,p.depthFunc=7;break;case ja.Less:p.depthTest=!0,p.depthFunc=2;break;case ja.LEqual:p.depthTest=!0,p.depthFunc=3;break;case ja.Greater:p.depthTest=!0,p.depthFunc=6;break;case ja.GEqual:p.depthTest=!0,p.depthFunc=5;break;case ja.Always:p.depthTest=!1,p.depthFunc=1;break}p.transparent=f,f&&(p.depthWrite=!1),Gt(u),p.onUpdateUniforms();for(let e in d){let t=e,n=d[e].type;if(u[t]?.value===void 0)switch(n){case Ta.SAMPLER_2D:u[t]={value:jt},console.warn(`Missing/unassigned texture, fallback to white: `+t);break;default:t===`unity_OrthoParams`||console.warn(`TODO: EXPECTED UNIFORM / fallback NOT SET: `+t,d[e]);break}}Ea&&console.log(p.uuid,u),Pa(p),e(p)}):null}};function Pa(e){if(e.uniforms){Ea&&console.log(`Uniforms:`,e.uniforms);for(let n in e.uniforms)switch(t(n,n),n){case`_Color`:t(`color`,n);break;case`_map`:t(`map`,n);break}}function t(t,n){Object.getOwnPropertyDescriptor(e,t)||Object.defineProperty(e,t,{get:()=>e.uniforms[n].value,set:t=>{e.uniforms[n].value=t,e.needsUpdate=!0}})}}var Fa=D(`debugextensions`),Ia,La=e(()=>import(`./needle-engine.dep.BzZBR-mM.js`).then(async e=>(Ia=e.GLTFAnimationPointerExtension,Ia)),__vite__mapDeps([0,1,2,3]),import.meta.url).catch(e=>{console.warn(`Failed to import GLTFLoaderAnimationPointer. Please use @needle-tools/three-animationpointer for full KHR_animation support`,e)}),Ra=[];function za(e){Ra.includes(e)||Ra.push(e)}function Ba(e){let t=Ra.indexOf(e);t>=0&&Ra.splice(t,1)}function Va(e){if(e instanceof Yn){let t=new ma;return e.register(e=>(t.parser=e,t)),t}return null}var Ha=class{resolvePath(e){return e.includes(`/extensions/builtin_components/`)?e.replace(`/extensions/builtin_components/`,`/userData/components/`):e.includes(`extensions/builtin_components/`)?e.replace(`extensions/builtin_components/`,`/userData/components/`):e}};async function Ua(e,t,n,r){let i=n.indexOf(`?`);i>=0&&(n=n.substring(0,i)),r||=n,(r.startsWith(`blob:`)||r.startsWith(`data:`))&&console.debug(`[GLTFLoader] Suspicious sourceId detected`),e.register(e=>new ga(e)),e.register(e=>new Jt(e)),e.register(e=>new it(e,t.lightmaps,r)),e.register(e=>new ya(e,r,t)),e.register(e=>new Na(e,r)),e.register(e=>new Fi(e,r)),e.register(e=>new P(e)),e.register(e=>new ca(e)),e.register(e=>new Vn(e)),e.register(r=>new Ca(t,e,n,r)),bn()&&e.register(e=>new Qt(e)),await La.catch(e=>{}),e.register(e=>{if(Ia){let t=new Ia(e);return t.setAnimationPointerResolver.bind(t)(new Ha),t}else return(Fa||T())&&console.error(`Missing KHR_animation_pointer extension...`),{name:`KHR_animation_pointer_NOT_AVAILABLE`}});for(let r of Ra)r.onImport&&r.onImport(e,n,t)}function Wa(e,t){for(let n of Ra)n.onExport&&n.onExport(e,t)}function Ga(e,t,n){for(let r of Ra)r.onLoaded&&r.onLoaded(e,t,n)}var z=D(`debuginstancing`),Ka=class e{static instance=new e;static getStartInstanceCount=e=>4;objs=[];setup(e,t,n,r,i,a=0){e.applySettings(t);let o=this.tryCreateOrAddInstance(t,n,i);if(o){r===null&&(r=[]),r.push(o);let e=o.object.material;Array.isArray(e)?e.forEach(e=>P.assignTextureLOD(e,0)):P.assignTextureLOD(e,0);let t=o.object,n=t.geometry;P.assignMeshLOD(t,0).then(e=>{e&&n!=e&&o.setGeometry(e)})}else if(a<=0&&t.type!==`Mesh`){let o=a+1;for(let a of t.children)r=this.setup(e,a,n,r,i,o)}return a===0&&i.useMatrixWorldAutoUpdate&&r&&r.length>=0&&this.autoUpdateInstanceMatrix(t),r}tryCreateOrAddInstance(t,n,r){if(t.type===`Mesh`){let i=r.foundMeshes;if(r.foundMeshes+=1,!r.rend.enableInstancing)return null;if(r.rend.enableInstancing!==!0){if(i>=r.rend.enableInstancing.length)return z&&console.error(`Something is wrong with instance setup`,t,r.rend.enableInstancing,i),null;if(!r.rend.enableInstancing[i])return null}let a=t,o=a.material;for(let e of this.objs)if(e.canAdd(a.geometry,o))return e.addInstance(a);let s=e.getStartInstanceCount(t);(!s||s<0)&&(s=4);let c=t.name;c?.length||(c=rt());let l=new Ja(c,a.geometry,o,s,n);return this.objs.push(l),l.addInstance(a)}return null}autoUpdateInstanceMatrix(e){let t=e.matrixWorld.multiplyMatrices.bind(e.matrixWorld),n=e.matrixWorld.clone(),r=(r,i)=>{let a=t(r,i);return(e[Kt]||n.equals(a)===!1)&&(n.copy(a),e[Kt]=!0),a};e.matrixWorld.multiplyMatrices=r}},qa=class e{static all=[];get name(){return this.object.name}get isActive(){return this.__instanceIndex>=0}get vertexCount(){return this.object.geometry.attributes.position.count}get maxVertexCount(){return Math.max(this.meshInformation.vertexCount,this.vertexCount)}get reservedVertexCount(){return this.__reservedVertexRange}get indexCount(){return this.object.geometry.index?this.object.geometry.index.count:0}get maxIndexCount(){return Math.max(this.meshInformation.indexCount,this.indexCount)}get reservedIndexCount(){return this.__reservedIndexRange}object;renderer;__instanceIndex=-1;__reservedVertexRange=0;__reservedIndexRange=0;__geometryIndex=-1;meshInformation;constructor(t,n){this.__instanceIndex=-1,this.object=t,this.renderer=n,t[On]=n,this.meshInformation=Ya(t.geometry),e.all.push(this)}updateMeshInformation(){let e=Ya(this.object.geometry),t=this.meshInformation.vertexCount,n=this.meshInformation.indexCount;return Object.assign(this.meshInformation,e),t!==this.meshInformation.vertexCount||n!==this.meshInformation.indexCount}updateInstanceMatrix(e=!1,t=!0){this.__instanceIndex<0||(t&&this.object.updateWorldMatrix(!0,e),this.renderer.updateInstance(this.object.matrixWorld,this.__instanceIndex))}setMatrix(e){this.__instanceIndex<0||this.renderer.updateInstance(e,this.__instanceIndex)}setGeometry(e){if(this.__geometryIndex<0)return!1;let t=this;if(this.vertexCount>this.__reservedVertexRange)return n(`Instancing: Can not update geometry (${this.name}), reserved vertex range is too small: ${this.__reservedVertexRange.toLocaleString()} < ${this.vertexCount.toLocaleString()} vertices for ${this.name}`);if(this.indexCount>this.__reservedIndexRange)return n(`Instancing: Can not update geometry (${this.name}), reserved index range is too small: ${this.__reservedIndexRange.toLocaleString()} < ${this.indexCount.toLocaleString()} indices for ${this.name}`);return this.renderer.updateGeometry(e,this.__geometryIndex);function n(e){return t.updateMeshInformation()&&(t.renderer.remove(t,!0),t.renderer.add(t))?!0:((T()||z)&&console.error(e),!1)}}add(){this.__instanceIndex>=0||(this.renderer.add(this),k.markAsInstancedRendered(this.object,!0))}remove(t){if(!(this.__instanceIndex<0)&&(this.renderer.remove(this,t),k.markAsInstancedRendered(this.object,!1),t)){let t=e.all.indexOf(this);t>=0&&e.all.splice(t,1)}}},Ja=class{get batchedMesh(){return this._batchedMesh}get visible(){return this._batchedMesh.visible}set visible(e){this._batchedMesh.visible=e}get castShadow(){return this._batchedMesh.castShadow}set castShadow(e){this._batchedMesh.castShadow=e}set receiveShadow(e){this._batchedMesh.receiveShadow=e}allowResize=!0;name=``;geometry;material;get count(){return this._currentInstanceCount}updateBounds(e=!0,t=!0){if(this._needUpdateBounds=!1,e&&this._batchedMesh.computeBoundingBox(),t&&this._batchedMesh.computeBoundingSphere(),z&&this._batchedMesh.boundingSphere){let e=this._batchedMesh.boundingSphere;Ln.DrawWireSphere(e.center,e.radius,65280)}}_context;_batchedMesh;_handles=[];_geometryIds=new WeakMap;_maxInstanceCount;_currentInstanceCount=0;_currentVertexCount=0;_currentIndexCount=0;_maxVertexCount;_maxIndexCount;static nullMatrix=new b;canAdd(e,t){return this._maxVertexCount>1e7||t!==this.material||!this.validateGeometry(e)?!1:!!(!this.mustGrow(e)||this.allowResize)}_needUpdateBounds=!1;_debugMaterial=null;getBatchedMeshName(){return this.name?`${this.name} (BatchedMesh)`:`BatchedMesh`}constructor(e,t,n,r,i){this.name=e,this.geometry=t,this.material=n,this._context=i,this._maxInstanceCount=Math.max(2,r),z&&(this._debugMaterial=Xa());let a=this.tryEstimateVertexCountSize(this._maxInstanceCount,[t],r);this._maxVertexCount=a.vertexCount,this._maxIndexCount=a.indexCount,this._batchedMesh=new ke(this._maxInstanceCount,this._maxVertexCount,this._maxIndexCount,this._debugMaterial??this.material),this._batchedMesh.name=this.getBatchedMeshName(),this._batchedMesh[_t]=!0,this._batchedMesh.visible=!0,this._context.scene.add(this._batchedMesh),n instanceof y&&(n.defines.USE_INSTANCING=!0,n.needsUpdate=!0),i.pre_render_callbacks.push(this.onBeforeRender),i.post_render_callbacks.push(this.onAfterRender),z&&console.log(`Instanced renderer (${this.name}) created with ${this._maxInstanceCount} instances, ${this._maxVertexCount} max vertices and ${this._maxIndexCount} max indices for \"${e}\"`)}dispose(){z&&console.warn(`Dispose instanced renderer`,this.name),this._context.scene.remove(this._batchedMesh),this._batchedMesh.dispose(),this._batchedMesh=null,this._handles=[]}addInstance(e){let t=new qa(e,this);e.castShadow===!0&&this._batchedMesh.castShadow===!1&&(this._batchedMesh.castShadow=!0),e.receiveShadow===!0&&this._batchedMesh.receiveShadow===!1&&(this._batchedMesh.receiveShadow=!0);try{this.add(t)}catch(t){return console.error(`Failed adding mesh to instancing (object name: \"${e.name}\", instances: ${this._currentInstanceCount.toLocaleString()}/${this._maxInstanceCount.toLocaleString()}, vertices: ${this._currentVertexCount.toLocaleString()}/${this._maxVertexCount.toLocaleString()}, indices: ${this._currentIndexCount.toLocaleString()}/${this._maxIndexCount.toLocaleString()})\n`,t),T()&&Nn(`Failed instancing mesh. See the browser console for details.`),null}return t}add(e){let t=e.object.geometry;if(!t||!t.attributes)return console.error(`Cannot add object to instancing without geometry`,e.name),!1;if(this._currentInstanceCount+1>this._maxInstanceCount||this.mustGrow(t))if(this.allowResize)this.grow(t);else return console.error(`Cannot add instance, max count reached`,this.name,this.count,this._maxInstanceCount),!1;return e.object.updateWorldMatrix(!0,!0),this.addGeometry(e),this._handles[e.__instanceIndex]=e,this._currentInstanceCount+=1,this.markNeedsUpdate(),this._currentInstanceCount>0&&(this._batchedMesh.visible=!0),!0}remove(e,t){e&&(e.__instanceIndex<0||this._handles[e.__instanceIndex]!=e||this._currentInstanceCount<=0||(this.removeGeometry(e,t),this._handles[e.__instanceIndex]=null,e.__instanceIndex=-1,this._currentInstanceCount>0&&--this._currentInstanceCount,this._currentInstanceCount<=0&&(this._batchedMesh.visible=!1),this.markNeedsUpdate()))}updateInstance(e,t){this._batchedMesh.setMatrixAt(t,e),this.markNeedsUpdate()}updateGeometry(e,t){return this.validateGeometry(e)?(this.mustGrow()&&this.grow(e),z&&console.debug(`[Instancing] UPDATE GEOMETRY at `+t,this._batchedMesh._geometryCount,e.name,Ya(e),e.attributes.position.count,e.index?e.index.count:0),this._batchedMesh.setGeometryAt(t,e),this._geometryIds.set(e,t),this.markNeedsUpdate(),!0):!1}onBeforeRender=()=>{this._batchedMesh.layers.enableAll(),this._needUpdateBounds&&this._batchedMesh[_t]===!0&&(z===`verbose`&&console.log(`Update instancing bounds`,this.name,this._batchedMesh.matrixWorldNeedsUpdate),this.updateBounds())};onAfterRender=()=>{this._batchedMesh.layers.disableAll()};validateGeometry(e){let t=this.geometry;for(let n in t.attributes)if(n!==`batchId`&&!e.hasAttribute(n))return T()&&console.warn(`BatchedMesh: Added geometry missing "${n}". All geometries must have consistent attributes.`),!1;return!0}markNeedsUpdate(){z===`verbose`&&console.warn(`Marking instanced mesh dirty`,this.name),this._needUpdateBounds=!0}mustGrow(e){if(this.count>=this._maxInstanceCount)return!0;if(!e||!e.attributes||this._geometryIds.has(e))return!1;let t=Ya(e),n=t.vertexCount,r=t.indexCount;return this._currentVertexCount+n>this._maxVertexCount||this._currentIndexCount+r>this._maxIndexCount}_growId=0;grow(e){let t=++this._growId,n=this.count>=this._maxInstanceCount?Math.ceil(this._maxInstanceCount*2):this._maxInstanceCount,r=this.tryEstimateVertexCountSize(n,[e]),i=1.25,a=Math.max(this._maxVertexCount,Math.ceil(r.vertexCount*i)),o=Math.max(this._maxIndexCount,Math.ceil(r.indexCount*i));if(z){let t=Ya(e);console.warn(`[Instancing] Growing Buffer\nMesh: \"${this.name}${e.name?.length?`/`+e.name:``}\" (${t.vertexCount.toLocaleString()} vertices, ${t.indexCount.toLocaleString()} indices)\nMax count ${this._maxInstanceCount.toLocaleString()} → ${n.toLocaleString()}\nMax vertex count ${this._maxVertexCount.toLocaleString()} -> ${a.toLocaleString()}\nMax index count ${this._maxIndexCount.toLocaleString()} -> ${o.toLocaleString()}`),this._debugMaterial=Xa()}else T()&&console.debug(`[Instancing] Growing Buffer\nMesh: \"${this.name}${e.name?.length?`/`+e.name:``}\"\nMax count ${this._maxInstanceCount} → ${n}\nMax vertex count ${this._maxVertexCount.toLocaleString()} -> ${a.toLocaleString()}\nMax index count ${this._maxIndexCount.toLocaleString()} -> ${o.toLocaleString()}`);this._maxVertexCount=a,this._maxIndexCount=o;let s=new ke(n,this._maxVertexCount,this._maxIndexCount,this._debugMaterial??this.material);s.name=this.getBatchedMeshName(),s.layers=this._batchedMesh.layers,s.castShadow=this._batchedMesh.castShadow,s.receiveShadow=this._batchedMesh.receiveShadow,s.visible=this._batchedMesh.visible,s[_t]=this._batchedMesh[_t],s.matrixAutoUpdate=this._batchedMesh.matrixAutoUpdate,s.matrixWorldNeedsUpdate=this._batchedMesh.matrixWorldNeedsUpdate,s.matrixAutoUpdate=this._batchedMesh.matrixAutoUpdate,s.matrixWorld.copy(this._batchedMesh.matrixWorld),s.matrix.copy(this._batchedMesh.matrix),this._batchedMesh.dispose(),this._batchedMesh.removeFromParent(),this._geometryIds=new WeakMap,this._batchedMesh=s,this._maxInstanceCount=n;let c=[...this._handles];this._handles=[];for(let e of c){if(t!==this._growId){z&&console.warn(`[Instancing] Aborting grow since another grow happened in the meantime`);return}e&&e.__instanceIndex>=0&&(this.addGeometry(e),this._handles[e.__instanceIndex]=e)}this._context.scene.add(s)}tryEstimateVertexCountSize(e,t,n=1){let r=new Map;for(let e of this._handles)if(e&&e.__instanceIndex>=0&&e.object.geometry){if(r.has(e.object.geometry)){let t=r.get(e.object.geometry);t.count+=1}else{let t={count:1,...Ya(e.object.geometry)};r.set(e.object.geometry,t)}if(t&&t?.length>0){let n=t.indexOf(e.object.geometry);n!==-1&&t.splice(n,1)}}let i=0,a=0,o=0;for(let[e,t]of r)o+=1,i+=t.vertexCount,a+=t.indexCount;let s=Math.ceil(i/Math.max(1,o))*o,c=Math.ceil(a/Math.max(1,o))*o;if(t)for(let e of t){let t=Ya(e);t!=null&&(s+=t.vertexCount*n,c+=t.indexCount*n)}return z&&console.log(`[Instancing] Estimated size for new buffer ${this.name}\nGeometries: ${o} (New: ${t?.length||0})\nInstances: ${e}\nEstimated Vertices: ${s.toLocaleString()}\nEstimated Indices: ${c.toLocaleString()}`),{vertexCount:s,indexCount:c}}addGeometry(e){let t=e.object.geometry;if(!t)return;let n=this._geometryIds.get(t);n==null?(z&&console.warn(`[Instancing] > ADD NEW GEOMETRY \"${e.name} (${t.name}; ${t.uuid})\"\nCurrent Instances: ${this._currentInstanceCount}\nMax Vertices: ${e.maxVertexCount.toLocaleString()}\nMax Indices: ${e.maxIndexCount.toLocaleString()}\nMax Triangles: ${(e.maxIndexCount/3).toLocaleString()}`),n=this._batchedMesh.addGeometry(t,e.maxVertexCount,e.maxIndexCount),this._geometryIds.set(t,n),this._currentVertexCount+=e.maxVertexCount,this._currentIndexCount+=e.maxIndexCount):z===`verbose`&&console.log(`[Instancing] > ADD INSTANCE \"${e.name}\"\nGEOMETRY_ID=${n}\n${this._currentInstanceCount} instances`);let r=this._batchedMesh.addInstance(n);e.__geometryIndex=n,e.__instanceIndex=r,e.__reservedVertexRange=e.maxVertexCount,e.__reservedIndexRange=e.maxIndexCount,this._batchedMesh.setMatrixAt(r,e.object.matrixWorld),z&&console.debug(`[Instancing] > ADDED INSTANCE \"${e.name}\"\nGEOMETRY_ID=${n}\n${this._currentInstanceCount} instances\nIndex: ${e.__instanceIndex}\nVertices: ${this._currentVertexCount.toLocaleString()}/${this._maxVertexCount.toLocaleString()},\nIndices: ${this._currentIndexCount.toLocaleString()}/${this._maxIndexCount.toLocaleString()}`)}removeGeometry(e,t){if(e.__instanceIndex<0){console.warn(`Cannot remove geometry, instance index is invalid`,e.name);return}z&&console.debug(`[Instancing] < REMOVE INSTANCE \"${e.name}\" at [${e.__instanceIndex}]\nGEOMETRY_ID=${e.__geometryIndex}\n${this._currentInstanceCount} instances\nIndex: ${e.__instanceIndex}`),this._batchedMesh.deleteInstance(e.__instanceIndex)}};function Ya(e){if(!e)return T()&&console.error(`Cannot get mesh information from null geometry`),{vertexCount:0,indexCount:0};let t=e.attributes?.position?.count||0,n=e.index?e.index.count:0,r=P.getMeshLODExtension(e);if(r){let e=r.lods[0],i=e.vertexCount,a=e.indexCount,o=Math.min(200,Math.ceil(i*.05));i+=o,a+=20,t=Math.max(t,i),n=Math.max(n,a)}return t=Math.ceil(t),n=Math.ceil(n),{vertexCount:t,indexCount:n}}function Xa(){let e=new Te({color:new n(Math.random(),Math.random(),Math.random())});return e.emissive=e.color,e.emissiveIntensity=.3,D(`wireframe`)&&(e.wireframe=!0),e}var Za=D(`debuglightmaps`),Qa=Symbol(`lightmapKey`),$a=class{get lightmap(){return this.lightmapTexture}set lightmap(e){e!==this.lightmapTexture&&(this.lightmapTexture=e,this.applyLightmap(),this.updatePropertyBlockTexture(),this.lightmapTexture&&P.assignTextureLOD(this.lightmapTexture,0).then(e=>{e?.isTexture&&(this.lightmapTexture=e,this.updatePropertyBlockTexture())}))}lightmapIndex=-1;lightmapScaleOffset=new C(1,1,0,0);renderer;_isApplied=!1;get context(){return this.renderer.context}get gameObject(){return this.renderer.gameObject}lightmapTexture=null;constructor(e){this.renderer=e}init(e,t,n){console.assert(this.gameObject!==void 0&&this.gameObject!==null,`Missing gameobject`,this),this.lightmapIndex=e,!(this.lightmapIndex<0)&&(this.lightmapScaleOffset=t,this.lightmapTexture=n,P.assignTextureLOD(n,0).then(e=>{e?.isTexture&&(this.lightmapTexture=e,this.updatePropertyBlockTexture())}),Za==`show`?(console.log(`Lightmap:`,this.gameObject.name,e,` -ScaleOffset:`,t,` -Texture:`,n),this.setLightmapDebugMaterial()):Za&&console.log(`Use debuglightmaps=show to render lightmaps only in the scene.`),this.applyLightmap())}updateLightmapUniforms(e){}applyLightmap(){if(this._isApplied)return;if(this.gameObject.type===`Object3D`){Za&&console.warn(`Can not add lightmap. Is this object missing a renderer?`,this.gameObject.name);return}let e=this.gameObject;if(this.ensureLightmapUvs(e),this.lightmapIndex>=0&&this.lightmapTexture){this.lightmapTexture.channel=1;let e=this.lightmapScaleOffset;for(let t=0;t=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},to=D(`debugrenderer`),no=D(`debugskinnedmesh`),ro=D(`noinstancing`),io=D(`wireframe`),ao;(function(e){e[e.Off=0]=`Off`,e[e.BlendProbes=1]=`BlendProbes`,e[e.BlendProbesAndSkybox=2]=`BlendProbesAndSkybox`,e[e.Simple=3]=`Simple`})(ao||={});var oo=class{path=null;asset=null;default},so;(function(e){e[e.Both=0]=`Both`,e[e.Back=1]=`Back`,e[e.Front=2]=`Front`})(so||={});var co=class{_renderer;_targets=[];_indexMapMaxIndex;_indexMap;_changed=!1;get changed(){return this._changed}set changed(e){e===!0&&to&&console.warn(`SharedMaterials have changed: `+this._renderer.name),this._changed=e}is(e){return this._renderer===e}constructor(e,t){this._renderer=e;let n=this.setMaterial.bind(this),r=this.getMaterial.bind(this),i=e.gameObject;if(this._targets=[],i)switch(i.type){case`Group`:this._targets=[...i.children];break;case`SkinnedMesh`:case`Mesh`:this._targets.push(i);break}let a=!1,o,s=0;for(let e=0;e=this._targets.length)return;let n=this._targets[t];!n||n.material===void 0||(n.material=e,this.changed=!0)}getMaterial(e){if(e=this.resolveIndex(e),e<0)return null;let t=this._targets;if(e>=t.length)return null;let n=t[e];return n?n.material:null}},B=class e extends N{static setInstanced(t,n){let r=Lt(t,e);return r.setInstancingEnabled(n),r}static isInstanced(t){let n=Gn(t,e);return n?n.isInstancingActive:gt.isUsingInstancing(t)}static setVisible(e,t){wi(e,t)}receiveShadows=!1;shadowCastingMode=fo.Off;lightmapIndex=-1;lightmapScaleOffset=new C(1,1,0,0);enableInstancing=void 0;renderOrder=void 0;allowOcclusionWhenDynamic=!0;probeAnchor;reflectionProbeUsage=ao.Off;_lightmaps;get sharedMesh(){if(this.gameObject.type===`Mesh`||this.gameObject.type===`SkinnesMesh`)return this.gameObject;if(this.gameObject.type===`Group`)return this.gameObject.children[0]}_sharedMeshes=[];get sharedMeshes(){if(this.destroyed||!this.gameObject)return this._sharedMeshes;if(this._sharedMeshes.length=0,this.gameObject.type===`Group`)for(let e of this.gameObject.children)(e.type===`Mesh`||e.type===`SkinnedMesh`)&&this._sharedMeshes.push(e);else (this.gameObject.type===`Mesh`||this.gameObject.type===`SkinnedMesh`)&&this._sharedMeshes.push(this.gameObject);return this._sharedMeshes}get sharedMaterial(){return this.sharedMaterials?.[0]}set sharedMaterial(e){this.sharedMaterials[0]!==e&&(this.sharedMaterials[0]=e,this.applyLightmapping())}get material(){return this.sharedMaterials?.[0]}set material(e){this.sharedMaterial=e}_sharedMaterials;_originalMaterials;_probeAnchorLastFrame;set sharedMaterials(e){if(!this._originalMaterials)this._originalMaterials=e;else if(e){let t=!1;for(let n=0;n0&&(this.gameObject.renderOrder=this.renderOrder[0])):this.context.addBeforeRenderListener(this.gameObject,this.onBeforeRenderThree);if(this._lightmaps=void 0,this.applyLightmapping(),io)for(let e=0;e=0&&!this._lightmaps){let e=this._lightmapTextureOverride===void 0?this.context.lightmaps.tryGetLightmap(this.sourceId,this.lightmapIndex):this._lightmapTextureOverride;if(e){this._lightmaps||=[];let t=new $a(this);t.init(this.lightmapIndex,this.lightmapScaleOffset,e),this._lightmaps.push(t)}else to&&console.warn(`[Renderer] No lightmaps found ${this.name} (${this.sourceId}, ${this.lightmapIndex})`)}}_isInstancingEnabled=!1;_handles=void 0;get isInstancingActive(){return this._handles!=null&&this._handles.length>0&&this._isInstancingEnabled}get instances(){if(!this._handles||this._handles.length<=0)return null;if(this._handlesTempArray.length=0,this._handles)for(let e of this._handles)this._handlesTempArray.push(e);return this._handlesTempArray}_handlesTempArray=[];setInstancingEnabled(e){if(this._isInstancingEnabled===e)return e&&(this._handles===void 0||this._handles!=null&&this._handles.length>0);if(this._isInstancingEnabled=e,e){if(this.enableInstancing===void 0&&(this.enableInstancing=!0),this._handles===void 0){if(this._handles=Ka.instance.setup(this,this.gameObject,this.context,null,{rend:this,foundMeshes:0,useMatrixWorldAutoUpdate:this.useInstanceMatrixWorldAutoUpdate()}),this._handles)return k.markAsInstancedRendered(this.gameObject,!0),!0}else if(this._handles!==null){for(let e of this._handles)e.updateInstanceMatrix(!0),e.add();return k.markAsInstancedRendered(this.gameObject,!0),!0}}else{if(this._handles)for(let e of this._handles)e.remove(this.destroyed);return!0}return!1}clearInstancingState(){this._isInstancingEnabled=!1,this._handles=void 0}useInstanceMatrixWorldAutoUpdate(){return!0}start(){if(this.enableInstancing&&!ro&&(this.setInstancingEnabled(!0),gt.markDirty(this.gameObject)),this.gameObject.frustumCulled=this.allowOcclusionWhenDynamic,this.isMultiMaterialObject(this.gameObject))for(let e=0;ee)?this.__internalDidAwakeAndStart&&this.setInstancingEnabled(!0):this.enabled&&this.applyStencil(),this.updateReflectionProbe(),oa.onEnabled.addEventListener(this.onReflectionProbeEnabled),oa.onDisabled.addEventListener(this.onReflectionProbeDisabled)}onDisable(){this.setVisibility(!1),oa.onEnabled.removeEventListener(this.onReflectionProbeEnabled),oa.onDisabled.removeEventListener(this.onReflectionProbeDisabled),this._handles&&this._handles.length>0&&this.setInstancingEnabled(!1)}onDestroy(){if(this._handles=null,this.isMultiMaterialObject(this.gameObject))for(let e of this.gameObject.children)this.context.removeBeforeRenderListener(e,this.onBeforeRenderThree);else this.context.removeBeforeRenderListener(this.gameObject,this.onBeforeRenderThree)}onReflectionProbeEnabled=()=>{this.updateReflectionProbe()};onReflectionProbeDisabled=e=>{this._reflectionProbe===e&&(this._reflectionProbe.unapply(this.gameObject),this._reflectionProbe=null)};onBeforeRender(){if(this.gameObject){if((this._probeAnchorLastFrame!==this.probeAnchor||this._reflectionProbe?.activeAndEnabled===!1)&&(this._reflectionProbe?.unapply(this.gameObject),this.updateReflectionProbe()),to==this.name&&this.gameObject instanceof x){this.gameObject.geometry.computeBoundingSphere();let e=wn(this.gameObject.geometry.boundingSphere.center).applyMatrix4(this.gameObject.matrixWorld);Ln.DrawWireSphere(e,this.gameObject.geometry.boundingSphere.radius,56831)}if(this.isMultiMaterialObject(this.gameObject)&&this.gameObject.children?.length>0)for(let e of this.gameObject.children)this.applySettings(e);else this.applySettings(this.gameObject);if(this.sharedMaterials?.changed&&(this.sharedMaterials.changed=!1,this.applyLightmapping()),this._handles?.length&&this.gameObject[Kt]===!0){this.gameObject[Kt]=!1;for(let e=this._handles.length-1;e>=0;e--)this._handles[e].updateInstanceMatrix();this.gameObject.matrixWorldNeedsUpdate=!1}if(this._handles&&this._handles.length<=0&&k.markAsInstancedRendered(this.gameObject,!1),this._isInstancingEnabled&&this._handles)for(let e=0;e{if(i.envMapIntensity!==void 0){let e=this.hasLightmap?Math.PI:1,t=this.context.scene.environmentIntensity;i.envMapIntensity=Math.max(0,t*this.context.sceneLighting.environmentIntensity/e)}if(this._lightmaps)for(let e of this._lightmaps)e.updateLightmapUniforms(i),e.applyLightmap()};onAfterRender(){if(this._isInstancingEnabled&&this._handles)for(let e=0;e=10&&(this.gameObject.matrixAutoUpdate=!1)}applyStencil(){Fi.applyStencil(this)}applySettings(e){e.receiveShadow=this.receiveShadows,this.shadowCastingMode==fo.On?e.castShadow=!0:e.castShadow=!1}_reflectionProbe=null;updateReflectionProbe(){this._reflectionProbe=null,this.reflectionProbeUsage!==ao.Off&&(this.startCoroutine(this._updateReflectionProbe(),Wn.LateUpdate),this._probeAnchorLastFrame=this.probeAnchor)}*_updateReflectionProbe(){let e=this.probeAnchor||this.gameObject,t=!!this.probeAnchor;this._reflectionProbe=oa.get(e,this.context,t,this.probeAnchor)}setVisibility(e){if(!this.isMultiMaterialObject(this.gameObject))wi(this.gameObject,e);else for(let t of this.gameObject.children)this.isMeshOrSkinnedMesh(t)&&wi(t,e)}isMultiMaterialObject(e){return e.type===`Group`}isMeshOrSkinnedMesh(e){return e.type===`Mesh`||e.type===`SkinnedMesh`}};eo([E()],B.prototype,`receiveShadows`,void 0),eo([E()],B.prototype,`shadowCastingMode`,void 0),eo([E()],B.prototype,`lightmapIndex`,void 0),eo([E(C)],B.prototype,`lightmapScaleOffset`,void 0),eo([E()],B.prototype,`enableInstancing`,void 0),eo([E()],B.prototype,`renderOrder`,void 0),eo([E()],B.prototype,`allowOcclusionWhenDynamic`,void 0),eo([E(S)],B.prototype,`probeAnchor`,void 0),eo([E()],B.prototype,`reflectionProbeUsage`,void 0);var lo=class extends B{},uo=class extends lo{_needUpdateBoundingSphere=!1;awake(){super.awake(),no&&console.log(`SkinnedMeshRenderer for "`+this.name+`"`,this),this.allowOcclusionWhenDynamic=!1;for(let e of this.sharedMeshes)e.parent?.updateWorldMatrix(!1,!0),this.markBoundsDirty()}onAfterRender(){if(super.onAfterRender(),this._needUpdateBoundingSphere){for(let e of this.sharedMeshes)if(e instanceof Ie){this._needUpdateBoundingSphere=!1;try{let t=e.geometry,n=mr(e);n&&(e.geometry=n),e.computeBoundingSphere(),e.geometry=t}catch(t){console.error(`Error updating bounding sphere for ${e.name}`,t)}}}if(no){for(let e of this.sharedMeshes)if(e instanceof Ie&&e.boundingSphere){let t=wn(e.boundingSphere.center).applyMatrix4(e.matrixWorld);Ln.DrawWireSphere(t,e.boundingSphere.radius,`red`)}}}markBoundsDirty(){this._needUpdateBoundingSphere=!0}},fo;(function(e){e[e.Off=0]=`Off`,e[e.On=1]=`On`,e[e.TwoSided=2]=`TwoSided`,e[e.ShadowsOnly=3]=`ShadowsOnly`})(fo||={});function po(){`OffscreenCanvas`in globalThis||(globalThis.OffscreenCanvas=class{canvas;constructor(e,t){return this.canvas=document.createElement(`canvas`),this.canvas.width=e,this.canvas.height=t,this.canvas.convertToBlob=(e,t)=>new Promise(n=>{this.canvas.toBlob(n,e,t)}),this.canvas}})}var mo=D(`debugprogress`);function ho(e){e||=new Date;let t=e.getMonth()+1,n=e.getDate(),r=e.getHours(),i=e.getMinutes(),a=e.getSeconds(),o=(t<10?`0`:``)+t,s=(n<10?`0`:``)+n,c=(r<10?`0`:``)+r,l=(i<10?`0`:``)+i,u=(a<10?`0`:``)+a;return e.getFullYear()+o+s+`-`+c+l+u}var V=class{static start(e,t){typeof t==`string`&&(t={parentScope:t});let n=new _o(e,t);go.set(e,n)}static report(e,t){let n=go.get(e);if(!n){console.warn(`Reporting progress for non-existing scope`,e);return}typeof t==`string`&&(t={message:t,autoStep:!0}),n.report(t)}static end(e){let t=go.get(e);t&&(t.end(),go.delete(e))}},go=new Map,_o=class{scopeLabel;parentScope;childScopes=[];parentDepth=0;lastStep=0;lastAutoStepWeight=1;lastTotalSteps=0;onProgress;showLogs=!1;selfProgress=0;totalProgress=0;selfReports=0;totalReports=0;constructor(e,t){this.parentScope=t?.parentScope?go.get(t.parentScope):void 0,this.parentScope&&(this.parentScope.childScopes.push(this),this.parentDepth=this.parentScope.parentDepth+1),this.scopeLabel=` `.repeat(this.parentDepth*2)+e,this.showLogs=t?.logTimings??!!mo,this.showLogs&&console.time(this.scopeLabel),this.onProgress=t?.onProgress}report(e,t=!1){if(e){if(e.totalSteps!==void 0&&(this.lastTotalSteps=e.totalSteps),e.currentStep!==void 0&&(this.lastStep=e.currentStep),e.autoStep!==void 0){if(e.currentStep===void 0){this.lastStep===void 0&&(this.lastStep=0);let t=typeof e.autoStep==`number`?e.autoStep:1;this.lastStep+=this.lastAutoStepWeight,this.lastAutoStepWeight=t,e.currentStep=this.lastStep}e.totalSteps=this.lastTotalSteps}e.progress===void 0?e.currentStep!==void 0&&e.totalSteps!==void 0&&(this.selfProgress=e.currentStep/e.totalSteps):this.selfProgress=e.progress}if(this.childScopes.length>0){let e=0,t=0;for(let n of this.childScopes)e+=n.selfProgress,t+=1;t>0&&(e/=t);let n=this.lastAutoStepWeight/(this.lastTotalSteps??1);this.totalProgress=this.selfProgress+e*n}else this.totalProgress=this.selfProgress;this.selfProgress=Math.min(1,this.selfProgress),this.totalProgress=Math.min(1,this.totalProgress);let n=(this.totalProgress*100).toFixed(3)+`%`;this.childScopes.length>0&&(n+=` (`+(this.selfProgress*100).toFixed(3)+`% self)`),e?.message&&(n=e.message+` – `+n),this.lastStep!==void 0&&this.lastTotalSteps!==void 0&&(n=`Step `+(this.lastStep+(this.lastAutoStepWeight==1?``:`–`+(this.lastStep+this.lastAutoStepWeight))+`/`+this.lastTotalSteps)+` `+n),t||this.selfReports++,this.totalReports++,this.showLogs&&console.timeLog(this.scopeLabel,n),this.onProgress&&this.onProgress(this.totalProgress),this.parentScope&&this.parentScope.report(void 0,!0)}end(){this.report({progress:1,autoStep:!0},!0),this.showLogs&&(console.timeLog(this.scopeLabel,`Total reports: `+this.totalReports,`Self reports: `+this.selfReports),console.timeEnd(this.scopeLabel));let e=!1;for(let t of this.childScopes)if(!(t.selfProgress>=1)){e=!0;break}e&&console.warn(`Progress end with child scopes that are still running`,this),this.onProgress=void 0}},H=`{let t=e.type___needle,n=r.get(t)||new Map;if(r.set(t,n),!n.has(e)){let r=`${t}${n.size?`_${n.size}`:``}`;n.set(e,r)}return n.get(e)},a=e.colorNode?yo(e.colorNode):[],o=e.colorNode?`color3f inputs:diffuseColor.connect = ${H}/${t}/${i(a.values().next().value)}.outputs:out>`:``,s=e.roughnessNode?yo(e.roughnessNode):[],c=e.roughnessNode?`float inputs:roughness.connect = ${H}/${t}/${i(s.values().next().value)}.outputs:out>`:``,l=e.normalNode?yo(e.normalNode):[],u=e.normalNode?`float3 inputs:normal.connect = ${H}/${t}/${i(l.values().next().value)}.outputs:out>`:``,d=e.metalnessNode?yo(e.metalnessNode):[],f=e.metalnessNode?`float inputs:metallic.connect = ${H}/${t}/${i(d.values().next().value)}.outputs:out>`:``,p=So(new Set([...a,...s,...l,...d]),t,n,i);return console.debug(p),` - - def Material "${t}" ${e.name?`( - displayName = "${e.name}" - )`:``} - { - token outputs:mtlx:surface.connect = ${H}/${t}/N_mtlxsurface.outputs:surface> - - def Shader "N_mtlxsurface" - { - uniform token info:id = "ND_UsdPreviewSurface_surfaceshader" - ${o} - ${c} - ${u} - ${f} - token outputs:surface - } - - ${p} - - }`}function yo(e){let t=e=>{if(e.nodeType)return e.nodeType;switch(e.type){case`TimerNode`:return`float`;case`TextureNode`:return;case`ConvertNode`:return e.convertTo;default:return}},n=e=>{let n=new Set,r=e=>{if(!(!e.isNode||n.has(e))){e.nodeType___needle||=t(e),e.shaderNode?(e.type___needle=`ShaderCallNodeInternal`,e.shaderNodeLayoutName___needle=e.shaderNode.layout.name.slice(3)):e.type___needle=e.type,n.add(e);for(let t in e)e[t]?.isNode&&(r(e[t]),e.nodeType___needle||=e[t].nodeType___needle),Array.isArray(e[t])&&e[t].forEach(t=>{t.isNode&&(r(t),e.nodeType___needle||=t.nodeType___needle)})}};return r(e),n},r=e=>{if(e.type===`ConvertNode`){if(e.convertTo===e.node.nodeType___needle)return!0;if(e.node.type===`ConstNode`){if(e.convertTo===`vec4`&&e.node.value.isVector4||e.convertTo===`vec3`&&e.node.value.isVector3||e.convertTo===`vec2`&&e.node.value.isVector2||e.convertTo===`color`&&e.node.value.isColor||e.convertTo===`float`&&typeof e.node.value==`number`)return!0}else if(e.node.type==`SplitNode`&&e.convertTo==`float`&&e.node.components.length===1)return!0}return!1},i=e=>{for(;a(e);)e=!e.node&&e.shaderNode?e.inputNodes[0]:e.node??e.aNode??e.bNode??e.cNode;return e},a=e=>!e||r(e)||[`UniformNode`,`UniformGroupNode`,`ShaderNodeInternal`].includes(e.type___needle)||e.type___needle===void 0,o=(e,t)=>{for(let n of t)for(let t in n)if(n[t]?.isNode&&n[t]===e||Array.isArray(n[t])&&n[t].find(t=>t.isNode&&t===e))return{parent:n,label:t};return null},s=(e,t)=>{if(e.shaderNode)e.inputNodes[0]=i(e.inputNodes[0]);else if(Array.isArray(e.nodes))for(let t=0;t{e[t]&&a(e[t])&&(e[t]=i(e[t]))})},c=e=>{e.type===`MathNode`&&e.method===`mix`&&(e.cNode.nodeType___needle=`float`,e.cNode.type===`ConvertNode`&&(e.cNode.convertTo=`float`))},l=(e,t)=>{t.label===`cNode`&&t.parent.type===`MathNode`&&t.parent.method===`mix`||(t.parent.type===`JoinNode`?e.nodeType___needle=`float`:e.nodeType___needle=t.parent.nodeType___needle)},u=e=>e?.type===`ConvertNode`&&e.nodeType___needle===`color`&&e.node.nodeType___needle===`vec4`,d=(e,t)=>{e.convertTo=`vec3`,e.nodeType___needle=`vec3`;let n={type:`ConvertNode`,convertTo:`color`,node:e,isNode:!0,nodeType___needle:`color`,type___needle:`ConvertNode`},r=o(e,t);return r?.parent&&(r.parent[r.label]=n),n},f=e=>e?.type===`ConvertNode`&&e.node.type===`TextureNode`&&e.nodeType___needle!==e.node.nodeType___needle;return(e=>{let t=new Set;for(let n of e)if(!a(n)){if(c(n),n.type==`SplitNode`){let t=o(n,e);if(n.components.length===1)n.nodeType___needle=`float`;else if(t)n.nodeType___needle=t.parent.nodeType___needle;else throw Error(`SplitNode without parent found, this should not happen`)}if(s(n,[`node`,`aNode`,`bNode`,`cNode`]),n.type==`ConstNode`&&n.nodeType==null&&l(n,o(n,e)),u(n)&&t.add(d(n,e)),f(n)){n.node.nodeType___needle=n.convertTo;let t=o(n,e);t?.parent&&(t.parent[t.label]=n.node),n=n.node}t.add(n)}return t})(n(e))}function bo(e,t){switch(t){case`float4`:return e.isVector4?`(${e.x}, ${e.y}, ${e.z}, ${e.w})`:`(${e}, ${e}, ${e}, ${e})`;case`float3`:return e.isVector3?`(${e.x}, ${e.y}, ${e.z})`:`(${e}, ${e}, ${e})`;case`float2`:return e.isVector2?`(${e.x}, ${e.y})`:`(${e}, ${e})`;case`color3f`:return e.isColor?`(${e.r}, ${e.g}, ${e.b})`:`(${e}, ${e}, ${e})`;default:return e.isVector4||e.isVector3||e.isVector2?`${e.x}`:e.isColor?`${e.r}`:`${e}`}}function xo(e,t,n,r){let i=` `,a=e=>({float:`float`,vec2:`vector2`,vec3:`vector3`,vec4:`vector4`,color:`color3`})[e]||`float`,o=e=>({float:`float`,vec2:`float2`,vec3:`float3`,vec4:`float4`,color:`color3f`})[e]||`float`,s=e.type___needle,c=e.nodeType___needle,l=a(c),u=o(c),d=``,f=[];switch(s){case`UniformGroupNode`:case`UniformNode`:return``;case`TimerNode`:d=`time_float`;break;case`ConstNode`:d=`constant_`+l,f.push(`${u} inputs:value = ${bo(e.value,u)}`);break;case`JoinNode`:d=`combine`+e.nodes.length+`_`+l;let i=1;for(let r of e.nodes)f.push(`float inputs:in${i++}.connect = ${H}/${t}/${n(r)}.outputs:out>`);break;case`ConvertNode`:d=`convert_`+a(e.node.nodeType___needle)+`_`+l,e.node&&f.push(`${o(e.node.nodeType___needle)} inputs:in.connect = ${H}/${t}/${n(e.node)}.outputs:out>`);break;case`MathNode`:d=e.method+`_`+l,e.aNode&&!e.bNode&&f.push(`${o(e.aNode.nodeType___needle)} inputs:in.connect = ${H}/${t}/${n(e.aNode)}.outputs:out>`),e.aNode&&e.bNode&&!e.cNode&&(f.push(`${o(e.aNode.nodeType___needle)} inputs:in1.connect = ${H}/${t}/${n(e.aNode)}.outputs:out>`),f.push(`${o(e.bNode.nodeType___needle)} inputs:in2.connect = ${H}/${t}/${n(e.bNode)}.outputs:out>`)),e.aNode&&e.bNode&&e.cNode&&e.method==`clamp`&&(f.push(`${o(e.aNode.nodeType___needle)} inputs:in.connect = ${H}/${t}/${n(e.aNode)}.outputs:out>`),f.push(`${o(e.bNode.nodeType___needle)} inputs:low.connect = ${H}/${t}/${n(e.bNode)}.outputs:out>`),f.push(`${o(e.cNode.nodeType___needle)} inputs:high.connect = ${H}/${t}/${n(e.cNode)}.outputs:out>`)),e.aNode&&e.bNode&&e.cNode&&e.method==`mix`&&(f.push(`${o(e.aNode.nodeType___needle)} inputs:fg.connect = ${H}/${t}/${n(e.bNode)}.outputs:out>`),f.push(`${o(e.bNode.nodeType___needle)} inputs:bg.connect = ${H}/${t}/${n(e.aNode)}.outputs:out>`),f.push(`float inputs:mix.connect = ${H}/${t}/${n(e.cNode)}.outputs:out>`));break;case`OperatorNode`:let s=``;switch(e.op){case`*`:s=`multiply`;break;case`/`:s=`divide`;break;case`+`:s=`add`;break;case`-`:s=`subtract`;break}if(d=s+`_`+l,e.aNode&&!e.bNode&&f.push(`${o(e.aNode.nodeType___needle)} inputs:in.connect = ${H}/${t}/${n(e.aNode)}.outputs:out>`),e.aNode&&e.bNode){let r=o(e.aNode.nodeType___needle),i=o(e.bNode.nodeType___needle);(r===`color3f`&&i===`float`||i===`float`&&i===`color3f`)&&(d=s+`_color3FA`),f.push(`${r} inputs:in1.connect = ${H}/${t}/${n(e.aNode)}.outputs:out>`),f.push(`${i} inputs:in2.connect = ${H}/${t}/${n(e.bNode)}.outputs:out>`)}break;case`TextureNode`:e.uvNode?(d=`tiledimage_`+l,f.push(`float2 inputs:texcoord.connect = ${H}/${t}/${n(e.uvNode)}.outputs:out>`)):d=`image_`+l;let c=e._value,p=Ts.includes(c.format),m=Co(c);f.push(`asset inputs:file = @textures/${m}.${p?`png`:`jpg`}@`),r[m]={texture:c,scale:void 0};break;case`NormalMapNode`:u=`float3`,d=`normalmap`,f.push(`${u} inputs:in.connect = ${H}/${t}/${n(e.node)}.outputs:out>`);break;case`AttributeNode`:d=`geompropvalue_`+l,f.push(`string inputs:geomprop = "st"`);break;case`ShaderCallNodeInternal`:d=e.shaderNodeLayoutName___needle+`_`+l,f.push(`${u} inputs:in.connect = ${H}/${t}/${n(e.inputNodes[0])}.outputs:out>`);break;case`SplitNode`:d=`swizzle_`+a(e.node.nodeType___needle)+`_`+l,f.push(`${o(e.node.nodeType___needle)} inputs:in.connect = ${H}/${t}/${n(e.node)}.outputs:out>`),f.push(`string inputs:channels = "${e.components}"`);break}return` - ${i}def Shader "${n(e)}" - ${i}{ - ${i}uniform token info:id = "ND_${d}" - ${i}${u} outputs:out - ${i}${f.length>0?f.join(` - `):``} - ${i}} - `}function So(e,t,n,r){let i=``;for(let a of e)i+=xo(a,t,r,n);return i}function Co(e){return wo(e.name)+`_`+(e.source?.id??e.id)}function wo(e){return e=e.replace(/[^a-zA-Z0-9_]/g,``),e.match(/^[a-zA-Z_]/)||(e=`_`+e),e}function To(e){return e=e.replace(`"`,`\\"`),e}function Eo(e){if(e.length===0)return null;let t=e.map(e=>{let t=[];for(;e.parent;)t.unshift(e.parent),e=e.parent;return t});return t[0].findLast(e=>t.every(t=>t.includes(e)))||null}function Do(e){let t=Eo(e),n=new Set;for(let r of e){let i=r.parent;for(;i&&i!==t;)e.includes(i)||n.add(i),i=i.parent}return n}var Oo=new r,ko=new Ue,Ao=new r(1,1,1),jo=class e{static USDObject_export_id=0;uuid;name;type;extraSchemas=[];displayName;visibility;getMatrix(){if(!this.transform)return new b;let{position:e,quaternion:t,scale:n}=this.transform,r=new b;return r.compose(e||Oo,t||ko,n||Ao),r}setMatrix(e){if(!e||!(e instanceof b)){this.transform=null;return}let t=new r,n=new Ue,i=new r;e.decompose(t,n,i),this.transform={position:t,quaternion:n,scale:i}}get matrix(){return this.getMatrix()}set matrix(e){this.setMatrix(e)}transform=null;_isDynamic;get isDynamic(){return this._isDynamic}set isDynamic(e){this._isDynamic=e}geometry;material;camera;parent;skinnedMesh;children=[];animations;_eventListeners;needsTranslate=!1;needsOrient=!1;needsScale=!1;static createEmptyParent(t){let n=new e(h.generateUUID(),t.name+`_empty_`+ e.USDObject_export_id++,t.transform),r=t.parent;return r&&r.add(n),n.add(t),n.isDynamic=!0,t.transform=null,n}static createEmpty(){let t=new e(h.generateUUID(),`Empty_`+ e.USDObject_export_id++);return t.isDynamic=!0,t}constructor(e,t,n=null,r=null,i=null,a=null,o=null,s=null){this.uuid=e,this.name=wo(t),this.displayName=t,n?this.transform={position:n.position?.clone()||null,quaternion:n.quaternion?.clone()||null,scale:n.scale?.clone()||null}:this.transform=null,this.geometry=r,this.material=i,this.camera=a,this.parent=null,this.children=[],this._eventListeners={},this._isDynamic=!1,this.skinnedMesh=o,this.animations=s}is(e){return e?this.uuid===e.uuid:!1}isEmpty(){return!this.geometry}clone(){let t=new e(h.generateUUID(),this.name,this.transform,this.geometry,this.material);return t.isDynamic=this.isDynamic,t}deepClone(){let e=this.clone();for(let t of this.children)t&&e.add(t.deepClone());return e}getPath(){let e=this.parent,t=this.name;for(;e;)t=(e.parent?e.name:e.name+`/Scenes/Scene`)+`/`+t,e=e.parent;return``}add(e){e.parent&&e.parent.remove(e),e.parent=this,this.children.push(e)}remove(e){let t=this.children.indexOf(e);t>=0&&(e.parent===this&&(e.parent=null),this.children.splice(t,1))}addEventListener(e,t){this._eventListeners[e]||(this._eventListeners[e]=[]),this._eventListeners[e].push(t)}removeEventListener(e,t){if(!this._eventListeners[e])return;let n=this._eventListeners[e].indexOf(t);n>=0&&this._eventListeners[e].splice(n,1)}onSerialize(e,t){let n=this._eventListeners.serialize;n&&n.forEach(n=>n(e,t))}},Mo=class extends jo{stageLength;get isDocumentRoot(){return!0}get isDynamic(){return!1}constructor(){super(void 0,`StageRoot`,null,null,null,null),this.children=[],this.stageLength=200}add(e){e.parent=this,this.children.push(e)}remove(e){let t=this.children.indexOf(e);t>=0&&(e.parent===this&&(e.parent=null),this.children.splice(t,1))}traverse(e,t=null){if(t===null?t=this:e(t),t.children)for(let n of t.children)this.traverse(e,n)}findById(e){let t=!1;function n(r){if(!t){if(r.uuid===e)return t=!0,r;if(r.children)for(let e of r.children){if(!e)continue;let t=n(e);if(t)return t}}}return n(this)}buildHeader(e){let t=e.extensions?.find(e=>e?.extensionName===`animation`),n=e.extensions?.find(e=>e?.extensionName===`Behaviour`),r=e.extensions?.find(e=>e?.extensionName===`Physics`),i=t?.getStartTimeCode()??0,a=t?.getEndTimeCode()??0,o=``,s=t?.registeredClips;if(s)for(let e of s)o+=`\t# Animation: ${e.name}, start=${t.getStartTimeByClip(e)*60}, length=${e.duration*60}\n`;let c=o;return`#usda 1.0 -( - customLayerData = { - string creator = "Needle Engine ${ut}" - dictionary Needle = { - bool animations = ${+!!t} - bool interactive = ${+!!n} - bool physics = ${+!!r} - bool quickLookCompatible = ${+!!e.quickLookCompatible} - } - } - defaultPrim = "${wo(this.name)}" - metersPerUnit = 1 - upAxis = "Y" - startTimeCode = ${i} - endTimeCode = ${a} - timeCodesPerSecond = 60 - framesPerSecond = 60 - doc = """Generated by Needle Engine USDZ Exporter ${ut}""" -${c} -) -`}},No=` -`,Po=`({ar:{anchoring:{type:`plane`},planeAnchoring:{alignment:`horizontal`}},quickLookCompatible:!1,extensions:[],maxTextureSize:4096,exportInvisible:!1}),Ro=class{debug;pruneUnusedNodes;sceneAnchoringOptions=Lo();extensions=[];keepObject;beforeWritingDocument;constructor(){this.debug=!1,this.pruneUnusedNodes=!0}async parse(e,t=Lo()){t=Object.assign({},t),this.sceneAnchoringOptions=t;let n=new Io(e,this,t);this.extensions=n.extensions;let r=n.files,i=`model.usda`;r[i]=null,n.materials;let a=n.textures;V.report(`export-usdz`,`Invoking onBeforeBuildDocument`),await Wo(n,`onBeforeBuildDocument`),V.report(`export-usdz`,`Done onBeforeBuildDocument`),V.report(`export-usdz`,`Reparent bones to common ancestor`);let o=[],s=new Set;e?.traverse(e=>{if(!(!t.exportInvisible&&!e.visible)&&e instanceof Ie){let t=e.skeleton.bones,n=Eo(t);if(n){let t={object:e,originalParent:e.parent,newParent:n};o.push(t),s.add(t.object.uuid),t.newParent&&s.add(t.newParent.uuid),t.originalParent&&s.add(t.originalParent.uuid)}}});for(let e of o){let{object:t,originalParent:n,newParent:r}=e;r.add(t)}V.report(`export-usdz`,`Traversing hierarchy`),e&&zo(e,n.document,n,this.keepObject),V.report(`export-usdz`,`Invoking onAfterBuildDocument`),await Wo(n,`onAfterBuildDocument`);let c=n.extensions.find(e=>e.extensionName===`Behaviour`)?.getAllTargetUuids()??new Set;if(this.pruneUnusedNodes){let e={allBehaviorTargets:c,debug:!1,boneReparentings:s,quickLookCompatible:n.quickLookCompatible};this.debug&&Bo(n.document,`Hierarchy BEFORE pruning`,e),Vo(n.document,e),this.debug&&Bo(n.document,`Hierarchy AFTER pruning`)}else this.debug&&console.log(`Pruning of empty nodes is disabled. This may result in a larger USDZ file.`);V.report(`export-usdz`,{message:`Parsing document`,autoStep:10}),await Ho(n,t),V.report(`export-usdz`,`Invoking onAfterSerialize`),await Wo(n,`onAfterSerialize`);for(let e of o){let{object:t,originalParent:n,newParent:r}=e;n&&n.add(t)}n.exporter?.beforeWritingDocument?.();let l=n.document.buildHeader(n)+` -`+n.output;this.debug&&console.debug(l),r[i]=Zn(l),n.output=``,V.report(`export-usdz`,{message:`Exporting textures`,autoStep:10}),V.start(`export-usdz-textures`,{parentScope:`export-usdz`,logTimings:!1});let u=new p({antialias:!1,alpha:!0,premultipliedAlpha:!1,preserveDrawingBuffer:!0}),d=Object.keys(a).length;V.report(`export-usdz-textures`,{totalSteps:d*3,currentStep:0});let f=async e=>{let n=a[e],i=n.texture,o=Ts.includes(i.format),s={imageData:i.image};V.report(`export-usdz-textures`,{message:`read back texture`,autoStep:!0});let c=n.scale!==void 0&&n.scale.x!==1&&n.scale.y!==1&&n.scale.z!==1&&n.scale.w!==1;(i.isCompressedTexture||i.isRenderTargetTexture||c)&&(s=await Xo(i,t.maxTextureSize,u,n.scale)),V.report(`export-usdz-textures`,{message:`convert texture to canvas`,autoStep:!0});let l=await Qo(s.imageBitmap||s.imageData,t.maxTextureSize).catch(e=>{console.error(`Error converting texture to canvas`,i,e)});if(l){V.report(`export-usdz-textures`,{message:`convert canvas to blob`,autoStep:!0});let t=await l.convertToBlob({type:o?`image/png`:`image/jpeg`,quality:.95});r[`textures/${e}.${o?`png`:`jpg`}`]=new Uint8Array(await t.arrayBuffer())}else console.warn("Can`t export texture: ",i)};for(let e in a)await f(e);u.dispose(),V.end(`export-usdz-textures`);let m=0;for(let e in r){let t=r[e],n=34+e.length;m+=n;let i=m&63;if(i!==4){let n=64-i;r[e]=[t,{extra:{12345:new Uint8Array(n)}}]}m=t.length}return V.report(`export-usdz`,`zip archive`),cr(r,{level:0})}};function zo(e,t,n,r){if(!n.exportInvisible&&!e.visible)return;let i,a,o,s={position:e.position,quaternion:e.quaternion,scale:e.scale};if(e.position.x===0&&e.position.y===0&&e.position.z===0&&(s.position=null),e.quaternion.x===0&&e.quaternion.y===0&&e.quaternion.z===0&&e.quaternion.w===1&&(s.quaternion=null),e.scale.x===1&&e.scale.y===1&&e.scale.z===1&&(s.scale=null),(e instanceof x||e instanceof Ie)&&(a=e.geometry,o=e.material),r&&!r(e)&&(a=void 0,o=void 0),(e instanceof x||e instanceof Ie)&&o&&typeof o==`object`&&(o instanceof Te||o instanceof v||o.isMeshPhysicalNodeMaterial||o instanceof Ne&&o.type===`MeshLineMaterial`)){let t=ns(e),n=e instanceof Ie?e:null;i=new jo(e.uuid,t,s,a,o,void 0,n,e.animations)}else if(e instanceof be||e instanceof Ae){let t=ns(e);i=new jo(e.uuid,t,s,void 0,void 0,e)}else{let t=ns(e);i=new jo(e.uuid,t,s,void 0,void 0,void 0,void 0,e.animations)}if(i){if(i.displayName=e.userData?.name||e.name,i.visibility=e.visible?void 0:`invisible`,t&&t.add(i),t=i,n.extensions)for(let t of n.extensions)t.onExportObject&&t.onExportObject.call(t,e,i,n)}else{let n=ns(e),r=new jo(e.uuid,n,{position:e.position,quaternion:e.quaternion,scale:e.scale});t&&t.add(r),t=r}for(let i of e.children)zo(i,t,n,r)}function Bo(e,t,...n){let r={},i=0;function a(e,t){i++;let n=e.displayName||e.name;n+=` (`+e.uuid+`)`,(e.geometry||e.material||e.camera||e.skinnedMesh)&&(n+=` (`+(e.geometry?`geo, `:``)+(e.material?`mat, `:``)+(e.camera?`cam, `:``)+(e.skinnedMesh?`skin, `:``)+`)`),t[n]={};let r={object:e};e.material&&(r.mat=!0),e.geometry&&(r.geo=!0),e.camera&&(r.cam=!0),e.skinnedMesh&&(r.skin=!0),t[n]._self=r;for(let r of e.children)r&&a(r,t[n])}a(e,r),console.log(t+` (`+i+` nodes)`,r,...n)}function Vo(e,t){let n=!0,r=[],i=[];if(e.children.length===0)n=!0;else{let a=[...e.children];for(let e of a)if(e){let a=Vo(e,t);t.debug&&(a?r.push(e):i.push(e)),n&&=a}}let a=t.allBehaviorTargets.has(e.uuid),o=e.geometry||e.material||e.camera&&!t.quickLookCompatible||e.skinnedMesh||!1,s=t.boneReparentings.has(e.uuid),c=n&&!a&&!o&&!s;return c?(t.debug&&console.log(`Pruned object:`,(e.displayName||e.name)+` (`+e.uuid+`)`,{isVisible:o,isBehaviorSourceOrTarget:a,allChildsWerePruned:n,isBoneReparenting:s,object:e,prunedChilds:r,keptChilds:i}),e.parent?.remove(e)):t.debug&&console.log(`Kept object:`,(e.displayName||e.name)+` (`+e.uuid+`)`,{isVisible:o,isBehaviorSourceOrTarget:a,allChildsWerePruned:n,isBoneReparenting:s,object:e,prunedChilds:r,keptChilds:i}),c}async function Ho(e,t){V.start(`export-usdz-resources`,`export-usdz`);let n=[];for(let t of e.document.children)Uo(t,e,n);let r=n.length;for(let e=0;e{n[e](),t()});V.end(`export-usdz-resources`);let i=new Fo,a=e.exporter.sceneAnchoringOptions.ar;i.beginBlock(`def Xform "${e.document.name}"`),i.beginBlock(`def Scope "Scenes" ( - kind = "sceneLibrary" - )`),i.beginBlock(`def Xform "Scene"`,`(`,!1),i.appendLine(`apiSchemas = ["Preliminary_AnchoringAPI"]`),i.appendLine(`customData = {`),i.appendLine(` bool preliminary_collidesWithEnvironment = 0`),i.appendLine(` string sceneName = "Scene"`),i.appendLine(`}`),i.appendLine(`sceneName = "Scene"`),i.closeBlock(`)`),i.beginBlock(),i.appendLine(`token preliminary:anchoring:type = "${a.anchoring.type}"`),a.anchoring.type===`plane`&&i.appendLine(`token preliminary:planeAnchoring:alignment = "${a.planeAnchoring.alignment}"`),a.anchoring.type===`image`&&i.appendLine(`rel preliminary:imageAnchoring:referenceImage = `),i.appendLine();let o=e=>{if(!e)return 0;let t=1;for(let n of e.children)t+=o(n);return t},s=o(e.document);V.start(`export-usdz-xforms`,`export-usdz`),V.report(`export-usdz-xforms`,{totalSteps:s,currentStep:1});for(let t of e.document.children)ss(t,i,e);V.end(`export-usdz-xforms`),V.report(`export-usdz`,`invoke onAfterHierarchy`),await Wo(e,`onAfterHierarchy`,i),i.closeBlock(),i.closeBlock(),V.report(`export-usdz`,`Building materials`);let c=ys(e.materials,e.textures,t.quickLookCompatible);i.appendLine(c),i.closeBlock(),V.report(`export-usdz`,`write to string`),e.output+=i.toString()}function Uo(e,t,n){if(!e)return;let r=e.geometry,i=e.material;if(r)if(i&&(`isMeshStandardMaterial`in i&&i.isMeshStandardMaterial||`isMeshBasicMaterial`in i&&i.isMeshBasicMaterial||i.type===`MeshLineMaterial`)){let i=`geometries/`+is(r,e.name)+`.usda`;i in t.files||n.push(()=>{let n=us(r,e.skinnedMesh?.skeleton?.bones,t.quickLookCompatible);t.files[i]=ts(n,t)})}else console.warn(`NeedleUSDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)`,i?.name);i&&t.materials.get(i.uuid)===void 0&&(t.materials[i.uuid]=i);for(let r of e.children)Uo(r,t,n)}async function Wo(e,t,n=null){if(e.extensions){for(let r of e.extensions)if(r&&typeof r[t]==`function`){let i=r[t].call(r,e,n);i instanceof Promise&&await i}}}var Go=null,Ko=null,qo,Jo,Yo;async function Xo(e,t=1/0,n=null,r=void 0){qo||=new He(2,2,1,1),Jo||=new Re({uniforms:{blitTexture:new Ke(e),flipY:new Ke(!1),scale:new Ke(new C(1,1,1,1))},vertexShader:` - varying vec2 vUv; - uniform bool flipY; - void main(){ - vUv = uv; - if (flipY) - vUv.y = 1. - vUv.y; - gl_Position = vec4(position.xy * 1.0,0.,.999999); - }`,fragmentShader:` - uniform sampler2D blitTexture; - uniform vec4 scale; - varying vec2 vUv; - - void main(){ - gl_FragColor = vec4(vUv.xy, 0, 1); - - #ifdef IS_SRGB - gl_FragColor = sRGBTransferOETF( texture2D( blitTexture, vUv) ); - #else - gl_FragColor = texture2D( blitTexture, vUv); - #endif - - gl_FragColor.rgba *= scale.rgba; - }`});let i=Jo.uniforms;i.blitTexture.value=e,i.flipY.value=!1,i.scale.value=new C(1,1,1,1),r!==void 0&&i.scale.value.copy(r),Jo.defines.IS_SRGB=e.colorSpace==ue,Jo.needsUpdate=!0,Yo||(Yo=new x(qo,Jo),Yo.frustumCulled=!1);let a=new be,o=new ne;o.add(Yo),n||=Go=new p({antialias:!1,alpha:!0,premultipliedAlpha:!1,preserveDrawingBuffer:!0});let s=Math.min(e.image.width,t),c=Math.min(e.image.height,t);Ko&&(Ko.width!==s||Ko.height!==c)&&(Ko.dispose(),Ko=null),Ko||=new u(s,c,{format:te,type:We,minFilter:m,magFilter:m}),n.setRenderTarget(Ko),n.setSize(s,c),n.clear(),n.render(o,a),Go&&=(Go.dispose(),null);let l=new Uint8ClampedArray(Ko.width*Ko.height*4);n.readRenderTargetPixels(Ko,0,0,Ko.width,Ko.height,l);let d=new ImageData(l,Ko.width,Ko.height,void 0);return{imageData:d,imageBitmap:await createImageBitmap(d,{premultiplyAlpha:`none`})}}function Zo(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas||typeof ImageBitmap<`u`&&e instanceof ImageBitmap}async function Qo(e,t=4096){let n=t/Math.max(e.width,e.height),r=e.width*Math.min(1,n),i=e.height*Math.min(1,n),a=new OffscreenCanvas(r,i),o={premultiplyAlpha:`none`};e.width!==r&&(o.resizeWidth=r),e.height!==i&&(o.resizeHeight=i);let s=await createImageBitmap(e,o),c=a.getContext(`bitmaprenderer`);return c&&c.transferFromImageBitmap(s),a}async function $o(e,t=void 0,n=!1,r=4096){if(Zo(e)){let i=r/Math.max(e.width,e.height),a=new OffscreenCanvas(e.width*Math.min(1,i),e.height*Math.min(1,i)),o=a.getContext(`2d`,{alpha:!0,premultipliedAlpha:!1});if(!o)throw Error(`Could not get canvas 2D context`);if(n===!0&&(o.translate(0,a.height),o.scale(1,-1)),o.drawImage(e,0,0,a.width,a.height),t!==void 0){let e=t.x,n=t.y,r=t.z,i=t.w,s=o.getImageData(0,0,a.width,a.height),c=s.data;for(let t=0;t\(\)\[\]§$%&\/\\\=\?\,\;]/g,``)+`_`+e.id}function rs(e){return wo(e.name||`bone_`+e.uuid)}function is(e,t){return wo(e.name||`Geometry`)+`_`+e.id}function as(e){return wo(e.name||`Material`)+`_`+e.id}function os(e,t){let n=rs(e),r=e.parent;for(;r&&r!==t;)n=rs(r)+`/`+n,r=r.parent;return n}function ss(e,t,n){if(e==null)return;V.report(`export-usdz-xforms`,{message:`buildXform `+e.displayName||e.name,autoStep:!0});let r=e.transform,i=e.geometry,a=e.material,o=e.camera,s=e.name;if(e.animations)for(let t of e.animations)n.animations.push(t);let c=i&&i.isBufferGeometry&&i.attributes.skinIndex!==void 0&&i.attributes.skinIndex.count>0,l=c?`SkelRoot`:`Xform`,u=[],d=a&&a instanceof v&&a.color&&a.color.r===1&&a.color.g===1&&a.color.b===1&&!a.map&&a.opacity===1&&i?.attributes.color;if(i?.attributes.color&&!d&&console.warn(`NeedleUSDZExporter: Geometry has vertex colors. Vertex colors will only be shown in QuickLook for unlit materials with white color and no texture. Otherwise, they will be ignored.`,e.displayName),t.appendLine(),i?(t.beginBlock(`def ${l} "${s}"`,`(`,!1),n.quickLookCompatible&&a&&a.side===2&&!c?t.appendLine(`prepend references = @./geometries/${is(i,s)}.usda@`):t.appendLine(`prepend references = @./geometries/${is(i,s)}.usda@`),d||u.push(`MaterialBindingAPI`),c&&u.push(`SkelBindingAPI`)):o&&!n.quickLookCompatible?t.beginBlock(`def Camera "${s}"`,`(`,!1):e.type===void 0?t.beginBlock(`def Xform "${s}"`,`(`,!1):t.beginBlock(`def ${e.type} "${s}"`),e.type===void 0&&(e.extraSchemas?.length&&u.push(...e.extraSchemas),u.length&&t.appendLine(`prepend apiSchemas = [${u.map(e=>`"${e}"`).join(`, `)}]`)),e.displayName&&t.appendLine(`displayName = "${To(e.displayName)}"`),(o||e.type===void 0)&&(t.closeBlock(`)`),t.beginBlock()),i&&a){if(!d){let e=as(a);t.appendLine(`rel material:binding = `)}!n.quickLookCompatible&&a.side===2&&(t.beginBlock(`over "Geometry" `),t.appendLine(`uniform bool doubleSided = 1`),t.closeBlock())}let f=!1;if(c?(t.appendLine(`rel skel:skeleton = `),t.appendLine(`rel skel:animationSource = `),f=!1):e.type===void 0&&r&&(f=f||r.position!==null||r.quaternion!==null||r.scale!==null,r.position&&(e.needsTranslate=!0,t.appendLine(`double3 xformOp:translate = (${W(r.position.x)}, ${W(r.position.y)}, ${W(r.position.z)})`)),r.quaternion&&(e.needsOrient=!0,t.appendLine(`quatf xformOp:orient = (${W(r.quaternion.w)}, ${W(r.quaternion.x)}, ${W(r.quaternion.y)}, ${W(r.quaternion.z)})`)),r.scale&&(e.needsScale=!0,t.appendLine(`double3 xformOp:scale = (${W(r.scale.x)}, ${W(r.scale.y)}, ${W(r.scale.z)})`))),e.visibility!==void 0&&t.appendLine(`token visibility = "${e.visibility}"`),o&&!n.quickLookCompatible&&(`isOrthographicCamera`in o&&o.isOrthographicCamera?(t.appendLine(`float2 clippingRange = (${o.near}, ${o.far})`),t.appendLine(`float horizontalAperture = ${((Math.abs(o.left)+Math.abs(o.right))*10).toPrecision(U)}`),t.appendLine(`float verticalAperture = ${((Math.abs(o.top)+Math.abs(o.bottom))*10).toPrecision(U)}`),t.appendLine(`token projection = "orthographic"`)):`isPerspectiveCamera`in o&&o.isPerspectiveCamera&&(t.appendLine(`float2 clippingRange = (${o.near.toPrecision(U)}, ${o.far.toPrecision(U)})`),t.appendLine(`float focalLength = ${o.getFocalLength().toPrecision(U)}`),t.appendLine(`float focusDistance = ${o.focus.toPrecision(U)}`),t.appendLine(`float horizontalAperture = ${o.getFilmWidth().toPrecision(U)}`),t.appendLine(`token projection = "perspective"`),t.appendLine(`float verticalAperture = ${o.getFilmHeight().toPrecision(U)}`))),e.onSerialize&&e.onSerialize(t,n),e.type===void 0){let n=[];e.needsTranslate&&n.push(`"xformOp:translate"`),e.needsOrient&&n.push(`"xformOp:orient"`),e.needsScale&&n.push(`"xformOp:scale"`),n.length&&t.appendLine(`uniform token[] xformOpOrder = [${n.join(`, `)}]`)}if(e.children){t.appendLine();for(let r of e.children)ss(r,t,n)}t.closeBlock()}function W(e){return Number.isInteger(e)?e.toString():e.toFixed(10)}function cs(e){let t=e.elements;return`( ${ls(t,0)}, ${ls(t,4)}, ${ls(t,8)}, ${ls(t,12)} )`}function ls(e,t){return`(${W(e[t+0])}, ${W(e[t+1])}, ${W(e[t+2])}, ${W(e[t+3])})`}function us(e,t=[],n=!0){return` -def "Geometry" -${ds(e,t,n)} -`}function ds(e,t=[],n=!0){let r=`Geometry`,i=e.attributes,a=i.position.count,o=t&&t.length>0,s=[],c=[],l=[],u=i.skinIndex;if(o){let e=[];for(let n of t)s.push({bone:n,index:t.indexOf(n)}),e.push(n.uuid);let n=1e4;for(;e.length0;)for(let n of s){let r=n.bone.children;for(let n of r)e.indexOf(n.uuid)===-1&&t.indexOf(n)!==-1&&(s.push({bone:n,index:t.indexOf(n)}),e.push(n.uuid))}n<=0&&console.error(`Failed to sort bones in skinned mesh`,s,t,e);for(let e of Do(t))s.push({bone:e,index:s.length});let r=s[0].bone.parent;s.sort((e,t)=>os(e.bone,r)>os(t.bone,r)?1:-1),s.map(e=>`"`+os(e.bone,r)+`"`).join(`, `);for(let e in s)c[s[e].index]=parseInt(e);let a=i.skinIndex;l=[];for(let e=0;e -) -{ - over "Geometry" - { - int[] faceVertexCounts = [${fs(e)+`, `+fs(e)}] - int[] faceVertexIndices = [${ps(e)+`, `+ps(e,!0)}] - } -} -`:``} -`}function fs(e){let t=e.index===null?e.attributes.position.count:e.index.count;return Array(Math.floor(t/3)).fill(3).join(`, `)}function ps(e,t=!1){let n=e.index,r=[];if(n!==null)for(let e=0;e0?`st`+e.channel:`st`;a.add(e.channel);let p=Ts.includes(e.format),m={1e3:`repeat`,1001:`clamp`,1002:`mirror`},h=e.repeat.clone(),g=e.offset.clone(),_=e.rotation,ee=Math.sin(_),te=Math.cos(_);g.y=1-g.y-h.y,n?(h.x===0&&(h.x=1e-4),h.y===0&&(h.y=1e-4),g.x/=h.x,g.y/=h.y,g.x+=ee/h.x,g.y+=te-1):(g.x+=ee*h.x,g.y+=(1-te)*h.y);let ne=as(i),v=h.x!=1||h.y!=1||g.x!=0||g.y!=0||_!=0,re=`${Po}/${ne}/${`uvReader_`+f}.outputs:result>`,ie=`${Po}/${ne}/Transform2d_${t}.outputs:result>`,ae=t!==`normal`&&o&&(o.r!==1||o.g!==1||o.b!==1||s!==1)||!1,oe=t===`normal`,y=i instanceof Te&&i.normalScale?i.normalScale.x*2:2,se=y.toFixed(U),ce=(y/2*-1).toFixed(U),b=(1-y).toFixed(U);return` - ${v?`def Shader "Transform2d_${t}" ( - sdrMetadata = { - string role = "math" - } - ) - { - uniform token info:id = "UsdTransform2d" - float2 inputs:in.connect = ${re} - float2 inputs:scale = ${ws(h)} - float2 inputs:translation = ${ws(g)} - float inputs:rotation = ${(_/Math.PI*180).toFixed(U)} - float2 outputs:result - } - `:``} - def Shader "${c}_${t}" - { - uniform token info:id = "UsdUVTexture" - asset inputs:file = @textures/${l}.${p?`png`:`jpg`}@ - token inputs:sourceColorSpace = "${e.colorSpace===`srgb`?`sRGB`:`raw`}" - float2 inputs:st.connect = ${v?ie:re} - ${ae?` - float4 inputs:scale = (${o?o.r+`, `+o.g+`, `+o.b:`1, 1, 1`}, ${s}) - `:``} - ${oe?` - float4 inputs:scale = (${se}, ${se}, ${se}, 1) - float4 inputs:bias = (${ce}, ${ce}, ${b}, 0) - `:``} - token inputs:wrapS = "${m[e.wrapS]}" - token inputs:wrapT = "${m[e.wrapT]}" - float outputs:r - float outputs:g - float outputs:b - float3 outputs:rgb - ${i.transparent||i.alphaTest>0?`float outputs:a`:``} - }`}function Ss(e,t,r=!1){let i=as(e);if(e.colorWrite===!1||e.userData?.isShadowCatcherMaterial||e.userData?.isLightBlendMaterial){let t=e.userData.isLightBlendMaterial||e.userData.isShadowCatcherMaterial?`ND_realitykit_shadowreceiver_surfaceshader`:`ND_realitykit_occlusion_surfaceshader`;return` - - def Material "${i}" ${e.name?`( - displayName = "${e.name}" - )`:``} - { - token outputs:mtlx:surface.connect = ${Po}/${i}/Occlusion.outputs:out> - - def Shader "Occlusion" - { - uniform token info:id = "${t}" - token outputs:out - } - }`}let a=` `,o=[],s=[],c=new Set;if(e.isMeshPhysicalNodeMaterial===!0)return vo(e,i,t);let l=e.transparent||e.alphaTest?e.opacity:1,u=!1,d=!1;if(e instanceof Fe&&e.transmission!==void 0&&(l*=1-e.transmission*(1-e.roughness*.5)),e.map?(o.push(`${a}color3f inputs:diffuseColor.connect = ${Po}/${i}/${bs(e.map)}_diffuse.outputs:rgb>`),e instanceof v&&e.transparent&&e.alphaTest==0&&r?(o.push(`${a}float inputs:opacity.connect = ${Po}/${i}/${bs(e.map)}_diffuse.outputs:a>`),u=!0,o.push(`${a}float inputs:opacityThreshold = 1e-10`),d=!0):e.transparent?(o.push(`${a}float inputs:opacity.connect = ${Po}/${i}/${bs(e.map)}_diffuse.outputs:a>`),u=!0):e.alphaTest>0&&(o.push(`${a}float inputs:opacity.connect = ${Po}/${i}/${bs(e.map)}_diffuse.outputs:a>`),u=!0,o.push(`${a}float inputs:opacityThreshold = ${e.alphaTest}`),d=!0),s.push(xs(e.map,`diffuse`,r,t,e,c,e.color,l))):o.push(`${a}color3f inputs:diffuseColor = ${Cs(e.color)}`),e.alphaHash&&r&&(d?console.warn(`Opacity threshold for `+e.name+` was already connected. Skipping alphaHash opacity threshold.`):(o.push(`${a}float inputs:opacityThreshold = 0.0000000001`),d=!0)),e.aoMap&&(o.push(`${a}float inputs:occlusion.connect = ${Po}/${i}/${bs(e.aoMap)}_occlusion.outputs:r>`),s.push(xs(e.aoMap,`occlusion`,r,t,e,c))),e.alphaMap?(o.push(`${a}float inputs:opacity.connect = ${Po}/${i}/${bs(e.alphaMap)}_opacity.outputs:r>`),o.push(`${a}float inputs:opacityThreshold = 0.0000000001`),u=!0,d=!0,s.push(xs(e.alphaMap,`opacity`,r,t,e,c,new n(1,1,1),l))):(u?console.warn(`Opacity for `+e.name+` was already connected. Skipping default opacity.`):(o.push(`${a}float inputs:opacity = ${l}`),u=!0),e.alphaTest>0&&(d?console.warn(`Opacity threshold for `+e.name+` was already connected. Skipping default opacity threshold.`):(o.push(`${a}float inputs:opacityThreshold = ${e.alphaTest}`),d=!0))),e instanceof Te){if(e.emissiveMap){o.push(`${a}color3f inputs:emissiveColor.connect = ${Po}/${i}/${bs(e.emissiveMap)}_emissive.outputs:rgb>`);let n=e.emissive.clone();n.multiplyScalar(e.emissiveIntensity),s.push(xs(e.emissiveMap,`emissive`,r,t,e,c,n))}else if(e.emissive?.getHex()>0){let t=e.emissive.clone();t.multiplyScalar(e.emissiveIntensity),o.push(`${a}color3f inputs:emissiveColor = ${Cs(t)}`)}e.normalMap&&(o.push(`${a}normal3f inputs:normal.connect = ${Po}/${i}/${bs(e.normalMap)}_normal.outputs:rgb>`),s.push(xs(e.normalMap,`normal`,r,t,e,c))),e.roughnessMap&&e.roughness===1?(o.push(`${a}float inputs:roughness.connect = ${Po}/${i}/${bs(e.roughnessMap)}_roughness.outputs:g>`),s.push(xs(e.roughnessMap,`roughness`,r,t,e,c))):o.push(`${a}float inputs:roughness = ${e.roughness===void 0?1:e.roughness}`),e.metalnessMap&&e.metalness===1?(o.push(`${a}float inputs:metallic.connect = ${Po}/${i}/${bs(e.metalnessMap)}_metallic.outputs:b>`),s.push(xs(e.metalnessMap,`metallic`,r,t,e,c))):o.push(`${a}float inputs:metallic = ${e.metalness===void 0?0:e.metalness}`)}return e instanceof Fe&&(o.push(`${a}float inputs:clearcoat = ${e.clearcoat}`),o.push(`${a}float inputs:clearcoatRoughness = ${e.clearcoatRoughness}`),o.push(`${a}float inputs:ior = ${e.ior}`),!e.transparent&&!(e.alphaTest>0)&&e.transmissionMap&&(o.push(`${a}float inputs:opacity.connect = ${Po}/${i}/${bs(e.transmissionMap)}_transmission.outputs:r>`),s.push(xs(e.transmissionMap,`transmission`,r,t,e,c)))),c.size>2?console.warn(`USDZExporter: Material `+e.name+` uses more than 2 UV channels. Currently, only UV0 and UV1 are supported.`):c.size===2&&(!c.has(0)||!c.has(1))&&console.warn(`USDZExporter: Material `+e.name+` uses UV channels other than 0 and 1. Currently, only UV0 and UV1 are supported.`),` - - def Material "${i}" ${e.name?`( - displayName = "${To(e.name)}" - )`:``} - { - token outputs:surface.connect = ${Po}/${i}/PreviewSurface.outputs:surface> - - def Shader "PreviewSurface" - { - uniform token info:id = "UsdPreviewSurface" -${o.join(` -`)} - int inputs:useSpecularWorkflow = ${e instanceof v?`1`:`0`} - token outputs:surface - } -${s.length>0?` -${c.has(0)?` - def Shader "uvReader_st" - { - uniform token info:id = "UsdPrimvarReader_float2" - string inputs:varname = "st" - float2 inputs:fallback = (0.0, 0.0) - float2 outputs:result - } -`:``} -${c.has(1)?` - def Shader "uvReader_st1" - { - uniform token info:id = "UsdPrimvarReader_float2" - string inputs:varname = "st1" - float2 inputs:fallback = (0.0, 0.0) - float2 outputs:result - } -`:``} -${s.join(` -`)}`:``} - }`}function Cs(e){return`(${e.r}, ${e.g}, ${e.b})`}function ws(e){return`(${e.x}, ${e.y})`}var Ts=[1023,33777,33778,33779,35842,35843,37496,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,36492];D(`debugusdz`);var Es=class e{static global_id=0;id;trigger;action;exclusive=!1;makeExclusive(e){return this.exclusive=e,this}constructor(t,n,r){this.id=`Behavior_`+wo(t)+`_`+ e.global_id++,this.trigger=n,this.action=r}writeTo(e,t,n){if(!this.trigger||!this.action)return;n.beginBlock(`def Preliminary_Behavior "${this.id}"`);let r=``;if(Array.isArray(this.trigger)){r=`[`;for(let e=0;e`,e+1`;if(n.appendLine(`rel triggers = ${r}`),n.appendLine(`rel actions = <${this.action.id}>`),n.appendLine(`uniform bool exclusive = ${+!!this.exclusive}`),n.appendLine(),Array.isArray(this.trigger))for(let e of this.trigger)e.writeTo(t,n),n.appendLine();else this.trigger.writeTo(t,n);n.appendLine(),this.action.writeTo(t,n),n.closeBlock()}},Ds=new Set;function Os(e,t){let n=``;if(Array.isArray(e)){Ds.clear();let r=`[ `;for(let n=0;n{e.appendLine(`bool allowsDirectInput = `+ +!!t.direct),e.appendLine(`bool allowsIndirectInput = `+ +!!t.indirect),e.appendLine(`uniform token info:id = "RealityKit.InputTarget"`)},e.add(n)}var js=class{static __sceneStartTrigger;static sceneStartTrigger(){if(this.__sceneStartTrigger!==void 0)return this.__sceneStartTrigger;let e=new ks(void 0,`SceneStart`);return e.tokenId=`SceneTransition`,e.type=`enter`,this.__sceneStartTrigger=e,e}static tapTrigger(e,t={direct:!0,indirect:!0}){let n=new ks(e);if(Array.isArray(e)&&e.length>1)for(let n of e)n instanceof jo&&As(n,t);else e instanceof jo&&As(e,t);return n.tokenId=`TapGesture`,n}static isTapTrigger(e){return e?.tokenId===`TapGesture`}static proximityToCameraTrigger(e,t){let n=new ks(e);return n.tokenId=`ProximityToCamera`,n.distance=t,n}},Ms=class{static global_id=0;static getId(){return this.global_id++}id;actions;loops=0;performCount=1;type=`serial`;multiplePerformOperation=void 0;constructor(e,t){this.id=e,this.actions=t}addAction(e){return this.actions.push(e),this}makeParallel(){return this.type=`parallel`,this}makeSequence(){return this.type=`serial`,this}makeLooping(){return this.loops=1,this.performCount=0,this}makeRepeat(e){return this.performCount=e,this}writeTo(e,t){t.beginBlock(`def Preliminary_Action "${this.id}"`),t.beginArray(`rel actions`);for(let e of this.actions){if(!e)continue;let n=e===this.actions[this.actions.length-1];t.appendLine(`<`+e.id+`>`+(n?``:`, `))}t.closeArray(),t.appendLine(),t.appendLine(`token info:id = "Group"`),t.appendLine(`bool loops = ${this.loops}`),t.appendLine(`int performCount = ${this.loops>0?0:Math.max(0,this.performCount)}`),t.appendLine(`token type = "${this.type}"`),typeof this.multiplePerformOperation==`string`&&t.appendLine(`token multiplePerformOperation = "${this.multiplePerformOperation}"`),t.appendLine();for(let n of this.actions)n&&(n.writeTo(e,t),t.appendLine());t.closeBlock()}},Ns=class e{static global_id=0;id;tokenId;affectedObjects;easeType;motionType=void 0;duration;moveDistance;style;type;front;up;start;animationSpeed;reversed;pingPong;xFormTarget;audio;gain;auralMode;multiplePerformOperation;velocity;comment;animationName;clone(){let t=new e,n=t.id;return Object.assign(t,this),t.id=n,t}constructor(t,n){t&&(this.affectedObjects=t),n?this.id=n:this.id=`Action`,this.id+=`_`+ e.global_id++}writeTo(e,t){t.beginBlock(`def Preliminary_Action "${this.id}"`),this.comment&&t.appendLine(`# ${this.comment}`),this.affectedObjects&&(typeof this.affectedObjects!=`string`&&(this.affectedObjects=Os(this.affectedObjects,e)),t.appendLine(`rel affectedObjects = `+this.affectedObjects)),typeof this.duration==`number`&&(typeof this.animationSpeed==`number`&&this.animationSpeed!==1?t.appendLine(`double duration = ${this.duration/this.animationSpeed} `):t.appendLine(`double duration = ${this.duration} `)),this.easeType&&t.appendLine(`token easeType = "${this.easeType}"`),this.tokenId&&t.appendLine(`token info:id = "${this.tokenId}"`),this.tokenId===`ChangeScene`&&t.appendLine(`rel scene = `),this.motionType!==void 0&&t.appendLine(`token motionType = "${this.motionType}"`),typeof this.moveDistance==`number`&&t.appendLine(`double moveDistance = ${this.moveDistance} `),this.style&&t.appendLine(`token style = "${this.style}"`),this.type&&t.appendLine(`token type = "${this.type}"`),this.front&&t.appendLine(`vector3d front = (${this.front.x}, ${this.front.y}, ${this.front.z})`),this.up&&t.appendLine(`vector3d upVector = (${this.up.x}, ${this.up.y}, ${this.up.z})`),typeof this.start==`number`&&t.appendLine(`double start = ${this.start} `),typeof this.animationSpeed==`number`&&t.appendLine(`double animationSpeed = ${this.animationSpeed.toFixed(2)} `),typeof this.reversed==`boolean`&&t.appendLine(`bool reversed = ${this.reversed}`),typeof this.pingPong==`boolean`&&t.appendLine(`bool reverses = ${this.pingPong}`),this.xFormTarget&&(typeof this.xFormTarget!=`string`&&(this.xFormTarget=Os(this.xFormTarget,e)),t.appendLine(`rel xformTarget = ${this.xFormTarget}`)),typeof this.audio==`string`&&t.appendLine(`asset audio = @${this.audio}@`),typeof this.gain==`number`&&t.appendLine(`double gain = ${this.gain}`),typeof this.auralMode==`string`&&t.appendLine(`token auralMode = "${this.auralMode}"`),typeof this.multiplePerformOperation==`string`&&t.appendLine(`token multiplePerformOperation = "${this.multiplePerformOperation}"`),typeof this.velocity==`object`&&t.appendLine(`vector3d velocity = (${this.velocity.x}, ${this.velocity.y}, ${this.velocity.z})`),t.closeBlock()}},Ps=class e{x=0;y=0;z=0;constructor(e,t,n){this.x=e,this.y=t,this.z=n}static get up(){return new e(0,1,0)}static get right(){return new e(1,0,0)}static get forward(){return new e(0,0,1)}static get back(){return new e(0,0,-1)}static get zero(){return new e(0,0,0)}},G=class e{static sequence(...e){return new Ms(`Group_`+Ms.getId(),e).makeSequence()}static parallel(...e){return new Ms(`Group_`+Ms.getId(),e).makeParallel()}static fadeAction(e,t,n){let r=new Ns(e);return r.tokenId=`Visibility`,r.type=n?`show`:`hide`,r.duration=t,r.style=`basic`,r.motionType=`none`,r.moveDistance=0,r.easeType=`none`,r}static startAnimationAction(t,n,r=!1,i=!1){let a=new Ns(t);a.tokenId=`StartAnimation`;let o=n.start,s=n.duration,c=n.speed,l=n.clipName;if(a.comment=`Animation: ${l}, start=${o*60}, length=${s*60}, end=${(o+s)*60}`,a.animationName=l,a.start=o,a.duration=s,a.animationSpeed=c,a.reversed=r,a.pingPong=i,a.multiplePerformOperation=`allow`,r&&(a.start-=s),i){a.pingPong=!1;let t=a.clone();return t.reversed=!r,t.start=a.start,t.reversed&&(t.start-=s),e.sequence(a,t)}return a}static waitAction(e){let t=new Ns;return t.tokenId=`Wait`,t.duration=e,t.motionType=void 0,t}static lookAtCameraAction(e,t,n,r){let i=new Ns(e);return i.tokenId=`LookAtCamera`,i.duration=t===void 0?9999999999999:t,i.front=n??Ps.forward,i.up=r??Ps.up,i}static emphasize(e,t,n=`bounce`,r=1,i=`basic`){let a=new Ns(e);return a.tokenId=`Emphasize`,a.duration=t,a.style=i??`basic`,a.motionType=n,a.moveDistance=r,a}static transformAction(e,t,n,r,i=`inout`){let a=new Ns(e);return a.tokenId=`Transform`,a.duration=n,a.duration=Math.max(1e-6,n),a.type=r,a.easeType=n>0?i:`none`,Array.isArray(t)&&console.error(`Transform target must not be an array`,t),a.xFormTarget=t,a}static playAudioAction(e,t,n=`play`,r=1,i=`spatial`){let a=new Ns(e);return a.tokenId=`Audio`,a.type=n,a.audio=t,a.gain=r,a.auralMode=i,a.multiplePerformOperation=`allow`,a}static impulseAction(e,t){let n=new Ns(e);return n.tokenId=`Impulse`,n.velocity=t,n}},Fs=D(`debugusdzanimation`),Is=D(`debugusdzanimationserialization`),Ls=class e{_start;get start(){return this._start===void 0&&(this._start=this.ext.getStartTimeByClip(this.clip)),this._start}get duration(){return this.clip?.duration??K.restPoseClipDuration}get nearestAnimatedRoot(){return this._nearestAnimatedRoot}get clipName(){return this.clip?.name??`rest`}ext;root;_nearestAnimatedRoot=void 0;clip;speed;constructor(e,t,n){this.ext=e,this.root=t,this.clip=n,this._nearestAnimatedRoot=this.getNearestAnimatedRoot()}static isDescendantOf(e,t){let n=t;if(!n||!e)return!1;for(;n;){if(!n)return!1;if(n===e)return!0;n=n.parent}return!1}getNearestAnimatedRoot(){let t;try{for(let n of this.clip?.tracks??[]){let r=o.parseTrackName(n.name),i=o.findNode(this.root,r.nodeName);if(i)if(!t)t=i;else{if(i===t||e.isDescendantOf(t,i))continue;if(!e.isDescendantOf(i,t)){for(;!e.isDescendantOf(i,t)&&i.parent;)i=i.parent;e.isDescendantOf(i,t)||console.error(`USDZExporter: Animation clip targets multiple roots that are not parent/child. Please report a bug`,this.root,this.clip,t,i)}t=i}}}catch(e){console.error(`USDZExporter: Exception when trying to find nearest animated root. Please report a bug`,e),t=void 0}return t}},K=class e{clip;pos;rot;scale;root;target;duration=0;useRootMotion=!1;static frameRate=60;static animationDurationPadding=6/60;static restPoseClipDuration=6/60;constructor(t,n,r){if(this.root=t,this.target=n,this.clip=r,r?this.duration=r.duration:this.duration=e.restPoseClipDuration,r&&r.tracks){let e=Math.max(...r.tracks.map(e=>e.times[e.times.length-1]));e!==this.duration&&(console.warn(`USDZExporter: Animation clip duration does not match the maximum time value in the tracks.`,r,e,this.duration),this.duration=e)}let i=k.getComponent(t,kt);i&&(this.useRootMotion=i.applyRootMotion)}addTrack(e){if(!this.clip){console.error(`This is a rest clip but you're trying to add tracks to it – this is likely a bug`);return}e.name.endsWith(`position`)?this.pos=e:e.name.endsWith(`quaternion`)?this.rot=e:e.name.endsWith(`scale`)?this.scale=e:(e.name.endsWith(`activeSelf`)?console.warn(`[USDZ] Animation of enabled/disabled state is not supported for USDZ export and will NOT be exported: `+e.name+` on `+(this.root?.name??this.target.name)+`. Animate scale 0/1 instead.`):console.warn(`[USDZ] Animation track type not supported for USDZ export and will NOT be exported: `+e.name+` on `+(this.root?.name??this.target.name)+`. Only .position, .rotation, .scale are supported.`),T()&&kn(`[USDZ] Some animations can't be exported. See console for details.`))}getFrames(){return this.clip?Math.max(this.pos?.times?.length??0,this.rot?.times?.length??0,this.scale?.times?.length??0):2}getDuration(){return this.duration}getSortedTimesArray(e=!0,t=!0,n=!0){if(!this.clip)return[0,this.duration];let r=this.pos?.times,i=this.rot?.times,a=this.scale?.times,o=[];if(e&&r)for(let e of r)o.push(e);if(t&&i)for(let e of i)o.push(e);if(n&&a)for(let e of a)o.push(e);return o.includes(0)||o.push(0),o.sort((e,t)=>e-t),[...new Set(o)]}*getValues(t,n=!0,i=!0,a=!0){let o=new r,s=new Ue,c=new r(1,1,1),l=this.target,u=n?this.pos?.createInterpolant():void 0,d=i?this.rot?.createInterpolant():void 0,f=a?this.scale?.createInterpolant():void 0;u||o.set(l.position.x,l.position.y,l.position.z),d||s.set(l.quaternion.x,l.quaternion.y,l.quaternion.z,l.quaternion.w),f||c.set(l.scale.x,l.scale.y,l.scale.z),u&&u.valueSize!==3&&(u.valueSize=3),d&&d.valueSize!==4&&(d.valueSize=4),f&&f.valueSize!==3&&(f.valueSize=3);for(let n=0;n=t.length?(r=t[t.length-1],i=r+e.animationDurationPadding/2-1/60):(r=t[n],i=r),u){let e=u.evaluate(r);o.set(e[0],e[1],e[2])}if(d){let e=d.evaluate(r);s.set(e[0],e[1],e[2],e[3])}if(f){let e=f.evaluate(r);c.set(e[0],e[1],e[2])}if(this.useRootMotion&&l===this.root){let e=new b;e.compose(o,s,c),e.multiply(l.matrix),e.decompose(o,s,c)}yield{time:i,translation:o,rotation:s,scale:c,index:n}}}},Rs=class{get extensionName(){return`animation`}get animationData(){return this.dict}get registeredClips(){return this.clipToStartTime.keys()}get animatedRoots(){return this.rootTargetMap.keys()}get holdClipMap(){return this.clipToHoldClip}dict=new Map;rootTargetMap=new Map;rootAndClipToRegisteredAnimationMap=new Map;rootToRegisteredClip=new Map;lastClipEndTime=0;clipToStartTime=new Map;clipToHoldClip=new Map;serializers=[];injectRestPoses=!1;injectImplicitBehaviours=!1;constructor(e){this.injectRestPoses=e,this.injectImplicitBehaviours=e}getStartTimeCode(){return!this.injectRestPoses||this.rootAndClipToRegisteredAnimationMap.size===0?0:(K.restPoseClipDuration+K.animationDurationPadding)*60}getEndTimeCode(){let e=0;for(let[t,n]of this.rootAndClipToRegisteredAnimationMap){let t=n.start+n.duration;t>e&&(e=t)}return e*60}getClipCount(e){return this.rootToRegisteredClip.get(e)?.length??0??0}getStartTimeByClip(e){return e?this.clipToStartTime.has(e)?this.clipToStartTime.get(e):(console.error(`USDZExporter: Missing start time for clip – please report a bug.`,e),0):0}registerAnimation(e,t){if(!e)return null;this.rootTargetMap.has(e)||this.rootTargetMap.set(e,[]);let n=e.uuid+(t?.uuid??`-rest`);if(this.rootAndClipToRegisteredAnimationMap.has(n))return this.rootAndClipToRegisteredAnimationMap.get(n);Fs&&console.log(`registerAnimation`,e,t);let r=+!!this.injectRestPoses,i=(this.rootToRegisteredClip.get(e)?.length??0)+r,a=this.rootTargetMap.get(e),s=new Set(a);if(t&&t.tracks)for(let n of t.tracks){let r=o.parseTrackName(n.name),c=o.findNode(e,r.nodeName);if(!c){console.warn(`no object found for track`,n.name,`using `+e.name+` instead`);continue}this.dict.has(c)||this.dict.set(c,[]);let l=this.dict.get(c);if(!l){console.warn(`no transform data found for target `,c,`at slot `+i+`, this is likely a bug`);continue}s.delete(c),this.injectRestPoses&&!l[0]&&(console.log(`Injecting rest pose`,c,t,`at slot`,i),l[0]=new K(null,c,null));let u=l[i];u||(u=new K(e,c,t),l[i]=u),u.addTrack(n),a?.includes(c)||a?.push(c)}Fs&&console.log(`Unregistered nodes for this clip`,s,`clip`,t,`at slot`,i,`for root`,e,`targets`,a);for(let n of s){let r=this.dict.get(n);if(!r)continue;this.injectRestPoses&&!r[0]&&(console.warn(`Adding rest pose for `,n,t,`at slot`,i,`This is likely a bug, should have been added earlier.`),r[0]=new K(null,n,null));let a=r[i];a||(Fs&&console.log(`Adding padding clip for `,n,t,`at slot`,i),a=new K(e,n,t),r[i]=a)}let c=new Ls(this,e,t);if(this.rootAndClipToRegisteredAnimationMap.set(n,c),Fs&&console.log({root:e,clip:t,info:c}),t){let n=this.rootToRegisteredClip.get(e);if(n?n.push(t):this.rootToRegisteredClip.set(e,[t]),!this.clipToStartTime.get(t)){this.lastClipEndTime??=K.restPoseClipDuration;let e=this.lastClipEndTime+K.animationDurationPadding,n=e+t.duration,r=Math.round(e*60)/60,i=Math.round(n*60)/60;Math.abs(r-e)<.01&&(e=r),Math.abs(i-n)<.01&&(n=i),e=Math.ceil(e),n=e+t.duration,this.clipToStartTime.set(t,e),this.lastClipEndTime=n}}return c}onAfterHierarchy(e){Fs&&console.log(`Animation clips per animation target node`,this.dict)}onAfterBuildDocument(e){Fs&&console.log(`Animation data`,{dict:this.dict,rootTargetMap:this.rootTargetMap,rootToRegisteredClip:this.rootToRegisteredClip});for(let e of this.rootTargetMap.keys()){let t=this.rootTargetMap.get(e);if(!t)continue;let n,r=[];for(let i of t){let t=this.dict.get(i);if(!t){console.error(`No data found for target on USDZ export – please report a bug!`,i);continue}n===void 0&&(n=t?.length),n!==t?.length&&console.error(`Different array lengths for targets – please report a bug!`,t);for(let n=0;n{let r=e;typeof r.createAnimation==`function`&&r.createAnimation(this,t,n)},!1);let r=new zs(e,this);this.serializers.push(r),r.registerCallback(t)}},zs=class{model=void 0;object;animationData;ext;callback;constructor(e,t){this.object=e,this.animationData=t.animationData,this.ext=t}registerCallback(e){this.model&&this.callback&&this.model.removeEventListener(`serialize`,this.callback),this.callback||=this.onSerialize.bind(this),Is&&console.log(`REPARENT`,e),this.model=e,this.callback&&this.model.addEventListener(`serialize`,this.callback)}skinnedMeshExport(e,t,n){let r=this.model,i=this.animationData;if(r&&r.skinnedMesh){let a=r.skinnedMesh.skeleton,o=[],s=[],c=[];for(let e of a.bones){s.push(e),c.push(e.uuid);let t=a.boneInverses[a.bones.indexOf(e)];o.push({bone:e,inverse:t})}let l=1e4;for(;c.length0;)for(let e of s){let t=e.children;for(let e of t)if(c.indexOf(e.uuid)===-1&&a.bones.indexOf(e)!==-1){s.push(e),c.push(e.uuid);let t=a.boneInverses[a.bones.indexOf(e)];o.push({bone:e,inverse:t})}}l<=0&&console.error(`Failed to sort bones in skinned mesh`,r.skinnedMesh,a.bones,c);for(let e of Do(a.bones))o.push({bone:e,inverse:e.matrixWorld.clone().invert()});let u=o[0].bone.parent;u||console.error(`No bone parent found for skinned mesh during USDZ export`,r.skinnedMesh),o.sort((e,t)=>os(e.bone,u)>os(t.bone,u)?1:-1);function d(e){let t=[];for(let[n,r]of e){let e=`${n} : [`,i=[];for(let e of r)i.push(`(${W(e.x)}, ${W(e.y)}, ${W(e.z)})`);e=e.concat(i.join(`, `)),e=e.concat(`],`),t.push(e)}return t}function f(e){let t=[];for(let[n,r]of e){let e=`${n} : [`,i=[];for(let e of r)i.push(`(${W(e.w)}, ${W(e.x)}, ${W(e.y)}, ${W(e.z)})`);e=e.concat(i.join(`, `)),e=e.concat(`],`),t.push(e)}return t}function p(e){let t,r=!0,i=new Map;for(let[n,a]of e){t===void 0&&(t=a.length),t!==a.length&&(r=!1);let e=0;for(let t of a)e++,t||(i.has(n)||i.set(n,[]),i.get(n).push(e))}Fs&&console.log(`Bone count: `,e.size,`TransformData entries per bone: `,t,`Undefined bone entries: `,i),console.assert(r,`All bones should have the same number of TransformData entries`,e),console.assert(i.size===0,`All TransformData entries should be set`,i);let a=[];for(let[t,r]of e)for(let e=0;ee-t),e.rot.sort((e,t)=>e-t),e.scale.sort((e,t)=>e-t),e.pos=[...new Set(e.pos)],e.rot=[...new Set(e.rot)],e.scale=[...new Set(e.scale)];return a}function m(e,t,n){let r=new Map,i=new Map,a=new Map,o=t.length;for(let s of n){let n=e.get(s),c;n?console.assert(n.length===o,`We should have the same number of TransformData entries for each bone`,n,t):c=new K(null,s,null);for(let e=0;ee.clip?.uuid.substring(0,6)).join(` `));console.log(`getPerBoneTransformData -`+e.join(` -`))}for(let n of e){let e=i.get(n);e&&t.set(n,e)}return t}function ee(e){let t=_(e);return m(t,p(t),e)}let te=t.quickLookCompatible,ne=[],v=[],re=[],ie=[];for(let{bone:e}of o){if(te){let t=e.scale;t.x==0&&(t.x=1e-5),t.y==0&&(t.y=1e-5),t.z==0&&(t.z=1e-5),ne.push(new b().compose(e.position,e.quaternion,e.scale))}else ne.push(e.matrix.clone());v.push(e.position),re.push(e.quaternion),ie.push(e.scale)}let ae=o.map(e=>`"`+os(e.bone,u)+`"`).join(`, `),oe=o.map(e=>cs(e.inverse.clone().invert())).join(`, `);e.beginBlock(`def Skeleton "Rig"`),e.appendLine(`uniform matrix4d[] bindTransforms = [${oe}]`),e.appendLine(`uniform token[] joints = [${ae}]`),e.appendLine(`uniform token purpose = "guide"`),e.appendLine(`uniform matrix4d[] restTransforms = [${ne.map(e=>cs(e)).join(`, `)}]`);let y=ee(o.map(e=>e.bone));if(Fs){let e=1e7,t=0;for(let n of y.position?.keys()??[])e=Math.min(e,n),t=Math.max(t,n);console.log(`Time samples`,e,t,y)}if(e.beginBlock(`def SkelAnimation "_anim"`),e.appendLine(`uniform token[] joints = [${ae}]`),e.appendLine(`quatf[] rotations = [${g(re)}]`),y&&y.quaternion){e.beginBlock(`quatf[] rotations.timeSamples = {`,``);let t=f(y.quaternion);for(let n of t)e.appendLine(n);e.closeBlock()}if(e.appendLine(`half3[] scales = [${h(ie)}]`),y&&y.scale){e.beginBlock(`half3[] scales.timeSamples = {`,``);let t=d(y.scale);for(let n of t)e.appendLine(n);e.closeBlock()}if(e.appendLine(`float3[] translations = [${h(v)}]`),y&&y.position){e.beginBlock(`float3[] translations.timeSamples = {`,``);let t=d(y.position);for(let n of t)e.appendLine(n);e.closeBlock()}e.closeBlock(),e.closeBlock()}}onSerialize(e,t){if(!this.model)return;let n=this.animationData.get(this.object);if(n)for(let e=0;ee&&{position:e.pos,rotation:e.rot,scale:e.scale}[n])){switch(n){case`position`:a.needsTranslate=!0,e.beginBlock(`double3 xformOp:translate.timeSamples = {`,``);break;case`rotation`:a.needsOrient=!0,e.beginBlock(`quatf xformOp:orient.timeSamples = {`,``);break;case`scale`:a.needsScale=!0,e.beginBlock(`double3 xformOp:scale.timeSamples = {`,``);break}for(let a=0;ae.path===t.clip)){this.files.push({path:t.clip,name:a});let e=a.toLowerCase();r.quickLookCompatible&&!e.endsWith(`.mp3`)&&!e.endsWith(`.wav`)&&!e.endsWith(`.m4a`)&&console.error(`Audio file `+t.clip+` from `+t.name+` is not an MP3 or WAV file. QuickLook may not support playing it.`)}r.quickLookCompatible||n.addEventListener(`serialize`,(e,n)=>{e.appendLine(),e.beginBlock(`def SpatialAudio "${o}"`,`(`,!1),e.appendLine(`displayName = "${i}"`),e.closeBlock(`)`),e.beginBlock(),e.appendLine(`uniform asset filePath = @audio/${a}@`),e.appendLine(`uniform token auralMode = "${t.spatialBlend>0?`spatial`:`nonSpatial`}"`),e.appendLine(`uniform token playbackMode = "${t.loop?`loopFromStage`:`onceFromStart`}"`),e.appendLine(`uniform float gain = ${t.volume}`),e.closeBlock()})}}async onAfterSerialize(e){for(let t of this.files){let n=`audio/`+t.name;if(e.files[n]){Bs&&console.warn(`Audio file with name `+n+` already exists in the context. Skipping.`);continue}let r=await(await(await fetch(t.path)).blob()).arrayBuffer(),i=new Uint8Array(r);e.files[n]=i}}},q=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Hs=D(`debugusdzbehaviours`),Us=class extends N{object;target;duration=1;relativeMotion=!1;coroutine=null;targetPos=new r;targetRot=new Ue;targetScale=new r;onEnable(){this.context.accessibility.updateElement(this,{role:`button`,label:`Move `+(this.object?.name||`object`)+` to `+(this.target?.name||`target`)+` on click`,hidden:!1})}onDisable(){this.context.accessibility.updateElement(this,{hidden:!0})}onDestroy(){this.context.accessibility.removeElement(this)}onPointerEnter(){this.context.input.setCursor(`pointer`)}onPointerExit(){this.context.input.unsetCursor(`pointer`)}onPointerClick(e){let t=this.object?.getComponentsInChildren(vt);if(t)for(let e of t)e.resetVelocities(),e.resetForcesAndTorques();e.use(),this.coroutine&&this.stopCoroutine(this.coroutine),this.relativeMotion?this.coroutine=this.startCoroutine(this.moveRelative()):this.coroutine=this.startCoroutine(this.moveToTarget())}*moveToTarget(){if(!this.target||!this.object)return;let e=Yt(this.object).clone(),t=Yt(this.target).clone(),n=Rn(this.object).clone(),r=Rn(this.target).clone(),i=$t(this.object).clone(),a=$t(this.target).clone(),o=e.distanceTo(t),s=n.angleTo(r),c=i.distanceTo(a);if(o<.01&&s<.01&&c<.01){Xe(this.object,t),xt(this.object,r),mt(this.object,a),this.coroutine=null;return}let l=0,u=0;for(;l<1;)l+=this.context.time.deltaTime/this.duration,l>1&&(l=1),u=l<.5?4*l*l*l:1-(-2*l+2)**3/2,this.targetPos.lerpVectors(e,t,u),this.targetRot.slerpQuaternions(n,r,u),this.targetScale.lerpVectors(i,a,u),Xe(this.object,this.targetPos),xt(this.object,this.targetRot),mt(this.object,this.targetScale),yield;this.coroutine=null}*moveRelative(){if(!this.target||!this.object)return;let e=this.object.position.clone(),t=this.object.quaternion.clone(),n=this.object.scale.clone(),r=this.target.position.clone(),i=this.target.quaternion.clone(),a=this.target.scale.clone();r.applyQuaternion(this.object.quaternion),this.targetPos.copy(this.object.position).add(r),this.targetRot.copy(this.object.quaternion).multiply(i),this.targetScale.copy(this.object.scale).multiply(a);let o=0,s=0;for(;o<1;)o+=this.context.time.deltaTime/this.duration,o>1&&(o=1),s=o<.5?4*o*o*o:1-(-2*o+2)**3/2,this.object.position.lerpVectors(e,this.targetPos,s),this.object.quaternion.slerpQuaternions(t,this.targetRot,s),this.object.scale.lerpVectors(n,this.targetScale,s),yield;this.coroutine=null}beforeCreateDocument(e){if(this.target&&this.object&&this.gameObject){let t=new Es(`Move to `+this.target?.name,js.tapTrigger(this.gameObject),G.transformAction(this.object,this.target,this.duration,this.relativeMotion?`relative`:`absolute`));e.addBehavior(t)}}};q([E(S)],Us.prototype,`object`,void 0),q([E(S)],Us.prototype,`target`,void 0),q([E()],Us.prototype,`duration`,void 0),q([E()],Us.prototype,`relativeMotion`,void 0);var Ws=class e extends N{materialToSwitch;variantMaterial;fadeDuration=0;start(){this._objectsWithThisMaterial=this.objectsWithThisMaterial,T()&&this._objectsWithThisMaterial.length<=0&&console.warn(`ChangeMaterialOnClick: No objects found with material "`+this.materialToSwitch?.name+`"`)}onEnable(){this.context.accessibility.updateElement(this,{role:`button`,label:`Change material to `+(this.variantMaterial?.name||`unknown material`),hidden:!1})}onDisable(){this.context.accessibility.updateElement(this,{hidden:!0})}onDestroy(){this.context.accessibility.removeElement(this)}onPointerEnter(e){this.context.input.setCursor(`pointer`)}onPointerExit(e){this.context.input.unsetCursor(`pointer`)}onPointerClick(e){if(e.use(),this.variantMaterial)for(let e=0;e{if(e instanceof x)if(Array.isArray(e.material)){for(let t of e.material)if(t===this.materialToSwitch){this.objectsWithThisMaterial.push(e);break}}else (e.material===this.materialToSwitch||Mt(e.material,this.materialToSwitch))&&this.objectsWithThisMaterial.push(e)}),this._objectsWithThisMaterial):this._objectsWithThisMaterial}selfModel;targetModels;static _materialTriggersPerId={};static _startHiddenBehaviour=null;static _parallelStartHiddenActions=[];async beforeCreateDocument(t,n){this.targetModels=[],e._materialTriggersPerId={},e.variantSwitchIndex=0,this.materialToSwitch&&await P.assignTextureLOD(this.materialToSwitch,0),this.variantMaterial&&await P.assignTextureLOD(this.variantMaterial,0)}createBehaviours(t,n,r){this.objectsWithThisMaterial.find(e=>e.uuid===n.uuid)&&this.targetModels.push(n),this.gameObject.uuid===n.uuid&&(this.selfModel=n,this.materialToSwitch&&(e._materialTriggersPerId[this.materialToSwitch.uuid]||(e._materialTriggersPerId[this.materialToSwitch.uuid]=[]),e._materialTriggersPerId[this.materialToSwitch.uuid].push(this)))}afterCreateDocument(t,n){if(!this.materialToSwitch)return;let r=e._materialTriggersPerId[this.materialToSwitch.uuid];if(r){let e={};for(let t of r){let n=t.createVariants();n&&n.length>0&&(e[t.selfModel.uuid]=n)}for(let n of r){let r=[];for(let t in e)t!==n.selfModel.uuid&&r.push(...e[t]);n.createAndAttachBehaviors(t,e[n.selfModel.uuid],r)}}delete e._materialTriggersPerId[this.materialToSwitch.uuid]}createAndAttachBehaviors(t,n,r){let i=[],a=Math.max(0,this.fadeDuration);i.push(G.fadeAction([...this.targetModels,...r],a,!1)),i.push(G.fadeAction(n,a,!0)),t.addBehavior(new Es(`Select_`+this.selfModel.name,js.tapTrigger(this.selfModel),G.parallel(...i))),e._parallelStartHiddenActions.push(...n),e._startHiddenBehaviour||(e._startHiddenBehaviour=new Es(`StartHidden_`+this.selfModel.name,js.sceneStartTrigger(),G.fadeAction(e._parallelStartHiddenActions,a,!1)),t.addBehavior(e._startHiddenBehaviour))}static getMaterialName(e){return wo(e.name||`Material`)+`_`+e.id}static variantSwitchIndex=0;createVariants(){if(!this.variantMaterial)return null;let t=[];for(let n of this.targetModels){let r=n.clone();r.name+=`_Variant_`+ e.variantSwitchIndex+++`_`+e.getMaterialName(this.variantMaterial),r.displayName=r.displayName+`: Variant with material `+this.variantMaterial.name,r.material=this.variantMaterial,r.geometry=n.geometry,r.transform=n.transform,(!n.parent||!n.parent.isEmpty())&&jo.createEmptyParent(n),n.parent&&n.parent.add(r),t.push(r)}return t}};q([E(Ne)],Ws.prototype,`materialToSwitch`,void 0),q([E(Ne)],Ws.prototype,`variantMaterial`,void 0),q([E()],Ws.prototype,`fadeDuration`,void 0);var Gs=class e extends N{target;toggleOnClick=!1;targetState=!0;hideSelf=!0;onPointerEnter(){this.context.input.setCursor(`pointer`)}onPointerExit(){this.context.input.unsetCursor(`pointer`)}onPointerClick(e){e.use(),!this.toggleOnClick&&this.hideSelf&&(this.gameObject.visible=!1),this.target&&(this.target.visible=this.toggleOnClick?!this.target.visible:this.targetState)}selfModel;selfModelClone;targetModel;toggleModel;createBehaviours(e,t,n){t.uuid===this.gameObject.uuid&&(this.selfModel=t,this.selfModelClone=t.clone())}stateBeforeCreatingDocument=!1;targetStateBeforeCreatingDocument=!1;static clonedToggleIndex=0;static wasVisible=Symbol(`usdz_SetActiveOnClick_wasVisible`);static toggleClone=Symbol(`clone for toggling`);static reverseToggleClone=Symbol(`clone for reverse toggling`);beforeCreateDocument(){this.target&&(this.gameObject[e.wasVisible]===void 0&&(this.gameObject[e.wasVisible]=this.gameObject.activeSelf),this.target[e.wasVisible]===void 0&&(this.target[e.wasVisible]=this.target.activeSelf),this.stateBeforeCreatingDocument=this.gameObject[e.wasVisible],this.targetStateBeforeCreatingDocument=this.target[e.wasVisible],this.gameObject.visible=!0,this.target.visible=!0)}afterCreateDocument(t,n){if(!this.target)return;this.targetModel=n.document.findById(this.target.uuid);let r=this.selfModel;if(this.selfModel&&this.targetModel){let n=this.selfModel,i=this.targetState;if(this.toggleOnClick)if(i=!this.targetStateBeforeCreatingDocument,!this.selfModelClone.geometry)(!this.selfModel.parent||this.selfModel.parent.isEmpty())&&Mo.createEmptyParent(this.selfModel),this.toggleModel=this.selfModel.deepClone(),this.toggleModel.name+=`_toggle`,this.selfModel.parent.add(this.toggleModel);else{if(!this.gameObject[e.toggleClone]){let t=this.selfModelClone.clone();t.setMatrix(new b),t.name+=`_toggle`+ e.clonedToggleIndex++,r.add(t),this.gameObject[e.toggleClone]=t,console.warn(`USDZExport: Toggle `+this.gameObject.name+` doesn't have geometry. It will be deep cloned and nested behaviours will likely not work.`)}let t=this.gameObject[e.toggleClone];if(!this.gameObject[e.reverseToggleClone]){let t=this.selfModelClone.clone();t.setMatrix(new b),t.name+=`_toggleReverse`+ e.clonedToggleIndex++,r.add(t),this.gameObject[e.reverseToggleClone]=t}this.toggleModel=this.gameObject[e.reverseToggleClone],(!this.toggleModel.geometry||!t.geometry)&&console.error(`triggers without childs and without geometry won't work!`,this,r.geometry),n=t,r.geometry=null,r.material=null}if(!this.toggleModel){let e=[];this.hideSelf&&e.push(G.fadeAction(n,0,!1)),e.push(G.fadeAction(this.targetModel,0,i)),t.addBehavior(new Es(`Toggle_`+n.name+`_ToggleTo`+(i?`On`:`Off`),js.tapTrigger(n),e.length>1?G.parallel(...e):e[0]))}else if(this.toggleOnClick){let e=[];e.push(G.fadeAction(n,0,!1)),e.push(G.fadeAction(this.toggleModel,0,!0)),e.push(G.fadeAction(this.targetModel,0,i)),t.addBehavior(new Es(`Toggle_`+n.name+`_ToggleTo`+(i?`On`:`Off`),js.tapTrigger(n),G.parallel(...e)));let r=[];r.push(G.fadeAction(this.toggleModel,0,!1)),r.push(G.fadeAction(n,0,!0)),r.push(G.fadeAction(this.targetModel,0,!i)),t.addBehavior(new Es(`Toggle_`+n.name+`_ToggleTo`+(i?`Off`:`On`),js.tapTrigger(this.toggleModel),G.parallel(...r)))}let a=[];this.targetStateBeforeCreatingDocument||a.push(this.targetModel),this.stateBeforeCreatingDocument||a.push(r),this.toggleModel&&a.push(this.toggleModel),Ks.add(a,t)}}afterSerialize(t,n){this.gameObject[e.wasVisible]!==void 0&&(this.gameObject.visible=this.gameObject[e.wasVisible],delete this.gameObject[e.wasVisible]),this.target&&this.target[e.wasVisible]!==void 0&&(this.target.visible=this.target[e.wasVisible],delete this.target[e.wasVisible]),delete this.gameObject[e.toggleClone],delete this.gameObject[e.reverseToggleClone]}};q([E(S)],Gs.prototype,`target`,void 0),q([E()],Gs.prototype,`toggleOnClick`,void 0),q([E()],Gs.prototype,`targetState`,void 0),q([E()],Gs.prototype,`hideSelf`,void 0);var Ks=class e extends N{static _fadeBehaviour;static _fadeObjects=[];static add(t,n){let r=Array.isArray(t)?t:[t];for(let t of r)e._fadeObjects.includes(t)||(console.log(`adding hide on start`,t),e._fadeObjects.push(t));e._fadeBehaviour===void 0&&(e._fadeBehaviour=new Es(`HideOnStart`,js.sceneStartTrigger(),G.fadeAction(e._fadeObjects,0,!1)),n.addBehavior(e._fadeBehaviour))}start(){k.setActive(this.gameObject,!1)}createBehaviours(t,n,r){n.uuid===this.gameObject.uuid&&(this.wasVisible||e.add(n,t))}wasVisible=!1;beforeCreateDocument(){this.wasVisible=k.isActiveSelf(this.gameObject)}},qs=class extends N{target;duration=.5;motionType=`bounce`;onEnable(){this.context.accessibility.updateElement(this,{role:`button`,label:`Emphasize `+this.target?.name+` on click`,hidden:!1})}onDisable(){this.context.accessibility.updateElement(this,{hidden:!0})}onDestroy(){this.context.accessibility.removeElement(this)}beforeCreateDocument(){}createBehaviours(e,t,n){if(this.target&&t.uuid===this.gameObject.uuid){let t=new Es(`emphasize `+this.name,js.tapTrigger(this.gameObject),G.emphasize(this.target,this.duration,this.motionType,void 0,`basic`));e.addBehavior(t)}}afterCreateDocument(e,t){}};q([E()],qs.prototype,`target`,void 0),q([E()],qs.prototype,`duration`,void 0),q([E()],qs.prototype,`motionType`,void 0);var Js=class extends N{target;clip=``;toggleOnClick=!1;trigger=`tap`;ensureAudioSource(){if(!this.target){let e=this.gameObject.addComponent(I);e&&(this.target=e,e.spatialBlend=1,e.volume=1,e.loop=!1,e.preload=!0)}}onEnable(){this.context.accessibility.updateElement(this,{role:`button`,label:`Play audio: `+(this.clip||this.target?.clip||`unknown clip`),hidden:!1})}onDisable(){this.context.accessibility.updateElement(this,{hidden:!0})}onDestroy(){this.context.accessibility.removeElement(this)}onPointerEnter(){this.context.input.setCursor(`pointer`)}onPointerExit(){this.context.input.unsetCursor(`pointer`)}onPointerClick(e){e.use(),!(!this.target?.clip&&!this.clip)&&(this.ensureAudioSource(),this.target&&(this.target.isPlaying&&this.toggleOnClick?this.target.stop():(!this.toggleOnClick&&this.target.isPlaying&&this.target.stop(),this.clip?this.target.play(this.clip):this.target.play())))}createBehaviours(e,t,n){if(!(!this.target&&!this.clip)&&t.uuid===this.gameObject.uuid){let n=this.clip?this.clip:this.target?this.target.clip:void 0;if(!n||typeof n!=`string`)return;let r=this.target?this.target.gameObject:this.gameObject;Vs.getName(n);let i=this.target?this.target.volume:1,a=this.target&&this.target.spatialBlend==0?`nonSpatial`:`spatial`,o=!1;this.gameObject.traverse(e=>{e instanceof x&&e.visible&&(o=!0)}),o=!0;let s=e.addAudioClip(n),c=G.playAudioAction(r,s,`play`,i,a);this.target&&this.target.loop&&(c=G.sequence(c).makeLooping());let l=this.name?`_`+this.name:``;if(o&&this.trigger===`tap`){this.toggleOnClick&&(c.multiplePerformOperation=`stop`);let n=new Es(`playAudio`+l,js.tapTrigger(t),c);e.addBehavior(n)}if(this.target&&this.target.playOnAwake&&this.target.enabled)if(o&&this.trigger===`tap`)console.warn(`USDZExport: Audio sources that are played on tap can't also auto-play at scene start due to a QuickLook bug.`);else{let t=new Es(`playAudioOnStart`+l,js.sceneStartTrigger(),c);e.addBehavior(t)}}}};q([E(I)],Js.prototype,`target`,void 0),q([E(URL)],Js.prototype,`clip`,void 0),q([E()],Js.prototype,`toggleOnClick`,void 0);var Ys=class e extends N{animator;stateName;trigger=`tap`;animation;get target(){return this.animator?.gameObject||this.animation?.gameObject}onEnable(){this.context.accessibility.updateElement(this,{role:`button`,label:`Plays animation `+(this.stateName||``)+` on `+(this.target?this.target.name:``),hidden:!1})}onDisable(){this.context.accessibility.updateElement(this,{hidden:!0})}onDestroy(){this.context.accessibility.removeElement(this)}onPointerEnter(){this.context.input.setCursor(`pointer`),this.context.accessibility.hover(this,`Click to play animation `+(this.stateName||``)+` on `+(this.target?this.target.name:``))}onPointerExit(){this.context.input.unsetCursor(`pointer`)}onPointerClick(e){e.use(),this.target&&this.stateName&&(this.context.accessibility.focus(this),this.animator?.play(this.stateName,0,0,.1))}selfModel;stateAnimationModel;animationSequence=[];animationLoopAfterSequence=[];randomOffsetNormalized=0;createBehaviours(e,t,n){t.uuid===this.gameObject.uuid&&(this.selfModel=t)}static animationActions=[];static rootsWithExclusivePlayback=new Set;afterSerialize(){if(e.rootsWithExclusivePlayback.size>1){let t=`Multiple root objects targeted by more than one animation. To work around QuickLook bug FB13410767, animations will be set as "exclusive" and activating them will stop other animations being marked as exclusive.`;T()&&kn(t),console.warn(t,...e.rootsWithExclusivePlayback)}e.animationActions=[],e.rootsWithExclusivePlayback=new Set}afterCreateDocument(t,n){if(this.animationSequence===void 0&&this.animationLoopAfterSequence===void 0||!this.stateAnimationModel||!this.target)return;let r=n.document,i=n.extensions.find(e=>e instanceof Rs);if(!i)return;let a=i.getClipCount(this.target)>1;a&&(T()&&console.warn(`Setting exclusive playback for `+this.target.name+`@`+this.stateName+` because it has `+i.getClipCount(this.target)+` animations. This works around QuickLook bug FB13410767.`),e.rootsWithExclusivePlayback.add(this.target));let o=this.name?this.name:``;r.traverse(n=>{if(n.uuid===this.target?.uuid){let i=e.getActionForSequences(r,n,this.animationSequence,this.animationLoopAfterSequence,this.randomOffsetNormalized),s=new Es(this.trigger+`_`+o+`_toPlayAnimation_`+this.stateName+`_on_`+this.target?.name,this.trigger==`tap`?js.tapTrigger(this.selfModel):js.sceneStartTrigger(),i);a&&s.makeExclusive(!0),t.addBehavior(s)}})}static getActionForSequences(t,n,r,i,a){let o=(t,n)=>{let r=e.animationActions.find(e=>e.affectedObjects==t&&e.start==n.start&&e.duration==n.duration&&e.animationSpeed==n.speed);return r||(r=G.startAnimationAction(t,n),e.animationActions.push(r)),r},s=G.sequence();if(r&&r.length>0)for(let e of r)s.addAction(o(n,e));if(i&&i.length>0){let e=s.actions.length==0?s:G.sequence();for(let t of i)e.addAction(o(n,t));e.makeLooping(),s!==e&&s.addAction(e)}return a&&a>0&&s.actions.unshift(G.waitAction(a)),s}static getAndRegisterAnimationSequences(e,t,n){if(!t)return;let r=t.getComponent(kt),i=t.getComponent(xr);if(!r&&!i)return;if(r&&!n)throw Error(`PlayAnimationOnClick: No stateName specified for animator `+r.name+` on `+t.name);let a=[],o=[];if(i){let n=e.registerAnimation(t,i.clip);n&&(i.loop?o.push(n):a.push(n));let r=0;if(i.minMaxOffsetNormalized){let e=i.minMaxOffsetNormalized.x,t=i.minMaxOffsetNormalized.y;r=(i.clip?.duration||1)*(e+Math.random()*(t-e))}return{animationSequence:a,animationLoopAfterSequence:o,randomTimeOffset:r}}let s=r?.runtimeAnimatorController,c=s?.findState(n),l=[],u=[];if(s&&c){let t=[];t.push(c);let r=!1;for(;t.length<100;){if(!c||c===null||!c.transitions||c.transitions.length===0){c.motion?.isLooping&&(r=!0);break}let e=c.transitions.find(e=>e.conditions.length===0),n=e?s.getState(e.destinationState,0):null;if(n&&t.includes(n)){c=n,r=!0;break}else if(e){if(c=n,!c)break;t.push(c)}else{r=c.motion?.isLooping??!1;break}}if(r&&c){let e=t.indexOf(c);l=t.slice(0,e),u=t.slice(e),Hs&&console.log(`found loop from `+n,`states until loop`,l,`states looping`,u)}else l=t,u=[],Hs&&console.log(`found no loop from `+n,`states`,l);if(!u.length){let t=l[l.length-1],n=t.motion?.clip;if(n){let r;if(e.holdClipMap.has(n))r=e.holdClipMap.get(n);else{let i=t.name+`_hold`;r=n.clone(),r.duration=1,r.name=i;let a=n.duration;r.tracks=n.tracks.map(e=>{let t=e.clone();t.times=new Float32Array([0,a]);let n=e.values.length,r=e.getValueSize(),i=e.values.slice(n-r,n);return t.values=new Float32Array(2*r),t.values.set(i,0),t.values.set(i,r),t}),r.name=i,e.holdClipMap.set(n,r)}if(r){let e={name:r.name,motion:{clip:r,isLooping:!1,name:r.name},speed:1,transitions:[],behaviours:[],hash:t.hash+1};u.push(e)}}}}if(l.length===1&&(!l[0].motion?.clip||l[0].motion?.clip.tracks?.length===0)){a=[];let n=e.registerAnimation(t,null);n&&a.push(n);return}if(l=l.filter(e=>e.motion?.clip&&e.motion?.clip.tracks?.length>0),u=u.filter(e=>e.motion?.clip&&e.motion?.clip.tracks?.length>0),l.length===0&&u.length===0){console.warn(`No clips found for state `+n+` on `+r?.name+`, can't export animation data`);return}let d=(n,i)=>{if(!t)return;let a=e.registerAnimation(t,n.motion.clip??null);a?(a.speed=n.speed,i.push(a)):console.warn(`Couldn't register animation for state `+n.name+` on `+r?.name)};if(l.length>0){a=[];for(let e of l)d(e,a)}if(u.length>0){o=[];for(let e of u)d(e,o)}let f=0;if(r&&s&&r.minMaxOffsetNormalized){let e=r.minMaxOffsetNormalized.x,t=r.minMaxOffsetNormalized.y;f=((l.length?l[0]:u.length?u[0]:null)?.motion.clip?.duration||1)*(e+Math.random()*(t-e))}return{animationSequence:a,animationLoopAfterSequence:o,randomTimeOffset:f}}createAnimation(t,n,r){if(!this.target||!this.animator&&!this.animation)return;let i=e.getAndRegisterAnimationSequences(t,this.target,this.stateName);i&&(this.animationSequence=i.animationSequence,this.animationLoopAfterSequence=i.animationLoopAfterSequence,this.randomOffsetNormalized=i.randomTimeOffset,this.stateAnimationModel=n)}};q([E(kt)],Ys.prototype,`animator`,void 0),q([E()],Ys.prototype,`stateName`,void 0);var Xs=class extends N{getType(){}target;getDuration(){}};q([E(S)],Xs.prototype,`target`,void 0);var Zs=class extends N{target};q([E(Xs)],Zs.prototype,`target`,void 0);var Qs=class extends Xs{type=ec.Hide;duration=1;getType(){switch(this.type){case ec.Hide:return`hide`;case ec.Show:return`show`}}getDuration(){return this.duration}};q([E()],Qs.prototype,`type`,void 0),q([E()],Qs.prototype,`duration`,void 0);var $s=class extends Zs{},ec;(function(e){e[e.Show=0]=`Show`,e[e.Hide=1]=`Hide`})(ec||={});var tc;function nc(e){tc=e}function rc(){if(!tc)return null;let e=tc.find();return e?{handler:e,created:!1}:{handler:tc.create(),created:!0}}var ic=100,ac=200,oc=300,sc=class e{static _instance;static create(){return new e}static getOrCreate(){return this._instance||=this.create(),this._instance}get isSecureConnection(){return window.location.protocol===`https:`}get quicklookButton(){return this._quicklookButton}_quicklookButton;get arButton(){return this._arButton}_arButton;get vrButton(){return this._vrButton}_vrButton;get sendToQuestButton(){return this._sendToQuestButton}_sendToQuestButton;get qrButton(){return un.getOrCreate().createQRCode()}createQuicklookButton(){if(this._quicklookButton)return this._quicklookButton;let e=document.createElement(`button`);this._quicklookButton=e,e.dataset.needle=`quicklook-button`;let t=A.supportsQuickLookAR(),n=`View in AR`;A.isVisionOS()?n=`View in AR`:(t||A.isiOS())&&(n=`Open in Quicklook`),e.innerText=n,e.prepend(Ze(`view_in_ar`)),Ft.setElementPriority(e,ac);let r=!1,i=null;return e.addEventListener(`click`,()=>{let t=rc();t&&(i=t.handler,r=t.created),r&&i&&(i.objectToExport=Xt.Current.scene),i?(e.classList.add(`this-mode-is-requested`),i.exportAndOpen().then(()=>{e.classList.remove(`this-mode-is-requested`)}).catch(t=>{e.classList.remove(`this-mode-is-requested`),console.error(t)})):console.warn(`No USDZExporter component found in the scene`)}),this.hideElementDuringXRSession(e),e}createARButton(e){if(this._arButton)return this._arButton;let t=`immersive-ar`,n=document.createElement(`button`);return this._arButton=n,n.classList.add(`webxr-button`),n.dataset.needle=`webxr-ar-button`,n.innerText=`Enter AR`,n.prepend(Ze(`view_in_ar`)),n.title=`Click to start an AR session`,n.addEventListener(`click`,()=>j.start(t,e)),Ft.setElementPriority(n,oc),this.updateSessionSupported(n,t),this.listenToXRSessionState(n,t),this.hideElementDuringXRSession(n),this.isSecureConnection||(n.disabled=!0,n.title=`WebXR requires a secure connection (HTTPS)`),A.isMozillaXR()||navigator.xr?.addEventListener(`devicechange`,()=>this.updateSessionSupported(n,t)),n}createVRButton(e){if(this._vrButton)return this._vrButton;let t=`immersive-vr`,n=document.createElement(`button`);return this._vrButton=n,n.classList.add(`webxr-button`),n.dataset.needle=`webxr-vr-button`,n.innerText=`Enter VR`,n.prepend(Ze(`panorama_photosphere`)),n.title=`Click to start a VR session`,n.addEventListener(`click`,()=>j.start(t,e)),Ft.setElementPriority(n,ic),this.updateSessionSupported(n,t),this.listenToXRSessionState(n,t),this.hideElementDuringXRSession(n),this.isSecureConnection||(n.disabled=!0,n.title=`WebXR requires a secure connection (HTTPS)`),A.isMozillaXR()||navigator.xr?.addEventListener(`devicechange`,()=>this.updateSessionSupported(n,t)),n}createSendToQuestButton(){if(this._sendToQuestButton)return this._sendToQuestButton;let e=document.createElement(`button`);return this._sendToQuestButton=e,e.dataset.needle=`webxr-sendtoquest-button`,e.innerText=`Open on Quest`,e.prepend(Ze(`share_windows`)),e.title=`Click to send this page to the Oculus Browser on your Quest`,e.addEventListener(`click`,()=>{let e=`https://oculus.com/open_url/?url=`+encodeURIComponent(window.location.href);window.open(e)??vn(`This page doesn't allow popups. Please paste `+e+` into your browser.`)}),this.listenToXRSessionState(e),this.hideElementDuringXRSession(e),A.isMozillaXR()||navigator.xr?.addEventListener(`devicechange`,()=>{navigator.xr?.isSessionSupported(`immersive-vr`)?e.style.display=`none`:e.style.display=``}),e}createQRCode(){return un.getOrCreate().createQRCode()}updateSessionSupported(e,t){if(!(t===`immersive-ar`&&A.isiOS()&&!A.isVisionOS())){if(!(`xr`in navigator)){e.style.display=`none`;return}j.isSessionSupported(t).then(n=>{e.style.display=n?``:`none`,T()&&!n&&console.log(`[WebXR] "`+t+`" is not supported on this device. Make sure your server runs using HTTPS and you have a device connected that supports `+t)})}}hideElementDuringXRSession(e){et(t=>{e[`previous-display`]=e.style.display,e.style.setProperty(`display`,`none`,`important`)}),qn(t=>{e[`previous-display`]!=null&&(e.style.display=e[`previous-display`])})}listenToXRSessionState(e,t){t&&(j.onSessionRequestStart(n=>{n.mode===t?e.classList.add(`this-mode-is-requested`):(e[`was-disabled`]=e.disabled,e.disabled=!0,e.classList.add(`other-mode-is-requested`))}),j.onSessionRequestEnd(t=>{e.classList.remove(`this-mode-is-requested`),e.classList.remove(`other-mode-is-requested`),e.disabled=e[`was-disabled`]}))}},J=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},cc=D(`debugspriterenderer`),lc=D(`wireframe`),uc=class e{static cache={};static getOrCreateGeometry(t){if(t.__cached_geometry)return t.__cached_geometry;if(t.guid&&e.cache[t.guid])return cc&&console.log(`Take cached geometry for sprite`,t.guid),e.cache[t.guid];let n=new ie;t.__cached_geometry=n;let r=new Float32Array(t.triangles.length*3),i=new Float32Array(t.triangles.length*2);for(let e=0;e=this.spriteSheet.sprites.length)return;let n=this.spriteSheet.sprites[t],r=n?.texture;if(r&&(pc(r),!n.__hasLoadedProgressive)){n.__hasLoadedProgressive=!0;let t=r;P.assignTextureLOD(r,0).then(r=>{r instanceof xe&&(n.texture=r,e?.map===t&&(e.map=r,e.needsUpdate=!0))})}}};J([E(gc)],_c.prototype,`spriteSheet`,void 0),J([E()],_c.prototype,`index`,void 0);var vc=class extends N{drawMode=dc.Simple;size={x:1,y:1};color;sharedMaterial;transparent=!0;cutoutThreshold=0;castShadows=!1;renderOrder=0;toneMapped=!0;set texture(e){if(!this._spriteSheet)return;let t=this._spriteSheet.spriteSheet?.sprites[this.spriteIndex];t&&(t.texture=e,this.updateSprite())}addSprite(e,t=!1){if(this._spriteSheet||=_c.create(),!this._spriteSheet.spriteSheet)return-1;this._spriteSheet.spriteSheet?.sprites.push(e);let n=this._spriteSheet.spriteSheet?.sprites.length-1;return t&&(this.spriteIndex=n),n}get sprite(){return this._spriteSheet}set sprite(e){if(e!==this._spriteSheet)if(typeof e==`number`){let t=Math.round(e);cc&&console.log(`[SpriteSheet] Set index to `+t+` (was `+this.spriteIndex+`)`,e),this.spriteIndex=t}else e instanceof mc?(this._spriteSheet||=_c.create(),this._spriteSheet.sprite!=e&&(this._spriteSheet.sprite=e),this.updateSprite()):e!=this._spriteSheet&&(this._spriteSheet=e,this.updateSprite())}set spriteIndex(e){this._spriteSheet&&(this._spriteSheet.index=e,this.updateSprite())}get spriteIndex(){return this._spriteSheet?.index??0}get spriteFrames(){return this._spriteSheet?.spriteSheet?.sprites.length??0}_spriteSheet;_currentSprite;awake(){this._currentSprite=void 0,this._spriteSheet?this._spriteSheet=this._spriteSheet.clone():this._spriteSheet=_c.create(),cc&&console.log(`Awake`,this.name,this,this.sprite)}start(){this._currentSprite?this.gameObject&&this.gameObject.add(this._currentSprite):this.updateSprite()}updateSprite(e=!1){if(!this.__didAwake&&!e)return!1;let t=this._spriteSheet;if(!t?.spriteSheet?.sprites)return console.warn(`SpriteRenderer has no data or spritesheet assigned...`),!1;let r=t.spriteSheet.sprites[this.spriteIndex];if(!r)return cc&&console.warn(`Sprite not found`,this.spriteIndex,t.spriteSheet.sprites),!1;if(this._currentSprite)this._currentSprite.geometry=uc.getOrCreateGeometry(r),this._currentSprite.material.map=r.texture;else{let e=new v({color:16777215,side:2});if(lc&&(e.wireframe=!0),this.color&&(e.color||=new n,e.color.copy(this.color),e.opacity=this.color.alpha),e.transparent=!0,e.toneMapped=this.toneMapped,e.depthWrite=!1,r.texture&&!e.wireframe){let t=r.texture;t[hc]!==void 0&&t[hc]!==this&&this.spriteFrames>1&&(t=r.texture=t.clone()),t[hc]=this,e.map=t}this.sharedMaterial=e,this._currentSprite=new x(uc.getOrCreateGeometry(r),e),this._currentSprite.renderOrder=Math.round(this.renderOrder),P.assignTextureLOD(e,0)}return this._currentSprite.parent!==this.gameObject&&(this.drawMode===dc.Tiled&&this._currentSprite.scale.set(this.size.x,this.size.y,1),this.gameObject&&this.gameObject.add(this._currentSprite)),this._currentSprite&&this._currentSprite.layers.set(this.layer),this.sharedMaterial&&(this.sharedMaterial.alphaTest=this.cutoutThreshold,this.sharedMaterial.transparent=this.transparent),this._currentSprite.castShadow=this.castShadows,t?.update(this.sharedMaterial),!0}};J([E()],vc.prototype,`drawMode`,void 0),J([E(fc)],vc.prototype,`size`,void 0),J([E(tn)],vc.prototype,`color`,void 0),J([E(Ne)],vc.prototype,`sharedMaterial`,void 0),J([E()],vc.prototype,`transparent`,void 0),J([E()],vc.prototype,`cutoutThreshold`,void 0),J([E()],vc.prototype,`castShadows`,void 0),J([E()],vc.prototype,`renderOrder`,void 0),J([E()],vc.prototype,`toneMapped`,void 0),J([E(_c)],vc.prototype,`sprite`,null);var yc=D(`debugwebxr`),bc=new b().makeRotationY(Math.PI),xc=class e extends N{static _eventListeners={};static onPlaced(e){let t=`placed`;return this._eventListeners[t]||(this._eventListeners[t]=[]),this._eventListeners[t].push(e),()=>{let n=this._eventListeners[t].indexOf(e);n>=0&&this._eventListeners[t].splice(n,1)}}static _hasPlaced=!1;static get hasPlaced(){return this._hasPlaced}get arScale(){return this._arScale}set arScale(e){this._arScale=Math.max(1e-6,e),this.onSetScale()}_arScale=1;invertForward=!1;customReticle;arTouchTransform=!0;autoPlace=!1;autoCenter=!1;useXRAnchor=!1;_isPlacing=!0;_startOffset=new b;_createdPlacementObject=null;_reparentedComponents=[];_placementScene=new ne;_reticle=[];_hits=[];_placementStartTime=-1;_rigPlacementMatrix;_anchor=null;userInput;onEnable(){this.customReticle?.preload()}supportsXR(e){return e===`immersive-ar`}onEnterXR(t){yc&&console.log(`ENTER WEBXR: SessionRoot start...`),this._anchor=null,e._hasPlaced=!1,this.gameObject.updateMatrixWorld(),this._startOffset.copy(this.gameObject.matrixWorld);let n=new S;this._createdPlacementObject=n,n.name=`AR Session Root`,this._placementScene.name=`AR Placement Scene`,this._placementScene.children.length=0;for(let e=this.context.scene.children.length-1;e>=0;e--){let t=this.context.scene.children[e];this._placementScene.add(t)}if(this.context.scene.add(n),this.autoCenter){let e=fn(this._placementScene.children),t=e.getCenter(new r),n=e.getSize(new r),i=new b;i.makeTranslation(t.x,t.y-n.y*.5,t.z),this._startOffset.multiply(i)}this._reparentedComponents.length=0,this._reparentedComponents.push({comp:this,originalObject:this.gameObject}),k.addComponent(n,this);for(let e of this._reticle)dn(e);this._reticle.length=0,this._isPlacing=!0,this.context.input.addEventListener(`pointerup`,this.onPlaceScene,{queue:ct.Early})}onLeaveXR(){this.context.input.removeEventListener(`pointerup`,this.onPlaceScene,{queue:ct.Early}),this.onRevertSceneChanges(),this._anchor=null,e._hasPlaced=!1,this._rigPlacementMatrix=void 0}onUpdateXR(e){if(e.xr.isTrackingImages){for(let e of this._reticle)e.visible=!1;return}if(this._isPlacing){let t=e.xr.rig?.gameObject;t&&t.parent!==this.context.scene&&this.context.scene.add(t);let n=!1;if(e.xr.isPassThrough&&e.xr.controllers.length>0&&!this.autoPlace)for(let t of e.xr.controllers){let r=t.getHitTest();r&&(n=!0,this.updateReticleAndHits(e.xr,t.index,r,e.xr.rigScale))}if(!n){let t=e.xr.getHitTest();t&&this.updateReticleAndHits(e.xr,0,t,e.xr.rigScale)}}else{if(this._anchor&&e.xr.referenceSpace){let t=e.xr.frame.getPose(this._anchor.anchorSpace,e.xr.referenceSpace);if(t&&this.context.time.frame%20==0){let n=e.xr.convertSpace(t.transform),r=this._reticle[0];r&&(r.position.copy(n.position),r.quaternion.copy(n.quaternion),this.onApplyPose(r))}}if(this.arTouchTransform?(this.userInput||=new Sc(this.context),this.userInput?.enable()):this.userInput?.disable(),this.arTouchTransform&&this.userInput?.hasChanged){if(e.xr.rig){let t=e.xr.rig.gameObject;this.userInput.applyMatrixTo(t.matrix,!0),t.matrix.decompose(t.position,t.quaternion,t.scale),this.userInput.factor=t.scale.x}this.userInput.reset()}}}updateReticleAndHits(e,t,n,r){this._hits[t]=n.hit;let i=this._reticle[t];if(!i){if(this.customReticle)if(this.customReticle.asset)i=Et(this.customReticle.asset);else{this.customReticle.loadAssetAsync();return}else i=new x(new ce(.07,.09,32).rotateX(-Math.PI/2),new v({side:2,depthTest:!1,depthWrite:!1,transparent:!0,opacity:1,color:15658734})),i.name=`AR Placement Reticle`;if(yc){let e=new _e(1);e.position.y+=.01,i.add(e)}this._reticle[t]=i,i.matrixAutoUpdate=!1,i.visible=!1}if(i.lastPos=i.lastPos||n.position.clone(),i.lastQuat=i.lastQuat||n.quaternion.clone(),i.position.copy(i.lastPos.lerp(n.position,this.context.time.deltaTime/.1)),i.lastPos.copy(i.position),i.quaternion.copy(i.lastQuat.slerp(n.quaternion,this.context.time.deltaTime/.05)),i.lastQuat.copy(i.quaternion),i.scale.set(r,r,r),this.customReticle&&this.applyViewBasedTransform(i),i.updateMatrix(),i.visible=!0,i.parent!==this.context.scene&&this.context.scene.add(i),this._placementStartTime<0&&(this._placementStartTime=this.context.time.realtimeSinceStartup),this.autoPlace)if(this.upVec.set(0,1,0).applyQuaternion(i.quaternion),this.upVec.dot(wn(0,1,0))>.9){let e=i[`autoplace:timer`]||0;e>=1?(i.visible=!1,this.onPlaceScene(null)):(e+=this.context.time.deltaTime,i[`autoplace:timer`]=e)}else i[`autoplace:timer`]=0}onPlaceScene=t=>{if(this._isPlacing==0||t?.used)return;let n=this._reticle[0];if(!n){console.warn(`No reticle to place...`);return}if(!n.visible&&!this.autoPlace){console.warn(`Reticle is not visible (can not place)`);return}if(j.active?.isTrackingImages){console.warn(`Scene Placement is disabled while images are being tracked`);return}let r=this._hits[0];if(t&&t.origin instanceof sn){let e=this._reticle[t.origin.index];e&&(n=e,r=this._hits[t.origin.index])}if(t&&(t.stopImmediatePropagation(),t.stopPropagation(),t.use()),this._isPlacing=!1,this.context.input.removeEventListener(`pointerup`,this.onPlaceScene),this.onRevertSceneChanges(),n.position.copy(n.lastPos),n.quaternion.copy(n.lastQuat),this.onApplyPose(n),e._hasPlaced=!0,this.useXRAnchor&&this.onCreateAnchor(j.active,r),this.context.xr)for(let e of this.context.xr.controllers)e.cancelHitTestSource()};onSetScale(){if(!e._hasPlaced)return;let t=j.active?.rig?.gameObject;if(t){let e=j.active?.rigScale||1,n=1/this._arScale*e,r=new b().makeScale(n,n,n).invert();t.matrix.premultiply(r),t.matrix.decompose(t.position,t.quaternion,t.scale)}}onRevertSceneChanges(){for(let e of this._reticle)e&&(e.visible=!1,e?.removeFromParent());this._reticle.length=0;for(let e=this._placementScene.children.length-1;e>=0;e--){let t=this._placementScene.children[e];this.context.scene.add(t)}this._createdPlacementObject?.removeFromParent();for(let e of this._reparentedComponents)k.addComponent(e.originalObject,e.comp)}async onCreateAnchor(e,t){if(t.createAnchor===void 0){console.warn(`Hit does not support creating an anchor`,t),T()&&kn(`Hit does not support creating an anchor`);return}else{let n=await t.createAnchor(e.viewerPose.transform);e.running&&n&&(this._anchor=n)}}upVec=new r(0,1,0);lookPoint=new r;worldUpVec=new r(0,1,0);applyViewBasedTransform(e){let t=this.context.mainCamera,n=e,r=t.worldPosition,i=n.worldPosition;this.upVec.set(0,1,0).applyQuaternion(e.quaternion);let a=t.worldPosition;a&&e.position.clone().sub(a).angleTo(this.upVec)30&&o<150||o<-30&&o>-150?(this.lookPoint.copy(e.position).add(this.upVec),this.lookPoint.y=e.position.y,e.lookAt(this.lookPoint)):(r.y=i.y,e.lookAt(r))}onApplyPose(e){let t=j.active?.rig?.gameObject;if(!t){console.warn(`No rig object to place`);return}let n=t.parent||this.context.scene;this._rigPlacementMatrix?this._rigPlacementMatrix?.decompose(t.position,t.quaternion,t.scale):this._rigPlacementMatrix=t.matrix.clone(),this.applyViewBasedTransform(e),e.updateMatrix(),this.context.scene.add(e),e.attach(t),e.removeFromParent(),t.scale.set(this.arScale,this.arScale,this.arScale),t.position.multiplyScalar(this.arScale),t.updateMatrix(),this.invertForward&&t.matrix.premultiply(bc),t.matrix.premultiply(this._startOffset),t.matrix.decompose(t.position,t.quaternion,t.scale),n.add(t)}},Sc=class e{static up=new r(0,1,0);static zero=new r(0,0,0);static one=new r(1,1,1);oneFingerDrag=!0;twoFingerRotate=!0;twoFingerScale=!0;factor=1;context;offset;plane;_scale=1;_hasChanged=!1;get scale(){return this._scale}constructor(t){this.context=t,this.offset=new b,this.plane=new fe,this.plane.setFromNormalAndCoplanarPoint(e.up,e.zero)}_enabled=!1;reset(){this._scale=1,this.offset.identity(),this._hasChanged=!0}get hasChanged(){return this._hasChanged}applyMatrixTo(e,t){this._hasChanged=!1,t?(this.offset.invert(),e.premultiply(this.offset)):e.multiply(this.offset)}currentlyUsedPointerIds=new Set;currentlyUnusedPointerIds=new Set;get isActive(){return this.currentlyUsedPointerIds.size<=0&&this.currentlyUnusedPointerIds.size>0}enable(){this._enabled||(this._enabled=!0,this.context.input.addEventListener(`pointerdown`,this.onPointerDownEarly,{queue:ct.Early}),this.context.input.addEventListener(`pointerdown`,this.onPointerDownLate,{queue:ct.Late}),this.context.input.addEventListener(`pointerup`,this.onPointerUpEarly,{queue:ct.Early}),window.addEventListener(`touchstart`,this.touchStart,{passive:!1}),window.addEventListener(`touchmove`,this.touchMove,{passive:!1}),window.addEventListener(`touchend`,this.touchEnd,{passive:!1}))}disable(){this._enabled&&(this._enabled=!1,this.context.input.removeEventListener(`pointerdown`,this.onPointerDownEarly,{queue:ct.Early}),this.context.input.removeEventListener(`pointerdown`,this.onPointerDownLate,{queue:ct.Late}),this.context.input.removeEventListener(`pointerup`,this.onPointerUpEarly,{queue:ct.Early}),window.removeEventListener(`touchstart`,this.touchStart),window.removeEventListener(`touchmove`,this.touchMove),window.removeEventListener(`touchend`,this.touchEnd))}onPointerDownEarly=e=>{this.isActive&&e.stopPropagation()};onPointerDownLate=e=>{e.used?this.currentlyUsedPointerIds.add(e.pointerId):this.currentlyUsedPointerIds.size<=0&&this.currentlyUnusedPointerIds.add(e.pointerId)};onPointerUpEarly=e=>{this.currentlyUsedPointerIds.delete(e.pointerId),this.currentlyUnusedPointerIds.delete(e.pointerId)};prev=new Map;_didMultitouch=!1;touchStart=e=>{if(!e.defaultPrevented)for(let t=0;t{e.touches.length<=0&&(this._didMultitouch=!1);for(let t=0;t{if(!e.defaultPrevented&&this.isActive){if(e.touches.length===1){if(this._didMultitouch)return;let t=e.touches[0],n=this.prev.get(t.identifier);if(!n||n.ignore)return;let r=this.getPositionOnPlane(t.clientX,t.clientY),i=r.x-n.x,a=r.z-n.z;if(i===0&&a===0)return;this.oneFingerDrag&&this.addMovement(i,a),n.x=r.x,n.z=r.z,n.screenx=t.clientX,n.screeny=t.clientY;return}else if(e.touches.length===2){this._didMultitouch=!0;let t=e.touches[0],n=e.touches[1],r=this.prev.get(t.identifier),i=this.prev.get(n.identifier);if(!r||!i)return;if(this.twoFingerRotate){let e=Math.atan2(t.clientY-n.clientY,t.clientX-n.clientX)-Math.atan2(r.screeny-i.screeny,r.screenx-i.screenx);Math.abs(e)>.001&&this.addRotation(e)}if(this.twoFingerScale){let e=t.clientX-n.clientX,a=t.clientY-n.clientY,o=Math.sqrt(e*e+a*a),s=r.screenx-i.screenx,c=r.screeny-i.screeny,l=o-Math.sqrt(s*s+c*c);Math.abs(l)>2&&this.addScale(l)}r.screenx=t.clientX,r.screeny=t.clientY,i.screenx=n.clientX,i.screeny=n.clientY}}};_raycaster=new _;_intersection=new r;_screenPos=new r;getPositionOnPlane(e,t){let n=this.context.mainCamera;return this._screenPos.x=e/window.innerWidth*2-1,this._screenPos.y=-(t/window.innerHeight)*2+1,this._screenPos.z=1,this._screenPos.unproject(n),this._raycaster.set(n.position,this._screenPos.sub(n.position)),this._raycaster.ray.intersectPlane(this.plane,this._intersection),this._intersection}addMovement(e,t){e/=this._scale,t/=this._scale,e*=this.factor,t*=this.factor,this.offset.elements[12]+=e,this.offset.elements[14]+=t,(e!==0||t!==0)&&(this._hasChanged=!0)}_tempMatrix=new b;addScale(e){e/=window.innerWidth,e*=-1,this._scale*=1+e,this._tempMatrix.makeScale(1-e,1-e,1-e),this.offset.premultiply(this._tempMatrix),e!==0&&(this._hasChanged=!0)}addRotation(e){e*=-1,this._tempMatrix.makeRotationY(e),this.offset.premultiply(this._tempMatrix),e!==0&&(this._hasChanged=!0)}},Cc=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},wc=D(`debugplayersync`),Tc=class e extends N{static async setupFrom(t,n){let r=w.getOrCreateFromUrl(t);if(!r.asset){let e=await r.loadAssetAsync();e&&k.getOrAddComponent(e,Dc)}let i=new e;i._internalInit(n),i.asset=r;let a=new S;return a.guid=t,k.addComponent(a,i),i}autoSync=!0;asset;onPlayerSpawned;_localInstance;awake(){this.watchTabVisible(),this.onPlayerSpawned||=new Ut}onEnable(){this.context.connection.beginListen(O.RoomStateSent,this.onJoinedRoom),this.context.connection.beginListen(O.JoinedRoom,this.onJoinedRoom),this.context.connection.beginListen(O.LeftRoom,this.destroyInstance),this.context.connection.isInRoom&&this.onJoinedRoom()}onDisable(){this.context.connection.stopListen(O.RoomStateSent,this.onJoinedRoom),this.context.connection.stopListen(O.JoinedRoom,this.onJoinedRoom),this.context.connection.stopListen(O.LeftRoom,this.destroyInstance)}onJoinedRoom=()=>{wc&&console.log(`PlayerSync.joinedRoom. autoSync is set to `+this.autoSync),this.autoSync&&this.getInstance()};async getInstance(){if(this._localInstance)return this._localInstance;if(wc&&console.log(`PlayerSync.createInstance`,this.asset?.url),!this.asset?.asset&&!this.asset?.url)return console.error(`PlayerSync: can not create an instance because "asset" is not set and or has no URL!`),null;this.gameObject.guid||console.warn(`PlayerSync: gameObject has no guid! This might cause issues with syncing the player state.`),this._localInstance=this.asset?.instantiateSynced({parent:this.gameObject,deleteOnDisconnect:!0},!0);let e=await this._localInstance;if(e){let t=k.getComponentsInChildren(e,Dc);if(wc&&console.log(`PlayerSync.createInstance: found ${t?.length} PlayerState components. Owner: ${this.context.connection.connectionId}`),t?.length){for(let e of t)e.owner=this.context.connection.connectionId;this.onPlayerSpawned?.invoke(e)}else this._localInstance=void 0,console.error(`Failed finding PlayerState on `+this.asset?.url+`: please make sure the asset has a PlayerState component!`),k.destroySynced(e)}else this._localInstance=void 0,console.warn(`PlayerSync: failed instantiating asset!`);return this._localInstance}destroyInstance=()=>{this._localInstance?.then(e=>{wc&&console.log(`PlayerSync.destroyInstance`,e),rn(e,this.context.connection,!0,{saveInRoom:!1})}),this._localInstance=void 0};watchTabVisible(){window.addEventListener(`visibilitychange`,e=>{if(document.visibilityState===`visible`)for(let e=Dc.all.length-1;e>=0;e--){let t=Dc.all[e];(!t.owner||!this.context.connection.userIsInRoom(t.owner))&&t.doDestroy()}})}};Cc([E()],Tc.prototype,`autoSync`,void 0),Cc([E(w)],Tc.prototype,`asset`,void 0),Cc([E(Ut)],Tc.prototype,`onPlayerSpawned`,void 0);var Ec;(function(e){e.OwnerChanged=`ownerChanged`})(Ec||={});var Dc=class e extends N{static _all=[];static get all(){return e._all}static _local=[];static get local(){return e._local}static getFor(t){if(t instanceof S)return k.getComponentInParent(t,e);if(t instanceof N)return k.getComponentInParent(t.gameObject,e)}static isLocalPlayer(t){return e.getFor(t)?.isLocalPlayer??!1}static _callbacks={};static addEventListener(e,t){return this._callbacks[e]||(this._callbacks[e]=[]),this._callbacks[e].push(t),t}static removeEventListener(e,t){if(!this._callbacks[e])return;let n=this._callbacks[e].indexOf(t);n>=0&&this._callbacks[e].splice(n,1)}static dispatchEvent(e,t){if(this._callbacks[e])for(let n of this._callbacks[e])n(t)}onOwnerChangeEvent=new Ut;onFirstOwnerChangeEvent=new Ut;hasOwner=!1;owner;dontDestroy=!1;get isLocalPlayer(){return this.owner===this.context.connection.connectionId}onOwnerChange(t,n){wc&&console.log(`PlayerSync.onOwnerChange: ${n} → ${t} (me: ${this.context.connection.connectionId})`);let r=e._local.indexOf(this);r>=0&&e._local.splice(r,1);let i={playerState:this,oldValue:n,newValue:t};if(this.hasOwner||(this.hasOwner=!0,this.onFirstOwnerChangeEvent?.invoke(i)),this.onOwnerChangeEvent?.invoke(i),this.owner===this.context.connection.connectionId){e._local.push(this);let t=new CustomEvent(`local-owner-changed`,{detail:i});this.dispatchEvent(t)}let a=new CustomEvent(`owner-changed`,{detail:i});this.dispatchEvent(a),e.dispatchEvent(Ec.OwnerChanged,a)}awake(){e.all.push(this),wc&&console.log(`Registered new PlayerState`,this.guid,e.all.length-1,e.all),this.context.connection.beginListen(O.UserLeftRoom,this.onUserLeftRoom)}async start(){wc&&console.log(`PLAYERSTATE.START, owner: `+this.owner,this.context.connection.usersInRoom([])),this.owner?(this.context.connection.isInRoom||await Sn(300),this.context.connection.userIsInRoom(this.owner)==0&&(wc&&console.log(`PlayerSync.start → doDestroy \"${this.name}\" because user \"${this.owner}\" is not in room anymore...`,`Currently in room:`,...this.context.connection.usersInRoom()),this.doDestroy())):this.owner||(wc&&console.warn(`PlayerState.start → owner is undefined!`,this.name),setTimeout(()=>{!this.destroyed&&!this.owner?this.dontDestroy?wc&&console.warn(`PlayerState.start → owner is still undefined but dontDestroy is set to true`,this.name):(wc&&console.warn(`PlayerState.start → owner is still undefined: destroying \"${this.name}\" instance now`),this.doDestroy()):wc&&console.log(`PlayerState.start → owner is assigned`,this.owner)},2e3))}doDestroy(){wc&&console.log(`PlayerSync.doDestroy → syncDestroy`,this.name),rn(this.gameObject,this.context.connection,!0,{saveInRoom:!1})}onDestroy(){if(wc&&console.warn(`PlayerState.onDestroy`,this.owner),this.context.connection.stopListen(O.UserLeftRoom,this.onUserLeftRoom),e.all.splice(e.all.indexOf(this),1),this.isLocalPlayer){let t=e._local.indexOf(this);t>=0&&e._local.splice(t,1)}}onUserLeftRoom=e=>{if(e.userId===this.owner){wc&&console.log(`PLAYERSYNC LEFT`,this.owner),this.doDestroy();return}}};Cc([Pr(Dc.prototype.onOwnerChange)],Dc.prototype,`owner`,void 0);var Oc=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},kc=class extends N{position=`bottom`;showNeedleLogo=!1;showSpatialMenu;createFullscreenButton;createMuteButton;createQRCodeButton;onEnable(){this.applyOptions()}applyOptions(){this.context.menu.setPosition(this.position),this.context.menu.showNeedleLogo(this.showNeedleLogo),this.createFullscreenButton===!0&&this.context.menu.showFullscreenOption(!0),this.createMuteButton===!0&&this.context.menu.showAudioPlaybackOption(!0),this.showSpatialMenu===!0&&this.context.menu.showSpatialMenu(this.showSpatialMenu),this.createQRCodeButton===!0&&(A.isMobileDevice()||this.context.menu.showQRCodeButton(!0))}};Oc([E()],kc.prototype,`position`,void 0),Oc([E()],kc.prototype,`showNeedleLogo`,void 0),Oc([E()],kc.prototype,`showSpatialMenu`,void 0),Oc([E()],kc.prototype,`createFullscreenButton`,void 0),Oc([E()],kc.prototype,`createMuteButton`,void 0),Oc([E()],kc.prototype,`createQRCodeButton`,void 0);var Ac=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},jc=D(`debugwebxr`),Mc=new Ue().setFromAxisAngle(new r(0,1,0),Math.PI),Nc=class extends N{head;leftHand;rightHand;_leftHandMeshes;_rightHandMeshes;_syncTransforms;async onEnterXR(e){if(!this.activeAndEnabled)return;jc&&console.warn(`AVATAR ENTER XR`,this.guid,this.sourceId,this,this.activeAndEnabled),this._syncTransforms&&(this._syncTransforms.length=0),await this.prepareAvatar();let t=Dc.getFor(this);if(t?.owner){let e=this.gameObject.addComponent(zr);e.avatar=this.gameObject,e.connectionId=t.owner,this.context.players.setPlayerView(t.owner,this.head?.asset,In.Headset)}else this.context.connection.isConnected?console.error(`No player state found for avatar`,this):t&&!this.context.connection.isConnected&&(t.dontDestroy=!0)}onLeaveXR(e){let t=this.gameObject.getComponent(zr);t&&t.destroy()}onUpdateXR(e){if(!this.activeAndEnabled)return;let t=Dc.isLocalPlayer(this);if(!t)return;let n=e.xr;if(n.rig&&n.rig.gameObject!==this.gameObject.parent&&(this.gameObject.position.set(0,0,0),this.gameObject.rotation.set(0,0,0),this.gameObject.scale.set(1,1,1),n.rig.gameObject.add(this.gameObject)),this._syncTransforms&&t)for(let e of this._syncTransforms)e.fastMode=!0,e.isOwned()||e.requestOwnership();if(this.head&&this.context.mainCamera){let e=this.head.asset;if(e.position.copy(this.context.mainCamera.position),e.position.x*=-1,e.position.z*=-1,e.quaternion.copy(this.context.mainCamera.quaternion),e.quaternion.x*=-1,this.context.time.frameCount%10==0&&this.head.asset){let e=k.getComponentsInChildren(this.head.asset,fi);for(let t of e)t.enabled=!1,t.gameObject.visible=!1}}let r=e.xr.leftController,i=this.leftHand?.asset;r&&i?(i.position.copy(r.gripPosition),i.quaternion.copy(r.gripQuaternion),i.quaternion.multiply(Mc),i.visible=r.isTracking,this.updateHandVisibility(r,i,this._leftHandMeshes)):i&&i.visible&&(i.visible=!1);let a=e.xr.rightController,o=this.rightHand?.asset;a&&o?(o.position.copy(a.gripPosition),o.quaternion.copy(a.gripQuaternion),o.quaternion.multiply(Mc),o.visible=a.isTracking,this.updateHandVisibility(a,o,this._rightHandMeshes)):o&&o.visible&&(o.visible=!1)}onBeforeRender(){this.context.xr&&this.context.time.frame%10==0&&this.updateRemoteAvatarVisibility()}updateHandVisibility(e,t,n){if(n){let r=e.model&&e.model.visible&&e.model!==t;n.forEach(e=>{wi(e,!r)})}}updateRemoteAvatarVisibility(){if(this.context.connection.isConnected){let e=Dc.getFor(this);if(e&&e.isLocalPlayer==0){let t=j.getXRSync(this.context);if(t&&t.hasState(e.owner)){this.tryFindAvatarObjectsIfMissing();let n=this.leftHand?.asset;n&&(n.visible=t?.isTracking(e.owner,`left`)??!1);let r=this.rightHand?.asset;r&&(r.visible=t?.isTracking(e.owner,`right`)??!1)}if(this.head?.asset){let e=k.getComponentsInChildren(this.head.asset,fi);for(let t of e)t.enabled=!1,t.gameObject.visible=!0}}}}tryFindAvatarObjectsIfMissing(){if(!this.head||!this.leftHand||!this.rightHand){let e={head:this.head,leftHand:this.leftHand,rightHand:this.rightHand};_r.tryFindAvatarObjects(this.gameObject,this.sourceId||``,e),e.head&&(this.head=e.head),e.leftHand&&(this.leftHand=e.leftHand),e.rightHand&&(this.rightHand=e.rightHand)}}async prepareAvatar(){if(this.tryFindAvatarObjectsIfMissing(),this.head)this.head instanceof S&&(this.head=new w(``,this.sourceId,this.head));else{let e=new S;e.name=`Head`;let t=St.createPrimitive(Tt.Cube);e.add(t),this.gameObject.add(e),this.head=new w(``,this.sourceId,e),jc&&console.log(`Create head`,e)}if(this.rightHand)this.rightHand instanceof S&&(this.rightHand=new w(``,this.sourceId,this.rightHand));else{let e=new S;e.name=`Right Hand`,this.gameObject.add(e),this.rightHand=new w(``,this.sourceId,e),jc&&console.log(`Create right hand`,e)}if(this.leftHand)this.leftHand instanceof S&&(this.leftHand=new w(``,this.sourceId,this.leftHand));else{let e=new S;e.name=`Left Hand`,this.gameObject.add(e),this.leftHand=new w(``,this.sourceId,e),jc&&console.log(`Create left hand`,e)}await this.loadAvatarObjects(this.head,this.leftHand,this.rightHand),this._leftHandMeshes=[],this.leftHand.asset?.traverse(e=>{e?.isMesh&&this._leftHandMeshes.push(e)}),this._rightHandMeshes=[],this.rightHand.asset?.traverse(e=>{e?.isMesh&&this._rightHandMeshes.push(e)}),Dc.isLocalPlayer(this.gameObject)&&(this._syncTransforms=k.getComponentsInChildren(this.gameObject,Ot))}async loadAvatarObjects(e,t,n){let r=e.loadAssetAsync(),i=t.loadAssetAsync(),a=n.loadAssetAsync(),o=[];r&&o.push(r),i&&o.push(i),a&&o.push(a);let s=await Fn(o);jc&&console.log(`Avatar loaded results:`,s)}};Ac([E(w)],Nc.prototype,`head`,void 0),Ac([E(w)],Nc.prototype,`leftHand`,void 0),Ac([E(w)],Nc.prototype,`rightHand`,void 0);var Pc=D(`debugdecoders`),Fc=null;function Ic(){if(!Fc){let e=pr(null);Fc={dracoLoader:e.dracoLoader,ktx2Loader:e.ktx2Loader,meshoptDecoder:e.meshoptDecoder}}return Fc}function Lc(e){e!==void 0&&typeof e==`string`&&hr(e)}function Rc(e){if(e!==void 0&&typeof e==`string`&&e!==`js`){let t=Ic();Pc&&console.log(`Setting draco decoder type to`,e),t.dracoLoader.setDecoderConfig({type:e})}}function zc(e){e!==void 0&&typeof e==`string`&&dr(e)}function Bc(e,t){let n=Ic();return t.renderer?n.ktx2Loader.detectSupport(t.renderer):console.warn(`No renderer provided to detect ktx2 support - loading KTX2 textures will probably fail`),fr(e),e.dracoLoader||e.setDRACOLoader(n.dracoLoader),e.ktx2Loader||e.setKTX2Loader(n.ktx2Loader),e.meshoptDecoder||e.setMeshoptDecoder(n.meshoptDecoder),ur(e,{progressive:!0}),e}var Vc=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Hc=D(`debugwebxr`),Uc=[],Wc=class extends N{createControllerModel=!0;createHandModel=!0;customLeftHand;customRightHand;static factory=new or;supportsXR(e){return e===`immersive-vr`||e===`immersive-ar`}_models=[];async onXRControllerAdded(e){if(!(e.xr.isVR||e.xr.isPassThrough))return;console.debug(`XR Controller Added`,e.controller.side,e.controller.index);let{controller:t}=e;if(this.createControllerModel||this.createHandModel){if(t.hand){if(this.createHandModel){let e=await this.loadHandModel(this,t);if(!e||!t.connected||!t.isHand){e?.handObject&&Bt(e.handObject,!1),e?.handObject?.destroy();return}this._models.push({controller:t,model:e.handObject,handmesh:e.handmesh}),this._models.sort((e,t)=>e.controller.index-t.controller.index),this.scene.add(e.handObject),t.model=e.handObject}}else if(this.createControllerModel){let e=await t.getModelUrl();if(e){let n=await this.loadModel(t,e);if(!n||!t.connected||t.isHand)return;this._models.push({controller:t,model:n}),this._models.sort((e,t)=>e.controller.index-t.controller.index),this.scene.add(n),n.traverse(e=>{e.layers.set(2),e.matrixAutoUpdate=!1,e.updateMatrix()}),t.model=n}else t.targetRayMode!==`transient-pointer`&&console.warn(`XRControllerModel: no model found for `+t.side)}}}onXRControllerRemoved(e){console.debug(`XR Controller Removed`,e.controller.side,e.controller.index);let t=this._models.findIndex(t=>t.controller===e.controller),n=this._models[t];n&&(this._models.splice(t,1),n.model&&=(Bt(n.model,!1),n.model.destroy(),void 0))}onBeforeXR(e,t){this.createHandModel&&(this.customLeftHand||this.customRightHand)&&(t.optionalFeatures=t.optionalFeatures||[],t.optionalFeatures.includes(`hand-tracking`)||t.optionalFeatures.push(`hand-tracking`))}onLeaveXR(e){for(let e of this._models)e&&(e.model&&=(Bt(e.model,!1),e.model.destroy(),void 0),e.controller.model===e.model&&(e.controller.model=null));this._models.length=0}onBeforeRender(){if(j.active&&(Hc&&(Uc[0]=Date.now()),this.updateRendering(j.active),Hc)){let e=Date.now()-Uc[0];Uc.push(e),Uc.length>=30&&(Uc[0]=0,Uc.reduce((e,t)=>e+t,0)/Uc.length,Uc.length=0)}}updateRendering(e){for(let t=0;t{this.makeOccluder(e)}),n}async loadHandModel(e,t){let n=this.context,r=n.renderer.xr.getHand(t.index);r||(Hc?Ln.DrawLabel(t.rayWorldPosition,`No hand found for index `+t.index,.05,5):console.warn(`No hand found for index `+t.index));let i=new Yn;Bc(i,n),await Ua(i,n,this.sourceId??``,this.sourceId??``);let a=Va(i),o=``,s=t.side===`left`?this.customLeftHand:this.customRightHand;s?(o=s.url.split(`.`).slice(0,-1).join(`.`),i.setPath(``)):(o=t.inputSource.handedness===`left`?`left`:`right`,i.setPath(`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/`));let c=new S;Bt(c);let l=new er(c,r,i.path,o,i,n=>{let r=a?.gltf;r?.scene.children?.length===0&&(r.scene.children[0]=n),a?.gltf&&ot().createBuiltinComponents(e.context,e.sourceId||o,a.gltf,null,a),n.traverse(e=>{e.layers.set(2),j.active?.isPassThrough&&!s&&this.makeOccluder(e),e instanceof x&&P.assignMeshLOD(e,0)}),t.connected||(Hc&&Ln.DrawLabel(t.rayWorldPosition,`Hand is loaded but not connected anymore`,.05,5),n.removeFromParent())});if(Hc&&c.add(new _e(.5)),t.inputSource.hand){Hc&&console.log(t.inputSource.hand);for(let e of t.inputSource.hand.values())if(r.joints[e.jointName]===void 0){let t=new ve;t.matrixAutoUpdate=!1,t.visible=!0,r.joints[e.jointName]=t,r.add(t)}}else Hc&&Ln.DrawLabel(t.rayWorldPosition,`No inputSource.hand found for index `+t.index,.05,5);return{handObject:c,handmesh:l}}makeOccluder(e){if(e instanceof x){let t=e.material;t instanceof Ne&&(t=e.material=t.clone(),t.depthWrite=!0,t.depthTest=!0,t.colorWrite=!1,e.receiveShadow=!1,e.renderOrder=-100)}}};Vc([E()],Wc.prototype,`createControllerModel`,void 0),Vc([E()],Wc.prototype,`createHandModel`,void 0),Vc([E(w)],Wc.prototype,`customLeftHand`,void 0),Vc([E(w)],Wc.prototype,`customRightHand`,void 0);var Gc=class extends N{},Kc=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},qc=D(`debugwebxr`),Jc=class extends N{movementSpeed=1.5;rotationStep=30;useTeleport=!0;usePinchToTeleport=!0;useTeleportTarget=!1;useTeleportFade=!1;showRays=!0;showHits=!0;isXRMovementHandler=!0;xrSessionMode=`immersive-vr`;_didApplyRotation=!1;_didTeleport=!1;onUpdateXR(e){let t=e.xr.rig;if(!t?.gameObject||e.xr.isPassThrough)return;let n=e.xr.leftController,r=e.xr.rightController;n&&this.onHandleMovement(n,t.gameObject),r&&(this.onHandleRotation(r,t.gameObject),this.useTeleport&&this.onHandleTeleport(r,t.gameObject))}onLeaveXR(e){for(let e of this._lines)e.removeFromParent();for(let e of this._hitDiscs)e?.removeFromParent()}onBeforeRender(){this.context.xr?.running&&(this.showRays&&this.renderRays(this.context.xr),this.showHits&&this.renderHits(this.context.xr))}onHandleMovement(e,t){let n=e.getStick(`xr-standard-thumbstick`);if(n.x!=0||n.y!=0){let r=wn(n.x,0,n.y);r.multiplyScalar(this.context.time.deltaTimeUnscaled*this.movementSpeed);let i=$t(t);r.multiplyScalar(i.x),r.applyQuaternion(e.xr.poseOrientation),r.y=0,r.applyQuaternion(t.worldQuaternion),T()&&Number.isNaN(r.x)&&console.error(`Stick movement resulted in NaN`,{stick:n,vec:r}),t.position.add(r),t.updateWorldMatrix(!1,!1);for(let e of t.children)e.updateWorldMatrix(!1,!1)}}onHandleRotation(e,t){if(e._isMxInk)return;let n=e.getStick(`xr-standard-thumbstick`).x;if(this._didApplyRotation)Math.abs(n)<.3&&(this._didApplyRotation=!1);else if(Math.abs(n)>.5){this._didApplyRotation=!0;let e=n>0?1:-1,r=Yt(this.context.mainCamera).clone();t.rotateY(e*Rt.toRadians(this.rotationStep));let i=Yt(this.context.mainCamera).clone().sub(r);i.y=0,t.position.sub(i)}}_teleportBuffer=[];onHandleTeleport(e,t){let n=0;if(e.hand&&this.usePinchToTeleport&&e.isTeleportGesture){let t=e.getPointerId(`primary`);if(t!=null&&this.context.input.getIsPointerIdInUse(t))return;let r=e.getGesture(`pinch`);r&&(n=r.value)}else n=e.getStick(`xr-standard-thumbstick`)?.y;if(this._didTeleport)(n>=0&&n<.4||n<0&&n>-.4)&&(this._didTeleport=!1);else if(n>.8){this._didTeleport=!0;let n=this.context.physics.raycastFromRay(e.ray)[0];if(n&&n.object instanceof Xn){let e=n.normal?.dot(wn(0,1,0));if(e!==void 0&&e<.4)return}let i=n?.point;if(!i&&!this.useTeleportTarget){this._plane||=new fe(new r(0,1,0),0);let n=t.worldPosition;this._plane.setFromNormalAndCoplanarPoint(new r(0,1,0),n);let a=e.ray;i=n.clone(),this._plane.intersectLine(new ee(a.origin,wn(a.direction).multiplyScalar(1e4).add(a.origin)),i),i.distanceTo(n)>t.scale.x*10&&(i=null)}if(i){if(this.useTeleportTarget&&!k.getComponentInParent(n.object,Gc))return;let r=i.clone();if(qc&&Ln.DrawSphere(i,.025,16711680,5),this.context.mainCamera?.position){let e=this.context.xr?.getUserOffsetInRig();e&&(e.y=0,r.sub(e),qc&&Ln.DrawWireSphere(e.add(r),.025,65280,5))}this._teleportBuffer.push(t.matrix.clone()),this._teleportBuffer.length>10&&this._teleportBuffer.shift(),this.useTeleportFade?e.xr.fadeTransition()?.then(()=>{t.worldPosition=r}):t.worldPosition=r}}else if(n<-.8&&(this._didTeleport=!0,this._teleportBuffer.length>0)){let e=this._teleportBuffer.pop();e&&e.decompose(t.position,t.quaternion,t.scale)}}_plane=null;_lines=[];_hitDiscs=[];_hitDistances=[];_lastHitDistances=[];renderRays(e){for(let e=0;e=59?1:10;if((this.context.time.frame+n.index)%o!==0&&(i=!1),!i){let e=this._hitDiscs[t];e&&e.visible&&e.hit&&this.updateHitPointerPosition(n,e,e.hit.distance);continue}let s=this.context.physics.raycastFromRay(n.ray,{testObject:this.hitPointRaycastFilter,precise:!1}),c=s.find(e=>this.usePinchToTeleport&&n.isTeleportGesture?!0:this.isObjectWithInteractiveComponent(e.object));if(c||=s[0],r&&(r.controller=n,r.hit=c),this._hitDistances[t]=c?.distance||null,c){this._lastHitDistances[t]=c.distance;let i=e.rigScale??1;qc&&(Ln.DrawWireSphere(c.point,.025*i,16711680),Ln.DrawLabel(wn(0,.2,0).add(c.point),c.object.name,.02,0)),r||(r=this.createHitPointObject(),this._hitDiscs[t]=r),r.hit=c,r.visible=c.distance>i*.05;let a=.01*(i+c.distance),o=n.getButton(`primary`)?.pressed;o&&(a*=1.1),r.scale.set(a,a,a),r.layers.set(2);let s=r.material.opacity;if(s=o?1:c.distance<.15*i?.2:.6,r.material.opacity=Rt.lerp(r.material.opacity,s,this.context.time.deltaTimeUnscaled/.1),r.visible){if(c.normal){this.updateHitPointerPosition(n,r,c.distance);let e=c.normal.applyQuaternion(Rn(c.object));r.quaternion.setFromUnitVectors(Yc,e)}else this.updateHitPointerPosition(n,r,c.distance);r.parent!==this.context.scene&&this.context.scene.add(r)}}else this._hitDiscs[t]&&(this._hitDiscs[t].visible=!1)}}isObjectWithInteractiveComponent(e,t=0){return Ct(e)||e.isUI===!0?!0:e.isScene?!1:e.parent?this.isObjectWithInteractiveComponent(e.parent,t+1):!1}updateHitPointerPosition(e,t,n){let r=wn(e.rayWorldPosition);r.add(wn(0,0,n-.01).applyQuaternion(e.rayWorldQuaternion)),t.position.lerp(r,this.context.time.deltaTimeUnscaled/.05)}hitPointRaycastFilter=e=>e.type===`SkinnedMesh`?`continue in children`:!0;createHitPointObject(){let e=new x(new Ve(.3,6,6),new v({color:15658734,opacity:.7,transparent:!0,depthTest:!1,depthWrite:!1,side:2}));return e.layers.disableAll(),e.layers.enable(2),e}createRayLineObject(){let e=new nr;e.layers.disableAll(),e.layers.enable(2);let t=new ar;e.geometry=t;let n=new Float32Array(9);n.set([0,0,.02,0,0,.4,0,0,1]),t.setPositions(n);let r=new Float32Array(9);return r.set([1,1,1,.1,.1,.1,0,0,0]),t.setColors(r),e.material=new Qn({color:16777215,vertexColors:!0,worldUnits:!0,linewidth:.004,transparent:!0,depthWrite:!1,blending:2,dashed:!1}),e}};Kc([E()],Jc.prototype,`movementSpeed`,void 0),Kc([E()],Jc.prototype,`rotationStep`,void 0),Kc([E()],Jc.prototype,`useTeleport`,void 0),Kc([E()],Jc.prototype,`usePinchToTeleport`,void 0),Kc([E()],Jc.prototype,`useTeleportTarget`,void 0),Kc([E()],Jc.prototype,`useTeleportFade`,void 0),Kc([E()],Jc.prototype,`showRays`,void 0),Kc([E()],Jc.prototype,`showHits`,void 0);var Yc=new r(0,1,0),Y=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Xc=D(`debugwebxr`),Zc=D(`debugusdz`),X=class e extends N{createVRButton=!0;createARButton=!0;createSendToQuestButton=!0;createQRCode=!0;useDefaultControls=!0;showControllerModels=!0;showHandModels=!0;usePlacementReticle=!0;customARPlacementReticle;usePlacementAdjustment=!0;arScale=1;useXRAnchor=!1;autoPlace=!1;autoCenter=!1;useQuicklookExport=!1;useDepthSensing=!1;useSpatialGrab=!0;defaultAvatar;_playerSync;_createdComponentsInSession=[];_usdzExporter;static activeWebXRComponent=null;awake(){j.getXRSync(this.context)}onEnable(){window.location.protocol!==`https:`&&kn(`WebXR only works on secure connections (https).`),navigator.xr?.isSessionSupported(`immersive-ar`).catch(()=>!1).then(e=>{let t=A.isVisionOS()&&!e;(this.useQuicklookExport||t)&&(k.findObjectOfType($)||(Xc&&console.log(`WebXR: Adding USDZExporter`),this._usdzExporter=k.addComponent(this.gameObject,$),this._usdzExporter.objectToExport=this.context.scene,this._usdzExporter.autoExportAnimations=!0,this._usdzExporter.autoExportAudioSources=!0))}),this.handleCreatingHTML(),this.handleOfferSession(),this.defaultAvatar===!0&&(Xc&&console.warn(`WebXR: No default avatar set, using static default avatar`),this.defaultAvatar=new w(`https://cdn.needle.tools/static/avatars/DefaultAvatar.glb`)),this.defaultAvatar&&(this._playerSync=this.gameObject.getOrAddComponent(Tc),this._playerSync.autoSync=!1),this._playerSync&&typeof this.defaultAvatar!=`boolean`&&(this._playerSync.asset=this.defaultAvatar,this._playerSync.onPlayerSpawned?.removeEventListener(this.onAvatarSpawned),this._playerSync.onPlayerSpawned?.addEventListener(this.onAvatarSpawned))}onDisable(){this._usdzExporter?.destroy(),this.removeButtons()}async handleOfferSession(){return this.createVRButton&&await j.isVRSupported()&&this.createVRButton?j.offerSession(`immersive-vr`,`default`,this.context):this.createARButton&&await j.isARSupported()&&this.createARButton?j.offerSession(`immersive-ar`,`default`,this.context):!1}get session(){return j.active??null}get sessionMode(){return j.activeMode??null}get arSessionRoot(){return this._activeWebARSessionRoot}async enterVR(e){return j.start(`immersive-vr`,e,this.context)}async enterAR(e){return j.start(`immersive-ar`,e,this.context)}exitXR(){j.stop()}_exitXRMenuButton;_previousXRState=0;_spatialGrabRaycaster;_activeWebARSessionRoot=null;get isActiveWebXR(){return!e.activeWebXRComponent||e.activeWebXRComponent===this}onBeforeXR(t,n){if(!this.isActiveWebXR){console.warn(`WebXR: another WebXR component is already active (${e.activeWebXRComponent?.name}). This is ignored: ${this.name}`);return}if(this.activeAndEnabled===!1||this.destroyed){console.debug(`[WebXR] onBeforeXR called on disabled or destroyed component`);return}e.activeWebXRComponent=this,t==`immersive-ar`&&this.useDepthSensing&&(n.optionalFeatures=n.optionalFeatures||[],n.optionalFeatures.push(`depth-sensing`))}async onEnterXR(e){if(!this.isActiveWebXR)return;Xc&&console.log(`WebXR onEnterXR`),this._previousXRState=di.Global.Mask;let t=e.xr.isVR;if(di.Global.Set(t?ui.VR:ui.AR),e.xr.isAR){let e=k.findObjectOfType(xc,this.context,!1);if(!e)if(this.usePlacementReticle){let t=new S;for(let e of this.context.scene.children)t.add(e);this.context.scene.add(t),e=k.addComponent(t,xc),this._createdComponentsInSession.push(e)}else (Xc||T())&&console.warn(`WebXR: No WebARSessionRoot found in scene and usePlacementReticle is disabled in WebXR component.`);this._activeWebARSessionRoot=e,e&&(e.customReticle=this.customARPlacementReticle,e.arScale=this.arScale,e.arTouchTransform=this.usePlacementAdjustment,e.autoPlace=this.autoPlace,e.autoCenter=this.autoCenter,e.useXRAnchor=this.useXRAnchor)}this.useDefaultControls&&this.setDefaultMovementEnabled(!0),(this.showControllerModels||this.showHandModels)&&this.setDefaultControllerRenderingEnabled(!0),this.useSpatialGrab&&(this._spatialGrabRaycaster=k.findObjectOfType(cn)??void 0,this._spatialGrabRaycaster||=this.gameObject.addComponent(cn)),this.createLocalAvatar(e.xr),e.xr.isScreenBasedAR||(this._exitXRMenuButton=this.context.menu.appendChild({label:`Quit XR`,onClick:()=>this.exitXR(),icon:`exit_to_app`,priority:2e4}))}onUpdateXR(e){this.isActiveWebXR&&this._spatialGrabRaycaster&&(this._spatialGrabRaycaster.enabled=this.useSpatialGrab)}onLeaveXR(t){if(this._exitXRMenuButton?.remove(),this.isActiveWebXR){di.Global.Set(this._previousXRState),this._playerSync?.destroyInstance();for(let e of this._createdComponentsInSession)e.destroy();this._createdComponentsInSession.length=0,this._activeWebARSessionRoot=null,this.handleOfferSession(),jn(1).then(()=>e.activeWebXRComponent=null)}}setDefaultMovementEnabled(e){let t=this.gameObject.getComponent(Jc);return!t&&e&&(t=this.gameObject.addComponent(Jc),this._createdComponentsInSession.push(t)),t&&(t.enabled=e),t}setDefaultControllerRenderingEnabled(e){let t=this.gameObject.getComponent(Wc);return!t&&e&&(t=this.gameObject.addComponent(Wc),this._createdComponentsInSession.push(t),t.createControllerModel=this.showControllerModels,t.createHandModel,this.showHandModels),t&&(t.enabled=e),t}async createLocalAvatar(e){this._playerSync&&e.running&&typeof this.defaultAvatar!=`boolean`&&(this._playerSync.asset=this.defaultAvatar,await this._playerSync.getInstance())}onAvatarSpawned=e=>{Xc&&console.log(`WebXR.onAvatarSpawned`,e);let t=k.getComponentInChildren(e,Nc);t??=k.addComponent(e,Nc)};getButtonsContainer(){return this.getButtonsFactory()}getButtonsFactory(){return this._buttonFactory||=sc.getOrCreate(),this._buttonFactory}_buttonFactory;handleCreatingHTML(){if(this.createARButton||this.createVRButton||this.useQuicklookExport){if((A.isiOS()&&A.isSafari()||Zc)&&this.useQuicklookExport){let e=k.findObjectOfType($);if(!e||e&&e.allowCreateQuicklookButton){let e=this.getButtonsFactory().createQuicklookButton();this.addButton(e)}}if(this.createARButton){let e=this.getButtonsFactory().createARButton();this.addButton(e)}if(this.createVRButton){let e=this.getButtonsFactory().createVRButton();this.addButton(e)}}if(this.createSendToQuestButton&&!A.isQuest()&&j.isVRSupported().then(e=>{if(!e){let e=this.getButtonsFactory().createSendToQuestButton();this.addButton(e)}}),this.createQRCode){let e=Zt(kc);if(e&&e.createQRCodeButton===!1)T()&&console.warn(`WebXR: QRCode button is disabled in the Needle Menu component`);else if(!A.isMobileDevice()){let e=un.getOrCreate().createQRCode();this.addButton(e)}}}_buttons=[];addButton(e){this._buttons.push(e),this.context.menu.appendChild(e)}removeButtons(){for(let e of this._buttons)e.remove();this._buttons.length=0}};Y([E()],X.prototype,`createVRButton`,void 0),Y([E()],X.prototype,`createARButton`,void 0),Y([E()],X.prototype,`createSendToQuestButton`,void 0),Y([E()],X.prototype,`createQRCode`,void 0),Y([E()],X.prototype,`useDefaultControls`,void 0),Y([E()],X.prototype,`showControllerModels`,void 0),Y([E()],X.prototype,`showHandModels`,void 0),Y([E()],X.prototype,`usePlacementReticle`,void 0),Y([E(w)],X.prototype,`customARPlacementReticle`,void 0),Y([E()],X.prototype,`usePlacementAdjustment`,void 0),Y([E()],X.prototype,`arScale`,void 0),Y([E()],X.prototype,`useXRAnchor`,void 0),Y([E()],X.prototype,`autoPlace`,void 0),Y([E()],X.prototype,`autoCenter`,void 0),Y([E()],X.prototype,`useQuicklookExport`,void 0),Y([E()],X.prototype,`useDepthSensing`,void 0),Y([E()],X.prototype,`useSpatialGrab`,void 0),Y([E(w)],X.prototype,`defaultAvatar`,void 0);var Qc=D(`debugusdzbehaviours`),$c=class{get extensionName(){return`Behaviour`}behaviours=[];addBehavior(e){this.behaviours.push(e)}addAudioClip(e){if(!e||typeof e!=`string`)return``;let t=`audio/`+Vs.getName(e);return this.audioClips.push({clipUrl:e,filesKey:t}),t}behaviourComponents=[];behaviourComponentsCopy=[];audioClips=[];audioClipsCopy=[];targetUuids=new Set;getAllTargetUuids(){return this.targetUuids}onBeforeBuildDocument(e){if(!e.root)return Promise.resolve();let t=[];return e.root.traverse(n=>{k.foreachComponent(n,n=>{let r=n;if(typeof r.createBehaviours==`function`||typeof r.beforeCreateDocument==`function`||typeof r.afterCreateDocument==`function`||typeof r.afterSerialize==`function`){this.behaviourComponents.push(r);let n=r.beforeCreateDocument?.call(r,this,e);n instanceof Promise&&t.push(n)}},!1)}),Qc&&console.log(`onBeforeBuildDocument: all components`,this.behaviourComponents),Promise.all(t)}onExportObject(e,t,n){for(let e of this.behaviourComponents)e.createBehaviours?.call(e,this,t,n)}onAfterBuildDocument(e){for(let t of this.behaviourComponents)typeof t.afterCreateDocument==`function`&&t.afterCreateDocument(this,e);this.behaviourComponentsCopy=this.behaviourComponents.slice(),this.behaviourComponents.length=0,this.audioClipsCopy=this.audioClips.slice(),this.audioClips.length=0;let t=new Set,n=new Set,r=new Set,i=new Set,a=Qc,o=`graph LR -`,s=``;function c(e){if(e instanceof Ms){a&&(o+=`subgraph Group_${e.id}\n`);for(let t of e.actions)a&&(o+=`${e.id}[${e.id}] -- ${e.type},loops:${e.loops} --> ${t.id}[${t.id}]\n`),c(t);a&&(o+=`end -`)}else if(e instanceof Ns){e.tokenId===`StartAnimation`&&i.add(e);let t=e.tokenId;e.type!==void 0&&(t+=`:`+e.type);let r=e.affectedObjects;if(r)if(Array.isArray(r))for(let i of r)n.add(i),a&&(s+=`${e.id}[${e.id}\n${t}] -- ${t} --> ${i.uuid}(("${i.displayName||i.name||i.uuid}"))\n`);else typeof r==`object`?(n.add(r),a&&(s+=`${e.id}[${e.id}\n${t}] -- ${t} --> ${r.uuid}(("${r.displayName||r.name||r.uuid}"))\n`)):typeof r==`string`&&n.add({uuid:r});let o=e.xFormTarget;o&&(typeof o==`object`?(n.add(o),a&&(s+=`${e.id}[${e.id}\n${t}] -- ${t} --> ${o.uuid}(("${o.displayName||o.name||o.uuid}"))\n`)):typeof o==`string`&&n.add({uuid:o}))}}function l(e,n){if(Array.isArray(e))for(let t of e)l(t,n);else if(e instanceof ks){let r=e.tokenId;e.type!==void 0&&(r+=`:`+e.type),typeof e.targetId==`object`&&(t.add(e.targetId),a&&(s+=`${e.targetId.uuid}(("${e.targetId.displayName}")) --> ${e.id}[${e.id}\n${r}]\n`)),a&&(o+=`${e.id}((${e.id})) -- ${r} --> ${n.id}[${n.tokenId||n.id}]\n`)}}for(let e of this.behaviours)a&&(o+=`subgraph ${e.id}\n`),c(e.action),l(e.trigger,e.action),a&&(o+=`end -`);a&&(o+=` -`+s),a&&(console.log(`All USDZ behaviours`,this.behaviours),this.behaviours.length&&(console.warn(`The Mermaid graph can be pasted into https://massive-mermaid.glitch.me/ or https://mermaid.live/edit. It should be in your clipboard already!`),console.log(o),navigator.clipboard.writeText(o)));{let e=`gantt -title Animations -dateFormat X -axisFormat %s -`,t=Array.from(i),n=new Set;for(let r of t)if(r.affectedObjects&&typeof r.affectedObjects!=`string`){if(Array.isArray(r.affectedObjects))for(let e of r.affectedObjects)n.add(e);else n.add(r.affectedObjects);a&&(e+=`section ${r.animationName} (${r.id})\n`,e+=`${r.id} : ${r.start}, ${r.duration}s\n`)}a&&i.size&&console.log(e);let r=new Set;for(let e of n){e.getPath||console.error(`USDZExporter: Animation target object has no getPath method. This is likely a bug`,e);let t=e.getPath();t.startsWith(`<`)&&(t=t.substring(1)),t.endsWith(`>`)&&(t=t.substring(0,t.length-1)),r.add({path:t,obj:e})}let o=Array.from(r).sort((e,t)=>e.path.length-t.path.length),s=[];for(let e=0;ee.enabled),i=k.getComponents(e,vi).filter(e=>e.enabled&&!e.isTrigger),a=r.length>0?r[0]:null,o=i.length>0?i[0]:null;o&&!a&&(a=new vt,a.isKinematic=!0),a&&t.addEventListener(`serialize`,(e,t)=>{if(a){if(e.appendLine(),e.beginBlock(`def RealityKitComponent "RigidBody"`,`{`,!0),a.useGravity||e.appendLine(`bool gravityEnabled = 0`),e.appendLine(`uniform token info:id = "RealityKit.RigidBody"`),a.isKinematic&&e.appendLine(`token motionType = "Kinematic"`),e.beginBlock(`def RealityKitStruct "massFrame"`,`{`,!0),e.appendLine(`float m_mass = ${a.mass}`),e.beginBlock(`def RealityKitStruct "m_pose"`,`{`,!0),e.appendLine(`float3 position = (${a.centerOfMass.x}, ${a.centerOfMass.y}, ${a.centerOfMass.z})`),e.closeBlock(`}`),e.closeBlock(`}`),i.length>0){let t=i[0];e.beginBlock(`def RealityKitStruct "material"`,`{`,!0);let n=t.sharedMaterial;n&&n.dynamicFriction!==void 0&&e.appendLine(`double dynamicFriction = ${t.sharedMaterial?.dynamicFriction}`),n&&n.bounciness!==void 0&&e.appendLine(`double restitution = ${t.sharedMaterial?.bounciness}`),n&&n.staticFriction!==void 0&&e.appendLine(`double staticFriction = ${t.sharedMaterial?.staticFriction}`),e.closeBlock(`}`)}e.closeBlock(`}`)}}),o&&(t.addEventListener(`serialize`,(e,t)=>{e.beginBlock(`def RealityKitComponent "Collider"`,`{`,!0),e.appendLine(`uint group = 1`),e.appendLine(`uniform token info:id = "RealityKit.Collider"`),e.appendLine(`uint mask = 4294967295`);let n=o.isTrigger?`Trigger`:`Default`;if(e.appendLine(`token type = "${n}"`),e.beginBlock(`def RealityKitStruct "Shape"`,`{`,!0),o instanceof yi){let t=o;e.appendLine(`token shapeType = "Sphere"`),e.appendLine(`float radius = ${t.radius}`)}else if(o instanceof bi){let t=o;e.appendLine(`token shapeType = "Box"`),e.appendLine(`float3 extent = (${t.size.x}, ${t.size.y}, ${t.size.z})`)}else if(o instanceof Si){let t=o;e.appendLine(`token shapeType = "Capsule"`),e.appendLine(`float radius = ${t.radius}`),e.appendLine(`float height = ${t.height}`)}else if(o instanceof xi&&o.sharedMesh?.geometry){let t=o.sharedMesh.geometry;t.boundingBox||t.computeBoundingBox();let n=o.sharedMesh.geometry.boundingBox;n&&(e.appendLine(`token shapeType = "Box"`),e.appendLine(`float3 extent = (${n.max.x-n.min.x}, ${n.max.y-n.min.y}, ${n.max.z-n.min.z})`),console.log(`[USDZ] Only Box, Sphere, and Capsule colliders are supported in visionOS/iOS. MeshCollider will be exported as Box`,o))}else console.warn(`[USDZ] Only Box, Sphere, and Capsule colliders are supported in visionOS/iOS. Ignoring collider:`,o);e.beginBlock(`def RealityKitStruct "pose"`,`{`,!0),e.closeBlock(`}`),e.closeBlock(`}`),e.closeBlock(`}`)}),i.length>1&&console.log(`WARNING: Multiple colliders detected. visionOS / iOS can only support objects with a single collider, only exporting the first collider: `,o))}},tl;(function(e){e.singleLine=`singleLine`,e.hardBreaks=`hardBreaks`,e.flowing=`flowing`})(tl||={});var nl;(function(e){e.left=`left`,e.center=`center`,e.right=`right`,e.justified=`justified`})(nl||={});var rl;(function(e){e.top=`top`,e.middle=`middle`,e.lowerMiddle=`lowerMiddle`,e.baseline=`baseline`,e.bottom=`bottom`})(rl||={});var il=class{static global_id=0;static getId(){return this.global_id++}id;content=``;font=[];pointSize=144;width;height;depth;wrapMode;horizontalAlignment;verticalAlignment;material;setDepth(e){return this.depth=e,this}setPointSize(e){return this.pointSize=e,this}setHorizontalAlignment(e){return this.horizontalAlignment=e,this}setVerticalAlignment(e){return this.verticalAlignment=e,this}constructor(e){this.id=e}writeTo(e,t){t.beginBlock(`def Preliminary_Text "${this.id}"`,`(`,!1),t.appendLine(`prepend apiSchemas = ["MaterialBindingAPI"]`),t.closeBlock(`)`),t.beginBlock(),this.content&&t.appendLine(`string content = "${this.content}"`),(!this.font||this.font.length<=0)&&(this.font||=[],this.font?.push(`sans-serif`));let n=this.font.map(e=>`"${e}"`).join(`, `);t.appendLine(`string[] font = [ ${n} ]`),t.appendLine(`double pointSize = ${this.pointSize}`),typeof this.width==`number`&&t.appendLine(`double width = ${this.width}`),typeof this.height==`number`&&t.appendLine(`double height = ${this.height}`),typeof this.depth==`number`&&t.appendLine(`double depth = ${this.depth}`),this.wrapMode&&t.appendLine(`token wrapMode = "${this.wrapMode}"`),this.horizontalAlignment&&t.appendLine(`token horizontalAlignment = "${this.horizontalAlignment}"`),this.verticalAlignment&&t.appendLine(`token verticalAlignment = "${this.verticalAlignment}"`),this.material!==void 0&&t.appendLine(`rel material:binding = `),t.closeBlock()}},al=class{static singleLine(e,t,n){let r=new il(`text_`+il.getId());return r.content=e,t&&(r.pointSize=t),n&&(r.depth=n),r}static multiLine(e,t,n,r,i,a){let o=new il(`text_`+il.getId());return o.content=e,o.width=t,o.height=n,o.horizontalAlignment=r,o.verticalAlignment=i,a!==void 0&&(o.wrapMode=a),o}},ol=new b().makeRotationY(Math.PI),sl=new b().makeScale(-1,1,-1),cl=class{get extensionName(){return`text`}exportText(e,t,n){let r=k.getComponent(e,Cn);if(!r)return;let i=k.getComponent(e,Un),a=100,o=100;i&&(a=i.width,o=i.height);let s=ol.clone();i&&s.premultiply(sl),t.setMatrix(s);let c=r.color.clone();t.material=new Te({color:c,emissive:c}),t.addEventListener(`serialize`,(e,n)=>{let i=r.text;i=i.replace(/\r/g,``),i=i.replace(/\n/g,`\\n`);let s=al.multiLine(i,a,o,nl.center,rl.bottom,tl.flowing);this.setTextAlignment(s,r.alignment),this.setOverflow(s,r),t.material&&(s.material=t.material),s.pointSize=this.convertToTextSize(r.fontSize),s.depth=.001,s.writeTo(void 0,e)})}convertToTextSize(e){return 1/.0502*144*e}setOverflow(e,t){t.horizontalOverflow?e.wrapMode=tl.singleLine:e.wrapMode=tl.flowing}setTextAlignment(e,t){switch(t){case M.LowerLeft:case M.MiddleLeft:case M.UpperLeft:e.horizontalAlignment=nl.left;break;case M.LowerCenter:case M.MiddleCenter:case M.UpperCenter:e.horizontalAlignment=nl.center;break;case M.LowerRight:case M.MiddleRight:case M.UpperRight:e.horizontalAlignment=nl.right;break}switch(t){case M.LowerLeft:case M.LowerCenter:case M.LowerRight:e.verticalAlignment=rl.bottom;break;case M.MiddleLeft:case M.MiddleCenter:case M.MiddleRight:e.verticalAlignment=rl.middle;break;case M.UpperLeft:case M.UpperCenter:case M.UpperRight:e.verticalAlignment=rl.top;break}}},ll=class{get extensionName(){return`tmui`}onExportObject(e,t,r){let i=k.getComponent(e,An);if(i&&i.enabled&&i.renderMode===en.WorldSpace){let i=new cl,a=k.getComponent(e,Un),o=k.getComponent(e,xn),s=[];if(a){if(!k.isActiveSelf(e)){let t=k.isActiveSelf(e);k.setActive(e,!0),a.onEnable(),a.updateTransform(),s.push(()=>{a.onDisable(),k.setActive(e,t)})}e.traverse(e=>{if(!k.isActiveInHierarchy(e)){let t=k.isActiveSelf(e);k.setActive(e,!0);let n=k.getComponent(e,Hn);n&&(n.onEnable(),s.push(()=>{n.onDisable()}));let r=k.getComponent(e,Un);r&&(r.onEnable(),r.updateTransform(),r.onApplyTransform(),s.push(()=>{r.onDisable()}));let i=k.getComponent(e,Cn);i&&(i.onEnable(),s.push(()=>{i.onDisable()})),s.push(()=>{k.setActive(e,t)})}}),a.width,a.height;let c=jo.createEmpty(),l=a.shadowComponent;if(t.add(c),l){let e=l.matrix;c.setMatrix(e);let t=new Map,a=new Map;t.set(l,c),a.set(l,o?o.alpha:1),l.traverse(e=>{if(e===l)return;let o=jo.createEmpty();o.setMatrix(e.matrix);let s=e.parent,c=!!s&&typeof s.textContent==`string`&&s.textContent.length>0,u=a.get(s)||1,d=k.getComponent(e,xn);if(d&&(u*=d.alpha),e instanceof x&&c){let t=e[$e];t?i.exportText(t.gameObject,o,r):console.error(`Error when exporting UI: shadow component owner not found. This is likely a bug.`,e)}if(e instanceof x&&!c){let t=e.geometry.clone();t.scale(1,1,-1),this.flipWindingOrder(t),o.geometry=t;let r=new n,i=e.material.opacity;r.copy(e.material.color),o.material=new v({color:r,opacity:i*u,map:e.material.map,transparent:!0})}t.set(e,o),a.set(e,u);let f=t.get(s);if(!f){console.error(`Error when exporting UI: shadow component parent not found!`,e,e.parent);return}f.add(o)})}}for(let e of s)e()}}flipWindingOrder(e){let t=e.index.array;for(let e=0,n=t.length/3;e0&&console.log(`USDZ Animation Clips without behaviours`,n);for(let e of n)for(let n of e.clips)t.registerAnimation(e.root,n);return o}function fl(e,t){let n=k.getComponentsInChildren(e,I),r=k.getComponentsInChildren(e,Js),i=[],a=[];ul&&console.log({audioSources:n,playAudioOnClicks:r});for(let e of r){if(!e.target)continue;let t=n.indexOf(e.target);t>-1&&n.splice(t,1)}for(let t of n){if(!t||!t.clip||t.volume<=0||i.includes(t))continue;let n=new Js;n.target=t,n.name=`PlayAudioOnClick_implicitAtStart_`,n.trigger=`start`;let r=new S;k.addComponent(r,n),console.log(`implicit PlayAudioOnStart`,r,n),a.push(r),i.push(t),e.add(r)}return a}function pl(e){return new Es(`DisableAtStart`,js.sceneStartTrigger(),G.fadeAction(e,0,!1))}function ml(e,t){let n=e.domElement.shadowRoot.querySelector(`link[rel='ar']`);if(n)return n;let r=document.createElement(`div`);r.classList.add(`menu`),r.classList.add(`quicklook-menu`),r.style.display=`none`,r.style.visibility=`hidden`;let i=document.createElement(`button`);i.id=`open-in-ar`,t?(i.innerText=`View in AR`,i.title=`View this scene in AR. The scene will be exported to USDZ and opened with Apple's QuickLook.`):(i.innerText=`View in AR`,i.title=`Download this scene for AR. Open the downloaded USDZ file to view it in AR using Apple's QuickLook.`),r.appendChild(i);let a=document.createElement(`a`);a.id=`needle-usdz-link`,a.style.display=`none`,a.rel=`ar`,a.href=``,a.target=`_blank`,r.appendChild(a);let o=document.createElement(`img`);return o.id=`button`,a.appendChild(o),e.domElement.shadowRoot.appendChild(r),a}var Z=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Q=D(`debugusdz`),hl=D(`debugusdzpruning`),gl=class{callToAction;checkoutTitle;checkoutSubtitle;callToActionURL};Z([E()],gl.prototype,`callToAction`,void 0),Z([E()],gl.prototype,`checkoutTitle`,void 0),Z([E()],gl.prototype,`checkoutSubtitle`,void 0),Z([E()],gl.prototype,`callToActionURL`,void 0);var $=class e extends N{static beforeExport=new Ut;static afterExport=new Ut;static beforeLODExport=new Ut;objectToExport=void 0;autoExportAnimations=!0;autoExportAudioSources=!0;exportFileName=void 0;customUsdzFile=void 0;customBranding;anchoringType=`plane`;maxTextureSize=2048;planeAnchoringAlignment=`horizontal`;interactive=!0;physics=!0;allowCreateQuicklookButton=!0;quickLookCompatible=!0;extensions=[];link;button;start(){Q&&(console.log(`USDZExporter`,this),console.log(`Debug USDZ Mode. Press 'T' to export`),window.addEventListener(`keydown`,e=>{switch(e.key){case`t`:this.exportAndOpen();break}})),this.objectToExport||=this.gameObject,!this.objectToExport?.children?.length&&!this.objectToExport?.isMesh&&(this.objectToExport=this.context.scene)}onEnable(){let e=A.supportsQuickLookAR(),t=A.isiOS()||A.isiPad();!this.button&&(Q||e||t)&&(this.allowCreateQuicklookButton&&(this.button=this.createQuicklookButton()),this.lastCallback=this.quicklookCallback.bind(this),this.link=ml(this.context,e),this.link.addEventListener(`message`,this.lastCallback)),Q&&vn(`USDZ Exporter enabled: `+this.name),document.getElementById(`open-in-ar`)?.addEventListener(`click`,this.onClickedOpenInARElement),Tn.registerExporter(this)}onDisable(){this.button?.remove(),this.link?.removeEventListener(`message`,this.lastCallback),Q&&vn(`USDZ Exporter disabled: `+this.name),document.getElementById(`open-in-ar`)?.removeEventListener(`click`,this.onClickedOpenInARElement),Tn.unregisterExporter(this)}onClickedOpenInARElement=e=>{e.preventDefault(),this.exportAndOpen()};async exportAsync(){return this.exportAndOpen()}async exportAndOpen(){let t=this.exportFileName??this.objectToExport?.name??this.name;if(t+=`-`+ho(),zn()||(t!==``&&(t+=`-`),t+=`MadeWithNeedle`),this.link||=ml(this.context,A.supportsQuickLookAR()),this.customUsdzFile)return Q&&console.log(`Exporting custom usdz`,this.customUsdzFile),this.openInQuickLook(this.customUsdzFile,t),null;if(!this.objectToExport)return console.warn(`No object to export`,this),null;e.beforeExport.invoke({exporter:this});let n=await this.export(this.objectToExport).finally(()=>{e.afterExport.invoke({exporter:this})});return n?(Q&&console.log(`USDZ generation done. Downloading as `+t),this.openInQuickLook(n,t),n):(console.error(`USDZ generation failed. Please report a bug`,this),null)}async export(e){if(!e)return console.warn(`No object to export`),null;let t=this._currentExportTasks.get(e);if(t)return t;let n=this.internalExport(e);return n instanceof Promise?(this._currentExportTasks.set(e,n),n.then(t=>(this._currentExportTasks.delete(e),t)).catch(t=>(this._currentExportTasks.delete(e),console.error(`Error during USDZ export – please report a bug!`,t),null))):n}_currentExportTasks=new Map;_previousTimeScale=1;async internalExport(t){V.start(`export-usdz`,{onProgress:e=>{this.dispatchEvent(new CustomEvent(`export-progress`,{detail:{progress:e}}))}}),V.report(`export-usdz`,{message:`Starting export`,totalSteps:40,currentStep:0}),V.report(`export-usdz`,{message:`Load progressive textures`,autoStep:5}),V.start(`export-usdz-textures`,`export-usdz`);let n=k.getComponentsInChildren(t,vc);for(let e of n)e&&e.enabled&&e.updateSprite(!0);let r=k.getComponentsInChildren(t,B),i=[],a=0;for(let t of r){for(let n of t.sharedMeshes)if(n){let r=0,o={exporter:this,type:`mesh`,object:t.gameObject,mesh:n};if(e.beforeLODExport.invoke(o),o.overrideLevel!==void 0)if(o.overrideLevel===-1){Q&&console.warn(`Skipping LOD export for mesh due to overrideLevel -1`,t.gameObject,n);continue}else o.overrideLevel>=0&&(r=o.overrideLevel,Q&&console.log(`Overriding LOD level for mesh export to level `+r+` `+n.name));let s=P.assignMeshLOD(n,r);s instanceof Promise&&i.push(new Promise((e,t)=>{s.then(()=>{a++,V.report(`export-usdz-textures`,{message:`Loaded progressive mesh`,currentStep:a,totalSteps:i.length}),e()}).catch(e=>t(e))}))}for(let n of t.sharedMaterials)if(n){let r=0,o={exporter:this,type:`texture`,object:t.gameObject,material:n};if(e.beforeLODExport.invoke(o),o.overrideLevel!==void 0)if(o.overrideLevel===-1){Q&&console.warn(`Skipping LOD assignment due to overrideLevel -1`,t.gameObject,n);continue}else o.overrideLevel>=0&&(r=o.overrideLevel,Q&&console.log(`Overriding LOD level for texture export to level `+r+` `+n.name));let s=P.assignTextureLOD(n,r);s instanceof Promise&&i.push(new Promise((e,t)=>{s.then(()=>{a++,V.report(`export-usdz-textures`,{message:`Loaded progressive texture`,currentStep:a,totalSteps:i.length}),e()}).catch(e=>t(e))}))}}Q&&vn(`Progressive Loading: `+i.length),await Promise.all(i),Q&&vn(`Progressive Loading: done`),V.end(`export-usdz-textures`);let o=di.Global.Mask;di.Global.Set(ui.AR);let s=new Ro,c=new Rs(this.quickLookCompatible),l,u=[];this.interactive&&(u.push(new $c),u.push(new Vs),globalThis.NEEDLE_USE_RAPIER&&k.getComponentsInChildren(t,vt).length>0&&(this.physics?(l=new el,u.push(l)):T()&&console.warn(`USDZExporter: Physics export is disabled, but there are active Rigidbody components in the scene. They will not be exported.`)),u.push(new cl),u.push(new ll));let d=[c,...u,...this.extensions],f={self:this,exporter:s,extensions:d,object:t};V.report(`export-usdz`,`Invoking before-export`),this.dispatchEvent(new CustomEvent(`before-export`,{detail:f})),this.applyWebARSessionRoot(),this._previousTimeScale=this.context.time.timeScale,this.context.time.timeScale=0,V.report(`export-usdz`,`auto export animations and audio sources`);let p=[];this.autoExportAnimations&&p.push(...dl(t,c));let m=d.find(e=>e.extensionName===`Audio`);m&&this.autoExportAudioSources&&p.push(...fl(t,m)),s.debug=Q,s.pruneUnusedNodes=!hl;let h=Ka.instance.objs.map(e=>e.batchedMesh);s.keepObject=e=>{let t=!0,n=k.getComponent(e,B);return n&&!n.enabled&&(t=!1),t&&h.includes(e)&&(t=!1),t&&k.getComponentInParent(e,ki)&&(t=!1),t&&k.getComponentInParent(e,En)&&(t=!1),Q&&!t&&console.log(`USDZExporter: Discarding object`,e),t},s.beforeWritingDocument=()=>{if(T()&&c&&l){let e=c.animatedRoots;for(let t of e){let e=k.getComponentsInChildren(t,vt).filter(e=>e.enabled),n=k.getComponents(t,vi).filter(e=>e.enabled&&!e.isTrigger);(e.length>0||n.length>0)&&console.error(`An animated object has physics components in its child hierarchy. This can lead to undefined behaviour due to a bug in Apple's QuickLook (FB15925487). Remove the physics components from child objects or verify that you get the expected results.`,t)}}};let g=[];this.objectToExport&&this.quickLookCompatible&&this.interactive&&this.objectToExport.traverse(e=>{e.visible||g.push(e)});let _=d.find(e=>e.extensionName===`Behaviour`);this.interactive&&_&&g.length>0&&_.addBehavior(pl(g));let ee=!0;this.quickLookCompatible&&!this.interactive&&(ee=!1),this.anchoringType!==`plane`&&this.anchoringType!==`none`&&this.anchoringType!==`image`&&this.anchoringType!==`face`&&(this.anchoringType=`plane`),this.planeAnchoringAlignment!==`horizontal`&&this.planeAnchoringAlignment!==`vertical`&&this.planeAnchoringAlignment!==`any`&&(this.planeAnchoringAlignment=`horizontal`),V.report(`export-usdz`,`Invoking exporter.parse`);let te=await s.parse(this.objectToExport,{ar:{anchoring:{type:this.anchoringType},planeAnchoring:{alignment:this.planeAnchoringAlignment}},extensions:d,quickLookCompatible:this.quickLookCompatible,maxTextureSize:this.maxTextureSize,exportInvisible:ee}),ne=new Blob([te],{type:`model/vnd.usdz+zip`});this.revertWebARSessionRoot(),this.context.time.timeScale=this._previousTimeScale,V.report(`export-usdz`,`Invoking after-export`),this.dispatchEvent(new CustomEvent(`after-export`,{detail:f}));for(let e of p)k.destroy(e);return di.Global.Set(o),V.end(`export-usdz`),ne}openInQuickLook(e,t){let n=e instanceof Blob?URL.createObjectURL(e):e,r=this.buildQuicklookOverlay();Q&&console.log(`QuickLook Overlay`,r);let i=r.callToAction?encodeURIComponent(r.callToAction):``,a=r.checkoutTitle?encodeURIComponent(r.checkoutTitle):``,o=r.checkoutSubtitle?encodeURIComponent(r.checkoutSubtitle):``;this.link.href=n+`#callToAction=${i}&checkoutTitle=${a}&checkoutSubtitle=${o}&callToActionURL=${r.callToActionURL}`,this.lastCallback||(this.lastCallback=this.quicklookCallback.bind(this),this.link.addEventListener(`message`,this.lastCallback)),this.link.download=t+`.usdz`,this.link.click()}download(t,n){e.save(t,n)}static save(e,t){let n=document.createElement(`a`);n.style.display=`none`,document.body.appendChild(n),typeof e==`string`?n.href=e:n.href=URL.createObjectURL(e),n.download=t,n.click(),n.remove()}lastCallback;quicklookCallback(e){if(e?.data==`_apple_ar_quicklook_button_tapped`){Q&&kn(`Quicklook closed via call to action button`);var t=new CustomEvent(`quicklook-button-tapped`,{detail:this});if(this.dispatchEvent(t),!t.defaultPrevented){let e=new URLSearchParams(this.link.href);if(e){let t=e.get(`callToActionURL`);Q&&vn(`Quicklook url: `+t),t&&(zn()?globalThis.open(t,`_blank`):console.warn(`Quicklook closed: custom redirects require a Needle Engine Pro license: https://needle.tools/pricing`,t))}}}}buildQuicklookOverlay(){let e={};return this.customBranding&&Object.assign(e,this.customBranding),zn()||(console.log(`Custom Quicklook banner text requires pro license: https://needle.tools/pricing`),e.callToAction=`Close`,e.checkoutTitle=`🌵 Made with Needle`,e.checkoutSubtitle=`_`),(e.callToAction?.length||e.checkoutTitle?.length||e.checkoutSubtitle?.length)&&(e.callToAction?.length||(e.callToAction=`\0`),e.checkoutTitle?.length||(e.checkoutTitle=`\0`),e.checkoutSubtitle?.length||(e.checkoutSubtitle=`\0`)),this.dispatchEvent(new CustomEvent(`quicklook-overlay`,{detail:e})),e}static invertForwardMatrix=new b().makeRotationY(Math.PI);static invertForwardQuaternion=new Ue().setFromEuler(new ze(0,Math.PI,0));_rootSessionRootWasAppliedTo=null;_rootPositionBeforeExport=new r;_rootRotationBeforeExport=new Ue;_rootScaleBeforeExport=new r;getARScaleAndTarget(){if(!this.objectToExport)return{scale:1,_invertForward:!1,target:this.gameObject,sessionRoot:null};let e=k.findObjectOfType(X),t=k.getComponentInParent(this.objectToExport,xc);t||=k.getComponentInChildren(this.objectToExport,xc);let n=1,r=!1,i=this.objectToExport;return e?n=e.arScale:t&&(n=t.arScale,r=t.invertForward),{scale:1/n,_invertForward:r,target:i,sessionRoot:t?.gameObject??null}}applyWebARSessionRoot(){if(!this.objectToExport)return;let{scale:t,_invertForward:n,target:r,sessionRoot:i}=this.getARScaleAndTarget(),a=i?.matrixWorld.clone().invert();this._rootSessionRootWasAppliedTo=r,this._rootPositionBeforeExport.copy(r.position),this._rootRotationBeforeExport.copy(r.quaternion),this._rootScaleBeforeExport.copy(r.scale),r.scale.multiplyScalar(t),n&&r.quaternion.multiply(e.invertForwardQuaternion),r.updateMatrix(),r.updateMatrixWorld(!0),i&&a&&r.matrix.premultiply(a)}revertWebARSessionRoot(){if(!this.objectToExport||!this._rootSessionRootWasAppliedTo)return;let e=this._rootSessionRootWasAppliedTo;e.position.copy(this._rootPositionBeforeExport),e.quaternion.copy(this._rootRotationBeforeExport),e.scale.copy(this._rootScaleBeforeExport),e.updateMatrix(),e.updateMatrixWorld(!0),this._rootSessionRootWasAppliedTo=null}createQuicklookButton(){let e=sc.getOrCreate().createQuicklookButton();return e.parentNode||this.context.menu.appendChild(e),e}};Z([E(S)],$.prototype,`objectToExport`,void 0),Z([E()],$.prototype,`autoExportAnimations`,void 0),Z([E()],$.prototype,`autoExportAudioSources`,void 0),Z([E()],$.prototype,`exportFileName`,void 0),Z([E(URL)],$.prototype,`customUsdzFile`,void 0),Z([E(gl)],$.prototype,`customBranding`,void 0),Z([E()],$.prototype,`anchoringType`,void 0),Z([E()],$.prototype,`maxTextureSize`,void 0),Z([E()],$.prototype,`planeAnchoringAlignment`,void 0),Z([E()],$.prototype,`interactive`,void 0),Z([E()],$.prototype,`physics`,void 0),Z([E()],$.prototype,`allowCreateQuicklookButton`,void 0),Z([E()],$.prototype,`quickLookCompatible`,void 0),nc({find:()=>Zt($),create:()=>new $});var _l=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},vl=class extends N{objectBounds=!1;color;isGizmo=!0;_gizmoObject=null;_boxHelper=null;onEnable(){this.isGizmo&&!yn||(this._gizmoObject||(this.objectBounds?this._gizmoObject=new ge(this.gameObject,this.color??16776960):(this.objectBounds=!1,this._gizmoObject=pn(this.color??16776960))),this.objectBounds?(this.scene.add(this._gizmoObject),this._boxHelper=this._gizmoObject,this.startCoroutine(this.syncObjectBounds(),Wn.OnBeforeRender)):this.gameObject.add(this._gizmoObject))}onDisable(){this._gizmoObject&&this.gameObject.remove(this._gizmoObject)}*syncObjectBounds(){for(;this._boxHelper;)this._boxHelper?.update(),yield}};_l([E()],vl.prototype,`objectBounds`,void 0),_l([E(n)],vl.prototype,`color`,void 0),_l([E()],vl.prototype,`isGizmo`,void 0);var yl=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},bl=class extends N{get activeAndEnabled(){return!0}side=`none`;controller=!0;hands=!1;controlVisibility=!0;useGripSpace=!1;resetTransformAfterXRSession=!0;_startPosition=new r;_startRotation=new Ue;_startScale=new r;onEnterXR(e){this._startPosition.copy(this.gameObject.position),this._startRotation.copy(this.gameObject.quaternion),this._startScale.copy(this.gameObject.scale)}onUpdateXR(e){if(!this.enabled)return;let t=e.xr.getController(this.side);if(t){if(t.hand&&!this.hands){this.controlVisibility&&(this.gameObject.visible=!1);return}else if(!this.controller){this.controlVisibility&&(this.gameObject.visible=!1);return}this.controlVisibility&&(this.gameObject.visible=!0),this.useGripSpace||t.targetRayMode===`transient-pointer`?(this.gameObject.worldPosition=t.gripWorldPosition,this.gameObject.worldQuaternion=t.gripWorldQuaternion,this.gameObject.worldScale=wn(t.xr.rigScale,t.xr.rigScale,t.xr.rigScale).multiply(this._startScale)):(this.gameObject.worldPosition=t.rayWorldPosition,this.gameObject.worldQuaternion=t.rayWorldQuaternion,this.gameObject.worldScale=wn(t.xr.rigScale,t.xr.rigScale,t.xr.rigScale).multiply(this._startScale))}}onLeaveXR(e){this.resetTransformAfterXRSession&&(this.gameObject.position.copy(this._startPosition),this.gameObject.quaternion.copy(this._startRotation),this.gameObject.scale.copy(this._startScale))}};yl([E()],bl.prototype,`side`,void 0),yl([E()],bl.prototype,`controller`,void 0),yl([E()],bl.prototype,`hands`,void 0),yl([E()],bl.prototype,`controlVisibility`,void 0),yl([E()],bl.prototype,`useGripSpace`,void 0),yl([E()],bl.prototype,`resetTransformAfterXRSession`,void 0);function xl(e,t){let n=e.xr.getFrame();if(!n)return console.warn(`No XRFrame available`),!1;let r=n.session.enabledFeatures;if(r&&!r.some(e=>e===`camera-access`))return console.error(`No camera feed available - please request the 'camera-access' feature before starting WebXR or add the ARCameraBackground component to your scene. - -Example to request camera-access in global scope: -NeedleXRSession.onSessionRequestStart(evt => { - evt.init.optionalFeatures = evt.init.optionalFeatures || []; - evt.init.optionalFeatures.push('camera-access'); -}); -`),T()&&Nn(`No camera feed available - please request the 'camera-access' feature before starting WebXR or add the ARCameraBackground component to your scene`),!1;let i=n.getViewerPose(e.xr.getReferenceSpace());if(i)for(let r of i.views)if(`camera`in r&&r.camera){let i=e.xr.getBinding();if(i||=new XRWebGLBinding(n.session,e.getContext()),i){let n=null;if(`getCameraImage`in i){Cl(e,t);let a=e.properties.get(t);if(a)return n=i.getCameraImage(r.camera),a.__webglTexture=n,!0;console.warn(`No texture properties found for target texture`)}}else console.error(r.camera,e.xr)}else console.error(`NO CAMERA IN VIEW`);else console.error(e.xr.getReferenceSpace(),n);return!1}var Sl=new WeakMap;function Cl(e,t){let n=Sl.get(t)||new WeakSet;if(n.has(e))return;n.add(e),Sl.set(t,n),console.debug(`Initialize texture for camera feed`);let r=new v,i=new He,a=new ne;a.add(new x(i,r));let o=new be;r.map=t,e.render(a,o)}function wl(e,t,n,r=`image/webp`,i){return Tl({context:e,width:t,height:n,mimeType:r,camera:i})}function Tl(e){e||={};let{transparent:t=!1}=e,{mimeType:r,context:i,width:a,height:o,camera:s}=e;if(!i&&(i=Ht.Current,!i))return console.error(`Can not save screenshot: No needle-engine context found or provided.`),null;if(!s&&(s=i.mainCamera,!s))return console.error(`No camera found`),null;let c=i.renderer,l=c.xr.enabled&&c.xr.isPresenting;if(l&&i.currentFrameEvent!=Wn.EarlyUpdate)return console.warn(`Screenshot: defer to access XR frame`),new Promise(t=>{st(n=>{t(Tl(e))},Wn.EarlyUpdate,{once:!0})});let d=c.domElement,f=d.width,p=d.height;a||=f,o||=p;let m=a,h=o,g=window.devicePixelRatio||1,_=1;_=i.devicePixelRatio===`auto`||i.devicePixelRatio===`manual`?1:i.devicePixelRatio/window.devicePixelRatio,g*=_,a/=g,o/=g,a=Math.floor(a),o=Math.floor(o),c.xr.isPresenting&&c.xr.getFrame();let ee=c.xr.enabled;c.xr.enabled=!1,c.xr.isPresenting=!1,d.style.width=`${a}px`,d.style.height=`${o}px`;let te=c.getRenderTarget(),ne=c.getClearColor(new n),v=c.getClearAlpha(),re=i.scene.background,ie=`aspect`in s?s.aspect:null;try{let n=e.render_events!==!1,f=[];n&&(at(i.scene,B,f),f.forEach(e=>{if(e?.onBeforeRender(),e.isInstancingActive&&e.instances)for(let t=0;te.onAfterRender()),!r&&`download_filename`in e&&e.download_filename)switch(e.download_filename.split(`.`).pop()?.toLowerCase()){case`png`:r=`image/png`;break;case`jpg`:case`jpeg`:r=`image/jpeg`;break;case`webp`:r=`image/webp`;break}if(t&&e.trim===!0){let e=El(_);e&&(_=e)}if(`type`in e){if(e.type===`texture`)return g?(e.target&&(e.target.image=g?.texture.image,e.target.needsUpdate=!0),g.texture.offset.set(0,-1),g.texture.needsUpdate=!0,g.texture):(console.error(`No target texture found`),null);if(e.type===`blob`)return new Promise((e,t)=>{_.toBlob(t=>{e(t)},r)});if(e.type===`share`)return new Promise((t,n)=>{_.toBlob(n=>{if(n&&`share`in navigator){let i=`file_type`in e&&e.file_type||r;r||(i=`image/png`);let a=i?.split(`/`)[1]||`png`,o=new File([n],`filename`in e&&e.filename||`screenshot.${a}`,{type:i});return navigator.share({title:`title`in e?e.title:void 0,text:`text`in e?e.text:void 0,url:`url`in e?e.url:void 0,files:[o]}).catch(e=>{console.warn(`User cancelled share`,e.message)}).finally(()=>{t({blob:n,shared:!0})})}return{blob:n,shared:!1}},r)})}let ee=_.toDataURL(r);if(`download_filename`in e&&e.download_filename){let t=e.download_filename;if(A.isMobileDevice()&&typeof window<`u`){let e=t+`_screenshots`,n=t.split(`.`),r=n.pop()?.toLowerCase(),i=0;localStorage.getItem(e)&&(i=parseInt(sessionStorage.getItem(e)||`0`)),i>0&&(t=`${n.join()}-${i}.${r}`),i+=1,sessionStorage.setItem(e,i.toString())}Ol(ee,t)}return ee}finally{c.setRenderTarget(te),i.scene.background=re,c.setSize(f,p,!1),c.setClearColor(ne,v),ie!=null&&s instanceof be&&(s.aspect=ie,s.updateProjectionMatrix()),c.xr.enabled=ee,c.xr.isPresenting=l,l||i.updateSize(!0)}return null}function El(e){if(!(`document`in globalThis))return null;let t=document.createElement(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);if(!n)return null;n.drawImage(e,0,0);let r=t.width,i=t.height,a=n.getImageData(0,0,r,i).data,o=i,s=r,c=0,l=0;for(let e=0;el&&(l=t),ec&&(c=e));let u=l-s+1,d=c-o+1,f=document.createElement(`canvas`),p=f.getContext(`2d`);return p?(f.width=u,f.height=d,p.drawImage(t,s,o,u,d,0,0,u,d),f):null}var Dl=null;function Ol(e,t){if(e){if(!e.startsWith(`data:image`)){console.error(`Can not save image: Data url is not an image`,e);return}Dl||=document.createElement(`a`),Dl.href=e,Dl.download=t,Dl.click()}}var kl;(function(e){let t=null,n=null,r=null,i=null,a=null;function o(e){let{renderer:o,width:s,height:l}=e,d=o.xr.enabled,f=o.getRenderTarget(),p=o.autoClear,m=s,h=l,g=s/l;(!r||r.width!==m||r.height!==h)&&(r??=new u(m,h,{colorSpace:ue}),r.width=m,r.height=h,r.samples=4,r.texture.repeat.y=-1,r.texture.offset.y=1),(!a||a.width!==m||a.height!==h)&&(a=document.createElement(`canvas`),a.width=m,a.height=h,a.style.position=`fixed`,a.style.top=`0px`,a.style.right=`0px`,a.style.width=`300px`,a.style.height=`${300/g}px`,a.style.zIndex=`1000`,a.style.pointerEvents=`none`,a.style.opacity=`1.0`,a.style.willChange=`contents`),t||=c({defines:{DECODE_VIDEO_TEXTURE:!0}}),n||=c(),i||=new xe,o.xr.updateCamera(e.camera),o.xr.enabled=!1,o.autoClear=!1,o.clear(),o.setSize(m,h),o.setRenderTarget(r),xl(e.renderer,i)||console.error(`Could not update texture from XR frame`);let _=k.findObjectOfType(Ml);return _?_.setTexture(i):(t.setTexture(i),o.render(t,e.camera)),o.clearDepth(),o.setSize(m,h),o.render(e.scene,e.camera),o.setRenderTarget(null),n.setTexture(r.texture),o.render(n,e.camera),a.getContext(`2d`,{alpha:!1}).drawImage(o.domElement,0,0,a.width,a.height),o.setRenderTarget(f),o.xr.enabled=d,o.autoClear=p,a}e.compositeWithCameraImage=o;function c(e){let t=e?.material||new Re({name:`BackgroundMaterial`,uniforms:s.clone(ye.background.uniforms),vertexShader:ye.background.vertexShader,fragmentShader:` -uniform sampler2D t2D; -varying vec2 vUv; - -void main() { - - vec4 texColor = texture2D( t2D, vUv ); - - #ifdef DECODE_VIDEO_TEXTURE - - // inline sRGB decode (TODO: Remove this code when https://crbug.com/1256340 is solved) - texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w ); - - #endif - - gl_FragColor = texColor; - #include - #include -} -`,defines:e?.defines,side:0,depthTest:!1,depthWrite:!1,fog:!1});Object.defineProperty(t,`map`,{get:function(){return this.threeTexture}});let n=new x(new He(2,2),t);return Qe(n,!1),n.geometry.deleteAttribute(`normal`),n.renderOrder=-1e6,n.setTexture=function(e){t.uniforms.t2D.value=e},n}e.makeFullscreenPlane=c})(kl||={});var Al=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},jl=D(`debugarcamera`),Ml=class extends N{onBeforeXR(e,t){e===`immersive-ar`&&(t.optionalFeatures=t.optionalFeatures||[],t.optionalFeatures.push(`camera-access`),jl&&console.warn(`Requesting camera-access`))}onEnterXR(e){e.xr.mode===`immersive-ar`&&(this.backgroundPlane&&(this.context.scene.add(this.backgroundPlane),this.backgroundPlane.visible=!1),this.backgroundPlane&&this.context.scene.add(this.backgroundPlane),this.context.pre_render_callbacks.push(this.preRender))}onLeaveXR(e){this.backgroundPlane&&this.backgroundPlane.removeFromParent();let t=this.context.pre_render_callbacks.indexOf(this.preRender);t>=0&&this.context.pre_render_callbacks.splice(t,1)}backgroundTint=new tn(1,1,1,1);get background(){return this.backgroundPlane}backgroundPlane;threeTexture;forceTextureInitialization=function(){let e=new v,t=new He,n=new ne;n.add(new x(t,e));let r=new be;return function(t,i){e.map=i,t.render(n,r),jl&&console.warn(`Force texture initialization`)}}();preRender=()=>{if(!(!this||!this.gameObject)&&this.context.renderer.xr.getFrame()){if(!this.threeTexture&&this.context.renderer&&(this.threeTexture=new xe,this.forceTextureInitialization(this.context.renderer,this.threeTexture)),this.backgroundPlane===void 0){let e=this.backgroundTint;this.backgroundPlane=kl.makeFullscreenPlane({material:new Re({name:`BackgroundMaterial`,uniforms:{...s.clone(ye.background.uniforms),tint:{value:new C(e.r,e.g,e.b,e.a)}},vertexShader:ye.background.vertexShader,fragmentShader:Nl,side:2,depthTest:!1,depthWrite:!1,fog:!1})})}this.backgroundPlane.parent!==this.scene&&this.scene.add(this.backgroundPlane),this.backgroundPlane.material instanceof Re&&this.backgroundPlane.material.uniforms.tint.value.set(this.backgroundTint.r,this.backgroundTint.g,this.backgroundTint.b,this.backgroundTint.a),this.updateFromFrame()}};onBeforeRender(e){this.updateFromFrame()}updateFromFrame(){this.threeTexture&&this.context.xr?.mode===`immersive-ar`&&(xl(this.context.renderer,this.threeTexture),this.setTexture(this.threeTexture))}setTexture(e){this.backgroundPlane&&(this.threeTexture=e,this.backgroundPlane.setTexture(this.threeTexture),this.backgroundPlane.visible=!0)}};Al([E(tn)],Ml.prototype,`backgroundTint`,void 0);var Nl=` -uniform sampler2D t2D; -uniform vec4 tint; - -varying vec2 vUv; - -void main() { - - vec4 texColor = texture2D( t2D, vUv ); - texColor.w = 1.0; - - // inline sRGB decode - texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w ); - - gl_FragColor = texColor * tint; - - #include - #include -} -`,Pl=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Fl=D(`debugimagetracking`),Il=class e{get url(){return this._trackedImage.image??``}get widthInMeters(){return this._trackedImage.widthInMeters??void 0}get bitmap(){return this._bitmap}get model(){return this._trackedImage}measuredSize;state;getPosition(e){return this.ensureTransformData(),e.copy(this._position),e}getQuaternion(e){return this.ensureTransformData(),e.copy(this._rotation),e}applyToObject(e,t=void 0){this.ensureTransformData();let n=e.position.distanceToSquared(this._position)/.05+e.quaternion.angleTo(this._rotation)/.05;t&&(t*=Math.max(1,n)),t===void 0||t>=1?(e.position.copy(this._position),e.quaternion.copy(this._rotation)):(t=Math.max(0,Math.min(1,t)),e.position.lerp(this._position,t),e.quaternion.slerp(this._rotation,t))}static _positionBuffer=new qe(()=>new r,20);static _rotationBuffer=new qe(()=>new Ue,20);_position;_rotation;ensureTransformData(){if(!this._position){this._position=e._positionBuffer.get(),this._rotation=e._rotationBuffer.get();let t=this._pose.transform,n=j.active.convertSpace(t);this._position.copy(n?.position),this._rotation.copy(n?.quaternion)}}_trackingComponent;_trackedImage;_bitmap;_pose;constructor(e,t,n,r,i,a){this._trackingComponent=e,this._trackedImage=t,this._bitmap=n,this.measuredSize=r,this.state=i,this._pose=a}},Ll=class{constructor(e){this.image=e.url,this.widthInMeters=e.widthInMeters,e.object instanceof S?this.object=new w({asset:e.object}):this.object=e.object,e.createObjectInstance!==void 0&&(this.createObjectInstance=e.createObjectInstance),e.imageDoesNotMove!==void 0&&(this.imageDoesNotMove=e.imageDoesNotMove),e.hideWhenTrackingIsLost!==void 0&&(this.hideWhenTrackingIsLost=e.hideWhenTrackingIsLost)}image;widthInMeters=.25;object;createObjectInstance=!1;imageDoesNotMove=!1;hideWhenTrackingIsLost=!0;getNameFromUrl(){if(this.image){let e=this.image.split(`/`);return e[e.length-1]}return null}};Pl([E(URL)],Ll.prototype,`image`,void 0),Pl([E()],Ll.prototype,`widthInMeters`,void 0),Pl([E(w)],Ll.prototype,`object`,void 0),Pl([E()],Ll.prototype,`createObjectInstance`,void 0),Pl([E()],Ll.prototype,`imageDoesNotMove`,void 0),Pl([E()],Ll.prototype,`hideWhenTrackingIsLost`,void 0);var Rl=class{exporter;component;isImageTrackingExtension=!0;get extensionName(){return`image-tracking`}constructor(e,t){this.exporter=e,this.component=t,Fl&&console.log(this),this.exporter.anchoringType=`image`}shouldExport=!0;filename=null;imageModel=null;onBeforeBuildDocument(e){this.shouldExport=this.exporter.extensions.filter(e=>{let t=e;return t.isImageTrackingExtension&&t.component.activeAndEnabled&&t.component.trackedImages?.length>0}).indexOf(this)===0,this.shouldExport&&this.component.trackedImages?.length>1&&(Fl||T())&&(kn(`USDZ: Only one tracked image is supported.`),console.warn(`USDZ: Only one tracked image is supported. Will choose the first one in the trackedImages list`))}onAfterHierarchy(e,t){if(!this.shouldExport)return;let n=A.getiOSVersion(),r=(n?parseInt(n.split(`.`)[0]):18)>=18?1:100;t.beginBlock(`def Preliminary_ReferenceImage "AnchoringReferenceImage"`),t.appendLine(`uniform asset image = @image_tracking/`+this.filename+`@`),t.appendLine(`uniform double physicalWidth = `+(this.imageModel.widthInMeters*r).toFixed(8)),t.closeBlock()}async onAfterSerialize(e){if(!this.shouldExport)return;let t=this.imageModel,n=await(await(await $o(Bl.get(t.image))).convertToBlob({type:`image/png`})).arrayBuffer();e.files[`image_tracking/`+this.filename]=new Uint8Array(n)}onExportObject(e,t,n){if(!this.shouldExport)return;let i=this.component;if(!i||!i.trackedImages?.length||!i.activeAndEnabled)return;let a=i.trackedImages[0];if(a.object?.asset===e){this.imageModel=a,this.filename=a.getNameFromUrl()||`marker.png`;let{scale:n,target:i}=this.exporter.getARScaleAndTarget(),o=e,s=new b;if(e!==i)for(;o&&o.parent&&o.parent!==i;)o=o.parent,s.premultiply(o.matrix);let c=s.clone().invert();t.setMatrix(c.scale(new r(n,n,n)))}}},zl=class extends N{setPrimaryImage(e){let t=this.trackedImages.indexOf(e);if(t>=0){let n=this.trackedImages[0];n!==e&&(this.trackedImages[0]=e,this.trackedImages[t]=n)}else console.warn(`[WebXRImageTracking] Can not set primary: image not found in 'trackedImages' array ${e.image}`)}addImage(e,t=!1){this.trackedImages.includes(e)||(this.trackedImages.push(e),Hl(e.image)),t&&this.setPrimaryImage(e)}trackedImages=[];smooth=!0;trackedImageIndexMap=new Map;get supported(){return this._supported}_supported=!0;awake(){if(Fl&&console.log(this),this.trackedImages)for(let e of this.trackedImages)e.image&&Hl(e.image)}onEnable(){$.beforeExport.addEventListener(this.onBeforeUSDZExport)}onDisable(){$.beforeExport.removeEventListener(this.onBeforeUSDZExport)}onBeforeUSDZExport=e=>{this.activeAndEnabled&&this.trackedImages?.length&&e.exporter.extensions.push(new Rl(e.exporter,this))};onBeforeXR(e,t){if(this.trackedImages){t.optionalFeatures=t.optionalFeatures||[],t.optionalFeatures.includes(`image-tracking`)||t.optionalFeatures.push(`image-tracking`),t.trackedImages||=[];for(let e of this.trackedImages)if(e.image?.length&&e.widthInMeters>0){let n=Bl.get(e.image);n&&(this.trackedImageIndexMap.set(t.trackedImages.length,e),t.trackedImages.push({image:n,widthInMeters:e.widthInMeters}))}}}onEnterXR(e){if(this.trackedImages){for(let e of this.trackedImages)if(e.object?.asset){let t=e.object.asset;t.userData||={};let n={visible:t.visible,parent:t.parent,matrix:t.matrix.clone()};t.userData[`image-tracking`]=n}}for(let e of this.imageToObjectMap.values())e.frames=0}onLeaveXR(e){if(!this.supported&&A.isAndroidDevice()&&kn(this.webXRIncubationsWarning),this.trackedImages){for(let e of this.trackedImages)if(e.object?.asset){let t=e.object.asset;if(t.userData){let e=t.userData[`image-tracking`];e&&(t.visible=e.visible,e.parent?.add(t),t.matrix.copy(e.matrix),t.matrix.decompose(t.position,t.quaternion,t.scale)),delete t.userData[`image-tracking`]}}}}imageToObjectMap=new Map;currentImages=[];webXRIncubationsWarning=`Image tracking is currently not supported on this device. On Chrome for Android, you can enable the chrome://flags/#webxr-incubations flag.`;onUpdateXR(e){this.currentImages.length=0;let t=e.xr.frame;if(!t)return;if(!(`getImageTrackingResults`in t)){this.didPrintWarning||(this.didPrintWarning=!0,console.log(this.webXRIncubationsWarning)),this._supported=!1,kn(this.webXRIncubationsWarning);return}else if(e.xr.session.enabledFeatures?.includes(`image-tracking`)===!1)return;else if(t.session&&typeof t.getImageTrackingResults==`function`){let e=t.getImageTrackingResults();if(e.length>0){let n=this.context.renderer.xr.getReferenceSpace();if(n){for(let r of e){let e=r.trackingState,i=r.index,a=this.trackedImageIndexMap.get(i);if(a){let i=t.getPose(r.imageSpace,n),o=new Il(this,a,r.image,r.measuredSize,e,i);this.currentImages.push(o)}else Fl&&console.warn(`No tracked image for index`,i)}if(this.currentImages.length>0)try{this.dispatchEvent(new CustomEvent(`image-tracking`,{detail:this.currentImages})),this.onImageTrackingUpdate(this.currentImages)}catch(e){console.error(e)}}}}let n=1e3;for(let[e,t]of this.imageToObjectMap){if(!t.object||!e||e.hideWhenTrackingIsLost===!1)continue;let r=!1;for(let i of this.currentImages)if(i.model===e){let a=Date.now()-t.lastTrackingTime;if(Fl&&vn(e.image+`, State: `+i.state+(e.imageDoesNotMove?` (static)`:``)+(a<=n?` (hysteresis)`:``)),e.imageDoesNotMove||i.state===`tracked`||a<=n){r=!0;break}}r||k.setActive(t.object,!1)}}onImageTrackingUpdate=e=>{let t=j.active;if(t)for(let n of e){let e=n.model,r=n.state===`tracked`;if(!e.object)continue;let i=this.imageToObjectMap.get(e);if(i===void 0)i={object:null,frames:0,lastTrackingTime:Date.now()},this.imageToObjectMap.set(e,i),e.object.loadAssetAsync().then(r=>{if(e.createObjectInstance&&r&&(r=k.instantiate(r)),r){i.object=r;for(let e of r.getComponentsInChildren(B))e.setInstancingEnabled(!1);t.rig?(t.rig.gameObject.add(r),n.applyToObject(r),r.activeSelf||k.setActive(r,!0)):console.warn(`XRImageTracking: missing XRRig`)}});else{if(i.frames++,r&&(i.lastTrackingTime=Date.now()),e.imageDoesNotMove&&i.frames>10||!i.object)continue;t.rig&&(t.rig.gameObject.add(i.object),n.applyToObject(i.object,this.smooth?this.context.time.deltaTimeUnscaled*3:void 0),i.object.activeSelf||k.setActive(i.object,!0))}}}};Pl([E(Ll)],zl.prototype,`trackedImages`,void 0),Pl([E()],zl.prototype,`smooth`,void 0);var Bl=new Map,Vl=new Map;async function Hl(e){if(Bl.has(e))return Vl.has(e)?Vl.get(e):Promise.resolve(!0);let t=new Promise(t=>{Bl.set(e,null);let n=document.createElement(`img`);n.src=e,n.addEventListener(`load`,async()=>{let r=await createImageBitmap(n);Bl.set(e,r),t(!0)})});return Vl.set(e,t),t.finally(()=>{Vl.delete(e)}),t}var Ul=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Wl=D(`debugplanetracking`),Gl=class extends N{dataTemplate;occluder=!0;initiateRoomCaptureIfNoData=!0;usePlaneData=!0;useMeshData=!0;runInVR=!0;get trackedPlanes(){return this._allPlanes.values()}get trackedMeshes(){return this._allMeshes.values()}onBeforeXR(e,t){e===`immersive-vr`&&!this.runInVR||(t.optionalFeatures=t.optionalFeatures||[],this.usePlaneData&&!t.optionalFeatures.includes(`plane-detection`)&&t.optionalFeatures.push(`plane-detection`),this.useMeshData&&!t.optionalFeatures.includes(`mesh-detection`)&&t.optionalFeatures.push(`mesh-detection`))}onEnterXR(e){for(let e of this._allPlanes.keys())this.removeData(e,this._allPlanes);for(let e of this._allMeshes.keys())this.removeData(e,this._allMeshes)}onLeaveXR(e){for(let e of this._allPlanes.keys())this.removeData(e,this._allPlanes);for(let e of this._allMeshes.keys())this.removeData(e,this._allMeshes)}onUpdateXR(e){if(!this.runInVR&&e.xr.isVR)return;let t=e.xr.rig;if(!t){console.warn(`No XR rig found, cannot parent tracked planes to it`);return}let n=e.xr.frame;if(!this.context.renderer.xr.getReferenceSpace())return;let r=n.detectedPlanes,i=n.detectedMeshes,a=r!==void 0&&r.size>0,o=i!==void 0&&i.size>0;if(this.initiateRoomCaptureIfNoData&&(!a&&!o&&this.firstTimeNoPlanesDetected<-10&&(this.firstTimeNoPlanesDetected=Date.now()),(a||o)&&(this.firstTimeNoPlanesDetected=-1),this.firstTimeNoPlanesDetected>0&&Date.now()-this.firstTimeNoPlanesDetected>2500&&`initiateRoomCapture`in n.session&&(n.session.initiateRoomCapture(),this.firstTimeNoPlanesDetected=-1)),r!==void 0&&this.processFrameData(e.xr,t.gameObject,n,r,this._allPlanes),i!==void 0&&this.processFrameData(e.xr,t.gameObject,n,i,this._allMeshes),Wl){let e=this.context.mainCameraComponent.gameObject.worldPosition;for(let t of this._allPlanes.values())!t.mesh||!t.mesh.visible||(this.bounds.makeEmpty(),t.mesh.traverse(e=>{e instanceof x&&this.bounds.expandByObject(e)}),this.bounds.getCenter(this.center),this.labelOffset.copy(e).sub(this.center).normalize().multiplyScalar(.1),Ln.DrawLabel(this.center.add(this.labelOffset),(t.xrData.semanticLabel||`plane`).toUpperCase()+` -`+t.xrData.lastChangedTime.toFixed(2),.02))}}bounds=new de;center=new r;labelOffset=new r;removeData(e,t){let n=t.get(e);if(!n)return;t.delete(e),Wl&&console.log(`Plane no longer tracked, id=`+n.id),n.mesh&&(n.mesh.removeFromParent(),n.mesh.traverse(e=>{let t=e.userData.normalsHelper;t?(t.dispose(),t.removeFromParent()):Wl&&console.warn(`No normals helper found for mesh`,n.mesh)}),dn(n.mesh,!0,!0));let r=new CustomEvent(`plane-tracking`,{detail:{type:`plane-removed`,context:n}});this.dispatchEvent(r)}_dataId=1;_allPlanes=new Map;_allMeshes=new Map;firstTimeNoPlanesDetected=-100;makeOccluder=(e,t,n=!1)=>{if(t){if(t instanceof Array){for(let r of t)this.makeOccluder(e,r,n);return}!n&&!t.name.toLowerCase().includes(`occlu`)||(t.colorWrite=!1,t.depthTest=!0,t.depthWrite=!0,t.transparent=!1,t.polygonOffset=!0,t.polygonOffsetFactor=1,t.polygonOffsetUnits=.1,e.renderOrder=-1e3)}};processFrameData(e,t,n,r,i){let a=this.context.renderer.xr.getReferenceSpace();if(a){for(let e of i.keys())r.has(e)||this.removeData(e,i);for(let e of r){let r=`planeSpace`in e?e.planeSpace:`meshSpace`in e?e.meshSpace:void 0;if(!r)continue;let o=n.getPose(r,a),s;if(i.has(e)){let t=i.get(e);if(s=t.mesh,t.timestamp{if(!(e instanceof x))return;let t=e.userData.normalsHelper;t&&t.update()}))}let n=new CustomEvent(`plane-tracking`,{detail:{type:`plane-updated`,context:t}});this.dispatchEvent(n)}}else{if(!this.dataTemplate){let e=new x;Wl?e.material=new Le:this.occluder?(e.material=new v,this.makeOccluder(e,e.material,!0)):e.material=new v({wireframe:!0,opacity:.5,transparent:!0,color:3355443}),this.dataTemplate=new w(``,``,e)}if(!this.dataTemplate.asset)this.dataTemplate.loadAssetAsync();else{let n=k.instantiate(this.dataTemplate.asset);if(n.name=`xr-tracked-plane`,s=n,Dt(n,!1),n instanceof x)Nt(n.geometry),n.geometry=this.createGeometry(e),this.makeOccluder(n,n.material,this.occluder&&!this.dataTemplate);else if(n instanceof ve)for(let t of n.children)t instanceof x&&(Nt(t.geometry),t.geometry=this.createGeometry(e),this.makeOccluder(t,t.material,this.occluder&&!this.dataTemplate));let r=n.getComponent(xi);if(r){let t=n;r.sharedMesh=t,r.convex=this.checkIfContextShouldBeConvex(t,e),r.onDisable(),r.onEnable()}n.matrixAutoUpdate=!1,n.matrixWorldNeedsUpdate=!0,t.add(n);let a={id:this._dataId++,xrData:e,timestamp:e.lastChangedTime,mesh:n,collider:r};i.set(e,a),Wl&&console.log(`New plane detected, id=`+a.id,a,{hasCollider:!!r,isGroup:n instanceof ve});try{let e=new CustomEvent(`plane-tracking`,{detail:{type:`plane-added`,context:a}});this.dispatchEvent(e)}catch(e){console.error(e)}}}s&&(o?(s.visible=!0,s.matrix.fromArray(o.transform.matrix),s.matrix.premultiply(this._flipForwardMatrix)):s.visible=!1,Wl&&s.traverse(e=>{if(e instanceof x)if(e.userData.normalsHelper)e.userData.normalsHelper.update();else{let t=new ir(e,.05,255);t.layers.disableAll(),t.layers.set(2),this.context.scene.add(t),e.userData.normalsHelper=t}}))}}}_flipForwardMatrix=new b().makeRotationY(Math.PI);checkIfContextShouldBeConvex(e,t){if(!e)return!0;if(e){let n=new de;n.expandByObject(e);let i=new r;n.getSize(i);let a=!0;return i.x>2&&i.y>2&&i.z>1.5&&(a=!1),a&&`semanticLabel`in t&&t.semanticLabel===`wall`&&(a=!0),a}return!0}createGeometry(e){return`polygon`in e?this.createPlaneGeometry(e.polygon):`vertices`in e&&`indices`in e?this.createMeshGeometry(e.vertices,e.indices):new ie}_verticesCache=new Map;createMeshGeometry(e,t){let n=e.toString()+`_`+t.toString();if(this._verticesCache.has(n))return this._verticesCache.get(n);let r=new ie;r.setIndex(new Ge(t,1)),r.setAttribute(`position`,new Ge(e,3));let i=[];for(let t=0;t{n.push(e.x,e.y,e.z),i.push(e.x,e.z)});let a=new r(n[0],n[1],n[2]),o=new r(n[3],n[4],n[5]),s=new r(n[6],n[7],n[8]),c=new r,l=new r;c.subVectors(o,a),l.subVectors(s,a),c.cross(l),c.normalize();let u=[];for(let e=0;e=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ql=D(`debugwebxr`),Jl=class extends N{priority=0;get isActive(){return this.activeAndEnabled&&this.gameObject.visible}setAsActiveXRRig(){j.active?.setRigActive(this)}setPriority(e){this.priority=e}awake(){if(ql){let e=new S;e.position.y+=.5,this.gameObject.add(e);let t=e.addNewComponent(vl);t&&(t.isGizmo=!1);let n=new _e(.5);this.gameObject.add(n)}}isXRRig(){return!0}supportsXR(e){return!0}_startScale;onEnterXR(e){this._startScale=this.gameObject.scale.clone(),e.xr.addRig(this),ql&&console.log(`WebXR: add Rig`,this.name,this.priority)}onLeaveXR(e){e.xr.removeRig(this),this._startScale&&this.gameObject&&this.gameObject.scale.copy(this._startScale)}};Kl([E()],Jl.prototype,`priority`,void 0);export{Ls as $,ei as $t,kc as A,Ba as At,Ws as B,bi as Bt,Gc as C,qa as Ct,Rc as D,Va as Dt,Lc as E,Ga as Et,mc as F,ma as Ft,Js as G,gi as Gt,qs as H,vi as Ht,_c as I,oa as It,Gs as J,di as Jt,Xs as K,mi as Kt,vc as L,Hi as Lt,Ec as M,xa as Mt,Tc as N,Sa as Nt,zc as O,Wa as Ot,xc as P,ba as Pt,Rs as Q,ni as Qt,gc as R,ki as Rt,Jc as S,$a as St,Bc as T,za as Tt,Ks as U,xi as Ut,Us as V,Si as Vt,Ys as W,yi as Wt,Qs as X,oi as Xt,$s as Y,ui as Yt,Vs as Z,ai as Zt,cl as _,po as _t,Il as a,Gr as an,js as at,$c as b,B as bt,Ol as c,Br as cn,Mo as ct,bl as d,Pr as dn,Ro as dt,qr as en,K as et,vl as f,I as fn,Xo as ft,al as g,ho as gt,ll as h,_r as hn,V as ht,Ll as i,Wr as in,Ms as it,Dc as j,Ma as jt,Nc as k,Ua as kt,wl as l,zr as ln,jo as lt,$ as m,xr as mn,wo as mt,Gl as n,Zr as nn,Ns as nt,Ml as o,Qr as on,ks as ot,gl as p,Cr as pn,$o as pt,Zs as q,fi as qt,zl as r,Xr as rn,Es as rt,kl as s,Ur as sn,Ps as st,Jl as t,R as tn,G as tt,Tl as u,Ir as un,Fo as ut,il as v,oo as vt,Wc as w,Ka as wt,X as x,uo as xt,el as y,lo as yt,sc as z,Ei as zt}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine-webxr.DiiWSXeh.js.gz b/Needle/MenuScene/dist/assets/needle-engine-webxr.DiiWSXeh.js.gz deleted file mode 100644 index 2960b33..0000000 Binary files a/Needle/MenuScene/dist/assets/needle-engine-webxr.DiiWSXeh.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/needle-engine.BJP2NBoC.js b/Needle/MenuScene/dist/assets/needle-engine.BJP2NBoC.js deleted file mode 100644 index 38af785..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine.BJP2NBoC.js +++ /dev/null @@ -1 +0,0 @@ -import{n as e}from"./rolldown-runtime.CYVBeYYp.js";var t=class{constructor(e){if(this._retries=0,!Number.isInteger(e)||e<0)throw Error(`Backoff must be a positive integer`);this.backoff=e}get retries(){return this._retries}get current(){return this.backoff}next(){return this._retries++,this.backoff}reset(){this._retries=0}},n=class{constructor(e,t){if(this._retries=0,!Number.isInteger(e)||e<0)throw Error(`Base must be a positive integer or zero`);if(t!==void 0&&(!Number.isInteger(t)||t<0))throw Error(`ExpMax must be a undefined, a positive integer or zero`);this.base=e,this.expMax=t,this.i=0}get retries(){return this._retries}get current(){return this.base*2**this.i}next(){return this._retries++,this.i=this.expMax===void 0?this.i+1:Math.min(this.i+1,this.expMax),this.current}reset(){this._retries=0,this.i=0}},r=class{constructor(e,t,n){if(this.i=0,this._retries=0,e<0)throw Error(`Initial must be a positive number or zero`);if(t<0)throw Error(`Increment must be a positive number or zero`);if(n!==void 0&&n<0)throw Error(`Max must be undefined, a positive number or zero`);if(n!==void 0&&nthis.handleEvent(o.open,e),this.handleErrorEvent=e=>this.handleEvent(o.error,e),this.handleCloseEvent=e=>this.handleEvent(o.close,e),this.handleMessageEvent=e=>this.handleEvent(o.message,e),this._url=e,this._protocols=t,this._options={buffer:n?.buffer,retry:{maxRetries:n?.retry?.maxRetries,instantReconnect:n?.retry?.instantReconnect,backoff:n?.retry?.backoff},listeners:{open:[...n?.listeners?.open??[]],close:[...n?.listeners?.close??[]],error:[...n?.listeners?.error??[]],message:[...n?.listeners?.message??[]],retry:[...n?.listeners?.retry??[]],reconnect:[...n?.listeners?.reconnect??[]]}},this._underlyingWebsocket=this.tryConnect()}get url(){return this._url}get protocols(){return this._protocols}get buffer(){return this._options.buffer}get maxRetries(){return this._options.retry.maxRetries}get instantReconnect(){return this._options.retry.instantReconnect}get backoff(){return this._options.retry.backoff}get closedByUser(){return this._closedByUser}get lastConnection(){return this._lastConnection}get underlyingWebsocket(){return this._underlyingWebsocket}get readyState(){return this._underlyingWebsocket.readyState}get bufferedAmount(){return this._underlyingWebsocket.bufferedAmount}get extensions(){return this._underlyingWebsocket.extensions}get binaryType(){return this._underlyingWebsocket.binaryType}set binaryType(e){this._underlyingWebsocket.binaryType=e}send(e){this.closedByUser||(this._underlyingWebsocket.readyState===this._underlyingWebsocket.OPEN?this._underlyingWebsocket.send(e):this.buffer!==void 0&&this.buffer.add(e))}close(e,t){this.cancelScheduledConnectionRetry(),this._closedByUser=!0,this._underlyingWebsocket.close(e,t)}addEventListener(e,t,n){this._options.listeners[e].push({listener:t,options:n})}removeEventListener(e,t,n){let r=e=>e.listener!==t||e.options!==n;this._options.listeners[e]=this._options.listeners[e].filter(r)}tryConnect(){return this._underlyingWebsocket=new WebSocket(this.url,this.protocols),this._underlyingWebsocket.addEventListener(o.open,this.handleOpenEvent),this._underlyingWebsocket.addEventListener(o.close,this.handleCloseEvent),this._underlyingWebsocket.addEventListener(o.error,this.handleErrorEvent),this._underlyingWebsocket.addEventListener(o.message,this.handleMessageEvent),this._underlyingWebsocket}clearWebsocket(){this._underlyingWebsocket.removeEventListener(o.open,this.handleOpenEvent),this._underlyingWebsocket.removeEventListener(o.close,this.handleCloseEvent),this._underlyingWebsocket.removeEventListener(o.error,this.handleErrorEvent),this._underlyingWebsocket.removeEventListener(o.message,this.handleMessageEvent),this._underlyingWebsocket.close()}dispatchEvent(e,t){let n=this._options.listeners[e],r=[];n.forEach(({listener:e,options:n})=>{e(this,t),(n===void 0||n.once===void 0||!n.once)&&r.push({listener:e,options:n})}),this._options.listeners[e]=r}handleEvent(e,t){switch(e){case o.close:this.dispatchEvent(e,t),this.scheduleConnectionRetryIfNeeded();break;case o.open:if(this.backoff!==void 0&&this._lastConnection!==void 0){let e={retries:this.backoff.retries,lastConnection:new Date(this._lastConnection)},t=new CustomEvent(o.reconnect,{detail:e});this.dispatchEvent(o.reconnect,t),this.backoff.reset()}this._lastConnection=new Date,this.dispatchEvent(e,t),this.sendBufferedData();break;case o.retry:this.dispatchEvent(e,t),this.clearWebsocket(),this.tryConnect();break;default:this.dispatchEvent(e,t);break}}sendBufferedData(){if(this.buffer!==void 0)for(let e=this.buffer.read();e!==void 0;e=this.buffer.read())this.send(e)}scheduleConnectionRetryIfNeeded(){if(this.closedByUser||this.backoff===void 0)return;let e=e=>{let t=new CustomEvent(o.retry,{detail:e});this.handleEvent(o.retry,t)},t={backoff:this._options.retry.instantReconnect===!0?0:this.backoff.next(),retries:this._options.retry.instantReconnect===!0?0:this.backoff.retries,lastConnection:this._lastConnection};(this._options.retry.maxRetries===void 0||t.retries<=this._options.retry.maxRetries)&&(this.retryTimeout=globalThis.setTimeout(()=>e(t),t.backoff))}cancelScheduledConnectionRetry(){globalThis.clearTimeout(this.retryTimeout)}},c=class{constructor(e){this._url=e}get url(){return this._url}withProtocols(e){return this._protocols=e,this}get protocols(){return this._protocols}withMaxRetries(e){return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},this._options?.retry),{maxRetries:e})}),this}get maxRetries(){return this._options?.retry?.maxRetries}withInstantReconnect(e){return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},this._options?.retry),{instantReconnect:e})}),this}get instantReconnect(){return this._options?.retry?.instantReconnect}withBackoff(e){return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},this._options?.retry),{backoff:e})}),this}get backoff(){return this._options?.retry?.backoff}withBuffer(e){return this._options=Object.assign(Object.assign({},this._options),{buffer:e}),this}get buffer(){return this._options?.buffer}onOpen(e,t){return this.addListener(o.open,e,t),this}onClose(e,t){return this.addListener(o.close,e,t),this}onError(e,t){return this.addListener(o.error,e,t),this}onMessage(e,t){return this.addListener(o.message,e,t),this}onRetry(e,t){return this.addListener(o.retry,e,t),this}onReconnect(e,t){return this.addListener(o.reconnect,e,t),this}build(){return new s(this._url,this._protocols,this._options)}addListener(e,t,n){return this._options=Object.assign(Object.assign({},this._options),{listeners:{open:this._options?.listeners?.open??[],close:this._options?.listeners?.close??[],error:this._options?.listeners?.error??[],message:this._options?.listeners?.message??[],retry:this._options?.listeners?.retry??[],reconnect:this._options?.listeners?.reconnect??[],[e]:[...this._options?.listeners?.[e]??[],{listener:t,options:n}]}}),this}},l=e({ArrayQueue:()=>i,ConstantBackoff:()=>t,ExponentialBackoff:()=>n,LinearBackoff:()=>r,RingQueue:()=>a,Websocket:()=>s,WebsocketBuilder:()=>c,WebsocketEvent:()=>o});export{l as t}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine.BJP2NBoC.js.gz b/Needle/MenuScene/dist/assets/needle-engine.BJP2NBoC.js.gz deleted file mode 100644 index 9728ee7..0000000 Binary files a/Needle/MenuScene/dist/assets/needle-engine.BJP2NBoC.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/needle-engine.CE4b2dOg.js b/Needle/MenuScene/dist/assets/needle-engine.CE4b2dOg.js deleted file mode 100644 index e3b2d3c..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine.CE4b2dOg.js +++ /dev/null @@ -1 +0,0 @@ -import{u as e}from"./needle-engine@5.0.3.js";export{e as NeedleEngineWebComponent}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine.D6xdy26G.js b/Needle/MenuScene/dist/assets/needle-engine.D6xdy26G.js deleted file mode 100644 index e86e2d9..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine.D6xdy26G.js +++ /dev/null @@ -1 +0,0 @@ -import{Cn as e,Mr as t,Tn as n,Tt as r,dn as i,g as a,i as o,j as s,sr as c,wt as l}from"./three@0.169.19.js";var u={node:`node`,material:`material`,camera:`camera`,light:`light`},d=`KHR_animation_pointer`,f={CUBICSPLINE:void 0,LINEAR:r,STEP:l},p=class{constructor(e){this.name=d,this.parser=e,this.animationPointerResolver=null}setAnimationPointerResolver(e){return this.animationPointerResolver=e,this}loadAnimationTargetFromChannel(e){let t=e.target,n=t.node===void 0?t.id:t.node;return this.parser.getDependency(`node`,n)}loadAnimationTargetFromChannelWithAnimationPointer(e){g();let t=e.target,n=t.extensions&&t.extensions[d]&&t.path&&t.path===`pointer`;if(!n)return null;let r,i=u.node,a;if(n){let e=t.extensions[d],n=e.pointer;if(!n){console.warn(`Invalid path`,e,t);return}if(n.startsWith(`/materials/`)?i=u.material:n.startsWith(`/extensions/KHR_lights_punctual/lights/`)?i=u.light:n.startsWith(`/cameras/`)&&(i=u.camera),a=this._tryResolveTargetId(n,i),a===null||isNaN(a)){console.warn(`Failed resolving animation node id: `+a,n);return}switch(i){case u.material:let e=(`/materials/`+a.toString()+`/`).length,t=n.substring(0,e);switch(r=n.substring(e),r){case`pbrMetallicRoughness/baseColorFactor`:r=`color`;break;case`pbrMetallicRoughness/roughnessFactor`:r=`roughness`;break;case`pbrMetallicRoughness/metallicFactor`:r=`metalness`;break;case`emissiveFactor`:r=`emissive`;break;case`alphaCutoff`:r=`alphaTest`;break;case`occlusionTexture/strength`:r=`aoMapIntensity`;break;case`normalTexture/scale`:r=`normalScale`;break;case`pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/scale`:r=`map/repeat`;break;case`pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/offset`:r=`map/offset`;break;case`emissiveTexture/extensions/KHR_texture_transform/scale`:r=`emissiveMap/repeat`;break;case`emissiveTexture/extensions/KHR_texture_transform/offset`:r=`emissiveMap/offset`;break;case`extensions/KHR_materials_emissive_strength/emissiveStrength`:r=`emissiveIntensity`;break;case`extensions/KHR_materials_transmission/transmissionFactor`:r=`transmission`;break;case`extensions/KHR_materials_ior/ior`:r=`ior`;break;case`extensions/KHR_materials_volume/thicknessFactor`:r=`thickness`;break;case`extensions/KHR_materials_volume/attenuationColor`:r=`attenuationColor`;break;case`extensions/KHR_materials_volume/attenuationDistance`:r=`attenuationDistance`;break;case`extensions/KHR_materials_iridescence/iridescenceFactor`:r=`iridescence`;break;case`extensions/KHR_materials_iridescence/iridescenceIor`:r=`iridescenceIOR`;break;case`extensions/KHR_materials_iridescence/iridescenceThicknessMinimum`:r=`iridescenceThicknessRange[0]`;break;case`extensions/KHR_materials_iridescence/iridescenceThicknessMaximum`:r=`iridescenceThicknessRange[1]`;break;case`extensions/KHR_materials_clearcoat/clearcoatFactor`:r=`clearcoat`;break;case`extensions/KHR_materials_clearcoat/clearcoatRoughnessFactor`:r=`clearcoatRoughness`;break;case`extensions/KHR_materials_sheen/sheenColorFactor`:r=`sheenColor`;break;case`extensions/KHR_materials_sheen/sheenRoughnessFactor`:r=`sheenRoughness`;break;case`extensions/KHR_materials_specular/specularFactor`:r=`specularIntensity`;break;case`extensions/KHR_materials_specular/specularColorFactor`:r=`specularColor`;break}n=t+r;break;case u.node:let i=(`/nodes/`+a.toString()+`/`).length,o=n.substring(0,i);switch(r=n.substring(i),r){case`translation`:r=`position`;break;case`rotation`:r=`quaternion`;break;case`scale`:r=`scale`;break;case`weights`:r=`morphTargetInfluences`;break;case`extensions/KHR_node_visibility/visible`:r=`visible`;break}n=o+r;break;case u.light:let s=(`/extensions/KHR_lights_punctual/lights/`+a.toString()+`/`).length;switch(r=n.substring(s),r){case`color`:break;case`intensity`:break;case`spot/innerConeAngle`:r=`penumbra`;break;case`spot/outerConeAngle`:r=`angle`;break;case`range`:r=`distance`;break}n=`/lights/`+a.toString()+`/`+r;break;case u.camera:let c=(`/cameras/`+a.toString()+`/`).length,l=n.substring(0,c);switch(r=n.substring(c),r){case`perspective/yfov`:r=`fov`;break;case`perspective/znear`:case`orthographic/znear`:r=`near`;break;case`perspective/zfar`:case`orthographic/zfar`:r=`far`;break;case`perspective/aspect`:r=`aspect`;break;case`orthographic/xmag`:r=`zoom`;break;case`orthographic/ymag`:r=`zoom`;break}n=l+r;break}this.animationPointerResolver?.resolvePath&&(n=this.animationPointerResolver.resolvePath(n)),t.extensions[d].pointer=n}if(a==null||isNaN(a)){console.warn(`Failed resolving animation node id: `+a,t);return}let o;return i===u.node?o=this.parser.getDependency(`node`,a):i===u.material?o=this.parser.getDependency(`material`,a):i===u.light?o=this.parser.getDependency(`light`,a):i===u.camera?o=this.parser.getDependency(`camera`,a):console.error(`Unhandled type`,i),o}createAnimationTracksWithAnimationPointer(e,o,l,u,p){if(!(p.extensions&&p.extensions[d]&&p.path&&p.path===`pointer`))return null;let m=p.extensions[d].pointer;if(!m)return null;let h=[];m=m.replaceAll(`/`,`.`);let g=m.split(`.`);if(g[2]=e.name!==void 0&&e.name!==null?e.name:e.uuid,g[3]===`morphTargetInfluences`&&e.type===`Group`){for(let t of e.children)t instanceof c&&t.morphTargetInfluences&&(g[3]=t.name,g[4]=`morphTargetInfluences`,v(this.parser));return h}v(this.parser);function _(e,t){try{let n=t.split(`.`).filter(Boolean),r=n[n.length-1].replace(/\[.*\]$/,``);return r in e?typeof e[r]==`boolean`:!1}catch{return!1}}function v(c){m=g.join(`.`);let d,p=!1;switch(l.itemSize){case 1:Object.prototype.toString.call(l.array)===`[object Uint8Array]`&&_(e,m)?(d=a,p=!0):d=i;break;case 2:case 3:d=t;break;case 4:d=m.endsWith(`.quaternion`)?n:s;break}if(!d){console.warn(`Unsupported output accessor format`,l);return}let v=u.interpolation===void 0?r:f[u.interpolation],y=c._getArrayFromAccessor(l);m.endsWith(`.fov`)&&(y=y.map(e=>e/Math.PI*180)),p&&(y=y.map(e=>e>0));let b=new d(m,o.array,y,v);if(v===`CUBICSPLINE`&&c._createCubicSplineTrackInterpolant(b),h.push(b),m&&l.itemSize===4&&m.startsWith(`.materials.`)&&m.endsWith(`.color`)){let e=new Float32Array(y.length/4);for(let t=0,n=y.length/4;t{a!==null||e.type!==`Mesh`&&e.type!==`SkinnedMesh`||e.material&&(e.material.uuid===i||e.material.name===i)&&(a=e.material,a!==null&&(t.endsWith(`.map`)?a=a.map:t.endsWith(`.emissiveMap`)&&(a=a.emissiveMap)))}),a}else if(n.startsWith(`.nodes.`)||n.startsWith(`.lights.`)||n.startsWith(`.cameras.`)){let r=n.split(`.`),i;for(let t=1;t=0&&(t=e),i=i[t]}else{let t=e.getObjectByName(n);t&&(i=t)}}if(!i){let i=t(e,r[2]);return i||console.warn(d+`: Property binding not found`,n,e,e.name,r),i}return i}return t(e,n)}}export{p as t}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine.D6xdy26G.js.gz b/Needle/MenuScene/dist/assets/needle-engine.D6xdy26G.js.gz deleted file mode 100644 index a810b20..0000000 Binary files a/Needle/MenuScene/dist/assets/needle-engine.D6xdy26G.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/needle-engine.DZYzd-GQ.js b/Needle/MenuScene/dist/assets/needle-engine.DZYzd-GQ.js deleted file mode 100644 index ebd3681..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine.DZYzd-GQ.js +++ /dev/null @@ -1 +0,0 @@ -import{$ as ee,$a as te,$i as ne,$n as re,$t as ie,A as ae,Aa as e,Ai as t,An as n,Ao as r,Ar as i,At as a,B as o,Ba as s,Bn as c,Bo as l,Br as u,Bt as d,C as f,Ca as p,Ci as m,Co as h,Ct as g,D as _,Da as v,Di as y,Do as b,Dr as x,E as S,Ea as C,Eo as w,Er as T,Et as E,Fa as D,Fi as O,Fn as k,Fo as A,Fr as j,Ft as M,G as N,Ga as P,Gi as F,Gn as I,Gt as L,H as R,Ha as z,Hi as B,Ho as V,Hr as H,Ht as U,Ia as W,Ii as G,In as K,Io as q,Ir as J,It as oe,J as se,Ja as ce,Ji as le,Jt as ue,K as de,Ka as fe,Ki as pe,Kn as me,Kr as he,L as ge,La as _e,Li as ve,Ln as ye,Lo as be,Lr as xe,Lt as Se,M as Ce,Ma as we,Mi as Te,Mn as Ee,Mo as De,Mr as Oe,Mt as ke,N as Ae,Na as je,Ni as Me,Nn as Ne,No as Pe,Nr as Fe,Nt as Ie,O as Le,Oa as Re,Oi as ze,Oo as Be,Or as Ve,Ot as He,P as Ue,Pa as We,Pi as Ge,Po as Ke,Pr as qe,Pt as Je,Q as Ye,Qa as Xe,Qi as Ze,Qr as Qe,Qt as $e,R as et,Ra as tt,Ri as nt,Rn as rt,Ro as it,Rt as at,S as ot,Sa as st,Si as ct,So as lt,St as ut,T as dt,Ta as ft,Ti as pt,To as mt,Tr as ht,Tt as gt,U as _t,Ua as vt,Ui as yt,Un as bt,Uo as xt,Ur as St,V as Ct,Va as wt,Vi as Tt,Vo as Et,Vr as Dt,Vt as Ot,Wa as kt,Wi as At,Wn as jt,Wo as Y,Wr as Mt,Wt as Nt,X as Pt,Xi as Ft,Xr as It,Xt as Lt,Y as Rt,Ya as X,Yi as zt,Yr as Bt,Z as Vt,Za as Ht,Zi as Ut,Zt as Wt,_ as Gt,_a as Kt,_i as qt,_n as Jt,_o as Yt,_r as Xt,_t as Zt,a as Qt,aa as $t,ai as en,ao as tn,ar as nn,b as rn,ba as an,bi as on,bn as sn,bo as cn,br as ln,bt as un,ca as dn,ci as fn,cn as pn,co as mn,cr as hn,ct as gn,d as _n,da as vn,di as yn,dn as bn,do as xn,dr as Sn,dt as Cn,ea as wn,en as Tn,eo as En,er as Dn,et as On,f as kn,fa as An,fi as jn,fn as Mn,fo as Nn,fr as Pn,ft as Fn,g as In,ga as Ln,gi as Rn,go as zn,gr as Bn,gt as Vn,h as Hn,ha as Un,hi as Wn,hn as Gn,ho as Kn,hr as qn,ht as Jn,i as Yn,ia as Xn,ii as Zn,in as Qn,io as $n,ir as er,it as tr,j as nr,ja as rr,ji as ir,jn as ar,jo as or,jr as sr,jt as cr,k as lr,ka as ur,ki as dr,kn as fr,ko as pr,kr as mr,kt as hr,l as gr,la as _r,li as vr,lo as yr,lr as br,lt as xr,ma as Sr,mi as Cr,mn as wr,mo as Tr,mr as Er,mt as Dr,n as Or,na as kr,nn as Ar,no as jr,nr as Mr,nt as Nr,o as Pr,oa as Fr,oi as Ir,on as Lr,oo as Rr,or as zr,ot as Z,p as Br,pa as Vr,pi as Hr,po as Ur,pr as Wr,pt as Gr,q as Kr,qa as qr,qi as Jr,qn as Yr,r as Xr,ra as Zr,ri as Qr,rn as $r,ro as ei,rr as ti,rt as ni,s as ri,sa as ii,si as ai,sn as oi,so as si,sr as ci,t as li,ta as ui,tn as di,to as fi,tr as pi,tt as mi,u as hi,ua as gi,ui as _i,un as vi,uo as yi,ur as bi,ut as xi,v as Si,va as Ci,vi as wi,vn as Ti,vo as Ei,vr as Di,vt as Oi,w as ki,wa as Ai,wi as ji,wo as Mi,wt as Ni,x as Pi,xa as Fi,xi as Ii,xn as Li,xo as Ri,xt as zi,y as Bi,ya as Vi,yi as Hi,yn as Ui,yo as Wi,yr as Gi,yt as Ki,z as qi,za as Ji,zi as Yi,zn as Xi,zo as Zi,zr as Qi,zt as $i}from"./needle-engine-ui.D3ZoIJG5.js";import{C as ea,E as ta,S as na,T as ra,_ as ia,a as aa,b as oa,c as sa,d as ca,f as la,g as ua,h as Q,i as da,l as fa,m as pa,n as ma,o as ha,p as ga,r as _a,s as va,u as ya,v as ba,w as xa,x as Sa,y as Ca}from"./needle-engine@5.0.3.js";import{n as wa}from"./gltf-progressive.BBJGcb3s.js";import{$ as Ta,A as Ea,At as Da,B as Oa,Bt as ka,C as Aa,Ct as ja,Dt as Ma,Et as Na,F as Pa,G as Fa,Gt as Ia,H as La,Ht as Ra,I as za,It as Ba,J as Va,Jt as Ha,K as Ua,Kt as Wa,L as Ga,Lt as Ka,M as qa,Mt as Ja,N as Ya,Ot as Xa,P as Za,Pt as Qa,Q as $a,Qt as eo,R as to,Rt as no,S as ro,St as io,Tt as ao,U as oo,Ut as so,V as co,Vt as lo,W as uo,Wt as fo,X as po,Xt as mo,Y as ho,Yt as go,Z as _o,Zt as vo,_ as yo,a as bo,an as xo,at as So,b as Co,bt as wo,c as To,cn as Eo,ct as Do,d as Oo,dn as ko,dt as Ao,en as jo,et as Mo,f as No,fn as Po,ft as Fo,g as Io,gt as Lo,h as Ro,hn as zo,ht as Bo,i as Vo,in as Ho,it as Uo,j as Wo,jt as Go,k as Ko,kt as qo,l as Jo,ln as Yo,lt as Xo,m as Zo,mn as Qo,mt as $o,n as es,nn as ts,nt as ns,o as rs,on as is,ot as as,p as os,pn as ss,pt as cs,q as ls,qt as us,r as ds,rn as fs,rt as ps,s as ms,sn as hs,t as gs,tn as _s,tt as vs,u as ys,un as bs,ut as xs,v as Ss,vt as Cs,w as ws,wt as Ts,x as Es,xt as Ds,y as Os,yt as ks,z as As}from"./needle-engine-webxr.DiiWSXeh.js";import{$ as js,A as Ms,At as Ns,B as Ps,C as Fs,Ct as Is,D as Ls,Dt as Rs,E as zs,Et as Bs,F as Vs,G as Hs,I as Us,J as Ws,K as Gs,L as Ks,M as qs,Mt as Js,N as Ys,Nt as Xs,O as Zs,Ot as Qs,P as $s,R as ec,S as tc,St as nc,T as rc,Tt as ic,X as ac,Y as oc,Z as sc,_ as cc,a as lc,at as uc,b as dc,bt as fc,c as pc,ct as mc,d as hc,dt as gc,et as _c,f as vc,ft as yc,g as bc,gt as xc,h as Sc,ht as Cc,i as wc,it as Tc,j as Ec,jt as Dc,k as Oc,kt as kc,l as Ac,lt as jc,m as Mc,mt as Nc,n as Pc,nt as Fc,o as Ic,ot as Lc,p as Rc,pt as zc,q as Bc,r as Vc,rt as Hc,s as Uc,st as Wc,tt as Gc,u as Kc,ut as qc,v as Jc,vt as Yc,w as Xc,wt as Zc,x as Qc,xt as $c,y as el,z as tl}from"./needle-engine.extras.B9pwA3ET.js";import{C as nl,D as rl,E as il,S as al,T as ol,_ as sl,a as cl,b as ll,c as ul,d as dl,f as fl,g as pl,h as ml,i as hl,l as gl,m as _l,n as vl,o as yl,p as bl,r as xl,s as Sl,t as Cl,u as wl,v as Tl,w as El,x as Dl,y as Ol}from"./needle-engine-particles.Ce6eiXqY.js";import{_ as kl,a as Al,b as jl,c as Ml,d as Nl,f as Pl,g as Fl,h as Il,i as Ll,l as Rl,m as zl,n as Bl,o as Vl,p as Hl,r as Ul,s as Wl,t as $,u as Gl,v as Kl,y as ql}from"./needle-engine.extras.dI9yZHT7.js";export{dr as $componentName,t as $physicsKey,vs as ActionBuilder,Ks as ActionCollection,ns as ActionModel,Qi as Addressables,Cc as AlignmentConstraint,jt as AmbientMode,Qo as Animation,il as AnimationCurve,$a as AnimationExtension,nc as AnimationTrackHandler,Ze as AnimationUtils,Ye as Animator,On as AnimatorConditionMode,ee as AnimatorController,mi as AnimatorControllerParameterType,Nr as AnimatorStateInfo,Il as Antialiasing,xe as Application,Lt as AssetDatabase,u as AssetReference,zs as Attractor,_o as AudioExtension,ss as AudioListener,Po as AudioSource,Is as AudioTrackHandler,Ko as Avatar,Wa as AvatarBlink_Simple,Ia as AvatarEyeLook_Rotation,aa as AvatarLoader,Yo as AvatarMarker,ha as AvatarModel,hs as Avatar_Brain_LookAt,vo as Avatar_MouthShapes,mo as Avatar_MustacheShake,Eo as Avatar_POI,o as Axes,Nc as AxesHelper,B as BUILD_TIME,Pi as BaseUIComponent,zc as BasicIKConstraint,Co as BehaviorExtension,ps as BehaviorModel,Z as Behaviour,Z as Component,Wn as BlobStorage,zl as BloomEffect,ka as BoxCollider,No as BoxGizmo,yc as BoxHelperComponent,Xr as Button,fr as ButtonsFactory,jo as CallDirection,Rt as CallInfo,f as Camera,dt as CameraTargetReachedEvent,ri as Canvas,Pr as CanvasGroup,lo as CapsuleCollider,Oa as ChangeMaterialOnClick,co as ChangeTransformOnClick,qc as CharacterController,gc as CharacterControllerInput,Hl as ChromaticAberration,te as CircularBuffer,ki as ClearFlags,Ic as ClickThrough,Qs as ClipExtrapolation,Ra as Collider,ir as Collision,Ct as CollisionDetectionMode,Nl as ColorAdjustments,yl as ColorBySpeedModule,Sl as ColorOverLifetimeModule,zt as ComponentLifecycleEvents,Mr as ConnectionEvents,Te as ContactPoint,no as ContactShadows,Jt as Context,Ti as ContextArgs,xt as ContextEvent,Y as ContextRegistry,Y as NeedleEngine,Zc as ControlTrackHandler,lc as CursorFollow,os as CustomBranding,Go as CustomShader,I as DefaultReflectionMode,uc as Deletable,Lc as DeleteBox,Gl as DepthOfField,Tc as DeviceFlag,En as DeviceUtilities,da as DocumentExtension,Fc as DragControls,Hc as DragMode,Bc as DropListener,Gs as Duplicatable,Rl as EffectWrapper,ul as EmissionModule,La as EmphasizeOnClick,ca as EngineLoadingView,fc as EnvironmentScene,Pt as EventList,Vt as EventListEvent,_ as EventSystem,Hs as EventTrigger,Cs as FieldWithDefault,Dt as FileReference,H as FileReferenceSerializer,js as FileSpawnModel,_c as File_Event,Ys as FixedJoint,Us as Fog,Ui as FrameEvent,yt as GENERATOR,gn as GameObject,vi as Gizmos,tl as GltfExport,Ps as GltfExportBox,gl as Gradient,Hn as Graphic,lr as GraphicRaycaster,$t as Graphics,Vs as GridHelper,gr as GridLayoutGroup,Kr as GroundProjectedEnv,Uo as GroupActionModel,Me as HideFlags,oo as HideOnStart,$s as HingeJoint,hi as HorizontalLayoutGroup,Qr as HostData,wc as HoverAnimation,Yn as Image,St as ImageReference,Mt as ImageReferenceSerializer,wl as InheritVelocityModule,ht as Input,T as InputEventQueue,x as InputEvents,Or as InputField,ja as InstanceHandle,Ts as InstancingHandler,ue as InstancingUtil,Zn as InstantiateEvent,en as InstantiateIdProvider,He as InstantiateOptions,Wc as Interactable,ms as InternalScreenshotUtils,ti as JoinedRoomResponse,Ve as KeyEventArgs,rl as Keyframe,Ms as LODGroup,Ec as LODModel,er as LeftRoomResponse,qs as Light,me as LightData,dl as LimitVelocityOverLifetimeModule,la as LoadingElementOptions,jc as LogStats,ce as LogType,pc as LookAt,N as LookAtConstraint,fl as MainModule,ic as MarkerTrackHandler,kc as MarkerType,In as MaskableGraphic,Ka as MaterialPropertyBlock,Ja as MaterialX,vt as Mathf,so as MeshCollider,ks as MeshRenderer,bl as MinMaxCurve,_l as MinMaxGradient,Tt as NEEDLE_ENGINE_FEATURE_FLAGS,Bn as NEEDLE_ENGINE_MODULES,wa as NEEDLE_progressive,mr as NEKeyboardEvent,i as NEPointerEvent,pa as NeedleButtonElement,sc as NeedleEngineModelLoader,ya as NeedleEngineWebComponent,Ea as NeedleMenu,ve as NeedlePatchesKey,Ao as NeedleUSDZExporter,Gn as NeedleXRController,Mn as NeedleXRSession,wr as NeedleXRSync,zo as NeedleXRUtils,Oc as NestedGltf,nn as NetworkConnection,_s as NetworkedStreamEvents,ts as NetworkedStreams,Zs as Networking,Ir as NewInstanceModel,ml as NoiseModule,ae as ObjectRaycaster,Oe as ObjectUtils,Ls as OffsetConstraint,kt as OneEuroFilter,P as OneEuroFilterXYZ,Uc as OpenURL,S as OrbitControls,Gt as Outline,zr as OwnershipEvent,ci as OwnershipModel,At as PUBLIC_KEY,_n as Padding,pl as ParticleBurst,cl as ParticleSubEmitter,Cl as ParticleSystem,vl as ParticleSystemBaseBehaviour,xl as ParticleSystemRenderer,sl as ParticleSystemShapeType,fs as PeerHandle,Pn as PeerNetworking,Lr as Physics,Os as PhysicsExtension,R as PhysicsMaterialCombine,Ml as PixelationEffect,uo as PlayAnimationOnClick,Fa as PlayAudioOnClick,$c as PlayableDirector,rc as PlayerColor,Wo as PlayerState,qa as PlayerStateEvent,Ya as PlayerSync,re as PlayerView,Dn as PlayerViewManager,Ce as PointerEventData,sr as PointerType,Kl as PostProcessingEffect,jl as PostProcessingEffectOrder,Bl as PostProcessingHandler,$ as PostProcessingManager,$ as Volume,Ua as PreliminaryAction,ls as PreliminaryTrigger,Gc as PreviewHelper,Fe as PrimitiveType,Bo as Progress,fi as PromiseAllWithErrors,jr as PromiseErrorResult,bn as RGBAColor,fa as RapierPhysics,Qt as RawImage,oi as RaycastOptions,Si as Rect,Bi as RectTransform,Ba as ReflectionProbe,Ta as RegisteredAnimationInfo,xc as RemoteSkybox,se as RenderTexture,ba as RenderTextureSerializer,wo as Renderer,Yr as RendererData,io as RendererLightmap,ge as Rigidbody,_t as RigidbodyConstraints,hn as RoomEvents,Tl as RotationBySpeedModule,Ol as RotationOverLifetimeModule,Qa as SceneLightSettings,Yc as SceneSwitcher,Fs as ScreenCapture,Wl as ScreenSpaceAmbientOcclusion,Vl as ScreenSpaceAmbientOcclusionN8,Vc as ScrollFollow,tc as SeeThrough,Cr as SendQueue,he as SerializationContext,Va as SetActiveOnClick,Qc as ShadowCatcher,ll as ShapeModule,Ge as ShapeOverlapResult,Al as SharpeningEffect,Dc as SignalAsset,Js as SignalReceiver,Xs as SignalReceiverEvent,Bs as SignalTrackHandler,rn as Size,Dl as SizeBySpeedModule,al as SizeOverLifetimeModule,Ds as SkinnedMeshRenderer,dc as SmoothFollow,nr as SpatialGrabRaycaster,li as SpatialHtml,Jc as SpatialTrigger,el as SpatialTriggerReceiver,cc as SpectatorCamera,fo as SphereCollider,pn as SphereIntersection,Sc as SplineContainer,bc as SplineData,ma as SplineUtils,Mc as SplineWalker,Pa as Sprite,za as SpriteData,Ga as SpriteRenderer,to as SpriteSheet,ni as StateMachineBehaviour,Ho as StreamEndedEvent,xo as StreamReceivedEvent,hl as SubEmitterSystem,Rc as SyncedCamera,vc as SyncedRoom,Ue as SyncedTransform,ho as TapGestureTrigger,Aa as TeleportTarget,Kc as TestRunner,hc as TestSimulateUserData,Br as Text,Io as TextBuilder,yo as TextExtension,nl as TextureSheetAnimationModule,Ll as TiltShiftEffect,bt as Time,Pl as ToneMappingEffect,Rs as TrackHandler,Ns as TrackType,El as TrailModule,Mo as TransformData,Ac as TransformGizmo,So as TriggerBuilder,as as TriggerModel,ne as TypeStore,Le as UIRaycastUtils,ot as UIRootComponent,Do as USDDocument,Xo as USDObject,xs as USDWriter,Zo as USDZExporter,Ss as USDZText,Ro as USDZUIExtension,Ca as UriSerializer,mc as UsageMarker,br as UserJoinedOrLeftRoomModel,F as VERSION,ec as VariantAction,ol as VelocityOverLifetimeModule,kn as VerticalLayoutGroup,Xc as VideoPlayer,Pc as ViewBox,pi as ViewDevice,Ul as Vignette,po as VisibilityAction,eo as Voip,ql as VolumeParameter,Fl as VolumeProfile,qe as WaitForFrames,j as WaitForPromise,J as WaitForSeconds,ei as Watch,rs as WebARCameraBackground,Za as WebARSessionRoot,Es as WebXR,As as WebXRButtonFactory,ds as WebXRImageTracking,Vo as WebXRImageTrackingModel,es as WebXRPlaneTracking,bo as WebXRTrackedImage,Oo as XRControllerFollow,ws as XRControllerModel,ro as XRControllerMovement,us as XRFlag,gs as XRRig,Ha as XRState,go as XRStateFlag,_a as __Ignore,Wt as __internalNotifyObjectDestroyed,pe as activeInHierarchyFieldName,$n as addAttributeChangeCallback,Dr as addComponent,ao as addCustomExtensionPlugin,Jn as addNewComponent,nt as addPatch,U as apply,xr as applyHMRChanges,Nt as applyPrototypeExtensions,ai as beginListenDestroy,fn as beginListenInstantiate,Xt as binaryIdentifierCasts,sn as build_scene_functions,Jr as builtinComponentKeyName,ga as calculateProgress01,X as clearBalloonMessages,X as clearOverlayMessages,oa as colorSerializer,Qe as compareAssociation,Sa as componentSerializer,Fr as copyTexture,tr as createMotion,bi as debugNet,Sn as debugOwner,Fo as decompressGpuTexture,tn as deepClone,Rr as delay,si as delayForFrames,Bt as deserializeObject,hr as destroy,Vn as destroyComponentInstance,Ws as determineMimeTypeFromExtension,$e as disposeObjectResources,is as disposeStream,le as editorGuidKeyName,Xn as enableSpatialConsole,na as euler,ea as eventListSerializer,va as exportAsGLTF,a as findByGuid,Zt as findObjectOfType,Oi as findObjectsOfType,ie as findResourceUsers,de as fitCamera,ii as fitObjectIntoVolume,cr as foreachComponent,ke as foreachComponentEnumerator,dn as forward,Ne as generateQRCode,vr as generateSeed,_r as getBoundingBox,Ji as getCameraController,Ki as getComponent,un as getComponentInChildren,zi as getComponentInParent,ut as getComponents,g as getComponentsInChildren,Ni as getComponentsInParent,Lo as getFormattedDate,n as getIconElement,ar as getIconTexture,y as getLoader,gt as getOrAddComponent,mn as getParam,gi as getParentHierarchyPath,yr as getPath,Wr as getPeerOptions,Er as getPeerjsInstance,Tn as getResourceUserCount,vn as getTempColor,An as getTempQuaternion,Vr as getTempVector,yi as getUrlParams,Sr as getVisibleInCustomShadowRendering,Un as getWorldDirection,Ln as getWorldEuler,Kt as getWorldPosition,Ci as getWorldQuaternion,Vi as getWorldRotation,an as getWorldScale,Rn as hasCommercialLicense,qt as hasIndieLicense,Ae as hasPointerEventComponent,wi as hasProLicense,ra as hideDebugConsole,cs as imageToCanvas,Ie as instantiate,Na as invokeLoadedImportPluginHooks,k as invokeXRSessionEnd,K as invokeXRSessionStart,Je as isActiveInHierarchy,M as isActiveSelf,xn as isAndroidDevice,Fi as isAnimationAction,O as isComponent,Nn as isDebugMode,Ur as isDesktop,oe as isDestroyed,fe as isDevEnvironment,di as isDisposed,sa as isExporting,G as isGLTFModel,Et as isHostedOnGlitch,xi as isHotReloadEnabled,Cn as isHotReloading,Tr as isIPad,Ee as isIconElement,V as isLocalNetwork,Kn as isMacOS,zn as isMobileDevice,Yt as isMozillaXR,Ei as isQuest,Ar as isResourceTrackingEnabled,Wi as isSafari,Se as isUsingInstancing,cn as isiOS,Ri as isiPad,Q as loadAsset,bs as loadPMREM,ua as loadSync,st as logHierarchy,p as lookAtInverse,Ai as lookAtObject,ft as lookAtScreenPoint,lt as makeId,h as makeIdFromRandomWords,$o as makeNameSafeForUSD,at as markAsInstancedRendered,Mi as microphonePermissionsGranted,mt as nameof,w as nameofFactory,xa as objectSerializer,ye as offXRSessionEnd,rt as offXRSessionStart,Hi as onAfterRender,on as onBeforeRender,Ii as onClear,ct as onDestroy,m as onInitialized,ji as onStart,pt as onUpdate,Xi as onXRSessionEnd,c as onXRSessionStart,ia as parseSync,C as placeOnSurface,v as postprocessFBXMaterials,et as prefix,b as pushState,Be as randomNumber,Di as registerBinaryType,Li as registerComponent,Ma as registerComponentExtension,kl as registerCustomEffectType,Xa as registerExportExtensions,qo as registerExtensions,Fn as registerHotReloadType,ze as registerLoader,_i as registerPrefabProvider,L as registerPrototypeExtensions,wn as registerType,pr as relativePathPrefix,r as removeAttributeChangeCallback,E as removeComponent,Da as removeCustomImportExtensionType,Yi as removePatch,or as resolveUrl,De as sanitizeString,To as saveImage,Jo as screenshot,ys as screenshot2,yn as sendDestroyed,Ft as serializable,It as serializeObject,Ut as serializeable,$i as setActive,Ht as setAllowBalloonMessages,Xe as setAllowOverlayMessages,s as setAutoFitEnabled,wt as setCameraController,d as setDestroyed,qr as setDevEnvironment,$r as setDisposable,Ot as setDontDestroy,Pe as setOrAddParamsToUrl,Ke as setParam,A as setParamWithoutReload,qn as setPeerOptions,Qn as setResourceTrackingEnabled,q as setState,Re as setVisibleInCustomShadowRendering,ur as setWorldEuler,e as setWorldPosition,rr as setWorldPositionXYZ,we as setWorldQuaternion,je as setWorldQuaternionXYZW,We as setWorldRotation,D as setWorldRotationXYZ,W as setWorldScale,ui as showBalloonError,kr as showBalloonMessage,Zr as showBalloonWarning,ta as showDebugConsole,_e as slerp,jn as syncDestroy,ko as syncField,Hr as syncInstantiate,tt as textureToCanvas,be as toSourceId,Gi as tryCastBinary,oc as tryDetermineMimetypeFromBinary,ac as tryDetermineMimetypeFromURL,it as tryFindObject,ln as tryGetGuid,Gr as unregisterHotReloadType,Zi as unwatchWrite,z as useForAutoFit,qi as validate,l as watchWrite}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine.DZYzd-GQ.js.gz b/Needle/MenuScene/dist/assets/needle-engine.DZYzd-GQ.js.gz deleted file mode 100644 index 1affd22..0000000 Binary files a/Needle/MenuScene/dist/assets/needle-engine.DZYzd-GQ.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/needle-engine.dep.B3nA4wQ5.js b/Needle/MenuScene/dist/assets/needle-engine.dep.B3nA4wQ5.js deleted file mode 100644 index 04b3d05..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine.dep.B3nA4wQ5.js +++ /dev/null @@ -1 +0,0 @@ -import{a as e,i as t,n,r}from"./three-mesh-bvh.B-oXEGo2.js";export{e as MeshBVH,n as StaticGeometryGenerator,r as acceleratedRaycast,t as computeBoundsTree}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine.dep.B3nA4wQ5.js.gz b/Needle/MenuScene/dist/assets/needle-engine.dep.B3nA4wQ5.js.gz deleted file mode 100644 index ecc8246..0000000 Binary files a/Needle/MenuScene/dist/assets/needle-engine.dep.B3nA4wQ5.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/needle-engine.dep.BzZBR-mM.js b/Needle/MenuScene/dist/assets/needle-engine.dep.BzZBR-mM.js deleted file mode 100644 index 15483f3..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine.dep.BzZBR-mM.js +++ /dev/null @@ -1 +0,0 @@ -import{t as e}from"./needle-engine.D6xdy26G.js";export{e as GLTFAnimationPointerExtension}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine.dep.DFJFZC0m.js b/Needle/MenuScene/dist/assets/needle-engine.dep.DFJFZC0m.js deleted file mode 100644 index 3576f20..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine.dep.DFJFZC0m.js +++ /dev/null @@ -1 +0,0 @@ -import{$ as ee,$t as te,A as ne,At as e,B as t,Bt as n,C as r,Ct as re,D as ie,Dt as ae,E as oe,Et as i,F as a,Ft as o,G as s,Gt as c,H as l,Ht as u,I as d,It as f,J as p,Jt as m,K as h,Kt as g,L as _,Lt as v,M as y,Mt as b,N as x,Nt as S,O as C,Ot as w,P as T,Pt as E,Q as D,Qt as O,R as k,Rt as A,S as j,St as M,T as N,Tt as P,U as F,Ut as I,V as L,Vt as R,W as z,Wt as B,X as V,Xt as H,Y as U,Yt as W,Z as G,Zt as K,_ as q,_t as se,a as ce,an as le,at as J,b as ue,bt as Y,c as de,cn as fe,ct as pe,d as me,dt as he,en as ge,et as _e,f as ve,ft as ye,g as be,gt as xe,h as Se,ht as X,i as Ce,in as we,it as Te,j as Ee,jt as De,k as Oe,kt as ke,l as Ae,ln as je,lt as Z,m as Me,mt as Ne,n as Pe,nn as Fe,nt as Ie,o as Le,on as Re,ot as Q,p as ze,pt as Be,q as Ve,qt as He,r as Ue,rn as We,rt as Ge,s as Ke,sn as qe,st as Je,t as Ye,tn as Xe,tt as Ze,u as Qe,ut as $e,v as et,vt as tt,w as nt,wt as rt,x as $,xt as it,y as at,yt as ot,z as st,zt as ct}from"./postprocessing.Wy71DpiM.js";export{Ye as ASCIIEffect,Pe as ASCIITexture,Ue as AdaptiveLuminanceMaterial,Ce as AdaptiveLuminancePass,ce as BlendFunction,Le as BlendMode,Ke as BloomEffect,Q as BlurPass,Q as KawaseBlurPass,de as BokehEffect,Ae as BokehMaterial,Qe as BoxBlurMaterial,me as BoxBlurPass,ve as BrightnessContrastEffect,ze as ChromaticAberrationEffect,Me as CircleOfConfusionMaterial,Se as ClearMaskPass,be as ClearPass,q as ColorAverageEffect,et as ColorChannel,at as ColorDepthEffect,_ as ColorEdgesMaterial,_ as EdgeDetectionMaterial,J as ConvolutionMaterial,J as KawaseBlurMaterial,ue as CopyMaterial,$ as CopyPass,$ as SavePass,j as DepthComparisonMaterial,r as DepthCopyMaterial,nt as DepthCopyMode,N as DepthCopyPass,N as DepthSavePass,oe as DepthDownsamplingMaterial,ie as DepthDownsamplingPass,C as DepthEffect,Oe as DepthMaskMaterial,ne as DepthOfFieldEffect,Ee as DepthPass,y as DepthPickingPass,x as DepthTestStrategy,T as Disposable,a as DotScreenEffect,d as DownsamplingMaterial,k as EdgeDetectionMode,st as Effect,t as EffectAttribute,L as EffectComposer,l as EffectMaterial,F as EffectPass,z as EffectShaderData,s as EffectShaderSection,s as Section,h as FXAAEffect,Ve as GammaCorrectionEffect,p as GaussKernel,U as GaussianBlurMaterial,V as GaussianBlurPass,G as GlitchEffect,D as GlitchMode,ee as GodRaysEffect,_e as GodRaysMaterial,Ze as GridEffect,Ie as HueSaturationEffect,Ge as ImmutableTimer,Te as Initializable,Je as KernelSize,pe as LUT1DEffect,Z as LUT3DEffect,Z as LUTEffect,$e as LUT3dlLoader,he as LUTCubeLoader,ye as LUTOperation,Be as LambdaPass,Ne as LensDistortionEffect,X as LookupTexture,X as LookupTexture3D,xe as LuminanceMaterial,se as LuminancePass,tt as MaskFunction,ot as MaskMaterial,Y as MaskPass,it as MipmapBlurPass,M as NoiseEffect,re as NoiseTexture,rt as NormalPass,i as OutlineEdgesMaterial,i as OutlineMaterial,P as OutlineEffect,ae as OverrideMaterialManager,w as Pass,ke as PixelationEffect,e as PredicationMode,De as RawImageData,b as RealisticBokehEffect,S as RenderPass,E as Resizable,o as Resizer,o as Resolution,f as SMAAAreaImageData,v as SMAAEffect,A as SMAAImageGenerator,ct as SMAAImageLoader,n as SMAAPreset,R as SMAASearchImageData,u as SMAAWeightsMaterial,I as SSAOEffect,B as SSAOMaterial,c as ScanlineEffect,g as Selection,He as SelectiveBloomEffect,m as SepiaEffect,W as ShaderPass,H as ShockWaveEffect,K as TetrahedralUpscaler,O as TextureEffect,te as TiltShiftBlurMaterial,ge as TiltShiftBlurPass,Xe as TiltShiftEffect,Fe as Timer,We as ToneMappingEffect,we as ToneMappingMode,le as UpsamplingMaterial,Re as VignetteEffect,qe as VignetteTechnique,fe as WebGLExtension,je as version}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine.dep.DFJFZC0m.js.gz b/Needle/MenuScene/dist/assets/needle-engine.dep.DFJFZC0m.js.gz deleted file mode 100644 index aef130b..0000000 Binary files a/Needle/MenuScene/dist/assets/needle-engine.dep.DFJFZC0m.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/needle-engine.extras.B9pwA3ET.js b/Needle/MenuScene/dist/assets/needle-engine.extras.B9pwA3ET.js deleted file mode 100644 index ecaf88b..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine.extras.B9pwA3ET.js +++ /dev/null @@ -1,80 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./needle-engine.CE4b2dOg.js","./needle-engine@5.0.3.js","./rolldown-runtime.CYVBeYYp.js","./needle-engine-webxr.DiiWSXeh.js","./materialx.CnHmG--Y.js","./three@0.169.19.js","./needle-engine-ui.D3ZoIJG5.js","./gltf-progressive.BBJGcb3s.js","./three-examples@0.169.19.js","./three-mesh-ui.CgGzZ3ml.js","./needle-engine-particles.Ce6eiXqY.js","./three-quarks.DALdLWPD.js","./needle-engine.extras.dI9yZHT7.js","./postprocessing.Wy71DpiM.js","./three-mesh-bvh.B-oXEGo2.js"])))=>i.map(i=>d[i]); -import{d as e}from"./materialx.CnHmG--Y.js";import{A as t,Ar as n,At as r,D as i,Gn as a,Jt as o,Kn as s,Mr as c,Nr as l,Nt as u,P as d,Q as f,Qn as p,Qt as m,R as ee,S as h,T as g,Tn as te,Xt as _,Z as ne,Zn as re,Zt as v,_ as ie,_n as ae,a as oe,d as se,fn as y,fr as ce,gn as le,gr as ue,i as de,in as fe,jr as pe,jt as me,kr as b,kt as he,nr as ge,s as _e,st as ve,tr as ye,tt as be,u as xe,ur as Se,ut as Ce,vn as we,wn as x,x as Te,y as Ee,yn as De}from"./three@0.169.19.js";import{$i as S,A as C,Aa as Oe,An as ke,Ao as Ae,B as je,Br as Me,C as Ne,D as Pe,Di as Fe,Dr as Ie,E as Le,Ea as Re,F as ze,Fa as Be,Fo as Ve,G as He,Ho as Ue,I as We,Io as Ge,Ir as Ke,Jt as qe,Ka as w,Kr as T,L as E,Lo as Je,Ma as Ye,Mo as Xe,Mr as Ze,Ni as Qe,No as $e,Nr as et,Nt as tt,Ot as nt,P as rt,Q as it,Qi as at,S as ot,T as D,Ua as O,Uo as st,W as ct,Wo as lt,X as k,Xi as A,Z as ut,Zi as j,Zn as dt,_ as ft,_a as M,a as pt,ai as mt,ao as ht,at as gt,ba as _t,co as N,cr as P,ct as F,dn as vt,ea as I,eo as yt,f as bt,fi as xt,fn as St,g as Ct,h as wt,hi as Tt,i as Et,io as Dt,j as Ot,ja as kt,jo as At,k as jt,kt as L,l as Mt,la as Nt,ln as Pt,n as Ft,na as It,ni as Lt,o as Rt,oo as zt,ot as R,p as Bt,pa as z,q as Vt,r as B,ra as Ht,s as Ut,sa as Wt,sn as Gt,t as Kt,tr as qt,u as Jt,un as V,uo as Yt,va as Xt,vr as Zt,wa as Qt,wi as $t,x as en,xr as tn,y as nn,ya as rn,yn as an}from"./needle-engine-ui.D3ZoIJG5.js";import{d as on,g as sn}from"./three-examples@0.169.19.js";import{$t as cn,A as ln,B as un,Bt as dn,C as fn,Ft as pn,G as mn,Gt as hn,H as gn,It as _n,J as vn,K as yn,Kt as bn,L as xn,Lt as Sn,N as Cn,Ot as wn,P as Tn,Qt as En,Rt as Dn,S as On,U as kn,Ut as An,V as jn,Vt as Mn,W as Nn,Wt as Pn,X as Fn,Xt as In,Y as Ln,Yt as Rn,Zt as zn,at as Bn,bt as Vn,cn as Hn,d as Un,dn as Wn,f as Gn,fn as Kn,j as qn,k as Jn,ln as Yn,lt as Xn,m as Zn,mn as Qn,n as $n,nn as er,o as tr,on as nr,pn as rr,q as ir,qt as ar,r as or,rt as sr,sn as cr,st as lr,t as ur,tn as dr,tt as fr,un as pr,w as mr,x as hr,xt as gr,yt as _r}from"./needle-engine-webxr.DiiWSXeh.js";import{r as vr,t as yr}from"./needle-engine-particles.Ce6eiXqY.js";import{a as br,c as xr,d as Sr,f as Cr,h as wr,i as Tr,l as Er,m as Dr,o as Or,p as kr,r as Ar,s as jr,t as Mr,u as Nr}from"./needle-engine.extras.dI9yZHT7.js";var Pr=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Fr=N(`debugsignals`),Ir=class{guid};Pr([A()],Ir.prototype,`guid`,void 0);var Lr=class{signal;reaction};Pr([A(Ir)],Lr.prototype,`signal`,void 0),Pr([A(k)],Lr.prototype,`reaction`,void 0);var Rr=class e extends R{static receivers={};static invoke(t){if(e.receivers[t]){let n=e.receivers[t];if(!n)return;for(let e of n)e.invoke(t)}}events;awake(){Fr&&console.log(`SignalReceiver awake`,this)}onEnable(){if(this.events)for(let t of this.events)e.receivers[t.signal.guid]||(e.receivers[t.signal.guid]=[]),e.receivers[t.signal.guid].push(this)}onDisable(){if(this.events){for(let t of this.events)if(e.receivers[t.signal.guid]){let n=e.receivers[t.signal.guid].indexOf(this);n>=0&&e.receivers[t.signal.guid].splice(n,1)}}}invoke(e){if(!this.events||!Array.isArray(this.events))return;let t=typeof e==`object`?e.guid:e;for(let e of this.events)if(e.signal.guid===t)try{if(!e.reaction){console.warn(`Missing reaction for signal`,e,this);continue}else if(!e.reaction.invoke){console.warn(`Missing invoke - possibly a serialization error`,e,this);continue}e.reaction.invoke()}catch(e){console.error(e)}}};Pr([A(Lr)],Rr.prototype,`events`,void 0);var zr;(function(e){e.Activation=`ActivationTrack`,e.Animation=`AnimationTrack`,e.Audio=`AudioTrack`,e.Control=`ControlTrack`,e.Marker=`MarkerTrack`,e.Signal=`SignalTrack`})(zr||={});var Br;(function(e){e[e.None=0]=`None`,e[e.Hold=1]=`Hold`,e[e.Loop=2]=`Loop`,e[e.PingPong=3]=`PingPong`,e[e.Continue=4]=`Continue`})(Br||={});var Vr;(function(e){e.Signal=`SignalEmitter`})(Vr||={});var Hr=N(`debugtimeline`),Ur=class{director;track;get muted(){return this.track.muted}set muted(e){e!==this.track.muted&&(this.track.muted=e,this.onMuteChanged?.call(this))}*forEachClip(e=!1){if(this.track?.clips)if(e)for(let e=this.track.clips.length-1;e>=0;e--)yield this.track.clips[e];else for(let e of this.track.clips)yield e}getClipTime(e,t){return t.clipIn+(e-t.start)*t.timeScale}getClipTimeNormalized(e,t){return(e-t.start)/t.duration}evaluateWeight(e,t,n,r=!0){if(t<0||t>=n.length)return 0;let i=n[t];if(r||e>=i.start&&e<=i.end){let t=1;if(i.easeInDuration>0){let n=Math.min((e-i.start)/i.easeInDuration,1);t*=n}if(i.easeOutDuration>0){let n=Math.min((i.end-e)/i.easeOutDuration,1);t*=n}return t}return 0}},Wr=class{clip;rootPositionOffset;rootQuaternionOffset;get hasOffsets(){return this.rootPositionOffset!==void 0||this.rootQuaternionOffset!==void 0}rootStartPosition;rootEndPosition;rootStartQuaternion;rootEndQuaternion;constructor(e){let t=e.getClip();this.clip=t;let r=e.getRoot(),i=r.name+`.position`,a=r.name+`.quaternion`;Hr&&console.log(t.name,t.tracks,i);for(let e of t.tracks)if(!(e.times.length<=0)){if(e.name.endsWith(i))this.rootStartPosition=new n().fromArray(e.values,0),this.rootEndPosition=new n().fromArray(e.values,e.values.length-3),this.rootPositionOffset=this.rootEndPosition.clone().sub(this.rootStartPosition),Hr&&console.log(this.rootPositionOffset);else if(e.name.endsWith(a)&&(this.rootStartQuaternion=new x().fromArray(e.values,0),this.rootEndQuaternion=new x().fromArray(e.values,e.values.length-4),this.rootQuaternionOffset=this.rootEndQuaternion.clone().multiply(this.rootStartQuaternion),Hr)){let e=new be().setFromQuaternion(this.rootQuaternionOffset);console.log(`ROT`,e)}}}},Gr=class extends Ur{models=[];trackOffset;target;mixer;clips=[];actions=[];weight=1;_actionOffsets=[];_didBind=!1;_animator=null;onDisable(){this.mixer?.stopAllAction()}onDestroy(){this.director.context.animations.unregisterAnimationMixer(this.mixer)}onStateChanged(){this._animator&>(this._animator.gameObject,this,this.director.enabled&&this.director.weight>0)}createHooks(e,t){if(t.tracks?.length<=0){console.warn(`No tracks in AnimationClip`,t);return}let n=!1,r=!1,i=t.tracks.find(e=>e.name.includes(`.position`)||e.name.includes(`.quaternion`))?.name.split(`.`);if(i){let a=i[i.length-2],o=a+`.position`,s=a+`.quaternion`;for(let i of t.tracks)!n&&i.name.endsWith(o)?(n=!0,this.createPositionInterpolant(t,e,i)):!r&&i.name.endsWith(s)&&(r=!0,this.createRotationInterpolant(t,e,i))}if(!n||!r){let i=this.mixer?.getRoot(),a=t.tracks[0],o=a.name.lastIndexOf(`.`),s=a.name.substring(0,o),l=s.substring(s.lastIndexOf(`.`)+1),u=i.getObjectByName(l);if(u){if(!n){let n=s+`.position`;Hr&&console.warn(`Create position track`,l,u);let r=new c(n,[0,t.duration],[0,0,0,0,0,0]);t.tracks.push(r),this.createPositionInterpolant(t,e,r)}else if(!r){let n=t.tracks[0].name.substring(0,o)+`.quaternion`;Hr&&console.warn(`Create quaternion track`,l,u);let r=new te(n,[0,t.duration],[0,0,0,1,0,0,0,1]);t.tracks.push(r),this.createRotationInterpolant(t,e,r)}}}}bind(){if(!this._didBind){this._didBind=!0,Hr&&console.log(this.models),this.mixer?this.target=this.mixer.getRoot():console.warn(`No mixer was assigned to animation track`);for(let e of this.actions){let t=new Wr(e);this._actionOffsets.push(t)}this.target&&(this._animator=F.getComponent(this.target,it)??null,this._animator&>(this._animator.gameObject,this,!0));for(let e of this.models){let t=e.asset,r=t.position,i=t.rotation;r&&r.x!==void 0&&(r.isVector3||(t.position=new n(r.x,r.y,r.z)),i.isQuaternion||(t.rotation=new x(i.x,i.y,i.z,i.w)))}this.ensureTrackOffsets()}}ensureTrackOffsets(){if(this.trackOffset){let e=this.trackOffset.position;e&&(e.isVector3||(this.trackOffset.position=new n(e.x,e.y,e.z)));let t=this.trackOffset.rotation;t&&(t.isQuaternion||(this.trackOffset.rotation=new x(t.x,t.y,t.z,t.w)))}}_useclipOffsets=!0;_totalOffsetPosition=new n;_totalOffsetRotation=new x;_totalOffsetPosition2=new n;_totalOffsetRotation2=new x;_summedPos=new n;_tempPos=new n;_summedRot=new x;_tempRot=new x;_clipRotQuat=new x;evaluate(e){if(this.track.muted||!this.mixer)return;this.bind(),this._totalOffsetPosition.set(0,0,0),this._totalOffsetRotation.set(0,0,0,1),this._totalOffsetPosition2.set(0,0,0),this._totalOffsetRotation2.set(0,0,0,1);let t=0,n=0,r=!1,i=!1,a=0;for(let o=0;o=s.start&&e<=s.end,d=s.preExtrapolationMode,f=s.postExtrapolationMode,p=oe)&&(m=!0,r=!0):o==0&&!m&&!i&&s.start>e&&d!==Br.None&&(!p||p.startte;)h-=te}else if(!u&&r)switch(f){case Br.Hold:h=this.getClipTime(s.end,s);break;case Br.Loop:h%=te;break;case Br.PingPong:let e=Math.floor(h/te)%2!=0;h%=te,e&&(h=te-h);break}s.reversed===!0?c.time=c.getClip().duration-h:c.time=h,c.timeScale=0;let _=Math.max(0,i);if(c.weight=_,a+=_,c.clampWhenFinished=!1,c.isRunning()||c.play(),this._useclipOffsets){let e=t==0?this._totalOffsetPosition:this._totalOffsetPosition2,r=t==0?this._totalOffsetRotation:this._totalOffsetRotation2;t<1&&(n=1-i),t+=1;let a=this._summedPos.set(0,0,0),s=this._tempPos.set(0,0,0),c=this._summedRot.identity(),u=this._tempRot.identity(),d=l.rotation;d&&(this._clipRotQuat.identity(),this._clipRotQuat.slerp(d,i));let f=this._actionOffsets[o];if(f.hasOffsets)for(let e=0;e{let e=r(),t=e.evaluate.bind(e);return e.evaluate=e=>{let n=t(e);if(i.set(n[0],n[1],n[2],n[3]),i.premultiply(this._totalOffsetRotation),a&&i.premultiply(a),this.director.animationCallbackReceivers)for(let t of this.director.animationCallbackReceivers)t?.onTimelineRotation?.call(t,this.director,this.target,e,i);return n[0]=i.x,n[1]=i.y,n[2]=i.z,n[3]=i.w,n},e}}createPositionInterpolant(e,t,r){let i=r.createInterpolant.bind(r),a=new n;this.ensureTrackOffsets();let o=this.trackOffset?.rotation,s=this.trackOffset?.position,c;r.createInterpolant=()=>{let n=i(),r=n.evaluate.bind(n);return n.evaluate=n=>{let i=r(n);if(a.set(i[0],i[1],i[2]),t.removeStartOffset&&(c===void 0?(c=null,c=this._actionOffsets.find(t=>t.clip===e)?.rootStartPosition?.clone()):c?.isVector3&&a.sub(c)),a.applyQuaternion(this._totalOffsetRotation),a.add(this._totalOffsetPosition),o&&a.applyQuaternion(o),s&&(a.x-=s.x,a.y+=s.y,a.z+=s.z),this.director.animationCallbackReceivers)for(let e of this.director.animationCallbackReceivers)e?.onTimelinePosition?.call(e,this.director,this.target,n,a);return i[0]=a.x,i[1]=a.y,i[2]=a.z,i},n}}},Kr=N(`mutetimeline`),qr=class e extends Ur{models=[];listener;audio=[];audioContextTimeOffset=[];lastTime=0;audioSource;_audioLoader=null;getAudioFilePath(e){let t=this.director.sourceId;return At(t,e)}onAllowAudioChanged(e){for(let t=0;t=a.start&&e<=a.end&&e.3?o.offset=a.clipIn+(e-a.start)*a.timeScale:o.offset=0,Hr&&console.log(`Timeline Audio (`+this.track.name+`) play with offset `+o.offset+` - `+a.asset.clip),o.play(r),a._didTriggerPlay=!0);else{let t=a.clipIn+(e-a.start)*a.timeScale,n=o.context.currentTime-o._startedAt+o.offset;Math.abs(t-n)>.3&&(o.offset=t,o.stop(),o.play(r))}let i=s.volume;if(this.track.volume!==void 0&&(i*=this.track.volume),t&&(i=0),a.easeInDuration>0){let t=Math.min((e-a.start)/a.easeInDuration,1);i*=t}if(a.easeOutDuration>0){let t=Math.min((a.end-e)/a.easeOutDuration,1);i*=t}o.setVolume(i*this.director.weight)}else a._didTriggerPlay=!1,this.director.isPlaying&&o.isPlaying&&o.stop()}this.lastTime=e}loadAudio(e,t=0,n=0){let r=null,i=e-n,a=e+t;for(let e of this.models)if(this.isInTimeRange(e,i,a)){let t=this.audio[this.models.indexOf(e)],n=this.handleAudioLoading(e,t);n!==null&&(r===null&&(r=[]),r.push(n))}return r===null?null:Promise.all(r)}isInTimeRange(e,t,n){return t<=e.start&&n>=e.end||t>=e.start&&t<=e.end||n>=e.start&&n<=e.end}static _audioBuffers=new Map;static dispose(){e._audioBuffers.clear()}handleAudioLoading(t,n){this._audioLoader||=new xe;let r=this.getAudioFilePath(t.asset.clip);if(e._audioBuffers.get(r)){let t=e._audioBuffers.get(r);return t.then(e=>{e&&n.setBuffer(e)}),t}Hr&&console.warn(`LOAD audio track`,r,this.director.sourceId);let i=new Promise((e,t)=>{this._audioLoader.load(r,t=>{n.setBuffer(t),e(t)},void 0,t=>{console.error(`Error loading audio`,t),e(null)})});return e._audioBuffers.set(r,i),i}},Jr=class extends Ur{models=[];needsSorting=!0;*foreachMarker(e=null){this.needsSorting&&this.sort();for(let t of this.models)t&&t.type===e&&(yield t)}onEnable(){this.needsSorting=!0}evaluate(e){this.needsSorting&&this.sort()}sort(){this.needsSorting=!1,this.models.sort((e,t)=>e.time-t.time)}},Yr=class extends Ur{models=[];didTrigger=[];receivers=[];evaluate(e){if(this.track.muted)return;let t=this.director.context.time.deltaTime*1.5;for(let n=0;n=1e-5&&e=0;e--){let t=this.models[e].asset;if(!t.sourceObject||typeof t.sourceObject!=`object`){console.log(`no source object, removing model`,e,t),this.models.splice(e,1);continue}else{let e=this.director.constructor,n=F.getComponent(t.sourceObject,e);this.timelines.push(n),n&&t.updateDirector&&(n.playOnAwake=!1)}}}_previousActiveModel=null;evaluate(e){this._previousActiveModel=null;for(let t=0;t=n.start&&e<=n.end){this._previousActiveModel=n;let i=this.getClipTime(e,n);if(r.controlActivation){let e=r.sourceObject;e.visible=!0}if(r.updateDirector){let e=this.timelines[t];e&&(e.isPlaying&&e.pause(),e.time=i,e.evaluate())}}else{let e=this._previousActiveModel?.asset;if(r.controlActivation){let t=r.sourceObject;e?.sourceObject!==t&&(t.visible=!1)}}}}},Zr=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Qr=N(`debugtimeline`),$r;(function(e){e[e.Hold=0]=`Hold`,e[e.Loop=1]=`Loop`,e[e.None=2]=`None`})($r||={});var ei;(function(e){e[e.None=0]=`None`,e[e.Hold=1]=`Hold`,e[e.Loop=2]=`Loop`,e[e.PingPong=3]=`PingPong`,e[e.Continue=4]=`Continue`})(ei||={});var ti=class e extends R{static createTrackFunctions={};static registerCreateTrack(e,t){this.createTrackFunctions[e]=t}playableAsset;playOnAwake;extrapolationMode=$r.Loop;get isPlaying(){return this._isPlaying}get isPaused(){return this._isPaused}get time(){return this._time}set time(e){typeof e==`number`&&!Number.isNaN(e)?this._time=e:(Qr||Ue())&&console.error(`INVALID TIMELINE.TIME VALUE`,e,this.name)}get duration(){return this._duration}set duration(e){this._duration=e}get weight(){return this._weight}set weight(e){this._weight=e}get speed(){return this._speed}set speed(e){this._speed=e}waitForAudio=!0;_visibilityChangeEvt;_clonedPlayableAsset=!1;_speed=1;awake(){Qr&&console.log(`[Timeline] Awake '${this.name}'`,this),this.rebuildGraph(),!this.isValid()&&(Qr||w())&&(Qr?console.warn(`PlayableDirector is not valid`,`Asset?`,this.playableAsset,`Tracks:`,this.playableAsset?.tracks,`IsArray?`,Array.isArray(this.playableAsset?.tracks),this):this.playableAsset?.tracks?.length?console.warn(`PlayableDirector is not valid`):console.warn(`PlayableDirector has no tracks`))}onEnable(){Qr&&console.log(`[Timeline] OnEnable`,this.name,this.playOnAwake);for(let e of this._audioTracks)e.onEnable?.();for(let e of this._customTracks)e.onEnable?.();for(let e of this._animationTracks)e.onEnable?.();this.playOnAwake&&this.play(),this._visibilityChangeEvt||=()=>{switch(document.visibilityState){case`hidden`:this.setAudioTracksAllowPlaying(!1);break;case`visible`:this.setAudioTracksAllowPlaying(!0);break}},window.addEventListener(`visibilitychange`,this._visibilityChangeEvt)}onDisable(){Qr&&console.log(`[Timeline] OnDisable`,this.name),this.stop();for(let e of this._audioTracks)e.onDisable?.();for(let e of this._customTracks)e.onDisable?.();for(let e of this._animationTracks)e.onDisable?.();this._visibilityChangeEvt&&window.removeEventListener(`visibilitychange`,this._visibilityChangeEvt)}onDestroy(){for(let e of this._allTracks)for(let t of e)t.onDestroy?.()}rebuildGraph(){this.isValid()&&(this.resolveBindings(),this.updateTimelineDuration(),this.setupAndCreateTrackHandlers())}async play(){if(!this.isValid())return;let e=this._isPaused==1;if(this._isPaused=!1,!this._isPlaying){if(this._isPlaying=!0,e&&this.invokePauseChangedMethodsOnTracks(),this.waitForAudio){let e=[];for(let t of this._audioTracks){let n=t.loadAudio(this._time,1,0);n&&e.push(n)}if(e.length>0&&(await Promise.all(e),!this._isPlaying))return;for(;this._audioTracks.length>0&&this._isPlaying&&!Kn.userInteractionRegistered&&this.waitForAudio;)await zt(200)}this.invokeStateChangedMethodsOnTracks(),this._internalUpdateRoutine=this.startCoroutine(this.internalUpdate(),an.LateUpdate)}}pause(){this.isValid()&&(this._isPlaying=!1,!this._isPaused&&(this._isPaused=!0,this.internalEvaluate(),this.invokePauseChangedMethodsOnTracks(),this.invokeStateChangedMethodsOnTracks()))}stop(){this._isStopping=!0;for(let e of this._audioTracks)e.stop();let e=this._isPaused==1,t=this._isPlaying;this._isPlaying&&(this._time=0,this._isPlaying=!1,this._isPaused=!1,this.internalEvaluate(),e&&this.invokePauseChangedMethodsOnTracks()),this._isPlaying=!1,this._isPaused=!1,e&&!t&&this.invokePauseChangedMethodsOnTracks(),t&&this.invokeStateChangedMethodsOnTracks(),this._internalUpdateRoutine&&this.stopCoroutine(this._internalUpdateRoutine),this._internalUpdateRoutine=null,this._isStopping=!1}evaluate(){this.internalEvaluate(!0)}isValid(){return this.playableAsset&&this.playableAsset.tracks&&Array.isArray(this.playableAsset.tracks)}*forEachTrack(){for(let e of this._allTracks)for(let t of e)yield t}get animationTracks(){return this._animationTracks}get audioTracks(){return this._audioTracks}get signalTracks(){return this._signalTracks}get markerTracks(){return this._markerTracks}*foreachMarker(e=null){for(let t of this._markerTracks)for(let n of t.foreachMarker(e))yield n}_guidsMap;resolveGuids(e){this._guidsMap=e}_isPlaying=!1;_internalUpdateRoutine;_isPaused=!1;_isStopping=!1;_time=0;_duration=0;_weight=1;_animationTracks=[];_audioTracks=[];_signalTracks=[];_markerTracks=[];_controlTracks=[];_customTracks=[];_tracksArray=[];get _allTracks(){return this._tracksArray.length=0,this._tracksArray.push(this._animationTracks),this._tracksArray.push(this._audioTracks),this._tracksArray.push(this._signalTracks),this._tracksArray.push(this._markerTracks),this._tracksArray.push(this._controlTracks),this._tracksArray.push(this._customTracks),this._tracksArray}invokePauseChangedMethodsOnTracks(){for(let e of this.forEachTrack())e.onPauseChanged?.call(e)}invokeStateChangedMethodsOnTracks(){for(let e of this.forEachTrack())e.onStateChanged?.call(e,this._isPlaying)}*internalUpdate(){for(;this._isPlaying&&this.activeAndEnabled;)!this._isPaused&&this._isPlaying&&(this._time+=this.context.time.deltaTime*this.speed,this.internalEvaluate()),yield}internalEvaluate(e=!1){if(!this.isValid())return;let t=this._time;switch(this.extrapolationMode){case $r.Hold:this._speed>0?t=Math.min(t,this._duration):this._speed<0&&(t=Math.max(t,0)),this._time=t;break;case $r.Loop:t%=this._duration,this._time=t;break;case $r.None:if(t>this._duration){this.stop();return}break}let n=this._time;for(let t of this.playableAsset.tracks)if(!t.muted)switch(t.type){case zr.Activation:if(!e&&!this._isPlaying)continue;for(let e=0;e=0;r--){let i=n.outputs[r];if(typeof i==`string`){this._guidsMap&&this._guidsMap[i]&&(i=this._guidsMap[i]);let e=F.findByGuid(i,t);typeof e!=`object`||!e?(n.outputs.splice(r,1),console.warn(`Failed to resolve binding`,i,n.name,n.type)):(Qr&&console.log(`Resolved binding`,i,`to`,e),n.outputs[r]=e)}else if(i===null){if(n.outputs.splice(r,1),e.createTrackFunctions[n.type])continue;n.type!==zr.Audio&&n.type!==zr.Control&&n.type!==zr.Marker&&n.type!==zr.Signal&&console.warn(`Missing binding`,i,n.name,n.type,this.name,this.playableAsset.name)}}if(n.type===zr.Control&&n.clips)for(let e=0;ethis._duration&&(this._duration=t.end);if(e.markers)for(let t of e.markers)t.time>this._duration&&(this._duration=t.time+.001)}}}setupAndCreateTrackHandlers(){if(this._animationTracks.length=0,this._audioTracks.length=0,this._signalTracks.length=0,!this.playableAsset)return;let t=F.findObjectOfType(rr,this.context);for(let n of this.playableAsset.tracks){let r=n.type,i=e.createTrackFunctions[r];if(i!=null){let e=i(this,n);if(typeof e.evaluate==`function`){e.director=this,e.track=n,this._customTracks.push(e);continue}}if(n.type===zr.Animation){if(!n.clips||n.clips.length<=0){Qr&&console.warn(`Animation track has no clips`,n);continue}for(let e=n.outputs.length-1;e>=0;e--){let t=n.outputs[e];if(t instanceof y){let e=F.getOrAddComponent(t,it);e&&(t=e)}let r=t?.gameObject?.animations;if(r){let e=new Gr;e.trackOffset=n.trackOffset,e.director=this,e.track=n;for(let i=0;ie.name===s)),Qr&&console.log(o,s,`→`,c),!c){console.warn(`Could not find animationClip for model`,a,n.name,this.name,this.playableAsset?.name,r,t);continue}t instanceof it&&t.runtimeAnimatorController&&(t.__internalDidAwakeAndStart||t.initializeRuntimeAnimatorController(),t.runtimeAnimatorController.mixer||t.runtimeAnimatorController.bind(t),e.mixer=t.runtimeAnimatorController.mixer),e.mixer||(e.mixer=new oe(t.gameObject),this.context.animations.registerAnimationMixer(e.mixer)),e.clips.push(c),e.mixer.uncacheAction(c),e.createHooks(a.asset,c);let l=e.mixer.clipAction(c);e.actions.push(l),e.models.push(a)}this._animationTracks.push(e)}}}else if(n.type===zr.Audio){if(!n.clips||n.clips.length<=0)continue;let e=new qr;e.director=this,e.track=n,e.audioSource=n.outputs.find(e=>e instanceof Kn),this._audioTracks.push(e),t||=this.context.mainCameraComponent?.gameObject.addComponent(rr),e.listener=t.listener;for(let t=0;t0){let t=F.getComponent(this.gameObject,Rr);t&&(e.receivers.push(t),this._signalTracks.push(e))}t!==null&&t.models.length>0&&this._markerTracks.push(t)}}else if(n.type===zr.Signal){let e=new Yr;if(e.director=this,e.track=n,n.markers)for(let t of n.markers)e.models.push(t),e.didTrigger.push(!1);for(let t of n.outputs)e.receivers.push(t);this._signalTracks.push(e)}else if(n.type===zr.Control){let e=new Xr;if(e.director=this,e.track=n,n.clips)for(let t of n.clips)e.models.push(t);e.resolveSourceObjects(this.context),this._controlTracks.push(e)}}}setAudioTracksAllowPlaying(e){for(let t of this._audioTracks)t.onAllowAudioChanged(e)}animationCallbackReceivers=[];registerAnimationCallback(e){this.animationCallbackReceivers.push(e)}unregisterAnimationCallback(e){let t=this.animationCallbackReceivers.indexOf(e);t!==-1&&this.animationCallbackReceivers.splice(t,1)}};Zr([A()],ti.prototype,`playOnAwake`,void 0),Zr([A()],ti.prototype,`extrapolationMode`,void 0);var ni={topLight:{intensity:500,position:[.418,16.199,.3]},room:{position:[-.757,13.219,.717],scale:[31.713,28.305,28.591]},boxes:[{position:[-10.906,2.009,1.846],rotation:-.195,scale:[2.328,7.905,4.651]},{position:[-5.607,-.754,-.758],rotation:.994,scale:[1.97,1.534,3.955]},{position:[6.167,.857,7.803],rotation:.561,scale:[3.927,6.285,3.687]},{position:[-2.017,.018,6.124],rotation:.333,scale:[2.002,4.566,2.064]},{position:[2.291,-.756,-2.621],rotation:-.286,scale:[1.546,1.552,1.496]},{position:[-2.193,-.369,-5.547],rotation:.516,scale:[3.875,3.487,2.986]}],lights:[{intensity:50,position:[-16.116,14.37,8.208],scale:[.1,2.428,2.739]},{intensity:50,position:[-16.109,18.021,-8.207],scale:[.1,2.425,2.751]},{intensity:17,position:[14.904,12.198,-1.832],scale:[.15,4.265,6.331]},{intensity:43,position:[-.462,8.89,14.52],scale:[4.38,5.441,.088]},{intensity:20,position:[3.235,11.486,-12.541],scale:[2.5,2,.1]},{intensity:100,position:[0,20,0],scale:[1,.1,1]}]},ri={topLight:{intensity:400,position:[.5,14,.5]},room:{position:[0,13.2,0],scale:[31.5,28.5,31.5]},boxes:[{position:[-10.906,-1,1.846],rotation:-.195,scale:[2.328,7.905,4.651]},{position:[-5.607,-.754,-.758],rotation:.994,scale:[1.97,1.534,3.955]},{position:[6.167,-.16,7.803],rotation:.561,scale:[3.927,6.285,3.687]},{position:[-2.017,.018,6.124],rotation:.333,scale:[2.002,4.566,2.064]},{position:[2.291,-.756,-2.621],rotation:-.286,scale:[1.546,1.552,1.496]},{position:[-2.193,-.369,-5.547],rotation:.516,scale:[3.875,3.487,2.986]}],lights:[{intensity:80,position:[-14,10,8],scale:[.1,2.5,2.5]},{intensity:80,position:[-14,14,-4],scale:[.1,2.5,2.5]},{intensity:23,position:[14,12,0],scale:[.1,5,5]},{intensity:16,position:[0,9,14],scale:[5,5,.1]},{intensity:80,position:[7,8,-14],scale:[2.5,2.5,.1]},{intensity:80,position:[-7,16,-14],scale:[2.5,2.5,.1]},{intensity:1,position:[0,20,0],scale:[.1,.1,.1]}]},ii=class extends p{constructor(e){super(),this.position.y=-3.5;let t=new Ee;t.deleteAttribute(`uv`);let n=new fe({metalness:0,side:1}),r=new fe({metalness:0}),i=e==`legacy`?ni:ri,a=new De(16777215,i.topLight.intensity,28,2);a.position.set(...i.topLight.position),this.add(a);let o=new v(t,n);o.position.set(...i.room.position),o.scale.set(...i.room.scale),this.add(o);for(let e of i.boxes){let n=new v(t,r);n.position.set(...e.position),n.rotation.set(0,e.rotation,0),n.scale.set(...e.scale),this.add(n)}for(let e of i.lights){let n=new v(t,this.createAreaLightMaterial(e.intensity));n.position.set(...e.position),n.scale.set(...e.scale),this.add(n)}}createAreaLightMaterial(e){let t=new m;return t.color.setScalar(e),t}};async function ai(t){let{NeedleEngineWebComponent:n}=await e(async()=>{let{NeedleEngineWebComponent:e}=await import(`./needle-engine.CE4b2dOg.js`);return{NeedleEngineWebComponent:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]),import.meta.url);n.observedAttributes.includes(t)||n.observedAttributes.push(t)}var H=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},U=N(`debugsceneswitcher`),oi=N(`sceneswitcher:clearscene`),si=`scene`;function ci(){ai(si)}var li=Promise.resolve(!1),W=class extends R{autoLoadFirstScene=!0;scenes=[];loadingScene;queryParameterName=`scene`;useSceneName=!0;clamp=!0;useHistory=!0;useKeyboard=!0;useSwipe=!0;useSceneLighting=!0;useSceneBackground=!0;preloadNext=1;preloadPrevious=1;preloadConcurrent=2;createMenuButtons=!1;get currentIndex(){return this._currentIndex}get currentLoadingProgress(){return this._currentLoadingProgress}get currentlyLoadingScene(){return this._currentlyLoadingScene}get currentlyLoadedScene(){return this._currentScene}sceneLoadingStart=new k;sceneLoadingProgress=new k;sceneLoaded=new k;_currentIndex=-1;_currentScene=void 0;_currentSceneAsset=void 0;_engineElementOverserver=void 0;_preloadScheduler;_menuButtons;__lastSwitchScene;__lastSwitchScenePromise;awake(){this._currentScene=void 0,this._lastLoadingScene=void 0,this.__lastSwitchScenePromise=void 0,this.scenes===void 0&&(this.scenes=[]);for(let e of this.scenes)e&&!e.hasUrl&&e.asset instanceof y?F.remove(e.asset):e instanceof y&&F.remove(e);U&&console.log(`SceneSwitcher`,this)}async onEnable(){if(globalThis.addEventListener(`popstate`,this.onPopState),this.context.input.addEventListener(Ie.KeyDown,this.onInputKeyDown),this.context.input.addEventListener(Ie.PointerMove,this.onInputPointerMove),this.context.input.addEventListener(Ie.PointerUp,this.onInputPointerUp),this._engineElementOverserver||=new MutationObserver(e=>{for(let t of e)if(t.type===`attributes`&&t.attributeName===si){let e=this.context.domElement.getAttribute(si);e!==null&&this.trySelectSceneFromValue(e)}}),this._engineElementOverserver.observe(this.context.domElement,{attributes:!0}),this._preloadScheduler||=new di(this),this._preloadScheduler.maxLoadAhead=this.preloadNext,this._preloadScheduler.maxLoadBehind=this.preloadPrevious,this._preloadScheduler.maxConcurrent=this.preloadConcurrent,this._preloadScheduler.begin(2e3),this.autoLoadFirstScene&&this._currentIndex===-1&&!await this.tryLoadFromQueryParam()){let e=this.context.domElement.getAttribute(si);try{(e===null||!await this.trySelectSceneFromValue(e))&&this._currentIndex===-1&&this.select(0)}finally{}}this.createMenuButtons&&(this._menuButtons??=[],this._menuButtons.push(this.context.menu.appendChild({label:`Previous`,icon:`arrow_back_ios`,onClick:()=>this.selectPrev(),priority:-1005,class:`row2`})),this._menuButtons.push(this.context.menu.appendChild({label:`Next`,icon:`arrow_forward_ios`,iconSide:`right`,onClick:()=>this.selectNext(),priority:-1e3,class:`row2`})))}onDisable(){if(globalThis.removeEventListener(`popstate`,this.onPopState),this.context.input.removeEventListener(Ie.KeyDown,this.onInputKeyDown),this.context.input.removeEventListener(Ie.PointerMove,this.onInputPointerMove),this.context.input.removeEventListener(Ie.PointerUp,this.onInputPointerUp),this._preloadScheduler?.stop(),this._menuButtons){for(let e of this._menuButtons)e.remove();this._menuButtons=void 0}}onPopState=async e=>{if(!this.useHistory)return;let t=this.useHistory;try{this.useHistory=!1;let t=!1;if(this.queryParameterName&&(t=await this.tryLoadFromQueryParam()),!t){let t=e?.state;if(t&&t.startsWith(this.guid)){let e=t.substr(this.guid.length+2);U&&console.log(`PopState`,e),await this.trySelectSceneFromValue(e)}}}finally{this.useHistory=t}};normalizedSwipeThresholdX=.1;_didSwipe=!1;onInputPointerMove=e=>{if(this.useSwipe&&!this._didSwipe&&e.button===0&&e.pointerType===`touch`&&this.context.input.getPointerPressedCount()===1){let t=this.context.input.getPointerPositionDelta(e.button);if(t){let e=t.x/this.context.domWidth;e>=this.normalizedSwipeThresholdX?(this._didSwipe=!0,this.selectPrev()):e<=-this.normalizedSwipeThresholdX&&(this._didSwipe=!0,this.selectNext())}}};onInputPointerUp=e=>{e.button===0&&(this._didSwipe=!1)};onInputKeyDown=e=>{if(!this.useKeyboard||!this.scenes)return;let t=e.key.toLowerCase();if(!t)return;let n=parseInt(t)-1;if(n>=0){this.trySelectSceneFromValue(n);return}switch(t){case`arrowright`:case`d`:this.selectNext();break;case`arrowleft`:case`a`:this.selectPrev();break}};addScene(e){if(typeof e==`string`){let t=this.context.addressables.findAssetReference(e);return t||(t=new Me(e),this.context.addressables.registerAssetReference(t)),this.scenes.push(t),t}return this.scenes.push(e),e}selectNext(){return this.select(this._currentIndex+1)}selectPrev(){return this.select(this._currentIndex-1)}select(e){if(U&&console.log(`[SceneSwitcher] select`,e),typeof e==`object`&&console.warn(`[SceneSwitcher] Switching to "`+e+`" might not work. Please either use an index or a AssetReference (not a scene reference)`),typeof e==`string`){let t=this.scenes?.find(t=>t.url===e);if(!t){let t=Me.getOrCreate(this.sourceId??``,e,this.context);return this.switchScene(t)}if(t)e=this.scenes?.indexOf(t);else return li}if(!this.scenes?.length)return li;if(e<0){if(this.clamp)return li;e=this.scenes.length-1}else if(e>=this.scenes.length){if(this.clamp)return li;e=0}let t=this.scenes[e];return this.switchScene(t)}unload(){return this.__lastSwitchScene=void 0,this.__lastSwitchScenePromise=void 0,this.__unloadCurrentScene()}async reload(){if(this.__lastSwitchScene){let e=this.__lastSwitchScene;return this.__lastSwitchScene=void 0,this.switchScene(e)}return!1}async switchScene(e){if(!(e instanceof Me)){let t=typeof e;if(t===`string`||t===`number`)return this.select(e);if(e&&e instanceof y){let t=this.scenes?.indexOf(e);e=new Me(e.name,void 0,e),t>=0&&(this.scenes[t]=e)}else return console.warn(`[SceneSwitcher] Can't switch to scene of type ${t}`),!1}return e.url===this.sourceId?(console.warn(`[SceneSwitcher] Can't load own scene - prevent recursive loading`,this.sourceId),!1):this.__lastSwitchScene===e&&this.__lastSwitchScenePromise?this.__lastSwitchScenePromise:(this.__lastSwitchScene=e,this.__lastSwitchScenePromise=this.__internalSwitchScene(e),await this.__lastSwitchScenePromise)}async __unloadCurrentScene(){let e=this._currentScene;if(this._currentScene=void 0,e){U&&console.log(`[SceneSwitcher] UNLOAD`,e.url,`HasURL?: `+e.hasUrl);let t=this.tryGetSceneEventListener(e.asset);if(t?.sceneClosing){let e=t.sceneClosing();e instanceof Promise&&await e}e.hasUrl?(e.unload(),this._currentSceneAsset&&L(this._currentSceneAsset,!0,!1)):F.remove(this._currentSceneAsset)}}_currentlyLoadingScene;async __internalSwitchScene(e){await this.__unloadCurrentScene();let t=this._currentIndex=this.scenes?.indexOf(e)??-1;try{U&&console.debug(`${Date.now()} [SceneSwitcher] Loading scene start: ${e.url} (index: ${t})`),this._currentlyLoadingScene=e,this._currentLoadingProgress=new ProgressEvent(`progress`,{loaded:0,total:1});let n=new CustomEvent(`loadscene-start`,{detail:{scene:e,switcher:this,index:t}});this.dispatchEvent(n),this.sceneLoadingStart?.invoke(n.detail),await this.onStartLoading(),await e.loadAssetAsync((t,n)=>{if(U){let t=n.loaded/n.total,r=`[`+`=`.repeat(Math.floor(t*20))+`-`.repeat(20-Math.floor(t*20))+`]`;console.debug(`${Date.now()} [SceneSwitcher] Loading scene progress: ${(t*100).toFixed(1)} % ${r}`,e.url)}this._currentLoadingProgress=n,this.dispatchEvent(n),this.sceneLoadingProgress?.invoke(n)}).catch(console.error),await this.onEndLoading();let r=new CustomEvent(`loadscene-finished`,{detail:{scene:e,switcher:this,index:t}});if(this.dispatchEvent(r),this._currentLoadingProgress=void 0,this._currentlyLoadingScene=void 0,r.defaultPrevented)return U&&console.warn(`[SceneSwitcher] Adding loaded scene prevented:`,e,r),!1;if(!e.asset)return U&&console.warn(`[SceneSwitcher] Failed loading scene:`,e),!1;if(this._currentIndex===t){if(U&&console.log(`[SceneSwitcher] ADD`,e.url),this._currentScene=e,oi){let e=this.context.mainCameraComponent?.gameObject||this.context.mainCamera;e?.removeFromParent();let t=this.gameObject.removeFromParent();L(this.context.scene,!0,!0),this.context.scene=new p,this.context.scene.add(t),e&&this.context.scene.add(e)}if(e.asset.parent?this._currentSceneAsset=tt(e.asset,{parent:this.gameObject}):(this._currentSceneAsset=e.asset,F.add(e.asset,this.gameObject)),this.useSceneLighting&&this.context.sceneLighting.enable(e),this.useSceneBackground){let t=this.context.lightmaps.tryGetSkybox(e.url);t?(t.mapping!==306&&(t.mapping=303),this.context.scene.background=t):U&&console.warn(`[SceneSwitcher] Can't find skybox for scene `+e.url)}if(this.useHistory&&t>=0){let n=t.toString();if(this.useSceneName&&(e instanceof y?n=e.name:e.url&&(n=ui(e.url))),this.queryParameterName?.length)Ve(this.queryParameterName,n,this.useHistory);else{let e=history.state,n=this.guid+`::`+t;e!==n&&history.pushState(n,`unused`,location.href)}}let n=this.tryGetSceneEventListener(e.asset);if(n?.sceneOpened){let e=n.sceneOpened(this);e instanceof Promise&&await e}U&&console.debug(`${Date.now()} [SceneSwitcher] Loading scene finished: ${e.url} (index: ${t})`);let r=new CustomEvent(`scene-opened`,{detail:{scene:e,switcher:this,index:t}});return this.dispatchEvent(r),this.sceneLoaded?.invoke(this),!0}}catch(e){console.error(e)}return!1}preload(e){if(e>=0&&e=0&&t=0&&ee!=null),await this._loadingScenePromise,this._isCurrentlyLoading&&this.loadingScene?.asset)){U&&console.log(`Add loading scene`,this.loadingScene.url,this.loadingScene.asset);let e=this.loadingScene.asset;F.add(e,this.gameObject);let t=this.tryGetSceneEventListener(e);if(t?.sceneOpened){let e=t.sceneOpened(this);e instanceof Promise&&await e}}if(this._isCurrentlyLoading){let e=this.tryGetSceneEventListener(this.gameObject);if(e&&e.sceneOpened){let t=e.sceneOpened(this);t instanceof Promise&&await t}}}async onEndLoading(){if(this._isCurrentlyLoading=!1,this.loadingScene?.asset){U&&console.log(`Remove loading scene`,this.loadingScene.url);let e=this.loadingScene.asset,t=this.tryGetSceneEventListener(e);if(typeof t?.sceneClosing==`function`){let e=t.sceneClosing();e instanceof Promise&&await e}F.remove(e)}if(!this._isCurrentlyLoading){let e=this.tryGetSceneEventListener(this.gameObject);if(e&&e.sceneClosing){let t=e.sceneClosing();t instanceof Promise&&await t}}}tryGetSceneEventListener(e,t=0){if(!e)return null;let n=F.foreachComponent(e,e=>{let t=e;if(t.sceneClosing||t.sceneOpened)return t});if(t===0&&!n&&e.children.length)for(let n of e.children){let e=this.tryGetSceneEventListener(n,t+1);if(e)return e}return n||null}};H([A()],W.prototype,`autoLoadFirstScene`,void 0),H([A(Me)],W.prototype,`scenes`,void 0),H([A(Me)],W.prototype,`loadingScene`,void 0),H([A()],W.prototype,`queryParameterName`,void 0),H([A()],W.prototype,`useSceneName`,void 0),H([A()],W.prototype,`clamp`,void 0),H([A()],W.prototype,`useHistory`,void 0),H([A()],W.prototype,`useKeyboard`,void 0),H([A()],W.prototype,`useSwipe`,void 0),H([A()],W.prototype,`useSceneLighting`,void 0),H([A()],W.prototype,`useSceneBackground`,void 0),H([A()],W.prototype,`preloadNext`,void 0),H([A()],W.prototype,`preloadPrevious`,void 0),H([A()],W.prototype,`preloadConcurrent`,void 0),H([A()],W.prototype,`createMenuButtons`,void 0),H([A(k)],W.prototype,`sceneLoadingStart`,void 0),H([A(k)],W.prototype,`sceneLoadingProgress`,void 0),H([A(k)],W.prototype,`sceneLoaded`,void 0);function ui(e){let t=e.split(`/`).pop()?.split(`.`).shift();return t?.length?t:e}var di=class{maxLoadAhead;maxLoadBehind;maxConcurrent;_isRunning=!1;_switcher;_loadTasks=[];_maxConcurrentLoads=1;constructor(e,t=1,n=1,r=2){this._switcher=e,this.maxLoadAhead=t,this.maxLoadBehind=n,this.maxConcurrent=r}begin(e){if(this._isRunning)return;U&&console.log(`[SceneSwitcher] Preload scheduled`,{delay:e}),this._isRunning=!0;let t=-10,n,r,i=this._switcher.scenes,a=Date.now()+e,o=setInterval(()=>{if(this.allLoaded()&&(U&&console.log(`[SceneSwitcher] All scenes (pre-)loaded`),this.stop()),!this._isRunning){clearInterval(o);return}if(Date.now()s)return;let c=e?t+n:t-n;if(!(c<0)&&!(c<0||c>=i.length)&&!this._loadTasks.some(e=>e.index===c)){let n=i[c];U&&console.log(`[SceneSwitcher] Schedule preload scene`,{roomIndex:c,searchForward:e,lastRoom:t,currentIndex:this._switcher.currentIndex,tasks:this._loadTasks.length},n?.url),new fi(c,n,this._loadTasks)}},200)}stop(){this._isRunning=!1}canLoadNewScene(){return this._loadTasks.length=0&&this.tasks.splice(e,1)}},pi=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},G=N(`debugskybox`);function mi(){ai(`background-image`),ai(`environment-image`)}var hi={studio:{url:`https://cdn.needle.tools/static/skybox/modelviewer-Neutral.pmrem4x4.ktx2?pmrem`,url_low:`https://cdn.needle.tools/static/skybox/modelviewer-Neutral-small.pmrem4x4.ktx2?pmrem`},"blurred-skybox":{url:`https://cdn.needle.tools/static/skybox/blurred-skybox.pmrem4x4.ktx2?pmrem`,url_low:`https://cdn.needle.tools/static/skybox/blurred-skybox-small.pmrem4x4.ktx2?pmrem`},"quicklook-ar":{url:`https://cdn.needle.tools/static/skybox/QuickLook-ARMode.pmrem4x4.ktx2?pmrem`,url_low:`https://cdn.needle.tools/static/skybox/QuickLook-ARMode-small.pmrem4x4.ktx2?pmrem`},quicklook:{url:`https://cdn.needle.tools/static/skybox/QuickLook-ObjectMode.pmrem4x4.ktx2?pmrem`,url_low:`https://cdn.needle.tools/static/skybox/QuickLook-ObjectMode-small.pmrem4x4.ktx2?pmrem`}};function gi(e,t,n,r,i){if(t===`transparent`||t?.startsWith(`rgb`)||t?.startsWith(`#`))return console.warn(`Needle Engine: Invalid ${i} value (${t}). Did you mean to set background-color instead?`),null;let a=new vi;a.sourceId=Je(t),a.allowDrop=!1,a.allowNetworking=!1,a.background=n,a.environment=r,F.addComponent(e.scene,a);let o=t=>{if(G&&console.log(i,`CHANGED TO`,t),t){if(typeof t!=`string`){console.warn(`Invalid attribute value for `+i);return}a.setSkybox(t)}else if(a.sourceId&&(r&&(e.sceneLighting.internalEnableReflection(a.sourceId)||(e.scene.environment=null)),n)){let t=e.lightmaps.tryGetSkybox(a.sourceId);e.scene.background=t}};return Dt(e.domElement,i,o),a.addEventListener(`destroy`,()=>{G&&console.log(`Destroyed attribute remote skybox`,i),Ae(e.domElement,i,o)}),a.setSkybox(t)}var _i=[];lt.registerCallback(st.ContextCreationStart,e=>{let t=e.context,n=t.domElement.getAttribute(`background-image`),r=t.domElement.getAttribute(`environment-image`);if(n){G&&console.log(`Creating RemoteSkybox to load background `+n);let e=gi(t,n,!0,!1,`background-image`);e&&_i.push(e)}if(r){G&&console.log(`Creating RemoteSkybox to load environment `+r);let e=gi(t,r,!1,!0,`environment-image`);e&&_i.push(e)}}),lt.registerCallback(st.ContextCreationStart,()=>Promise.all(_i).finally(()=>{_i.length=0}));var vi=class extends R{url=`studio`;allowDrop=!0;background=!0;environment=!0;allowNetworking=!0;_prevUrl;_prevLoadedEnvironment;_prevEnvironment=null;_prevBackground=null;onEnable(){this.setSkybox(this.url),this.registerDropEvents()}onDisable(){this.context.scene.environment===this._prevLoadedEnvironment&&(this.context.scene.environment=this._prevEnvironment,Ne.backgroundShouldBeTransparent(this.context)||(this.context.scene.background=this._prevBackground),this._prevLoadedEnvironment=void 0),this.unregisterDropEvents(),this.context.mainCameraComponent?.applyClearFlags()}urlChangedSyncField(){this.allowNetworking&&this.url&&(this.isRemoteTexture(this.url)?this.setSkybox(this.url):G&&console.warn(`RemoteSkybox: Not setting skybox: ${this.url} is not a remote texture. If you want to set a local texture, set allowNetworking to false.`))}async setSkybox(e,t){if(!this.activeAndEnabled||(e=yi(e,this.environment,this.background),!e))return!1;if(t??=e,this.isValidTextureType(t)||console.warn(`Potentially invalid skybox URL: "`+t+`" on `+(this.name||this.gameObject?.name||`context`)),G&&console.log(`Set RemoteSkybox url: `+e),this._prevUrl===e&&this._prevLoadedEnvironment)return this.apply(),!0;this._prevLoadedEnvironment?.dispose(),this._prevLoadedEnvironment=void 0,this._prevUrl=e;let n=await pr(e,this.context.renderer);return n?!this.enabled||this.destroyed?(G&&console.warn(`RemoteSkybox: Component is disabled or destroyed`),!1):this._prevUrl===e?(this.url=e,this._prevLoadedEnvironment=n,this.apply(),!0):(G&&console.warn(`RemoteSkybox: URL changed while loading texture, aborting setSkybox`),!1):(G&&console.warn(`RemoteSkybox: Failed to load texture from url`,e),!1)}apply(){let e=this._prevLoadedEnvironment;if(e&&(e instanceof ee||e instanceof d||e.mapping==306||(e.mapping=304,e.needsUpdate=!0),!this.destroyed)){if(!this.context){console.warn(`RemoteSkybox: Context is not available - can not apply skybox.`);return}this.context.scene.background!==e&&(this._prevBackground=this.context.scene.background),this.context.scene.environment!==e&&(this._prevEnvironment=this.context.scene.environment),G&&console.log(`Set RemoteSkybox (`+(this.environment&&this.background?`environment and background`:this.environment?`environment`:this.background?`background`:`none`)+`)`,this.url,!Ne.backgroundShouldBeTransparent(this.context)),this.environment&&(this.context.scene.environment=e),this.background&&!Ne.backgroundShouldBeTransparent(this.context)&&(this.context.scene.background=e),this.context.mainCameraComponent?.backgroundBlurriness!==void 0&&(this.context.scene.backgroundBlurriness=this.context.mainCameraComponent.backgroundBlurriness)}}validProtocols=[`file:`,`blob:`,`data:`];validTextureTypes=[`.ktx2`,`.hdr`,`.exr`,`.jpg`,`.jpeg`,`.png`];isRemoteTexture(e){return e.startsWith(`http://`)||e.startsWith(`https://`)}isValidTextureType(e){for(let t of this.validTextureTypes)if(e.includes(t))return!0;for(let t of this.validProtocols)if(e.startsWith(t))return!0;return!1}registerDropEvents(){this.unregisterDropEvents(),this.context.domElement.addEventListener(`dragover`,this.onDragOverEvent),this.context.domElement.addEventListener(`drop`,this.onDrop)}unregisterDropEvents(){this.context.domElement.removeEventListener(`dragover`,this.onDragOverEvent),this.context.domElement.removeEventListener(`drop`,this.onDrop)}onDragOverEvent=e=>{if(this.allowDrop&&e.dataTransfer)for(let t of e.dataTransfer.types)(t===`text/uri-list`||t===`Files`)&&e.preventDefault()};onDrop=e=>{if(this.allowDrop&&e.dataTransfer){for(let t of e.dataTransfer.types)if(G&&console.log(t),t===`text/uri-list`){let n=e.dataTransfer.getData(t);G&&console.log(t,n);let r=new RegExp(/polyhaven.com\/asset_img\/.+?\/(?.+)\.png/).exec(n)?.groups?.name;if(r||=new RegExp(/polyhaven\.com\/a\/(?.+)/).exec(n)?.groups?.name,G&&console.log(r),r){let t=`https://dl.polyhaven.org/file/ph-assets/HDRIs/exr/1k/`+r+`_1k.exr`;console.log(`[Remote Skybox] Setting skybox from url: ${t}`),e.preventDefault(),this.setSkybox(t);break}else if(this.isValidTextureType(n)){console.log(`[Remote Skybox] Setting skybox from url: `+n),e.preventDefault(),this.setSkybox(n);break}else{console.warn(`[RemoteSkybox] Unknown url ${n}. If you want to load a skybox from a url, make sure it is a valid image url. Url must end with${this.validTextureTypes.join(`, `)}.`);let t=new CustomEvent(`dropped-unknown-url`,{detail:{sender:this,event:e,url:n,apply:t=>{e.preventDefault(),this.setSkybox(t)}}});this.dispatchEvent(t)}}else if(t==`Files`){let n=e.dataTransfer.files.item(0);if(G&&console.log(t,n),!n)continue;if(!this.isValidTextureType(n.name)){console.warn(`[RemoteSkybox]: File \"${n.name}\" is not supported. Supported files are ${this.validTextureTypes.join(`, `)}`);return}e.preventDefault(),this.setSkybox(n.name);break}}}};pi([Wn(vi.prototype.urlChangedSyncField),A(URL)],vi.prototype,`url`,void 0),pi([A()],vi.prototype,`allowDrop`,void 0),pi([A()],vi.prototype,`background`,void 0),pi([A()],vi.prototype,`environment`,void 0),pi([A()],vi.prototype,`allowNetworking`,void 0);function yi(e,t,n){if(e==null)return null;let r=t&&!n,i=hi[e.toLowerCase()];return i?r?i.url_low:i.url:(typeof e==`string`&&e?.length&&(w()||G)&&(e.includes(`/`)||e.includes(`.`)||console.warn(`RemoteSkybox: Unknown magic skybox name "${e}". Valid names are: ${Object.keys(hi).map(e=>`"${e}"`).join(`, `)}`)),e)}var bi=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},xi=class extends R{from;to;width=0;centered=!0;_centerPos;awake(){this._centerPos=new n}update(){if(!this.from||!this.to)return;let e=M(this.from).clone(),t=M(this.to).clone(),n=e.distanceTo(t);this._centerPos.copy(e),this._centerPos.add(t),this._centerPos.multiplyScalar(.5),Oe(this.gameObject,this.centered?this._centerPos:e),this.gameObject.lookAt(M(this.to).clone()),this.gameObject.scale.set(this.width,this.width,n)}};bi([A(F)],xi.prototype,`from`,void 0),bi([A(F)],xi.prototype,`to`,void 0);var Si=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ci=class extends R{length=1;depthTest=!0;isGizmo=!1;_axes=null;onEnable(){if(this.isGizmo&&!Lt)return;this._axes||=new se(this.length),this._axes.layers.disableAll(),this._axes.layers.set(this.layer),this.gameObject.add(this._axes);let e=this._axes.material;e&&e.depthTest!==void 0&&(e.depthTest=this.depthTest)}onDisable(){this._axes&&this.gameObject.remove(this._axes)}};Si([A()],Ci.prototype,`length`,void 0),Si([A()],Ci.prototype,`depthTest`,void 0),Si([A()],Ci.prototype,`isGizmo`,void 0);var wi=class extends R{from;to;hint;desiredDistance=1;onEnable(){}update(){if(!this.from||!this.to||!this.hint)return;let e=M(this.to).clone(),t=M(this.from).clone(),r=e.distanceTo(t),i=e.clone();i.sub(t);let a=t.clone();a.add(e),a.multiplyScalar(.5);let o=M(this.hint).clone();o.sub(a);let s=new n;s.crossVectors(o,i),s.crossVectors(i,s),s.normalize();let c=r*.5,l=Math.max(this.desiredDistance,c),u=Math.sqrt(l*l-c*c),d=s.clone();d.multiplyScalar(u),d.add(a),Oe(this.gameObject,d);let f=a.clone();f.sub(s),this.gameObject.lookAt(f)}},Ti=N(`gizmos`),Ei=N(`debugboxhelper`),Di=class e extends R{box=null;static testBox=new ie;_lastMatrixUpdateFrame=-1;static _position=new n;static _size=new n(.01,.01,.01);static _emptyObjectSize=new n(.01,.01,.01);isInBox(t){if(!t)return;if(this.box||=new ie,Nt([t],void 0,void 0,e.testBox),e.testBox.isEmpty()){let n=M(t,e._position);e.testBox.setFromCenterAndSize(n,e._emptyObjectSize)}this.updateBox();let n=this.box?.intersectsBox(e.testBox);return n&&Ei&&V.DrawWireBox3(e.testBox,16711680,5),n}intersects(e){return e?this.updateBox(!1).intersectsBox(e):!1}updateBox(t=!1){if(this.box||=new ie,t||this.context.time.frameCount!=this._lastMatrixUpdateFrame){let t=this._lastMatrixUpdateFrame<0;this._lastMatrixUpdateFrame=this.context.time.frameCount;let n=t,r=M(this.gameObject,e._position,n),i=_t(this.gameObject,e._size);this.box.setFromCenterAndSize(r,i)}return this.box}_helper=null;_color=null;awake(){this._helper=null,this._color=null,this.box=null}showHelper(e=null,t=!1){if(!(!Ti&&!t)){if(this._helper){e&&this._color?.set(e),this.gameObject.add(this._helper);return}this._helper=Pt(e),this.gameObject.add(this._helper)}}},Oi=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ki=N(`debugcharactercontroller`),Ai=class extends R{center=new n(0,0,0);radius=.5;height=2;_rigidbody=null;get rigidbody(){return this._rigidbody?this._rigidbody:(this._rigidbody=this.gameObject.getComponent(E),this._rigidbody||=this.gameObject.addComponent(E),this.rigidbody)}_activeGroundCollisions;awake(){this._activeGroundCollisions=new Set}onEnable(){let e=this.rigidbody,t=this.gameObject.getComponent(Mn);t||=this.gameObject.addComponent(Mn),t.center.copy(this.center),t.radius=this.radius,t.height=this.height;let r=new n(0,0,1),i=new n(1,0,0),a=new n(0,1,0),o=this.gameObject.getWorldDirection(new n);o.y=0;let s=i.dot(o)<0?-1:1,c=r.angleTo(o)*s;this.gameObject.setRotationFromAxisAngle(a,c),e.lockRotationX=!0,e.lockRotationY=!0,e.lockRotationZ=!0}move(e){this.gameObject.position.add(e)}onCollisionEnter(e){(e.contacts.length==0||e.contacts.some(e=>e.normal.y>.2))&&(this._activeGroundCollisions.add(e),ki&&console.log(`Collision(${this._activeGroundCollisions.size}): ${e.contacts.map(e=>e.normal.y.toFixed(2)).join(`, `)} - ${this.isGrounded}`))}onCollisionExit(e){this._activeGroundCollisions.delete(e),ki&&console.log(`Collision(${this._activeGroundCollisions.size}) - ${this.isGrounded}`)}get isGrounded(){return this._activeGroundCollisions.size>0}_contactVelocity=new n;get contactVelocity(){this._contactVelocity.set(0,0,0);for(let e of this._activeGroundCollisions){let t=this.context.physics.engine?.getLinearVelocity(e.collider);t&&(this._contactVelocity.x+=t.x,this._contactVelocity.y+=t.y,this._contactVelocity.z+=t.z)}return this._contactVelocity}};Oi([A(n)],Ai.prototype,`center`,void 0),Oi([A()],Ai.prototype,`radius`,void 0),Oi([A()],Ai.prototype,`height`,void 0);var ji=class extends R{controller;movementSpeed=2;rotationSpeed=2;jumpForce=1;doubleJumpForce=2;animator;lookForward=!0;awake(){this._currentRotation=new x}update(){let e=this.context.input;e.isKeyPressed(`KeyW`)?this.moveInput.y+=1:e.isKeyPressed(`KeyS`)&&--this.moveInput.y,e.isKeyPressed(`KeyD`)?this.lookInput.x+=1:e.isKeyPressed(`KeyA`)&&--this.lookInput.x,this.jumpInput||=e.isKeyDown(`Space`)}move(e){this.moveInput.add(e)}look(e){this.lookInput.add(e)}jump(){this.jumpInput=!0}lookInput=new b(0,0);moveInput=new b(0,0);jumpInput=!1;onBeforeRender(){this.handleInput(this.moveInput,this.lookInput,this.jumpInput),this.lookInput.set(0,0),this.moveInput.set(0,0),this.jumpInput=!1}_currentSpeed=new n(0,0,0);_currentAngularSpeed=new n(0,0,0);_temp=new n(0,0,0);_jumpCount=0;_currentRotation;handleInput(e,t,r){if(this.controller?.isGrounded&&(this._jumpCount=0,this.doubleJumpForce>0&&this.animator?.setBool(`doubleJump`,!1)),this._currentSpeed.z+=e.y*this.movementSpeed*this.context.time.deltaTime,this.animator?.setBool(`running`,e.length()>.01),this.animator?.setBool(`jumping`,this.controller?.isGrounded===!0&&r),this._temp.copy(this._currentSpeed),this._temp.applyQuaternion(this.gameObject.quaternion),this.controller?this.controller.move(this._temp):this.gameObject.position.add(this._temp),this._currentAngularSpeed.y+=O.toRadians(-t.x*this.rotationSpeed)*this.context.time.deltaTime,this.lookForward&&Math.abs(this._currentAngularSpeed.y)<.01){let e=this.context.mainCameraComponent.forward;e.y=0,e.normalize(),this._currentRotation.setFromUnitVectors(new n(0,0,1),e),this.gameObject.quaternion.slerp(this._currentRotation,this.context.time.deltaTime*10)}if(this.gameObject.rotateY(this._currentAngularSpeed.y),this._currentSpeed.multiplyScalar(1-this.context.time.deltaTime*10),this._currentAngularSpeed.y*=1-this.context.time.deltaTime*10,this.controller&&r&&this.jumpForce>0){let e=this.controller?.isGrounded;if(this.doubleJumpForce>0&&!this.controller?.isGrounded&&this._jumpCount===1&&(e=!0,this.animator?.setBool(`doubleJump`,!0)),e){this._jumpCount+=1;let e=this.controller.rigidbody,t=this._jumpCount===2?this.doubleJumpForce:this.jumpForce;e.applyImpulse(new n(0,1,0).multiplyScalar(t))}}if(this.controller){let e=this.controller?.rigidbody.getVelocity().y;if(e<-1){this._raycastOptions.ray||(this._raycastOptions.ray=new a),this._raycastOptions.ray.origin.copy(M(this.gameObject)),this._raycastOptions.ray.direction.set(0,-1,0);let t=this.layer;this.gameObject.layers.disableAll(),this.gameObject.layers.set(2);let n=this.context.physics.raycast(this._raycastOptions);this.gameObject.layers.set(t),(n.length&&n[0].distance>2||e<-10)&&this.animator?.setBool(`falling`,!0)}else this.animator?.setBool(`falling`,!1)}}_raycastOptions=new Gt};Oi([A(Ai)],ji.prototype,`controller`,void 0),Oi([A()],ji.prototype,`movementSpeed`,void 0),Oi([A()],ji.prototype,`rotationSpeed`,void 0),Oi([A()],ji.prototype,`jumpForce`,void 0),Oi([A()],ji.prototype,`doubleJumpForce`,void 0),Oi([A(it)],ji.prototype,`animator`,void 0);var Mi=N(`logstats`),Ni=class extends R{onEnable(){console.log(this),Mi&&this.startCoroutine(this.run(),an.OnAfterRender)}*run(){for(;this.enabled;){let e=this.context.renderer.info;console.log(e.memory,e.render,e.programs),yield}}},Pi=class extends R{isUsed=!0;usedBy=null},Fi=class extends R{},Ii=N(`debugdeletable`),Li=class e extends Di{static _instances=[];onEnable(){e._instances.push(this)}onDisable(){let t=e._instances.indexOf(this);t>=0&&e._instances.splice(t,1)}},Ri=class extends R{update(){for(let e of Li._instances){let t=this.gameObject;if(e.isInBox(t)===!0){let t=F.getComponentInParent(this.gameObject,Pi);if(t)Ii&&console.warn(`DeleteBox: Not deleting object with usage marker`,this.guid,t);else{if(Ii)try{if(e.box){let t=e.box,n=Di.testBox;V.DrawWireBox3(t,16711680,5),V.DrawWireBox3(n,255,5),console.log(`DeleteBox: Destroying`,this.gameObject,{deleteBoxArea:t,deletedObjectArea:n})}else console.log(`DeleteBox: Destroying`,this.gameObject)}catch{}xt(this.gameObject,this.context.connection)}}}}},zi=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Bi;(function(e){e[e.Never=0]=`Never`,e[e.Desktop=1]=`Desktop`,e[e.Mobile=2]=`Mobile`})(Bi||={});var Vi=class extends R{visibleOn;onEnable(){this.apply()}apply(){this.test()||F.setActive(this.gameObject,!1)}test(){return this.visibleOn<0?!0:yt.isMobileDevice()?(this.visibleOn&Bi.Mobile)!==0:(this.visibleOn&Bi.Desktop)!==0}};zi([A()],Vi.prototype,`visibleOn`,void 0);var Hi=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ui=N(`debugdrag`),Wi=[],K;(function(e){e[e.XZPlane=0]=`XZPlane`,e[e.Attached=1]=`Attached`,e[e.HitNormal=2]=`HitNormal`,e[e.DynamicViewAngle=3]=`DynamicViewAngle`,e[e.SnapToSurfaces=4]=`SnapToSurfaces`,e[e.None=5]=`None`})(K||={});var Gi=class e extends R{static get HasAnySelected(){return this._active>0}static _active=0;static get CurrentlySelected(){Wi.length=0;for(let e of this._instances)e._isDragging&&Wi.push(e);return Wi}static _instances=[];dragMode=K.DynamicViewAngle;snapGridResolution=0;keepRotation=!0;xrDragMode=K.Attached;xrKeepRotation=!1;xrDistanceDragFactor=1;showGizmo=!1;get draggedObject(){return this._targetObject}setTargetObject(e){this._targetObject=e;for(let t of this._dragHandlers.values())t.setTargetObject(e);let t=`_rigidbody-was-kinematic`;this._rigidbody?.[t]===!1&&(this._rigidbody.isKinematic=!1,this._rigidbody[t]=void 0),this._rigidbody=null,e&&(this._rigidbody=F.getComponentInChildren(e,E),this._rigidbody?.isKinematic===!1&&(this._rigidbody.isKinematic=!0,this._rigidbody[t]=!1))}_rigidbody=null;_targetObject=null;_dragHelper=null;static lastHovered;_draggingRigidbodies=[];_potentialDragStartEvt=null;_dragHandlers=new Map;_totalMovement=new n;_marker=null;_isDragging=!1;_didDrag=!1;awake(){this._potentialDragStartEvt=null,this._dragHandlers=new Map,this._totalMovement=new n,this._marker=null,this._isDragging=!1,this._didDrag=!1,this._dragHelper=null,this._draggingRigidbodies=[]}start(){this.gameObject.getComponentInParent(C)||this.gameObject.addComponent(C)}onEnable(){e._instances.push(this),this.context.accessibility.updateElement(this,{role:`button`,label:`Drag `+(this.gameObject.name||`object`),hidden:!1})}onDisable(){this.context.accessibility.updateElement(this,{hidden:!0}),e._instances=e._instances.filter(e=>e!==this)}onDestroy(){this.context.accessibility.removeElement(this)}allowEdit(e=null){return this.context.connection.allowEditing}onPointerEnter(t){if(!this.allowEdit(this.gameObject)||t.mode!==`screen`||(t.event.mode===`tracked-pointer`||t.event.mode===`transient-pointer`?this.xrDragMode:this.dragMode)===K.None)return;let n=F.getComponentInParent(t.object,e);!n||n!==this||(e.lastHovered=t.object,this.context.domElement.style.cursor=`pointer`,this.context.accessibility.hover(this,`Draggable ${t.object?.name}`))}onPointerMove(e){(this._isDragging||this._potentialDragStartEvt!==null)&&e.use()}onPointerExit(t){this.allowEdit(this.gameObject)&&t.mode===`screen`&&e.lastHovered===t.object&&(this.context.domElement.style.cursor=`auto`)}onPointerDown(t){if(this.allowEdit(this.gameObject)&&!t.used&&(t.mode===`tracked-pointer`||t.mode===`transient-pointer`?this.xrDragMode:this.dragMode)!==K.None&&(e.lastHovered=t.object,t.button===0)){this._dragHandlers.size===0&&(this._didDrag=!1,this._totalMovement.set(0,0,0),this._potentialDragStartEvt=t),this._targetObject||this.setTargetObject(this.gameObject),e._active+=1;let n=new qi(this,this._targetObject);if(this._dragHandlers.set(t.event.space,n),n.onDragStart(t),this._dragHandlers.size===2){let e=this._dragHandlers.values(),n=e.next().value,r=e.next().value;if(n instanceof qi&&r instanceof qi){let e=new Ki(this,this._targetObject,n,r);this._dragHandlers.set(this.gameObject,e),e.onDragStart(t)}else console.error(`Attempting to construct a MultiTouchDragHandler with invalid DragPointerHandlers. This is likely a bug.`,{a:n,b:r})}t.use(),this.context.accessibility.updateElement(this,{role:`button`,label:`Dragging `+(this.gameObject.name||`object`),hidden:!1,busy:!0}),this.context.accessibility.focus(this)}}onPointerUp(t){if(Ui&&V.DrawLabel(t.point??this.gameObject.worldPosition,`POINTERUP:`+t.pointerId+`, `+t.button,.03,3),!this.allowEdit(this.gameObject)||t.button!==0)return;this._potentialDragStartEvt=null;let n=this._dragHandlers.get(t.event.space),r=this._dragHandlers.get(this.gameObject);r&&(r.handlerA===n||r.handlerB===n)&&(this._dragHandlers.delete(this.gameObject),r.onDragEnd(t)),n&&(e._active>0&&--e._active,this.setTargetObject(null),n.onDragEnd&&n.onDragEnd(t),this._dragHandlers.delete(t.event.space),this._dragHandlers.size===0&&this.onLastDragEnd(t),t.use()),this.context.accessibility.unfocus(this),this.context.accessibility.updateElement(this,{busy:!1})}update(){for(let e of this._dragHandlers.values())e.collectMovementInfo&&e.collectMovementInfo(),e.getTotalMovement&&this._totalMovement.add(e.getTotalMovement());if(this._potentialDragStartEvt){if(!this._didDrag)if(this._totalMovement.length()>3e-4)this._didDrag=!0;else return;let e=this._potentialDragStartEvt;this._potentialDragStartEvt=null,this.onFirstDragStart(e)}for(let e of this._dragHandlers.values())e.onDragUpdate&&e.onDragUpdate(this._dragHandlers.size);this._dragHelper&&this._dragHelper.hasSelected&&this.onAnyDragUpdate()}onFirstDragStart(t){if(!t||!t.object)return;let n=F.getComponentInParent(t.object,e);if(!n||n!==this&&n._isDragging)return;let r=this._targetObject||this.gameObject;if(!r)return;this._isDragging=!0;let i=F.getComponentInChildren(r,rt);Ui&&console.log(`DRAG START`,i,r),i&&(i.fastMode=!0,i?.requestOwnership()),this._marker=F.addComponent(r,Pi),this._draggingRigidbodies.length=0;let a=F.getComponentsInChildren(r,E);a&&this._draggingRigidbodies.push(...a),r.matrixAutoUpdate===!1&&!globalThis[`DragControls:MatrixWarningShown`]&&(globalThis[`DragControls:MatrixWarningShown`]=!0,console.warn(`Dragging an object with matrixAutoUpdate=false can lead to unexpected behavior. Consider enabling matrixAutoUpdate or updating the matrix manually during dragging.`))}onAnyDragUpdate(){if(!this._dragHelper)return;this._dragHelper.showGizmo=this.showGizmo,this._dragHelper.onUpdate(this.context);for(let e of this._draggingRigidbodies)e.wakeUp(),e.resetVelocities(),e.resetForcesAndTorques();let e=this._targetObject||this.gameObject;qe.markDirty(e)}onLastDragEnd(e){if(!this||!this._isDragging)return;this._isDragging=!1;for(let e of this._draggingRigidbodies)e.setVelocity(e.smoothedVelocity.multiplyScalar(this.context.time.deltaTime));if(this._draggingRigidbodies.length=0,this._targetObject=null,e?.object){let t=F.getComponentInChildren(e.object,rt);t&&(t.fastMode=!1)}if(this._marker&&this._marker.destroy(),!this._dragHelper)return;let t=this._dragHelper.selected;Ui&&console.log(`DRAG END`,t,t?.visible),this._dragHelper.setSelected(null,this.context)}};Hi([A()],Gi.prototype,`dragMode`,void 0),Hi([A()],Gi.prototype,`snapGridResolution`,void 0),Hi([A()],Gi.prototype,`keepRotation`,void 0),Hi([A()],Gi.prototype,`xrDragMode`,void 0),Hi([A()],Gi.prototype,`xrKeepRotation`,void 0),Hi([A()],Gi.prototype,`xrDistanceDragFactor`,void 0),Hi([A()],Gi.prototype,`showGizmo`,void 0);var Ki=class{handlerA;handlerB;context;settings;gameObject;_handlerAAttachmentPoint=new n;_handlerBAttachmentPoint=new n;_followObject;_manipulatorObject;_deviceMode;_followObjectStartWorldQuaternion=new x;constructor(e,t,n,r){this.context=e.context,this.settings=e,this.gameObject=t,this.handlerA=n,this.handlerB=r,this._followObject=new y,this._manipulatorObject=new y,this.context.scene.add(this._manipulatorObject);let i=St.active?.rig?.gameObject;if(!this.handlerA||!this.handlerB||!this.handlerA.hitPointInLocalSpace||!this.handlerB.hitPointInLocalSpace){console.error(`Invalid: MultiTouchDragHandler needs two valid DragPointerHandlers with hitPointInLocalSpace set.`);return}if(this._tempVec1.copy(this.handlerA.hitPointInLocalSpace),this._tempVec2.copy(this.handlerB.hitPointInLocalSpace),this.gameObject.localToWorld(this._tempVec1),this.gameObject.localToWorld(this._tempVec2),i&&(i.worldToLocal(this._tempVec1),i.worldToLocal(this._tempVec2)),this._initialDistance=this._tempVec1.distanceTo(this._tempVec2),this._initialDistance<.02?(Ui&&console.log(`Finding alternative drag attachment points since initial distance is too low: `+this._initialDistance.toFixed(2)),this.handlerA.followObject.parent.getWorldPosition(this._tempVec1),this.handlerB.followObject.parent.getWorldPosition(this._tempVec2),this._handlerAAttachmentPoint.copy(this._tempVec1),this._handlerBAttachmentPoint.copy(this._tempVec2),this.gameObject.worldToLocal(this._handlerAAttachmentPoint),this.gameObject.worldToLocal(this._handlerBAttachmentPoint),this._initialDistance=this._tempVec1.distanceTo(this._tempVec2),this._initialDistance<.001&&(console.warn(`Not supported right now – controller drag points for multitouch are too close!`),this._initialDistance=1)):(this._handlerAAttachmentPoint.copy(this.handlerA.hitPointInLocalSpace),this._handlerBAttachmentPoint.copy(this.handlerB.hitPointInLocalSpace)),this._tempVec3.lerpVectors(this._tempVec1,this._tempVec2,.5),this._initialScale.copy(t.scale),Ui){this._followObject.add(new se(2)),this._manipulatorObject.add(new se(5));let e=e=>`${e.x.toFixed(2)}, ${e.y.toFixed(2)}, ${e.z.toFixed(2)}`;V.DrawLine(this._tempVec1,this._tempVec2,65535,0,!1),V.DrawLabel(this._tempVec3,`A:B `+this._initialDistance.toFixed(2)+` -`+e(this._tempVec1)+` -`+e(this._tempVec2),.03,5)}}onDragStart(e){this.gameObject.add(this._followObject),this._followObject.matrixAutoUpdate=!1,this._followObject.matrix.identity(),this._deviceMode=e.mode,this._followObjectStartWorldQuaternion.copy(this._followObject.worldQuaternion),this.alignManipulator(),this._manipulatorObject.attach(this._followObject),this._manipulatorPosOffset.copy(this._followObject.position),this._manipulatorRotOffset.copy(this._followObject.quaternion),this._manipulatorScaleOffset.copy(this._followObject.scale)}onDragEnd(e){if(!this.handlerA||!this.handlerB){console.error(`onDragEnd called on MultiTouchDragHandler without valid handlers. This is likely a bug.`);return}this.handlerA.recenter(),this.handlerB.recenter(),this._manipulatorObject.removeFromParent(),this._followObject.removeFromParent(),this._manipulatorObject.destroy(),this._followObject.destroy()}_manipulatorPosOffset=new n;_manipulatorRotOffset=new x;_manipulatorScaleOffset=new n;_tempVec1=new n;_tempVec2=new n;_tempVec3=new n;tempLookMatrix=new _;_initialScale=new n;_initialDistance=0;alignManipulator(){if(!this.handlerA||!this.handlerB){console.error(`alignManipulator called on MultiTouchDragHandler without valid handlers. This is likely a bug.`,this);return}if(!this.handlerA.followObject||!this.handlerB.followObject){console.error(`alignManipulator called on MultiTouchDragHandler without valid follow objects. This is likely a bug.`,this.handlerA,this.handlerB);return}this._tempVec1.copy(this._handlerAAttachmentPoint),this._tempVec2.copy(this._handlerBAttachmentPoint),this.handlerA.followObject.localToWorld(this._tempVec1),this.handlerB.followObject.localToWorld(this._tempVec2),this._tempVec3.lerpVectors(this._tempVec1,this._tempVec2,.5),this._manipulatorObject.position.copy(this._tempVec3);let e=this.context.mainCamera;this.tempLookMatrix.lookAt(this._tempVec3,this._tempVec2,e.worldUp),this._manipulatorObject.quaternion.setFromRotationMatrix(this.tempLookMatrix);let t=this._tempVec1.distanceTo(this._tempVec2);this._manipulatorObject.scale.copy(this._initialScale).multiplyScalar(t/this._initialDistance),this._manipulatorObject.updateMatrix(),this._manipulatorObject.updateMatrixWorld(!0),Ui&&(V.DrawLabel(this._tempVec3.clone().add(new n(0,.2,0)),`A:B `+t.toFixed(2),.03),V.DrawLine(this._tempVec1,this._tempVec2,65280,0,!1))}onDragUpdate(){this.alignManipulator(),this._followObject.position.copy(this._manipulatorPosOffset),this._followObject.quaternion.copy(this._manipulatorRotOffset),this._followObject.scale.copy(this._manipulatorScaleOffset);let e=this.gameObject,t=this._followObject;if(!e){console.error(`MultiTouchDragHandler has no dragged object. This is likely a bug.`);return}t.updateMatrix(),t.updateMatrixWorld(!0);let n=this._deviceMode===`tracked-pointer`||this._deviceMode===`transient-pointer`?this.settings.xrKeepRotation:this.settings.keepRotation;if(this.settings.snapGridResolution>0){let e=this._followObject.worldPosition,t=this.settings.snapGridResolution;e.x=Math.round(e.x/t)*t,e.y=Math.round(e.y/t)*t,e.z=Math.round(e.z/t)*t,this._followObject.worldPosition=e,this._followObject.updateMatrix()}n&&(this._followObject.worldQuaternion=this._followObjectStartWorldQuaternion,this._followObject.updateMatrix());let r=O.clamp01(this.context.time.deltaTime*30*1),i=e.worldPosition;i.lerp(t.worldPosition,r),e.worldPosition=i;let a=e.worldQuaternion;a.slerp(t.worldQuaternion,r),e.worldQuaternion=a;let o=e.worldScale;o.lerp(t.worldScale,r),e.worldScale=o,e.matrixAutoUpdate===!1&&e.updateMatrix()}setTargetObject(e){this.gameObject=e}},qi=class{getTotalMovement(){return this._totalMovement}get followObject(){return this._followObject}get hitPointInLocalSpace(){return this._hitPointInLocalSpace}context;gameObject;settings;_lastRig=void 0;_followObject;_totalMovement=new n;_totalMovementAlongRayDirection=0;_grabStartDistance=0;_deviceMode;_followObjectStartPosition=new n;_followObjectStartQuaternion=new x;_followObjectStartWorldQuaternion=new x;_lastDragPosRigSpace;_tempVec=new n;_tempMat=new _;_hitPointInLocalSpace=new n;_hitNormalInLocalSpace=new n;_bottomCenter=new n;_backCenter=new n;_backBottomCenter=new n;_bounds=new ie;_dragPlane=new ae(new n(0,1,0));_draggedOverObject=null;_draggedOverObjectLastSetUp=null;_draggedOverObjectLastNormal=new n;_draggedOverObjectDuration=0;setTargetObject(e){this.gameObject=e}constructor(e,t){this.settings=e,this.context=e.context,this.gameObject=t,this._followObject=new y}recenter(){if(!this._followObject.parent){console.warn(`Error: space follow object doesn't have parent but recenter() is called. This is likely a bug`);return}if(!this.gameObject){console.warn(`Error: space follow object doesn't have a gameObject`);return}let e=this._followObject.parent;this.gameObject.add(this._followObject),this._followObject.matrixAutoUpdate=!1,this._followObject.position.set(0,0,0),this._followObject.quaternion.set(0,0,0,1),this._followObject.scale.set(1,1,1),this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0),e.attach(this._followObject),this._followObjectStartPosition.copy(this._followObject.position),this._followObjectStartQuaternion.copy(this._followObject.quaternion),this._followObjectStartWorldQuaternion.copy(this._followObject.worldQuaternion),this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0);let t=this._hitPointInLocalSpace.clone();this.gameObject.localToWorld(t),this._grabStartDistance=t.distanceTo(e.worldPosition);let r=(St.active?.rig?.gameObject)?.worldScale.x||1;this._grabStartDistance/=r,this._totalMovementAlongRayDirection=0,this._lastDragPosRigSpace=void 0,Ui&&(V.DrawLine(t,e.worldPosition,65280,.5,!1),V.DrawLabel(e.worldPosition.add(new n(0,.1,0)),this._grabStartDistance.toFixed(2),.03,.5))}onDragStart(e){if(!this.gameObject){console.warn(`Error: space follow object doesn't have a gameObject`);return}if(e.event.space.add(this._followObject),this._lastDragPosRigSpace=void 0,e.point&&e.normal)this._hitPointInLocalSpace.copy(e.point),this.gameObject.worldToLocal(this._hitPointInLocalSpace),this._hitNormalInLocalSpace.copy(e.normal);else if(e){let t=e.event.space,n=t.worldPosition;this.gameObject.worldToLocal(n),this._hitPointInLocalSpace.copy(n);let r=t.worldUp;this._tempMat.copy(this.gameObject.matrixWorld).invert(),r.transformDirection(this._tempMat),this._hitNormalInLocalSpace.copy(r)}this.recenter(),this._totalMovement.set(0,0,0),this._deviceMode=e.mode;let t=this._followObject.parent.worldForward,r=this._deviceMode===`tracked-pointer`||this._deviceMode===`transient-pointer`?this.settings.xrDragMode:this.settings.dragMode,i=this._hitPointInLocalSpace.clone();switch(this.gameObject.localToWorld(i),r){case K.XZPlane:let e=new n(0,1,0);this.gameObject.parent&&e.transformDirection(this.gameObject.parent.matrixWorld.clone().invert()),this._dragPlane.setFromNormalAndCoplanarPoint(e,i);break;case K.HitNormal:let r=this._hitNormalInLocalSpace.clone();r.transformDirection(this.gameObject.matrixWorld),this._dragPlane.setFromNormalAndCoplanarPoint(r,i);break;case K.Attached:this._dragPlane.setFromNormalAndCoplanarPoint(t,i);break;case K.DynamicViewAngle:this.setPlaneViewAligned(i,!0);break;case K.SnapToSurfaces:this.setPlaneViewAligned(i,!1);break;case K.None:break}let a=this.gameObject.parent,o=this.gameObject.position.clone(),s=this.gameObject.quaternion.clone(),c=this.gameObject.scale.clone(),l=this.gameObject.matrixWorld.clone();a&&a.remove(this.gameObject),this.gameObject.position.set(0,0,0),this.gameObject.quaternion.set(0,0,0,1),this.gameObject.scale.set(1,1,1);let u=Nt([this.gameObject]);u.expandByPoint(this.gameObject.worldPosition);let d=new n;u.getCenter(d);let f=new n;u.getSize(f),this._bottomCenter.copy(d.clone().add(new n(0,-f.y/2,0))),this._backCenter.copy(d.clone().add(new n(0,0,f.z/2))),this._backBottomCenter.copy(d.clone().add(new n(0,-f.y/2,f.z/2))),this._bounds.copy(u),a&&a.add(this.gameObject),this.gameObject.position.copy(o),this.gameObject.quaternion.copy(s),this.gameObject.scale.copy(c),this.gameObject.matrixWorld.copy(l),this._draggedOverObject=null,this._draggedOverObjectLastSetUp=null,this._draggedOverObjectLastNormal.set(0,1,0),this._draggedOverObjectDuration=0}collectMovementInfo(){if(!this._followObject.parent)return;let e=this._followObject.parent;this._followObject.updateMatrix();let t=e.worldPosition,n=St.active?.rig?.gameObject;n&&n.worldToLocal(t),(this._lastDragPosRigSpace===void 0||n!=this._lastRig)&&(this._lastDragPosRigSpace=t.clone(),this._lastRig=n),this._tempVec.copy(t).sub(this._lastDragPosRigSpace);let r=e.worldForward;if(n&&(this._tempMat.copy(n.matrixWorld).invert(),r.transformDirection(this._tempMat)),this._totalMovementAlongRayDirection+=r.dot(this._tempVec),this._tempVec.x=Math.abs(this._tempVec.x),this._tempVec.y=Math.abs(this._tempVec.y),this._tempVec.z=Math.abs(this._tempVec.z),this._totalMovement.add(this._tempVec),this._lastDragPosRigSpace.copy(t),Ui){let e=t;n&&(e=e.clone(),e.transformDirection(n.matrixWorld)),V.DrawRay(e,r,255)}}onDragUpdate(e){if(e>1)return;let t=this.gameObject;if(!t||!this._followObject){console.warn(`Warning: DragPointerHandler doesn't have a dragged object. This is likely a bug.`);return}let r=this._followObject.parent;if(!r){console.warn(`Warning: DragPointerHandler doesn't have a drag source. This is likely a bug.`);return}this._followObject.updateMatrix();let i=r.worldPosition,o=r.worldForward,s=this._deviceMode===`tracked-pointer`||this._deviceMode===`transient-pointer`,c=s?this.settings.xrKeepRotation:this.settings.keepRotation,l=s?this.settings.xrDragMode:this.settings.dragMode;if(l===K.None)return;c&&(this._followObject.worldQuaternion=this._followObjectStartWorldQuaternion),this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0);let u=1,d=2;if(s&&this._grabStartDistance>.5){let e=1+this._totalMovementAlongRayDirection*(2*this.settings.xrDistanceDragFactor);u=Math.max(0,e),u=u*u*u}else this._grabStartDistance<=.5&&(d=3);this._followObject.position.copy(this._followObjectStartPosition),c||this._followObject.quaternion.copy(this._followObjectStartQuaternion),this._followObject.position.multiplyScalar(u),this._followObject.updateMatrix();let f=this._hasLastSurfaceHitPoint;this._hasLastSurfaceHitPoint=!1;let p=new a(i,o);if(l==K.SnapToSurfaces){let e=this.context.physics.raycastFromRay(p,{testObject:e=>e!==this.followObject&&e!==r&&e!==t});if(e.length>0){let t=e[0];if(this._draggedOverObject===t.object?this._draggedOverObjectDuration+=this.context.time.deltaTime:(this._draggedOverObject=t.object,this._draggedOverObjectDuration=0),t.face){this._hasLastSurfaceHitPoint=!0,this._lastSurfaceHitPoint.copy(t.point);let e=this._draggedOverObjectDuration>=.15,n=this._totalMovement.length()>=.001,r=z(t.normal||t.face.normal).applyQuaternion(t.object.worldQuaternion);if((e||n)&&(this._draggedOverObjectLastSetUp!==this._draggedOverObject||this._draggedOverObjectLastNormal.dot(r)<.999999||this.context.time.frame%60==0)){this._draggedOverObjectLastSetUp=this._draggedOverObject,this._draggedOverObjectLastNormal.copy(t.face.normal);let e=z(),n=z();this._bounds.getCenter(e),this._bounds.getSize(n),e.sub(n.multiplyScalar(.5).multiply(r)),this._hitPointInLocalSpace.copy(e),this._hitNormalInLocalSpace.copy(t.face.normal),this._bounds.getCenter(e),this._bounds.getSize(n),e.add(n.multiplyScalar(.5).multiply(t.face.normal));let i=z(this._hitPointInLocalSpace).add(e);this._followObject.localToWorld(i);let a=t.point;this._dragPlane.setFromNormalAndCoplanarPoint(r,a)}else if(!(e||n))return}}else f&&this.gameObject&&this.setPlaneViewAligned(this.gameObject.worldPosition,!1)}if(l!==K.Attached&&p.intersectPlane(this._dragPlane,this._tempVec)){this._followObject.worldPosition=this._tempVec,this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0);let e=z(this._hitPointInLocalSpace);this._followObject.localToWorld(e),Ui&&V.DrawLine(e,this._tempVec,65535,0,!1),this._followObject.worldPosition=this._tempVec.multiplyScalar(2).sub(e),this._followObject.updateMatrix(),this._followObject.updateMatrix()}if(this.settings.snapGridResolution>0){let e=this._followObject.worldPosition,t=this.settings.snapGridResolution;e.x=Math.round(e.x/t)*t,e.y=Math.round(e.y/t)*t,e.z=Math.round(e.z/t)*t,this._followObject.worldPosition=e,this._followObject.updateMatrix()}c&&(this._followObject.worldQuaternion=this._followObjectStartWorldQuaternion,this._followObject.updateMatrix());let m=O.clamp01(this.context.time.deltaTime*10*d),ee=O.clamp01(this.context.time.deltaTime*10*.5*d),h=t.worldPosition;h.lerp(this._followObject.worldPosition,m),t.worldPosition=h;let g=t.worldQuaternion;if(g.slerp(this._followObject.worldQuaternion,ee),t.worldQuaternion=g,t.matrixAutoUpdate===!1&&t.updateMatrix(),Ui){let e=this._hitPointInLocalSpace.clone();t.localToWorld(e),V.DrawSphere(e,.02,16711680);let r=this._hitNormalInLocalSpace.clone();r.applyQuaternion(g),V.DrawRay(e,r,16711680),V.DrawLabel(h.add(new n(0,.25,0)),`Distance: ${this._totalMovement.length().toFixed(2)}\n - Along Ray: ${this._totalMovementAlongRayDirection.toFixed(2)}\n - Session: ${!!St.active}\n - Device: ${this._deviceMode}\n - `,.03);let i=this._bottomCenter.clone(),a=this._backCenter.clone(),o=this._backBottomCenter.clone();t.localToWorld(i),t.localToWorld(a),t.localToWorld(o),V.DrawSphere(i,.01,65280,0,!1),V.DrawSphere(a,.01,255,0,!1),V.DrawSphere(o,.01,16711935,0,!1),V.DrawLine(i,o,65535,0,!1),V.DrawLine(o,a,65535,0,!1)}}onDragEnd(e){console.assert(this._followObject.parent===e.event.space,`Drag end: _followObject is not parented to the space object`),this._followObject.removeFromParent(),this._followObject.destroy(),this._lastDragPosRigSpace=void 0}_hasLastSurfaceHitPoint=!1;_lastSurfaceHitPoint=new n;setPlaneViewAligned(e,t){if(!this._followObject.parent)return!1;let n=this._followObject.parent.worldForward,r=z(0,1,0),i=n,a=r.angleTo(i),o=.5;return t&&(a>Math.PI/2+o||ae!==this._selected;let r=this._context.physics.raycastFromRay(t,n);for(let e=0;e{s instanceof y&&s.scale.set(1,e,1)}}}e.addPreview=r;function i(e){let n=t.get(e);n&&(t.delete(e),n.removeFromParent())}e.removePreview=i})(Xi||={});var Zi=[],Qi=[],$i;(function(e){function t(e,t){let n={name:t?.name,priority:t?.priority??0,callback:e};return Zi.push(n),Zi.sort((e,t)=>e.priority===t.priority?0:e.priority>t.priority?-1:1),()=>{let e=Zi.indexOf(n);e>=0&&Zi.splice(e,1)}}e.onCreateCustomModelLoader=t;function n(e){return Qi.push(e),()=>{let t=Qi.indexOf(e);t>=0&&Qi.splice(t,1)}}e.onDetermineModelMimetype=n})($i||={});var q=N(`debugfileformat`);function ea(e){switch((e.split(`.`).pop()||e).toUpperCase()){case`GLTF`:return`model/gltf+json`;case`VRM`:return`model/vrm`;case`GLB`:return`model/gltf-binary`;case`FBX`:return`model/fbx`;case`USD`:return`model/vnd.usd+zip`;case`USDA`:return`model/vnd.usda+zip`;case`USDZ`:return`model/vnd.usdz+zip`;case`OBJ`:return`model/obj`;default:return null}}async function ta(e,t){let{useExtension:n=!0}=t;if(n){let t=new URL(e,globalThis.location.href),n=null,r=t.searchParams.get(`filetype`);switch(r&&(n=r.toUpperCase()),n?.length||(n=t.pathname.split(`.`).pop()?.toUpperCase()),q&&console.warn(`[Needle Engine] Try to use file extension to determine type: '${n}'`),n){case`GLTF`:return`model/gltf+json`;case`VRM`:return`model/vrm`;case`GLB`:return`model/gltf-binary`;case`FBX`:return`model/fbx`;case`USD`:return`model/vnd.usd+zip`;case`USDA`:return`model/vnd.usda+zip`;case`USDZ`:return`model/vnd.usdz+zip`;case`OBJ`:return`model/obj`;case`MTLX`:return`application/materialx+xml`}}let r=e;if(!e.startsWith(`blob:`)){let t=new URL(e,globalThis.location.href);t.searchParams.append(`range`,`true`),e=t.toString()}let i=await fetch(e,{method:`GET`,headers:{range:`bytes=0-32`}}).catch(e=>null);if(i?.ok){let e=na(r,await i.arrayBuffer(),i);return q&&console.log(`[Needle Engine] Determined file type from header: `+e),e}return`unknown`}function na(e,t,n){if(t.byteLength<4)return`unknown`;let r=new Uint8Array(t);q&&q&&console.warn(`[Needle Engine] Trying to determine file type from binary data -`,`"`+new TextDecoder().decode(t)+`" -`,r);let i=new TextDecoder().decode(t).replace(/\s/g,``);if(i[0]===`{`&&i[1]===`"`)return q&&console.debug(`GLTF detected`),`model/gltf+json`;if(r[0]==103&&r[1]==108&&r[2]==84&&r[3]==70&&(r[4]==10||r[4]===2))return q&&console.debug(`GLTF .bin detected`),`model/gltf+json`;if(r[0]==103&&r[1]==108&&r[2]==84&&r[3]==70&&r[4]==98)return q&&console.debug(`GLB detected`),`model/gltf-binary`;if(r[0]==80&&r[1]==75&&r[2]==3&&r[3]==4)return q&&console.debug(`USDZ detected`),`model/vnd.usdz+zip`;if(r[0]==80&&r[1]==88&&r[2]==82&&r[3]==45&&r[4]==85&&r[5]==83&&r[6]==68&&r[7]==67)return q&&console.debug(`Binary USD detected`),`model/vnd.usd`;if(r[0]==35&&r[1]==117&&r[2]==115&&r[3]==100&&r[4]==97)return q&&console.debug(`ASCII USD detected`),`model/vnd.usda`;if(r[0]==75&&r[1]==97&&r[2]==121&&r[3]==100&&r[4]==97&&r[5]==114&&r[6]==97&&r[7]==32)return q&&console.debug(`Binary FBX detected`),`model/fbx`;if(r[0]==59&&r[1]==32&&r[2]==70&&r[3]==66&&r[4]==88&&r[5]==32)return q&&console.debug(`ASCII FBX detected`),`model/fbx`;if(r[0]==35&&r[1]==32&&r[2]==66&&r[3]==108&&r[4]==101&&r[5]==110&&r[6]==100&&r[7]==101&&r[8]==114&&r[9]==32||r[0]==35&&r[1]==32&&r[2]==65&&r[3]==108&&r[4]==105&&r[5]==97&&r[6]==115&&r[7]==32&&r[8]==79&&r[9]==66&&r[10]==74)return q&&console.debug(`OBJ detected`),`model/obj`;if(n.headers.has(`content-type`)){let e=n.headers.get(`content-type`);if(e?.startsWith(`image/`))return q&&console.debug(`Image detected, not a model file`),`unsupported`;switch(q&&console.debug(`Content-Type: `+e),e){case`model/gltf+json`:case`model/gltf-binary`:case`model/vrm`:case`model/vnd.usdz+zip`:case`model/vnd.usd+zip`:case`model/vnd.usd`:case`model/vnd.usda+zip`:case`model/vnd.usda`:case`model/vnd.usdc`:case`model/fbx`:case`model/vnd.autodesk.fbx`:case`model/obj`:case`application/materialx+xml`:return e;case`text/plain`:break}}if(r[0]==118&&r[1]==32||r[0]==102&&r[1]==32)return q&&console.debug(`OBJ detected (the file has no header and starts with vertex or face)`),`obj`;if(r[0]==35&&r[1]==32&&r[2]==70&&r[3]==105&&r[4]==108&&r[5]==101&&r[6]==32&&r[7]==101&&r[8]==120&&r[9]==112&&r[10]==111&&r[11]==114&&r[12]==116&&r[13]==101&&r[14]==100&&r[15]==32&&r[16]==98&&r[17]==121&&r[18]==32&&r[19]==90&&r[20]==66&&r[21]==114&&r[22]==117&&r[23]==115&&r[24]==104)return q&&console.debug(`OBJ detected (exported by ZBrush)`),`obj`;if(r[0]==109&&r[1]==116&&r[2]==108&&r[3]==108&&r[4]==105&&r[5]==98)return q&&console.debug(`OBJ detected (mtllib)`),`obj`;for(let t of Qi){let i=t({url:e,response:n,contentType:n.headers.get(`content-type`),bytes:r});if(i)return q&&console.debug(`Mimetype callback returned: ${i}`),i}if(w()||q){let e=new TextDecoder().decode(t.slice(0,Math.min(t.byteLength,32)));q&&console.warn(`Could not determine file type.\n\nConsider registering a custom loader via the 'onCreateCustomModelLoader' callback: 'NeedleEngineModelLoader.onCreateCustomModelLoader(args => { })'\n\nContent-Type: \"${n.headers.get(`content-type`)}\"\n\"Text: \"${e}\"\nBinary:`,r)}else q&&console.debug(`Could not determine file type from binary data`);return`unknown`}var ra=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},J=N(`debugdroplistener`),ia;(function(e){e.FileDropped=`file-dropped`,e.ObjectAdded=`object-added`})(ia||={});var aa=class extends CustomEvent{constructor(e){super(ia.ObjectAdded,{detail:e})}},oa=`blob`,sa=class extends R{dropArea;fitIntoVolume=!1;fitVolumeSize=new n(1,1,1);placeAtHitPosition=!0;useNetworking=!1;onDropped=new k;loadFromURL(e,t){return this.addFromUrl(e,{screenposition:new b,point:t?.point,size:t?.size},!1)}forgetObjects(){this.removePreviouslyAddedObjects(!1)}awake(){for(let e of this.gameObject.children)this.dropArea&&e.contains(this.dropArea)||this._addedObjects.push(e)}onEnable(){this.context.renderer.domElement.addEventListener(`dragover`,this.onDrag),this.context.renderer.domElement.addEventListener(`drop`,this.onDrop),window.addEventListener(`paste`,this.handlePaste),this.context.connection.beginListen(`droplistener`,this.onNetworkEvent),w()&&this.dropArea&&(this.dropArea.getComponentInChildren(Vn)||console.warn(`[DropListener] The assigned DropArea does not seem to have a renderer/mesh. Drag and Drop events will not be detected.`))}onDisable(){this.context.renderer.domElement.removeEventListener(`dragover`,this.onDrag),this.context.renderer.domElement.removeEventListener(`drop`,this.onDrop),window.removeEventListener(`paste`,this.handlePaste),this.context.connection.stopListen(`droplistener`,this.onNetworkEvent)}onNetworkEvent=e=>{if(!this.useNetworking){J&&console.debug(`[DropListener] Ignoring networked event because networking is disabled`,e);return}if(e.guid?.startsWith(this.guid)){let t=e.url;if(console.debug(`[DropListener] Received networked event`,e),t)if(Array.isArray(t))for(let n of t)this.addFromUrl(n,{screenposition:new b,point:e.point,size:e.size},!0);else this.addFromUrl(t,{screenposition:new b,point:e.point,size:e.size},!0)}};handlePaste=e=>{this.context.connection.allowEditing!==!1&&(e.defaultPrevented||navigator.clipboard.readText().then(e=>{if(e&&(e.startsWith(`http`)||e.startsWith(`https`)||e.startsWith(`blob`))){let t={screenposition:new b(this.context.input.mousePosition.x,this.context.input.mousePosition.y)};this.testIfIsInDropArea(t)&&this.addFromUrl(e,t,!1)}}).catch(console.warn))};onDrag=e=>{J&&console.debug(`DropListener Drag`,e,this.context.connection.allowEditing),this.context.connection.allowEditing!==!1&&e.preventDefault()};onDrop=async e=>{if(J&&console.debug(`DropListener Drop`,e,this.context.connection.allowEditing),this.context.connection.allowEditing===!1||!e?.dataTransfer||e[`droplistener:handled`])return;e.preventDefault();let t={screenposition:new b(e.offsetX,e.offsetY)};if(this.dropArea&&this.testIfIsInDropArea(t)===!1)return;e[`droplistener:handled`]=!0;let n=e.dataTransfer.items;if(!n)return;let r=[];for(let e in n){let i=n[e];if(i.kind===`file`){let e=i.getAsFile();if(!e)continue;r.push(e)}else i.kind===`string`&&i.type==`text/plain`&&i.getAsString(e=>{this.addFromUrl(e,t,!1)})}r.length>0&&await this.addFromFiles(r,t)};async addFromUrl(e,t,n){J&&console.log(`dropped url`,e);try{if(e.startsWith(`https://github.com/`)){let t=e.split(`/`);e=`https://raw.githubusercontent.com/${t[3]}/${t[4]}/${t[6]}/${t.slice(7).join(`/`)}`}else e.startsWith(`https://polyhaven.com/a`)&&(e=ca(e));if(!e)return null;let r=e.toLowerCase();if(r.endsWith(`.hdr`)||r.endsWith(`.hdri`)||r.endsWith(`.exr`)||r.endsWith(`.png`)||r.endsWith(`.jpg`)||r.endsWith(`.jpeg`))return console.warn(`Fileformat is not supported: ${r}`),null;this.removePreviouslyAddedObjects();let i=await la.loadFileFromURL(new URL(e),{guid:this.guid,context:this.context,parent:this.gameObject,point:t.point,size:t.size});if(i&&this._addedObjects.length<=0)return t.url=e,this.onObjectLoaded(i,t,n)}catch{console.warn(`String is not a valid URL`,e)}return null}_abort=null;async addFromFiles(e,t){if(J&&console.log(`Add files`,e),Array.isArray(e)&&e.length){this.deleteDropEvent(),this.removePreviouslyAddedObjects(),Ve(oa,null),this._abort?.abort(`New files dropped`),this._abort=new AbortController;for(let n of e){if(!n)continue;if(n.type.startsWith(`image/`)){J&&console.warn(`Ignoring dropped image file`,n.name,n.type);continue}else if(n.name.endsWith(`.bin`)){J&&console.warn(`Ignoring dropped binary file`,n.name,n.type);continue}console.debug(`Load file `+n.name+` + `+n.type);let e=await la.loadFile(n,this.context,{guid:this.guid});if(e){this.dispatchEvent(new CustomEvent(ia.FileDropped,{detail:n})),t.file=n;let r=this.onObjectLoaded(e,t,!1);r&&this.context.connection.isConnected&&this.useNetworking&&(console.debug(`Uploading dropped file to blob storage`),Tt.upload(n,{abort:this._abort?.signal}).then(t=>{t?.download_url&&this._addedObjects.includes(r)&&this.sendDropEvent(t.download_url,r,e.contentMD5)}).catch(console.warn));break}}}}_addedObjects=[];_addedModels=[];removePreviouslyAddedObjects(e=!0){if(e)for(let e of this._addedObjects)e.parent===this.gameObject&&e.destroy();this._addedObjects.length=0,this._addedModels.length=0}onObjectLoaded(e,t,r){let{model:i,contentMD5:a}=e;if(J&&console.log(`Dropped ${this.gameObject.name}`,i),!i?.scene)return console.warn(`No object specified to add to scene`,i),null;this.removePreviouslyAddedObjects();let o=i.scene;o.position.copy(this.gameObject.worldPosition);let s=_t(this.gameObject),c=new n(0,0,0);s.x=Math.abs(s.x),s.y=Math.abs(s.y),s.z=Math.abs(s.z);let l=o.scale.clone(),u=new ie().setFromCenterAndSize(new n(0,this.fitVolumeSize.y*s.y*.5,0).add(this.gameObject.worldPosition),this.fitVolumeSize.clone().multiply(s));if(J&&V.DrawWireBox3(u,255,5),this.fitIntoVolume&&(Wt(o,u,{position:!this.placeAtHitPosition}),l=o.scale.clone().divide(s),c=o.worldPosition.clone().sub(this.gameObject.worldPosition).divide(s),J&&V.DrawSphere(c,.1,16711680,5)),this.gameObject.attach(o),o.position.copy(c),o.quaternion.identity(),o.scale.copy(l),J&&V.DrawArrow(this.gameObject.worldPosition,o.getWorldPosition(new n),65280,5),this._addedObjects.push(o),this._addedModels.push(i),this.placeAtHitPosition&&t&&t.screenposition){o.visible=!1;let e=this.context.physics.raycast({screenPoint:this.context.input.convertScreenspaceToRaycastSpace(t.screenposition.clone())});if(o.visible=!0,e&&e.length>0)for(let t of e){let e=t.point.clone();J&&console.log(`Place object at hit`,t),Re(o,e);break}}at.autoplayAnimations(i);let d=new aa({sender:this,gltf:i,model:i,object:o,contentMD5:a,dropped:t.file||(t.url?new URL(t.url):void 0)});return this.dispatchEvent(d),this.onDropped?.invoke(d.detail),!r&&t.url?.startsWith(`http`)&&this.context.connection.isConnected&&o&&this.sendDropEvent(t.url,o,a),o}async sendDropEvent(e,t,r){if(!this.useNetworking){J&&console.debug(`[DropListener] Ignoring networked event because networking is disabled`,e);return}if(this.context.connection.isConnected){console.debug(`Sending drop event "`+t.name+`"`,e);let i=Nt([t]),a={name:t.name,guid:this.guid,url:e,point:t.worldPosition.clone(),size:i.getSize(new n),contentMD5:r};this.context.connection.send(`droplistener`,a)}}deleteDropEvent(){this.context.connection.sendDeleteRemoteState(this.guid)}testIfIsInDropArea(e){let t=this.context.input.convertScreenspaceToRaycastSpace(e.screenposition.clone()),n=this.context.physics.raycast({screenPoint:t,recursive:!0,testObject:e=>!this._addedObjects.some(t=>t.contains(e))});if(!n.length)return w()&&console.log(`Dropped outside of drop area for DropListener \"${this.name}\".`),!1;let r=n[0];return!!(this.dropArea&&this.dropArea.contains(r.object))}};ra([A(y)],sa.prototype,`dropArea`,void 0),ra([A()],sa.prototype,`fitIntoVolume`,void 0),ra([A(n)],sa.prototype,`fitVolumeSize`,void 0),ra([A()],sa.prototype,`placeAtHitPosition`,void 0),ra([A()],sa.prototype,`useNetworking`,void 0),ra([A(k)],sa.prototype,`onDropped`,void 0);function ca(e){if(!e.startsWith(`https://polyhaven.com/`))return e;let t=new URL(e).pathname.split(`/`).pop(),n=`https://dl.polyhaven.org/file/ph-assets/Models/gltf/4k/${t}/${t}_4k.gltf`;return console.log(`Resolved polyhaven asset url`,e,`→`,n),n}var la;(function(e){async function t(e,t,n){let r=n.guid,i=new mt(r),a=new Blob([e],{type:e.type||ea(e.name)||void 0}),o=URL.createObjectURL(a),s=await Fe().loadSync(t,o,e.name,i).catch(t=>(console.error(`Failed to load file "${e.name}" (${e.type}):`,t),null));return URL.revokeObjectURL(o),s?new Promise((t,n)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onloadend=async e=>{let n=r.result;return t({model:s,contentMD5:Tt.hashMD5(n)})}}):(console.warn(`Failed to load "${e.name}" (${e.type})`),null)}e.loadFile=t;async function n(e,t){return new Promise(async(n,r)=>{let i=new mt(t.guid),a=e.toString();J&&V.DrawWireSphere(t.point,.1,16711680,3);let o=Xi.addPreview({guid:t.guid,parent:t.parent,position:t?.point,size:t?.size}),s=await Fe().loadSync(t.context,a,a,i,e=>{o.onProgress(e.loaded/e.total)}).catch(console.warn);if(s){let e=await fetch(a).then(e=>e.arrayBuffer()),r=Tt.hashMD5(e);J?setTimeout(()=>Xi.removePreview(t.guid),3e3):Xi.removePreview(t.guid),n({model:s,contentMD5:r})}else J?setTimeout(()=>Xi.removePreview(t.guid),3e3):Xi.removePreview(t.guid),console.warn(`Unsupported file type: `+e.toString())})}e.loadFileFromURL=n})(la||={});var ua=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},da=class e extends R{parent=null;object=null;limitCount=60;_currentCount=0;_startPosition=null;_startQuaternion=null;start(){if(this._currentCount=0,this._startPosition=null,this._startQuaternion=null,this.object||=this.gameObject,this.object){if(this.object===this.gameObject){let t=new mt(this.guid);this.object=F.instantiate(this.object,{idProvider:t,keepWorldPosition:!1}),F.getComponent(this.object,e)?.destroy();let n=this.object.getComponentInChildren(Gi);n||(n=this.object.addComponent(Gi,{dragMode:K.SnapToSurfaces}),n.guid=t.generateUUID());let r=F.getComponent(n.gameObject,rt);r||(r=n.gameObject.addComponent(rt),r.guid=t.generateUUID())}this.object.visible=!1;let t=this.gameObject.getComponent(Gi);t&&(t.enabled=!1),this._startPosition=this.object.position?.clone()??new n(0,0,0),this._startQuaternion=this.object.quaternion?.clone()??new x(0,0,0,1)}this.gameObject.getComponentInParent(C)||this.gameObject.addComponent(C)}onEnable(){this.startCoroutine(this.cloneLimitIntervalFn())}_forwardPointerEvents=new Map;onPointerEnter(e){e.used||this.object&&this.context.connection.allowEditing&&e.button===0&&this.context.input.setCursor(`pointer`)}onPointerExit(e){e.used||this.object&&this.context.connection.allowEditing&&e.button===0&&this.context.input.unsetCursor(`pointer`)}onPointerDown(e){if(e.used||!this.object||!this.context.connection.allowEditing||e.button!==0)return;let t=this.handleDuplication();if(t){let n=F.getComponent(t,Gi);n?(n.onPointerDown(e),this._forwardPointerEvents.set(e.event.space,n)):w()&&console.warn(`Duplicated object (${t.name}) does not have DragControls`)}else this._currentCount>=this.limitCount?console.warn(`[Duplicatable] Limit of ${this.limitCount} objects created within a few seconds reached. Please wait a moment before creating more objects.`):console.warn(`[Duplicatable] Could not duplicate object.`)}onPointerUp(e){if(e.used)return;let t=this._forwardPointerEvents.get(e.event.space);t&&(t.onPointerUp(e),this._forwardPointerEvents.delete(e.event.space))}*cloneLimitIntervalFn(){for(;this.activeAndEnabled&&!this.destroyed;)this._currentCount>0?--this._currentCount:this._currentCount<0&&(this._currentCount=0),yield Ke(1)}handleDuplication(){if(!this.object||this.limitCount>0&&this._currentCount>=this.limitCount||this.object===this.gameObject)return null;if(F.isDestroyed(this.object))return this.object=null,null;this.object.matrixAutoUpdate===!1&&(this.object.updateMatrix(),w()&&(console.warn(`Object "${this.object.name}" has matrixAutoUpdate disabled. This can cause duplicated objects to have incorrect position/rotation/scale. Consider enabling matrixAutoUpdate or calling updateMatrix() before duplication.`),Ht(`Duplicatable: Object has matrixAutoUpdate disabled`))),this.object.visible=!0,this._startPosition&&this.object.position.copy(this._startPosition),this._startQuaternion&&this.object.quaternion.copy(this._startQuaternion);let e=new nt;this.parent||=this.gameObject.parent,this.parent&&(e.parent=this.parent.guid??this.parent.userData?.guid,e.keepWorldPosition=!0),e.position=this.worldPosition,e.rotation=this.worldQuaternion,e.context=this.context,this._currentCount+=1;let t=F.instantiateSynced(this.object,e);return console.assert(t!==this.object,`Duplicated object is original`),this.object.visible=!1,this._startPosition&&this.object.position.clone().copy(this._startPosition),this._startQuaternion&&this.object.quaternion.clone().copy(this._startQuaternion),t}};ua([A(y)],da.prototype,`parent`,void 0),ua([A(y)],da.prototype,`object`,void 0),ua([A()],da.prototype,`limitCount`,void 0);var fa;(function(e){e[e.PointerEnter=0]=`PointerEnter`,e[e.PointerExit=1]=`PointerExit`,e[e.PointerDown=2]=`PointerDown`,e[e.PointerUp=3]=`PointerUp`,e[e.PointerClick=4]=`PointerClick`})(fa||={});var pa=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ma=class{eventID;callback=new k};pa([A()],ma.prototype,`eventID`,void 0),pa([A(k)],ma.prototype,`callback`,void 0);var ha=class extends R{triggers=[];invoke(e){if(this.triggers)for(let t of this.triggers)t.eventID===e&&t.callback?.invoke()}hasTrigger(e){return this.triggers?.some(t=>t.eventID===e)??!1}shouldChangeCursor(){return this.hasTrigger(fa.PointerClick)||this.hasTrigger(fa.PointerDown)||this.hasTrigger(fa.PointerUp)}onPointerClick(e){this.invoke(fa.PointerClick)}onPointerEnter(e){this.shouldChangeCursor()&&this.context.input.setCursor(`pointer`),this.invoke(fa.PointerEnter)}onPointerExit(e){this.shouldChangeCursor()&&this.context.input.unsetCursor(`pointer`),this.invoke(fa.PointerExit)}onPointerDown(e){this.invoke(fa.PointerDown)}onPointerUp(e){this.invoke(fa.PointerUp)}};pa([A(ma)],ha.prototype,`triggers`,void 0);var ga=class{constructor(e){this.writer=e,this.name=`EXT_mesh_gpu_instancing`}writeNode(e,t){if(e.constructor.name!==`InstancedMesh`)return;let r=this.writer,i=r.extensionsUsed,a={};t.extensions=t.extensions||{},t.extensions[this.name]=a;let o=new _,s=[],c=[],l=[];for(let t=0;t=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Sa=N(`debuggltfexport`),Ca=class extends Di{sceneRoot},wa=class e extends R{binary=!0;objects=[];ext;async exportNow(t,n){Sa&&console.log(`Exporting objects as glTF`,this.objects),t||=`scene`,(!this.objects||this.objects.length<=0)&&(this.objects=[this.context.scene]);let r={binary:this.binary,pivot:e.calculateCenter(this.objects),...n},i=await this.export(this.objects,r).catch(e=>(console.error(e),!1));return i===!1?!1:(this.binary?t.endsWith(`.glb`)||(t+=`.glb`):t.endsWith(`.gltf`)||(t+=`.gltf`),this.binary?e.saveArrayBuffer(i,t):e.saveJson(i,t),!0)}async export(t,n){if(!t||t.length<=0){console.warn(`No objects set to export`);return}let r=new on;r.register(e=>new ga(e)),r.register(e=>new ya(e)),wn(r,this.context),e.filterTopmostParent(t);let i={trs:!1,onlyVisible:!0,truncateDrawRange:!1,binary:!0,maxTextureSize:1/0,embedImages:!0,includeCustomExtensions:!0,animations:n?.animations||e.collectAnimations(t),...n},a=[],o=new y;n?.pivot&&o.position.sub(n.pivot),Sa&&console.log(`EXPORT`,t),t.forEach(e=>{e&&ba(e)&&(o.children.push(e),e.matrixAutoUpdate=!1,e.matrix.copy(e.matrixWorld),F.getComponentsInChildren(e,Vn).forEach(e=>{F.isActiveInHierarchy(e.gameObject)&&e.setInstancingEnabled(!1)}),e.traverse(e=>{if(!ba(e)){let t=e.parent;e.removeFromParent(),a.push(()=>{t&&t.add(e)})}}))});let s=new T(o);return n?.needleComponents&&(this.ext=new pn),this.ext&&(this.ext.registerExport(r),this.ext.context=s),new Promise((e,t)=>{Sa&&console.log(`Starting glTF export.`);try{r?.parse(o,t=>{c(),e(t)},e=>{c(),t(e)},i)}catch(e){console.error(e),t(e)}finally{a.forEach(e=>e()),Sa&&console.log(`Finished glTF export.`)}});function c(){t.forEach(e=>{e&&(e.matrixAutoUpdate=!0,F.getComponentsInChildren(e,Vn).forEach(e=>{F.isActiveInHierarchy(e.gameObject)&&e.setInstancingEnabled(!1)}))})}}static saveArrayBuffer(e,t){this.save(new Blob([e],{type:`application/octet-stream`}),t)}static saveJson(e,t){this.save(`data: text/json;charset=utf-8,`+encodeURIComponent(JSON.stringify(e)),t)}static save(e,t){let n=document.createElement(`a`);n.style.display=`none`,document.body.appendChild(n),typeof e==`string`?n.href=e:n.href=URL.createObjectURL(e),n.download=t,n.click(),n.remove()}static collectAnimations(e,t){t||=[];for(let n of e)n&&n.traverseVisible(e=>{e.animations&&e.animations.length>0&&t.push(...e.animations)});return t}static calculateCenter(e,t){let r=t||new n;return r.set(0,0,0),e.forEach(e=>{r.add(M(e))}),r.divideScalar(e.length),r}static filterTopmostParent(e){if(!(e.length<=0))for(let t=0;t=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ka;(function(e){e[e.Linear=1]=`Linear`,e[e.Exponential=2]=`Exponential`,e[e.ExponentialSquared=3]=`ExponentialSquared`})(ka||={});var Aa=class extends R{get fog(){return this._fog||=new ve(0,0,50),this._fog}get mode(){return ka.Linear}set near(e){this.fog.near=e}get near(){return this.fog.near}set far(e){this.fog.far=e}get far(){return this.fog.far}set color(e){this.fog.color.copy(e)}get color(){return this.fog.color}_fog;onEnable(){this.scene.fog=this.fog}onDisable(){this.scene.fog===this._fog&&(this.scene.fog=null)}};Oa([A()],Aa.prototype,`near`,null),Oa([A()],Aa.prototype,`far`,null),Oa([A(t)],Aa.prototype,`color`,null);var ja=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ma=class extends R{isGizmo=!1;color0;color1;gridHelper;size;divisions;offset;onEnable(){if(this.isGizmo&&!Lt)return;let e=this.size,n=this.divisions;this.gridHelper||(this.gridHelper=new Ce(e,n,this.color0??new t(.4,.4,.4),this.color1??new t(.6,.6,.6)),this.offset!==void 0&&(this.gridHelper.position.y+=this.offset)),this.gridHelper&&this.gameObject.add(this.gridHelper)}onDisable(){this.gridHelper&&=(this.gameObject.remove(this.gridHelper),null)}};ja([A()],Ma.prototype,`isGizmo`,void 0),ja([A(t)],Ma.prototype,`color0`,void 0),ja([A(t)],Ma.prototype,`color1`,void 0);var Na=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Pa=class extends R{connectedBody;get rigidBody(){return this._rigidBody}_rigidBody=null;onEnable(){this._rigidBody||=this.gameObject.getComponent(E),this.rigidBody&&this.connectedBody&&this.startCoroutine(this.create())}*create(){yield,this.rigidBody&&this.connectedBody&&this.activeAndEnabled&&this.createJoint(this.rigidBody,this.connectedBody)}};Na([A(E)],Pa.prototype,`connectedBody`,void 0);var Fa=class extends Pa{createJoint(e,t){this.context.physics.engine?.addFixedJoint(e,t)}},Ia=class extends Pa{anchor;axis;createJoint(e,t){this.axis&&this.anchor&&this.context.physics.engine?.addHingeJoint(e,t,this.anchor,this.axis)}};Na([A(n)],Ia.prototype,`anchor`,void 0),Na([A(n)],Ia.prototype,`axis`,void 0);var La=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a};function Ra(e){return e*Math.PI/180}var za=300,Ba=N(`debuglights`),Va;(function(e){e[e.Spot=0]=`Spot`,e[e.Directional=1]=`Directional`,e[e.Point=2]=`Point`,e[e.Area=3]=`Area`,e[e.Rectangle=3]=`Rectangle`,e[e.Disc=4]=`Disc`})(Va||={});var Ha;(function(e){e[e.Realtime=4]=`Realtime`,e[e.Baked=2]=`Baked`,e[e.Mixed=1]=`Mixed`})(Ha||={});var Ua;(function(e){e[e.None=0]=`None`,e[e.Hard=1]=`Hard`,e[e.Soft=2]=`Soft`})(Ua||={});var Y=class extends R{type=0;get range(){return this._range}set range(e){this._range=e,this.light&&(this.light.type===`SpotLight`||this.light.type===`PointLight`)&&`distance`in this.light&&(this.light.distance=e)}_range=1;get spotAngle(){return this._spotAngle}set spotAngle(e){this._spotAngle=e,this.light&&this.light.type===`SpotLight`&&`angle`in this.light&&(this.light.angle=Ra(e/2))}_spotAngle=30;get innerSpotAngle(){return this._innerSpotAngle}set innerSpotAngle(e){if(this._innerSpotAngle=e,this.light&&this.light.type===`SpotLight`&&`penumbra`in this.light){let t=this.spotAngle,n=1-Ra(e/2)/Ra(t/2);this.light.penumbra=n}}_innerSpotAngle=10;set color(e){this._color=e,this.light!==void 0&&(this.light.color=e)}get color(){return this.light?this.light.color:this._color}_color=new t(16777215);set shadowNearPlane(e){if(e!==this._shadowNearPlane&&(this._shadowNearPlane=e,this.light?.shadow?.camera!==void 0)){let t=this.light.shadow.camera;t.near=e}}get shadowNearPlane(){return this._shadowNearPlane}_shadowNearPlane=.1;set shadowBias(e){e!==this._shadowBias&&(this._shadowBias=e,this.light?.shadow?.bias!==void 0&&(this.light.shadow.bias=e,this.light.shadow.needsUpdate=!0))}get shadowBias(){return this._shadowBias}_shadowBias=0;set shadowNormalBias(e){e!==this._shadowNormalBias&&(this._shadowNormalBias=e,this.light?.shadow?.normalBias!==void 0&&(this.light.shadow.normalBias=e,this.light.shadow.needsUpdate=!0))}get shadowNormalBias(){return this._shadowNormalBias}_shadowNormalBias=0;_overrideShadowBiasSettings=!1;set shadows(e){this._shadows=e,this.light&&(this.light.castShadow=e!==Ua.None,this.updateShadowSoftHard())}get shadows(){return this._shadows}_shadows=1;lightmapBakeType=Ha.Realtime;set intensity(e){this._intensity=e,this.light&&(this.light.intensity=e),Ba&&console.log(`Set light intensity to `+this._intensity,e,this)}get intensity(){return this._intensity}_intensity=-1;get shadowDistance(){let e=this.light;return e?.shadow?e.shadow.camera.far:-1}set shadowDistance(e){this._shadowDistance=e;let t=this.light;if(t?.shadow){let n=t.shadow.camera;n.far=e,n.updateProjectionMatrix()}}_shadowDistance;shadowWidth;shadowHeight;get shadowResolution(){let e=this.light;return e?.shadow?e.shadow.mapSize.x:-1}set shadowResolution(e){if(e===this._shadowResolution)return;this._shadowResolution=e;let t=this.light;t?.shadow&&(t.shadow.mapSize.set(e,e),t.shadow.needsUpdate=!0)}_shadowResolution=void 0;get isBaked(){return this.lightmapBakeType===Ha.Baked}get selfIsLight(){if(this.gameObject.isLight===!0)return!0;switch(this.gameObject.type){case`SpotLight`:case`PointLight`:case`DirectionalLight`:return!0}return!1}light=void 0;getWorldPosition(e){return this.light?this.type===Va.Directional?this.light.getWorldPosition(e).multiplyScalar(1):this.light.getWorldPosition(e):e}awake(){this.color=new t(this.color??16777215),Ba&&console.log(this.name,this)}onEnable(){Ba&&console.log(`ENABLE LIGHT`,this.name),this.createLight(),!this.isBaked&&(this.light&&(this.light.visible=!0,this.light.intensity=this._intensity,Ba&&console.log(`Set light intensity to `+this.light.intensity,this.name),this.selfIsLight||this.light.parent!==this.gameObject&&this.gameObject.add(this.light)),this.type===Va.Directional&&this.startCoroutine(this.updateMainLightRoutine(),an.LateUpdate))}onDisable(){Ba&&console.log(`DISABLE LIGHT`,this.name),this.light&&(this.selfIsLight?this.light.intensity=0:this.light.visible=!1)}createLight(){let e=this.selfIsLight;if(e&&!this.light)switch(this.light=this.gameObject,this.light.name=this.name,this._intensity=this.light.intensity,this.type){case Va.Directional:this.setDirectionalLight(this.light);break}else if(!this.light)switch(this.type){case Va.Directional:let e=new ne(this.color,this.intensity*Math.PI);if(e.position.set(0,0,-za*.5).applyQuaternion(this.gameObject.quaternion),this.gameObject.add(e.target),kt(e.target,0,0,0),this.light=e,this.gameObject.position.set(0,0,0),this.gameObject.rotation.set(0,0,0),Ba){let e=new f(this.light,.2,this.color);this.context.scene.add(e)}break;case Va.Spot:let t=new ce(this.color,this.intensity*Math.PI,this.range,Ra(this.spotAngle/2),1-Ra(this.innerSpotAngle/2)/Ra(this.spotAngle/2),2);t.position.set(0,0,0),t.rotation.set(0,0,0),this.light=t;let n=t.target;t.add(n),n.position.set(0,0,this.range),n.rotation.set(0,0,0);break;case Va.Point:this.light=new De(this.color,this.intensity*Math.PI,this.range);break}if(this.light){if(this._intensity>=0?this.light.intensity=this._intensity:this._intensity=this.light.intensity,this.shadows===Ua.None?this.light.castShadow=!1:this.light.castShadow=!0,this.light.shadow){this._shadowResolution!==void 0&&this._shadowResolution>4?(this.light.shadow.mapSize.width=this._shadowResolution,this.light.shadow.mapSize.height=this._shadowResolution):(this.light.shadow.mapSize.width=2048,this.light.shadow.mapSize.height=2048),Ba&&console.log(`Override shadow bias?`,this._overrideShadowBiasSettings,this.shadowBias,this.shadowNormalBias),this.light.shadow.bias=this.shadowBias,this.light.shadow.normalBias=this.shadowNormalBias,this.updateShadowSoftHard();let e=this.light.shadow.camera;if(e.near=this.shadowNearPlane,this._shadowDistance!==void 0&&typeof this._shadowDistance==`number`?e.far=this._shadowDistance:e.far=za*Math.abs(this.gameObject.scale.z),this.gameObject.scale.set(1,1,1),this.shadowWidth!==void 0)e.left=-this.shadowWidth/2,e.right=this.shadowWidth/2;else{let t=this.gameObject.scale.x;e.left*=t,e.right*=t}if(this.shadowHeight!==void 0)e.top=this.shadowHeight/2,e.bottom=-this.shadowHeight/2;else{let t=this.gameObject.scale.y;e.top*=t,e.bottom*=t}this.light.shadow.needsUpdate=!0,Ba&&this.context.scene.add(new g(e))}this.isBaked?this.light.removeFromParent():e||this.gameObject.add(this.light)}}*updateMainLightRoutine(){for(;;){this.type===Va.Directional&&((!this.context.mainLight||this.intensity>this.context.mainLight.intensity)&&(this.context.mainLight=this),yield);break}}static allowChangingRendererShadowMapType=!0;updateShadowSoftHard(){this.light&&this.light.shadow&&(this.shadows===Ua.Soft||(this.light.shadow.radius=1,this.light.shadow.blurSamples=1))}onEnterXR(e){this.applyXRScale(e.xr.rigScale)}onUpdateXR(e){this.applyXRScale(e.xr.rigScale)}onLeaveXR(e){this.applyXRScale(1)}applyXRScale(e){this.light&&(this.light.intensity=this._intensity/e,`distance`in this.light&&(this.light.distance=this._range/e))}setDirectionalLight(e){e.add(e.target),e.target.position.set(0,0,-1)}};La([A()],Y.prototype,`type`,void 0),La([A()],Y.prototype,`range`,null),La([A()],Y.prototype,`spotAngle`,null),La([A()],Y.prototype,`innerSpotAngle`,null),La([A(t)],Y.prototype,`color`,null),La([A()],Y.prototype,`shadowNearPlane`,null),La([A()],Y.prototype,`shadowBias`,null),La([A()],Y.prototype,`shadowNormalBias`,null),La([A()],Y.prototype,`shadows`,null),La([A()],Y.prototype,`lightmapBakeType`,void 0),La([A()],Y.prototype,`intensity`,null),La([A()],Y.prototype,`shadowDistance`,null),La([A()],Y.prototype,`shadowResolution`,null),new n(0,0,0);var Wa=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ga=N(`debuglods`),Ka=N(`nolods`),qa;(function(e){e[e.None=0]=`None`,e[e.CrossFade=1]=`CrossFade`,e[e.SpeedTree=2]=`SpeedTree`})(qa||={});var Ja=class{screenRelativeTransitionHeight;distance;renderers};Wa([A()],Ja.prototype,`screenRelativeTransitionHeight`,void 0),Wa([A()],Ja.prototype,`distance`,void 0),Wa([A(Vn)],Ja.prototype,`renderers`,void 0);var Ya=class{model;get renderers(){return this.model.renderers}constructor(e){this.model=e}},Xa=class extends R{lodModels=[];_lods=[];_settings=[];_lodsHandler;start(){if(Ga&&console.log(`LODGROUP`,this.name,this.lodModels,this),!Ka&&!this._lodsHandler&&this.gameObject&&this.lodModels&&Array.isArray(this.lodModels)){let e=[];for(let t of this.lodModels){let n=new Ya(t);this._lods.push(n);for(let t of n.renderers)e.includes(t)||e.push(t)}this._lodsHandler=[];for(let t=0;t=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Qa=N(`debugnestedgltf`),$a=class extends R{filePath;loaded=new k;loadAssetInParent=!0;_isLoadingOrDoneLoading=!1;listenToProgress(e){this.filePath?.beginListenDownload(e)}preload(){return this.filePath?.preload()||null}async start(){if(this._isLoadingOrDoneLoading)return;Qa&&console.log(this,this.guid);let e=this.gameObject.parent;if(e&&this.filePath){this._isLoadingOrDoneLoading=!0;let t=new nt;t.idProvider=new mt(this.hash(this.guid)),t.parent=this.loadAssetInParent===!1?this.gameObject:e,this.gameObject.updateMatrix();let n=this.gameObject.matrix;Qa&&console.log(`Load nested:`,this.filePath?.url??this.filePath,this.gameObject.position);let r=await this.filePath?.instantiate?.call(this.filePath,t);Qa&&console.log(`Nested loaded:`,this.filePath?.url??this.filePath,r),r&&this.loadAssetInParent!==!1&&(r.matrixAutoUpdate=!1,r.matrix.identity(),r.applyMatrix4(n),r.matrixAutoUpdate=!0,r.layers.disableAll(),r.layers.set(this.layer),this.loaded.invoke({component:this,instance:r,asset:this.filePath})),Qa&&console.log(`Nested loading done:`,this.filePath?.url??this.filePath,r)}}onDestroy(){this.filePath?.unload()}hash(e){let t=0;for(let n=0;n=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},to=N(`debugnet`),no=class e extends R{url=null;urlParameterName=null;localhost=null;awake(){to&&console.log(this),this.context.connection.registerProvider(this)}getWebsocketUrl(){let t=this.url?e.GetUrl(this.url,this.localhost):null;if(this.urlParameterName){let e=N(this.urlParameterName);e&&typeof e==`string`&&(t=e)}if(!t)return null;let n=RegExp(`(((https?)|(?wss?))://)?(www.)?(?.+)`,`gm`).exec(t);return n?.groups?n?.groups.socket_prefix?t:`wss://`+n?.groups.url:null}static GetUrl(t,n){let r=t,i=e.IsLocalNetwork()&&n;if(i&&(r=n),t?.startsWith(`/`)){let e=i?r:window.location.origin;e?.endsWith(`/`)&&t.startsWith(`/`)&&(t=t.substring(1)),r=e+t}return r}static IsLocalNetwork(e=window.location.hostname){return Ue(e)}};eo([A()],no.prototype,`url`,void 0),eo([A()],no.prototype,`urlParameterName`,void 0),eo([A()],no.prototype,`localhost`,void 0);var ro=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},io=class extends R{referenceSpace;from;affectPosition=!1;affectRotation=!1;alignLookDirection=!1;levelLookDirection=!1;levelPosition=!1;positionOffset=new n(0,0,0);rotationOffset=new n(0,0,0);offset=new n(0,0,0);update(){if(!this.from)return;var e=M(this.from),t=Xt(this.from);this.offset.copy(this.positionOffset);let r=this.offset.length();if(this.referenceSpace&&this.offset.transformDirection(this.referenceSpace.matrixWorld).multiplyScalar(r),e.add(this.offset),this.levelPosition&&this.referenceSpace){let t=new ae(this.gameObject.up,0),r=M(this.referenceSpace);t.setFromNormalAndCoplanarPoint(this.gameObject.up,r);let i=new n(0,0,0);t.projectPoint(e,i),e.copy(i)}this.affectPosition&&Oe(this.gameObject,e);let i=new be(this.rotationOffset.x,this.rotationOffset.y,this.rotationOffset.z),a=new x().setFromEuler(i);this.affectRotation&&Ye(this.gameObject,t.multiply(a));let o=new n;this.from.getWorldDirection(o).multiplyScalar(50),this.levelLookDirection&&(o.y=0),this.alignLookDirection&&this.gameObject.lookAt(o)}};ro([A(F)],io.prototype,`referenceSpace`,void 0),ro([A(F)],io.prototype,`from`,void 0),ro([A(n)],io.prototype,`positionOffset`,void 0),ro([A(n)],io.prototype,`rotationOffset`,void 0);var ao=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},oo=class extends R{strength=1;radius=2;targets=[];update(){let e=this.gameObject.worldPosition,t=-this.strength*this.context.time.deltaTime;this.targets?.forEach(n=>{if(!n)return;let r=n.gameObject.worldPosition.sub(e),i=r.length();if(i>this.radius)return;let a=t;i>1?a/=i*i:a/=Math.max(.05,i),n.applyImpulse(r.multiplyScalar(a))})}};ao([A()],oo.prototype,`strength`,void 0),ao([A()],oo.prototype,`radius`,void 0),ao([A(E)],oo.prototype,`targets`,void 0);var so=class e extends R{_didAssignPlayerColor=!1;onEnable(){this.context.connection.beginListen(P.JoinedRoom,this.tryAssignColor),this._didAssignPlayerColor||this.startCoroutine(this.waitForConnection())}onDisable(){this.context.connection.stopListen(P.JoinedRoom,this.tryAssignColor)}*waitForConnection(){for(;!this.destroyed&&this.activeAndEnabled&&(yield Ke(.2),!this.tryAssignColor()););}tryAssignColor=()=>{let e=F.getComponentInParent(this.gameObject,qn);if(e&&e.owner)return this._didAssignPlayerColor=!0,this.assignUserColor(e.owner),!0;let t=F.getComponentInParent(this.gameObject,Yn);return t?.connectionId?(this._didAssignPlayerColor=!0,this.assignUserColor(t.connectionId),!0):!1};assignUserColor(t){let n=e.hashCode(t),r=e.colorFromHashCode(n);if(this.gameObject.type===`Mesh`){let e=this.gameObject;this.assignColor(r,t,e)}else if(this.gameObject.children)for(let e of this.gameObject.children){let n=e;n.material&&n.material.color&&this.assignColor(r,t,n)}}assignColor(e,t,n){let r=n.material;r&&(r._playerMaterial!==t&&(r=r.clone(),r._playerMaterial=t,n.material=r),r.color=e)}static hashCode(e){var t=0,n,r;if(e.length===0)return t;for(n=0;n>16,r=(e&65280)>>8,i=e&255;return new t(n/255,r/255,i/255)}};function co(){return new Promise((e,t)=>{let n=()=>{n!=null&&(document.removeEventListener(`pointerdown`,n),document.removeEventListener(`click`,n),document.removeEventListener(`dragstart`,n),document.removeEventListener(`touchstart`,n),e())};document.addEventListener(`pointerdown`,n),document.addEventListener(`click`,n),document.addEventListener(`dragstart`,n),document.addEventListener(`touchstart`,n)})}async function lo(e){await co(),e()}var uo=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},X=N(`debugvideo`),fo;(function(e){e[e.None=0]=`None`,e[e.AdjustHeight=1]=`AdjustHeight`,e[e.AdjustWidth=2]=`AdjustWidth`})(fo||={});var po;(function(e){e[e.VideoClip=0]=`VideoClip`,e[e.Url=1]=`Url`})(po||={});var mo;(function(e){e[e.None=0]=`None`,e[e.AudioSource=1]=`AudioSource`,e[e.Direct=2]=`Direct`,e[e.APIOnly=3]=`APIOnly`})(mo||={});var ho;(function(e){e[e.CameraFarPlane=0]=`CameraFarPlane`,e[e.CameraNearPlane=1]=`CameraNearPlane`,e[e.RenderTexture=2]=`RenderTexture`,e[e.MaterialOverride=3]=`MaterialOverride`})(ho||={});var Z=class extends R{playOnAwake=!0;aspectMode=fo.None;clip=null;source=po.Url;get url(){return this._url}set url(e){let t=this._url!==e;this.__didAwake?t&&this.setClipURL(e??``):this._url=e}_url=null;renderMode=ho.MaterialOverride;targetMaterialProperty;targetMaterialRenderer;targetTexture;time=0;_playbackSpeed=1;get playbackSpeed(){return this._videoElement?.playbackRate??this._playbackSpeed}set playbackSpeed(e){this._playbackSpeed=e,this._videoElement&&(this._videoElement.playbackRate=e)}_isLooping=!1;get isLooping(){return this._videoElement?.loop??this._isLooping}set isLooping(e){this._isLooping=e,this._videoElement&&(this._videoElement.loop=e)}get currentTime(){return this._videoElement?.currentTime??this.time}set currentTime(e){this._videoElement?this._videoElement.currentTime=e:this.time=e}get isPlaying(){let e=this._videoElement;return!!(e&&(e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>e.HAVE_CURRENT_DATA||e.srcObject&&e.srcObject.active))}get crossOrigin(){return this._videoElement?.crossOrigin??this._crossOrigin}set crossOrigin(e){this._crossOrigin=e,this._videoElement&&(e===null?this._videoElement.removeAttribute(`crossorigin`):this._videoElement.setAttribute(`crossorigin`,e))}get videoMaterial(){return!this._videoMaterial&&!this.create(!1)?null:this._videoMaterial}get videoTexture(){return!this._videoTexture&&!this.create(!1)?null:this._videoTexture}get videoElement(){return!this._videoElement&&!this.create(!1)?null:this._videoElement}requestPictureInPicture(){return this._videoElement?this._videoElement.requestPictureInPicture():null}get muted(){return this._videoElement?.muted??this._muted}set muted(e){this._muted=e,this._videoElement&&(this._videoElement.muted=e)}_muted=!1;get currentVideo(){return this.clip}set audioOutputMode(e){e!==this._audioOutputMode&&(e===mo.AudioSource&&w()&&console.warn(`VideoAudioOutputMode.AudioSource is not yet implemented`),this._audioOutputMode=e,this.updateVideoElementSettings())}get audioOutputMode(){return this._audioOutputMode}_audioOutputMode=mo.Direct;playInBackground=!0;_crossOrigin=`anonymous`;_videoElement=null;_videoTexture=null;_videoMaterial=null;_isPlaying=!1;wasPlaying=!1;preloadVideo(){X&&console.log(`Video Preload: `+this.name,this.clip),this.create(!1)}preload(){this.preloadVideo()}setVideo(e){this.clip=e,this.source=po.VideoClip,this._videoElement?(this._videoElement.srcObject=e,this._isPlaying&&this.play(),this.updateAspect()):this.create(this.playOnAwake)}setClipURL(e){this._url!==e&&(this._url=e,this.source=po.Url,X&&console.log(`set url`,e),this._videoElement?e.endsWith(`.m3u8`)||e.includes(`.m3u`)?this.ensureM3UCanBePlayed():(this._videoElement.src=e,this._isPlaying&&(this.stop(),this.play())):this.create(this.playOnAwake))}onEnable(){X&&console.log(`VideoPlayer.onEnable`,po[this.source],this.clip,this.url,this),window.addEventListener(`visibilitychange`,this.visibilityChanged),this.playOnAwake===!0?this.create(!0):this.preloadVideo(),this.screenspace?this._overlay?.start():this._overlay?.stop()}onDisable(){window.removeEventListener(`visibilitychange`,this.visibilityChanged),this._overlay?.stop(),this.pause()}visibilityChanged=e=>{switch(document.visibilityState){case`hidden`:this.playInBackground||(this.wasPlaying=this._isPlaying,this.pause());break;case`visible`:this.wasPlaying&&!this._isPlaying&&this.play();break}};onDestroy(){this._videoElement&&=(this.videoElement?.remove(),null),this._videoTexture&&=(this._videoTexture.dispose(),null)}_receivedInput=!1;constructor(){super(),lo(()=>{this._receivedInput=!0,this.updateVideoElementSettings()}),this._targetObjects=[],N(`videoscreenspace`)&&window.addEventListener(`keydown`,e=>{e.key===`f`&&(this.screenspace=!this.screenspace)})}_playErrors=0;play(){if(this._videoElement||this.create(!1),!this._videoElement){X&&console.warn(`Can not play: no video element found`,this);return}if(!(this._isPlaying&&!this._videoElement?.ended&&!this._videoElement?.paused)){if(this._isPlaying=!0,this._receivedInput||(this._videoElement.muted=!0),this.handleBeginPlaying(!1),this.shouldUseM3U){this.ensureM3UCanBePlayed();return}X&&console.log(`Video Play()`,this.clip,this._videoElement,this.time),this._videoElement.currentTime=this.time,this._videoElement.play().catch(e=>{this._playErrors++<10?console.error(e):this._playErrors===10&&console.error(`Multiple errors playing video, further errors will be suppressed. Use 'debugvideo' param to see all errors.`),X&&console.error(`Error playing video`,e,`CODE=`+e.code,this.videoElement?.src,this),setTimeout(()=>{this._isPlaying&&!this.destroyed&&this.activeAndEnabled&&this.play()},1e3)}),X&&console.log(`play`,this._videoElement,this.time)}}stop(){this._isPlaying=!1,this.time=0,this._videoElement&&(this._videoElement.currentTime=0,this._videoElement.pause(),X&&console.log(`STOP`,this))}pause(){this.time=this._videoElement?.currentTime??0,this._isPlaying=!1,this._videoElement?.pause(),X&&console.log(`PAUSE`,this,this.currentTime)}create(e){let t;switch(this.source){case po.VideoClip:t=this.clip;break;case po.Url:t=this.url,!t?.length&&typeof this.clip==`string`&&(t=this.clip);break}return t?(this._videoElement||(X&&console.warn(`Create VideoElement`,this),this._videoElement=this.createVideoElement(),this.context.domElement.shadowRoot.prepend(this._videoElement),this.updateVideoElementStyles()),typeof t==`string`?(X&&console.log(`Set Video src`,t),this._videoElement.src=t):(X&&console.log(`Set Video srcObject`,t),this._videoElement.srcObject=t),this._videoTexture||=new l(this._videoElement),this._videoTexture.flipY=!1,this._videoTexture.colorSpace=re,e&&this.handleBeginPlaying(e),X&&console.log(`Video: handle playing done...`,t,e),!0):(X&&console.warn(`No video source set`,this),!1)}updateAspect(){this.aspectMode!==fo.None&&this.startCoroutine(this.updateAspectImpl())}_overlay=null;get screenspace(){return this._overlay?.enabled??!1}set screenspace(e){if(e){if(!this._videoTexture)return;this._overlay||=new go(this.context),this._overlay.add(this._videoTexture)}else this._overlay?.remove(this._videoTexture);this._overlay&&(this._overlay.enabled=e)}_targetObjects;createVideoElement(){let e=document.createElement(`video`);return this._crossOrigin&&e.setAttribute(`crossorigin`,this._crossOrigin),X&&console.log(`created video element`,e),e}handleBeginPlaying(e){if(!this.activeAndEnabled||!this._videoElement)return;this._targetObjects.length=0;let t=this.gameObject;switch(this.renderMode){case ho.MaterialOverride:t=this.targetMaterialRenderer?.gameObject,t||=F.getComponent(this.gameObject,Vn)?.gameObject;break;case ho.RenderTexture:console.error(`VideoPlayer renderTexture not implemented yet. Please use material override instead`);return}if(!t){console.error(`Missing target for video material renderer`,this.name,ho[this.renderMode],this);return}let n=t.material;if(n){this._targetObjects.push(t),n!==this._videoMaterial&&(this._videoMaterial=n.clone(),t.material=this._videoMaterial);let e=this._videoMaterial;if(!this.targetMaterialProperty)X&&e.map===void 0&&console.warn(`The target material does not have a 'map' property, video might not render correctly.`),e.map=this._videoTexture;else switch(this.targetMaterialProperty){default:X&&e[this.targetMaterialProperty]===void 0&&console.warn(`The target material does not have a '${this.targetMaterialProperty}' property, video might not render correctly.`),e.map=this._videoTexture;break}}else{console.warn(`Can not play video, no material found, this might be a multimaterial case which is not supported yet`);return}this.updateVideoElementSettings(),this.updateVideoElementStyles(),e&&(this.shouldUseM3U&&this.ensureM3UCanBePlayed(),this.play())}updateVideoElementSettings(){if(!this._videoElement)return;this._videoElement.loop=this._isLooping,this._videoElement.currentTime=this.currentTime,this._videoElement.playbackRate=this._playbackSpeed,this._videoElement.playsInline=!0;let e=!this._receivedInput||this.audioOutputMode===mo.None;!e&&this._muted&&(e=!0),this._videoElement.muted=e,this.playOnAwake&&(this._videoElement.autoplay=!0)}updateVideoElementStyles(){this._videoElement&&(this._videoElement.style.userSelect=`none`,this._videoElement.style.visibility=`hidden`,this._videoElement.style.display=`none`,this.updateAspect())}_updateAspectRoutineId=-1;*updateAspectImpl(){let e=++this._updateAspectRoutineId,t=this.clip;for(;e===this._updateAspectRoutineId&&this.aspectMode!==fo.None&&this.clip&&t===this.clip&&this._isPlaying;){if(!t||typeof t==`string`)return;let e;for(let n of t.getVideoTracks()){let t=n.getSettings();if(t&&t.width&&t.height){e=t.width/t.height;break}else e=this.context.renderer.domElement.clientWidth/this.context.renderer.domElement.clientHeight}if(e===void 0){for(let e=0;e<10;e++)yield;if(!this.isPlaying)break;continue}if(e===void 0){yield;continue}for(let t of this._targetObjects){let n=1;if(t.parent){let e=_t(t.parent);n=e.x/e.y}switch(this.aspectMode){case fo.AdjustHeight:t.scale.y=1/e*t.scale.x*n;break;case fo.AdjustWidth:t.scale.x=e*t.scale.y*n;break}}for(let e=0;e<3;e++)yield}}get shouldUseM3U(){return this.url!=null&&(this.url.endsWith(`.m3u8`)||this.url.endsWith(`.m3u`))&&this.source===po.Url}ensureM3UCanBePlayed(){if(!this.shouldUseM3U)return;let e=document.head.querySelector(`script[data-hls_library]`);e?globalThis.Hls?this.onHlsAvailable():e.addEventListener(`load`,this.onHlsAvailable):(X&&console.log(`HLS: load script`),e=document.createElement(`script`),e.dataset.hls_library=`hls.js`,e.src=`https://cdn.jsdelivr.net/npm/hls.js@1`,e.addEventListener(`load`,this.onHlsAvailable),document.head.append(e))}_hls;onHlsAvailable=()=>{X&&console.log(`HLS: available`,this.clip),!(!this.shouldUseM3U||!this.url)&&(this._hls||=new Hls,this.videoElement.autoplay=!0,this._hls.loadSource(this.url),this._hls.attachMedia(this.videoElement),this._videoElement?.play(),X&&console.log(`HLS: loaded`,this.clip))}};uo([A()],Z.prototype,`playOnAwake`,void 0),uo([A()],Z.prototype,`aspectMode`,void 0),uo([A(URL)],Z.prototype,`clip`,void 0),uo([A()],Z.prototype,`source`,void 0),uo([A(URL)],Z.prototype,`url`,null),uo([A()],Z.prototype,`renderMode`,void 0),uo([A()],Z.prototype,`targetMaterialProperty`,void 0),uo([A(Vn)],Z.prototype,`targetMaterialRenderer`,void 0),uo([A(ue)],Z.prototype,`targetTexture`,void 0),uo([A()],Z.prototype,`time`,void 0),uo([A()],Z.prototype,`playbackSpeed`,null),uo([A()],Z.prototype,`isLooping`,null),uo([A()],Z.prototype,`audioOutputMode`,null);var go=class{context;constructor(e){this.context=e,this._input=new _o(this)}get enabled(){return this._isInScreenspaceMode}set enabled(e){e?this.start():this.stop()}add(e){this._videos.indexOf(e)===-1&&this._videos.push(e)}remove(e){if(!e)return;let t=this._videos.indexOf(e);t>=0&&this._videos.splice(t,1)}start(){if(this._isInScreenspaceMode||this._videos.length<0)return;let e=this._videos[this._videos.length-1];if(!e)return;if(this._isInScreenspaceMode=!0,!this._screenspaceModeQuad){if(this._screenspaceModeQuad=Ze.createPrimitive(et.Quad,{material:new vo(e)}),!this._screenspaceModeQuad)return;this._screenspaceModeQuad.geometry.scale(2,2,2)}let t=this._screenspaceModeQuad;this.context.scene.add(t),this.updateScreenspaceMaterialUniforms();let n=t.material;n?.reset(),this._input?.enable(n)}stop(){this._isInScreenspaceMode=!1,this._screenspaceModeQuad&&(this._input?.disable(),this._screenspaceModeQuad.removeFromParent())}updateScreenspaceMaterialUniforms(){let e=this._screenspaceModeQuad?.material;e&&(e.screenAspect=this.context.domElement.clientWidth/this.context.domElement.clientHeight)}_videos=[];_screenspaceModeQuad;_isInScreenspaceMode=!1;_input},_o=class{_onResizeScreenFn;_onKeyUpFn;_onMouseWheelFn;context;overlay;constructor(e){this.overlay=e,this.context=e.context}_material;enable(e){this._material=e,window.addEventListener(`resize`,this._onResizeScreenFn=()=>{this.overlay.updateScreenspaceMaterialUniforms()}),window.addEventListener(`keyup`,this._onKeyUpFn=e=>{e.key===`Escape`&&this.overlay.stop()}),window.addEventListener(`wheel`,this._onMouseWheelFn=t=>{this.overlay.enabled&&(e.zoom+=t.deltaY*5e-4,t.preventDefault())},{passive:!1});let t=new b;window.addEventListener(`mousemove`,n=>{if(this.overlay.enabled&&this.context.input.getPointerPressed(0)){let r=new b(n.movementX,n.movementY);r.x/=this.context.domElement.clientWidth,r.y/=this.context.domElement.clientHeight,t.set(r.x,r.y),t.multiplyScalar(e.zoom/-this.context.time.deltaTime*.01),e.offset=e.offset.add(t)}}),window.addEventListener(`pointermove`,n=>{this.overlay.enabled&&this.context.input.getPointerPressed(0)&&this.context.input.getTouchesPressedCount()===1&&(t.set(n.movementX,n.movementY),t.multiplyScalar(e.zoom*-this.context.time.deltaTime*.05),e.offset=e.offset.add(t))});let n=0;window.addEventListener(`touchstart`,e=>{if(e.touches.length<2){this.context.time.time-n<.3&&this.overlay.stop(),n=this.context.time.time;return}this._isPinching=!0,this._lastPinch=0}),window.addEventListener(`touchmove`,e=>{if(!this._isPinching||!this._material)return;let t=e.touches[0],n=e.touches[1],r=t.clientX-n.clientX,i=t.clientY-n.clientY,a=Math.sqrt(r*r+i*i);if(this._lastPinch!==0){let e=a-this._lastPinch;this._material.zoom-=e*.004}this._lastPinch=a}),window.addEventListener(`touchend`,()=>{this._isPinching=!1})}_isPinching=!1;_lastPinch=0;disable(){this._onResizeScreenFn&&=(window.removeEventListener(`resize`,this._onResizeScreenFn),void 0),this._onKeyUpFn&&=(window.removeEventListener(`keyup`,this._onKeyUpFn),void 0),this._onMouseWheelFn&&=(window.removeEventListener(`wheel`,this._onMouseWheelFn),void 0)}},vo=class extends ye{set screenAspect(e){this.uniforms.screenAspect.value=e,this.needsUpdate=!0}set offset(e){let t=this.uniforms.offsetScale.value;t.x=e.x,t.y=e.y,this.uniforms.offsetScale.value=t,this.needsUpdate=!0}_offset=new b;get offset(){let e=this.uniforms.offsetScale.value;return this._offset.set(e.x,e.y),this._offset}set zoom(e){let t=this.uniforms.offsetScale.value;e<.001&&(e=.001),t.z=e,this.needsUpdate=!0}get zoom(){return this.uniforms.offsetScale.value.z}reset(){this.offset=this.offset.set(0,0),this.zoom=1,this.needsUpdate=!0}constructor(e){super(),this.uniforms={map:{value:e},screenAspect:{value:1},offsetScale:{value:new pe(0,0,1,1)}},this.vertexShader=` - uniform sampler2D map; - uniform float screenAspect; - uniform vec4 offsetScale; - varying vec2 vUv; - - void main() { - - gl_Position = vec4( position , 1.0 ); - vUv = uv; - vUv.y = 1. - vUv.y; - - // fit into screen - ivec2 res = textureSize(map, 0); - float videoAspect = float(res.x) / float(res.y); - float aspect = videoAspect / screenAspect; - if(aspect >= 1.0) - { - vUv.y = vUv.y * aspect; - float offset = (1. - aspect) * .5; - vUv.y = vUv.y + offset; - } - else - { - vUv.x = vUv.x / aspect; - float offset = (1. - 1. / aspect) * .5; - vUv.x = vUv.x + offset; - } - - vUv.x -= .5; - vUv.y -= .5; - - vUv.x *= offsetScale.z; - vUv.y *= offsetScale.z; - vUv.x += offsetScale.x; - vUv.y += offsetScale.y; - - vUv.x += .5; - vUv.y += .5; - } - - `,this.fragmentShader=` - uniform sampler2D map; - varying vec2 vUv; - void main() { - if(vUv.x < 0. || vUv.x > 1. || vUv.y < 0. || vUv.y > 1.) - gl_FragColor = vec4(0., 0., 0., 1.); - else - { - vec4 texcolor = texture2D(map, vUv); - gl_FragColor = texcolor; - } - } - `}},yo=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Q=N(`debugscreensharing`),bo;(function(e){e[e.Screen=0]=`Screen`,e[e.Camera=1]=`Camera`,e[e.Canvas=2]=`Canvas`,e[e.Microphone=3]=`Microphone`})(bo||={});var xo;(function(e){e[e.Idle=0]=`Idle`,e[e.Sending=1]=`Sending`,e[e.Receiving=2]=`Receiving`})(xo||={});var So=class extends R{allowStartOnClick=!0;onPointerEnter(){this.context.connection.allowEditing!=0&&this.allowStartOnClick&&this.context.input.setCursor(`pointer`)}onPointerExit(){this.context.connection.allowEditing!=0&&this.allowStartOnClick&&this.context.input.unsetCursor(`pointer`)}onPointerClick(e){if(this.context.connection.allowEditing!=0&&this.allowStartOnClick&&!(e&&e.pointerId!==0)){if(this.isReceiving&&this.videoPlayer?.isPlaying){this.videoPlayer&&(this.videoPlayer.screenspace=!this.videoPlayer.screenspace);return}if(this.isSending){this.close();return}this.share()}}autoConnect=!1;set videoPlayer(e){this._videoPlayer&&(this.isSending||this.isReceiving)&&this._videoPlayer.stop(),this._videoPlayer=e,this._videoPlayer&&this._currentStream&&(this.isSending||this.isReceiving)&&this._videoPlayer.setVideo(this._currentStream)}get videoPlayer(){return this._videoPlayer}_videoPlayer;_audioSource;get screenspace(){return this.videoPlayer?.screenspace??!1}set screenspace(e){this.videoPlayer&&(this.videoPlayer.screenspace=e)}device=`Screen`;deviceName;deviceFilter;get currentScream(){return this._currentStream}get currentMode(){return this._currentMode}get isSending(){return this._currentStream?.active&&this._currentMode===xo.Sending}get isReceiving(){if(this._currentMode===xo.Receiving){if(!this._currentStream||this._currentStream.active===!1)return!1;let e=this._currentStream.getTracks();for(let t of e)if(t.readyState===`live`)return!0}return!1}get requiresVideoPlayer(){return this.device!==`Microphone`}_net;_requestOpen=!1;_currentStream=null;_currentMode=xo.Idle;awake(){typeof this.device==`number`&&(this.device=bo[this.device]),Q&&console.log(`Screensharing`,this.name,this),Kn.registerWaitForAllowAudio(()=>{this._videoPlayer&&this._currentStream&&this._currentMode===xo.Receiving&&(this._videoPlayer.playInBackground=!0,this._videoPlayer.setVideo(this._currentStream))}),this._net=new er(this)}onEnable(){this._net?.enable(),this._net?.addEventListener(dr.StreamReceived,this.onReceiveStream),this._net?.addEventListener(dr.StreamEnded,this.onCallEnded),this.context.connection.beginListen(P.JoinedRoom,this.onJoinedRoom),this.autoConnect&&zt(1e3).then(()=>(this.enabled&&this.autoConnect&&!this.isReceiving&&!this.isSending&&this.context.connection.isInRoom&&this.share(),0))}onDisable(){this._net?.removeEventListener(dr.StreamReceived,this.onReceiveStream),this._net?.removeEventListener(dr.StreamEnded,this.onCallEnded),this.context.connection.stopListen(P.JoinedRoom,this.onJoinedRoom),this._net?.disable(),this.close()}onJoinedRoom=async()=>{await zt(1e3),this.autoConnect&&!this.isSending&&!this.isReceiving&&this.context.connection.isInRoom&&this.share()};_ensureVideoPlayer(){let e=new Z;e.aspectMode=fo.AdjustWidth,F.addComponent(this.gameObject,e),this._videoPlayer=e}_activeShareRequest=null;async share(e){return this._activeShareRequest?this._activeShareRequest:(this._activeShareRequest=this.internalShare(e),this._activeShareRequest.then(()=>this._activeShareRequest=null))}async internalShare(e){if(this.context.connection.isInRoom===!1){console.warn(`Can not start screensharing: requires network connection`),w()&&Ht(`Can not start screensharing: requires network connection. Add a SyncedRoom component or join a room first.`);return}if(e?.device&&(this.device=e.device),!this.videoPlayer&&this.requiresVideoPlayer&&(this._videoPlayer||=F.getComponent(this.gameObject,Z)??void 0,this.videoPlayer||this._ensureVideoPlayer(),!this.videoPlayer)){console.warn(`Can not share video without a videoPlayer assigned`);return}this._requestOpen=!0;try{let t=e?.constraints??{echoCancellation:!0,autoGainControl:!1},n={video:t,audio:t},r=n.video;switch(r!==void 0&&typeof r!=`boolean`&&(r.width||={max:1920},r.height||={max:1920},r.aspectRatio||={ideal:1.7777777778},r.frameRate||={ideal:24},r.facingMode||={ideal:`user`}),this.device){case`Camera`:this.tryShareUserCamera(n,e);break;case`Screen`:{if(!navigator.mediaDevices.getDisplayMedia){console.error(`No getDisplayMedia support`);return}let e=await navigator.mediaDevices.getDisplayMedia(n);this._requestOpen?this.setStream(e,xo.Sending):nr(e)}break;case`Canvas`:let t=this.context.renderer.domElement.captureStream(0);this.setStream(t,xo.Sending);break;case`Microphone`:{if(!navigator.mediaDevices.getUserMedia){console.error(`No getDisplayMedia support`);return}n.video=!1;let e=await navigator.mediaDevices.getUserMedia(n);this._requestOpen?this.setStream(e,xo.Sending):nr(e)}break;default:console.error(`Can not start screen sharing: Unknown device type`,this.device)}}catch(e){if(e.name===`NotAllowedError`){console.log(`Selection cancelled`),this._requestOpen=!1;return}console.error(`Error opening video`,e)}}close(){this._requestOpen=!1,this._currentStream&&=(Q&&console.warn(`Close current stream / disposing resources, stream was active?`,this._currentStream.active),this._net?.stopSendingStream(this._currentStream),nr(this._currentStream),this._currentMode=xo.Idle,null)}setStream(e,t){if(e===this._currentStream||(this.close(),!e))return;this._currentStream=e,this._requestOpen=!0,this._currentMode=t;let n=this.device!==`Microphone`,r=t===xo.Sending;n?(this._videoPlayer||this._ensureVideoPlayer(),this._videoPlayer?this._videoPlayer.setVideo(e):console.error(`No video player assigned for video stream`)):(this._audioSource||(this._audioSource=new Kn,this._audioSource.spatialBlend=0,this._audioSource.volume=1,this.gameObject.addComponent(this._audioSource)),r||(Q&&console.log(`PLAY`,e.getAudioTracks()),this._audioSource.volume=1,this._audioSource?.play(e))),r&&this._net?.startSendingStream(e),r&&(this._videoPlayer&&(this._videoPlayer.muted=!0),this._audioSource?.stop());for(let t of e.getTracks())t.addEventListener(`ended`,()=>{Q&&console.log(`Track ended`,t),this.close()}),Q&&t.kind===`video`&&console.log(r?`Video →`:`Video ←`,t.getSettings())}onReceiveStream=e=>{e.stream?.active===!0&&this.setStream(e.stream,xo.Receiving)};onCallEnded=e=>{Q&&console.log(`CALL ENDED`,this.isReceiving,this?.screenspace),this.isReceiving&&(this.screenspace=!1)};async tryShareUserCamera(e,t){let n=(await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`videoinput`);Q&&console.log(`Request camera. These are your kind:videoinput devices: -`,n);let r=!1;for(let i of n)try{if(!this._requestOpen){Q&&console.log(`Camera selection cancelled`);break}if(i.kind!==`videoinput`){Q&&console.log(`Skipping non-video device`,i);continue}let n=i.deviceId;if(t?.deviceId!=null||t?.deviceFilter!=null){if(t?.deviceId!==void 0&&n!==t.deviceId){Q&&console.log(`Skipping device due to options.deviceId: `+i.label+`; `+i.deviceId);continue}if(t?.deviceFilter&&t.deviceFilter(i)===!1){Q&&console.log(`Skipping device due to options.deviceFilter: `+i.label+`; `+i.deviceId);continue}}else if(this.deviceFilter)if(this.deviceFilter(i)===!1){Q&&console.log(`Skipping device due to ScreenShare.deviceFilter: `+i.label+`; `+i.deviceId);continue}else Q&&console.log(`Selected device by filter`,i);else if(this.deviceName){let e=i.label.toLowerCase(),t=this.deviceName.toLowerCase(),n=e.includes(t),r=i.deviceId===this.deviceName;if(!n&&!r){Q&&console.log(`Skipping device due to ScreenShare.deviceName: `+i.label+`; `+i.deviceId);continue}else Q&&console.log(`Selected device by name`,i)}e.video!==!1&&((e.video===void 0||typeof e.video==`boolean`)&&(e.video={}),e.video.deviceId=n),r=!0;let a=await navigator.mediaDevices.getUserMedia(e).catch(e=>(console.error(`Failed to get user media`,e),null));if(a===null)continue;this._requestOpen?(this.setStream(a,xo.Sending),Q&&console.log(`Selected camera`,i)):(nr(a),Q&&console.log(`Camera selection cancelled`));break}catch(e){if(e.message===`Failed to allocate videosource`||e.message===`Could not start video source`){Ht(`Failed to start video: Try another camera (Code `+e.code+`)`),console.warn(e);continue}else console.error(`Failed to get user media`,e.message,e.code,e)}!r&&w()&&(Ht(`No camera found for sharing. Please connect a camera (see console for more information)`),console.warn(`No camera found for sharing. Please connect a camera`,n,this.deviceName,`Using deviceFilter? `+this.deviceFilter!=null,`Using options? `+t!=null,`Using deviceName? `+this.deviceName!=null,`Using options.deviceId? `+t?.deviceId!=null,`Using options.deviceFilter? `+t?.deviceFilter!=null))}};yo([A()],So.prototype,`allowStartOnClick`,void 0),yo([A()],So.prototype,`autoConnect`,void 0),yo([A(Z)],So.prototype,`videoPlayer`,null),yo([A()],So.prototype,`device`,void 0),yo([A()],So.prototype,`deviceName`,void 0);var Co=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},wo=N(`debugseethrough`),To=0,Eo=class extends R{referencePoint=null;fadeDuration=.05;minAlpha=0;useAlphaHash=!0;set needsUpdate(e){this._needsUpdate=e}get needsUpdate(){return this._needsUpdate}overrideAlpha=-1;autoUpdate=!0;_referencePointVector=new n;_referencePointDir=new n;_distance=0;_renderer=null;_needsUpdate=!0;_id=To++;onEnable(){this._needsUpdate=!0,this._renderer=null}onDisable(){}update(){if(this._needsUpdate?(this._needsUpdate=!1,this._renderer=this.gameObject.getComponentsInChildren(Vn),this.updateDirection()):this.autoUpdate&&(this.context.time.frame+this._id)%20==0&&this.updateDirection(),!this.autoUpdate||!this.referencePoint)return;let e=this._referencePointDir.dot(this.context.mainCamera.worldForward)>.2;if(wo&&this.referencePoint){let t=this.gameObject.worldPosition;V.DrawArrow(z(t),t.sub(this._referencePointDir),e?16711680:65280),V.DrawWireSphere(this.referencePoint.worldPosition,.05,255)}e?this.updateAlpha(this.minAlpha,this.fadeDuration):this.updateAlpha(1,this.fadeDuration)}updateDirection(){this.referencePoint??=this.context.scene,this._referencePointVector.copy(this.gameObject.worldPosition.sub(this.referencePoint.worldPosition)),this._distance=this._referencePointVector.length(),this._referencePointDir.copy(this._referencePointVector).multiply(z(1,.5,1)).normalize()}updateAlpha(e,t=this.fadeDuration){this.overrideAlpha!==void 0&&this.overrideAlpha!==-1&&(e=this.overrideAlpha),this._renderer?.forEach(n=>{e<.9?n.gameObject.raycastAllowed=!1:n.gameObject.raycastAllowed=!0;let r=n.sharedMaterials;if(!r)return;let i=Sn.get(n.gameObject),a=i.getOverride(`opacity`)?.value??r[0].opacity??1,o=O.lerp(a,e,t<=0?1:this.context.time.deltaTime/t);o>=.99?o=1:o<=.01&&(o=0),i.setOverride(`alphaHash`,this.useAlphaHash),i.setOverride(`opacity`,o),i.setOverride(`transparent`,o>=.99999?!1:!this.useAlphaHash)})}};Co([A(y)],Eo.prototype,`referencePoint`,void 0),Co([A()],Eo.prototype,`fadeDuration`,void 0),Co([A()],Eo.prototype,`minAlpha`,void 0),Co([A()],Eo.prototype,`useAlphaHash`,void 0),Co([A()],Eo.prototype,`overrideAlpha`,void 0),Co([A()],Eo.prototype,`autoUpdate`,void 0);var Do=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Oo;(function(e){e[e.ShadowMask=0]=`ShadowMask`,e[e.Additive=1]=`Additive`,e[e.Occluder=2]=`Occluder`})(Oo||={});var ko=class extends R{mode=Oo.ShadowMask;shadowColor=new vt(0,0,0,1);targetMesh;start(){if(this.gameObject instanceof v)this.gameObject instanceof v&&this.gameObject.material&&(this.gameObject.material=this.gameObject.material.clone(),this.targetMesh=this.gameObject,this.targetMesh.receiveShadow=!0);else{let e=Ze.createPrimitive(et.Quad,{name:`ShadowCatcher`,material:new fe({color:10066329,roughness:1,metalness:0,transparent:!0})});e.receiveShadow=!0,e.geometry.rotateX(-Math.PI/2),this.gameObject.add(e),this.targetMesh=e}if(!this.targetMesh){console.warn(`ShadowCatcher: no mesh to apply shadow catching to. Groups are currently not supported.`);return}switch(this.targetMesh.layers.set(2),this.mode){case Oo.ShadowMask:this.applyShadowMaterial();break;case Oo.Additive:this.applyLightBlendMaterial();break;case Oo.Occluder:this.applyOccluderMaterial();break}}applyLightBlendMaterial(){if(!this.targetMesh)return;let e=this.targetMesh.material;e.blending=2,this.applyMaterialOptions(e),e.onBeforeCompile=e=>{e.fragmentShader=e.fragmentShader.replace(`vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;`,`vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; - // diffuse-only lighting with overdrive to somewhat compensate - // for the loss of indirect lighting and to make it more visible. - vec3 direct = (reflectedLight.directDiffuse + reflectedLight.directSpecular) * 6.6; - float max = max(direct.r, max(direct.g, direct.b)); - - // early out - we're simply returning direct lighting and some alpha based on it so it can - // be blended onto the scene. - gl_FragColor = vec4(direct, max); - return; - `)},e.userData.isLightBlendMaterial=!0}applyShadowMaterial(){if(this.targetMesh)if(this.targetMesh.material.type!==`ShadowMaterial`){let e=new ge;e.color=this.shadowColor,e.opacity=this.shadowColor.alpha,this.applyMaterialOptions(e),this.targetMesh.material=e,e.userData.isShadowCatcherMaterial=!0}else{let e=this.targetMesh.material;e.color=this.shadowColor,e.opacity=this.shadowColor.alpha,this.applyMaterialOptions(e),e.userData.isShadowCatcherMaterial=!0}}applyOccluderMaterial(){if(this.targetMesh){let e=this.targetMesh.material;if(!e){let t=new m;this.targetMesh.material=t,e=t}e.depthWrite=!0,e.stencilWrite=!0,e.colorWrite=!1,this.gameObject.renderOrder=-100}}applyMaterialOptions(e){e&&(e.depthWrite=!1,e.stencilWrite=!1)}};Do([A()],ko.prototype,`mode`,void 0),Do([A(vt)],ko.prototype,`shadowColor`,void 0);var Ao=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},jo=class e extends R{target=null;followFactor=.1;rotateFactor=.1;positionAxes=je.All;flipForward=!1;static _invertForward=new x().setFromAxisAngle(new n(0,1,0),Math.PI);_firstUpdate=!0;onBeforeRender(){this.updateNow(!1)}updateNow(t){if(!(!this.target||this.target===this.gameObject)){if(this.followFactor>0){let e=M(this.target),n=this._firstUpdate||t?1:O.clamp01(this.context.time.deltaTime*this.followFactor),r=this.worldPosition;this.positionAxes&je.X&&(r.x=O.lerp(r.x,e.x,n)),this.positionAxes&je.Y&&(r.y=O.lerp(r.y,e.y,n)),this.positionAxes&je.Z&&(r.z=O.lerp(r.z,e.z,n)),this.worldPosition=r}if(this.rotateFactor>0){let n=Xt(this.target);this.flipForward&&n.premultiply(e._invertForward);let r=this._firstUpdate||t?1:O.clamp01(this.context.time.deltaTime*this.rotateFactor);this.worldQuaternion=this.worldQuaternion.slerp(n,r)}this._firstUpdate=!1}}};Ao([A(y)],jo.prototype,`target`,void 0),Ao([A()],jo.prototype,`followFactor`,void 0),Ao([A()],jo.prototype,`rotateFactor`,void 0),Ao([A()],jo.prototype,`positionAxes`,void 0);var Mo=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},No=N(`debugspatialtrigger`),Po=new r,Fo=new r;function Io(e,t){return Po.mask=e,Fo.mask=t,Po.test(Fo)}var Lo=class extends R{triggerMask=0;onEnter;onStay;onExit;start(){No&&console.log(this.name,this.triggerMask,this)}update(){this.currentIntersected.length=0;for(let e of Ro.triggers)Io(e.triggerMask,this.triggerMask)&&e.test(this.gameObject)&&this.currentIntersected.push(e);for(let e=this.lastIntersected.length-1;e>=0;e--){let t=this.lastIntersected[e];this.currentIntersected.indexOf(t)<0&&(this.onExitTrigger(t),this.lastIntersected.splice(e,1))}for(let e of this.currentIntersected)this.lastIntersected.indexOf(e)<0&&this.onEnterTrigger(e),this.onStayTrigger(e);this.lastIntersected.length=0,this.lastIntersected.push(...this.currentIntersected)}currentIntersected=[];lastIntersected=[];onEnterTrigger(e){No&&console.log(`ENTER TRIGGER`,this.name,e.name,this,e),e.raiseOnEnterEvent(this),this.onEnter?.invoke()}onExitTrigger(e){No&&console.log(`EXIT TRIGGER`,this.name,e.name),e.raiseOnExitEvent(this),this.onExit?.invoke()}onStayTrigger(e){e.raiseOnStayEvent(this),this.onStay?.invoke()}};Mo([A()],Lo.prototype,`triggerMask`,void 0),Mo([A(k)],Lo.prototype,`onEnter`,void 0),Mo([A(k)],Lo.prototype,`onStay`,void 0),Mo([A(k)],Lo.prototype,`onExit`,void 0);var Ro=class e extends R{static triggers=[];triggerMask;boxHelper;start(){No&&console.log(this.name,this.triggerMask,this)}onEnable(){e.triggers.push(this),this.boxHelper||(this.boxHelper=F.addComponent(this.gameObject,Di),this.boxHelper?.showHelper(null,No))}onDisable(){e.triggers.splice(e.triggers.indexOf(this),1)}test(e){return this.boxHelper?this.boxHelper.isInBox(e)??!1:!1}raiseOnEnterEvent(e){F.foreachComponent(this.gameObject,t=>{t!==e&&t instanceof Lo&&t.onEnterTrigger(this)},!1)}raiseOnStayEvent(e){F.foreachComponent(this.gameObject,t=>{t!==e&&t instanceof Lo&&t.onStayTrigger(this)},!1)}raiseOnExitEvent(e){F.foreachComponent(this.gameObject,t=>{t!==e&&t instanceof Lo&&t.onExitTrigger(this)},!1)}};Mo([A()],Ro.prototype,`triggerMask`,void 0);var zo=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Bo;(function(e){e[e.FirstPerson=0]=`FirstPerson`,e[e.ThirdPerson=1]=`ThirdPerson`})(Bo||={});var Vo=N(`debugspectator`),Ho=class extends R{cam=null;useKeys=!0;_mode=Bo.FirstPerson;get mode(){return this._mode}set mode(e){this._mode=e}get isSpectating(){return this._handler?.currentTarget!==void 0}isSpectatingUser(e){return this.target?.userId===e}isFollowedBy(e){return this.followers?.includes(e)}get followers(){return this._networking.followers}stopSpectating(){if(this.context.isInXR){this.followSelf();return}this.target=void 0}get localId(){return this.context.connection.connectionId??`local`}set target(e){if(this._handler){let t=this._handler.currentTarget?.userId,n=this.context.players.getPlayerView(this.localId);e===void 0||this.context.isInXR===!1&&n?.currentObject===e.currentObject?this._handler.currentTarget!==void 0&&(this._handler.disable(),F.setActive(this.gameObject,!1),this.orbit&&(this.orbit.enabled=!0),this._networking.onSpectatedObjectChanged(e,t)):this._handler.currentTarget!==e&&(this._handler.set(e),F.setActive(this.gameObject,!0),this.orbit&&(this.orbit.enabled=!1),this._networking.onSpectatedObjectChanged(e,t))}}get target(){return this._handler?.currentTarget}requestAllFollowMe(){this._networking.onRequestFollowMe()}get isSpectatingSelf(){return this.isSpectating&&this.target?.currentObject===this.context.players.getPlayerView(this.localId)?.currentObject}orbit=null;_handler;eventSub_WebXRRequestStartEvent=null;eventSub_WebXRStartEvent=null;eventSub_WebXREndEvent=null;_debug;_networking;awake(){if(this._debug=new Go(this.context,this),this._networking=new Jo(this.context,this),this._networking.awake(),F.setActive(this.gameObject,!1),this.cam=F.getComponent(this.gameObject,Ne),!this.cam){console.warn(`SpectatorCamera: Spectator camera needs camera component on the same object.`,this);return}!this._handler&&this.cam&&(this._handler=new Uo(this.context,this.cam,this)),this.orbit=F.getComponent(this.context.mainCamera,Le)}onDestroy(){this.stopSpectating(),this._handler?.destroy(),this._networking?.destroy()}isSupportedPlatform(){let e=window.navigator.userAgent,t=/Windows NT/.test(e)&&/Edg/.test(e)&&!/Win64/.test(e);return yt.isDesktop()&&!yt.isMobileDevice()&&!t}onBeforeXR(e){this.isSupportedPlatform()&&F.setActive(this.gameObject,!0)}onEnterXR(e){this.isSupportedPlatform()&&(Vo&&console.log(this.context.mainCamera),this.context.mainCamera&&this.followSelf())}onLeaveXR(e){this.context.removeCamera(this.cam),F.setActive(this.gameObject,!1),this._handler?.set(void 0),this._handler?.disable(),this.isSpectatingSelf&&this.stopSpectating(),this.orbit&&(this.orbit.enabled=!0)}followSelf(){this.target=this.context.players.getPlayerView(this.context.connection.connectionId),this.target||=(this.context.players.setPlayerView(this.localId,this.context.mainCamera,qt.Headset),this.context.players.getPlayerView(this.localId)),Vo&&console.log(`Follow self`,this.target)}onAfterRender(){if(!this.cam)return;let e=this.context.renderer,n=e.xr.enabled;if(!e.xr.isPresenting&&!this._handler?.currentTarget)return;this._handler?.update(this._mode);let r=e.getRenderTarget(),i=null,a=e.state;if(!r||r.isXRRenderTarget===!0){if(!e.state.bindFramebuffer||!a.bindXRFramebuffer)return;i=e._framebuffer,a.bindXRFramebuffer(null)}this.setAvatarFlagsBeforeRender();let o=this.context.mainCameraComponent;if(o){let t=o.backgroundColor;t&&e.setClearColor(t,t.alpha),this.cam.backgroundColor=t,this.cam.clearFlags=o.clearFlags,this.cam.nearClipPlane=o.nearClipPlane,this.cam.farClipPlane=o.farClipPlane}else e.setClearColor(new t(1,1,1));e.setRenderTarget(null),e.xr.enabled=!1;let s=this.cam?.threeCamera;this.context.updateAspect(s);let c=e.xr.isPresenting;e.xr.isPresenting=!1,e.setSize(this.context.domWidth,this.context.domHeight),e.render(this.context.scene,s),e.xr.isPresenting=c,e.xr.enabled=n,r?e.setRenderTarget(r):a.bindXRFramebuffer&&a.bindXRFramebuffer(i),this.resetAvatarFlags()}setAvatarFlagsBeforeRender(){let e=this._mode===Bo.FirstPerson;for(let t of Yn.instances)if(t.avatar&&`isLocalAvatar`in t.avatar&&`flags`in t.avatar){let n=Rn.All;this.isSpectatingSelf&&(n=e&&t.avatar.isLocalAvatar?Rn.FirstPerson:Rn.ThirdPerson);let r=t.avatar.flags;if(!r)continue;for(let e of r)e.UpdateVisible(n)}}resetAvatarFlags(){for(let e of Yn.instances)if(e.avatar&&`flags`in e.avatar){let t=e.avatar.flags;if(!t)continue;for(let n of t)`isLocalAvatar`in e.avatar&&e.avatar?.isLocalAvatar?n.UpdateVisible(Rn.FirstPerson):n.UpdateVisible(Rn.ThirdPerson)}}};zo([A()],Ho.prototype,`useKeys`,void 0);var Uo=class{context;cam;spectator;follow;target;view;currentObject;get currentTarget(){return this.view}constructor(e,t,n){this.context=e,this.cam=t,this.spectator=n}set(e){let t=e?.currentObject;if(!t){this.spectator.stopSpectating();return}t!==this.currentObject&&(this.currentObject=t,this.view=e,this.follow||=F.addComponent(this.cam.gameObject,jo),this.target||=new y,t.add(this.target),this.follow.enabled=!0,this.follow.target=this.target,Vo&&console.log(`FOLLOW`,t),this.context.isInXR?this.context.removeCamera(this.cam):this.context.setCurrentCamera(this.cam))}disable(){Vo&&console.log(`STOP FOLLOW`,this.currentObject),this.view=void 0,this.currentObject=void 0,this.context.removeCamera(this.cam),this.follow&&(this.follow.enabled=!1)}destroy(){this.target?.removeFromParent(),this.follow&&F.destroy(this.follow)}update(e){if(this.currentTarget?.isConnected===!1||this.currentTarget?.removed===!0){Vo&&console.log(`Target disconnected or timeout`,this.currentTarget),this.spectator.stopSpectating();return}this.currentTarget&&this.currentTarget?.currentObject!==this.currentObject&&(Vo&&console.log(`Target changed`,this.currentObject,`to`,this.currentTarget.currentObject),this.set(this.currentTarget));let t=this.context.mainCamera;if(t){let e=this.cam.threeCamera;(e.near!==t.near||e.far!==t.far)&&(e.near=t.near,e.far=t.far,e.updateProjectionMatrix())}let n=this.follow?.target;if(!(!n||!this.follow)){switch(e){case Bo.FirstPerson:this.view?.viewDevice===qt.Browser?(this.follow.followFactor=50,this.follow.rotateFactor=50):(this.follow.followFactor=5,this.follow.rotateFactor=5),n.position.set(0,0,0);break;case Bo.ThirdPerson:this.follow.followFactor=3,this.follow.rotateFactor=2,n.position.set(0,.5,1.5);break}this.follow.flipForward=!1,this.view?.viewDevice===qt.Browser?n.quaternion.identity():n.quaternion.copy(Wo)}}},Wo=new x().setFromAxisAngle(new n(0,1,0),Math.PI),Go=class{context;spectator;constructor(e,t){this.context=e,this.spectator=t,console.log(`[Spectator Camera] Click other avatars or cameras to follow them. Press ESC to exit spectator mode.`),this.context.domElement.addEventListener(`keydown`,e=>{this.spectator.useKeys&&e.key===`Escape`&&this.spectator.stopSpectating()});let n=0;this.context.input.addEventListener(Ie.PointerDown,e=>{n=this.context.time.time}),this.context.input.addEventListener(Ie.PointerUp,e=>{let t=this.context.time.time-n;t>1?this.spectator.stopSpectating():this.context.input.getPointerClicked(0)&&t<.3&&this.trySelectObject()})}trySelectObject(){let e=new Gt;e.setMask(16777215);let t=this.context.physics.raycast(e);if(Vo&&console.log(...t),t?.length)for(let e of t){if(e.distance<.2)continue;let t=e.object,n=qn.getFor(t),r=n?.owner;if(r||=F.getComponentInParent(t,Yn)?.connectionId,r){let e=this.context.players.getPlayerView(r);this.spectator.target=e,Vo&&console.log(`spectate`,r,n);break}}}},Ko=class{guid;dontSave=!0;targetUserId;stoppedFollowing;constructor(e,t,n){this.guid=e,this.targetUserId=t,this.stoppedFollowing=n}},qo=class{guid;userId;constructor(e,t){this.guid=e.guid,this.userId=t}},Jo=class{followers=[];context;spectator;_followerEventMethod;_requestFollowMethod;_joinedRoomMethod;constructor(e,t){this.context=e,this.spectator=t,this._followerEventMethod=this.onFollowerEvent.bind(this),this._requestFollowMethod=this.onRequestFollowEvent.bind(this),this._joinedRoomMethod=this.onUserJoinedRoom.bind(this)}awake(){this.context.connection.beginListen(`spectator-follower-changed`,this._followerEventMethod),this.context.connection.beginListen(`spectator-request-follow`,this._requestFollowMethod),this.context.connection.beginListen(P.JoinedRoom,this._joinedRoomMethod),this.context.domElement.addEventListener(`keydown`,e=>{this.spectator.useKeys&&(e.key===`f`?this.onRequestFollowMe():e.key===`Escape`&&this.onRequestFollowMe(!0))})}destroy(){this.context.connection.stopListen(`spectator-follower-changed`,this._followerEventMethod),this.context.connection.stopListen(`spectator-request-follow`,this._requestFollowMethod),this.context.connection.stopListen(P.JoinedRoom,this._joinedRoomMethod)}onSpectatedObjectChanged(e,t){if(Vo&&console.log(this.context.connection.connectionId,`onSpectatedObjectChanged`,e,t),this.context.connection.connectionId){let n=e?.userId===void 0,r=n?t:e?.userId,i=new Ko(this.context.connection.connectionId,r,n);this.context.connection.send(`spectator-follower-changed`,i)}}onRequestFollowMe(e=!1){if(Vo&&console.log(`Request follow`,this.context.connection.connectionId),this.context.connection.connectionId){this.spectator.stopSpectating();let t=e?void 0:this.context.connection.connectionId,n=new qo(this.spectator,t);this.context.connection.send(`spectator-request-follow`,n)}}onUserJoinedRoom(){N(`followme`)&&this.onRequestFollowMe()}onFollowerEvent(e){let t=e.targetUserId,n=e.guid;if(Vo&&console.log(e),t===this.context.connection.connectionId)if(e.stoppedFollowing){let e=this.followers.indexOf(n);e!==-1&&(this.followers.splice(e,1),this.removeDisconnectedFollowers(),console.log(n,`unfollows you`,this.followers.length))}else this.followers.includes(n)||(this.followers.push(n),this.removeDisconnectedFollowers(),console.log(n,`follows you`,this.followers.length))}removeDisconnectedFollowers(){for(let e=this.followers.length-1;e>=0;e--){let t=this.followers[e];this.context.connection.userIsInRoom(t)===!1&&this.followers.splice(e,1)}}_lastRequestFollowUser;onRequestFollowEvent(e){if(this._lastRequestFollowUser=e,e.userId===this.context.connection.connectionId)this.spectator.stopSpectating();else if(e.userId===void 0)this.spectator.stopSpectating();else{let t=this.context.players.getPlayerView(e.userId);if(t)this.spectator.target=t;else return Vo&&console.warn(`Could not find view`,e.userId),this.enforceFollow(),!1}return!0}_enforceFollowInterval;enforceFollow(){this._enforceFollowInterval||=setInterval(()=>{this._lastRequestFollowUser===void 0||this._lastRequestFollowUser.userId&&this.spectator.isFollowedBy(this._lastRequestFollowUser.userId)?(clearInterval(this._enforceFollowInterval),this._enforceFollowInterval=void 0):(Vo&&console.log(`REQUEST FOLLOW AGAIN`,this._lastRequestFollowUser.userId),this.onRequestFollowEvent(this._lastRequestFollowUser))},1e3)}},Yo=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Xo=N(`debugsplines`),Zo=class{position=new n;rotation=new x;tangentIn=new n;tangentOut=new n};Yo([j(n)],Zo.prototype,`position`,void 0),Yo([j(x)],Zo.prototype,`rotation`,void 0),Yo([j(n)],Zo.prototype,`tangentIn`,void 0),Yo([j(n)],Zo.prototype,`tangentOut`,void 0);var Qo=class extends R{addKnot(e){if(e instanceof Zo)this.spline.push(e),this._isDirty=!0;else{let t=new Zo;t.position.copy(e.position),this.spline.push(t),this._isDirty=!0}return this}removeKnot(e){if(typeof e==`number`)this.spline.splice(e,1),this._isDirty=!0;else{let t=this.spline.indexOf(e);t!==-1&&(this.spline.splice(t,1),this._isDirty=!0)}return this}getPointAt(e,t){if(!this.curve)return new n;let r=this.curve.getPointAt(O.clamp01(e),t),i=this.gameObject.matrixWorld??void 0;return i&&r.applyMatrix4(i),r}markDirty(){this._isDirty=!0}getTangentAt(e,t){if(!this.curve)return t??new n;let r=this.gameObject.worldQuaternion;return this.curve.getTangentAt(O.clamp01(e),t).applyQuaternion(r)}set closed(e){this._closed=e,this._isDirty=!0}get closed(){return this._closed}_closed=!1;spline=[];set debug(e){e&&!this._builtCurve&&this.buildCurve(),this._debugLine&&(this._debugLine.visible=e)}get curve(){return this._curve}get isDirty(){return this._isDirty}_isDirty=!1;_curve=null;_builtCurve=!1;_debugLine=null;awake(){Xo&&(console.log(`[Spline] ${this.name}`,this),this.buildCurve())}update(){this._isDirty&&this.buildCurve(!0),this._debugLine&&this._debugLine.parent!==this.gameObject&&this.gameObject.add(this._debugLine)}buildCurve(e=!1){if(!(this._builtCurve&&!e)){if(this._builtCurve=!0,!this.spline){console.error(`[Spline] Can not build curve, no spline data`,this.name);return}this._isDirty=!1,this._curve=$o(this.spline,this.closed),this.buildDebugCurve()}}buildDebugCurve(){if(Xo&&this.spline&&this._curve){this._debugLine?.removeFromParent(),this._debugLine=null;let e=new u({color:6684927}),t=this.spline.length*10,n=this._curve.getPoints(t);this._debugLine=new me(new h().setFromPoints(n),e),this.gameObject?.add(this._debugLine)}}};Yo([j()],Qo.prototype,`closed`,null),Yo([j(Zo)],Qo.prototype,`spline`,void 0);function $o(e,t){let r=e.map(e=>new n(-e.position.x,e.position.y,e.position.z));r.length===1&&r.push(r[0]);let a=e.reduce((e,t)=>e+Math.abs(t.tangentOut.x)+Math.abs(t.tangentOut.y)+Math.abs(t.tangentOut.z),0)/e.length;return new i(r,t,`catmullrom`,O.clamp(O.remap(a,0,.3,0,.5),0,1))}var es=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ts=class extends R{spline=null;object=void 0;useLookAt=!0;lookAt=null;clamp=!1;get position01(){return this._position01}set position01(e){this._position01=e,this._needsUpdate=!0}reset(){this._position01=0}autoRun=!0;duration=10;pullStrength=1;_position01=0;_needsUpdate=!1;start(){this.object===void 0&&(this.object=this.gameObject),this.updateFromPosition()}onEnable(){window.addEventListener(`pointerdown`,this.onUserInput,{passive:!0}),this.context.domElement.addEventListener(`wheel`,this.onUserInput,{passive:!0})}onDisable(){window.removeEventListener(`pointerdown`,this.onUserInput),this.context.domElement.removeEventListener(`wheel`,this.onUserInput)}onUserInput=()=>{this.object?.contains(this.context.mainCamera)&&(this._needsUpdate=!1,this._performedUpdates+=999)};update(){this.autoRun&&(this._needsUpdate=!0,this._position01+=this.context.time.deltaTime/this.duration),this._needsUpdate&&(this._needsUpdate=!1,this.updateFromPosition())}updateFromPosition(){if(!this.spline||!this.spline.curve||!this.object)return;this.clamp?this._position01=O.clamp01(this._position01):this._position01%=1;let e=this._position01>=1?1:this._position01%1,t=this.spline.getPointAt(e);if(this.pullStrength>=1)this.object.worldPosition=t;else if(this._position01!==this._lastPosition01&&(this._performedUpdates=0),this._requiredUpdates=Math.round(100/this.pullStrength),this._performedUpdates=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},is=`SCAM`;Zt(is,ns.getRootAsSyncedCameraModel);var as=new tn,os=class{userId;guid;constructor(e,t){this.guid=t,this.userId=e}send(e,t){if(e){as.clear();let n=as.createString(this.guid),r=as.createString(this.userId);ns.startSyncedCameraModel(as),ns.addGuid(as,n),ns.addUserId(as,r);let i=M(e),a=rn(e);ns.addPos(as,ct.createVec3(as,i.x,i.y,i.z)),ns.addRot(as,ct.createVec3(as,a.x,a.y,a.z));let o=ns.endSyncedCameraModel(as);as.finish(o,is),t.sendBinary(as.asUint8Array())}}},ss=class e extends R{static instances=[];getCameraObject(e){let t=this.userToCamMap[e];return t?this.remoteCams[t].obj:null}cameraPrefab=null;_lastWorldPosition;_lastWorldQuaternion;_model=null;_needsUpdate=!0;_lastUpdateTime=0;remoteCams={};userToCamMap={};_camTimeoutInSeconds=10;_receiveCallback=null;async awake(){this._lastWorldPosition=this.worldPosition.clone(),this._lastWorldQuaternion=this.worldQuaternion.clone(),this.cameraPrefab&&(`uri`in this.cameraPrefab&&(this.cameraPrefab=await this.cameraPrefab.instantiate(this.gameObject)),this.cameraPrefab&&`isObject3D`in this.cameraPrefab&&(this.cameraPrefab.visible=!1))}onEnable(){this._receiveCallback=this.context.connection.beginListenBinary(is,this.onReceivedRemoteCameraInfoBin.bind(this))}onDisable(){this.context.connection.stopListenBinary(is,this._receiveCallback)}update(){for(let t in this.remoteCams){let n=this.remoteCams[t],r=this.context.time.realtimeSinceStartup-n.lastUpdate;if(!n||r>this._camTimeoutInSeconds){w()&&console.log(`Remote cam timeout`,t),n?.obj&&F.destroy(n.obj),delete this.remoteCams[t],n&&delete this.userToCamMap[n.userId],e.instances.push(n),this.context.players.removePlayerView(n.userId,qt.Browser);continue}}if(this.context.isInXR)return;let t=this.context.mainCamera;if(t===null){this.enabled=!1;return}if(!this.context.connection.isConnected||this.context.connection.connectionId===null)return;this._model===null&&(this._model=new os(this.context.connection.connectionId,this.context.connection.connectionId+`_camera`));let n=M(t),r=Xt(t);(n.distanceTo(this._lastWorldPosition)>.001||r.angleTo(this._lastWorldQuaternion)>.01)&&(this._needsUpdate=!0),this._lastWorldPosition.copy(n),this._lastWorldQuaternion.copy(r),!((!this._needsUpdate||this.context.time.frameCount%2!=0)&&!(this.context.time.realtimeSinceStartup-this._lastUpdateTime>this._camTimeoutInSeconds*.5))&&(this._lastUpdateTime=this.context.time.realtimeSinceStartup,this._needsUpdate=!1,this._model.send(t,this.context.connection),this.context.isInXR||this.context.players.setPlayerView(this.context.connection.connectionId,t,qt.Browser))}onReceivedRemoteCameraInfoBin(t){let n=t.guid();if(!n)return;let r=t.userId();if(!r||!this.context.connection.userIsInRoom(r)||!this.cameraPrefab)return;let i=this.remoteCams[n];if(!i)if(`isObject3D`in this.cameraPrefab){let t=new nt;t.context=this.context;let a=F.instantiate(this.cameraPrefab,t);i=this.remoteCams[n]={obj:a,lastUpdate:this.context.time.realtimeSinceStartup,userId:r},i.obj.visible=!0,this.gameObject.add(a),this.userToCamMap[r]=n,e.instances.push(i);let o=F.getOrAddComponent(a,Yn);o.connectionId=r,o.avatar=a}else return;let a=i.obj;this.context.players.setPlayerView(r,a,qt.Browser),i.lastUpdate=this.context.time.realtimeSinceStartup,qe.markDirty(a);let o=t.pos();o&&kt(a,o.x(),o.y(),o.z());let s=t.rot();s&&Be(a,s.x(),s.y(),s.z())}};rs([A([y,Me])],ss.prototype,`cameraPrefab`,void 0);var cs=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ls=`view`,us=N(`debugsyncedroom`),ds=class extends R{roomName=``;urlParameterName=`room`;joinRandomRoom;requireRoomParameter=!1;autoRejoin=!0;createJoinButton=!0;createViewOnlyButton=!1;get currentRoomName(){return N(ls)||N(this.urlParameterName)}_lastJoinedRoom;set roomPrefix(e){this._roomPrefix=e}get roomPrefix(){return this._roomPrefix}_roomPrefix=``;awake(){this.joinRandomRoom===void 0&&this.roomName?.length<=0&&(this.joinRandomRoom=!0),us&&console.log(`SyncedRoom roomName:${this.roomName}, urlParamName:${this.urlParameterName}, joinRandomRoom:${this.joinRandomRoom}`)}onEnable(){let e=N(ls);if(e&&typeof e==`string`&&e.length>0){console.log(`Join as viewer`),this.context.connection.joinRoom(e,!0);return}if(this.tryJoinRoom(),this.createJoinButton){let e=this.createRoomButton();this.context.menu.appendChild(e)}this.createViewOnlyButton&&this.onEnableViewOnlyButton()}onDisable(){this._roomButton?.remove(),this.onDisableViewOnlyButton(),this.roomName&&this.roomName.length>0&&this.context.connection.leaveRoom(this.roomName)}onDestroy(){this.destroyRoomButton()}tryJoinRandomRoom(){this.setRandomRoomUrlParameter(),this.tryJoinRoom()}tryJoinRoom(e=0){e===void 0&&(e=0);let t=!1;if(this.urlParameterName?.length>0){let n=N(this.urlParameterName);if(n&&(typeof n==`string`||typeof n==`number`))t=!0,this.roomName=Xe(n.toString());else if(this.joinRandomRoom&&(console.debug(`No room name found in url, generating random one`),this.setRandomRoomUrlParameter(),e<1))return this.tryJoinRoom(e+1)}else this.joinRandomRoom&&(this.roomName===null||this.roomName===void 0||this.roomName.length<=0)&&(this.roomName=this.generateRoomName());return this.requireRoomParameter&&!t?((us||w())&&console.warn(`[SyncedRoom] Missing required room parameter "`+this.urlParameterName+`" in url - will not connect. -To allow joining a room without a query parameter you can set "requireRoomParameter" to false.`),!1):(this.context.connection.isConnected||this.context.connection.connect(),this._lastJoinedRoom=this.roomName,this._roomPrefix&&(this.roomName=this._roomPrefix+this.roomName),this.roomName.length<=0?(console.warn(`[SyncedRoom] Room name is not set so we can not join a networked room. -Please choose one of the following options to fix this: -A) Set a room name in the SyncedRoom component -B) Set a room name in the URL parameter "?`+this.urlParameterName+`=my_room" -C) Set "joinRandomRoom" to true`),!1):(us&&console.log(`Join `+this.roomName),this._userWantsToBeInARoom=!0,this.context.connection.joinRoom(this.roomName),!0))}_lastPingTime=0;_lastRoomTime=-1;_userWantsToBeInARoom=!1;update(){this.context.connection.isConnected&&(this.context.time.time-this._lastPingTime>3&&(this._lastPingTime=this.context.time.time,this.context.connection.sendPing()),this.context.connection.isInRoom&&(this._lastRoomTime=this.context.time.time)),this._lastRoomTime>0&&this.context.time.time-this._lastRoomTime>.3&&(this._lastRoomTime=-1,this.autoRejoin?this._userWantsToBeInARoom&&(console.log(`Disconnected from networking backend - attempt reconnecting now`),this.tryJoinRoom()):w()&&console.warn(`You are not connected to a room anymore (possibly because the tab was inactive for too long and the server kicked you?)`))}getViewOnlyUrl(){if(this.context.connection.isConnected&&this.context.connection.currentRoomViewId){let e=window.location.search,t=new URLSearchParams(e);return t.has(this.urlParameterName)&&t.delete(this.urlParameterName),t.set(ls,this.context.connection.currentRoomViewId),window.location.origin+window.location.pathname+`?`+t.toString()}return null}setRandomRoomUrlParameter(){let e=Yt(),t=this.generateRoomName();N(this.urlParameterName)?e.set(this.urlParameterName,t):e.append(this.urlParameterName,t),Ge(t,e)}generateRoomName(){let e=``;for(let t=0;t<6;t++)e+=Math.floor(Math.random()*10).toFixed(0);return e}_roomButton;_roomButtonIconJoin;_roomButtonIconLeave;createRoomButton(){if(this._roomButton)return this._roomButton;let e=document.createElement(`button`);return this._roomButton=e,e.classList.add(`create-room-button`),e.setAttribute(`priority`,`90`),e.onclick=()=>{if(this.context.connection.isInRoom)this.urlParameterName&&Ve(this.urlParameterName,null),this.context.connection.leaveRoom(),this._userWantsToBeInARoom=!1;else{if(this.urlParameterName){let e=N(this.urlParameterName);(!e||e===!0)&&(this._lastJoinedRoom?Ve(this.urlParameterName,this._lastJoinedRoom):this.setRandomRoomUrlParameter())}this.tryJoinRoom()}},this._roomButtonIconJoin=ke(`group`),this._roomButtonIconLeave=ke(`group_off`),this.updateRoomButtonState(),this.context.connection.beginListen(P.JoinedRoom,this.updateRoomButtonState),this.context.connection.beginListen(P.LeftRoom,this.updateRoomButtonState),e}updateRoomButtonState=()=>{this._roomButton&&(this.context.connection.isInRoom?(this._roomButton.title=`Leave the networked room`,this._roomButton.textContent=`Leave Room`,this._roomButtonIconJoin?.remove(),this._roomButton.prepend(this._roomButtonIconLeave)):(this._roomButton.title=`Create or join a networked room`,this._roomButton.textContent=`Join Room`,this._roomButtonIconLeave?.remove(),this._roomButton.prepend(this._roomButtonIconJoin)))};destroyRoomButton(){this.context.connection.stopListen(P.JoinedRoom,this.updateRoomButtonState),this.context.connection.stopListen(P.LeftRoom,this.updateRoomButtonState)}_viewOnlyButton;onEnableViewOnlyButton(){this.context.connection.isConnected?this.onCreateViewOnlyButton():(this.context.connection.stopListen(P.JoinedRoom,this.onCreateViewOnlyButton),this.context.connection.beginListen(P.JoinedRoom,this.onCreateViewOnlyButton))}onDisableViewOnlyButton(){this.context.connection.stopListen(P.JoinedRoom,this.onCreateViewOnlyButton),this._viewOnlyButton?.remove()}onCreateViewOnlyButton=()=>{if(!this._viewOnlyButton){let e=document.createElement(`button`);this._viewOnlyButton=e,e.classList.add(`view-only-button`),e.setAttribute(`priority`,`90`),e.onclick=()=>{let e=this.getViewOnlyUrl();e?.length?navigator.canShare({url:e})?navigator.share({url:e})?.catch(e=>{console.warn(e)}):(navigator.clipboard.writeText(e),It(`View only URL copied to clipboard`)):Ht(`Could not create view only URL`)},e.title=`Copy the view only URL: A page accessed by the view only URL can not be modified by visiting users.`,e.textContent=`Share View URL`,e.prepend(ke(`visibility`))}this.context.menu.appendChild(this._viewOnlyButton)}};cs([A()],ds.prototype,`roomName`,void 0),cs([A()],ds.prototype,`urlParameterName`,void 0),cs([A()],ds.prototype,`joinRandomRoom`,void 0),cs([A()],ds.prototype,`requireRoomParameter`,void 0),cs([A()],ds.prototype,`autoRejoin`,void 0),cs([A()],ds.prototype,`createJoinButton`,void 0),cs([A()],ds.prototype,`createViewOnlyButton`,void 0),cs([A()],ds.prototype,`roomPrefix`,null);function fs(){let e=N(`testwindowcount`)||0;e&&e>0&&ps(e)}function ps(e){if(N(`testwindow`))return null;let t=new URL(window.location.href);$e(t.searchParams,cn,1),$e(t.searchParams,`testwindow`,1);let n=t.toString(),r=[];window.onbeforeunload=()=>{for(let e of r)e.close()};let i=.05,a=0,o=0;for(let t=0;t=window.innerWidth&&(o+=1,a=0);let e=a*(128*(1+i))+window.screenLeft,s=o*(128*(1+i))+window.screenTop+90+60*o;a+=1;let c=window.open(n,`test window `+t,`popup=yes width=128 height=128 top=${s} left=${e}`);if(!c){console.warn(`Failed to open window`);continue}r.push(c),c.onload=()=>{c.onbeforeunload=()=>{for(let e=0;e{});else{this.models=[];for(let e=0;e=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},vs=class extends R{isGizmo=!1;translationSnap=1;rotationSnapAngle=15;scaleSnap=.25;get control(){return this._control}_control;orbit;onEnable(){if(!(this.isGizmo&&!Lt)&&this.context.mainCamera&&(this._control||(this._control=new sn(this.context.mainCamera,this.context.renderer.domElement),this._control.enabled=!0,this._control.getRaycaster().layers.set(2),this._control.size=1,(`_root`in this._control?this._control._root:this._control).traverse(e=>{let t=e;if(t.layers.set(2),t){let e=t.material;e&&(e.opacity=.3)}}),this.orbit=F.getComponentInParent(this.context.mainCamera,Le)??void 0),this._control)){let e=this._control.getHelper();this.context.scene.add(e),this._control.attach(this.gameObject),this._control?.addEventListener(`dragging-changed`,this.onControlChangedEvent),window.addEventListener(`keydown`,this.windowKeyDownListener),window.addEventListener(`keyup`,this.windowKeyUpListener)}}onDisable(){this._control?.getHelper()?.removeFromParent(),this._control?.removeEventListener(`dragging-changed`,this.onControlChangedEvent),window.removeEventListener(`keydown`,this.windowKeyDownListener),window.removeEventListener(`keyup`,this.windowKeyUpListener)}enableSnapping(){this._control&&(this._control.setTranslationSnap(this.translationSnap),this._control.setRotationSnap(o.degToRad(this.rotationSnapAngle)),this._control.setScaleSnap(this.scaleSnap))}disableSnapping(){this._control&&(this._control.setTranslationSnap(null),this._control.setRotationSnap(null),this._control.setScaleSnap(null))}onControlChangedEvent=e=>{let t=this.orbit;if(t&&(t.enabled=!e.value),e.value){let e=this.gameObject.getComponentInParent(rt);e&&(e.fastMode=!0,e.requestOwnership())}else{let e=this.gameObject.getComponentInParent(rt);e&&(e.fastMode=!1)}};windowKeyDownListener=e=>{if(this.enabled&&this._control)switch(e.keyCode){case 81:this._control.setSpace(this._control.space===`local`?`world`:`local`);break;case 16:this.enableSnapping();break;case 87:this._control.setMode(`translate`);break;case 69:this._control.setMode(`rotate`);break;case 82:this._control.setMode(`scale`);break;case 187:case 107:this._control.setSize(this._control.size+.1);break;case 189:case 109:this._control.setSize(Math.max(this._control.size-.1,.1));break;case 88:this._control.showX=!this._control.showX;break;case 89:this._control.showY=!this._control.showY;break;case 90:this._control.showZ=!this._control.showZ;break;case 32:this._control.enabled=!this._control.enabled;break}};windowKeyUpListener=e=>{if(this.enabled)switch(e.keyCode){case 16:this.disableSnapping();break}}};_s([A()],vs.prototype,`isGizmo`,void 0),_s([A()],vs.prototype,`translationSnap`,void 0),_s([A()],vs.prototype,`rotationSnapAngle`,void 0),_s([A()],vs.prototype,`scaleSnap`,void 0);var ys=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},bs=class e extends R{target;invertForward=!1;keepUpDirection=!0;copyTargetRotation=!1;static flipYQuat=new x().setFromAxisAngle(new n(0,1,0),Math.PI);onBeforeRender(){let t=this.target;if(t||(t=this.context.mainCamera,w()&&!this.__did_warn&&(this.__did_warn=!0,console.debug(`[LookAt] No target set on ${this.name}, using main camera as target.`))),!t)return;let n=this.copyTargetRotation;(this.context.isInVR||this.context.isInPassThrough)&&(n=!1),Qt(this.gameObject,t,this.keepUpDirection,n),this.invertForward&&this.gameObject.quaternion.multiply(e.flipYQuat)}createBehaviours(e,t,n){if(t.uuid===this.gameObject.uuid){let n=t;if(this.keepUpDirection){let e=Xn.createEmptyParent(t);n=e;let r=this.invertForward?-1:1;e.setMatrix(e.getMatrix().multiply(new _().makeRotationZ(Math.PI/2*r))),t.setMatrix(t.getMatrix().multiply(new _().makeRotationZ(-Math.PI/2*r)))}let r=new sr(`lookat `+this.name,Bn.sceneStartTrigger(),fr.lookAtCameraAction(n,void 0,this.invertForward?lr.back:lr.forward,this.keepUpDirection?lr.up:lr.zero));e.addBehavior(r)}}};ys([A(y)],bs.prototype,`target`,void 0),ys([A()],bs.prototype,`invertForward`,void 0),ys([A()],bs.prototype,`keepUpDirection`,void 0),ys([A()],bs.prototype,`copyTargetRotation`,void 0);var xs=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ss;(function(e){e[e.NewTab=0]=`NewTab`,e[e.SameTab=1]=`SameTab`,e[e.NewWindow=2]=`NewWindow`})(Ss||={});var Cs=class extends R{url;mode=Ss.NewTab;clickable=!0;async open(){if(!this.url){console.warn(`OpenURL: URL is not set, can't open.`,this);return}this._validateUrl();let e=this.url;switch(!e.startsWith(`mailto:`)&&e.includes(`@`)&&(e=`mailto:`+e),this.mode){case Ss.NewTab:yt.isSafari(),globalThis.open(e,`_blank`);break;case Ss.SameTab:yt.isSafari()&&yt.isiOS()?globalThis.open(e,`_top`):globalThis.open(e,`_self`);break;case Ss.NewWindow:yt.isSafari()?globalThis.open(e,`_top`):globalThis.open(e,`_new`);break}}start(){this.gameObject.getComponentInParent(C)||this.gameObject.addComponent(C)}onPointerEnter(e){!e.used&&this.clickable&&this.context.input.setCursor(`pointer`)}onPointerExit(){this.clickable&&this.context.input.unsetCursor(`pointer`)}onPointerClick(e){this.clickable&&!e.used&&this.url?.length&&this.open()}_validateUrl(){this.url&&this.url.startsWith(`www.`)&&(w()&&console.warn(`URL is not valid, adding https:// to the start of the URL`,this.url),this.url=`https://`+this.url)}};xs([A()],Cs.prototype,`url`,void 0),xs([A()],Cs.prototype,`mode`,void 0),xs([A()],Cs.prototype,`clickable`,void 0),$t(e=>{if(t(e.domElement.getAttribute(`clickthrough`))){let n=e.scene.addComponent(ws);Dt(e.domElement,`clickthrough`,()=>{n.enabled=t(e.domElement.getAttribute(`clickthrough`))})}function t(e){return e!==null&&e!==`0`&&e!==`false`}});var ws=class extends R{_previousPointerEvents=`all`;onEnable(){this.context.input.addEventListener(`pointerdown`,this.onPointerEvent),this.context.input.addEventListener(`pointermove`,this.onPointerEvent,{queue:100}),window.addEventListener(`touchstart`,this.onTouchStart,{passive:!0}),window.addEventListener(`touchend`,this.onTouchEnd,{passive:!0}),this._previousPointerEvents=this.context.domElement.style.pointerEvents}onDisable(){this.context.input.removeEventListener(`pointerdown`,this.onPointerEvent),this.context.input.removeEventListener(`pointermove`,this.onPointerEvent),window.removeEventListener(`touchstart`,this.onTouchStart),window.removeEventListener(`touchend`,this.onTouchEnd),this.context.domElement.style.pointerEvents=this._previousPointerEvents}onPointerEnter(){}onPointerEvent=e=>{e.pointerId>0||(e.intersections?.length<=0?this.context.domElement.style.pointerEvents=`none`:this.context.domElement.style.pointerEvents=`all`)};_touchDidHitAnything=!1;onTouchStart=e=>{let t=e.touches[0];if(!t)return;let n=t.clientX/window.innerWidth*2-1,r=-(t.clientY/window.innerHeight)*2+1;this.context.physics.raycast({screenPoint:new b(n,r)}).length>0&&(this._touchDidHitAnything=!0)};onTouchEnd=e=>{let t=this._touchDidHitAnything;this._touchDidHitAnything=!1,setTimeout(()=>{t&&(this.context.domElement.style.pointerEvents=`all`)},100)}},Ts=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Es=N(`debugcursor`),Ds=class extends R{static NAME=`CursorFollow`;damping=0;useFullPage=!0;keepDistance=!0;snapToSurface=!1;_distance=-1;updateDistance(e=!1){!e&&this.keepDistance&&this._distance!==-1||(this._distance=this.gameObject.worldPosition.distanceTo(this.context.mainCamera.worldPosition))}awake(){this._distance=-1}onEnable(){this._distance=-1,window.addEventListener(`pointermove`,this._onPointerMove)}onDisable(){window.removeEventListener(`pointermove`,this._onPointerMove)}_ndc_x=0;_ndc_y=0;_onPointerMove=e=>{if(!this.useFullPage)return;let t=e.clientX,n=e.clientY,r=this.context.domX,i=this.context.domY,a=this.context.domWidth,o=this.context.domHeight;this._ndc_x=(t-r)/a*2-1,this._ndc_y=-(n-i)/o*2+1};lateUpdate(){this.updateDistance();let e=this.useFullPage?this._ndc_x:this.context.input.mousePositionRC.x,t=this.useFullPage?this._ndc_y:this.context.input.mousePositionRC.y,n=this.context.mainCamera,r=n.worldPosition,i=z(e,t,1).unproject(n);i.sub(r).normalize();let a=z(i).multiplyScalar(this._distance).add(r),o=a;if(this.damping>0){let e=this.gameObject.worldPosition;e.lerp(a,this.context.time.deltaTime/this.damping),this.gameObject.worldPosition=e,o=e}else this.gameObject.worldPosition=a;if(this.snapToSurface){Os.origin=o,Os.direction=i.multiplyScalar(-1);let e=this.context.physics.raycastFromRay(Os);if(e?.length){let t=e[0];this.damping>0?this.gameObject.worldPosition=o.lerp(t.point,this.context.time.deltaTime/this.damping):this.gameObject.worldPosition=t.point,Es&&V.DrawLine(t.point,t.normal.add(t.point),65280)}}}};Ts([A()],Ds.prototype,`damping`,void 0),Ts([A()],Ds.prototype,`useFullPage`,void 0),Ts([A()],Ds.prototype,`keepDistance`,void 0),Ts([A()],Ds.prototype,`snapToSurface`,void 0);var Os=new a,ks=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},As=class extends R{type=`linear`;duration=.1;scaleFactor=1.1;hovered=null;idle=null;animation=null;start(){this.idle||=at.emptyClip(),(!this.hovered||!(this.hovered instanceof de))&&(this.hovered=at.createScaleClip({type:`linear`,duration:this.duration||.1,scale:this.gameObject.scale,scaleFactor:this.scaleFactor||1.1})),this.animation??=this.gameObject.addComponent(Qn),this.animation.playAutomatically=!1,this.playIdle()}onEnable(){this.animation&&(this.animation.enabled=!0),this.playIdle()}onDisable(){this.animation&&(this.animation.enabled=!1),this.playIdle()}onPointerEnter(){this.playHover()}onPointerExit(){this.playIdle()}playIdle(){this.idle&&this.animation?.play(this.idle,{exclusive:!0,fadeDuration:.1,loop:!0})}playHover(){this.hovered&&this.animation?.play(this.hovered,{exclusive:!0,fadeDuration:.1,loop:!1,clampWhenFinished:!0})}};ks([A()],As.prototype,`type`,void 0),ks([A()],As.prototype,`duration`,void 0),ks([A()],As.prototype,`scaleFactor`,void 0),ks([A(de)],As.prototype,`hovered`,void 0),ks([A(de)],As.prototype,`idle`,void 0),As=ks([I],As);var js=Object.defineProperty,Ms=(e,t,n)=>t in e?js(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,$=(e,t,n)=>(Ms(e,typeof t==`symbol`?t:t+``,n),n);(function(){class e{}class t extends e{constructor(e){super(),$(this,`value`),this.value=e}}class n extends e{constructor(e){super(),$(this,`value`),this.value=e}}class r extends e{constructor(e){super(),$(this,`value`),this.value=e}}class i extends e{constructor(e,t=`unrestricted`){super(),$(this,`type`),$(this,`value`),this.value=e,this.type=t}}class a extends e{constructor(e){super(),$(this,`value`),this.value=e}}class o extends e{}class s extends e{constructor(e){super(),$(this,`value`),this.value=e}}class c extends e{}class l extends e{constructor(e){super(),$(this,`value`),this.value=e}}class u extends e{constructor(e,t=`integer`){super(),$(this,`value`),$(this,`type`),this.value=e,this.type=t}}class d extends e{constructor(e){super(),$(this,`value`),this.value=e}}class f extends e{constructor(e,t,n){super(),$(this,`value`),$(this,`type`),$(this,`unit`),this.value=e,this.type=t,this.unit=n}}class p extends e{}class m extends e{}class ee extends e{}class h extends e{}class g extends e{}class te extends e{}class _ extends e{}class ne extends e{}class re extends e{}class v extends e{}class ie extends e{}class ae extends e{}class oe{constructor(e){$(this,`input`),$(this,`index`,0),this.input=e}consume(){let e=this.input.codePointAt(this.index);return e!==void 0&&(this.index+=String.fromCodePoint(e).length),e}reconsume(e){e!==void 0&&(this.index-=String.fromCodePoint(e).length)}peek(){let e=[],t=this.index;for(let n=0;n<3&&t=48&&e<=57}function le(e){return ce(e)||e>=65&&e<=70||e>=97&&e<=102}function ue(e){return function(e){return function(e){return e>=65&&e<=90}(e)||function(e){return e>=97&&e<=122}(e)}(e)||function(e){return e>=128}(e)||e===95}function de(e){return ue(e)||ce(e)||e===45}function fe(e){return e>=0&&e<=8||e===11||e>=14&&e<=31||e===127}function pe(e,t){return e===92&&!se(t)}function me(e,t,n){return e===45?ue(t)||t===45||pe(t,n):!!ue(e)||e===92&&pe(e,t)}function b(e,t,n){return e===43||e===45?ce(t)||t===46&&ce(n):ce(e===46?t:e)}function he(e){let t=e.consume();if(le(t)){let n=[t];for(;le(...e.peek())&&n.length<5;)n.push(e.consume());y(...e.peek())&&e.consume();let r=parseInt(String.fromCodePoint(...n),16);return r===0||r>1114111?65533:r}return t===void 0?65533:t}function ge(e,t){let n=new a(``);for(;;){let r=e.consume();if(r===t||r===void 0)return n;if(r===10)return e.reconsume(r),new o;if(r===92){let t=e.peek()[0];t===void 0||(se(t)?e.consume():n.value+=String.fromCodePoint(he(e)))}else n.value+=String.fromCodePoint(r)}}function _e(e){let t=``;for(;;){let n=e.consume();if(de(n))t+=String.fromCodePoint(n);else{if(!pe(...e.peek()))return e.reconsume(n),t;t+=String.fromCodePoint(he(e))}}}function ve(e){let t=function(e){let t=`integer`,n=``;for([43,45].includes(e.peek()[0])&&(n+=String.fromCodePoint(e.consume()));ce(...e.peek());)n+=String.fromCodePoint(e.consume());if(e.peek()[0]===46&&ce(e.peek()[1]))for(n+=String.fromCodePoint(e.consume(),e.consume()),t=`number`;ce(...e.peek());)n+=String.fromCodePoint(e.consume());return[69,101].includes(e.peek()[0])&&([45,43].includes(e.peek()[1])&&ce(e.peek()[2])?(n+=String.fromCodePoint(e.consume(),e.consume(),e.consume()),t=`number`):ce(e.peek()[1])&&(n+=String.fromCodePoint(e.consume(),e.consume()),t=`number`)),{value:parseFloat(n),type:t}}(e);return me(...e.peek())?new f(t.value,t.type,_e(e)):e.peek()[0]===37?(e.consume(),new d(t.value)):new u(t.value,t.type)}function ye(e){for(;;){let t=e.consume();if(t===41||t===void 0)return;pe(...e.peek())&&he(e)}}function be(e){let r=_e(e);if(r.match(/url/i)&&e.peek()[0]===40){for(e.consume();y(e.peek()[0])&&y(e.peek()[1]);)e.consume();return[34,39].includes(e.peek()[0])||y(e.peek()[0])&&[34,39].includes(e.peek()[1])?new n(r):function(e){let t=new s(``);for(;y(...e.peek());)e.consume();for(;;){let n=e.consume();if(n===41||n===void 0)return t;if(y(n)){for(;y(...e.peek());)e.consume();return e.peek()[0]===41||e.peek()[0]===void 0?(e.consume(),t):(ye(e),new c)}if([34,39,40].includes(n)||fe(n))return ye(e),new c;if(n===92){if(!pe(...e.peek()))return ye(e),new c;t.value+=he(e)}else t.value+=String.fromCodePoint(n)}}(e)}return e.peek()[0]===40?(e.consume(),new n(r)):new t(r)}function xe(e){let t=e.consume(),n=e.peek();if(y(t)){for(;y(...e.peek());)e.consume();return new p}if(t===34)return ge(e,t);if(t===35){if(de(n[0])||pe(...n)){let t=new i;return me(...n)&&(t.type=`id`),t.value=_e(e),t}return new l(String.fromCodePoint(t))}return t===39?ge(e,t):t===40?new re:t===41?new v:t===43?b(...n)?(e.reconsume(t),ve(e)):new l(String.fromCodePoint(t)):t===44?new te:t===45?b(...e.peek())?(e.reconsume(t),ve(e)):e.peek()[0]===45&&e.peek()[1]===62?(e.consume(),e.consume(),new ee):me(...e.peek())?(e.reconsume(t),be(e)):new l(String.fromCodePoint(t)):t===46?b(...e.peek())?(e.reconsume(t),ve(e)):new l(String.fromCodePoint(t)):t===58?new h:t===59?new g:t===60?n[0]===33&&n[1]===45&&n[2]===45?(e.consume(),e.consume(),e.consume(),new m):new l(String.fromCodePoint(t)):t===64?me(...n)?new r(_e(e)):new l(String.fromCodePoint(t)):t===91?new _:t===92?pe(...n)?(e.reconsume(t),be(e)):new l(String.fromCodePoint(t)):t===93?new ne:t===123?new ie:t===125?new ae:ce(t)?(e.reconsume(t),ve(e)):ue(t)?(e.reconsume(t),be(e)):t===void 0?void 0:new l(String.fromCodePoint(t))}let Se=new Set([`px`,`deg`,`s`,`hz`,`dppx`,`number`,`fr`]);function Ce(e){return Se.has(e.toLowerCase())}function we(e,t){if([`x`,`y`].includes(e))return e;if(!t)throw Error(`To determine the normalized axis the computedStyle of the source is required.`);let n=t.writingMode==`horizontal-tb`;if(e===`block`)e=n?`y`:`x`;else{if(e!==`inline`)throw TypeError(`Invalid axis “${e}”`);e=n?`x`:`y`}return e}function x(e){let t=[],n=0;function r(){let t=0,r=n;for(;n(e.has(n[t])?e.get(n[t]).push(n):e.set(n[t],[n]),e)),new Map)}function Ee(e,t){let n=[],r=[];for(let i of e)t(i)?n.push(i):r.push(i);return[n,r]}function De(e,t={}){function n(e){return Array.from(e).map((e=>De(e,t)))}if(e instanceof CSSUnitValue){if(e.unit===`percent`&&t.percentageReference){let n=e.value/100*t.percentageReference.value,r=t.percentageReference.unit;return new CSSUnitValue(n,r)}let n=e.toSum();if(n&&n.values.length===1&&(e=n.values[0]),e instanceof CSSUnitValue&&e.unit===`em`&&t.fontSize&&(e=new CSSUnitValue(e.value*t.fontSize.value,t.fontSize.unit)),e instanceof CSSKeywordValue){if(e.value===`e`)return new CSSUnitValue(Math.E,`number`);if(e.value===`pi`)return new CSSUnitValue(Math.PI,`number`)}return e}if(!e.operator)return e;switch(e.operator){case`sum`:e=new CSSMathSum(...n(e.values));break;case`product`:e=new CSSMathProduct(...n(e.values));break;case`negate`:e=new CSSMathNegate(De(e.value,t));break;case`clamp`:e=new CSSMathClamp(De(e.lower,t),De(e.value,t),De(e.upper,t));break;case`invert`:e=new CSSMathInvert(De(e.value,t));break;case`min`:e=new CSSMathMin(...n(e.values));break;case`max`:e=new CSSMathMax(...n(e.values))}if(e instanceof CSSMathMin||e instanceof CSSMathMax){let t=Array.from(e.values);if(t.every((e=>e instanceof CSSUnitValue&&e.unit!==`percent`&&Ce(e.unit)&&e.unit===t[0].unit))){let n=Math[e.operator].apply(Math,t.map((({value:e})=>e)));return new CSSUnitValue(n,t[0].unit)}}if(e instanceof CSSMathMin||e instanceof CSSMathMax){let t=Array.from(e.values),[n,r]=Ee(t,(e=>e instanceof CSSUnitValue&&e.unit!==`percent`)),i=Array.from(Te(n,`unit`).values());if(i.some((e=>e.length>0))){let t=i.map((t=>{let n=Math[e.operator].apply(Math,t.map((({value:e})=>e)));return new CSSUnitValue(n,t[0].unit)}));e=e instanceof CSSMathMin?new CSSMathMin(...t,...r):new CSSMathMax(...t,...r)}return t.length===1?t[0]:e}if(e instanceof CSSMathNegate)return e.value instanceof CSSUnitValue?new CSSUnitValue(0-e.value.value,e.value.unit):e.value instanceof CSSMathNegate?e.value.value:e;if(e instanceof CSSMathInvert)return e.value instanceof CSSMathInvert?e.value.value:e;if(e instanceof CSSMathSum){let t=function(e){let t=e.filter((e=>e instanceof CSSUnitValue));return[...e.filter((e=>!(e instanceof CSSUnitValue))),...Array.from(Te(t,`unit`).entries()).map((([e,t])=>{let n=t.reduce(((e,{value:t})=>e+t),0);return new CSSUnitValue(n,e)}))]},n=[];for(let t of e.values)t instanceof CSSMathSum?n.push(...t.values):n.push(t);return n=t(n),n.length===1?n[0]:new CSSMathSum(...n)}if(e instanceof CSSMathProduct){let t=[];for(let n of e.values)n instanceof CSSMathProduct?t.push(...n.values):t.push(n);let[n,r]=Ee(t,(e=>e instanceof CSSUnitValue&&e.unit===`number`));if(n.length>1){let e=n.reduce(((e,{value:t})=>e*t),1);t=[new CSSUnitValue(e,`number`),...r]}if(t.length===2){let e,n;for(let r of t)r instanceof CSSUnitValue&&r.unit===`number`?e=r:r instanceof CSSMathSum&&[...r.values].every((e=>e instanceof CSSUnitValue))&&(n=r);if(e&&n)return new CSSMathSum(...[...n.values].map((t=>new CSSUnitValue(t.value*e.value,t.unit))))}if(t.every((e=>e instanceof CSSUnitValue&&Ce(e.unit)||e instanceof CSSMathInvert&&e.value instanceof CSSUnitValue&&Ce(e.value.unit)))){let e=new CSSMathProduct(...t).toSum();if(e&&e.values.length===1)return e.values[0]}return new CSSMathProduct(...t)}return e}let S=[`percent`,`length`,`angle`,`time`,`frequency`,`resolution`,`flex`],C={fontRelativeLengths:{units:new Set([`em`,`rem`,`ex`,`rex`,`cap`,`rcap`,`ch`,`rch`,`ic`,`ric`,`lh`,`rlh`])},viewportRelativeLengths:{units:new Set([`vw`,`lvw`,`svw`,`dvw`,`vh`,`lvh`,`svh`,`dvh`,`vi`,`lvi`,`svi`,`dvi`,`vb`,`lvb`,`svb`,`dvb`,`vmin`,`lvmin`,`svmin`,`dvmin`,`vmax`,`lvmax`,`svmax`,`dvmax`])},absoluteLengths:{units:new Set([`cm`,`mm`,`Q`,`in`,`pt`,`pc`,`px`]),compatible:!0,canonicalUnit:`px`,ratios:{cm:96/2.54,mm:96/2.54/10,Q:96/2.54/40,in:96,pc:16,pt:96/72,px:1}},angle:{units:new Set([`deg`,`grad`,`rad`,`turn`]),compatible:!0,canonicalUnit:`deg`,ratios:{deg:1,grad:.9,rad:180/Math.PI,turn:360}},time:{units:new Set([`s`,`ms`]),compatible:!0,canonicalUnit:`s`,ratios:{s:1,ms:.001}},frequency:{units:new Set([`hz`,`khz`]),compatible:!0,canonicalUnit:`hz`,ratios:{hz:1,khz:1e3}},resolution:{units:new Set([`dpi`,`dpcm`,`dppx`]),compatible:!0,canonicalUnit:`dppx`,ratios:{dpi:1/96,dpcm:2.54/96,dppx:1}}},Oe=new Map;for(let e of Object.values(C))if(e.compatible)for(let t of e.units)Oe.set(t,e);function ke(e){return Oe.get(e)}function Ae(e,t){let n={...e};for(let e of Object.keys(t))n[e]?n[e]+=t[e]:n[e]=t[e];return n}function je(e){return e===`number`?{}:e===`percent`?{percent:1}:C.absoluteLengths.units.has(e)||C.fontRelativeLengths.units.has(e)||C.viewportRelativeLengths.units.has(e)?{length:1}:C.angle.units.has(e)?{angle:1}:C.time.units.has(e)?{time:1}:C.frequency.units.has(e)?{frequency:1}:C.resolution.units.has(e)?{resolution:1}:e===`fr`?{flex:1}:null}function Me(e){if(e instanceof CSSUnitValue){let{unit:t,value:n}=e,r=ke(e.unit);return r&&t!==r.canonicalUnit&&(n*=r.ratios[t],t=r.canonicalUnit),t===`number`?[[n,{}]]:[[n,{[t]:1}]]}if(e instanceof CSSMathInvert){if(!(e.value instanceof CSSUnitValue))throw Error(`Not implemented`);let t=Me(e.value);if(t===null||t.length>1)return null;let n=t[0],r={};for(let[e,t]of Object.entries(n[1]))r[e]=-1*t;return t[0]=[1/n[0],r],t}if(e instanceof CSSMathProduct){let t=[[1,{}]];for(let n of e.values){let e=Me(n),r=[];if(e===null)return null;for(let n of t)for(let t of e)r.push([n[0]*t[0],Ae(n[1],t[1])]);t=r}return t}throw Error(`Not implemented`)}function Ne(e,t){if(je(t)===null)throw SyntaxError(`The string did not match the expected pattern.`);let n=Me(e);if(!n)throw TypeError();if(n.length>1)throw TypeError(`Sum has more than one item`);let r=function(e,t){let n=e.unit,r=e.value,i=ke(n),a=ke(t);return!a||i!==a?null:new CSSUnitValue(r*a.ratios[n]/a.ratios[t],t)}(Pe(n[0]),t);if(r===null)throw TypeError();return r}function Pe(e){let[t,n]=e,r=Object.entries(n);if(r.length>1)return null;if(r.length===0)return new CSSUnitValue(t,`number`);let i=r[0];return i[1]===1?new CSSUnitValue(t,i[0]):null}function Fe(e,...t){if(t&&t.length)throw Error(`Not implemented`);let n=Me(e).map((e=>Pe(e)));if(n.some((e=>e===null)))throw TypeError(`Type error`);return new CSSMathSum(...n)}function Ie(e,t){if(e.percentHint&&t.percentHint&&e.percentHint!==t.percentHint)return null;let n={...e,percentHint:e.percentHint??t.percentHint};for(let e of S)t[e]&&(n[e]??(n[e]=0),n[e]+=t[e]);return n}class Le{constructor(e,t){$(this,`name`),$(this,`values`),this.name=e,this.values=t}}class Re{constructor(e,t){$(this,`value`),$(this,`associatedToken`),this.value=e,this.associatedToken=t}}function ze(e){if(Array.isArray(e))return e;if(typeof e==`string`)return function(e){let t=new oe(e),n=[];for(;;){let e=xe(t);if(e===void 0)return n;n.push(e)}}(e);throw TypeError(`Invalid input type `+typeof e)}function Be(e){let t=e.shift();return t instanceof ie||t instanceof _||t instanceof re?function(e,t){let n;if(t instanceof ie)n=ae;else if(t instanceof re)n=v;else{if(!(t instanceof _))return;n=ne}let r=new Re([],t);for(;;){let t=e.shift();if(t instanceof n||t===void 0)return r;e.unshift(t),r.value.push(Be(e))}}(e,t):t instanceof n?function(e,t){let n=new Le(e.value,[]);for(;;){let e=t.shift();if(e instanceof v||e===void 0)return n;t.unshift(e),n.values.push(Be(t))}}(t,e):t}function Ve(e){if(e instanceof re||e instanceof v)return 6;if(e instanceof l)switch(e.value){case`*`:case`/`:return 4;case`+`:case`-`:return 2}}function He(e){return e[e.length-1]}function Ue(e,t,n){let r=[`+`,`-`].includes(e.value)?`ADDITION`:`MULTIPLICATION`,i=t.type===r?t.values:[t],a=n.type===r?n.values:[n];return e.value===`-`?a[0]={type:`NEGATE`,value:a[0]}:e.value===`/`&&(a[0]={type:`INVERT`,value:a[0]}),{type:r,values:[...i,...a]}}function We(e){if(e.type===`ADDITION`)return new CSSMathSum(...e.values.map((e=>We(e))));if(e.type===`MULTIPLICATION`)return new CSSMathProduct(...e.values.map((e=>We(e))));if(e.type===`NEGATE`)return new CSSMathNegate(We(e.value));if(e.type===`INVERT`)return new CSSMathInvert(We(e.value));if(e instanceof Re)return Ge(new Le(`calc`,e.value));if(e instanceof t){if(e.value===`e`)return new CSSUnitValue(Math.E,`number`);if(e.value===`pi`)return new CSSUnitValue(Math.PI,`number`);throw SyntaxError(`Invalid math expression`)}return Ke(e)}function Ge(e){if(e.name===`min`||e.name===`max`){let t=e.values.filter((e=>!(e instanceof p||e instanceof te))).map((e=>De(Ge(new Le(`calc`,e)))));return e.name===`min`?new CSSMathMin(...t):new CSSMathMax(...t)}if(e.name!==`calc`)return null;let n=We(function(e){let n=[],r=[];for(;e.length;){let i=e.shift();if(i instanceof u||i instanceof f||i instanceof d||i instanceof Le||i instanceof Re||i instanceof t)r.push(i);else if(i instanceof l&&[`*`,`/`,`+`,`-`].includes(i.value)){for(;n.length&&!(He(n)instanceof re)&&Ve(He(n))>Ve(i);){let e=n.pop(),t=r.pop(),i=r.pop();r.push(Ue(e,i,t))}n.push(i)}else if(i instanceof re)n.push(i);else if(i instanceof v){if(!n.length)return null;for(;!(He(n)instanceof re);){let e=n.pop(),t=r.pop(),i=r.pop();r.push(Ue(e,i,t))}if(!(He(n)instanceof re))return null;n.pop()}else if(!(i instanceof p))return null}for(;n.length;){if(He(n)instanceof re)return null;let e=n.pop(),t=r.pop(),i=r.pop();r.push(Ue(e,i,t))}return r[0]}([...e.values])),r;try{r=De(n)}catch{new CSSStyleSheet().insertRule(`error`,0)}return r instanceof CSSUnitValue?new CSSMathSum(r):r}function Ke(e){return e instanceof Le&&[`calc`,`min`,`max`,`clamp`].includes(e.name)?Ge(e):e instanceof u&&e.value===0&&!e.unit?new CSSUnitValue(0,`px`):e instanceof u?new CSSUnitValue(e.value,`number`):e instanceof d?new CSSUnitValue(e.value,`percent`):e instanceof f?new CSSUnitValue(e.value,e.unit):void 0}function qe(e){let t=function(e){let t=ze(e);for(;t[0]instanceof p;)t.shift();if(t[0]===void 0)return null;let n=Be(t);for(;t[0]instanceof p;)t.shift();return t[0]===void 0?n:null}(e);return t===null&&new CSSStyleSheet().insertRule(`error`,0),t instanceof u||t instanceof d||t instanceof f||t instanceof Le||new CSSStyleSheet().insertRule(`error`,0),t instanceof f&&je(t.unit)===null&&new CSSStyleSheet().insertRule(`error`,0),Ke(t)}(function(){let e=new WeakMap;function t(e){let t=[];for(let r=0;re.type())).reduce(Ie)}},CSSMathNegate:class extends r{constructor(e){super([arguments[0]],`negate`,`-`)}get value(){return e.get(this).values[0]}type(){return this.value.type()}},CSSMathInvert:class extends r{constructor(e){super([1,arguments[0]],`invert`,`calc`,` / `)}get value(){return e.get(this).values[1]}type(){return function(e){let t={};for(let n of S)t[n]=-1*e[n];return t}(e.get(this).values[1].type())}},CSSMathMax:class extends r{constructor(){super(arguments,`max`)}},CSSMathMin:class extends r{constructor(){super(arguments,`min`)}}};if(!window.CSS&&!Reflect.defineProperty(window,`CSS`,{value:{}}))throw Error(`Error installing CSSOM support`);window.CSSUnitValue||`number.percent.em.ex.px.cm.mm.in.pt.pc.Q.vw.vh.vmin.vmax.rems.ch.deg.rad.grad.turn.ms.s.Hz.kHz.dppx.dpi.dpcm.fr`.split(`.`).forEach((e=>{if(!Reflect.defineProperty(CSS,e,{value:t=>new CSSUnitValue(t,e)}))throw Error(`Error installing CSS.${e}`)}));for(let[e,t]of Object.entries(i))if(!(e in window)&&!Reflect.defineProperty(window,e,{value:t}))throw Error(`Error installing CSSOM support for ${e}`)})();let w=`block`,T=new WeakMap,E=new WeakMap,Je=[`entry`,`exit`,`cover`,`contain`,`entry-crossing`,`exit-crossing`];function Ye(e){return e===document.scrollingElement?document:e}function Xe(e){$e(e);let t=T.get(e).animations;if(t.length===0)return;let n=e.currentTime;for(let e=0;e{for(let e of t.timelineRefs){let t=e.deref();t&&Xe(t)}t.updateScheduled=!1})),!0)}function it(e,t){let n=T.get(e),r=n.source;if(r!=t){if(r){let t=E.get(r);if(t){t.timelineRefs.delete(e);let n=Array.from(t.timelineRefs).filter((e=>e.deref()===void 0));for(let e of n)t.timelineRefs.delete(e);t.timelineRefs.size===0&&(t.disconnect(),E.delete(r))}}if(n.source=t,t){let r=E.get(t);if(!r){r={timelineRefs:new Set,sourceMeasurements:tt(t)},E.set(t,r);let e=new ResizeObserver((e=>{for(let t of e)rt(n.source)}));e.observe(t);for(let n of t.children)e.observe(n);let i=new MutationObserver((e=>{for(let t of e)rt(t.target)}));i.observe(t,{attributes:!0,attributeFilter:[`style`,`class`]});let a=()=>{r.sourceMeasurements.scrollLeft=t.scrollLeft,r.sourceMeasurements.scrollTop=t.scrollTop;for(let e of r.timelineRefs){let t=e.deref();t&&Xe(t)}};Ye(t).addEventListener(`scroll`,a),r.disconnect=()=>{e.disconnect(),i.disconnect(),Ye(t).removeEventListener(`scroll`,a)}}r.timelineRefs.add(new WeakRef(e))}}}function at(e,t){let n=T.get(e).animations;for(let e=0;e{Xe(e)}))}class D{constructor(e){if(T.set(this,{source:null,axis:w,anonymousSource:e?e.anonymousSource:null,anonymousTarget:e?e.anonymousTarget:null,subject:null,inset:null,animations:[],subjectMeasurements:null}),it(this,e&&e.source!==void 0?e.source:document.scrollingElement),e&&e.axis!==void 0&&e.axis!=w){if(!et(e.axis))throw TypeError(`Invalid axis`);T.get(this).axis=e.axis}Xe(this)}set source(e){it(this,e),Xe(this)}get source(){return T.get(this).source}set axis(e){if(!et(e))throw TypeError(`Invalid axis`);T.get(this).axis=e,Xe(this)}get axis(){return T.get(this).axis}get duration(){return CSS.percent(100)}get phase(){let e=this.source;if(!e)return`inactive`;let t=getComputedStyle(e);return t.display==`none`?`inactive`:e==document.scrollingElement||t.overflow!=`visible`&&t.overflow!=`clip`?`active`:`inactive`}get currentTime(){let e=this.source;if(!e||!e.isConnected||this.phase==`inactive`)return null;let t=getComputedStyle(e);if(t.display===`inline`||t.display===`none`)return null;let n=this.axis,r=Ze(e,n),i=function(e,t){let n=E.get(e).sourceMeasurements,r=getComputedStyle(e).writingMode==`horizontal-tb`;return t===`block`?t=r?`y`:`x`:t===`inline`&&(t=r?`x`:`y`),t===`y`?n.scrollHeight-n.clientHeight:t===`x`?n.scrollWidth-n.clientWidth:void 0}(e,n);return i>0?CSS.percent(100*r/i):CSS.percent(100)}get __polyfill(){return!0}}function O(e,t){let n=e.parentElement;for(;n!=null;){if(t(n))return n;n=n.parentElement}}function st(e,t){switch(e){case`root`:return document.scrollingElement;case`nearest`:return ut(t);case`self`:return t;default:throw TypeError(`Invalid ScrollTimeline Source Type.`)}}function ct(e){switch(getComputedStyle(e).display){case`block`:case`inline-block`:case`list-item`:case`table`:case`table-caption`:case`flow-root`:case`flex`:case`grid`:return!0}return!1}function lt(e){let t=getComputedStyle(e);return t.transform!=`none`||t.perspective!=`none`||t.willChange==`transform`||t.willChange==`perspective`||t.filter!=`none`||t.willChange==`filter`||t.backdropFilter!=`none`}function k(e){return getComputedStyle(e).position!=`static`||lt(e)}function A(e){switch(getComputedStyle(e).position){case`static`:case`relative`:case`sticky`:return O(e,ct);case`absolute`:return O(e,k);case`fixed`:return O(e,lt)}}function ut(e){if(e&&e.isConnected){for(;e=A(e);)switch(getComputedStyle(e)[`overflow-x`]){case`auto`:case`scroll`:case`hidden`:return e==document.body&&getComputedStyle(document.scrollingElement).overflow==`visible`?document.scrollingElement:e}return document.scrollingElement}}function j(e,t){let n=T.get(e),r=n.subjectMeasurements,i=E.get(n.source).sourceMeasurements;return e.phase===`inactive`?null:e instanceof pt?dt(t,i,r,n.axis,n.inset):null}function dt(e,t,n,r,i){let a=t.direction==`rtl`||t.writingMode==`vertical-rl`,o,s,c={fontSize:n.fontSize};we(r,t)===`x`?(o=n.offsetWidth,s=n.left,c.scrollPadding=[t.scrollPaddingLeft,t.scrollPaddingRight],a&&(s+=t.scrollWidth-t.clientWidth,c.scrollPadding=[t.scrollPaddingRight,t.scrollPaddingLeft]),c.containerSize=t.clientWidth):(o=n.offsetHeight,s=n.top,c.scrollPadding=[t.scrollPaddingTop,t.scrollPaddingBottom],c.containerSize=t.clientHeight);let l=function(e,t){let n={start:0,end:0};if(!e)return n;let[r,i]=[e.start,e.end].map(((e,n)=>e===`auto`?t.scrollPadding[n]===`auto`?0:parseFloat(t.scrollPadding[n]):Qe(e,{percentageReference:CSS.px(t.containerSize),fontSize:CSS.px(parseFloat(t.fontSize))})));return{start:r,end:i}}(i,c),u=s-c.containerSize+l.end,d=s+o-l.start,f=u+o,p=d-o,m=Math.min(f,p),ee=Math.max(f,p),h,g,te=o>c.containerSize-l.start-l.end;switch(e){case`cover`:h=u,g=d;break;case`contain`:h=m,g=ee;break;case`entry`:h=u,g=m;break;case`exit`:h=ee,g=d;break;case`entry-crossing`:h=u,g=te?ee:m;break;case`exit-crossing`:h=te?m:ee,g=d}return{start:h,end:g}}function ft(e,t){if(e instanceof pt){let{rangeName:n,offset:r}=t;return M(j(e,n),r,j(e,`cover`),e.subject)}if(e instanceof D){let{axis:n,source:r}=e,{sourceMeasurements:i}=E.get(r),a;return a=we(n,i)===`x`?i.scrollWidth-i.clientWidth:i.scrollHeight-i.clientHeight,Qe(t,{percentageReference:CSS.px(a)})/a}unsupportedTimeline(e)}function M(e,t,n,r){if(!e||!n)return 0;let i=getComputedStyle(r);return(Qe(t,{percentageReference:CSS.px(e.end-e.start),fontSize:CSS.px(parseFloat(i.fontSize))})+e.start-n.start)/(n.end-n.start)}let pt=class extends D{constructor(e){super(e);let t=T.get(this);t.subject=e&&e.subject?e.subject:void 0,e&&e.inset&&(t.inset=function(e){if(!e)return{start:0,end:0};let t;if(t=typeof e==`string`?x(e).map((t=>{if(t===`auto`)return`auto`;try{return CSSNumericValue.parse(t)}catch{throw TypeError(`Could not parse inset "${e}"`)}})):Array.isArray(e)?e:[e],t.length===0||t.length>2)throw TypeError(`Invalid inset`);for(let e of t){if(e===`auto`)continue;let t=e.type();if(t.length!==1&&t.percent!==1)throw TypeError(`Invalid inset`)}return{start:t[0],end:t[1]??t[0]}}(e.inset)),t.subject&&(new ResizeObserver((()=>{rt(t.source)})).observe(t.subject),new MutationObserver((()=>{rt(t.source)})).observe(t.subject,{attributes:!0,attributeFilter:[`class`,`style`]})),$e(this),t.subjectMeasurements=nt(t.source,t.subject),Xe(this)}get source(){return $e(this),T.get(this).source}set source(e){throw Error(`Cannot set the source of a view timeline`)}get subject(){return T.get(this).subject}get axis(){return T.get(this).axis}get currentTime(){let e=Ze(this.source,this.axis);if(e==null)return null;let t=j(this,`cover`);if(!t)return null;let n=(e-t.start)/(t.end-t.start);return CSS.percent(100*n)}get startOffset(){return CSS.px(j(this,`cover`).start)}get endOffset(){return CSS.px(j(this,`cover`).end)}},mt=document.getAnimations,ht=window.Element.prototype.getAnimations,gt=window.Element.prototype.animate,_t=window.Animation;class N{constructor(){this.state=`pending`,this.nativeResolve=this.nativeReject=null,this.promise=new Promise(((e,t)=>{this.nativeResolve=e,this.nativeReject=t}))}resolve(e){this.state=`resolved`,this.nativeResolve(e)}reject(e){this.state=`rejected`,this.promise.catch((()=>{})),this.nativeReject(e)}}function P(e){e.readyPromise=new N,requestAnimationFrame((()=>{(e.timeline?.currentTime??null)!==null&&(Nt(e),e.pendingTask!==`play`||e.startTime===null&&e.holdTime===null?e.pendingTask===`pause`&&bt(e):yt(e))}))}function F(){return new DOMException(`The user aborted a request`,`AbortError`)}function vt(e,t){if(t===null)return t;if(typeof t!=`number`)throw new DOMException(`Unexpected value: ${t}. Cannot convert to CssNumberish`,`InvalidStateError`);let n=e.rangeDuration??100,r=Et(e),i=r?n*t/r:0;return CSS.percent(i)}function I(e,t){if(e.timeline){if(t===null)return t;if(t.unit===`percent`){let n=e.rangeDuration??100,r=Et(e);return t.value*r/n}throw new DOMException(`CSSNumericValue must be a percentage for progress based animations.`,`NotSupportedError`)}{if(t==null||typeof t==`number`)return t;let e=t.to(`ms`);if(e)return e.value;throw new DOMException(`CSSNumericValue must be either a number or a time value for time based animations.`,`InvalidStateError`)}}function yt(e){let t=I(e,e.timeline.currentTime);if(e.holdTime!=null)Ct(e),e.animation.playbackRate==0?e.startTime=t:(e.startTime=t-e.holdTime/e.animation.playbackRate,e.holdTime=null);else if(e.startTime!==null&&e.pendingPlaybackRate!==null){let n=(t-e.startTime)*e.animation.playbackRate;Ct(e);let r=e.animation.playbackRate;r==0?(e.holdTime=null,e.startTime=t):e.startTime=t-n/r}e.readyPromise&&e.readyPromise.state==`pending`&&e.readyPromise.resolve(e.proxy),Tt(e,!1,!1),Dt(e),e.pendingTask=null}function bt(e){let t=I(e,e.timeline.currentTime);e.startTime!=null&&e.holdTime==null&&(e.holdTime=(t-e.startTime)*e.animation.playbackRate),Ct(e),e.startTime=null,e.readyPromise.resolve(e.proxy),Tt(e,!1,!1),Dt(e),e.pendingTask=null}function xt(e){if(!e.finishedPromise||e.finishedPromise.state!=`pending`||e.proxy.playState!=`finished`)return;e.finishedPromise.resolve(e.proxy),e.animation.pause();let t=new CustomEvent(`finish`,{detail:{currentTime:e.proxy.currentTime,timelineTime:e.proxy.timeline.currentTime}});Object.defineProperty(t,`currentTime`,{get:function(){return this.detail.currentTime}}),Object.defineProperty(t,`timelineTime`,{get:function(){return this.detail.timelineTime}}),requestAnimationFrame((()=>{queueMicrotask((()=>{e.animation.dispatchEvent(t)}))}))}function St(e){return e.pendingPlaybackRate===null?e.animation.playbackRate:e.pendingPlaybackRate}function Ct(e){e.pendingPlaybackRate!==null&&(e.animation.playbackRate=e.pendingPlaybackRate,e.pendingPlaybackRate=null)}function wt(e){if(!e.timeline)return null;let t=I(e,e.timeline.currentTime);if(t===null||e.startTime===null)return null;let n=(t-e.startTime)*e.animation.playbackRate;return n==-0&&(n=0),n}function Tt(e,t,n){if(!e.timeline)return;let r=t?I(e,e.proxy.currentTime):wt(e);if(r&&e.startTime!=null&&!e.proxy.pending){let n=St(e),i=Et(e),a=e.previousCurrentTime;n>0&&r>=i&&e.previousCurrentTime!=null?((a===null||a0)&&(a=0),e.holdTime=t?r:a):n!=0&&(t&&e.holdTime!==null&&(e.startTime=function(e,t){if(!e.timeline)return null;let n=I(e,e.timeline.currentTime);return n==null?null:n-t/e.animation.playbackRate}(e,e.holdTime)),e.holdTime=null)}Dt(e),e.previousCurrentTime=I(e,e.proxy.currentTime),e.proxy.playState==`finished`?(e.finishedPromise||=new N,e.finishedPromise.state==`pending`&&(n?xt(e):Promise.resolve().then((()=>{xt(e)})))):(e.finishedPromise&&e.finishedPromise.state==`resolved`&&(e.finishedPromise=new N),e.animation.playState!=`paused`&&e.animation.pause())}function Et(e){let t=function(e){let t=e.proxy.effect.getTiming();return e.normalizedTiming||t}(e),n=t.delay+t.endDelay+t.iterations*t.duration;return Math.max(0,n)}function Dt(e){if(e.timeline)if(e.startTime!==null){let t=e.timeline.currentTime;if(t==null)return;Ot(e,(I(e,t)-e.startTime)*e.animation.playbackRate)}else e.holdTime!==null&&Ot(e,e.holdTime)}function Ot(e,t){let n=e.timeline,r=e.animation.playbackRate,i=n.currentTime&&n.currentTime.value==(r<0?0:100)?r<0?.001:-.001:0;e.animation.currentTime=t+i}function kt(e,t){if(!e.timeline)return;let n=e.proxy.playState==`paused`&&e.proxy.pending,r=!1,i=I(e,e.proxy.currentTime);St(e)==0&&i==null&&(e.holdTime=0),i??(e.autoAlignStartTime=!0),(e.proxy.playState===`finished`||n)&&(e.holdTime=null,e.startTime=null,e.autoAlignStartTime=!0),e.holdTime&&(e.startTime=null),e.pendingTask&&(e.pendingTask=null,r=!0),(e.holdTime!==null||e.autoAlignStartTime||n||e.pendingPlaybackRate!==null)&&(e.readyPromise&&!r&&(e.readyPromise=null),Dt(e),e.readyPromise||P(e),e.pendingTask=`play`,ot(e.timeline,e.animation,At.bind(e.proxy)),Tt(e,!1,!1))}function At(e){let t=L.get(this);if(!t)return;if(e==null)return void(t.proxy.playState!==`paused`&&t.animation.playState!=`idle`&&t.animation.cancel());Nt(t),t.pendingTask&&requestAnimationFrame((()=>{t.pendingTask!==`play`||t.startTime===null&&t.holdTime===null?t.pendingTask===`pause`&&bt(t):yt(t)}));let n=this.playState;(n==`running`||n==`finished`)&&(Ot(t,(I(t,e)-I(t,this.startTime))*this.playbackRate),Tt(t,!1,!1))}function jt(e){e.specifiedTiming=null}let L=new WeakMap;window.addEventListener(`pagehide`,(e=>{L=new WeakMap}),!1);let Mt=new WeakMap;function Nt(e){if(!e.autoAlignStartTime||!e.timeline||!e.timeline.currentTime||e.proxy.playState===`idle`||e.proxy.playState===`paused`&&e.holdTime!==null)return;let t=e.rangeDuration,n,r;try{n=CSS.percent(100*function(e){if(!e.animationRange)return 0;let t=e.animationRange.start===`normal`?Ft(e.timeline):e.animationRange.start;return ft(e.timeline,t)}(e))}catch(t){n=CSS.percent(0),e.animationRange.start=`normal`,console.warn(`Exception when calculating start offset`,t)}try{r=CSS.percent(100*(1-function(e){if(!e.animationRange)return 0;let t=e.animationRange.end===`normal`?It(e.timeline):e.animationRange.end;return 1-ft(e.timeline,t)}(e)))}catch(t){r=CSS.percent(100),e.animationRange.end=`normal`,console.warn(`Exception when calculating end offset`,t)}e.rangeDuration=r.value-n.value,e.startTime=I(e,St(e)>=0?n:r),e.holdTime=null,e.rangeDuration!==t&&jt(e)}function Pt(e){throw Error(`Unsupported timeline class`)}function Ft(e){return e instanceof ViewTimeline?{rangeName:`cover`,offset:CSS.percent(0)}:e instanceof D?CSS.percent(0):void Pt()}function It(e){return e instanceof ViewTimeline?{rangeName:`cover`,offset:CSS.percent(100)}:e instanceof D?CSS.percent(100):void Pt()}function Lt(e,t){if(!t)return{start:`normal`,end:`normal`};let n={start:Ft(e),end:It(e)};if(e instanceof ViewTimeline){let e=x(t),r=[],i=[];if(e.forEach((e=>{if(Je.includes(e))r.push(e);else try{i.push(CSSNumericValue.parse(e))}catch{throw TypeError(`Could not parse range "${t}"`)}})),r.length>2||i.length>2||i.length==1)throw TypeError(`Invalid time range or unsupported time range format.`);return r.length&&(n.start.rangeName=r[0],n.end.rangeName=r.length>1?r[1]:r[0]),i.length>1&&(n.start.offset=i[0],n.end.offset=i[1]),n}if(e instanceof D){let e=t.split(` `);if(e.length!=2)throw TypeError(`Invalid time range or unsupported time range format.`);return n.start=CSSNumericValue.parse(e[0]),n.end=CSSNumericValue.parse(e[1]),n}Pt()}function Rt(e,t,n){if(!t||t===`normal`)return`normal`;if(e instanceof ViewTimeline){let e=`cover`,r=n===`start`?CSS.percent(0):CSS.percent(100);if(t instanceof Object)t.rangeName!==void 0&&(e=t.rangeName),t.offset!==void 0&&(r=t.offset);else{let n=x(t);n.length===1?Je.includes(n[0])?e=n[0]:r=De(CSSNumericValue.parse(n[0]),{}):n.length===2&&(e=n[0],r=De(CSSNumericValue.parse(n[1]),{}))}if(!Je.includes(e))throw TypeError(`Invalid range name`);return{rangeName:e,offset:r}}if(e instanceof D)return CSSNumericValue.parse(t);Pt()}class zt{constructor(e,t,n={}){let r=t instanceof D,i=e instanceof _t?e:new _t(e,r?void 0:t);Mt.set(i,this),L.set(this,{animation:i,timeline:r?t:void 0,playState:r?`idle`:null,readyPromise:null,finishedPromise:null,startTime:null,holdTime:null,rangeDuration:null,previousCurrentTime:null,autoAlignStartTime:!1,pendingPlaybackRate:null,pendingTask:null,specifiedTiming:null,normalizedTiming:null,effect:null,animationRange:r?Lt(t,n[`animation-range`]):null,proxy:this})}get effect(){let e=L.get(this);return e.timeline?(e.effect||=function(e){let t=e.animation.effect,n=t.updateTiming,r={apply:function(n){t.getTiming();let r=n.apply(t);if(e.timeline){let t=e.duration??100;r.localTime=vt(e,r.localTime),r.endTime=vt(e,r.endTime),r.activeDuration=vt(e,r.activeDuration);let n=Et(e),i=r.iterations?(n-r.delay-r.endDelay)/r.iterations:0;r.duration=n?CSS.percent(t*i/n):CSS.percent(0),e.timeline.currentTime===void 0&&(r.localTime=null)}return r}},i={apply:function(r,i){if(e.specifiedTiming)return e.specifiedTiming;e.specifiedTiming=r.apply(t);let a,o=Object.assign({},e.specifiedTiming);if(o.duration===1/0)throw TypeError(`Effect duration cannot be Infinity when used with Scroll Timelines`);return(o.duration===null||o.duration===`auto`||e.autoDurationEffect)&&e.timeline&&(e.autoDurationEffect=!0,o.delay=0,o.endDelay=0,a=o.iterations?1e5:0,o.duration=o.iterations?(a-o.delay-o.endDelay)/o.iterations:0,o.duration<0&&(o.duration=0,o.endDelay=a-o.delay),n.apply(t,[o])),e.normalizedTiming=o,e.specifiedTiming}},a={apply:function(n,r,i){if(i&&i.length){if(e.timeline&&i[0]){let t=i[0],n=t.duration;if(n===1/0)throw TypeError(`Effect duration cannot be Infinity when used with Scroll Timelines`);if(t.iterations===1/0)throw TypeError(`Effect iterations cannot be Infinity when used with Scroll Timelines`);n!==void 0&&n!==`auto`&&(e.autoDurationEffect=null)}e.specifiedTiming&&n.apply(t,[e.specifiedTiming]),n.apply(t,i),jt(e)}}},o=new Proxy(t,{get:function(e,n){let r=e[n];return typeof r==`function`?r.bind(t):r},set:function(e,t,n){return e[t]=n,!0}});return o.getComputedTiming=new Proxy(t.getComputedTiming,r),o.getTiming=new Proxy(t.getTiming,i),o.updateTiming=new Proxy(t.updateTiming,a),o}(e),e.effect):e.animation.effect}set effect(e){let t=L.get(this);t.animation.effect=e,t.effect=null,t.autoDurationEffect=null}get timeline(){let e=L.get(this);return e.timeline||e.animation.timeline}set timeline(e){let t=L.get(this),n=this.timeline;if(n==e)return;let r=this.playState,i=this.currentTime,a,o=Et(t);a=i===null?null:o===0?0:I(t,i)/o;let s=n instanceof D,c=e instanceof D,l=this.pending;if(s&&at(t.timeline,t.animation),c)return t.timeline=e,Ct(t),t.autoAlignStartTime=!0,t.startTime=null,t.holdTime=null,r!==`running`&&r!==`finished`||(t.readyPromise&&t.readyPromise.state!==`resolved`||P(t),t.pendingTask=`play`,ot(t.timeline,t.animation,At.bind(this))),r===`paused`&&a!==null&&(t.holdTime=a*o),l&&(t.readyPromise&&t.readyPromise.state!=`resolved`||P(t),t.pendingTask=r==`paused`?`pause`:`play`),t.startTime!==null&&(t.holdTime=null),void Tt(t,!1,!1);if(t.animation.timeline!=e)throw TypeError(`Unsupported timeline: `+e);if(at(t.timeline,t.animation),t.timeline=null,s)switch(i!==null&&(t.animation.currentTime=a*Et(t)),r){case`paused`:t.animation.pause();break;case`running`:case`finished`:t.animation.play()}}get startTime(){let e=L.get(this);return e.timeline?vt(e,e.startTime):e.animation.startTime}set startTime(e){let t=L.get(this);if(e=I(t,e),!t.timeline)return void(t.animation.startTime=e);t.autoAlignStartTime=!1,I(t,t.timeline.currentTime)==null&&t.startTime!=null&&(t.holdTime=null,Dt(t));let n=I(t,this.currentTime);Ct(t),t.startTime=e,t.startTime!==null&&t.animation.playbackRate!=0?t.holdTime=null:t.holdTime=n,t.pendingTask&&(t.pendingTask=null,t.readyPromise.resolve(this)),Tt(t,!0,!1),Dt(t)}get currentTime(){let e=L.get(this);return e.timeline?e.holdTime==null?vt(e,wt(e)):vt(e,e.holdTime):e.animation.currentTime}set currentTime(e){let t=L.get(this);t.timeline?(function(e,t){if(t==null&&e.currentTime!==null)throw TypeError();t=I(e,t),e.autoAlignStartTime=!1,e.holdTime!==null||e.startTime===null||e.timeline.phase===`inactive`||e.animation.playbackRate===0?e.holdTime=t:e.startTime=I(e,e.timeline.currentTime)-t/e.animation.playbackRate,e.timeline.phase===`inactive`&&(e.startTime=null),e.previousCurrentTime=null}(t,e),t.pendingTask==`pause`&&(t.holdTime=I(t,e),Ct(t),t.startTime=null,t.pendingTask=null,t.readyPromise.resolve(this)),Tt(t,!0,!1)):t.animation.currentTime=e}get playbackRate(){return L.get(this).animation.playbackRate}set playbackRate(e){let t=L.get(this);if(!t.timeline)return void(t.animation.playbackRate=e);t.pendingPlaybackRate=null;let n=this.currentTime;t.animation.playbackRate=e,n!==null&&(this.currentTime=n)}get playState(){let e=L.get(this);if(!e.timeline)return e.animation.playState;let t=I(e,this.currentTime);return t===null&&e.startTime===null&&e.pendingTask==null?`idle`:e.pendingTask==`pause`||e.startTime===null&&e.pendingTask!=`play`?`paused`:t!=null&&(e.animation.playbackRate>0&&t>=Et(e)||e.animation.playbackRate<0&&t<=0)?`finished`:`running`}get rangeStart(){return L.get(this).animationRange?.start??`normal`}set rangeStart(e){let t=L.get(this);if(!t.timeline)return t.animation.rangeStart=e;t.timeline instanceof D&&(t.animationRange.start=Rt(t.timeline,e,`start`),Nt(t),Dt(t))}get rangeEnd(){return L.get(this).animationRange?.end??`normal`}set rangeEnd(e){let t=L.get(this);if(!t.timeline)return t.animation.rangeEnd=e;t.timeline instanceof D&&(t.animationRange.end=Rt(t.timeline,e,`end`),Nt(t),Dt(t))}get replaceState(){return L.get(this).animation.pending}get pending(){let e=L.get(this);return e.timeline?!!e.readyPromise&&e.readyPromise.state==`pending`:e.animation.pending}finish(){let e=L.get(this);if(!e.timeline)return void e.animation.finish();let t=St(e),n=Et(e);if(t==0)throw new DOMException(`Cannot finish Animation with a playbackRate of 0.`,`InvalidStateError`);if(t>0&&n==1/0)throw new DOMException(`Cannot finish Animation with an infinite target effect end.`,`InvalidStateError`);Ct(e);let r=t<0?0:n;this.currentTime=vt(e,r);let i=I(e,e.timeline.currentTime);e.startTime===null&&i!==null&&(e.startTime=i-r/e.animation.playbackRate),e.pendingTask==`pause`&&e.startTime!==null&&(e.holdTime=null,e.pendingTask=null,e.readyPromise.resolve(this)),e.pendingTask==`play`&&e.startTime!==null&&(e.pendingTask=null,e.readyPromise.resolve(this)),Tt(e,!0,!0)}play(){let e=L.get(this);e.timeline?kt(e):e.animation.play()}pause(){let e=L.get(this);e.timeline?this.playState!=`paused`&&(e.animation.currentTime===null&&(e.autoAlignStartTime=!0),e.pendingTask==`play`?e.pendingTask=null:e.readyPromise=null,e.readyPromise||P(e),e.pendingTask=`pause`,ot(e.timeline,e.animation,At.bind(e.proxy))):e.animation.pause()}reverse(){let e=L.get(this),t=St(e),n=I(e,this.currentTime),r=Et(e)==1/0,i=t!=0&&(t<0||n>0||!r);if(!e.timeline||!i)return i&&(e.pendingPlaybackRate=-St(e)),void e.animation.reverse();if(e.timeline.phase==`inactive`)throw new DOMException(`Cannot reverse an animation with no active timeline`,`InvalidStateError`);this.updatePlaybackRate(-t),kt(e)}updatePlaybackRate(e){let t=L.get(this);if(t.pendingPlaybackRate=e,!t.timeline)return void t.animation.updatePlaybackRate(e);let n=this.playState;if(!t.readyPromise||t.readyPromise.state!=`pending`)switch(n){case`idle`:case`paused`:Ct(t);break;case`finished`:let n=I(t,t.timeline.currentTime),r=n===null?null:(n-t.startTime)*t.animation.playbackRate;t.startTime=e==0?n:n!=null&&r!=null?(n-r)/e:null,Ct(t),Tt(t,!1,!1),Dt(t);break;default:kt(t)}}persist(){L.get(this).animation.persist()}get id(){return L.get(this).animation.id}set id(e){L.get(this).animation.id=e}cancel(){let e=L.get(this);e.timeline?(this.playState!=`idle`&&(function(e){e.pendingTask&&(e.pendingTask=null,Ct(e),e.readyPromise.reject(F()),P(e),e.readyPromise.resolve(e.proxy))}(e),e.finishedPromise&&e.finishedPromise.state==`pending`&&e.finishedPromise.reject(F()),e.finishedPromise=new N,e.animation.cancel()),e.startTime=null,e.holdTime=null,at(e.timeline,e.animation)):e.animation.cancel()}get onfinish(){return L.get(this).animation.onfinish}set onfinish(e){L.get(this).animation.onfinish=e}get oncancel(){return L.get(this).animation.oncancel}set oncancel(e){L.get(this).animation.oncancel=e}get onremove(){return L.get(this).animation.onremove}set onremove(e){L.get(this).animation.onremove=e}get finished(){let e=L.get(this);return e.timeline?(e.finishedPromise||=new N,e.finishedPromise.promise):e.animation.finished}get ready(){let e=L.get(this);return e.timeline?(e.readyPromise||(e.readyPromise=new N,e.readyPromise.resolve(this)),e.readyPromise.promise):e.animation.ready}addEventListener(e,t,n){L.get(this).animation.addEventListener(e,t,n)}removeEventListener(e,t,n){L.get(this).animation.removeEventListener(e,t,n)}dispatchEvent(e){L.get(this).animation.dispatchEvent(e)}}function R(e,t){let n=t.timeline;n instanceof D&&delete t.timeline;let r=gt.apply(this,[e,t]),i=new zt(r,n);return n instanceof D&&(r.pause(),L.get(i).animationRange={start:Rt(n,t.rangeStart,`start`),end:Rt(n,t.rangeEnd,`end`)},i.play()),i}function Bt(e){for(let t=0;t=r.sheetSrc.length));){if(this.lookAhead(`/*`,r)){for(;this.lookAhead(`/*`,r);)this.eatComment(r),this.eatWhitespace(r);continue}let e=this.parseQualifiedRule(r);e&&(t?this.parseKeyframesAndSaveNameMapping(e,r):this.handleScrollTimelineProps(e,r))}return r.sheetSrc}getAnimationTimelineOptions(e,t){for(let n=this.cssRulesWithTimelineName.length-1;n>=0;n--){let r=this.cssRulesWithTimelineName[n];try{if(t.matches(r.selector)&&(!r[`animation-name`]||r[`animation-name`]==e))return{"animation-timeline":r[`animation-timeline`],"animation-range":r[`animation-range`]}}catch{}}return null}getAnonymousScrollTimelineOptions(e,t){let n=this.anonymousScrollTimelineOptions.get(e);return n?{anonymousSource:n.source,anonymousTarget:t,source:st(n.source??`nearest`,t),axis:n.axis?n.axis:`block`}:null}getScrollTimelineOptions(e,t){let n=this.getAnonymousScrollTimelineOptions(e,t);if(n)return n;for(let n=this.sourceSelectorToScrollTimeline.length-1;n>=0;n--){let r=this.sourceSelectorToScrollTimeline[n];if(r.name==e){let e=this.findPreviousSiblingOrAncestorMatchingSelector(t,r.selector);if(e)return{source:e,...r.axis?{axis:r.axis}:{}}}}return null}findPreviousSiblingOrAncestorMatchingSelector(e,t){let n=e;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling||n.parentElement}return null}getAnonymousViewTimelineOptions(e,t){let n=this.anonymousViewTimelineOptions.get(e);return n?{subject:t,axis:n.axis?n.axis:`block`,inset:n.inset?n.inset:`auto`}:null}getViewTimelineOptions(e,t){let n=this.getAnonymousViewTimelineOptions(e,t);if(n)return n;for(let n=this.subjectSelectorToViewTimeline.length-1;n>=0;n--){let r=this.subjectSelectorToViewTimeline[n];if(r.name==e){let e=this.findPreviousSiblingOrAncestorMatchingSelector(t,r.selector);if(e)return{subject:e,axis:r.axis,inset:r.inset}}}return null}handleScrollTimelineProps(e,t){if(e.selector.includes(`@keyframes`))return;let n=e.block.contents.includes(`animation-name:`),r=e.block.contents.includes(`animation-timeline:`),i=e.block.contents.includes(`animation:`);if(this.saveSourceSelectorToScrollTimeline(e),this.saveSubjectSelectorToViewTimeline(e),!r&&!n&&!i)return;let a=[],o=[],s=!1;r&&(a=this.extractScrollTimelineNames(e.block.contents)),n&&(o=this.extractMatches(e.block.contents,B.ANIMATION_NAME)),r&&n||(i&&this.extractMatches(e.block.contents,B.ANIMATION).forEach((t=>{let n=this.extractAnimationName(t);n&&r&&o.push(n),r&&(this.hasDuration(t)||(this.hasAutoDuration(t)&&(e.block.contents=e.block.contents.replace(`auto`,` `)),e.block.contents=e.block.contents.replace(t,` 1s `+t),s=!0))})),s&&this.replacePart(e.block.startIndex,e.block.endIndex,e.block.contents,t)),this.saveRelationInList(e,a,o)}saveSourceSelectorToScrollTimeline(e){let t=e.block.contents.includes(`scroll-timeline:`),n=e.block.contents.includes(`scroll-timeline-name:`),r=e.block.contents.includes(`scroll-timeline-axis:`);if(!t&&!n)return;let i=[];if(t){let t=this.extractMatches(e.block.contents,B.SCROLL_TIMELINE);for(let n of t){let t=this.split(n),r={selector:e.selector,name:``};t.length==1?r.name=t[0]:t.length==2&&(Ht.includes(t[0])?(r.axis=t[0],r.name=t[1]):(r.axis=t[1],r.name=t[0])),i.push(r)}}if(n){let t=this.extractMatches(e.block.contents,B.SCROLL_TIMELINE_NAME);for(let n=0;nHt.includes(e))),a.length!=t.length)throw Error(`Invalid axis`)}for(let e=0;eHt.includes(e))),s.length!=t.length)throw Error(`Invalid axis`)}for(let e=0;e{return t=e,B.TIME.exec(t);var t})).length>=1}hasAutoDuration(e){return e.split(` `).filter((e=>e===`auto`)).length>=1}saveRelationInList(e,t,n){let r=[];e.block.contents.includes(`animation-range:`)&&(r=this.extractMatches(e.block.contents,B.ANIMATION_TIME_RANGE));let i=Math.max(t.length,n.length,r.length);for(let a=0;ae.trim())).forEach((e=>{if(function(e){return(e.startsWith(`scroll`)||e.startsWith(`view`))&&e.includes(`(`)}(e)){let t=this.saveAnonymousTimelineName(e);n.push(t)}else n.push(e)})),n}saveAnonymousTimelineName(e){let t=`:t`+ this.nextAnonymousTimelineNameIndex++;return e.startsWith(`scroll(`)?this.anonymousScrollTimelineOptions.set(t,this.parseAnonymousScrollTimeline(e)):this.anonymousViewTimelineOptions.set(t,this.parseAnonymousViewTimeline(e)),t}parseAnonymousScrollTimeline(e){let t=B.ANONYMOUS_SCROLL_TIMELINE.exec(e);if(!t)return null;let n=t[1],r={};return n.split(` `).forEach((e=>{Ht.includes(e)?r.axis=e:Ut.includes(e)&&(r.source=e)})),r}parseAnonymousViewTimeline(e){let t=B.ANONYMOUS_VIEW_TIMELINE.exec(e);if(!t)return null;let n=t[1],r={};return n.split(` `).forEach((e=>{Ht.includes(e)?r.axis=e:r.inset=r.inset?`${r.inset} ${e}`:e})),r}extractAnimationName(e){return this.findMatchingEntryInContainer(e,this.keyframeNamesSelectors)}findMatchingEntryInContainer(e,t){let n=e.split(` `).filter((e=>t.has(e)));return n?n[0]:null}parseIdentifier(e){B.IDENTIFIER.lastIndex=e.index;let t=B.IDENTIFIER.exec(e.sheetSrc);if(!t)throw this.parseError(e,`Expected an identifier`);return e.index+=t[0].length,t[0]}parseKeyframesAndSaveNameMapping(e,t){if(e.selector.startsWith(`@keyframes`)){let n=this.replaceKeyframesAndGetMapping(e,t);e.selector.split(` `).forEach(((e,t)=>{t>0&&this.keyframeNamesSelectors.set(e,n)}))}}replaceKeyframesAndGetMapping(e,t){function n(e){return Je.some((t=>e.startsWith(t)))}let r=e.block.contents,i=function(e){let t=0,n=-1,r=-1,i=[];for(let a=0;a{let t=e.split(` `).map((e=>e.trim())).filter((e=>e!=``)).join(` `),r=a.size;a.set(r,t),c.push(`${r}%`),n(t)&&(o=!0)})),s.push(c.join(`,`)),e==i.length-1?s.push(r.substring(i[e].end)):s.push(r.substring(i[e].end,i[e+1].start))}return o?(e.block.contents=s.join(``),this.replacePart(e.block.startIndex,e.block.endIndex,e.block.contents,t),a):new Map}parseQualifiedRule(e){let t=e.index,n=this.parseSelector(e).trim();if(n)return{selector:n,block:this.eatBlock(e),startIndex:t,endIndex:e.index}}removeEnclosingDoubleQuotes(e){let t=+(e[0]==`"`),n=e[e.length-1]==`"`?e.length-1:e.length;return e.substring(t,n)}assertString(e,t){if(e.sheetSrc.substr(e.index,t.length)!=t)throw this.parseError(e,`Did not find expected sequence ${t}`);e.index+=t.length}replacePart(e,t,n,r){if(r.sheetSrc=r.sheetSrc.slice(0,e)+n+r.sheetSrc.slice(t),r.index>=t){let i=r.index-t;r.index=e+n.length+i}}eatComment(e){this.assertString(e,`/*`),this.eatUntil(`*/`,e,!0),this.assertString(e,`*/`)}eatBlock(e){let t=e.index;this.assertString(e,`{`);let n=1;for(;n!=0;)this.lookAhead(`/*`,e)?this.eatComment(e):(e.sheetSrc[e.index]===`{`?n++:e.sheetSrc[e.index]===`}`&&n--,this.advance(e));let r=e.index;return{startIndex:t,endIndex:r,contents:e.sheetSrc.slice(t,r)}}advance(e){if(e.index++,e.index>e.sheetSrc.length)throw this.parseError(e,`Advanced beyond the end`)}parseError(e,t){return Error(`(${e.name?e.name:``}): ${t}`)}eatUntil(e,t,n=!1){let r=t.index;for(;!this.lookAhead(e,t);)this.advance(t);return n&&(t.sheetSrc=t.sheetSrc.slice(0,r)+` `.repeat(t.index-r)+t.sheetSrc.slice(t.index)),t.sheetSrc.slice(r,t.index)}parseSelector(e){let t=e.index;if(this.eatUntil(`{`,e),t===e.index)throw Error(`Empty selector`);return e.sheetSrc.slice(t,e.index)}eatWhitespace(e){B.WHITE_SPACE.lastIndex=e.index;let t=B.WHITE_SPACE.exec(e.sheetSrc);t&&(e.index+=t[0].length)}lookAhead(e,t){return t.sheetSrc.substr(t.index,e.length)==e}peek(e){return e.sheetSrc[e.index]}extractMatches(e,t,n=`,`){return t.exec(e)[1].trim().split(n).map((e=>e.trim()))}split(e){return e.split(` `).map((e=>e.trim())).filter((e=>e!=``))}};function Gt(e,t,n,r,i,a){let o=tt(t),s=nt(t,n);return M(dt(e,o,s,r,i),a,dt(`cover`,o,s,r,i),n)}function Kt(e,t,n){let r=Wt.getAnimationTimelineOptions(t,n);if(!r)return null;let i=r[`animation-timeline`];if(!i)return null;let a=Wt.getScrollTimelineOptions(i,n)||Wt.getViewTimelineOptions(i,n);return a?(a.subject&&function(e,t){let n=ut(t.subject),r=t.axis||t.axis;function i(e,i){let a=null;for(let[o,s]of e)if(o==100*i.offset){if(s==`from`)a=0;else if(s==`to`)a=100;else{let e=s.split(` `);a=e.length==1?parseFloat(e[0]):100*Gt(e[0],n,t.subject,r,t.inset,CSS.percent(parseFloat(e[1])))}break}return a}let a=Wt.keyframeNamesSelectors.get(e.animationName);if(a&&a.size){let t=[];e.effect.getKeyframes().forEach((e=>{let n=i(a,e);n!==null&&n>=0&&n<=100&&(e.offset=n/100,t.push(e))}));let n=t.sort(((e,t)=>e.offsett.offset)));e.effect.setKeyframes(n)}}(e,a),{timeline:a.source?new D(a):new pt(a),animOptions:r}):null}function qt(){if(CSS.supports(`animation-timeline: --works`))return!0;(function(){function e(e){if(e.innerHTML.trim().length===0||`aphrodite`in e.dataset)return;let t=Wt.transpileStyleSheet(e.innerHTML,!0);t=Wt.transpileStyleSheet(t,!1),e.innerHTML=t}function t(e){e.type!=`text/css`&&e.rel!=`stylesheet`||!e.href||new URL(e.href,document.baseURI).origin==location.origin&&fetch(e.getAttribute(`href`)).then((async t=>{let n=await t.text(),r=Wt.transpileStyleSheet(n,!0);if(r=Wt.transpileStyleSheet(n,!1),r!=n){let t=new Blob([r],{type:`text/css`}),n=URL.createObjectURL(t);e.setAttribute(`href`,n)}}))}new MutationObserver((n=>{for(let r of n)for(let n of r.addedNodes)n instanceof HTMLStyleElement&&e(n),n instanceof HTMLLinkElement&&t(n)})).observe(document.documentElement,{childList:!0,subtree:!0}),document.querySelectorAll(`style`).forEach((t=>e(t))),document.querySelectorAll(`link`).forEach((e=>t(e)))})();let e=CSS.supports;CSS.supports=t=>(t=t.replaceAll(/(animation-timeline|scroll-timeline(-(name|axis))?|view-timeline(-(name|axis|inset))?|timeline-scope)\s*:/g,`--supported-property:`),e(t)),window.addEventListener(`animationstart`,(e=>{e.target.getAnimations().filter((t=>t.animationName===e.animationName)).forEach((t=>{let n=Kt(t,t.animationName,e.target);if(n)if(!n.timeline||t instanceof zt)t.timeline=n.timeline;else{let e=new zt(t,n.timeline,n.animOptions);t.pause(),e.play()}}))}))}(function(){if(!qt()){if(!Reflect.defineProperty(window,`ScrollTimeline`,{value:D}))throw Error(`Error installing ScrollTimeline polyfill: could not attach ScrollTimeline to window`);if(!Reflect.defineProperty(window,`ViewTimeline`,{value:pt}))throw Error(`Error installing ViewTimeline polyfill: could not attach ViewTimeline to window`);if(!Reflect.defineProperty(Element.prototype,`animate`,{value:R}))throw Error(`Error installing ScrollTimeline polyfill: could not attach WAAPI's animate to DOM Element`);if(!Reflect.defineProperty(window,`Animation`,{value:zt}))throw Error(`Error installing Animation constructor.`);if(!Reflect.defineProperty(Element.prototype,`getAnimations`,{value:z}))throw Error(`Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to DOM Element`);if(!Reflect.defineProperty(document,`getAnimations`,{value:Vt}))throw Error(`Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to document`)}})()})();var Ns=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ps=N(`debugscroll`),Fs=class extends R{target=null;damping=0;invert=!1;htmlSelector=null;mode=`window`;changed=new k;get currentValue(){return this._current_value}_current_value=0;_target_value=0;_appliedValue=-1;_needsUpdate=!1;_firstUpdate=!1;awake(){this._firstUpdate=!0}onEnable(){window.addEventListener(`wheel`,this.updateCurrentScrollValue,{passive:!0}),this._appliedValue=-1,this._needsUpdate=!0}onDisable(){window.removeEventListener(`wheel`,this.updateCurrentScrollValue)}lateUpdate(){if(this.updateCurrentScrollValue(),this._target_value>=0&&(this.damping>0&&!this._firstUpdate?(this._current_value=O.lerp(this._current_value,this._target_value,this.context.time.deltaTime/this.damping),Math.abs(this._current_value-this._target_value)<.001&&(this._current_value=this._target_value)):this._current_value=this._target_value),this._needsUpdate||this._current_value!==this._appliedValue){this._appliedValue=this._current_value,this._needsUpdate=!1;let e=!1;if(this.changed.listenerCount>0){let t={type:`change`,value:this._current_value,component:this,preventDefault:()=>{t.defaultPrevented=!0},defaultPrevented:!1};this.changed.invoke(t),e=t.defaultPrevented}if(!e){let e=this.invert?1-this._current_value:this._current_value;Array.isArray(this.target)?this.target.forEach(t=>t&&this.applyScroll(t,e)):this.target&&this.applyScroll(this.target,e),Ps&&this.context.time.frame%30==0&&console.debug(`[ScrollFollow] ${this._current_value.toFixed(5)} — ${(this._target_value*100).toFixed(0)}%, targets [${Array.isArray(this.target)?this.target.length:1}]`)}this._firstUpdate=!1}}_lastSelectorValue=null;_lastSelectorElement=null;updateCurrentScrollValue=()=>{switch(this.mode){case`window`:if(this.htmlSelector?.length){if(this.htmlSelector!==this._lastSelectorValue&&(this._lastSelectorElement=document.querySelector(this.htmlSelector),this._lastSelectorValue=this.htmlSelector),this._lastSelectorElement){let e=this._lastSelectorElement.getBoundingClientRect();this._target_value=-e.top/(e.height-window.innerHeight);break}}else if(!(window.document.body.scrollHeight<=window.innerHeight)){let e=window.document.body.scrollHeight-window.innerHeight;this._target_value=window.scrollY/(e||1)}break}(isNaN(this._target_value)||!isFinite(this._target_value))&&(this._target_value=-1)};applyScroll(e,t){if(e)if(e instanceof ti)this.handleTimelineTarget(e,t),e.isPlaying&&e.pause(),e.evaluate();else if(e instanceof it)e.setFloat(`scroll`,t);else if(e instanceof Qn)e.time=t*e.duration;else if(e instanceof Kn){if(!e.duration)return;e.time=t*e.duration}else if(e instanceof ts)e.position01=t;else if(e instanceof Y)e.intensity=t;else if(e instanceof y){let n=e;n[`needle:scrollbounds`]===void 0&&(n[`needle:scrollbounds`]=Nt(e)||null);let r=n[`needle:scrollbounds`];r&&(e.position.y=-r.min.y-t*(r.max.y-r.min.y))}else `scroll`in e&&(typeof e.scroll==`number`?e.scroll=t:typeof e.scroll==`function`&&e.scroll(t))}handleTimelineTarget(e,t){let n=e.duration,r=Is.get(e);if(!r){r=[],Is.set(e,r);let t=0;for(let n of e.foreachMarker(`ScrollMarker`)){let e=t++;if(n.element===void 0||n.needsUpdate===!0||n.element&&!n.element?.parentNode){n.needsUpdate=!1;try{if(n.element=Bs(e),Ps&&console.debug(`ScrollMarker #${e} (${n.time.toFixed(2)}) found`,n.element),!n.element){(Ps||w())&&console.warn(`No HTML element found for ScrollMarker: ${n.name} (index ${e})`);continue}}catch(e){n.element=null,console.error(`ScrollMarker selector is not valid: `+n.name+` -`,e)}}n.element&&r.push(n)}r.length<=0&&document.querySelectorAll(`[data-timeline-marker]`).forEach(e=>{let t=e.getAttribute(`data-timeline-marker`),n=parseFloat(t||`NaN`);isNaN(n)?(w()||Ps)&&console.warn(`[ScrollFollow] data-timeline-marker attribute is not a valid number. Supported are numbers only (e.g.
)`):r.push({time:n,element:e})});for(let e of r)e.element&&(e.timeline=new ViewTimeline({subject:e.element,axis:`block`}))}Ls.length=0;let i=0,a=0;for(let e=0;e0&&a<=1){let e=t.time+(s-t.time)*a;Ls.push({name:l,time:e,weight:o}),i+=o}else e===0&&a<=0?(Ls.push({name:l,time:0,weight:1}),i+=1):e===r.length-1&&a>=1&&(Ls.push({name:l,time:n,weight:1}),i+=1)}}if(Ls.length<=0&&a<=0)e.time=t*n;else if(Ls.length>0){let t=Ls[0].time;if(Ls.length>1)for(let e of Ls){let n=e.weight/Math.max(1e-5,i),r=Math.abs(e.time-t);t+=r*n}this.damping<=0||this._firstUpdate?e.time=t:e.time=O.lerp(e.time,t,this.context.time.deltaTime/this.damping),Math.abs(e.time-t)>.001&&(this._needsUpdate=!0),Ps&&this.context.time.frame%30==0&&console.log(`[ScrollFollow ] Timeline ${e.name}: ${t.toFixed(3)}`,Ls.map(e=>`[${e.name} ${(e.weight*100).toFixed(0)}%]`).join(`, `))}}};Ns([A([R,y])],Fs.prototype,`target`,void 0),Ns([A()],Fs.prototype,`damping`,void 0),Ns([A()],Fs.prototype,`invert`,void 0),Ns([A()],Fs.prototype,`htmlSelector`,void 0),Ns([A()],Fs.prototype,`mode`,void 0),Ns([A(k)],Fs.prototype,`changed`,void 0);var Is=new WeakMap,Ls=[],Rs=[],zs=!0;function Bs(e){return zs?(zs=!1,Rs.length=0,document.querySelectorAll(`[data-timeline-marker]`).forEach((e,t)=>{Rs[t]=e}),zs=!1,Bs(e)):Rs[e]||null}function Vs(e){if(!e.source)return 0;let t=e.currentTime,n=e.duration,r=1;return(n.unit===`seconds`||n.unit===`percent`)&&(r=n.value),t.unit===`seconds`?t.value/r:t.value/100}var Hs=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Us,Ws=N(`debugviewbox`),Gs=new vt(.5,.5,.5,.5),Ks=class extends R{static{Us=this}static instances=[];referenceFieldOfView=-1;get mode(){return this._mode}set mode(e){e!==this._mode&&(this._mode=e,e===`once`&&(this._applyCount=0),(Ws||this.debug)&&console.debug(`[ViewBox] Set mode:`,e))}_mode=`continuous`;debug=!1;onEnable(){(Ws||this.debug||w())&&console.debug(`[ViewBox] Using camera fov:`,this.referenceFieldOfView),Us.instances.push(this),this._applyCount=0,this.removeUpdateCallback(),this.context.pre_render_callbacks.push(this.internalUpdate)}onDisable(){(Ws||this.debug)&&console.debug(`[ViewBox] Disabled`);let e=Us.instances.indexOf(this);e!==-1&&Us.instances.splice(e,1),this._projectedBoxElement?.remove(),this.removeUpdateCallback()}removeUpdateCallback(){let e=this.context.pre_render_callbacks.indexOf(this.internalUpdate);e!==-1&&this.context.pre_render_callbacks.splice(e,1)}static _tempProjectionMatrix=new _;static _tempProjectionMatrixInverse=new _;_applyCount=0;internalUpdate=()=>{if(this.context.isInXR||this.destroyed||!this.activeAndEnabled)return;if(Us.instances[Us.instances.length-1]!==this){(Ws||this.debug)&&V.DrawWireBox(this.gameObject.worldPosition,this.gameObject.worldScale,Gs);return}(Ws||this.debug)&&V.DrawWireBox(this.gameObject.worldPosition,this.gameObject.worldScale,14540032,0,!0,this.gameObject.worldQuaternion);let e=this.context.mainCamera;if(!e||!(e instanceof le))return;if((this.referenceFieldOfView===void 0||this.referenceFieldOfView===-1)&&(this.referenceFieldOfView=e.fov,console.debug(`[ViewBox] No referenceFieldOfView set, using camera fov:`,this.referenceFieldOfView)),this.referenceFieldOfView===void 0||this.referenceFieldOfView<=0){(Ws||this.debug)&&console.warn(`[ViewBox] No valid referenceFieldOfView set, cannot adjust box size:`,this.referenceFieldOfView);return}if(this._applyCount>=1&&this.mode===`once`)return;this._applyCount++;let t=this.context.domWidth,n=this.context.domHeight,r=t,i=n,a=1,o=1,s=this.context.focusRectSize;s&&(r=s.width,i=s.height,a=t/r,o=n/i),Us._tempProjectionMatrix.copy(e.projectionMatrix),Us._tempProjectionMatrixInverse.copy(e.projectionMatrixInverse);let c=e.view,l=e.zoom,u=e.aspect,d=e.fov;e.view=null,e.zoom=1,e.fov=this.referenceFieldOfView,e.updateProjectionMatrix();let f=this.gameObject.worldPosition,p=this.gameObject.worldScale,m=e.worldPosition,ee=m.distanceTo(f),h=Math.max(p.x,p.y,p.z),g=z(m).sub(f);if(eea&&(a=n.x),n.ys&&(s=n.y)}return Ws&&(this._projectedBoxElement||=document.createElement(`div`),this._projectedBoxElement.parentElement!==this.context.domElement&&this.context.domElement.appendChild(this._projectedBoxElement),this._projectedBoxElement.style.position=`fixed`,this._projectedBoxElement.style.outline=`2px dashed rgba(255,0,0,.5)`,this._projectedBoxElement.style.left=(i*.5+.5)*this.context.domWidth+`px`,this._projectedBoxElement.style.top=(-s*.5+.5)*this.context.domHeight+`px`,this._projectedBoxElement.style.width=(a-i)*.5*this.context.domWidth+`px`,this._projectedBoxElement.style.height=(s-o)*.5*this.context.domHeight+`px`,this._projectedBoxElement.style.pointerEvents=`none`,this._projectedBoxElement.style.zIndex=`1000`),{minX:i,maxX:a,minY:o,maxY:s}}_projectedBoxElement=null};Hs([A()],Ks.prototype,`referenceFieldOfView`,void 0),Hs([A()],Ks.prototype,`mode`,null),Hs([A()],Ks.prototype,`debug`,void 0),Ks=Us=Hs([I],Ks);var qs=class extends R{toggleKey=`KeyP`;update(){this.context.input.isKeyDown(this.toggleKey)&&this.context.domElement.classList.toggle(`presentation-mode`)}};function Js(){S.add(`AlignmentConstraint`,xi),S.add(`Animation`,Qn),S.add(`Animator`,it),S.add(`AudioListener`,rr),S.add(`AudioSource`,Kn),S.add(`Avatar_Brain_LookAt`,cr),S.add(`Avatar_MouthShapes`,zn),S.add(`Avatar_MustacheShake`,In),S.add(`AvatarBlink_Simple`,bn),S.add(`AvatarEyeLook_Rotation`,hn),S.add(`AxesHelper`,Ci),S.add(`BasicIKConstraint`,wi),S.add(`BoxHelperComponent`,Di),S.add(`Camera`,Ne),S.add(`CharacterController`,Ai),S.add(`CharacterControllerInput`,ji),S.add(`SphereCollider`,Pn),S.add(`BoxCollider`,dn),S.add(`MeshCollider`,An),S.add(`CapsuleCollider`,Mn),S.add(`ContactShadows`,Dn),S.add(`LogStats`,Ni),S.add(`DeleteBox`,Li),S.add(`Deletable`,Ri),S.add(`DeviceFlag`,Vi),S.add(`DragControls`,Gi),S.add(`DropListener`,sa),S.add(`Duplicatable`,da),S.add(`EventListEvent`,ut),S.add(`EventTrigger`,ha),S.add(`GltfExportBox`,Ca),S.add(`GltfExport`,wa),S.add(`VariantAction`,Ea),S.add(`ChangeTransformOnClick`,jn),S.add(`ChangeMaterialOnClick`,un),S.add(`SetActiveOnClick`,vn),S.add(`HideOnStart`,kn),S.add(`EmphasizeOnClick`,gn),S.add(`PlayAudioOnClick`,mn),S.add(`PlayAnimationOnClick`,Nn),S.add(`PreliminaryAction`,yn),S.add(`PreliminaryTrigger`,ir),S.add(`VisibilityAction`,Fn),S.add(`TapGestureTrigger`,Ln),S.add(`USDZExporter`,Zn),S.add(`Fog`,Aa),S.add(`BoxGizmo`,Gn),S.add(`GridHelper`,Ma),S.add(`GroundProjectedEnv`,Vt),S.add(`UsageMarker`,Pi),S.add(`Interactable`,Fi),S.add(`FixedJoint`,Fa),S.add(`HingeJoint`,Ia),S.add(`Light`,Y),S.add(`LODGroup`,Xa),S.add(`LookAtConstraint`,He),S.add(`NeedleMenu`,ln),S.add(`NestedGltf`,$a),S.add(`Networking`,no),S.add(`OffsetConstraint`,io),S.add(`CameraTargetReachedEvent`,D),S.add(`OrbitControls`,Le),S.add(`ParticleSystemRenderer`,vr),S.add(`ParticleSystem`,yr),S.add(`Attractor`,oo),S.add(`PlayerColor`,so),S.add(`Antialiasing`,wr),S.add(`BloomEffect`,Dr),S.add(`ChromaticAberration`,kr),S.add(`ColorAdjustments`,Sr),S.add(`DepthOfField`,Nr),S.add(`EffectWrapper`,Er),S.add(`PixelationEffect`,xr),S.add(`ScreenSpaceAmbientOcclusion`,jr),S.add(`ScreenSpaceAmbientOcclusionN8`,Or),S.add(`SharpeningEffect`,br),S.add(`TiltShiftEffect`,Tr),S.add(`ToneMappingEffect`,Cr),S.add(`Vignette`,Ar),S.add(`Volume`,Mr),S.add(`ReflectionProbe`,_n),S.add(`Renderer`,Vn),S.add(`MeshRenderer`,_r),S.add(`SkinnedMeshRenderer`,gr),S.add(`Rigidbody`,E),S.add(`SceneSwitcher`,W),S.add(`ScreenCapture`,So),S.add(`SeeThrough`,Eo),S.add(`ShadowCatcher`,ko),S.add(`RemoteSkybox`,vi),S.add(`SmoothFollow`,jo),S.add(`SpatialTriggerReceiver`,Lo),S.add(`SpatialTrigger`,Ro),S.add(`SpectatorCamera`,Ho),S.add(`SplineContainer`,Qo),S.add(`SplineWalker`,ts),S.add(`SpriteRenderer`,xn),S.add(`SyncedCamera`,ss),S.add(`SyncedRoom`,ds),S.add(`SyncedTransform`,rt),S.add(`TestRunner`,ms),S.add(`TestSimulateUserData`,hs),S.add(`PlayableDirector`,ti),S.add(`SignalReceiver`,Rr),S.add(`AnimationTrackHandler`,Gr),S.add(`AudioTrackHandler`,qr),S.add(`MarkerTrackHandler`,Jr),S.add(`SignalTrackHandler`,Yr),S.add(`ControlTrackHandler`,Xr),S.add(`TransformGizmo`,vs),S.add(`BaseUIComponent`,en),S.add(`UIRootComponent`,ot),S.add(`Button`,B),S.add(`Canvas`,Ut),S.add(`CanvasGroup`,Rt),S.add(`EventSystem`,Pe),S.add(`Graphic`,wt),S.add(`MaskableGraphic`,Ct),S.add(`Image`,Et),S.add(`RawImage`,pt),S.add(`InputField`,Ft),S.add(`VerticalLayoutGroup`,bt),S.add(`HorizontalLayoutGroup`,Jt),S.add(`GridLayoutGroup`,Mt),S.add(`Outline`,ft),S.add(`ObjectRaycaster`,C),S.add(`GraphicRaycaster`,jt),S.add(`SpatialGrabRaycaster`,Ot),S.add(`RectTransform`,nn),S.add(`SpatialHtml`,Kt),S.add(`Text`,Bt),S.add(`EnvironmentScene`,ii),S.add(`LookAt`,bs),S.add(`OpenURL`,Cs),S.add(`VideoPlayer`,Z),S.add(`Voip`,En),S.add(`ClickThrough`,ws),S.add(`CursorFollow`,Ds),S.add(`HoverAnimation`,As),S.add(`ScrollFollow`,Fs),S.add(`ViewBox`,Ks),S.add(`Avatar`,Jn),S.add(`XRControllerFollow`,Un),S.add(`XRControllerModel`,mr),S.add(`XRControllerMovement`,On),S.add(`TeleportTarget`,fn),S.add(`WebARCameraBackground`,tr),S.add(`WebARSessionRoot`,Tn),S.add(`WebXR`,hr),S.add(`AvatarMarker`,Yn),S.add(`WebXRImageTracking`,or),S.add(`WebXRPlaneTracking`,$n),S.add(`XRRig`,ur),S.add(`XRFlag`,ar),S.add(`PlayerSync`,Cn),S.add(`PlayerState`,qn),S.add(`PresentationMode`,qs)}export{Yi as $,Xa as A,zr as At,Ca as B,So as C,qr as Ct,io as D,Ur as Dt,oo as E,Yr as Et,Ma as F,ha as G,va as H,Aa as I,ea as J,da as K,Da as L,Y as M,Rr as Mt,Fa as N,Lr as Nt,no as O,Br as Ot,Ia as P,Zi as Q,Ea as R,Eo as S,Gr as St,so as T,Jr as Tt,ya as U,ba as V,ga as W,ta as X,na as Y,$i as Z,Ho as _,mi as _t,Ds as a,Ri as at,jo as b,ii as bt,bs as c,Pi as ct,hs as d,ji as dt,Ji as et,ds as f,Di as ft,Zo as g,vi as gt,Qo as h,xi as ht,As as i,Vi as it,Ja as j,Ir as jt,$a as k,Vr as kt,vs as l,Ni as lt,ts as m,Ci as mt,Ks as n,Gi as nt,ws as o,Li as ot,ss as p,wi as pt,sa as q,Fs as r,K as rt,Cs as s,Fi as st,Js as t,Xi as tt,ms as u,Ai as ut,Ro as v,W as vt,Z as w,Xr as wt,ko as x,ti as xt,Lo as y,ci as yt,wa as z}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine.extras.B9pwA3ET.js.gz b/Needle/MenuScene/dist/assets/needle-engine.extras.B9pwA3ET.js.gz deleted file mode 100644 index 2835943..0000000 Binary files a/Needle/MenuScene/dist/assets/needle-engine.extras.B9pwA3ET.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/needle-engine.extras.dI9yZHT7.js b/Needle/MenuScene/dist/assets/needle-engine.extras.dI9yZHT7.js deleted file mode 100644 index 11ca0dd..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine.extras.dI9yZHT7.js +++ /dev/null @@ -1,54 +0,0 @@ -import{A as e,Fr as t,Jt as n,X as r,cr as i,ft as a,gn as o,kr as s,xr as c}from"./three@0.169.19.js";import{Ka as l,Mt as u,Ua as d,Vn as f,Xi as p,Zi as m,aa as ee,co as h,eo as te,gr as g,mt as ne,na as re,ot as ie,qr as ae,ra as oe,z as _}from"./needle-engine-ui.D3ZoIJG5.js";import{B as se}from"./postprocessing.Wy71DpiM.js";var v=h(`debugpost`),y=null;function ce(e){y=e}function le(e){let t=e.gameObject;for(;t;){for(let e of u(t))if(e.isPostProcessingManager===!0)return e;t=t.parent}return null}function ue(e){let t=le(e);if(!t)if(y){v&&console.warn(`Adding postprocessing manager to the scene.`);let n=e.scene;t=ne(n,y)}else l()&&console.warn(`No post processing manager found`);return t}var b={AT_START:-1e4,NormalPass:0,DepthDownsamplingPass:10,SSAO:20,SMAA:30,TiltShift:40,DepthOfField:50,ChromaticAberration:60,Bloom:70,Vignette:80,Pixelation:90,ToneMapping:100,HueSaturation:110,BrightnessContrast:120,Sharpening:130,AT_END:1e4},x=null;function de(e){if(v===`verbose`&&console.debug(`Before ordering effects`,[...e]),!x){x=new Map,x.set(g.POSTPROCESSING.MODULE.NormalPass,b.NormalPass),x.set(g.POSTPROCESSING.MODULE.DepthDownsamplingPass,b.DepthDownsamplingPass),x.set(g.POSTPROCESSING.MODULE.SMAAEffect,b.SMAA),x.set(g.POSTPROCESSING.MODULE.SSAOEffect,b.SSAO);let e=g.POSTPROCESSING_AO.MAYBEMODULE;e&&(x.set(e.N8AOPostPass,b.SSAO),x.set(e.N8AOPass,b.SSAO)),x.set(g.POSTPROCESSING.MODULE.TiltShiftEffect,b.TiltShift),x.set(g.POSTPROCESSING.MODULE.DepthOfFieldEffect,b.DepthOfField),x.set(g.POSTPROCESSING.MODULE.ChromaticAberrationEffect,b.ChromaticAberration),x.set(g.POSTPROCESSING.MODULE.BloomEffect,b.Bloom),x.set(g.POSTPROCESSING.MODULE.SelectiveBloomEffect,b.Bloom),x.set(g.POSTPROCESSING.MODULE.VignetteEffect,b.Vignette),x.set(g.POSTPROCESSING.MODULE.PixelationEffect,b.Pixelation),x.set(g.POSTPROCESSING.MODULE.ToneMappingEffect,b.ToneMapping),x.set(g.POSTPROCESSING.MODULE.HueSaturationEffect,b.HueSaturation),x.set(g.POSTPROCESSING.MODULE.BrightnessContrastEffect,b.BrightnessContrast)}e.sort((e,t)=>{let n=typeof e.priority==`number`?e.priority:x.get(e.effect.constructor)??-1/0,r=typeof t.priority==`number`?t.priority:x.get(t.effect.constructor)??-1/0;return n===-1/0?(v&&console.warn(`Unknown effect found: `,e.constructor.name,e),1):r===-1/0?(v&&console.warn(`Unknown effect found: `,t.constructor.name,t),-1):n-r}),v===`verbose`&&console.debug(`After ordering effects`,[...e])}var fe=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},pe=h(`debugpost`),S=class{isVolumeParameter=!0;constructor(e){e!==void 0&&this.initialize(e)}_isInitialized=!1;get isInitialized(){return this._isInitialized}initialize(e){e!==void 0&&(this._value=e,this._defaultValue=e,this._valueRaw=e,this._isInitialized=!0)}get overrideState(){return this._active}set overrideState(e){if(this._active===e)return;this._active=e;let t=e?this._valueRaw:this._defaultValue;this.processValue(t,!0)}_active=!0;get value(){return this._valueRaw}set value(e){this.isInitialized||this.initialize(e),this.processValue(e,!1)}_value;_valueRaw;set defaultValue(e){this._defaultValue=e}_defaultValue=void 0;__init(){this.processValue(this._valueRaw,!0)}valueProcessor;onValueChanged;processValue(e,t){if(e==null||!t&&this.testIfValueChanged(e)===!1)return;let n=this._value;pe&&typeof n==`number`&&typeof e==`number`&&(n?.toFixed(4),e?.toFixed(4)),!this._active&&this._defaultValue!==void 0?(this._value=this._defaultValue,e=this._defaultValue,this._valueRaw=e):(this._valueRaw=e,this._active&&this.valueProcessor&&(e=this.valueProcessor(e)),this._value=e),this.onValueChanged&&this.onValueChanged(e,n,this)}testIfValueChanged(e){return this._valueRaw!==e}};fe([p()],S.prototype,`overrideState`,null),fe([p()],S.prototype,`value`,null),new class extends ae{constructor(){super([S])}onSerialize(e,t){}onDeserialize(e,t){let n=t.target,r=t.path,i;if(n&&r&&(i=n[r]),(typeof i!=`object`||typeof i==`object`&&i.isVolumeParameter!==!0)&&(i=new S),typeof e==`object`&&`value`in e){let t=e.value;i.initialize(t),i.overrideState=e.overrideState}else i.value=e;return i}};var me=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},C=h(`debugpost`),w=class extends ie{get isPostProcessingEffect(){return!0}order=void 0;constructor(e=void 0){if(super(),e)for(let t of Object.keys(e)){let n=e[t],r=this[t];r instanceof S?r.initialize(n):r!==void 0&&(this[t]=n)}}active=!0;_manager=null;onEnable(){super.onEnable(),C&&console.warn(`Enable`,this.constructor.name+(this.__internalDidAwakeAndStart?``:` (awake)`)),this.__internalDidAwakeAndStart&&(this.active=!0),this.onEffectEnabled()}onDisable(){super.onDisable(),C&&console.warn(`Disable`,this.constructor.name),this._manager?.removeEffect(this),this.active=!1}onEffectEnabled(e){e&&e.isPostProcessingManager===!0?this._manager=e:this._manager||=ue(this),this._manager.addEffect(this),this._manager.dirty=!0}init(){}_result;_postprocessingContext=null;get postprocessingContext(){return this._postprocessingContext}apply(e){return this._postprocessingContext=e,this._result||=(this.initParameters(),this.onCreateEffect?.call(this)),this._result&&this.initParameters(),this._result}unapply(){}dispose(){C&&console.warn(`DISPOSE`,this),this._result&&(Array.isArray(this._result)?this._result.forEach(e=>e.dispose()):this._result.dispose()),this._result=void 0}initParameters(){let e=Object.keys(this);for(let t of e){let e=this[t];e instanceof S&&e.__init()}}onEditorModification(e){let t=e.propertyName;if(this[t]instanceof S){let n=e.value;return this[t].value=n,!0}}};me([p()],w.prototype,`active`,void 0);var he=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ge=h(`debugpost`),_e={};function T(e,t){_e[e]=t}function ve(e){return e.__type in _e?_e[e.__type]:(ge&&e.__type&&console.warn(`Unknown postprocessing type`,e.__type,e),w)}var ye=class{components=[];__init(e){this.components?.forEach(t=>{t.gameObject===void 0&&e.gameObject.addComponent(t),t.init()})}addEffect(e){this.components.push(e)}removeEffect(e){let t=this.components.indexOf(e);t>=0&&this.components.splice(t,1)}};he([m([e=>ve(e),w])],ye.prototype,`components`,void 0);var be=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},xe=h(`debugpost`),Se;(function(e){e[e.LOW=0]=`LOW`,e[e.MEDIUM=1]=`MEDIUM`,e[e.HIGH=2]=`HIGH`,e[e.ULTRA=3]=`ULTRA`})(Se||={});var Ce=class extends w{get typeName(){return`Antialiasing`}preset=new S(2);onCreateEffect(){let e=new g.POSTPROCESSING.MODULE.SMAAEffect({preset:this.preset?.value??g.POSTPROCESSING.MODULE.SMAAPreset.HIGH,edgeDetectionMode:g.POSTPROCESSING.MODULE.EdgeDetectionMode.LUMA});return this.preset.onValueChanged=t=>{xe&&console.log(`Antialiasing preset changed to`,t),e.applyPreset(t)},e}};be([p(S)],Ce.prototype,`preset`,void 0),T(`Antialiasing`,Ce);var we=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},E=class e extends w{static useSelectiveBloom=!1;get typeName(){return`Bloom`}threshold=new S(.9);intensity=new S(1);scatter=new S(.7);selectiveBloom;init(){this.threshold.valueProcessor=e=>e,this.intensity.valueProcessor=e=>e,this.scatter.valueProcessor=e=>e}onCreateEffect(){let t;if(this.selectiveBloom??=e.useSelectiveBloom,this.selectiveBloom){let e=t=new g.POSTPROCESSING.MODULE.SelectiveBloomEffect(this.context.scene,this.context.mainCamera,{blendFunction:g.POSTPROCESSING.MODULE.BlendFunction.ADD,mipmapBlur:!0,luminanceThreshold:this.threshold.value,luminanceSmoothing:this.scatter.value,radius:.85,intensity:this.intensity.value});e.inverted=!0}else t=new g.POSTPROCESSING.MODULE.BloomEffect({blendFunction:g.POSTPROCESSING.MODULE.BlendFunction.ADD,mipmapBlur:!0,luminanceThreshold:this.threshold.value,luminanceSmoothing:this.scatter.value,radius:.85,intensity:this.intensity.value});return this.intensity.onValueChanged=e=>{t.intensity=e},this.threshold.onValueChanged=e=>{t.luminanceMaterial.threshold=e**2.2},this.scatter.onValueChanged=e=>{t.luminancePass.enabled=!0,t.luminanceMaterial.smoothing=e,t.mipmapBlurPass&&(t.mipmapBlurPass.radius=n.lerp(.1,.9,e))},t}};we([p(S)],E.prototype,`threshold`,void 0),we([p(S)],E.prototype,`intensity`,void 0),we([p(S)],E.prototype,`scatter`,void 0),T(`Bloom`,E);var Te=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},D=class extends w{get typeName(){return`ChromaticAberration`}intensity=new S(0);onCreateEffect(){let e=new g.POSTPROCESSING.MODULE.ChromaticAberrationEffect;return e.offset=new s(0,0),e.radialModulation=!0,e.modulationOffset=.15,this.intensity.valueProcessor=e=>e*.02,this.intensity.onValueChanged=t=>{e.offset.x=-t,e.offset.y=t},e}};Te([p(S)],D.prototype,`intensity`,void 0),T(`ChromaticAberration`,D);var O;(function(e){e[e.None=0]=`None`,e[e.Neutral=1]=`Neutral`,e[e.ACES=2]=`ACES`,e[e.AgX=3]=`AgX`,e[e.KhronosNeutral=4]=`KhronosNeutral`})(O||={});var Ee=new Map;function k(e){switch(e){case O.None:return 1;case O.Neutral:return 2;case O.ACES:return 4;case O.AgX:return 6;case O.KhronosNeutral:return 7;default:return Ee.has(e)||(Ee.set(e,!0),console.warn(`[Postprocessing] Unknown tone mapping mode`,e)),7}}function De(e){switch(e){case 1:return O.None;case 4:return O.ACES;case 6:return O.AgX;case 7:return O.Neutral;case 2:return O.Neutral;default:return O.None}}function A(e){switch(e){case 1:return g.POSTPROCESSING.MODULE.ToneMappingMode.LINEAR;case 4:return g.POSTPROCESSING.MODULE.ToneMappingMode.ACES_FILMIC;case 6:return g.POSTPROCESSING.MODULE.ToneMappingMode.AGX;case 7:return g.POSTPROCESSING.MODULE.ToneMappingMode.NEUTRAL;case 2:return g.POSTPROCESSING.MODULE.ToneMappingMode.REINHARD;default:return g.POSTPROCESSING.MODULE.ToneMappingMode.LINEAR}}var Oe=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},j=h(`debugpost`),M=class extends w{get typeName(){return`ToneMapping`}mode=new S(void 0);exposure=new S(1);setMode(e){let t=O[e];return t===void 0?(console.error(`[PostProcessing] Invalid ToneMapping mode`,e),this):(this.mode.value=t,this)}get isToneMapping(){return!0}onEffectEnabled(){let e=le(this);e&&super.onEffectEnabled(e)}_tonemappingEffect=null;onCreateEffect(){if(this.mode.isInitialized==0){let e=De(this.context.renderer.toneMapping);j&&console.log(`[PostProcessing] Initializing ToneMapping mode to renderer.toneMapping`,this.context.renderer.toneMapping+` → `+e),this.mode.initialize(e)}this._tonemappingEffect?.dispose();let e=k(this.mode.value),t=this._tonemappingEffect=new g.POSTPROCESSING.MODULE.ToneMappingEffect({mode:A(e)});return this.mode.onValueChanged=n=>{typeof n==`string`?(n=f(n),t.mode=A(n)):t.mode=A(k(n)),t.name=`ToneMapping (`+O[n]+`)`,j&&console.log(`[PostProcessing] ToneMapping mode changed to`,O[n],e,t.mode)},j&&console.log(`[PostProcessing] Use ToneMapping`,O[this.mode.value],e,t.mode,`renderer.tonemapping: `+this.context.renderer.toneMapping),t}onBeforeRender(){if(this._tonemappingEffect&&this.postprocessingContext?.handler.getEffectIsActive(this._tonemappingEffect)&&(this.mode.overrideState&&(this.context.renderer.toneMapping=k(this.mode.value)),this.exposure.overrideState&&this.exposure.value!==void 0)){let e=Math.max(0,this.exposure.value);this.context.renderer.toneMappingExposure=e}}};Oe([p(S)],M.prototype,`mode`,void 0),Oe([p(S)],M.prototype,`exposure`,void 0),T(`Tonemapping`,M);var N=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},P=class extends w{get typeName(){return`ColorAdjustments`}remap=!0;postExposure=new S(1);contrast=new S(0);hueShift=new S(0);saturation=new S(0);init(){this.postExposure.valueProcessor=e=>(this.remap&&(e=2**e),e),this.contrast.valueProcessor=e=>{if(!this.remap)return e;let t=1;return e>0?t=200:e<0&&(t=100),e/t},this.contrast.defaultValue=0,this.hueShift.valueProcessor=e=>this.remap?Math.PI*e/180:e,this.hueShift.defaultValue=0,this.saturation.valueProcessor=e=>this.remap?e<0?e/100:e/(100*Math.PI):e,this.saturation.defaultValue=0}onCreateEffect(){let e=[],t=this.postprocessingContext?.components.find(e=>e instanceof M);t||(t=new M,this.postprocessingContext?.components.push(t)),this.postExposure.onValueChanged=e=>{this.postExposure.overrideState&&t?t.exposure.value=e:console.warn(`[PostProcessing] PostExposure is set to override but no ToneMappingEffect found in the postprocessing stack. Please add a ToneMappingEffect to your postprocessing stack to use PostExposure.`)};let n=new g.POSTPROCESSING.MODULE.BrightnessContrastEffect;this.contrast.onValueChanged=e=>n.contrast=e;let r=new g.POSTPROCESSING.MODULE.HueSaturationEffect;return this.hueShift.onValueChanged=e=>r.hue=e,this.saturation.onValueChanged=e=>r.saturation=e,e.push(n),e.push(r),e}};N([p(S)],P.prototype,`postExposure`,void 0),N([p(S)],P.prototype,`contrast`,void 0),N([p(S)],P.prototype,`hueShift`,void 0),N([p(S)],P.prototype,`saturation`,void 0),T(`ColorAdjustments`,P);var F=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ke;(function(e){e[e.Off=0]=`Off`,e[e.Gaussian=1]=`Gaussian`,e[e.Bokeh=2]=`Bokeh`})(ke||={});var Ae=h(`debugpost`),I=class extends w{get typeName(){return`DepthOfField`}mode;focusDistance=new S(1);focalLength=new S(.2);aperture=new S(20);gaussianMaxRadius=new S;resolutionScale=new S(1/window.devicePixelRatio);bokehScale=new S;init(){this.focalLength.valueProcessor=e=>{let t=e/300;return d.lerp(2,.01,t)},this.aperture.valueProcessor=e=>{let t=1-e/32;return d.lerp(1,20,t)}}onCreateEffect(){if(this.mode===ke.Off){Ae&&console.warn(`DepthOfField: Mode is set to Off`);return}let e=new g.POSTPROCESSING.MODULE.DepthOfFieldEffect(this.context.mainCamera,{worldFocusRange:.2,focalLength:1,bokehScale:20,resolutionScale:this.resolutionScale.value});return this.focusDistance.onValueChanged=t=>{e.cocMaterial.worldFocusDistance=t},this.focalLength.onValueChanged=t=>e.cocMaterial.worldFocusRange=t,this.aperture.onValueChanged=t=>e.bokehScale=t,this.resolutionScale&&(this.resolutionScale.onValueChanged=t=>e.resolution.scale=t),[e]}unapply(){}};F([p()],I.prototype,`mode`,void 0),F([p(S)],I.prototype,`focusDistance`,void 0),F([p(S)],I.prototype,`focalLength`,void 0),F([p(S)],I.prototype,`aperture`,void 0),F([p(S)],I.prototype,`gaussianMaxRadius`,void 0),F([p(S)],I.prototype,`resolutionScale`,void 0),F([p(S)],I.prototype,`bokehScale`,void 0),T(`DepthOfField`,I);var je=class extends w{effect;constructor(e){super(),this.effect=e}get typeName(){return this.effect.constructor.name}onCreateEffect(){return this.effect}},Me=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},L=class extends w{get typeName(){return`PixelationEffect`}granularity=new S(10);onCreateEffect(){let e=new g.POSTPROCESSING.MODULE.PixelationEffect;return this.granularity.onValueChanged=t=>{e.granularity=t},e}};Me([p(S)],L.prototype,`granularity`,void 0),T(`PixelationEffect`,L);var R=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},z=class extends w{get typeName(){return`ScreenSpaceAmbientOcclusion`}intensity=new S(2);falloff=new S(1);samples=new S(9);color=new S(new e(0,0,0));luminanceInfluence=new S(.7);onBeforeRender(){if(this._ssao&&this.context.mainCamera instanceof o){let e=this.context.mainCamera.far-this.context.mainCamera.near;this._ssao.ssaoMaterial.worldDistanceFalloff=e*.01,this._ssao.ssaoMaterial.worldDistanceThreshold=this.context.mainCamera.far}}_ssao;onCreateEffect(){let t=this.context.mainCamera,n=new g.POSTPROCESSING.MODULE.NormalPass(this.context.scene,t),r=new g.POSTPROCESSING.MODULE.DepthDownsamplingPass({normalBuffer:n.texture,resolutionScale:.5}),i=this._ssao=new g.POSTPROCESSING.MODULE.SSAOEffect(t,n.texture,{normalDepthBuffer:r.texture,worldDistanceThreshold:1,worldDistanceFalloff:1,worldProximityThreshold:.1,worldProximityFalloff:2,intensity:1,blendFunction:g.POSTPROCESSING.MODULE.BlendFunction.MULTIPLY,luminanceInfluence:.5});this.intensity.onValueChanged=e=>{i.intensity=e},this.falloff.onValueChanged=e=>{i.ssaoMaterial.radius=e*.1},this.samples.onValueChanged=e=>{i.ssaoMaterial.samples=e},this.color.onValueChanged=t=>{i.color||=new e,i.color.copy(t)},this.luminanceInfluence.onValueChanged=e=>{i.luminanceInfluence=e};let a=[];return a.push(n),a.push(r),a.push(i),a}};R([p(S)],z.prototype,`intensity`,void 0),R([p(S)],z.prototype,`falloff`,void 0),R([p(S)],z.prototype,`samples`,void 0),R([p(S)],z.prototype,`color`,void 0),R([p(S)],z.prototype,`luminanceInfluence`,void 0),T(`ScreenSpaceAmbientOcclusion`,z);var B=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ne=h(`debugN8AO`),V;(function(e){e[e.Performance=0]=`Performance`,e[e.Low=1]=`Low`,e[e.Medium=2]=`Medium`,e[e.High=3]=`High`,e[e.Ultra=4]=`Ultra`})(V||={});var H=class extends w{get typeName(){return`ScreenSpaceAmbientOcclusionN8`}get pass(){return this._ssao}gammaCorrection=!0;aoRadius=new S(1);falloff=new S(1);intensity=new S(1);color=new S(new e(0,0,0));screenspaceRadius=!1;quality=V.Medium;_ssao;onValidate(){this._ssao&&(this._ssao.setQualityMode(V[this.quality]),this._ssao.configuration.gammaCorrection=this.gammaCorrection,this._ssao.configuration.screenSpaceRadius=this.screenspaceRadius)}onCreateEffect(){let n=this.context.mainCamera,r=this.context.domWidth,i=this.context.domHeight,a=this._ssao=new g.POSTPROCESSING_AO.MODULE.N8AOPostPass(this.context.scene,n,r,i);a.name=`SSAO_N8`;let o=V[this.quality];if(a.setQualityMode(o),a.configuration.transparencyAware=!1,a.configuration.halfRes=window.devicePixelRatio>1,a.effectCompositerQuad?.material){let e=a.effectCompositerQuad.material;e.fragmentShader=e.fragmentShader.replace(`if (depth == 1.0) { - texel = vec4(0.0, 0.0, 0.0, 1.0);`,`if (depth == 1.0) { - gl_FragColor = sceneTexel; - return;`),e.needsUpdate=!0}let s=new t(r,i);return a.configuration.beautyRenderTarget=s,a.configuration.autoRenderBeauty=!1,a.configuration.gammaCorrection=this.gammaCorrection,a.configuration.screenSpaceRadius=this.screenspaceRadius,Ne&&(a.enableDebugMode(),console.log(a),setInterval(()=>{console.log(`SSAO`,a.lastTime)},1e3),setInterval(()=>{console.log(`SSAO`,a.enabled,{ssao:a,autoRenderBeauty:a.configuration.autoRenderBeauty})},4e3)),this.intensity.onValueChanged=e=>{a.configuration.intensity=e},this.falloff.onValueChanged=e=>{a.configuration.distanceFalloff=e},this.aoRadius.onValueChanged=e=>{a.configuration.aoRadius=e},this.color.onValueChanged=t=>{a.color||=new e,a.configuration.color.copy(t)},a}};B([_(),p()],H.prototype,`gammaCorrection`,void 0),B([p(S)],H.prototype,`aoRadius`,void 0),B([p(S)],H.prototype,`falloff`,void 0),B([p(S)],H.prototype,`intensity`,void 0),B([p(S)],H.prototype,`color`,void 0),B([_(),p()],H.prototype,`screenspaceRadius`,void 0),B([_(),p()],H.prototype,`quality`,void 0),T(`ScreenSpaceAmbientOcclusionN8`,H);var Pe=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},U=class extends w{get typeName(){return`Sharpening`}order=b.Sharpening;_effect;onCreateEffect(){return this._effect??=new(Fe()),this.effect}get effect(){return this._effect}set amount(e){this._amount=e,this._effect&&(this._effect.uniforms.get(`amount`).value=e)}get amount(){return this._effect?this._effect.uniforms.get(`amount`).value:this._amount}_amount=1;set radius(e){this._radius=e,this._effect&&(this._effect.uniforms.get(`radius`).value=e)}get radius(){return this._effect?this._effect.uniforms.get(`radius`).value:this._radius}_radius=1};Pe([p()],U.prototype,`amount`,null),Pe([p()],U.prototype,`radius`,null);function Fe(){class e extends g.POSTPROCESSING.MODULE.Effect{constructor(){super(`Sharpening`,` - uniform sampler2D tDiffuse; - uniform float amount; - uniform float radius; - - void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) { - float tx = 1.0 / resolution.x; - float ty = 1.0 / resolution.y; - vec2 texelSize = vec2(tx, ty); - - vec4 blurred = vec4(0.0); - float total = 0.0; - - for (float x = -radius; x <= radius; x++) { - for (float y = -radius; y <= radius; y++) { - vec2 offset = vec2(x, y) * texelSize; - vec4 diffuse = texture2D(tDiffuse, uv + offset); - float weight = exp(-length(offset) * amount); - blurred += diffuse * weight; - total += weight; - } - } - - if (total > 0.0) { - blurred /= total; - } - - // Calculate the sharpened color using inputColor - vec4 sharp = inputColor + clamp(inputColor - blurred, 0.0, 1.0) * amount; - // Keep original alpha - sharp.a = inputColor.a; - - // Ensure the sharp color does not go below 0 or above 1 - // This means: sharpening must happen AFTER tonemapping. - sharp = clamp(sharp, 0.0, 1.0); - - outputColor = sharp; - } - - `,{vertexShader:` - void mainSupport() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); - } - `,blendFunction:g.POSTPROCESSING.MODULE.BlendFunction.NORMAL,uniforms:new Map([[`amount`,new c(1)],[`radius`,new c(1)]]),attributes:se.CONVOLUTION})}}return e}var W=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},G=class extends w{get typeName(){return`TiltShiftEffect`}offset=new S(0);rotation=new S(0);focusArea=new S(.4);feather=new S(.3);kernelSize=new S(2);resolutionScale=new S(1/window.devicePixelRatio);init(){this.offset.defaultValue=0,this.rotation.defaultValue=0,this.focusArea.defaultValue=.4,this.feather.defaultValue=.3,this.kernelSize.defaultValue=g.POSTPROCESSING.MODULE.KernelSize.MEDIUM,this.resolutionScale.defaultValue=1/window.devicePixelRatio}onCreateEffect(){let e=new g.POSTPROCESSING.MODULE.TiltShiftEffect({kernelSize:g.POSTPROCESSING.MODULE.KernelSize.VERY_LARGE,offset:this.offset.value,rotation:this.rotation.value,focusArea:this.focusArea.value,feather:this.feather.value});return this.offset.onValueChanged=t=>e.offset=t,this.rotation.onValueChanged=t=>e.rotation=t,this.focusArea.onValueChanged=t=>e.focusArea=t,this.feather.onValueChanged=t=>e.feather=t,this.kernelSize.onValueChanged=t=>e.blurPass.kernelSize=t,this.resolutionScale.onValueChanged=t=>e.resolution.scale=t/window.devicePixelRatio,e}};W([p(S)],G.prototype,`offset`,void 0),W([p(S)],G.prototype,`rotation`,void 0),W([p(S)],G.prototype,`focusArea`,void 0),W([p(S)],G.prototype,`feather`,void 0),W([p(S)],G.prototype,`kernelSize`,void 0),W([p(S)],G.prototype,`resolutionScale`,void 0),T(`TiltShiftEffect`,G);var K=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},q=class extends w{get typeName(){return`Vignette`}color=new S({r:0,g:0,b:0,a:1});intensity=new S(0);center=new S({x:.5,y:.5});init(){this.color.defaultValue={r:0,g:0,b:0,a:1},this.intensity.defaultValue=0,this.center.defaultValue={x:.5,y:.5}}onCreateEffect(){let e=new g.POSTPROCESSING.MODULE.VignetteEffect;return this.intensity.onValueChanged=t=>{e.offset=t,this.updateDarkness(e)},this.color.onValueChanged=t=>{this.updateDarkness(e)},e}updateDarkness(e){e.darkness=this.intensity.value}};K([p(S)],q.prototype,`color`,void 0),K([p(S)],q.prototype,`intensity`,void 0),K([p(S)],q.prototype,`center`,void 0),T(`Vignette`,q),globalThis.NEEDLE_USE_POSTPROCESSING=globalThis.NEEDLE_USE_POSTPROCESSING===void 0?!0:globalThis.NEEDLE_USE_POSTPROCESSING;var J=h(`debugpost`),Ie=Symbol(`needle:postprocessing-handler`),Y=Symbol(`needle:previous-autoclear-state`),X=Symbol(`needle:previous-tone-mapping`),Le=class e{_composer=null;_lastVolumeComponents;_effects=[];getEffectIsActive(e){return e?this._isActive&&this._effects.some(t=>t.effect===e):!1}get isActive(){return this._isActive}get composer(){return this._composer}_isActive=!1;context;constructor(e){this.context=e}apply(e){return`env`in import.meta,this._isActive=!0,this.onApply(this.context,e)}unapply(e=!0){if(J&&console.log(`Unapplying postprocessing effects`),this._isActive=!1,this._lastVolumeComponents){for(let e of this._lastVolumeComponents)e.unapply();this._lastVolumeComponents.length=0}let t=this.context;t[Ie]===this&&(delete t[Ie],typeof t.renderer[Y]==`boolean`&&(t.renderer.autoClear=t.renderer[Y]),typeof t.renderer[X]==`number`&&(t.renderer.toneMapping=t.renderer[X])),this._composer?.removeAllPasses(),e&&this._composer?.dispose(),t.composer===this._composer&&(t.composer=null),this._adaptiveDPR_OverrideActive&&(this._adaptiveDPR_OverrideActive=!1,t.devicePixelRatio=`auto`),this.handleDevicePixelRatio()}dispose(){this.unapply(!0);for(let e of this._effects)e.effect.dispose();this._effects.length=0,this._composer=null}async onApply(e,t){if(!t)return;await Promise.all([g.POSTPROCESSING.load(),g.POSTPROCESSING_AO.load()]),e[Ie]=this,J&&console.log(`Apply Postprocessing Effects`,t),this._lastVolumeComponents=[...t],this._effects.length=0;let n={handler:this,components:this._lastVolumeComponents};for(let t=0;t1){let e=Math.max(1,Math.round((a-o)*10)/10);e=59&&r>1&&n-this._adaptiveDPR_LastDecreaseTime>10&&aa?(this._adaptiveDPR_LastChangeTime=n,this.context.devicePixelRatio=e,J&&console.debug(`[PostProcessing] Increased pixel ratio from ${a.toFixed(1)} to ${e}`)):this._adaptiveDPR_OverrideActive&&(this._adaptiveDPR_OverrideActive=!1,this._adaptiveDPR_LastChangeTime=n,this.context.devicePixelRatio=`auto`,J&&console.debug(`[PostProcessing] Restored pixel ratio to auto`))}}applyEffects(e){if(this._anyPassHasDepth=!1,this._anyPassHasNormal=!1,this._hasSmaaEffect=!1,this._effects.length<=0)return;let n=e.mainCameraComponent,o=e.renderer,s=e.scene,c=n.threeCamera;if(typeof o[Y]==`boolean`&&(o.autoClear=o[Y]),o[Y]=o.autoClear,typeof o[X]==`number`&&(o.toneMapping=o[X]),o[X]=o.toneMapping,o.toneMapping!=0&&!this._effects.find(e=>e instanceof g.POSTPROCESSING.MODULE.ToneMappingEffect)){let e=new g.POSTPROCESSING.MODULE.ToneMappingEffect;e.name=`ToneMapping (${o.toneMapping})`,e.mode=A(o.toneMapping),this._effects.push({typeName:`ToneMapping`,effect:e,priority:b.ToneMapping})}this._composer||=new g.POSTPROCESSING.MODULE.EffectComposer(o,{frameBufferType:a,stencilBuffer:!0}),e.composer&&e.composer!==this._composer&&console.warn(`There's already an active EffectComposer in your scene: replacing it with a new one. This might cause unexpected behaviour. Make sure to only use one PostprocessingManager/Volume in your scene.`),e.composer=this._composer;let l=e.composer;l.setMainCamera(c),l.setRenderer(o),l.setMainScene(s),l.autoRenderToScreen=!0,l.multisampling=0;for(let e of l.passes)e.dispose();l.removeAllPasses();let u=new g.POSTPROCESSING.MODULE.RenderPass(s,c);u.name=`RenderPass`,u.mainScene=s,l.addPass(u);let d=u.render;this._customInputBuffer?.dispose(),this._customInputBuffer=null,u.render=(e,n,i,o,s)=>{if(n){if(this._multisampling<=0){d.call(u,e,n,i,o,s);return}n.samples=0,i&&(i.samples=0),(!this._customInputBuffer||this._customInputBuffer.width!==n.width||this._customInputBuffer.height!==n.height||this._customInputBuffer.samples!==this._multisampling||this._customInputBuffer.texture.format!==n.texture.format||this._customInputBuffer.texture.type!==1016)&&(this._customInputBuffer?.dispose(),this._customInputBuffer=new t(n.width,n.height,{format:n.texture.format,type:a,depthBuffer:n.depthBuffer,depthTexture:n.depthTexture?new r(n.width,n.height):void 0,stencilBuffer:n.stencilBuffer,samples:Math.max(0,this._multisampling),minFilter:n.texture.minFilter??1006,magFilter:n.texture.magFilter??1006,generateMipmaps:n.texture.generateMipmaps}),this._customInputBufferId++,this._customInputBuffer.texture.name=`CustomInputBuffer-${this._customInputBufferId}`,this._customInputBuffer.depthTexture&&n.depthTexture&&(this._customInputBuffer.depthTexture.format=n.depthTexture.format,this._customInputBuffer.depthTexture.type=n.depthTexture.type),J&&console.warn(`[PostProcessing] Input buffer created with size ${this._customInputBuffer.width}x${this._customInputBuffer.height} and samples ${this._customInputBuffer.samples}`)),d.call(u,e,this._customInputBuffer,i,o,s),e.setRenderTarget(n),ee.blit(this._customInputBuffer.texture,n,{renderer:e,depthTexture:this._customInputBuffer.depthTexture,depthWrite:!0,depthTest:!0})}};try{de(this._effects);let e=!1,t=null;for(let n=this._effects.length-1;n>=0;n--){let r=this._effects[n].effect;if(r instanceof g.POSTPROCESSING.MODULE.ToneMappingEffect){if(e){J&&console.warn(`[PostProcessing] Found multiple tonemapping effects in the scene: ${r.name} and ${t?.name}. Only the last one added will be used.`),this._effects.splice(n,1);continue}t=r,e=!0}}let n=[],r=!1;for(let e=0;ee.name).join(`, `)+`]`),this.createPassForMergeableEffects(n,l,c,s)),r=!0),n.push(i)):i instanceof g.POSTPROCESSING.MODULE.Pass?(r=!1,this.createPassForMergeableEffects(n,l,c,s),i.renderToScreen=!1,l.addPass(i)):(r=!1,this.createPassForMergeableEffects(n,l,c,s),l.addPass(i)))}this.createPassForMergeableEffects(n,l,c,s)}catch(e){console.error(`Error while applying postprocessing effects`,e),l.passes.forEach(e=>e.dispose()),l.removeAllPasses()}let f=!1;for(let e=l.passes.length-1;e>=0;e--){let t=l.passes[e],n=!1,r=!1;t.enabled&&(f||(n=!0,r=!0),f=!0),t.renderToScreen=r,t?.configuration===void 0?`autosetGamma`in t&&(t.autosetGamma=n):t.configuration.gammaCorrection=n,this._anyPassHasDepth||=t.needsDepthTexture}let p=l.depthTexture;p&&(p.source=new i({width:0,height:0}),p.needsUpdate=!0),this.handleDevicePixelRatio(),J&&console.log(`[PostProcessing] Passes →`,[...l.passes],` ---------------------------------- -• `+l.passes.map(e=>e.name||e.constructor.name+`*`).join(` -• `)+` -`),J&&this._onCreateEffectsDebug(this._composer,c)}createPassForMergeableEffects(e,t,n,r){if(e.length>0){let i=new g.POSTPROCESSING.MODULE.EffectPass(n,...e);i.name=e.map(e=>e.name).join(`, `),i.mainScene=r,i.enabled=!0,i.renderToScreen=!1,t.addPass(i),e.length=0}}handleDevicePixelRatio(){typeof this.context.devicePixelRatio==`number`&&this.context.requestSizeUpdate()}_menuEntry=null;_passIndices=null;_onCreateEffectsDebug(e,t){if(J===`passes`){let n=new g.POSTPROCESSING.MODULE.DepthEffect({blendFunction:g.POSTPROCESSING.MODULE.BlendFunction.NORMAL,inverted:!0});n.name=`Depth Effect`;let r=new g.POSTPROCESSING.MODULE.EffectPass(t,n);if(r.name=`Depth Effect Pass`,r.enabled=!1,e.passes.push(r),this._passIndices!==null){let t=[e.passes[0]];this._passIndices.length>0&&t.push(...this._passIndices.filter(e=>e!==0).map(t=>e.passes[t]).filter(e=>e)),t.length>0&&console.log(`[PostProcessing] Passes (selected) →`,t),e.passes.length=0;for(let n of t)n.enabled=!0,n.renderToScreen=!1,e.addPass(n)}let i=this.context.menu;if(i&&this._passIndices===null){this._menuEntry&&this._menuEntry.remove();let t=document.createElement(`select`);t.multiple=!0;let n=document.createElement(`option`);n.innerText=`Final Output`,n.value=`-1`,t.appendChild(n);for(let n of e.passes){let r=document.createElement(`option`);r.innerText=n.name,r.value=`${e.passes.indexOf(n)}`,r.title=n.name,t.appendChild(r)}i.appendChild(t),this._menuEntry=t,t.addEventListener(`change`,()=>{let e=Array.from(t.selectedOptions).map(e=>parseInt(e.value));e.length===1&&e[0]===-1?this._passIndices=null:this._passIndices=e,this.applyEffects(this.context)})}}}},Re=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Z=h(`debugpost`),Q=class extends ie{get isPostProcessingManager(){return!0}get effects(){return this._activeEffects}get dirty(){return this._isDirty}set dirty(e){this._isDirty=e}sharedProfile;multisampling=`auto`;adaptiveResolution=!0;addEffect(e){let t=e;return t instanceof w||(t=new je(t),typeof e.order==`number`&&(t.order=e.order)),t.gameObject===void 0&&this.gameObject.addComponent(t),this._effects.includes(t)?e:(this._effects.push(t),this._isDirty=!0,e)}removeEffect(e){let t=-1;if(t=e instanceof w?this._effects.indexOf(e):this._effects.findIndex(t=>t instanceof je&&t.effect===e),t!==-1)return this._effects.splice(t,1),this._isDirty=!0,e;if(e instanceof w){let t=this.sharedProfile?.components?.indexOf(e);t!==void 0&&t!==-1&&(this._isDirty=!0,this.sharedProfile?.components?.splice(t,1))}return e}_postprocessing;_activeEffects=[];_effects=[];markDirty(){this._isDirty=!0}awake(){Z&&(console.log(`PostprocessingManager Awake`,this),console.log(`Press P to toggle post processing`),window.addEventListener(`keydown`,e=>{e.key===`p`&&(this.enabled=!this.enabled,re(`Toggle PostProcessing `+this.name+`: Enabled=`+this.enabled),this.markDirty())})),this.sharedProfile?.__init(this)}_componentEnabledTime=-1;_multisampleAutoChangeTime=0;_multisampleAutoDecreaseTime=0;onEnable(){this._componentEnabledTime=this.context.time.realtimeSinceStartup,this._isDirty=!0}onDisable(){this._postprocessing?.unapply(),this._isDirty=!1}onBeforeRender(){if(!this.context.isInXR&&(this.context.mainCamera&&this._isDirty&&this.apply(),this.context.composer&&this._postprocessing&&this._postprocessing.composer===this.context.composer)){if(this.context.renderer.getContext().isContextLost()&&this.context.renderer.forceContextRestore(),this.context.composer.getRenderer()!==this.context.renderer&&this.context.composer.setRenderer(this.context.renderer),this.context.composer.setMainScene(this.context.scene),this.multisampling===`auto`)if(this._postprocessing&&this._postprocessing.hasSmaaEffect)this._postprocessing.multisampling!==0&&(this._postprocessing.multisampling=0,(Z||l())&&console.log(`[PostProcessing] multisampling is disabled because it's set to 'auto' on your PostprocessingManager/Volume component that also has an SMAA effect. - -If you need multisampling consider changing 'auto' to a fixed value (e.g. 4).`));else{let e=this.context.time.realtimeSinceStartup-this._multisampleAutoChangeTime;if(this.context.time.realtimeSinceStartup-this._componentEnabledTime>2&&e>.5){let t=this._postprocessing.multisampling;if(this._postprocessing.multisampling>0&&this.context.time.smoothedFps<=50){this._multisampleAutoChangeTime=this.context.time.realtimeSinceStartup,this._multisampleAutoDecreaseTime=this.context.time.realtimeSinceStartup;let e=this._postprocessing.multisampling*.5;e=Math.floor(e),e!=this._postprocessing.multisampling&&(this._postprocessing.multisampling=e),Z&&console.debug(`[PostProcessing] Reduced multisampling from ${t} to ${this._postprocessing.multisampling}`)}else if(e>1&&this.context.time.smoothedFps>=59&&this._postprocessing.multisampling10){this._multisampleAutoChangeTime=this.context.time.realtimeSinceStartup;let e=this._postprocessing.multisampling<=0?1:this._postprocessing.multisampling*2;e=Math.floor(e),e!==this._postprocessing.multisampling&&(this._postprocessing.multisampling=e),Z&&console.debug(`[PostProcessing] Increased multisampling from ${t} to ${this._postprocessing.multisampling}`)}}}else{let e=Math.max(0,Math.min(this.multisampling,this.context.renderer.capabilities.maxSamples));e!==this._postprocessing.multisampling&&(this._postprocessing.multisampling=e)}if(this._postprocessing.adaptivePixelRatio=this.adaptiveResolution,this._postprocessing.updateAdaptivePixelRatio(),this.context.mainCamera){let e=this.context.composer.passes;for(let t of e)if(t.mainCamera&&t.mainCamera!==this.context.mainCamera){this.context.composer.setMainCamera(this.context.mainCamera);break}}}}onDestroy(){this._postprocessing?.dispose()}_lastApplyTime;_rapidApplyCount=0;_isDirty=!1;apply(){if(Z&&console.log(`Apply PostProcessing "${this.name||`unnamed`}"`),l()&&(this._lastApplyTime!==void 0&&Date.now()-this._lastApplyTime<100&&(this._rapidApplyCount++,this._rapidApplyCount===5&&console.warn(`Detected rapid post processing modifications - this might be a bug`,this)),this._lastApplyTime=Date.now()),this._isDirty=!1,this._activeEffects.length=0,this.sharedProfile?.components){let e=this.sharedProfile.components;for(let t of e)t.active&&t.enabled&&!this._activeEffects.includes(t)&&this._activeEffects.push(t)}for(let e of this._effects)e.active&&e.enabled&&!this._activeEffects.includes(e)&&this._activeEffects.push(e);this._activeEffects.length>0?(this._postprocessing||=new Le(this.context),this._postprocessing.apply(this._activeEffects)?.then(()=>{this.activeAndEnabled&&(this._applyPostQueue(),this._postprocessing?(this.multisampling===`auto`?this._postprocessing.multisampling=te.isMobileDevice()?2:4:this._postprocessing.multisampling=Math.max(0,Math.min(this.multisampling,this.context.renderer.capabilities.maxSamples)),Z&&console.debug(`[PostProcessing] Set multisampling to ${this._postprocessing.multisampling} (Is Mobile: ${te.isMobileDevice()})`)):Z&&console.warn(`[PostProcessing] No composer found`))})):this._postprocessing?.unapply(!1)}_applyPostQueue(){if(this._modificationQueue){for(let e of this._modificationQueue.values())this.onEditorModification(e);this._modificationQueue.clear()}}onEditorModification(e){if(e.propertyName.startsWith(`postprocessing.`)){if(!this._postprocessing)return this._modificationQueue||=new Map,this._modificationQueue.set(e.propertyName,e),!0;if(!this._activeEffects?.length)return;let t=e.propertyName.split(`.`);if(t.length===3||t.length===4){let n=t[1],r=t[2];for(let i of this._activeEffects)if(i.typeName?.toLowerCase()===n.toLowerCase()){if(r===`active`){i.active=e.value,this.scheduleRecreate();return}if(!$.has(n)){let e=[];$.set(n,e);let t=Object.keys(i);for(let n of t)i[n]instanceof S&&e.push(n)}if($.has(n)){let a=r.toLowerCase(),o=$.get(n);for(let n of o)if(n.toLowerCase()===a){let r=i[n];r instanceof S&&(t.length===4&&t[3]===`active`?(r.overrideState=e.value,this.scheduleRecreate()):r&&r.value!==void 0&&(r.value=e.value));return}}console.warn(`Unknown modification`,r);return}}return!0}return!1}_modificationQueue;_recreateId=-1;scheduleRecreate(){let e=++this._recreateId;setTimeout(()=>{e===this._recreateId&&(this.onDisable(),this.onEnable())},200)}};Re([m(ye)],Q.prototype,`sharedProfile`,void 0),Re([m()],Q.prototype,`multisampling`,void 0),Re([m()],Q.prototype,`adaptiveResolution`,void 0);var $=new Map;ce(Q);export{T as _,U as a,b,L as c,P as d,M as f,ye as g,Ce as h,G as i,je as l,E as m,Le as n,H as o,D as p,q as r,z as s,Q as t,I as u,w as v,S as y}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine.extras.dI9yZHT7.js.gz b/Needle/MenuScene/dist/assets/needle-engine.extras.dI9yZHT7.js.gz deleted file mode 100644 index 8b32be9..0000000 Binary files a/Needle/MenuScene/dist/assets/needle-engine.extras.dI9yZHT7.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/needle-engine@5.0.3.js b/Needle/MenuScene/dist/assets/needle-engine@5.0.3.js deleted file mode 100644 index 237ecd1..0000000 --- a/Needle/MenuScene/dist/assets/needle-engine@5.0.3.js +++ /dev/null @@ -1,229 +0,0 @@ -import{n as e}from"./rolldown-runtime.CYVBeYYp.js";import{A as t,Ar as n,Bt as r,F as i,Fr as a,Ft as o,Nt as s,On as c,Rr as l,S as u,St as ee,Xt as te,Zt as ne,_ as re,c as ie,fn as d,gn as f,gr as ae,hn as oe,in as se,tt as ce,wn as le,x as p}from"./three@0.169.19.js";import{$ as ue,$a as de,$i as fe,A as pe,Br as me,C as he,Ci as ge,Cn as _e,D as ve,Da as ye,Di as be,Dn as xe,Dt as Se,E as Ce,En as we,G as Te,Gi as Ee,Gr as De,Gt as Oe,H as m,Hn as ke,Ho as Ae,Ii as je,J as Me,Ja as Ne,Ji as Pe,Jr as Fe,Ka as h,Kr as Ie,L as Le,La as Re,Lr as ze,M as Be,Mi as Ve,Na as He,O as Ue,Oi as We,On as Ge,Ot as Ke,P as qe,Pi as Je,Pn as Ye,Q as Xe,Qi as Ze,Ro as Qe,S as $e,Si as et,T as tt,Ti as nt,Tn as rt,Tt as it,Ua as g,Uo as at,Ut as ot,V as st,Vn as ct,Wi as lt,Wo as ut,X as _,Xa as dt,Xr as ft,Y as pt,Yr as mt,Z as ht,_ as gt,_a as v,_n as _t,a as vt,ai as yt,b as bt,ba as y,bi as xt,co as b,ct as x,d as St,dn as S,eo as C,f as Ct,fn as wt,g as Tt,gi as Et,gr as w,h as Dt,ht as Ot,i as kt,j as At,ja as jt,ji as Mt,jo as Nt,jt as Pt,k as Ft,kn as It,l as Lt,n as Rt,na as zt,o as Bt,ot as Vt,p as Ht,q as Ut,qr as T,r as Wt,ra as E,s as Gt,st as Kt,t as qt,ti as D,u as Jt,un as O,v as Yt,va as k,vi as Xt,w as Zt,wi as Qt,wn as $t,x as en,xi as tn,y as nn,yi as rn,za as an}from"./needle-engine-ui.D3ZoIJG5.js";import{A,d as on,j as sn,n as cn,t as ln}from"./three-examples@0.169.19.js";import{$ as un,A as dn,B as fn,Bt as pn,C as mn,Ct as hn,D as gn,Dt as _n,E as vn,Et as yn,F as bn,G as xn,Gt as Sn,H as Cn,I as wn,It as Tn,J as En,Jt as Dn,K as On,Kt as kn,L as An,Nt as jn,O as Mn,Ot as Nn,P as Pn,Q as Fn,Qt as In,R as Ln,Rt as Rn,S as zn,St as Bn,T as Vn,U as Hn,Ut as Un,V as Wn,Vt as Gn,W as Kn,Wt as qn,X as Jn,Xt as Yn,Y as Xn,Z as Zn,Zt as Qn,_ as $n,_t as er,a as tr,at as nr,b as rr,bt as ir,cn as ar,d as or,et as sr,f as cr,fn as lr,g as ur,h as dr,i as fr,it as pr,k as mr,kt as hr,ln as gr,m as _r,mn as vr,n as yr,nt as br,o as xr,ot as Sr,p as Cr,pn as wr,q as Tr,qt as Er,r as Dr,rt as Or,sn as kr,t as Ar,tt as jr,v as Mr,vt as Nr,w as Pr,wt as Fr,x as Ir,xt as Lr,y as Rr,yt as zr,z as Br,zt as Vr}from"./needle-engine-webxr.DiiWSXeh.js";import{A as Hr,B as Ur,C as Wr,Ct as Gr,D as Kr,E as qr,Et as Jr,F as Yr,G as Xr,H as Zr,I as Qr,K as $r,L as ei,M as ti,Mt as ni,N as ri,Nt as ii,O as ai,P as oi,Q as si,R as ci,S as li,St as ui,T as di,Tt as fi,U as pi,V as mi,W as hi,X as gi,_ as _i,_t as vi,a as yi,at as bi,b as xi,bt as Si,c as Ci,ct as wi,d as Ti,dt as Ei,f as Di,ft as Oi,g as ki,gt as Ai,h as ji,ht as Mi,i as Ni,it as Pi,j as Fi,jt as Ii,k as Li,l as Ri,lt as zi,m as Bi,mt as Vi,n as Hi,nt as Ui,o as Wi,ot as Gi,p as Ki,pt as qi,q as Ji,r as Yi,s as Xi,st as Zi,t as Qi,u as $i,ut as ea,v as ta,vt as na,w as ra,wt as ia,x as aa,xt as oa,y as sa,yt as ca,z as la}from"./needle-engine.extras.B9pwA3ET.js";import{C as ua,D as da,E as fa,S as pa,T as ma,a as ha,b as ga,c as _a,d as va,f as ya,g as ba,h as xa,i as Sa,l as Ca,m as wa,o as Ta,p as Ea,r as Da,s as Oa,t as ka,u as Aa,v as ja,w as Ma,x as Na,y as Pa}from"./needle-engine-particles.Ce6eiXqY.js";import{a as Fa,c as Ia,d as La,f as Ra,g as za,h as Ba,i as Va,l as Ha,m as Ua,n as Wa,o as Ga,p as Ka,r as qa,s as Ja,t as Ya,u as Xa,y as Za}from"./needle-engine.extras.dI9yZHT7.js";import{a as Qa,t as $a}from"./three-mesh-bvh.B-oXEGo2.js";var j=void 0,M=null,N=null,P=!1,eo=null,to=`terminal`;b(`console`)&&ro();var no=Symbol(`consoleParent`);function ro(){if(j){j.showSwitch();return}uo()}function io(){j&&(j.hide(),j.hideSwitch())}function ao(){eo||=setInterval(so,500)}var oo=0;function so(){let e=dt(),t=e!==oo;oo=e,t&&co()}function co(){ro(),N&&(N.setAttribute(`error`,`true`),N.innerText=`🤬`)}function lo(){N&&(N.removeAttribute(`error`),N.innerText=to)}function uo(e=!1){if(j!==void 0||P)return;P=!0;let t=document.createElement(`script`);t.onload=()=>{if(!globalThis.VConsole){console.warn(`🌵 Debug console failed to load.`),P=!1,j=null;return}P=!1,ao(),j=new VConsole({pluginOrder:[`default`,`needle-console`]});let t=globalThis[`needle:codegen_files`];if(t&&t.length>0&&j.addPlugin(fo()),j.addPlugin(bo()),j.addPlugin(xo()),M=No(),M&&(M[no]=M.parentElement,M.style.position=`absolute`,M.style.zIndex=(2**53-1).toString()),j.setSwitchPosition(20,30),N=Mo(),N){N.innerText=to,N.addEventListener(`click`,lo);let t=document.createElement(`style`);t.innerHTML=` - #__vconsole .vc-switch { - border: 1px solid rgba(255, 255, 255, .1); - border-radius: 50%; - width: 40px; - height: 40px; - padding: 0; - line-height: 40px; - font-size: ${40*.4}px; - text-align: center; - background: #ffffff5c; - backdrop-filter: blur(16px); - -webkit-backdrop-filter: blur(16px); - user-select: none; - pointer-events: auto; - transition: transform .2s ease-in-out; - box-shadow: 0px 7px 0.5rem 0px rgb(0 0 0 / 6%), inset 0px 0px 1.3rem rgba(0,0,0,.05); - - font-family: 'Material Symbols Outlined'; - color: black; - font-size: 2.3em; - font-weight: 100; - } - #__vconsole .vc-switch:hover { - cursor: pointer; - transform: scale(1.1); - transition: transform .1s ease-in-out, background .1s linear; - background: rgba(245, 245, 245, .8); - outline: rgba(0, 0, 0, .05) 1px solid; - } - #__vconsole .vc-switch[error] { - background: rgba(255,0,0,.2); - animation: vconsole-notify 1s ease-in-out; - line-height: 35px; - } - @keyframes vconsole-notify { - from { - transform: scale(1, 1); - } - 10% { - transform: scale(1.3, 1.3); - } - 70% { - transform: scale(1.4, 1.4); - } - to { - transform: scale(1, 1); - } - } - #__vconsole .vc-panel { - font-family: monospace; - font-size: 11px; - } - #__vconsole .vc-plugin-box.vc-actived { - height: 100%; - } - #__vconsole .vc-mask { - overflow: hidden; - } - `,M?.prepend(t),e===!0&&dt()<=0&&io(),console.log(`🌵 Debug console has loaded`)}},t.onerror=()=>{console.warn(`🌵 Debug console failed to load.`+(window.crossOriginIsolated?`This page is using cross-origin isolation, so external scripts can't be loaded.`:``)),P=!1,j=null},t.src=`https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js`,document.body.appendChild(t)}function fo(){if(!globalThis.VConsole)return;let e=new VConsole.VConsolePlugin(`needle-console`,`🌵 Inspect glTF`),t=()=>document.querySelector(`#__vc_plug_`+e._id+` iframe`);return e.on(`renderTab`,function(t){let n=globalThis[`needle:codegen_files`];if(!n||n.length===0)return;let r=globalThis[`needle:codegen_files`][0],i=r.indexOf(`?`);i>-1&&(r=r.substring(0,i));let a=location.protocol+`//`+location.host+location.pathname+`/`+r;e.fullUrl=`https://viewer.needle.tools?inspect&file=`+encodeURIComponent(a),t(``)}),e.on(`show`,function(){let n=t();n&&n.src!==e.fullUrl&&(n.src=e.fullUrl)}),e.on(`hide`,function(){let e=t();e&&(e.src=``)}),e.on(`addTopBar`,function(n){var r=[];r.push({name:`Open in new window ↗`,onClick:function(t){window.open(e.fullUrl,`_blank`),j?.hide()}}),r.push({name:`Reload`,onClick:function(n){let r=t();r&&(r.src=e.fullUrl)}}),r.push({name:`Fullscreen`,onClick:function(e){let n=t();n.requestFullscreen?n.requestFullscreen():n.webkitRequestFullscreen instanceof Function&&n.webkitRequestFullscreen()}}),n(r)}),e}var po=`padding: 10px; font-family: monospace;`,mo=`margin-bottom: 10px;`,F=`margin-bottom: 10px; margin-top: 15px;`,ho=`width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;`,go=`border: 1px solid rgba(0,0,0,0.1); padding: 5px;`,_o=go,vo=go+` word-break: break-all;`;function I(e,t=!1){t&&e.sort((e,t)=>!!t.value-+!!e.value);let n=``;n+=``;for(let t of e){let e=typeof t.value==`boolean`?t.value?`✅`:`❌`:t.value;n+=``}return n+=`
${t.label}${e}
`,n}function yo(){try{if(document.createElement(`canvas`).getContext(`webgl2`))return`✅`}catch{}return`❌`}function bo(){if(!globalThis.VConsole)return;let e=new VConsole.VConsolePlugin(`device-utilities`,`📱 Device Info`);return e.on(`renderTab`,function(e){let t=`
`,n=jo();t+=`

Device: ${n}

`,t+=I([{label:`💻 Desktop`,value:C.isDesktop()},{label:`📱 Mobile Device`,value:C.isMobileDevice()},{label:`🍎 iOS`,value:C.isiOS()},{label:`📱 iPad`,value:C.isiPad()},{label:`🤖 Android`,value:C.isAndroidDevice()},{label:`🦊 Mozilla XR`,value:C.isMozillaXR()},{label:`🌵 Needle App Clip`,value:C.isNeedleAppClip()},{label:`🍏 macOS`,value:C.isMacOS()},{label:`👓 VisionOS`,value:C.isVisionOS()},{label:`🧭 Safari`,value:C.isSafari()},{label:`🕶️ Meta Quest`,value:C.isQuest()},{label:`🔗 QuickLook AR Support`,value:C.supportsQuickLookAR()}],!0);let r=[],i=C.getiOSVersion();i&&r.push({label:`🍎 iOS Version`,value:i});let a=C.getChromeVersion();a&&r.push({label:`🌐 Chrome Version`,value:a});let o=C.getSafariVersion();o&&r.push({label:`🧭 Safari Version`,value:o}),r.length>0&&(t+=I(r,!1)),t+=`
`,t+=`
`,t+=`

User Agent Info

`;let s=[{label:`User Agent`,value:navigator.userAgent},{label:`Platform`,value:navigator.platform},{label:`App Version`,value:navigator.appVersion},{label:`User Agent Data`,value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:`Not supported`},{label:`WebXR`,value:`xr`in navigator?`✅`:`❌`},{label:`WebGPU`,value:`gpu`in navigator?`✅`:`❌`},{label:`WebGL 2`,value:yo()}];t+=I(s,!1),t+=`
`,e(t)}),e}function xo(){if(!globalThis.VConsole)return;let e=new VConsole.VConsolePlugin(`graphics-info`,`🎨 Graphics Info`);return e.on(`renderTab`,async function(e){let t=`
`,n=So();n.length>0&&(t+=`

General GPU Info

`,t+=I(n,!1));let r=wo();r.length>0&&(t+=`

WebGL

`,t+=I(r,!1));let i=To();i.length>0&&(t+=`

WebGL 2 Features

`,t+=I(i,!1));let a=Eo();a.length>0&&(t+=`

WebGL Limits

`,t+=I(a,!1));let o=Do();o.length>0&&(t+=`

Texture Formats

`,t+=I(o,!1));let s=await Oo();if(s.length>0&&(t+=`

WebGPU

`,t+=I(s,!1)),C.isSafari()){let e=Ao();e.length>0&&(t+=`

Safari GPU Info

`,t+=I(e,!1))}t+=`
`,e(t)}),e}function So(){let e=[],t=window.devicePixelRatio;e.push({label:`Device Pixel Ratio`,value:t.toString()}),e.push({label:`Width (px)`,value:(window.innerWidth*t).toString()}),e.push({label:`Height (px)`,value:(window.innerHeight*t).toString()});let n=C.isMobileDevice()?150:96,r=screen.width/n,i=screen.height/n,a=r*2.54,o=i*2.54;e.push({label:`Estimated Width (cm)`,value:a.toFixed(1)}),e.push({label:`Estimated Height (cm)`,value:o.toFixed(1)});let s=ko();if(s){e.push({label:`GPU`,value:s.renderer}),e.push({label:`Driver`,value:s.vendor}),e.push({label:`ANGLE`,value:s.angle||`Not detected`});let t=Co(s.renderer);t&&(t.manufacturer&&e.push({label:`Manufacturer`,value:t.manufacturer}),t.cardVersion&&e.push({label:`Card Version`,value:t.cardVersion}),t.brand&&e.push({label:`Brand`,value:t.brand}),e.push({label:`Integrated`,value:t.integrated?`Yes`:`No`}),t.layer&&e.push({label:`WebGL Layer`,value:t.layer}))}return e}function Co(e){if(!e)return null;let t=(e,t)=>{let n=t.match(e);return n&&n[0]},n=t(/(ANGLE)/g,e)||void 0,r=t(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,e)||e,i=r.split(` `);i.shift();let a=t(/(NVIDIA|AMD|Intel)/g,r)||void 0;return{manufacturer:a,cardVersion:i.length>0?i.pop():void 0,brand:i.length>0?i.join(` `):void 0,integrated:a===`Intel`,layer:n,card:r}}function wo(){let e=[],t=ko();return t&&(e.push({label:`📊 WebGL Version`,value:t.version}),e.push({label:`🎮 WebGL 2 Available`,value:yo()})),e}function To(){let e=[];try{let t=document.createElement(`canvas`).getContext(`webgl2`);if(!t)return e;e.push({label:`Float Color Buffer`,value:t.getExtension(`EXT_color_buffer_float`)?`✅`:`❌`}),e.push({label:`Anisotropic Filtering`,value:t.getExtension(`EXT_texture_filter_anisotropic`)?`✅`:`❌`}),e.push({label:`Float Texture Linear`,value:t.getExtension(`OES_texture_float_linear`)?`✅`:`❌`}),e.push({label:`S3TC Compression`,value:t.getExtension(`WEBGL_compressed_texture_s3tc`)?`✅`:`❌`}),e.push({label:`ETC Compression`,value:t.getExtension(`WEBGL_compressed_texture_etc`)?`✅`:`❌`}),e.push({label:`PVRTC Compression`,value:t.getExtension(`WEBGL_compressed_texture_pvrtc`)?`✅`:`❌`}),e.push({label:`ASTC Compression`,value:t.getExtension(`WEBGL_compressed_texture_astc`)?`✅`:`❌`})}catch{}return e}function Eo(){let e=[];try{let t=document.createElement(`canvas`),n=t.getContext(`webgl2`)||t.getContext(`webgl`);if(!n)return e;let r=n instanceof WebGL2RenderingContext;e.push({label:`📏 Max Texture Size`,value:n.getParameter(n.MAX_TEXTURE_SIZE).toString()}),e.push({label:`🎨 Max Renderbuffer Size`,value:n.getParameter(n.MAX_RENDERBUFFER_SIZE).toString()}),e.push({label:`🔗 Max Vertex Attribs`,value:n.getParameter(n.MAX_VERTEX_ATTRIBS).toString()}),e.push({label:`🎯 Max Texture Units`,value:n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS).toString()}),r&&(e.push({label:`⚡ Max Samples`,value:n.getParameter(n.MAX_SAMPLES).toString()}),e.push({label:`🔄 Max Uniform Buffer Bindings`,value:n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),e.push({label:`📐 Max 3D Texture Size`,value:n.getParameter(n.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return e}function Do(){let e=[];try{document.createElement(`canvas`).getContext(`webgl`)&&(e.push({label:`WebGL 1 RGBA`,value:`✅`}),e.push({label:`WebGL 1 RGB`,value:`✅`}));let t=document.createElement(`canvas`).getContext(`webgl2`);t&&(e.push({label:`WebGL 2 RGBA32F`,value:t.getExtension(`EXT_color_buffer_float`)?`✅`:`❌`}),e.push({label:`WebGL 2 RGB32F`,value:t.getExtension(`EXT_color_buffer_float`)?`✅`:`❌`}),e.push({label:`WebGL 2 R11F_G11F_B10F`,value:`✅`}),e.push({label:`WebGL 2 RGB565`,value:`✅`}),e.push({label:`WebGL 2 RGB5_A1`,value:`✅`}),e.push({label:`WebGL 2 RGBA4444`,value:`✅`}))}catch{}return e}async function Oo(){let e=[];if(!(`gpu`in navigator))return e.push({label:`🚀 WebGPU Support`,value:`❌ Not supported`}),e;e.push({label:`🚀 WebGPU Support`,value:`✅ Supported`});try{let t=await navigator.gpu.requestAdapter();if(!t)return e.push({label:`🎯 Adapter`,value:`No adapter available`}),e;e.push({label:`🎯 Adapter`,value:t.name||`Unknown Adapter`});let n=await t.requestDevice();e.push({label:`🔧 Device`,value:n.label||`WebGPU Device`}),e.push({label:`📏 Max Texture 2D`,value:n.limits.maxTextureDimension2D.toString()}),e.push({label:`📐 Max Texture 3D`,value:n.limits.maxTextureDimension3D.toString()}),e.push({label:`📊 Max Texture Array Layers`,value:n.limits.maxTextureArrayLayers.toString()}),e.push({label:`💾 Max Buffer Size`,value:`${(n.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),e.push({label:`🔗 Max Bind Groups`,value:n.limits.maxBindGroups.toString()})}catch(t){e.push({label:`❌ Error`,value:t.message})}return e}function ko(){try{let e=document.createElement(`canvas`),t=e.getContext(`webgl2`)||e.getContext(`webgl`);if(!t)return null;let n=t.getExtension(`WEBGL_debug_renderer_info`),r=n?t.getParameter(n.UNMASKED_RENDERER_WEBGL):t.getParameter(t.RENDERER),i=n?t.getParameter(n.UNMASKED_VENDOR_WEBGL):t.getParameter(t.VENDOR),a=t.getParameter(t.VERSION),o;if(r&&r.includes(`ANGLE`)){let e=r.match(/ANGLE \(([^)]+)\)/);e&&(o=e[1])}return{renderer:r,vendor:i,version:a,angle:o}}catch{return null}}function Ao(){let e=[];try{let t=document.createElement(`canvas`).getContext(`webgl`);if(t){let n=t.getExtension(`WEBGL_debug_renderer_info`);if(n){let r=t.getParameter(n.UNMASKED_RENDERER_WEBGL);r&&r.includes(`Apple`)&&e.push({label:`🍎 Apple GPU`,value:r})}}}catch{}try{let t=document.createElement(`canvas`).getContext(`webgl`);t&&(t.getSupportedExtensions()||[]).includes(`WEBGL_compressed_texture_pvrtc`)&&e.push({label:`🗜️ PVRTC Support`,value:`✅`})}catch{}return e}function jo(){return C.isQuest()?`Meta Quest`:C.isVisionOS()?`Vision Pro`:C.isiOS()?C.isiPad()?`iPad`:`iPhone/iPod`:C.isAndroidDevice()?`Android Device`:C.isMozillaXR()?`Mozilla XR Browser`:C.isNeedleAppClip()?`Needle App Clip`:C.isMacOS()?`Mac`:C.isDesktop()?`Desktop PC`:`Unknown Device`}function Mo(){return document.querySelector(`#__vconsole .vc-switch`)||null}function No(){return document.querySelector(`#__vconsole`)||null}var Po=new class extends T{constructor(){super([t,S],`ColorSerializer`)}onDeserialize(e){if(e!=null)return e.a===void 0?e.alpha===void 0?new t(e.r,e.g,e.b):new S(e.r,e.g,e.b,e.alpha):new S(e.r,e.g,e.b,e.a)}onSerialize(e){if(e!=null)return e.a===void 0?{r:e.r,g:e.g,b:e.b}:{r:e.r,g:e.g,b:e.b,a:e.a}}},Fo=new class extends T{constructor(){super([ce],`EulerSerializer`)}onDeserialize(e,t){if(e!=null){if(e.order)return new ce(e.x,e.y,e.z,e.order);if(e.x!=null)return new ce(e.x,e.y,e.z)}}onSerialize(e,t){return{x:e.x,y:e.y,z:e.z,order:e.order}}},Io=new class extends T{constructor(){super(d,`ObjectSerializer`)}onSerialize(e,t){if(t.objectToNode!==void 0&&e.uuid){let n=t.objectToNode[e.uuid];return D&&console.log(n,e.name,e.uuid),{node:n}}}onDeserialize(e,t){if(typeof e==`string`){if(e.endsWith(`.glb`)||e.endsWith(`.gltf`)){if(t.serializable instanceof Array&&t.serializable.includes(me))return;h()&&E(`Detected wrong usage of @serializable with Object3D or GameObject. Instead you should use AssetReference here! Please see the console for details.`);let e=t.target?.constructor?.name;console.warn(`Wrong usage of @serializable detected in your script \"${e}\"\n\nIt looks like you used @serializable(Object3D) or @serializable(GameObject) for a prefab or scene reference which is exported to a separate glTF file.\n\nTo fix this please change your code to:\n\n@serializable(AssetReference)\n${t.path}! : AssetReference;\n\0`)}return}if(e){if(e.node!==void 0&&t.nodeToObject){let n=t.nodeToObject[e.node];return D&&console.log(`Deserialized object reference?`,e,n,t?.nodeToObject),n||console.warn(`Did not find node: `+e.node,t.nodeToObject,t.object),n}else if(e.guid){if(!t.context){console.error(`Missing context`);return}let n,r=t.gltf?.scene;return r&&(n=x.findByGuid(e.guid,r)),n||=x.findByGuid(e.guid,t.context.scene),n?(n&&n.isComponent===!0&&(D&&console.warn(`Deserialized object reference is a component`),n=n.gameObject),D&&console.log(`Deserialized object reference?`,e,n,t?.nodeToObject)):((h()||D)&&console.warn(`Could not resolve object reference`,t.path,e,t.target,t.context.scene),e.could_not_resolve=!0),n}}}},Lo=new class extends T{constructor(){super([Vt,Vt],`ComponentSerializer`)}onSerialize(e,t){if(e?.guid)return{guid:e.guid}}onDeserialize(e,t){if(e?.guid){if(e.___persistentAsset){D&&console.log(`Skipping component deserialization because it's a persistent asset`,e);return}let n=t.path;D&&console.log(e.guid,t.root,t.object,t.target);let r=this.findObjectForGuid(e.guid,t.root);if(r||t.context&&(r=this.findObjectForGuid(e.guid,t.context?.scene),r))return r;(h()||D)&&console.warn(`Could not resolve component reference: "`+n+`" using guid `+e.guid,t.target),e.could_not_resolve=!0;return}}findObjectForGuid(e,t){if(t.guid===e)return t;let n=x.foreachComponent(t,t=>{if(t.guid===e)return t},!1);if(n!==void 0)return n;for(let n=0;n0;if(e&&i){let t=()=>{let t=r.method[0].toUpperCase()+r.method.slice(1);if(typeof e[t]==`function`){console.warn(`EventList method:\nCould not find method ${r.method} on object ${e.name}. Please rename ${r.method} to ${t}?\n`,e[t],` - in script: `,e),E(`EventList methods must start with lowercase letter, see console for details`);return}else console.warn(`EventList method:\nCould not find method ${r.method} on object ${e.name}`,e,typeof e[r.method])};if(typeof e[r.method]!=`function`){let n=!1,i=e;for(;i;){let e=Object.getOwnPropertyDescriptor(i,r.method);if(e&&(e.writable===!0||e.set)){n=!0;break}i=Object.getPrototypeOf(i)}!n&&(h()||D)&&t()}}function a(e){if(typeof e==`object`){let n=Io.onDeserialize(e,t);if(n||=Lo.onDeserialize(e,t),n)return n}return e}if(e){let t=r.argument;if(t===void 0?r.arguments!==void 0&&(t=r.arguments.map(a)):t=a(t),e[r.method]===void 0)console.warn(`EventList method not found: \"${r.method}\" on ${e?.name}`);else{t!==void 0&&!Array.isArray(t)&&(t=[t]);let i=new pt(e,r.method,t,r.enabled);n.push(i)}}else h()&&console.warn(`[Dev] EventList: Could not find event listener in scene (${t.object?.name})`,r)}let r=new _(n);D&&console.log(r);let i=t.target;return i!==void 0&&t.path!==void 0&&r.setEventTarget(t.path,i),r}}},zo=new WeakMap,Bo=ae.prototype.clone;ae.prototype.clone=function(){let e=Bo.call(this);return zo.has(e)||zo.set(e,this),e};var Vo=class extends T{constructor(){super([Me,a])}onSerialize(e,t){}onDeserialize(e,t){if(e instanceof ae&&t.type===Me){let t=e;zo.has(t)&&(t=zo.get(t)),t.isRenderTargetTexture=!0,t.flipY=!0,t.offset.y=1,t.repeat.y=-1,t.needsUpdate=!0,t.mipmaps=[],t instanceof i&&(t.isCompressedTexture=!1,t.format=c);let n=new Me(t.image.width,t.image.height,{colorSpace:r});return n.texture=t,n}}};new Vo;var Ho=class extends T{constructor(){super([URL])}onSerialize(e,t){return null}onDeserialize(e,t){if(typeof e==`string`&&e.length>0)return Nt(t.gltfId,e)}};new Ho;var Uo=!1;function Wo(){Uo||(Uo=!0,ut.registerCallback(at.ContextCreated,e=>{let t=e.context.domElement.getAttribute(`autoplay`);if(t!==void 0&&(t===``||t===`true`||t===`1`)&&e.files)for(let t of e.files)x.foreachComponent(t.file.scene,e=>{if(e.enabled!==!1){if(e instanceof vr&&e.playAutomatically||e instanceof Xe||e instanceof oa&&e.playOnAwake===!0)return!0;if(e instanceof vr)return e.playAutomatically=!0,!0;if(e instanceof oa)return e.playOnAwake=!0,!0}},!0)!==!0&&Ze.autoplayAnimations(t.file)}))}var L=b(`debugmissingcamera`),Go=!1;function Ko(){Go||(Go=!0,ut.registerCallback(at.MissingCamera,e=>{L&&console.warn(`Creating missing camera`);let n=e.context.scene,r=new f;r.name=`Default Fallback Camera`,n.add(r);let i=new he;if(i.sourceId=e.files?.[0]?.src??`unknown`,i.fieldOfView=35,e.context.domElement.getAttribute(`transparent`)!=null)i.clearFlags=Zt.Uninitialized;else if(e.context.domElement.getAttribute(`background-image`)?.length||e.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=Zt.Skybox;else{if(i.clearFlags=Zt.SolidColor,!e.context.domElement.getAttribute(`background-color`)){let e=`#efefef`;window.matchMedia(`(prefers-color-scheme: dark)`).matches&&(e=`#1f1f1f`),n.background=new t(e)}if(!n.environment){let t=new oe(e.context.renderer),r=new Si(`neutral`);n.environment=t.fromScene(r,.025).texture}}let a=Ot(r,i,!0);return r.position.x=0,r.position.y=1,r.position.z=2,e.context.domElement?.cameraControls!=0&&qo(e.context,a),a}),ut.registerCallback(at.ContextCreated,e=>{if(!e.context.mainCamera){L&&console.log(`Will not auto-fit because a default camera exists`);return}if(e.context.domElement?.cameraControls==1){if(an(e.context.mainCamera)?.isCameraController==1){L&&console.log(`Will not auto-fit because a camera controller exists`);return}qo(e.context)}}))}function qo(e,t){t??=e.mainCameraComponent;let n=t?.gameObject;if(L&&console.log(`Creating default camera controls`,t?.name),n){let r=it(n,Ce);r.sourceId=t?.sourceId??`unknown`;let i=e.domElement.getAttribute(`auto-rotate`);r.autoRotate=i!=`0`&&i?.toLowerCase()!=`false`;let a=Number.parseFloat(i||`.5`);r.autoRotateSpeed=isNaN(a)?.5:a,L&&console.log(`Auto-rotate`,r.autoRotate,`speed:`,r.autoRotateSpeed);let o=e.domElement.getAttribute(`auto-fit`);r.autoFit=o!==`0`&&o?.toLowerCase()!=`false`,r.autoTarget=!0}else console.warn(`Missing camera object, can not add orbit controls`)}function Jo(){ze.registerWaitForInteraction(()=>{let e=ie.getContext();e.addEventListener(`statechange`,()=>{setTimeout(()=>{let t=e.state;(t===`suspended`||t===`interrupted`)&&e.resume().then(()=>{console.log(`AudioContext resumed successfully`)}).catch(e=>{console.log(`Failed to resume AudioContext: `+e)})},500)})})}var R=D;b(`debugtypestore`)&&console.log(fe);function Yo(e,t){let n=ft(e,t);return n===void 0?null:n}var Xo=new De,Zo=Symbol(`deserialize-queue`);async function Qo(e,t,n,r=null,i){if(!n){console.debug(`Can not create component instances: gltf is null`);return}let a=[],o=r;typeof o==`number`&&(o=new yt(r));let s=t.indexOf(`?`);t=s===-1?t:t.substring(0,s);let c=new Ie(n.scene);c.gltfId=t,c.context=e,c.gltf=n,c.nodeToObject=i?.nodeToObjectMap,c.implementationInformation=Xo;let l=e[Zo];if(l||=e[Zo]=[],n.scenes)for(let e of n.scenes)await ts(c,e,l,a,0);if(n.children)for(let e of n.children)await ts(c,e,l,a,0);e.new_scripts_pre_setup_callbacks.push(()=>{let t=e[Zo];if(t){for(let e of t)ns(e,c);t.length=0}if(o){let e={},t=[];es(n,o,e,t);for(let r of n.scenes)es(r,o,e,t);for(let n of t)n.resolveGuids(e)}})}var $o=Symbol(`original-component-name`),z=new Map;function es(e,t,n,r){if(t===null||!e)return;let i=e.guid,a=e.guid;if(a?.length&&(z.has(a)||(R&&console.log(`Creating InstanceIdProvider with key "`+a+`" for object `+e.name),z.set(a,new yt(a)))),e.guid=(a&&z.get(a)||t).generateUUID(),i&&i!==`invalid`&&(n[i]=e.guid),e&&e.userData&&e.userData.components)for(let i of e.userData.components){if(i===null)continue;let e=i.guid;e?z.has(e)||(R&&console.log(`Creating InstanceIdProvider with key "`+e+`" for component `+i[$o]),z.set(e,new yt(e))):R&&console.warn(`Can not create IdProvider: component `+i[$o]+` has no guid`,i.guid);let a=z.get(e)||t,o=i.guid;i.guid=a.generateUUID(),o&&o!==`invalid`&&(n[o]=i.guid),i.resolveGuids&&r.push(i)}if(e.children)for(let i of e.children)es(i,t,n,r)}var B=[];async function ts(e,t,n,r,i){if(!t)return;let a=t.userData;if(a){let r=a.builtin_components;if(r&&r.length>0)for(let i of r)try{if(i===null)continue;let r=fe.get(i.name);if(r||=await fe.getAsync(i.name),r){let a=new r;a.sourceId=e.gltfId,Fe(a,i,e.implementationInformation),a.context=e.context,`guid`in i&&(a[Pe]=i.guid),a[$o]=i.name,Ot(t,a,!1),n.push({instance:a,compData:i,obj:t}),a.isCamera&&e.context&&e.context.mainCamera===null&&a.tag===`MainCamera`&&e.context.setCurrentCamera(a),e.context?.physics?.engine?.isInitialized===!1&&(a.isCollider||a.isRigidbody)&&e.context?.physics.engine?.initialize()}else R&&console.debug(`unknown component: `+i.name),B.includes(i.name)||B.push(i.name)}catch(e){console.error(i.name+` - `+e.message,e)}}if(t.children)for(let a of t.children)await ts(e,a,n,r,i+1);if(B.length>0&&i===0){let e=B.join(`, `);console.warn(`Unknown components in scene: ${e}`),B.length=0,Ae()&&zt(`Unknown components in scene:\n\n${e}\n\nThis could mean you forgot to add a npmdef to your ExportInfo\ndocumentation`,{type:Ne.Warn})}}function ns(e,t){let{instance:n,compData:r,obj:i}=e;t.object=i,t.target=n,mt(n,r,t),R&&console.debug(`add `+r.name,r,n)}var rs=class{createBuiltinComponents(e,t,n,r,i){return Qo(e,t,n,r,i)}writeBuiltinComponentData(e,t){return Yo(e,t)}parseSync(e,t,n,r){return ls(e,t,n,r)}loadSync(e,t,n,r,i){return us(e,t,n,r,i)}};function is(){We(rs)}var as=b(`printGltf`)||b(`printgltf`),os=b(`debugfileformat`);async function ss(e,t,n){let r=await gi(e,{useExtension:!0})||`unknown`;os&&console.debug(`Determined file type: '${r}' for url '${e}'`,{registeredModelLoaderCallbacks:si});for(let n of si){let{callback:i}=n,a=i({context:t,url:e,mimetype:r});if(a instanceof Promise&&await a,a)return console.debug(`Using custom loader (${n.name||`unnamed`}) for ${r} at '${e}'`),a}switch(r){case`unsupported`:return null;default:case`unknown`:{console.warn(`Unknown file type (${r}). Needle Engine will fallback to the GLTFLoader - To support more model formats please create a Needle loader plugin.\nUse import { NeedleEngineModelLoader } from \"@needle-tools/engine\" namespace to register your loader.`,e);let i=new A;return await hr(i,t,e,n),i}case`model/fbx`:case`model/vnd.autodesk.fbx`:return new cn;case`model/obj`:return new ln;case`model/vnd.usdz+zip`:case`model/vnd.usd+zip`:case`model/vnd.usda+zip`:return console.warn(r.toUpperCase()+` files are not supported.`),null;case`model/gltf+json`:case`model/gltf-binary`:case`model/vrm`:{let r=new A;return await hr(r,t,e,n),r}case`application/materialx+xml`:return new jn}}function cs(e,t){return us(t?.context||_t.Current,e,e,t?.seed||null,t?.onprogress)}async function ls(e,t,n,r){typeof n!=`string`&&(console.warn(`Parse gltf binary without path, this might lead to errors in resolving extensions. Please provide the source path of the gltf/glb file`,n,typeof n),n=``),as&&console.log(`Parse glTF`,n);let i=await ss(n,e,n);if(!i)return;let{componentsExtension:a}=ds(i,e);if(i instanceof ln){typeof t!=`string`&&(t=new TextDecoder().decode(t));let o=i.parse(t);return await V(i,e,n,o,r,a)}if(!(i instanceof A)){if(!(`parse`in i)||typeof i.parse!=`function`){console.error(`Loader does not support parse`);return}let o=i.parse(t,n);return await V(i,e,n,o,r,a)}return new Promise((o,s)=>{try{let s=n.split(`?`)[0].trimEnd(),c=s.split(`/`);c.length>0&&c[c.length-1]!==``&&c.pop(),s=c.join(`/`),s.endsWith(`/`)||(s+=`/`),i.resourcePath=s,i.parse(t,``,async t=>{o(await V(i,e,n,t,r,a))},e=>{console.error(`Loading asset at "`+n+`" failed -`,e),o(void 0)})}catch(e){console.error(e),s(e)}})}async function us(e,t,n,r,i){ps(t);let a=await ss(t,e,n);if(!a)return;let{componentsExtension:o}=ds(a,e);return a instanceof A?new Promise((s,c)=>{try{a.load(t,async t=>{s(await V(a,e,n,t,r,o))},e=>{i?.call(a,e)},e=>{console.error(`Loading asset at "`+t+`" failed -`,e),s(void 0)})}catch(e){console.error(e),c(e)}}):await V(a,e,t,await a.loadAsync(t,i),r,o)}function ds(e,t){let n=_n(e);return e instanceof A&&Vn(e,t),{componentsExtension:n}}async function V(e,n,r,i,a,o){if(as&&console.warn(`Loaded`,r,i),i==null)return console.error(`Loaded model is null '${r}' - please make sure the loader is registered correctly`),{scene:new d,animations:[],scenes:[]};if(typeof i!=`object`)return console.error(`Loaded model is not an object '${r}' - please make sure the loader is registered correctly`),{scene:new d,animations:[],scenes:[]};if(i instanceof d)i={scene:i,animations:i.animations,scenes:[i]};else if(i instanceof u){let e=new se({color:new t(14540253)}),n=new ne(i,e);i={scene:n,animations:[],scenes:[n]}}else Array.isArray(i.scenes)===!1&&console.error(`[Needle Engine] The loaded model object does not have a scenes property '${r}' - please make sure the loader is registered correctly and three.js is not imported multiple times.`);return r.includes(`?`)&&(r=r.split(`?`)[0]),ms(e,i),je(i)&&(yn(r,i,n),await be().createBuiltinComponents(n,r,i,a,o||void 0)),await fs(i.scene,n,n.mainCamera),i}async function fs(e,t,n){n||=t.mainCamera;try{n?await t.renderer.compileAsync(e,n,t.scene).catch(e=>{console.warn(e.message)}):Se(e,t)}catch(e){console.warn(e?.message||e)}}function ps(e){if(new URL(e,window.location.href).href.startsWith(`file://`)){let e=`Hi - it looks like you are trying to load a local file which will not work. You need to use a webserver to serve your files. -Please refer to the documentation on https://docs.needle.tools or ask for help in our discord community`;zt(e),console.warn(e)}}function ms(e,t){if(`scenes`in t){for(let e of t.scenes)if(e&&!e.animations?.length)for(let n of t.animations)e.animations.includes(n)||e.animations.push(n)}if(e instanceof cn||e instanceof ln){let e=t;e instanceof d||(e=t.scene||t.scenes.find(e=>e)),e.traverse(e=>{let t=e;t?.isMesh&&ye(t,t.material)})}}var hs=!1;function gs(){hs||(hs=!0,Object.defineProperty(f.prototype,`fov`,{get:function(){return this._fov},set:function(e){let t=e!==this._fov;this._fov=e,t&&this.view!==void 0&&this.updateProjectionMatrix()},configurable:!0}),Object.defineProperty(f.prototype,`near`,{get:function(){return this._near},set:function(e){let t=e!==this._near;this._near=e,t&&this.view!==void 0&&this.updateProjectionMatrix()},configurable:!0}),Object.defineProperty(f.prototype,`far`,{get:function(){return this._far},set:function(e){let t=e!==this._far;this._far=e,t&&this.view!==void 0&&this.updateProjectionMatrix()},configurable:!0}))}var _s=!1;function vs(){_s||(_s=!0,n.prototype.slerp=function(e,t){return Re(this,e,t)},Oe(n))}var ys=h(),bs=class extends HTMLElement{static observedAttributes=[`ar`,`vr`,`quicklook`,`qrcode`];constructor(){super(),this.removeEventListener(`click`,this.#l),this.addEventListener(`click`,this.#l)}attributeChangedCallback(e,t,n){this.#s()}#e;#t;#n;#r;#i;#a;#o;#s(){if(this.#r?.remove(),this.getAttribute(`ar`)!=null)this.#i??=new Br,this.#r=this.#i.createARButton(),this.setAttribute(`aria-label`,`Enter augmented reality mode`);else if(this.getAttribute(`vr`)!=null)this.#i??=new Br,this.#r=this.#i.createVRButton(),this.setAttribute(`aria-label`,`Enter virtual reality mode`);else if(this.getAttribute(`quicklook`)!=null)this.#i??=new Br,this.#r=this.#i.createQuicklookButton(),this.setAttribute(`aria-label`,`View in AR with Apple Quick Look`);else if(this.getAttribute(`qrcode`)!=null)this.#a??=new It,this.#r=this.#a.createQRCode({anchorElement:this}),this.setAttribute(`aria-label`,`Share application with QR code`);else{ys?console.warn(`No button type specified for . Use either ar, vr or quicklook attribute.`):console.debug(`No button type specified for . Use either ar, vr or quicklook attribute.`),this.setAttribute(`aria-label`,`Needle Button with no specified type`);return}this.#e??=this.attachShadow({mode:`open`}),this.#t??=document.createElement(`slot`),this.#n??=document.createElement(`style`),this.#n.innerHTML=` - button { - all: unset; - } - `,this.getAttribute(`unstyled`)??(this.#n.innerHTML+=` - :host { - display: inline-flex; - align-items: center; - justify-content: center; - width: fit-content; - - padding: 0.4rem .5rem; - border-radius: 100vw; - - background: rgba(245, 245, 245, .8); - backdrop-filter: blur(10px); - - cursor: pointer; - color: black; - outline: rgba(0,0,0,.05) 1px solid; - - transition: all .2s; - } - :host(:hover) { - background: rgba(255, 255, 255, 1); - transition: background .2s; - } - slot { - display: flex; - align-items: center; - justify-content: center; - gap: .5rem; - } -`),this.#t.innerHTML=this.#r.innerHTML,this.#t.style.cssText=`display: flex; align-items: center; justify-content: center;`,this.#r.innerHTML=this.#t.outerHTML,this.#e.innerHTML=this.#r.outerHTML,this.#e.prepend(this.#n),we(xe,{element:this.#e}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#c()),this.#o.observe(this.#r,{attributes:!0}),ys&&console.log(`Needle Button updated`,this)}#c(){this.#r&&(this.#r.style.display===`none`?this.style.display=`none`:this.style.display===`none`&&(this.style.display=``))}#l=e=>{ys&&console.log(`Needle Button clicked`,{defaultPrevented:e.defaultPrevented,hasButton:!!this.#r}),!e.defaultPrevented&&this.#r&&this.#r.click()}},H=b(`debugoverlay`),xs=`quit-ar`,Ss=class{get ARContainer(){return this.arContainer}arContainer=null;currentSession=null;_createdAROnlyElements=[];_reparentedObjects=[];contentElement=null;originalDomOverlayParent=null;requestEndAR=()=>{this.onRequestedEndAR()};onBegin(e,t,n){if(this.currentSession=n,this.arContainer=t,C.isMozillaXR()||C.isNeedleAppClip()){let n=e.domElement.children;for(let e=0;e{let t=e.renderer.domElement;t&&e.domElement.shadowRoot?.prepend(t);let n=document.querySelectorAll(`*`);for(var r=0;rconsole.log(`Clicked quit-ar button`));return}t.addEventListener(`click`,this.requestEndAR),H&&t.addEventListener(`click`,()=>console.log(`Clicked fallback close button`));let r=document.createElement(`div`);r.style.cssText=` - position: fixed; - top: 0; - right: 0; - z-index: 600; - pointer-events: all; - padding-top: env(safe-area-inset-top, 0px); - padding-right: calc(env(safe-area-inset-right, 0px) + 10px); - `,this.appendElement(r,t);var i=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);i.classList.add(`quit-ar-button`),i.setAttribute(`width`,`40px`),i.setAttribute(`height`,`40px`),i.style.cssText=` - background: rgba(255, 255, 255, .4); - -webkit-backdrop-filter: blur(8px); - backdrop-filter: blur(8px); - border-radius: 50%; - box-shadow: 0 0 5px rgba(0,0,0,.3); - outline: 1px solid rgba(255, 255, 255, .6); - display: flex; - justify-content: center; - align-items: center; - `,r.appendChild(i);var a=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);a.setAttribute(`d`,`M 12,12 L 28,28 M 28,12 12,28`),a.setAttribute(`stroke`,`#000000`),a.setAttribute(`stroke-width`,`2px`),a.style.cssText=` - /**filter: drop-shadow(0 0px 1.2px rgba(0,0,0,.7));**/ - `,i.appendChild(a),H&&console.log(`Created fallback close button`,i,e)}appendElement(e,t){return t.shadowRoot?t.shadowRoot.appendChild(e):t.appendChild(e)}},U=b(`debugloading`),W=b(`debugloadingrendering`);b(`debuglicense`);var Cs=class{className;additionalClasses},G=0,ws;function Ts(e){U&&console.log(e.progress.loaded.toFixed(0)+`/`+e.progress.total.toFixed(0),e);let t=e.count,n=e.progress.total;n===0||n===void 0?(ws!==e.name&&(G=0),ws=e.name,G+=(1-G)*.001,U&&E(`Loading `+e.name+` did not report total size`)):G=e.progress.loaded/n;let r=e.index/t+G/t;return g.clamp01(r)}var Es=class e{static LoadingContainerClassName=`loading`;loadingProgress=0;_element;_progress=0;_allowCustomLoadingElement=!0;_loadingElement;_loadingTextContainer=null;_loadingBar=null;_loadingBarFinishedColor=null;_messageContainer=null;_loadingElementOptions;constructor(e,t){this._element=e,this._loadingElementOptions=t}async onLoadingBegin(t){let n=this._element.shadowRoot||this._element;if(U&&console.warn(`Begin Loading`),!this._loadingElement){for(let t=0;t{this.loadingProgress>=.95&&!W&&(e=.9),this._progress=g.lerp(this._progress,this.loadingProgress,e*this.loadingProgress),this.updateDisplay()},e)}onDoneLoading(){if(this._loadingElement){U&&console.log(`Hiding loading element`);let e=this._loadingElement;e.animate([{opacity:1},{opacity:0}],{duration:200,easing:`ease-in-out`}).addEventListener(`finish`,()=>{e.style.display=`none`,e.remove()})}this._progressLoop&&clearInterval(this._progressLoop),this._progressLoop=null}updateDisplay(){let e=this._progress,t=(e*100).toFixed(0)+`%`;this._loadingBar&&(this._loadingBar.style.width=e*100+`%`,e>=1&&this._loadingBarFinishedColor&&(this._loadingBar.style.background=this._loadingBarFinishedColor)),this._loadingTextContainer&&(this._loadingTextContainer.textContent=t)}createLoadingElement(t){U&&!t&&console.log(`Creating loading element`),this._loadingElement=t||document.createElement(`div`);let n=this._element.getAttribute(`loading-style`);(!n||n===`auto`)&&(n=window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`);let r=Xt();if(!t){this._loadingElement.style.position=`absolute`,this._loadingElement.style.width=`100%`,this._loadingElement.style.height=`100%`,this._loadingElement.style.left=`0`,this._loadingElement.style.top=`0`,this._loadingElement.style.overflow=`hidden`;let e=this._element.getAttribute(`loading-background`);e?this._loadingElement.style.background=e:this._loadingElement.style.backgroundColor=`transparent`,this._loadingElement.style.display=`flex`,this._loadingElement.style.alignItems=`center`,this._loadingElement.style.justifyContent=`center`,this._loadingElement.style.zIndex=`0`,this._loadingElement.style.flexDirection=`column`,this._loadingElement.style.pointerEvents=`none`,this._loadingElement.style.color=`white`,this._loadingElement.style.fontFamily=`system-ui, Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"`,this._loadingElement.style.fontSize=`1rem`,n===`light`?this._loadingElement.style.color=`rgba(0,0,0,.6)`:this._loadingElement.style.color=`rgba(255,255,255,.3)`}let i=this._loadingElementOptions?.className??e.LoadingContainerClassName;if(this._loadingElement.classList.add(i),this._loadingElementOptions?.additionalClasses)for(let e of this._loadingElementOptions.additionalClasses)this._loadingElement.classList.add(e);let a=document.createElement(`div`);a.style.cssText=` - position: relative; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; - height: 100%; - pointer-events: none; - `,this._loadingElement.appendChild(a);let o=this._element.getAttribute(`poster`);if(o!==null&&o!==`0`){let e=document.createElement(`div`),t=o?.length?`0px`:`50px`;e.style.cssText=` - position: absolute; - left: 0; - top: 0; - bottom: 0; - right: 0; - z-index: -1; - overflow: hidden; - - margin: -${t}; - background: url('${o?.length?o:`/include/poster.webp`}') center center no-repeat; - background-size: cover; - filter: blur(${t}); - `,this._loadingElement.appendChild(e)}let s=document.createElement(`img`);if(s.style.userSelect=`none`,s.style.objectFit=`contain`,s.style.transform=`translateY(30px)`,s.style.opacity=`0.0000001`,s.style.transition=`transform 1s ease-out .2s, opacity .3s ease-in-out .2s`,s.src=Ye,r&&this._element){let e=this._element.getAttribute(`logo-src`);e&&(s.src=e,setTimeout(()=>{s.style.opacity=`1`,s.style.transform=`translateY(0px)`},1))}s.style.width=`80%`,s.style.height=`min(1000px, max(15%, 50px))`,a.appendChild(s);let c=document.createElement(`div`);c.style.cssText=` - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; - opacity: 0; - transition: opacity 1s ease-in-out 4s; - `,setTimeout(()=>{c.style.opacity=`1`},1),this._loadingElement.appendChild(c);let l=document.createElement(`div`);return l.style.display=`flex`,l.style.width=`100%`,l.style.height=`5px`,l.style.position=`absolute`,l.style.left=`0`,l.style.top=`0px`,l.style.opacity=`0`,l.style.transition=`opacity 1s ease-in-out`,l.style.backgroundColor=`rgba(240,240,240,.5)`,setTimeout(()=>{l.style.opacity=`1`},1),this._loadingElement.appendChild(l),this._loadingBar=document.createElement(`div`),l.appendChild(this._loadingBar),this._loadingBar.style.backgroundAttachment=`fixed`,this._loadingBar.style.background=`#c4c4c4ab`,this._loadingBarFinishedColor=`#ddddddab`,this._loadingBar.style.width=`0%`,this._loadingBar.style.height=`100%`,this._loadingElement}},K=b(`debugwebcomponent`),Ds=`vr`,Os=`desktop`,ks=[`ar`,Ds,Os],q=`ar-session-active`,J=`desktop-session-active`,As=[`src`,`hash`,`camera-controls`,`dracoDecoderPath`,`dracoDecoderType`,`ktx2DecoderPath`,`public-key`,`version`,`tone-mapping`,`tone-mapping-exposure`,`background-blurriness`,`background-color`,`environment-intensity`,`focus-rect`,`loadstart`,`progress`,`loadfinished`],js=class extends HTMLElement{static get observedAttributes(){return As}get loadingProgress01(){return this._loadingProgress01}get loadingFinished(){return this.loadingProgress01>.999}get cameraControls(){let e=this.getAttribute(`camera-controls`);return e==null?null:!(e===null||e===`False`||e===`false`||e===`0`||e===`none`)}set cameraControls(e){e===null?this.removeAttribute(`camera-controls`):this.setAttribute(`camera-controls`,e?`true`:`false`)}getContext(){return new Promise((e,t)=>{if(this._context&&this.loadingFinished)e(this._context);else{let t=()=>{this.removeEventListener(`loadfinished`,t),this._context&&this.loadingFinished&&e(this._context)};this.addEventListener(`loadfinished`,t)}})}get context(){return this._context}_context;_overlay_ar;_loadingProgress01=0;_loadingView;_previousSrc=null;_didFullyLoad=!1;_didInitialize=!1;constructor(){super(),this.attachShadow({mode:`open`,delegatesFocus:!0});let e=document.createElement(`template`);e.innerHTML=` -
- -
-
- -
-`,this.shadowRoot.appendChild(e.content.cloneNode(!0)),we(Ge,{element:this.shadowRoot}),this.addEventListener(`ready`,this.onReady),this.addEventListener(`error`,this.onError)}ensureInitialized(){this._didInitialize||(this._didInitialize=!0,this.initializeDom())}initializeDom(){rt(),this.setAttribute(`role`,`application`),this.setAttribute(`aria-label`,`Needle Engine 3D scene`)}connectedCallback(){if(K&&console.log(` connected`),this.ensureInitialized(),this.setPublicKey(),this.setVersion(),(this.getAttribute(`tabindex`)===null||this.getAttribute(`tabindex`)===void 0)&&this.setAttribute(`tabindex`,`0`),this._overlay_ar=new Ss,this.getOrCreateContext(),this.addEventListener(`xr-session-started`,this.onXRSessionStarted),this.onSetupDesktop(),!this.getAttribute(`src`)){let e=globalThis[`needle:codegen_files`];K&&console.log(`src is null, trying to load from globalThis["needle:codegen_files"]`,e),e&&(K&&console.log(`globalThis["needle:codegen_files"]`,e),this.setAttribute(`src`,e))}K&&console.log(`src`,this.getAttribute(`src`));let e=this._loadId;setTimeout(()=>{this.isConnected!==!1&&e===this._loadId&&this.onLoad()},1)}disconnectedCallback(){this.removeEventListener(`xr-session-started`,this.onXRSessionStarted),this._didFullyLoad=!1;let e=this.getAttribute(`keep-alive`),t=e==null||e?.length>0&&e!==`true`&&e!==`1`;K&&console.warn(` disconnected, keep-alive: "`+e+`"`,typeof e,`Dispose=`,t),t?(K&&console.warn(` dispose`),this._context?.dispose(),this._context=null,this._lastSourceFiles=null,this._loadId+=1):K&&console.warn(` is not disposed because keep-alive is set`)}connectedMoveCallback(){}attributeChangedCallback(e,t,n){switch(K&&console.log(`attributeChangedCallback`,e,t,n),e){case`src`:K&&console.warn(` -changed from "`,t,`" to "`,n,`"`),this.onLoad();break;case`hash`:this._context&&(this._context.hash=n);break;case`loadstart`:case`progress`:case`loadfinished`:typeof n==`string`&&n.length>0&&(K&&console.log(e+` attribute changed`,n),this.registerEventFromAttribute(e,n));break;case`dracoDecoderPath`:K&&console.log(`dracoDecoderPath`,n),vn(n);break;case`dracoDecoderType`:n===`wasm`||n===`js`?(K&&console.log(`dracoDecoderType`,n),gn(n)):console.error(`Invalid dracoDecoderType`,n,`expected js or wasm`);break;case`ktx2DecoderPath`:K&&console.log(`ktx2DecoderPath`,n),Mn(n);break;case`tonemapping`:case`tone-mapping`:case`tone-mapping-exposure`:case`background-blurriness`:case`background-color`:case`environment-intensity`:this.applyAttributes();break;case`public-key`:n!=`npk_95953b9200a35d0aaefda4761b4646dd1e3a100122be365466f01340a7236289`&&this.setPublicKey();break;case`version`:n!=`5.0.3`&&this.setVersion();break;case`focus-rect`:{let e=this.getAttribute(`focus-rect`);if(e){let t=this.getOrCreateContext();if(e===null)t.setCameraFocusRect(null);else if(typeof e==`string`&&e.length>0){let n=document.querySelector(e);n||console.warn(`No element found for focus-rect selector: ${e}`),t.setCameraFocusRect(n instanceof HTMLElement?n:null)}else e instanceof HTMLElement?t.setCameraFocusRect(e):console.warn(`Invalid focus-rect value. Expected a CSS selector string or an HTMLElement.`,e)}}break}}get toneMapping(){return this.getAttribute(`tonemapping`)||this.getAttribute(`tone-mapping`)}_loadId=0;_abortController=null;_lastSourceFiles=null;_createContextPromise=null;getOrCreateContext(){return this._context||=(K&&console.warn(`Create new context`),new _t({domElement:this})),this._context}async onLoad(){if(!this.isConnected)return;let e=this.getOrCreateContext(),t=this.getSourceFiles();if(!this.checkIfSourceHasChanged(t,this._lastSourceFiles))return;this._abortController&&=(K&&console.warn(`Abort previous loading process`),this._abortController.abort(),null),this._lastSourceFiles=t;let n=++this._loadId;if((t==null||t.length<=0)&&(K&&console.warn(`Clear scene`,t),e.clear(),n!==this._loadId))return;let r=this.getAttribute(`alias`);this.classList.add(`loading`);let i=Et();this.ensureLoadStartIsRegistered();let a=this.dispatchEvent(new CustomEvent(`loadstart`,{detail:{context:e,alias:r},cancelable:!0}));if(i){let e=this.getAttribute(`hide-loading-overlay`);e!=null&&e!==`0`&&(a=!1)}a===!1&&!i&&(h()||(a=!0),console.warn(`Needle Engine: You need a commercial license to override the default loading view. Visit https://needle.tools/pricing`),h()&&E(`You need a commercial license to override the default loading view. This will not work in production.`)),!this._loadingView&&a&&(this._loadingView=new Es(this)),a&&(this._didFullyLoad===!0?setTimeout(()=>{this._loadingView&&this._loadingProgress01<.3&&this._loadId===n&&this._loadingView.onLoadingBegin(`begin load`)},300):this._loadingView?.onLoadingBegin(`begin load`)),K&&console.warn(`-------------- -Needle Engine: Begin loading `+n+` -`,t),this.onBeforeBeginLoading();let o=[],s={context:this._context,name:``,progress:{},index:0,count:t.length,totalProgress01:this._loadingProgress01},c=new CustomEvent(`progress`,{detail:s}),l=[],u=new AbortController;this._abortController=u;let ee={files:t,abortSignal:u.signal,onLoadingProgress:e=>{if(K&&console.debug(`Loading progress: `,e),u.signal.aborted)return;let t=e.index;!l[t]&&e.name&&(l[t]=Ms(e.name)),e.name=l[t],a&&this._loadingView?.onLoadingUpdate(e),s.name=e.name,s.progress=e.progress,this._loadingProgress01=Ts(e),s.totalProgress01=this._loadingProgress01,this.dispatchEvent(c)},onLoadingFinished:(e,t,n)=>{K&&console.debug(`Finished loading \"${t}\" (aborted? ${u.signal.aborted})`),!u.signal.aborted&&n&&o.push({src:t,file:n})}};Ns(this);let te=this.getAttribute(`hash`);te!=null&&(e.hash=te),e.alias=r,this._createContextPromise=e.create(ee);let ne=await this._createContextPromise;if(this.applyAttributes(),K&&console.warn(`-------------- -Needle Engine: finished loading `+n+` -`,t,`Aborted? ${u.signal.aborted}`),u.signal.aborted){console.log(`Loading finished but aborted...`);return}if(this._loadId!==n){console.log(`Load id changed during loading process`);return}this._loadingProgress01=1,a&&ne&&this._loadingView?.onLoadingUpdate(1,`creating scene`),this._didFullyLoad=!0,this.classList.remove(`loading`),this.classList.add(`loading-finished`),this.dispatchEvent(new CustomEvent(`loadfinished`,{detail:{context:this._context,src:r,loadedFiles:o}}))}applyAttributes(){let e=this.getOrCreateContext();if(e.renderer){let t=ct(this.toneMapping);t!==void 0&&(e.renderer.toneMapping=t);let n=this.getAttribute(`tone-mapping-exposure`);if(n!=null){let t=parseFloat(n);isNaN(t)||(e.renderer.toneMappingExposure=t)}}let t=this.getAttribute(`background-blurriness`);if(t!=null){let n=parseFloat(t);isNaN(n)||(e.scene.backgroundBlurriness=n)}let n=this.getAttribute(`environment-intensity`);if(n!=null){let t=parseFloat(n);isNaN(t)||(e.scene.environmentIntensity=t)}let r=this.getAttribute(`background-color`);if(e.renderer)if(typeof r==`string`&&r.length>0){let t=S.fromColorRepresentation(r);K&&console.debug(` background-color changed, str:`,r,`→`,t),e.renderer.setClearColor(t,t.alpha),e.scene.background=null}else this.getAttribute(`background-image`)&&this.setAttribute(`background-image`,this.getAttribute(`background-image`))}onXRSessionStarted=()=>{let e=this.getOrCreateContext(),t=e.xrSessionMode;t===`immersive-ar`?this.onEnterAR(e.xrSession):t===`immersive-vr`&&this.onEnterVR(e.xrSession),e.xrSession?.addEventListener(`end`,()=>{this.dispatchEvent(new CustomEvent(`xr-session-ended`,{detail:{session:e.xrSession,context:this._context,sessionMode:t}})),t===`immersive-ar`?this.onExitAR(e.xrSession):t===`immersive-vr`&&this.onExitVR(e.xrSession)})};onReady=()=>this._loadingView?.onLoadingFinished();onError=()=>this._loadingView?.setMessage(`Loading failed!`);getSourceFiles(){let e=this.getAttribute(`src`);if(!e)return[];let t;t=Array.isArray(e)?e:e.startsWith(`[`)&&e.endsWith(`]`)?JSON.parse(e):e.includes(`,`)?e.split(`,`):[e];for(let e=t.length-1;e>=0;e--){let n=t[e];(n===`null`||n===`undefined`||n?.length<=0)&&t.splice(e,1)}return t}checkIfSourceHasChanged(e,t){if(e?.length!==t?.length||e==null&&t!==null||e!==null&&t==null)return!0;if(e!==null&&t!==null){for(let n=0;n0)try{let n=(0,eval)(t);typeof n==`function`&&(this._previouslyRegisteredMap.set(e,n),this.addEventListener(e,e=>n?.call(globalThis,this.getOrCreateContext(),e)))}catch(n){console.error(`Error registering event `+e+`="`+t+`" failed with the following error: -`,n)}}setPublicKey(){this.setAttribute(`public-key`,lt)}setVersion(){this.setAttribute(`version`,Ee)}getAROverlayContainer(){return this._overlay_ar.createOverlayContainer(this)}getVROverlayContainer(){for(let e=0;ethis.setupElementsForMode(e,`ar`))}onSetupVR(){this.classList.remove(q),this.classList.remove(J),this.foreachHtmlElement(e=>this.setupElementsForMode(e,Ds))}onSetupDesktop(){this.classList.remove(q),this.classList.add(J);let e=this.getAROverlayContainer();e&&(e.classList.remove(q),e.classList.add(J)),this.foreachHtmlElement(e=>this.setupElementsForMode(e,Os))}setupElementsForMode(e,t,n=null){if(e!==this._context?.renderer?.domElement&&!(e.id===`VRButton`||e.id===`ARButton`))if(e.classList.contains(t))e.style.visibility=`visible`,e.style.display===`none`&&(e.style.display=`block`);else for(let t of ks)e.classList.contains(t)&&(e.style.visibility=`hidden`,e.style.display=`none`)}foreachHtmlElement(e){for(let t=0;t0&&(n=n.substring(0,r));let i=n.indexOf(`=`);i>0&&(n=n.substring(i));let a=n.split(`.`).pop(),o=a?[`glb`,`gltf`,`usdz`,`usd`,`fbx`,`obj`,`mtl`].indexOf(a.toLowerCase()):-1;if(a&&o>=0&&(n=n.substring(0,n.length-a.length-1)),n=decodeURIComponent(n),n.length>3){let e=``,t=!1,r=[`(`,`)`,`[`,`]`,`{`,`}`,`:`,`;`,`,`,`.`,`!`,`?`];for(let i=0;i{let n=e.getAttribute(`loading-blur`);if(n!==null&&n!==`0`&&t.domElement===e){let r=t.lodsManager.manager?.awaitLoading({frames:5,signal:AbortSignal.timeout(1e4),maxPromisesPerObject:1}).catch(e=>{}),i=`20px`;if(n.endsWith(`px`)&&(i=n),t.scene.background===null){let n=e,a=t.renderer.domElement,o=a.style.filter,s=a.style.overflow;a.style.filter+=`blur(${i})`,n.style.overflow=`hidden`,r?.then(()=>{let e=a.animate([{filter:`blur(0px)`}],{duration:170,easing:`ease-in`});e.onfinish=()=>{a.style.filter=o,n.style.overflow=s}})}else{let e=document.createElement(`div`);t.domElement.prepend(e),e.style.cssText=`position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 10; pointer-events: none`,e.style.backdropFilter=`blur(${i})`,r?.then(()=>{let t=e.animate([{backdropFilter:`blur(0px)`,opacity:0}],{duration:170,easing:`ease-in`});t.onfinish=()=>{e.remove()}})}}},{once:!0})}function Ps(){typeof window>`u`||(window.customElements.get(`needle-engine`)||window.customElements.define(`needle-engine`,js),window.customElements.get(`needle-button`)||window.customElements.define(`needle-button`,bs),window.customElements.get(`needle-logo-element`)||window.customElements.define(`needle-logo-element`,$t),window.customElements.get(`needle-menu`)||window.customElements.define(`needle-menu`,_e))}var Fs=!1;function Is(){Fs||(Fs=!0,Ps(),er(),ke(),Vr(),gs(),ot(),vs(),Qi(),is(),setTimeout(Jo,1e3),Ko(),Wo(),vi(),ca())}var Y=b(`debugphysics`),Ls=b(`debugcolliderplacement`),Rs=b(`debugcollisions`),zs=b(`showcolliders`),Bs=b(`debugraycasts`),X=Symbol(`needle component`),Z=Symbol(`physics body`),Vs=Symbol(`rigidbody`);globalThis.NEEDLE_USE_RAPIER=globalThis.NEEDLE_USE_RAPIER===void 0?!0:globalThis.NEEDLE_USE_RAPIER,Y&&console.log(`Use Rapier`,!0,globalThis.NEEDLE_USE_RAPIER),ut.registerCallback(at.ContextCreationStart,e=>{Y&&console.log(`Register rapier physics backend`),e.context.physics.engine=new Hs(e.context)});var Hs=class e{debugRenderColliders=!1;debugRenderRaycasts=!1;removeBody(e){if(Y&&console.log(`REMOVE BODY`,e?.name,e[Z]),!e)return;this.validate();let t=e[Z];if(e[Z]=null,t&&this.world){let t=this.objects.findIndex(t=>t===e);if(t>=0){let e=this.bodies[t];if(this.bodies.splice(t,1),this.objects.splice(t,1),e instanceof w.RAPIER_PHYSICS.MODULE.Collider){let t=e;this.world?.removeCollider(t,!0);let n=t.parent();n&&n.numColliders()<=0&&(n[X]||this.world?.removeRigidBody(n))}else e instanceof w.RAPIER_PHYSICS.MODULE.RigidBody&&(e.numColliders()<=0?this.world?.removeRigidBody(e):h()&&(e.did_log_removing||setTimeout(()=>{e.numColliders()>0&&(e.did_log_removing=!0,console.warn(`RapierPhysics: removing rigidbody with colliders from the physics world is not possible right now, please remove the colliders first`))},1)))}}}setColliderEnabled(e,t){let n=e[Z];return n?(n.setEnabled(t),Y&&console.log(`SET COLLIDER ENABLED`,e.name,t),!0):!1}updateBody(e,t,n){if(this.validate(),this.enabled&&!(e.destroyed||!e.gameObject)&&!(!t&&!n))if(e.isCollider===!0)console.warn(`TODO: implement updating collider position`);else{let r=e,i=r[Z];i&&this.syncPhysicsBody(r.gameObject,i,t,n)}}updateProperties(e){if(this.validate(),e.isCollider){let t=e,n=t[Z];n&&(this.internalUpdateColliderProperties(t,n),t.sharedMaterial&&this.updatePhysicsMaterial(t))}else{let t=e,n=this.internal_getRigidbody(t);n&&this.internalUpdateRigidbodyProperties(t,n)}}addForce(e,t,n){this.validate();let r=this.internal_getRigidbody(e);r?r.addForce(t,n):this._isInitialized&&console.warn(`Physics Body doesn't exist: can not apply force (does your object with the Rigidbody have a collider?)`)}addImpulse(e,t,n){this.validate();let r=this.internal_getRigidbody(e);r?r.applyImpulse(t,n):this._isInitialized&&console.warn(`Physics Body doesn't exist: can not apply impulse (does your object with the Rigidbody have a collider?)`)}getLinearVelocity(e){this.validate();let t=this.internal_getRigidbody(e);return t?t.linvel():null}getAngularVelocity(e){this.validate();let t=this.internal_getRigidbody(e);return t?t.angvel():null}resetForces(e,t){this.validate(),this.internal_getRigidbody(e)?.resetForces(t)}resetTorques(e,t){this.validate(),this.internal_getRigidbody(e)?.resetTorques(t)}applyImpulse(e,t,n){this.validate();let r=this.internal_getRigidbody(e);r?r.applyImpulse(t,n):this._isInitialized&&console.warn(`Rigidbody doesn't exist: can not apply impulse (does your object with the Rigidbody have a collider?)`)}wakeup(e){this.validate();let t=this.internal_getRigidbody(e);t?t.wakeUp():this._isInitialized&&console.warn(`Rigidbody doesn't exist: can not wake up (does your object with the Rigidbody have a collider?)`)}isSleeping(e){return this.validate(),this.internal_getRigidbody(e)?.isSleeping()}setAngularVelocity(e,t,n){this.validate();let r=this.internal_getRigidbody(e);r?r.setAngvel(t,n):this._isInitialized&&console.warn(`Rigidbody doesn't exist: can not set angular velocity (does your object with the Rigidbody have a collider?)`)}setLinearVelocity(e,t,n){this.validate();let r=this.internal_getRigidbody(e);r?r.setLinvel(t,n):this._isInitialized&&console.warn(`Rigidbody doesn't exist: can not set linear velocity (does your object with the Rigidbody have a collider?)`)}context;_initializePromise;_isInitialized=!1;constructor(e){this.context=e}get isInitialized(){return this._isInitialized}async initialize(){return this._initializePromise||=this.internalInitialization(),this._initializePromise}async internalInitialization(){return b(`__nophysics`)?(console.warn(`Physics are disabled`),!1):(Y&&console.log(`Initialize rapier physics engine`),`env`in import.meta,this._hasCreatedWorld?(console.error(`Invalid call to create physics world: world is already created`),!0):(this._hasCreatedWorld=!0,w.RAPIER_PHYSICS.MAYBEMODULE??(Y&&console.trace(`Loading rapier physics engine`),await(await w.RAPIER_PHYSICS.load()).init()),Y&&console.log(`Physics engine initialized, creating world...`),this._world=new w.RAPIER_PHYSICS.MODULE.World(this._gravity),this.rapierRay=new w.RAPIER_PHYSICS.MODULE.Ray({x:0,y:0,z:0},{x:0,y:0,z:1}),this.enabled=!0,this._isInitialized=!0,Y&&console.log(`Physics world created`),!0))}validate(){this._isInitialized||Y&&(this._lastWarnTime=this._lastWarnTime??0,Date.now()-this._lastWarnTime>1e3&&(this._lastWarnTime=Date.now(),console.warn(`Physics engine is not initialized`)))}rapierRay;raycastVectorsBuffer=new de(()=>new n,10);raycast(e,t,n){if(!this._isInitialized)return console.log(`Physics engine is not initialized`),null;let r=n?.maxDistance,i=n?.solid;r===void 0&&(r=1/0),i===void 0&&(i=!0);let a=this.getPhysicsRay(this.rapierRay,e,t);if(!a)return null;(this.debugRenderRaycasts||Bs)&&O.DrawRay(a.origin,a.dir,255,1);let o=this.world?.castRay(a,r,i,n?.queryFilterFlags,n?.filterGroups,void 0,void 0,e=>{let t=e[X];return n?.filterPredicate?n.filterPredicate(t):n?.useIgnoreRaycastLayer===!1?!0:!t?.gameObject.layers.isEnabled(2)});if(o){let e=a.pointAt(o.timeOfImpact),t=this.raycastVectorsBuffer.get();return t.set(e.x,e.y,e.z),{point:t,collider:o.collider[X]}}return null}raycastAndGetNormal(e,t,n){if(!this._isInitialized)return null;let r=n?.maxDistance,i=n?.solid;r===void 0&&(r=1/0),i===void 0&&(i=!0);let a=this.getPhysicsRay(this.rapierRay,e,t);if(!a)return null;(this.debugRenderRaycasts||Bs)&&O.DrawRay(a.origin,a.dir,255,1);let o=this.world?.castRayAndGetNormal(a,r,i,n?.queryFilterFlags,n?.filterGroups,void 0,void 0,e=>{let t=e[X];return n?.filterPredicate?n.filterPredicate(t):n?.useIgnoreRaycastLayer===!1?!0:!t?.gameObject.layers.isEnabled(2)});if(o){let e=a.pointAt(o.timeOfImpact),t=o.normal,n=this.raycastVectorsBuffer.get(),r=this.raycastVectorsBuffer.get();return n.set(e.x,e.y,e.z),r.set(t.x,t.y,t.z),{point:n,normal:r,collider:o.collider[X]}}return null}getPhysicsRay(e,t,n){let r=this.context?.mainCamera;if(t===void 0){let e=this.context?.input.getPointerPosition(0);if(e)t=e;else return null}if(t.z===void 0){if(!r)return console.error(`Can not perform raycast from 2d point - no main camera found`),null;let e=this.raycastVectorsBuffer.get();e.x=t.x,e.y=t.y,e.z=0,(e.x>1||e.y>1||e.y<-1||e.x<-1)&&(Y&&console.warn(`Converting screenspace to raycast space`,e),this.context?.input.convertScreenspaceToRaycastSpace(e)),e.unproject(r),t=e}let i=t;e.origin.x=i.x,e.origin.y=i.y,e.origin.z=i.z;let a=this.raycastVectorsBuffer.get();if(n)a.set(n.x,n.y,n.z);else{if(!r)return console.error(`Can not perform raycast - no camera found`),null;a.set(e.origin.x,e.origin.y,e.origin.z);let t=v(r);a.sub(t)}return a.normalize(),e.dir.x=a.x,e.dir.y=a.y,e.dir.z=a.z,e}rapierSphere=null;rapierBox=null;rapierColliderArray=[];rapierIdentityRotation={x:0,y:0,z:0,w:1};rapierForwardVector={x:0,y:0,z:1};sphereOverlap(e,t){return this.rapierSphere??=new w.RAPIER_PHYSICS.MODULE.Ball(t),this.rapierSphere.radius=t,(this.debugRenderRaycasts||Bs)&&O.DrawWireSphere(e,t,3359999,1),this.shapeOverlap(e,this.rapierIdentityRotation,this.rapierSphere)}boxOverlap(e,t,n=null){return n===null&&(n=this.rapierIdentityRotation),this.rapierBox??=new w.RAPIER_PHYSICS.MODULE.Cuboid(1,1,1),this.rapierBox.halfExtents.x=t.x*.5,this.rapierBox.halfExtents.y=t.y*.5,this.rapierBox.halfExtents.z=t.z*.5,(this.debugRenderRaycasts||Bs)&&O.DrawWireBox(e,t,3359999,1,!0,n),this.shapeOverlap(e,n,this.rapierBox)}shapeOverlap(e,t,n){return this.rapierColliderArray.length=0,!this._isInitialized||!this.world||this.world.intersectionsWithShape(e,t,n,e=>{let t=e[X],n=new Je(t.gameObject,t);return this.rapierColliderArray.push(n),!0},void 0,void 0,void 0,void 0,e=>e.isSensor()?!1:e[X].gameObject.layers.isEnabled(2)==0),this.rapierColliderArray}enabled=!1;get world(){return this._world}_tempPosition=new n;_tempQuaternion=new le;_tempScale=new n;_tempMatrix=new te;static _didLoadPhysicsEngine=!1;_isUpdatingPhysicsWorld=!1;get isUpdating(){return this._isUpdatingPhysicsWorld}_world;_hasCreatedWorld=!1;eventQueue;collisionHandler;objects=[];bodies=[];_meshCache=new Map;_gravity={x:0,y:-9.81,z:0};get gravity(){return this.world?.gravity??this._gravity}set gravity(e){this.world?this.world.gravity=e:this._gravity=e}clearCaches(){this._meshCache.clear(),this.eventQueue?.raw&&this.eventQueue?.free(),this.world?.bodies&&this.world?.free()}async addBoxCollider(e,t){if(this._isInitialized||await this.initialize(),!e.activeAndEnabled)return;if(!this.enabled){Y&&console.warn(`Physics are disabled`);return}let n=e.gameObject,r=y(n,this._tempPosition).multiply(t);r.multiplyScalar(.5),r.x<0&&(r.x=Math.abs(r.x)),r.y<0&&(r.y=Math.abs(r.y)),r.z<0&&(r.z=Math.abs(r.z));let i=1e-7;r.x1e-4||Math.abs(c.y-1)>1e-4||Math.abs(c.z-1)>1e-4){let t=`${i.uuid}_${c.x}_${c.y}_${c.z}_${n}`;if(this._meshCache.has(t))Y&&console.warn(`Use cached mesh collider`),a=this._meshCache.get(t);else{(Y||h())&&console.debug(`[Performance] Your MeshCollider \"${e.name}\" is scaled: consider applying the scale to the collider mesh instead (${c.x}, ${c.y}, ${c.z})`);let n=new Float32Array(a.length);for(let e=0;e31?console.error(`Rapier only supports 32 layers, layer ${t} is not supported`):r|=1<31?console.error(`Rapier only supports 32 layers, layer ${t} is not supported`):a|=1<=-127?t.setDominanceGroup(Math.floor(e.dominanceGroup)):t.setDominanceGroup(0),e.autoMass){t.setAdditionalMass(0,!1);for(let e=0;ee.isEnabled());this.lines.geometry.setAttribute(`position`,new p(t.vertices,3)),this.lines.geometry.setAttribute(`color`,new p(t.colors,4));let n=e.debugRender(void 0,e=>!e.isEnabled());this.disabledLines.geometry.setAttribute(`position`,new p(n.vertices,3)),this.disabledLines.geometry.setAttribute(`color`,new p(n.colors,4)),this.disabledLines.visible=n.vertices.length>0,(this.context.time.frame%30==0||this.lines.geometry.boundingSphere?.radius===0)&&(this.lines.geometry.computeBoundingSphere(),this.disabledLines.geometry.computeBoundingSphere())}else this.lines&&this.context?.scene.remove(this.lines),this.disabledLines&&this.context?.scene.remove(this.disabledLines)}syncObjects(){if(!Ls)for(let e=0;e=0;e--)r.multiply(i[e]);return r}return i.push(t.matrix),t.parent&&this.getRigidbodyRelativeMatrix(t.parent,n,r,i),r}static centerConnectionPos={x:0,y:0,z:0};static centerConnectionRot={x:0,y:0,z:0,w:1};addFixedJoint(t,n){if(!this.world){console.error(`Physics world not initialized`);return}let r=t[Z],i=n[Z];this.calculateJointRelativeMatrices(t.gameObject,n.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);let a=w.RAPIER_PHYSICS.MODULE.JointData.fixed(e.centerConnectionPos,e.centerConnectionRot,this._tempPosition,this._tempQuaternion),o=this.world.createImpulseJoint(a,r,i,!0);Y&&console.log(`ADD FIXED JOINT`,o)}addHingeJoint(e,t,n,r){if(!this.world){console.error(`Physics world not initialized`);return}let i=e[Z],a=t[Z];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);let o=w.RAPIER_PHYSICS.MODULE.JointData.revolute(n,this._tempPosition,r),s=this.world.createImpulseJoint(o,i,a,!0);Y&&console.log(`ADD HINGE JOINT`,s)}calculateJointRelativeMatrices(e,t,n){e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let r=e.matrixWorld,i=t.matrixWorld;r.elements[0]=1,r.elements[5]=1,r.elements[10]=1,i.elements[0]=1,i.elements[5]=1,i.elements[10]=1,n.copy(i).premultiply(r.invert()).invert()}},Us=class{world;eventQueue;constructor(e,t){this.world=e,this.eventQueue=t}activeCollisions=[];activeCollisionsStay=[];activeTriggers=[];handleCollisionEvents(){this.eventQueue&&this.world&&this.eventQueue.drainCollisionEvents((e,t,n)=>{let r=this.world.getCollider(e),i=this.world.getCollider(t);if(!r||!i)return;let a=r[X],o=i[X];Rs&&console.log(`EVT`,a.name,o.name,n,r,i),a&&o&&(n?(this.onCollisionStarted(a,r,o,i),this.onCollisionStarted(o,i,a,r)):(this.onCollisionEnded(a,o),this.onCollisionEnded(o,a)))})}update(){this.onHandleCollisionStay()}onCollisionStarted(e,t,n,r){let i=null;if(e.isTrigger||n.isTrigger)Pt(e.gameObject,t=>{t.onTriggerEnter&&!t.destroyed&&t.onTriggerEnter(n),this.activeTriggers.push({collider:e,component:t,otherCollider:n})});else{let a=e.gameObject;this.world.contactPair(t,r,(t,r)=>{Pt(a,r=>{if(r.destroyed)return;let o=r.onCollisionEnter||r.onCollisionStay||r.onCollisionExit;if(o||Rs){if(!i){let e=[],r=t.normal();n instanceof Un&&n.convex&&(r.x=-r.x,r.y=-r.y,r.z=-r.z);for(let n=0;n0}var qs={binary:!0,animations:!0};async function Js(e){if(!e.context)throw Error(`No context provided to exportAsGLTF`);e.scene||=e.context.scene;let t={...qs,...e},{context:n}=t,r=new on;r.register(e=>new hi(e)),r.register(e=>new Zr(e)),r.register(e=>new pi(e)),Nn(r,t.context);let i={binary:t.binary,animations:Zs(n,t.scene,[])},a=new Xs;console.debug(`Exporting GLTF`,i),a.onBeforeExport(t),Gs(!0);let o=await r.parseAsync(t.scene,i).catch(e=>(console.error(e),null));if(Gs(!1),a.onAfterExport(t),!o)throw Error(`Failed to export GLTF`);if(t.downloadAs!=null){let e=null;if(o instanceof ArrayBuffer?e=new Blob([o],{type:`application/octet-stream`}):console.error(`Can not download GLTF as a blob`,o),e){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n;let i=t.downloadAs;!i.endsWith(`.glb`)&&!i.endsWith(`.gltf`)&&(i+=t.binary?`.glb`:`.gltf`),r.download=i,r.click()}}return o}var Ys=Symbol(`needle:weight`),Xs=class{_undo=[];onBeforeExport(e){e.context.animations.mixers.forEach(e=>{let t=Ze.tryGetActionsFromMixer(e);if(t)for(let e=0;e{n.weight=n[Ys]})}e.update(0)}),e.context.scene.traverse(e=>{if(!mi(e)){let t=e.parent;t&&(e.removeFromParent(),this._undo.push(()=>t.add(e)))}})}onAfterExport(e){this._undo.forEach(e=>e()),this._undo.length=0}};function Zs(e,t,n){e.animations.mixers.forEach(e=>{let t=Ze.tryGetActionsFromMixer(e);if(t)for(let e=0;ee.layers.set(2))}},$s=class{avatarRegistryUrl=null;async getOrCreateNewAvatarInstance(e,t){if(!t)return console.error(`Can not create avatar: failed to provide id or root object`),null;let n=null;if(typeof t==`string`){if(n=await this.loadAvatar(e,t),!n){let r=new Ke;n=x.instantiate(Qe(t,e.scene),r)}}else n=t;if(!n)return null;let r=this.findAvatar(n);return r.isValid?(Q&&console.log(`[Custom Avatar] valid config`,t,Q?r:``),r):(console.warn(`[Custom Avatar] config isn't valid`,t,Q?r:``),null)}async loadAvatar(e,t){if(console.assert(t!=null&&typeof t==`string`,`Avatar id must not be null`),t.length<=0||!t)return null;if(Q&&console.log(`[Custom Avatar] `+t+`, loading...`),t.endsWith(`.glb`)||(t+=`.glb`),this.avatarRegistryUrl===null){let n=await fetch(`./`+t),r=null;if(n.ok){let e=await n.blob();e&&(r=await e.arrayBuffer())}return r?(await be().parseSync(e,r,null,0))?.scene??null:null}let n=new A;return Vn(n,e),new Promise((r,i)=>{let a=this.avatarRegistryUrl+`/`+t;n.load(a,async t=>{await be().createBuiltinComponents(e,a,t,null,void 0),r(t.scene)},e=>{Q&&console.log(`[Custom Avatar] `+e.loaded/e.total*100+`% loaded of `+e.total/1024+`kB`)},e=>{console.error(`[Custom Avatar] Error when loading: `+e),r(null)})})}cacheModel(e,t){}findAvatar(e){let t=e,r=t;r.children.length==1&&(r=e.children[0]);let i=this.findAvatarPart(r,[`head`]),a=this.findAvatarPart(r,[`left`,`hand`]),o=this.findAvatarPart(r,[`right`,`hand`]);if(!i){i=t;let e=new n;new re().setFromObject(i).getSize(e);let r=Math.max(e.x,e.y,e.z);console.warn(`[Custom Avatar] Normalizing head scale, it's too big: `+r+` meters! Should be < 0.3m`),r>.3&&i.scale.multiplyScalar(1/r*.3)}return new Qs(t,i,a,o)}findAvatarPart(e,t){let n=e.name.toLowerCase(),r=!0;for(let e of t){if(!r)break;n.indexOf(e)===-1&&(r=!1)}if(r)return e;if(e.children)for(let n of e.children){let e=this.findAvatarPart(n,t);if(e)return e}return null}handleCustomAvatarErrors(e){if(!e.ok)throw Error(e.statusText);return e}},ec=class{get extensionName(){return`DocumentExtension`}onAfterBuildDocument(e){}},tc=e({ActionBuilder:()=>jr,ActionCollection:()=>ei,ActionModel:()=>br,AlignmentConstraint:()=>Mi,Animation:()=>vr,AnimationCurve:()=>fa,AnimationExtension:()=>Fn,AnimationTrackHandler:()=>ui,Animator:()=>Xe,AnimatorController:()=>ue,Antialiasing:()=>Ba,Attractor:()=>qr,AudioExtension:()=>Zn,AudioListener:()=>wr,AudioSource:()=>lr,AudioTrackHandler:()=>Gr,Avatar:()=>mr,AvatarBlink_Simple:()=>kn,AvatarEyeLook_Rotation:()=>Sn,AvatarLoader:()=>$s,AvatarMarker:()=>gr,AvatarModel:()=>Qs,Avatar_Brain_LookAt:()=>kr,Avatar_MouthShapes:()=>Qn,Avatar_MustacheShake:()=>Yn,Avatar_POI:()=>ar,AxesHelper:()=>Vi,BaseUIComponent:()=>en,BasicIKConstraint:()=>qi,BehaviorExtension:()=>rr,BehaviorModel:()=>Or,BloomEffect:()=>Ua,BoxCollider:()=>pn,BoxGizmo:()=>cr,BoxHelperComponent:()=>Oi,Button:()=>Wt,CallInfo:()=>pt,Camera:()=>he,CameraTargetReachedEvent:()=>tt,Canvas:()=>Gt,CanvasGroup:()=>Bt,CapsuleCollider:()=>Gn,ChangeMaterialOnClick:()=>fn,ChangeTransformOnClick:()=>Wn,CharacterController:()=>ea,CharacterControllerInput:()=>Ei,ChromaticAberration:()=>Ka,ClickThrough:()=>Wi,ColorAdjustments:()=>La,ColorBySpeedModule:()=>Ta,ColorOverLifetimeModule:()=>Oa,ContactShadows:()=>Rn,ControlTrackHandler:()=>ia,CursorFollow:()=>yi,CustomBranding:()=>Cr,Deletable:()=>bi,DeleteBox:()=>Gi,DepthOfField:()=>Xa,DeviceFlag:()=>Pi,DocumentExtension:()=>ec,DragControls:()=>Ui,DropListener:()=>Ji,Duplicatable:()=>$r,EffectWrapper:()=>Ha,EmissionModule:()=>_a,EmphasizeOnClick:()=>Cn,EnvironmentScene:()=>Si,EventList:()=>_,EventListEvent:()=>ht,EventSystem:()=>ve,EventTrigger:()=>Xr,FieldWithDefault:()=>Nr,FixedJoint:()=>ri,Fog:()=>Qr,GltfExport:()=>la,GltfExportBox:()=>Ur,Gradient:()=>Ca,Graphic:()=>Dt,GraphicRaycaster:()=>Ft,GridHelper:()=>Yr,GridLayoutGroup:()=>Lt,GroundProjectedEnv:()=>Ut,GroupActionModel:()=>pr,HideOnStart:()=>Hn,HingeJoint:()=>oi,HorizontalLayoutGroup:()=>Jt,HoverAnimation:()=>Ni,Image:()=>kt,InheritVelocityModule:()=>Aa,InputField:()=>Rt,InstanceHandle:()=>hn,InstancingHandler:()=>Fr,Interactable:()=>Zi,Keyframe:()=>da,LODGroup:()=>Hr,LODModel:()=>Fi,Light:()=>ti,LimitVelocityOverLifetimeModule:()=>va,LogStats:()=>zi,LookAt:()=>Ci,LookAtConstraint:()=>Te,MainModule:()=>ya,MarkerTrackHandler:()=>fi,MaskableGraphic:()=>Tt,MeshCollider:()=>Un,MeshRenderer:()=>zr,MinMaxCurve:()=>Ea,MinMaxGradient:()=>wa,NeedleMenu:()=>dn,NestedGltf:()=>Li,Networking:()=>ai,NoiseModule:()=>xa,ObjectRaycaster:()=>pe,OffsetConstraint:()=>Kr,OpenURL:()=>Xi,OrbitControls:()=>Ce,Outline:()=>gt,Padding:()=>St,ParticleBurst:()=>ba,ParticleSubEmitter:()=>ha,ParticleSystem:()=>ka,ParticleSystemRenderer:()=>Da,PhysicsExtension:()=>Rr,PixelationEffect:()=>Ia,PlayAnimationOnClick:()=>Kn,PlayAudioOnClick:()=>xn,PlayableDirector:()=>oa,PlayerColor:()=>di,PointerEventData:()=>Be,PostProcessingHandler:()=>Wa,PreliminaryAction:()=>On,PreliminaryTrigger:()=>Tr,RawImage:()=>vt,Rect:()=>Yt,RectTransform:()=>nn,ReflectionProbe:()=>Tn,RegisteredAnimationInfo:()=>un,RemoteSkybox:()=>Ai,Renderer:()=>ir,RendererLightmap:()=>Bn,Rigidbody:()=>Le,RotationBySpeedModule:()=>ja,RotationOverLifetimeModule:()=>Pa,SceneSwitcher:()=>na,ScreenCapture:()=>Wr,ScreenSpaceAmbientOcclusion:()=>Ja,ScreenSpaceAmbientOcclusionN8:()=>Ga,ScrollFollow:()=>Yi,SeeThrough:()=>li,SetActiveOnClick:()=>En,ShadowCatcher:()=>aa,ShapeModule:()=>ga,SharpeningEffect:()=>Fa,SignalAsset:()=>Ii,SignalReceiver:()=>ni,SignalReceiverEvent:()=>ii,SignalTrackHandler:()=>Jr,Size:()=>bt,SizeBySpeedModule:()=>Na,SizeOverLifetimeModule:()=>pa,SkinnedMeshRenderer:()=>Lr,SmoothFollow:()=>xi,SpatialGrabRaycaster:()=>At,SpatialHtml:()=>qt,SpatialTrigger:()=>ta,SpatialTriggerReceiver:()=>sa,SpectatorCamera:()=>_i,SphereCollider:()=>qn,SplineContainer:()=>ji,SplineData:()=>ki,SplineWalker:()=>Bi,Sprite:()=>bn,SpriteData:()=>wn,SpriteRenderer:()=>An,SpriteSheet:()=>Ln,SubEmitterSystem:()=>Sa,SyncedCamera:()=>Ki,SyncedRoom:()=>Di,SyncedTransform:()=>qe,TapGestureTrigger:()=>Xn,TeleportTarget:()=>mn,TestRunner:()=>$i,TestSimulateUserData:()=>Ti,Text:()=>Ht,TextBuilder:()=>ur,TextExtension:()=>$n,TextureSheetAnimationModule:()=>ua,TiltShiftEffect:()=>Va,ToneMappingEffect:()=>Ra,TrailModule:()=>Ma,TransformData:()=>sr,TransformGizmo:()=>Ri,TriggerBuilder:()=>nr,TriggerModel:()=>Sr,UIRaycastUtils:()=>Ue,UIRootComponent:()=>$e,USDZExporter:()=>_r,USDZText:()=>Mr,USDZUIExtension:()=>dr,UsageMarker:()=>wi,VariantAction:()=>ci,VelocityOverLifetimeModule:()=>ma,VerticalLayoutGroup:()=>Ct,VideoPlayer:()=>ra,ViewBox:()=>Hi,Vignette:()=>qa,VisibilityAction:()=>Jn,Voip:()=>In,Volume:()=>Ya,VolumeParameter:()=>Za,VolumeProfile:()=>za,WebARCameraBackground:()=>xr,WebARSessionRoot:()=>Pn,WebXR:()=>Ir,WebXRImageTracking:()=>Dr,WebXRImageTrackingModel:()=>fr,WebXRPlaneTracking:()=>yr,WebXRTrackedImage:()=>tr,XRControllerFollow:()=>or,XRControllerModel:()=>Pr,XRControllerMovement:()=>zn,XRFlag:()=>Er,XRRig:()=>Ar,XRState:()=>Dn,__Ignore:()=>nc}),nc=class{},rc;(function(e){function t(e,t=!1,r=.75){let i=new ji,a=1-g.clamp(r,0,1);return e.forEach((r,o)=>{let s=new n;o1&&s.subVectors(e[0],r).normalize().multiplyScalar(a);let c=new ki;c.position.copy(r),c.tangentIn.copy(s),c.tangentOut.copy(s),i.addKnot(c)}),i.closed=t,i}e.createFromPoints=t})(rc||={}),Is();var $={VERSION:Ee,Context:_t,NeedleXRSession:wt,assets:{loadFromURL:cs},types:fe,onStart:Qt,onUpdate:nt,onBeforeRender:xt,onAfterRender:rn,onInitializedContext:ge,onDestroyContext:et,onClearContext:tn};globalThis.Needle?.VERSION!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function ic(e){for(let t in e)$[t]=e[t]}ic(Kt),ic(tc);for(let e of Object.getOwnPropertyNames(x))switch(e){case`prototype`:case`constructor`:case`length`:case`name`:continue;default:$[e]=x[e];break}if(!globalThis.Needle)globalThis.Needle=$;else for(let e in $)globalThis.Needle[e]=$[e];globalThis.THREE?console.warn(`Three.js is already imported`):globalThis.THREE=l;var ac=class extends $a{constructor(){super(new Worker(new URL(``+new URL(`generateMeshBVH.worker-BRfdalWV.js`,import.meta.url).href,``+import.meta.url),{type:`module`})),this.name=`GenerateMeshBVHWorker`}runTask(e,t,n={}){return new Promise((r,i)=>{if(t.getAttribute(`position`).isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw Error(`GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.`);e.onerror=e=>{i(Error(`[GenerateMeshBVHWorker] ${e.message||`Unknown error. Please check the server console. If you're using vite try adding 'three-mesh-bvh' to 'optimizeDeps.exclude' in your vite.config.js`}`))},e.onmessage=a=>{let{data:o}=a;if(o.error)i(Error(o.error)),e.onmessage=null;else if(o.serialized){let{serialized:i,position:a}=o,s=Qa.deserialize(i,t,{setIndex:!1}),c=Object.assign({setBoundingBox:!0},n);if(t.attributes.position.array=a,i.index)if(t.index)t.index.array=i.index;else{let e=new p(i.index,1,!1);t.setIndex(e)}c.setBoundingBox&&(t.boundingBox=s.getBoundingBox(new re)),n.onProgress&&n.onProgress(o.progress),r(s),e.onmessage=null}else n.onProgress&&n.onProgress(o.progress)};let a=t.index?t.index.array:null,o=t.attributes.position.array,s=[o];a&&s.push(a),e.postMessage({index:a,position:o,options:{...n,onProgress:null,includedProgressCallback:!!n.onProgress,groups:[...t.groups]}},s.map(e=>e.buffer).filter(e=>typeof SharedArrayBuffer>`u`||!(e instanceof SharedArrayBuffer)))})}};export{Ro as C,ro as E,Fo as S,io as T,ls as _,$s as a,Po as b,Ks as c,Es as d,Cs as f,us as g,cs as h,ec as i,Hs as l,bs as m,rc as n,Qs as o,Ts as p,nc as r,Js as s,ac as t,js as u,Vo as v,Io as w,Lo as x,Ho as y}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/needle-engine@5.0.3.js.gz b/Needle/MenuScene/dist/assets/needle-engine@5.0.3.js.gz deleted file mode 100644 index e5e7b09..0000000 Binary files a/Needle/MenuScene/dist/assets/needle-engine@5.0.3.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/peerjs.UdR1_Ath.js b/Needle/MenuScene/dist/assets/peerjs.UdR1_Ath.js deleted file mode 100644 index 28db05c..0000000 --- a/Needle/MenuScene/dist/assets/peerjs.UdR1_Ath.js +++ /dev/null @@ -1,78 +0,0 @@ -import{n as e,r as t,t as n}from"./rolldown-runtime.CYVBeYYp.js";var r=n(((e,t)=>{var n={};n.useBlobBuilder=(function(){try{return new Blob([]),!1}catch{return!0}})(),n.useArrayBufferView=!n.useBlobBuilder&&(function(){try{return new Blob([new Uint8Array([])]).size===0}catch{return!0}})(),t.exports.binaryFeatures=n;var r=t.exports.BlobBuilder;typeof window<`u`&&(r=t.exports.BlobBuilder=window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder||window.BlobBuilder);function i(){this._pieces=[],this._parts=[]}i.prototype.append=function(e){typeof e==`number`?this._pieces.push(e):(this.flush(),this._parts.push(e))},i.prototype.flush=function(){if(this._pieces.length>0){var e=new Uint8Array(this._pieces);n.useArrayBufferView||(e=e.buffer),this._parts.push(e),this._pieces=[]}},i.prototype.getBuffer=function(){if(this.flush(),n.useBlobBuilder){for(var e=new r,t=0,i=this._parts.length;t{var n=r().BufferBuilder,i=r().binaryFeatures;t.exports={unpack:function(e){return new a(e).unpack()},pack:function(e){var t=new o;return t.pack(e),t.getBuffer()}};function a(e){this.index=0,this.dataBuffer=e,this.dataView=new Uint8Array(this.dataBuffer),this.length=this.dataBuffer.byteLength}a.prototype.unpack=function(){var e=this.unpack_uint8();if(e<128)return e;if((e^224)<32)return(e^224)-32;var t;if((t=e^160)<=15)return this.unpack_raw(t);if((t=e^176)<=15)return this.unpack_string(t);if((t=e^144)<=15)return this.unpack_array(t);if((t=e^128)<=15)return this.unpack_map(t);switch(e){case 192:return null;case 193:return;case 194:return!1;case 195:return!0;case 202:return this.unpack_float();case 203:return this.unpack_double();case 204:return this.unpack_uint8();case 205:return this.unpack_uint16();case 206:return this.unpack_uint32();case 207:return this.unpack_uint64();case 208:return this.unpack_int8();case 209:return this.unpack_int16();case 210:return this.unpack_int32();case 211:return this.unpack_int64();case 212:return;case 213:return;case 214:return;case 215:return;case 216:return t=this.unpack_uint16(),this.unpack_string(t);case 217:return t=this.unpack_uint32(),this.unpack_string(t);case 218:return t=this.unpack_uint16(),this.unpack_raw(t);case 219:return t=this.unpack_uint32(),this.unpack_raw(t);case 220:return t=this.unpack_uint16(),this.unpack_array(t);case 221:return t=this.unpack_uint32(),this.unpack_array(t);case 222:return t=this.unpack_uint16(),this.unpack_map(t);case 223:return t=this.unpack_uint32(),this.unpack_map(t)}},a.prototype.unpack_uint8=function(){var e=this.dataView[this.index]&255;return this.index++,e},a.prototype.unpack_uint16=function(){var e=this.read(2),t=(e[0]&255)*256+(e[1]&255);return this.index+=2,t},a.prototype.unpack_uint32=function(){var e=this.read(4),t=((e[0]*256+e[1])*256+e[2])*256+e[3];return this.index+=4,t},a.prototype.unpack_uint64=function(){var e=this.read(8),t=((((((e[0]*256+e[1])*256+e[2])*256+e[3])*256+e[4])*256+e[5])*256+e[6])*256+e[7];return this.index+=8,t},a.prototype.unpack_int8=function(){var e=this.unpack_uint8();return e<128?e:e-256},a.prototype.unpack_int16=function(){var e=this.unpack_uint16();return e<32768?e:e-65536},a.prototype.unpack_int32=function(){var e=this.unpack_uint32();return e<2**31?e:e-2**32},a.prototype.unpack_int64=function(){var e=this.unpack_uint64();return e<2**63?e:e-2**64},a.prototype.unpack_raw=function(e){if(this.length>31,n=(e>>23&255)-127,r=e&8388607|8388608;return(t===0?1:-1)*r*2**(n-23)},a.prototype.unpack_double=function(){var e=this.unpack_uint32(),t=this.unpack_uint32(),n=e>>31,r=(e>>20&2047)-1023,i=(e&1048575|1048576)*2**(r-20)+t*2**(r-52);return(n===0?1:-1)*i},a.prototype.read=function(e){var t=this.index;if(t+e<=this.length)return this.dataView.subarray(t,t+e);throw Error(`BinaryPackFailure: read index out of range`)};function o(){this.bufferBuilder=new n}o.prototype.getBuffer=function(){return this.bufferBuilder.getBuffer()},o.prototype.pack=function(e){var t=typeof e;if(t===`string`)this.pack_string(e);else if(t===`number`)Math.floor(e)===e?this.pack_integer(e):this.pack_double(e);else if(t===`boolean`)e===!0?this.bufferBuilder.append(195):e===!1&&this.bufferBuilder.append(194);else if(t===`undefined`)this.bufferBuilder.append(192);else if(t===`object`)if(e===null)this.bufferBuilder.append(192);else{var n=e.constructor;if(n==Array)this.pack_array(e);else if(n==Blob||n==File||e instanceof Blob||e instanceof File)this.pack_bin(e);else if(n==ArrayBuffer)i.useArrayBufferView?this.pack_bin(new Uint8Array(e)):this.pack_bin(e);else if(`BYTES_PER_ELEMENT`in e)i.useArrayBufferView?this.pack_bin(new Uint8Array(e.buffer)):this.pack_bin(e.buffer);else if(n==Object||n.toString().startsWith(`class`))this.pack_object(e);else if(n==Date)this.pack_string(e.toString());else if(typeof e.toBinaryPack==`function`)this.bufferBuilder.append(e.toBinaryPack());else throw Error(`Type "`+n.toString()+`" not yet supported`)}else throw Error(`Type "`+t+`" not yet supported`);this.bufferBuilder.flush()},o.prototype.pack_bin=function(e){var t=e.length||e.byteLength||e.size;if(t<=15)this.pack_uint8(160+t);else if(t<=65535)this.bufferBuilder.append(218),this.pack_uint16(t);else if(t<=4294967295)this.bufferBuilder.append(219),this.pack_uint32(t);else throw Error(`Invalid length`);this.bufferBuilder.append(e)},o.prototype.pack_string=function(e){var t=c(e);if(t<=15)this.pack_uint8(176+t);else if(t<=65535)this.bufferBuilder.append(216),this.pack_uint16(t);else if(t<=4294967295)this.bufferBuilder.append(217),this.pack_uint32(t);else throw Error(`Invalid length`);this.bufferBuilder.append(e)},o.prototype.pack_array=function(e){var t=e.length;if(t<=15)this.pack_uint8(144+t);else if(t<=65535)this.bufferBuilder.append(220),this.pack_uint16(t);else if(t<=4294967295)this.bufferBuilder.append(221),this.pack_uint32(t);else throw Error(`Invalid length`);for(var n=0;n=-32&&e<=127)this.bufferBuilder.append(e&255);else if(e>=0&&e<=255)this.bufferBuilder.append(204),this.pack_uint8(e);else if(e>=-128&&e<=127)this.bufferBuilder.append(208),this.pack_int8(e);else if(e>=0&&e<=65535)this.bufferBuilder.append(205),this.pack_uint16(e);else if(e>=-32768&&e<=32767)this.bufferBuilder.append(209),this.pack_int16(e);else if(e>=0&&e<=4294967295)this.bufferBuilder.append(206),this.pack_uint32(e);else if(e>=-2147483648&&e<=2147483647)this.bufferBuilder.append(210),this.pack_int32(e);else if(e>=-0x8000000000000000&&e<=0x8000000000000000)this.bufferBuilder.append(211),this.pack_int64(e);else if(e>=0&&e<=0x10000000000000000)this.bufferBuilder.append(207),this.pack_uint64(e);else throw Error(`Invalid integer`)},o.prototype.pack_double=function(e){var t=0;e<0&&(t=1,e=-e);var n=Math.floor(Math.log(e)/Math.LN2),r=e/2**n-1,i=Math.floor(r*2**52),a=2**32,o=t<<31|n+1023<<20|i/a&1048575,s=i%a;this.bufferBuilder.append(203),this.pack_int32(o),this.pack_int32(s)},o.prototype.pack_object=function(e){var t=Object.keys(e).length;if(t<=15)this.pack_uint8(128+t);else if(t<=65535)this.bufferBuilder.append(222),this.pack_uint16(t);else if(t<=4294967295)this.bufferBuilder.append(223),this.pack_uint32(t);else throw Error(`Invalid length`);for(var n in e)e.hasOwnProperty(n)&&(this.pack(n),this.pack(e[n]))},o.prototype.pack_uint8=function(e){this.bufferBuilder.append(e)},o.prototype.pack_uint16=function(e){this.bufferBuilder.append(e>>8),this.bufferBuilder.append(e&255)},o.prototype.pack_uint32=function(e){var t=e&4294967295;this.bufferBuilder.append((t&4278190080)>>>24),this.bufferBuilder.append((t&16711680)>>>16),this.bufferBuilder.append((t&65280)>>>8),this.bufferBuilder.append(t&255)},o.prototype.pack_uint64=function(e){var t=e/2**32,n=e%2**32;this.bufferBuilder.append((t&4278190080)>>>24),this.bufferBuilder.append((t&16711680)>>>16),this.bufferBuilder.append((t&65280)>>>8),this.bufferBuilder.append(t&255),this.bufferBuilder.append((n&4278190080)>>>24),this.bufferBuilder.append((n&16711680)>>>16),this.bufferBuilder.append((n&65280)>>>8),this.bufferBuilder.append(n&255)},o.prototype.pack_int8=function(e){this.bufferBuilder.append(e&255)},o.prototype.pack_int16=function(e){this.bufferBuilder.append((e&65280)>>8),this.bufferBuilder.append(e&255)},o.prototype.pack_int32=function(e){this.bufferBuilder.append(e>>>24&255),this.bufferBuilder.append((e&16711680)>>>16),this.bufferBuilder.append((e&65280)>>>8),this.bufferBuilder.append(e&255)},o.prototype.pack_int64=function(e){var t=Math.floor(e/2**32),n=e%2**32;this.bufferBuilder.append((t&4278190080)>>>24),this.bufferBuilder.append((t&16711680)>>>16),this.bufferBuilder.append((t&65280)>>>8),this.bufferBuilder.append(t&255),this.bufferBuilder.append((n&4278190080)>>>24),this.bufferBuilder.append((n&16711680)>>>16),this.bufferBuilder.append((n&65280)>>>8),this.bufferBuilder.append(n&255)};function s(e){var t=e.charCodeAt(0);return t<=2047?`00`:t<=65535?`000`:t<=2097151?`0000`:t<=67108863?`00000`:`000000`}function c(e){return e.length>600?new Blob([e]).size:e.replace(/[^\u0000-\u007F]/g,s).length}}))(),1),a=!0,o=!0;function s(e,t,n){let r=e.match(t);return r&&r.length>=n&&parseInt(r[n],10)}function c(e,t,n){if(!e.RTCPeerConnection)return;let r=e.RTCPeerConnection.prototype,i=r.addEventListener;r.addEventListener=function(e,r){if(e!==t)return i.apply(this,arguments);let a=e=>{let t=n(e);t&&(r.handleEvent?r.handleEvent(t):r(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(r,a),i.apply(this,[e,a])};let a=r.removeEventListener;r.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[t]||!this._eventMap[t].has(n))return a.apply(this,arguments);let r=this._eventMap[t].get(n);return this._eventMap[t].delete(n),this._eventMap[t].size===0&&delete this._eventMap[t],Object.keys(this._eventMap).length===0&&delete this._eventMap,a.apply(this,[e,r])},Object.defineProperty(r,`on`+t,{get(){return this[`_on`+t]},set(e){this[`_on`+t]&&(this.removeEventListener(t,this[`_on`+t]),delete this[`_on`+t]),e&&this.addEventListener(t,this[`_on`+t]=e)},enumerable:!0,configurable:!0})}function l(e){return typeof e==`boolean`?(a=e,e?`adapter.js logging disabled`:`adapter.js logging enabled`):Error(`Argument type: `+typeof e+`. Please use a boolean.`)}function u(e){return typeof e==`boolean`?(o=!e,`adapter.js deprecation warnings `+(e?`disabled`:`enabled`)):Error(`Argument type: `+typeof e+`. Please use a boolean.`)}function d(){if(typeof window==`object`){if(a)return;typeof console<`u`&&typeof console.log==`function`&&console.log.apply(console,arguments)}}function f(e,t){o&&console.warn(e+` is deprecated, please use `+t+` instead.`)}function p(e){let t={browser:null,version:null};if(e===void 0||!e.navigator)return t.browser=`Not a browser.`,t;let{navigator:n}=e;if(n.mozGetUserMedia)t.browser=`firefox`,t.version=s(n.userAgent,/Firefox\/(\d+)\./,1);else if(n.webkitGetUserMedia||e.isSecureContext===!1&&e.webkitRTCPeerConnection&&!e.RTCIceGatherer)t.browser=`chrome`,t.version=s(n.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(n.mediaDevices&&n.userAgent.match(/Edge\/(\d+).(\d+)$/))t.browser=`edge`,t.version=s(n.userAgent,/Edge\/(\d+).(\d+)$/,2);else if(e.RTCPeerConnection&&n.userAgent.match(/AppleWebKit\/(\d+)\./))t.browser=`safari`,t.version=s(n.userAgent,/AppleWebKit\/(\d+)\./,1),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&`currentDirection`in e.RTCRtpTransceiver.prototype;else return t.browser=`Not a supported browser.`,t;return t}function m(e){return Object.prototype.toString.call(e)===`[object Object]`}function h(e){return m(e)?Object.keys(e).reduce(function(t,n){let r=m(e[n]),i=r?h(e[n]):e[n],a=r&&!Object.keys(i).length;return i===void 0||a?t:Object.assign(t,{[n]:i})},{}):e}function ee(e,t,n){!t||n.has(t.id)||(n.set(t.id,t),Object.keys(t).forEach(r=>{r.endsWith(`Id`)?ee(e,e.get(t[r]),n):r.endsWith(`Ids`)&&t[r].forEach(t=>{ee(e,e.get(t),n)})}))}function g(e,t,n){let r=n?`outbound-rtp`:`inbound-rtp`,i=new Map;if(t===null)return i;let a=[];return e.forEach(e=>{e.type===`track`&&e.trackIdentifier===t.id&&a.push(e)}),a.forEach(t=>{e.forEach(n=>{n.type===r&&n.trackId===t.id&&ee(e,n,i)})}),i}var _=d;function v(e,t){let n=e&&e.navigator;if(!n.mediaDevices)return;let r=function(e){if(typeof e!=`object`||e.mandatory||e.optional)return e;let t={};return Object.keys(e).forEach(n=>{if(n===`require`||n===`advanced`||n===`mediaSource`)return;let r=typeof e[n]==`object`?e[n]:{ideal:e[n]};r.exact!==void 0&&typeof r.exact==`number`&&(r.min=r.max=r.exact);let i=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):t===`deviceId`?`sourceId`:t};if(r.ideal!==void 0){t.optional=t.optional||[];let e={};typeof r.ideal==`number`?(e[i(`min`,n)]=r.ideal,t.optional.push(e),e={},e[i(`max`,n)]=r.ideal,t.optional.push(e)):(e[i(``,n)]=r.ideal,t.optional.push(e))}r.exact!==void 0&&typeof r.exact!=`number`?(t.mandatory=t.mandatory||{},t.mandatory[i(``,n)]=r.exact):[`min`,`max`].forEach(e=>{r[e]!==void 0&&(t.mandatory=t.mandatory||{},t.mandatory[i(e,n)]=r[e])})}),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},i=function(e,i){if(t.version>=61)return i(e);if(e=JSON.parse(JSON.stringify(e)),e&&typeof e.audio==`object`){let t=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])};e=JSON.parse(JSON.stringify(e)),t(e.audio,`autoGainControl`,`googAutoGainControl`),t(e.audio,`noiseSuppression`,`googNoiseSuppression`),e.audio=r(e.audio)}if(e&&typeof e.video==`object`){let a=e.video.facingMode;a&&=typeof a==`object`?a:{ideal:a};let o=t.version<66;if(a&&(a.exact===`user`||a.exact===`environment`||a.ideal===`user`||a.ideal===`environment`)&&!(n.mediaDevices.getSupportedConstraints&&n.mediaDevices.getSupportedConstraints().facingMode&&!o)){delete e.video.facingMode;let t;if(a.exact===`environment`||a.ideal===`environment`?t=[`back`,`rear`]:(a.exact===`user`||a.ideal===`user`)&&(t=[`front`]),t)return n.mediaDevices.enumerateDevices().then(n=>{n=n.filter(e=>e.kind===`videoinput`);let o=n.find(e=>t.some(t=>e.label.toLowerCase().includes(t)));return!o&&n.length&&t.includes(`back`)&&(o=n[n.length-1]),o&&(e.video.deviceId=a.exact?{exact:o.deviceId}:{ideal:o.deviceId}),e.video=r(e.video),_(`chrome: `+JSON.stringify(e)),i(e)})}e.video=r(e.video)}return _(`chrome: `+JSON.stringify(e)),i(e)},a=function(e){return t.version>=64?e:{name:{PermissionDeniedError:`NotAllowedError`,PermissionDismissedError:`NotAllowedError`,InvalidStateError:`NotAllowedError`,DevicesNotFoundError:`NotFoundError`,ConstraintNotSatisfiedError:`OverconstrainedError`,TrackStartError:`NotReadableError`,MediaDeviceFailedDueToShutdown:`NotAllowedError`,MediaDeviceKillSwitchOn:`NotAllowedError`,TabCaptureError:`AbortError`,ScreenCaptureError:`AbortError`,DeviceCaptureError:`AbortError`}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&`: `)+this.message}}};if(n.getUserMedia=function(e,t,r){i(e,e=>{n.webkitGetUserMedia(e,t,e=>{r&&r(a(e))})})}.bind(n),n.mediaDevices.getUserMedia){let e=n.mediaDevices.getUserMedia.bind(n.mediaDevices);Object.getOwnPropertyDescriptor(n.mediaDevices,`getUserMedia`)?.writable&&(n.mediaDevices.getUserMedia=function(t){return i(t,t=>e(t).then(e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach(e=>{e.stop()}),new DOMException(``,`NotFoundError`);return e},e=>Promise.reject(a(e))))})}}function y(e,t){if(!(e.navigator.mediaDevices&&`getDisplayMedia`in e.navigator.mediaDevices)&&e.navigator.mediaDevices){if(typeof t!=`function`){console.error(`shimGetDisplayMedia: getSourceId argument is not a function`);return}e.navigator.mediaDevices.getDisplayMedia=function(n){return t(n).then(t=>{let r=n.video&&n.video.width,i=n.video&&n.video.height;return n.video={mandatory:{chromeMediaSource:`desktop`,chromeMediaSourceId:t,maxFrameRate:n.video&&n.video.frameRate||3}},r&&(n.video.mandatory.maxWidth=r),i&&(n.video.mandatory.maxHeight=i),e.navigator.mediaDevices.getUserMedia(n)})}}}var b=e({fixNegotiationNeeded:()=>D,shimAddTrackRemoveTrack:()=>T,shimAddTrackRemoveTrackWithNative:()=>w,shimGetDisplayMedia:()=>y,shimGetSendersWithDtmf:()=>ne,shimGetStats:()=>S,shimGetUserMedia:()=>v,shimMediaStream:()=>te,shimOnTrack:()=>x,shimPeerConnection:()=>E,shimSenderReceiverGetStats:()=>C});function te(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function x(e){if(typeof e==`object`&&e.RTCPeerConnection&&!(`ontrack`in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,`ontrack`,{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener(`track`,this._ontrack),this.addEventListener(`track`,this._ontrack=e)},enumerable:!0,configurable:!0});let t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener(`addtrack`,n=>{let r;r=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.track.id):{track:n.track};let i=new Event(`track`);i.track=n.track,i.receiver=r,i.transceiver={receiver:r},i.streams=[t.stream],this.dispatchEvent(i)}),t.stream.getTracks().forEach(n=>{let r;r=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.id):{track:n};let i=new Event(`track`);i.track=n,i.receiver=r,i.transceiver={receiver:r},i.streams=[t.stream],this.dispatchEvent(i)})},this.addEventListener(`addstream`,this._ontrackpoly)),t.apply(this,arguments)}}else c(e,`track`,e=>(e.transceiver||Object.defineProperty(e,`transceiver`,{value:{receiver:e.receiver}}),e))}function ne(e){if(typeof e==`object`&&e.RTCPeerConnection&&!(`getSenders`in e.RTCPeerConnection.prototype)&&`createDTMFSender`in e.RTCPeerConnection.prototype){let t=function(e,t){return{track:t,get dtmf(){return this._dtmf===void 0&&(t.kind===`audio`?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};let n=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,r){let i=n.apply(this,arguments);return i||(i=t(this,e),this._senders.push(i)),i};let r=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){r.apply(this,arguments);let t=this._senders.indexOf(e);t!==-1&&this._senders.splice(t,1)}}let n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach(e=>{this._senders.push(t(this,e))})};let r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],r.apply(this,[e]),e.getTracks().forEach(e=>{let t=this._senders.find(t=>t.track===e);t&&this._senders.splice(this._senders.indexOf(t),1)})}}else if(typeof e==`object`&&e.RTCPeerConnection&&`getSenders`in e.RTCPeerConnection.prototype&&`createDTMFSender`in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!(`dtmf`in e.RTCRtpSender.prototype)){let t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){let e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e},Object.defineProperty(e.RTCRtpSender.prototype,`dtmf`,{get(){return this._dtmf===void 0&&(this.track.kind===`audio`?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function S(e){if(!e.RTCPeerConnection)return;let t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){let[e,n,r]=arguments;if(arguments.length>0&&typeof e==`function`)return t.apply(this,arguments);if(t.length===0&&(arguments.length===0||typeof e!=`function`))return t.apply(this,[]);let i=function(e){let t={};return e.result().forEach(e=>{let n={id:e.id,timestamp:e.timestamp,type:{localcandidate:`local-candidate`,remotecandidate:`remote-candidate`}[e.type]||e.type};e.names().forEach(t=>{n[t]=e.stat(t)}),t[n.id]=n}),t},a=function(e){return new Map(Object.keys(e).map(t=>[t,e[t]]))};return arguments.length>=2?t.apply(this,[function(e){n(a(i(e)))},e]):new Promise((e,n)=>{t.apply(this,[function(t){e(a(i(t)))},n])}).then(n,r)}}function C(e){if(!(typeof e==`object`&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!(`getStats`in e.RTCRtpSender.prototype)){let t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){let e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});let n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){let e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){let e=this;return this._pc.getStats().then(t=>g(t,e.track,!0))}}if(!(`getStats`in e.RTCRtpReceiver.prototype)){let t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){let e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),c(e,`track`,e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){let e=this;return this._pc.getStats().then(t=>g(t,e.track,!1))}}if(!(`getStats`in e.RTCRtpSender.prototype&&`getStats`in e.RTCRtpReceiver.prototype))return;let t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){let e=arguments[0],t,n,r;return this.getSenders().forEach(n=>{n.track===e&&(t?r=!0:t=n)}),this.getReceivers().forEach(t=>(t.track===e&&(n?r=!0:n=t),t.track===e)),r||t&&n?Promise.reject(new DOMException(`There are more than one sender or receiver for the track.`,`InvalidAccessError`)):t?t.getStats():n?n.getStats():Promise.reject(new DOMException(`There is no sender or receiver for the track.`,`InvalidAccessError`))}return t.apply(this,arguments)}}function w(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(e=>this._shimmedLocalStreams[e][0])};let t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){if(!n)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};let r=t.apply(this,arguments);return this._shimmedLocalStreams[n.id]?this._shimmedLocalStreams[n.id].indexOf(r)===-1&&this._shimmedLocalStreams[n.id].push(r):this._shimmedLocalStreams[n.id]=[n,r],r};let n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException(`Track already exists.`,`InvalidAccessError`)});let t=this.getSenders();n.apply(this,arguments);let r=this.getSenders().filter(e=>t.indexOf(e)===-1);this._shimmedLocalStreams[e.id]=[e].concat(r)};let r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],r.apply(this,arguments)};let i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach(t=>{let n=this._shimmedLocalStreams[t].indexOf(e);n!==-1&&this._shimmedLocalStreams[t].splice(n,1),this._shimmedLocalStreams[t].length===1&&delete this._shimmedLocalStreams[t]}),i.apply(this,arguments)}}function T(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return w(e);let n=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){let e=n.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map(e=>this._reverseStreams[e.id])};let r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException(`Track already exists.`,`InvalidAccessError`)}),!this._reverseStreams[t.id]){let n=new e.MediaStream(t.getTracks());this._streams[t.id]=n,this._reverseStreams[n.id]=t,t=n}r.apply(this,[t])};let i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},i.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,n){if(this.signalingState===`closed`)throw new DOMException(`The RTCPeerConnection's signalingState is 'closed'.`,`InvalidStateError`);let r=[].slice.call(arguments,1);if(r.length!==1||!r[0].getTracks().find(e=>e===t))throw new DOMException(`The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.`,`NotSupportedError`);if(this.getSenders().find(e=>e.track===t))throw new DOMException(`Track already exists.`,`InvalidAccessError`);this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};let i=this._streams[n.id];if(i)i.addTrack(t),Promise.resolve().then(()=>{this.dispatchEvent(new Event(`negotiationneeded`))});else{let r=new e.MediaStream([t]);this._streams[n.id]=r,this._reverseStreams[r.id]=n,this.addStream(r)}return this.getSenders().find(e=>e.track===t)};function a(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{let r=e._reverseStreams[t],i=e._streams[r.id];n=n.replace(new RegExp(i.id,`g`),r.id)}),new RTCSessionDescription({type:t.type,sdp:n})}function o(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{let r=e._reverseStreams[t],i=e._streams[r.id];n=n.replace(new RegExp(r.id,`g`),i.id)}),new RTCSessionDescription({type:t.type,sdp:n})}[`createOffer`,`createAnswer`].forEach(function(t){let n=e.RTCPeerConnection.prototype[t],r={[t](){let e=arguments;return arguments.length&&typeof arguments[0]==`function`?n.apply(this,[t=>{let n=a(this,t);e[0].apply(null,[n])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):n.apply(this,arguments).then(e=>a(this,e))}};e.RTCPeerConnection.prototype[t]=r[t]});let s=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type||(arguments[0]=o(this,arguments[0])),s.apply(this,arguments)};let c=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,`localDescription`);Object.defineProperty(e.RTCPeerConnection.prototype,`localDescription`,{get(){let e=c.get.apply(this);return e.type===``?e:a(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if(this.signalingState===`closed`)throw new DOMException(`The RTCPeerConnection's signalingState is 'closed'.`,`InvalidStateError`);if(!e._pc)throw new DOMException(`Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.`,`TypeError`);if(e._pc!==this)throw new DOMException(`Sender was not created by this connection.`,`InvalidAccessError`);this._streams=this._streams||{};let t;Object.keys(this._streams).forEach(n=>{this._streams[n].getTracks().find(t=>e.track===t)&&(t=this._streams[n])}),t&&(t.getTracks().length===1?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event(`negotiationneeded`)))}}function E(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&[`setLocalDescription`,`setRemoteDescription`,`addIceCandidate`].forEach(function(t){let n=e.RTCPeerConnection.prototype[t],r={[t](){return arguments[0]=new(t===`addIceCandidate`?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=r[t]})}function D(e,t){c(e,`negotiationneeded`,e=>{let n=e.target;if(!((t.version<72||n.getConfiguration&&n.getConfiguration().sdpSemantics===`plan-b`)&&n.signalingState!==`stable`))return e})}function O(e,t){let n=!1;return e=JSON.parse(JSON.stringify(e)),e.filter(e=>{if(e&&(e.urls||e.url)){let t=e.urls||e.url;e.url&&!e.urls&&f(`RTCIceServer.url`,`RTCIceServer.urls`);let r=typeof t==`string`;return r&&(t=[t]),t=t.filter(e=>{if(e.indexOf(`stun:`)===0)return!1;let t=e.startsWith(`turn`)&&!e.startsWith(`turn:[`)&&e.includes(`transport=udp`);return t&&!n?(n=!0,!0):t&&!n}),delete e.url,e.urls=r?t[0]:t,!!t.length}})}var re=n(((e,t)=>{var n={};n.generateIdentifier=function(){return Math.random().toString(36).substr(2,10)},n.localCName=n.generateIdentifier(),n.splitLines=function(e){return e.trim().split(` -`).map(function(e){return e.trim()})},n.splitSections=function(e){return e.split(` -m=`).map(function(e,t){return(t>0?`m=`+e:e).trim()+`\r -`})},n.getDescription=function(e){var t=n.splitSections(e);return t&&t[0]},n.getMediaSections=function(e){var t=n.splitSections(e);return t.shift(),t},n.matchPrefix=function(e,t){return n.splitLines(e).filter(function(e){return e.indexOf(t)===0})},n.parseCandidate=function(e){for(var t=e.indexOf(`a=candidate:`)===0?e.substring(12).split(` `):e.substring(10).split(` `),n={foundation:t[0],component:parseInt(t[1],10),protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]},r=8;r0?t[0].split(`/`)[1]:`sendrecv`,uri:t[1]}},n.writeExtmap=function(e){return`a=extmap:`+(e.id||e.preferredId)+(e.direction&&e.direction!==`sendrecv`?`/`+e.direction:``)+` `+e.uri+`\r -`},n.parseFmtp=function(e){for(var t={},n,r=e.substr(e.indexOf(` `)+1).split(`;`),i=0;i-1?(n.attribute=e.substr(t+1,r-t-1),n.value=e.substr(r+1)):n.attribute=e.substr(t+1),n},n.parseSsrcGroup=function(e){var t=e.substr(13).split(` `);return{semantics:t.shift(),ssrcs:t.map(function(e){return parseInt(e,10)})}},n.getMid=function(e){var t=n.matchPrefix(e,`a=mid:`)[0];if(t)return t.substr(6)},n.parseFingerprint=function(e){var t=e.substr(14).split(` `);return{algorithm:t[0].toLowerCase(),value:t[1]}},n.getDtlsParameters=function(e,t){return{role:`auto`,fingerprints:n.matchPrefix(e+t,`a=fingerprint:`).map(n.parseFingerprint)}},n.writeDtlsParameters=function(e,t){var n=`a=setup:`+t+`\r -`;return e.fingerprints.forEach(function(e){n+=`a=fingerprint:`+e.algorithm+` `+e.value+`\r -`}),n},n.parseCryptoLine=function(e){var t=e.substr(9).split(` `);return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},n.writeCryptoLine=function(e){return`a=crypto:`+e.tag+` `+e.cryptoSuite+` `+(typeof e.keyParams==`object`?n.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?` `+e.sessionParams.join(` `):``)+`\r -`},n.parseCryptoKeyParams=function(e){if(e.indexOf(`inline:`)!==0)return null;var t=e.substr(7).split(`|`);return{keyMethod:`inline`,keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(`:`)[0]:void 0,mkiLength:t[2]?t[2].split(`:`)[1]:void 0}},n.writeCryptoKeyParams=function(e){return e.keyMethod+`:`+e.keySalt+(e.lifeTime?`|`+e.lifeTime:``)+(e.mkiValue&&e.mkiLength?`|`+e.mkiValue+`:`+e.mkiLength:``)},n.getCryptoParameters=function(e,t){return n.matchPrefix(e+t,`a=crypto:`).map(n.parseCryptoLine)},n.getIceParameters=function(e,t){var r=n.matchPrefix(e+t,`a=ice-ufrag:`)[0],i=n.matchPrefix(e+t,`a=ice-pwd:`)[0];return r&&i?{usernameFragment:r.substr(12),password:i.substr(10)}:null},n.writeIceParameters=function(e){return`a=ice-ufrag:`+e.usernameFragment+`\r -a=ice-pwd:`+e.password+`\r -`},n.parseRtpParameters=function(e){for(var t={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},r=n.splitLines(e)[0].split(` `),i=3;i0?`9`:`0`,r+=` UDP/TLS/RTP/SAVPF `,r+=t.codecs.map(function(e){return e.preferredPayloadType===void 0?e.payloadType:e.preferredPayloadType}).join(` `)+`\r -`,r+=`c=IN IP4 0.0.0.0\r -`,r+=`a=rtcp:9 IN IP4 0.0.0.0\r -`,t.codecs.forEach(function(e){r+=n.writeRtpMap(e),r+=n.writeFmtp(e),r+=n.writeRtcpFb(e)});var i=0;return t.codecs.forEach(function(e){e.maxptime>i&&(i=e.maxptime)}),i>0&&(r+=`a=maxptime:`+i+`\r -`),r+=`a=rtcp-mux\r -`,t.headerExtensions&&t.headerExtensions.forEach(function(e){r+=n.writeExtmap(e)}),r},n.parseRtpEncodingParameters=function(e){var t=[],r=n.parseRtpParameters(e),i=r.fecMechanisms.indexOf(`RED`)!==-1,a=r.fecMechanisms.indexOf(`ULPFEC`)!==-1,o=n.matchPrefix(e,`a=ssrc:`).map(function(e){return n.parseSsrcMedia(e)}).filter(function(e){return e.attribute===`cname`}),s=o.length>0&&o[0].ssrc,c,l=n.matchPrefix(e,`a=ssrc-group:FID`).map(function(e){return e.substr(17).split(` `).map(function(e){return parseInt(e,10)})});l.length>0&&l[0].length>1&&l[0][0]===s&&(c=l[0][1]),r.codecs.forEach(function(e){if(e.name.toUpperCase()===`RTX`&&e.parameters.apt){var n={ssrc:s,codecPayloadType:parseInt(e.parameters.apt,10)};s&&c&&(n.rtx={ssrc:c}),t.push(n),i&&(n=JSON.parse(JSON.stringify(n)),n.fec={ssrc:s,mechanism:a?`red+ulpfec`:`red`},t.push(n))}}),t.length===0&&s&&t.push({ssrc:s});var u=n.matchPrefix(e,`b=`);return u.length&&(u=u[0].indexOf(`b=TIAS:`)===0?parseInt(u[0].substr(7),10):u[0].indexOf(`b=AS:`)===0?parseInt(u[0].substr(5),10)*1e3*.95-2e3*8:void 0,t.forEach(function(e){e.maxBitrate=u})),t},n.parseRtcpParameters=function(e){var t={},r=n.matchPrefix(e,`a=ssrc:`).map(function(e){return n.parseSsrcMedia(e)}).filter(function(e){return e.attribute===`cname`})[0];r&&(t.cname=r.value,t.ssrc=r.ssrc);var i=n.matchPrefix(e,`a=rtcp-rsize`);return t.reducedSize=i.length>0,t.compound=i.length===0,t.mux=n.matchPrefix(e,`a=rtcp-mux`).length>0,t},n.parseMsid=function(e){var t,r=n.matchPrefix(e,`a=msid:`);if(r.length===1)return t=r[0].substr(7).split(` `),{stream:t[0],track:t[1]};var i=n.matchPrefix(e,`a=ssrc:`).map(function(e){return n.parseSsrcMedia(e)}).filter(function(e){return e.attribute===`msid`});if(i.length>0)return t=i[0].value.split(` `),{stream:t[0],track:t[1]}},n.parseSctpDescription=function(e){var t=n.parseMLine(e),r=n.matchPrefix(e,`a=max-message-size:`),i;r.length>0&&(i=parseInt(r[0].substr(19),10)),isNaN(i)&&(i=65536);var a=n.matchPrefix(e,`a=sctp-port:`);if(a.length>0)return{port:parseInt(a[0].substr(12),10),protocol:t.fmt,maxMessageSize:i};if(n.matchPrefix(e,`a=sctpmap:`).length>0){var o=n.matchPrefix(e,`a=sctpmap:`)[0].substr(10).split(` `);return{port:parseInt(o[0],10),protocol:o[1],maxMessageSize:i}}},n.writeSctpDescription=function(e,t){var n=[];return n=e.protocol===`DTLS/SCTP`?[`m=`+e.kind+` 9 `+e.protocol+` `+t.port+`\r -`,`c=IN IP4 0.0.0.0\r -`,`a=sctpmap:`+t.port+` `+t.protocol+` 65535\r -`]:[`m=`+e.kind+` 9 `+e.protocol+` `+t.protocol+`\r -`,`c=IN IP4 0.0.0.0\r -`,`a=sctp-port:`+t.port+`\r -`],t.maxMessageSize!==void 0&&n.push(`a=max-message-size:`+t.maxMessageSize+`\r -`),n.join(``)},n.generateSessionId=function(){return Math.random().toString().substr(2,21)},n.writeSessionBoilerplate=function(e,t,r){var i,a=t===void 0?2:t;return i=e||n.generateSessionId(),`v=0\r -o=`+(r||`thisisadapterortc`)+` `+i+` `+a+` IN IP4 127.0.0.1\r -s=-\r -t=0 0\r -`},n.writeMediaSection=function(e,t,r,i){var a=n.writeRtpDescription(e.kind,t);if(a+=n.writeIceParameters(e.iceGatherer.getLocalParameters()),a+=n.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),r===`offer`?`actpass`:`active`),a+=`a=mid:`+e.mid+`\r -`,e.direction?a+=`a=`+e.direction+`\r -`:e.rtpSender&&e.rtpReceiver?a+=`a=sendrecv\r -`:e.rtpSender?a+=`a=sendonly\r -`:e.rtpReceiver?a+=`a=recvonly\r -`:a+=`a=inactive\r -`,e.rtpSender){var o=`msid:`+i.id+` `+e.rtpSender.track.id+`\r -`;a+=`a=`+o,a+=`a=ssrc:`+e.sendEncodingParameters[0].ssrc+` `+o,e.sendEncodingParameters[0].rtx&&(a+=`a=ssrc:`+e.sendEncodingParameters[0].rtx.ssrc+` `+o,a+=`a=ssrc-group:FID `+e.sendEncodingParameters[0].ssrc+` `+e.sendEncodingParameters[0].rtx.ssrc+`\r -`)}return a+=`a=ssrc:`+e.sendEncodingParameters[0].ssrc+` cname:`+n.localCName+`\r -`,e.rtpSender&&e.sendEncodingParameters[0].rtx&&(a+=`a=ssrc:`+e.sendEncodingParameters[0].rtx.ssrc+` cname:`+n.localCName+`\r -`),a},n.getDirection=function(e,t){for(var r=n.splitLines(e),i=0;i{var n=re();function r(e){return{inboundrtp:`inbound-rtp`,outboundrtp:`outbound-rtp`,candidatepair:`candidate-pair`,localcandidate:`local-candidate`,remotecandidate:`remote-candidate`}[e.type]||e.type}function i(e,t,r,i,a){var o=n.writeRtpDescription(e.kind,t);if(o+=n.writeIceParameters(e.iceGatherer.getLocalParameters()),o+=n.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),r===`offer`?`actpass`:a||`active`),o+=`a=mid:`+e.mid+`\r -`,e.rtpSender&&e.rtpReceiver?o+=`a=sendrecv\r -`:e.rtpSender?o+=`a=sendonly\r -`:e.rtpReceiver?o+=`a=recvonly\r -`:o+=`a=inactive\r -`,e.rtpSender){var s=e.rtpSender._initialTrackId||e.rtpSender.track.id;e.rtpSender._initialTrackId=s;var c=`msid:`+(i?i.id:`-`)+` `+s+`\r -`;o+=`a=`+c,o+=`a=ssrc:`+e.sendEncodingParameters[0].ssrc+` `+c,e.sendEncodingParameters[0].rtx&&(o+=`a=ssrc:`+e.sendEncodingParameters[0].rtx.ssrc+` `+c,o+=`a=ssrc-group:FID `+e.sendEncodingParameters[0].ssrc+` `+e.sendEncodingParameters[0].rtx.ssrc+`\r -`)}return o+=`a=ssrc:`+e.sendEncodingParameters[0].ssrc+` cname:`+n.localCName+`\r -`,e.rtpSender&&e.sendEncodingParameters[0].rtx&&(o+=`a=ssrc:`+e.sendEncodingParameters[0].rtx.ssrc+` cname:`+n.localCName+`\r -`),o}function a(e,t){var n=!1;return e=JSON.parse(JSON.stringify(e)),e.filter(function(e){if(e&&(e.urls||e.url)){var r=e.urls||e.url;e.url&&!e.urls&&console.warn(`RTCIceServer.url is deprecated! Use urls instead.`);var i=typeof r==`string`;return i&&(r=[r]),r=r.filter(function(e){return e.indexOf(`turn:`)===0&&e.indexOf(`transport=udp`)!==-1&&e.indexOf(`turn:[`)===-1&&!n?(n=!0,!0):e.indexOf(`stun:`)===0&&t>=14393&&e.indexOf(`?transport=udp`)===-1}),delete e.url,e.urls=i?r[0]:r,!!r.length}})}function o(e,t){var n={codecs:[],headerExtensions:[],fecMechanisms:[]},r=function(e,t){e=parseInt(e,10);for(var n=0;n0;s--)this._iceGatherers.push(new e.RTCIceGatherer({iceServers:r.iceServers,gatherPolicy:r.iceTransportPolicy}));else r.iceCandidatePoolSize=0;this._config=r,this.transceivers=[],this._sdpSessionId=n.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(p.prototype,`localDescription`,{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(p.prototype,`remoteDescription`,{configurable:!0,get:function(){return this._remoteDescription}}),p.prototype.onicecandidate=null,p.prototype.onaddstream=null,p.prototype.ontrack=null,p.prototype.onremovestream=null,p.prototype.onsignalingstatechange=null,p.prototype.oniceconnectionstatechange=null,p.prototype.onconnectionstatechange=null,p.prototype.onicegatheringstatechange=null,p.prototype.onnegotiationneeded=null,p.prototype.ondatachannel=null,p.prototype._dispatchEvent=function(e,t){this._isClosed||(this.dispatchEvent(t),typeof this[`on`+e]==`function`&&this[`on`+e](t))},p.prototype._emitGatheringStateChange=function(){var e=new Event(`icegatheringstatechange`);this._dispatchEvent(`icegatheringstatechange`,e)},p.prototype.getConfiguration=function(){return this._config},p.prototype.getLocalStreams=function(){return this.localStreams},p.prototype.getRemoteStreams=function(){return this.remoteStreams},p.prototype._createTransceiver=function(e,t){var n=this.transceivers.length>0,r={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:e,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&n)r.iceTransport=this.transceivers[0].iceTransport,r.dtlsTransport=this.transceivers[0].dtlsTransport;else{var i=this._createIceAndDtlsTransports();r.iceTransport=i.iceTransport,r.dtlsTransport=i.dtlsTransport}return t||this.transceivers.push(r),r},p.prototype.addTrack=function(t,n){if(this._isClosed)throw l(`InvalidStateError`,`Attempted to call addTrack on a closed peerconnection.`);if(this.transceivers.find(function(e){return e.track===t}))throw l(`InvalidAccessError`,`Track already exists.`);for(var r,i=0;i=15025)e.getTracks().forEach(function(t){n.addTrack(t,e)});else{var r=e.clone();e.getTracks().forEach(function(e,t){var n=r.getTracks()[t];e.addEventListener(`enabled`,function(e){n.enabled=e.enabled})}),r.getTracks().forEach(function(e){n.addTrack(e,r)})}},p.prototype.removeTrack=function(t){if(this._isClosed)throw l(`InvalidStateError`,`Attempted to call removeTrack on a closed peerconnection.`);if(!(t instanceof e.RTCRtpSender))throw TypeError(`Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.`);var n=this.transceivers.find(function(e){return e.rtpSender===t});if(!n)throw l(`InvalidAccessError`,`Sender was not created by this connection.`);var r=n.stream;n.rtpSender.stop(),n.rtpSender=null,n.track=null,n.stream=null,this.transceivers.map(function(e){return e.stream}).indexOf(r)===-1&&this.localStreams.indexOf(r)>-1&&this.localStreams.splice(this.localStreams.indexOf(r),1),this._maybeFireNegotiationNeeded()},p.prototype.removeStream=function(e){var t=this;e.getTracks().forEach(function(e){var n=t.getSenders().find(function(t){return t.track===e});n&&t.removeTrack(n)})},p.prototype.getSenders=function(){return this.transceivers.filter(function(e){return!!e.rtpSender}).map(function(e){return e.rtpSender})},p.prototype.getReceivers=function(){return this.transceivers.filter(function(e){return!!e.rtpReceiver}).map(function(e){return e.rtpReceiver})},p.prototype._createIceGatherer=function(t,n){var r=this;if(n&&t>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var i=new e.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(i,`state`,{value:`new`,writable:!0}),this.transceivers[t].bufferedCandidateEvents=[],this.transceivers[t].bufferCandidates=function(e){i.state=!e.candidate||Object.keys(e.candidate).length===0?`completed`:`gathering`,r.transceivers[t].bufferedCandidateEvents!==null&&r.transceivers[t].bufferedCandidateEvents.push(e)},i.addEventListener(`localcandidate`,this.transceivers[t].bufferCandidates),i},p.prototype._gather=function(t,r){var i=this,a=this.transceivers[r].iceGatherer;if(!a.onlocalcandidate){var o=this.transceivers[r].bufferedCandidateEvents;this.transceivers[r].bufferedCandidateEvents=null,a.removeEventListener(`localcandidate`,this.transceivers[r].bufferCandidates),a.onlocalcandidate=function(e){if(!(i.usingBundle&&r>0)){var o=new Event(`icecandidate`);o.candidate={sdpMid:t,sdpMLineIndex:r};var s=e.candidate,c=!s||Object.keys(s).length===0;if(c)(a.state===`new`||a.state===`gathering`)&&(a.state=`completed`);else{a.state===`new`&&(a.state=`gathering`),s.component=1,s.ufrag=a.getLocalParameters().usernameFragment;var l=n.writeCandidate(s);o.candidate=Object.assign(o.candidate,n.parseCandidate(l)),o.candidate.candidate=l,o.candidate.toJSON=function(){return{candidate:o.candidate.candidate,sdpMid:o.candidate.sdpMid,sdpMLineIndex:o.candidate.sdpMLineIndex,usernameFragment:o.candidate.usernameFragment}}}var u=n.getMediaSections(i._localDescription.sdp);c?u[o.candidate.sdpMLineIndex]+=`a=end-of-candidates\r -`:u[o.candidate.sdpMLineIndex]+=`a=`+o.candidate.candidate+`\r -`,i._localDescription.sdp=n.getDescription(i._localDescription.sdp)+u.join(``);var d=i.transceivers.every(function(e){return e.iceGatherer&&e.iceGatherer.state===`completed`});i.iceGatheringState!==`gathering`&&(i.iceGatheringState=`gathering`,i._emitGatheringStateChange()),c||i._dispatchEvent(`icecandidate`,o),d&&(i._dispatchEvent(`icecandidate`,new Event(`icecandidate`)),i.iceGatheringState=`complete`,i._emitGatheringStateChange())}},e.setTimeout(function(){o.forEach(function(e){a.onlocalcandidate(e)})},0)}},p.prototype._createIceAndDtlsTransports=function(){var t=this,n=new e.RTCIceTransport(null);n.onicestatechange=function(){t._updateIceConnectionState(),t._updateConnectionState()};var r=new e.RTCDtlsTransport(n);return r.ondtlsstatechange=function(){t._updateConnectionState()},r.onerror=function(){Object.defineProperty(r,`state`,{value:`failed`,writable:!0}),t._updateConnectionState()},{iceTransport:n,dtlsTransport:r}},p.prototype._disposeIceAndDtlsTransports=function(e){var t=this.transceivers[e].iceGatherer;t&&(delete t.onlocalcandidate,delete this.transceivers[e].iceGatherer);var n=this.transceivers[e].iceTransport;n&&(delete n.onicestatechange,delete this.transceivers[e].iceTransport);var r=this.transceivers[e].dtlsTransport;r&&(delete r.ondtlsstatechange,delete r.onerror,delete this.transceivers[e].dtlsTransport)},p.prototype._transceive=function(e,r,i){var a=o(e.localCapabilities,e.remoteCapabilities);r&&e.rtpSender&&(a.encodings=e.sendEncodingParameters,a.rtcp={cname:n.localCName,compound:e.rtcpParameters.compound},e.recvEncodingParameters.length&&(a.rtcp.ssrc=e.recvEncodingParameters[0].ssrc),e.rtpSender.send(a)),i&&e.rtpReceiver&&a.codecs.length>0&&(e.kind===`video`&&e.recvEncodingParameters&&t<15019&&e.recvEncodingParameters.forEach(function(e){delete e.rtx}),e.recvEncodingParameters.length?a.encodings=e.recvEncodingParameters:a.encodings=[{}],a.rtcp={compound:e.rtcpParameters.compound},e.rtcpParameters.cname&&(a.rtcp.cname=e.rtcpParameters.cname),e.sendEncodingParameters.length&&(a.rtcp.ssrc=e.sendEncodingParameters[0].ssrc),e.rtpReceiver.receive(a))},p.prototype.setLocalDescription=function(e){var t=this;if([`offer`,`answer`].indexOf(e.type)===-1)return Promise.reject(l(`TypeError`,`Unsupported type "`+e.type+`"`));if(!s(`setLocalDescription`,e.type,t.signalingState)||t._isClosed)return Promise.reject(l(`InvalidStateError`,`Can not set local `+e.type+` in state `+t.signalingState));var r,i;if(e.type===`offer`)r=n.splitSections(e.sdp),i=r.shift(),r.forEach(function(e,r){var i=n.parseRtpParameters(e);t.transceivers[r].localCapabilities=i}),t.transceivers.forEach(function(e,n){t._gather(e.mid,n)});else if(e.type===`answer`){r=n.splitSections(t._remoteDescription.sdp),i=r.shift();var a=n.matchPrefix(i,`a=ice-lite`).length>0;r.forEach(function(e,r){var s=t.transceivers[r],c=s.iceGatherer,l=s.iceTransport,u=s.dtlsTransport,d=s.localCapabilities,f=s.remoteCapabilities;if(!(n.isRejected(e)&&n.matchPrefix(e,`a=bundle-only`).length===0)&&!s.rejected){var p=n.getIceParameters(e,i),m=n.getDtlsParameters(e,i);a&&(m.role=`server`),(!t.usingBundle||r===0)&&(t._gather(s.mid,r),l.state===`new`&&l.start(c,p,a?`controlling`:`controlled`),u.state===`new`&&u.start(m));var h=o(d,f);t._transceive(s,h.codecs.length>0,!1)}})}return t._localDescription={type:e.type,sdp:e.sdp},e.type===`offer`?t._updateSignalingState(`have-local-offer`):t._updateSignalingState(`stable`),Promise.resolve()},p.prototype.setRemoteDescription=function(r){var i=this;if([`offer`,`answer`].indexOf(r.type)===-1)return Promise.reject(l(`TypeError`,`Unsupported type "`+r.type+`"`));if(!s(`setRemoteDescription`,r.type,i.signalingState)||i._isClosed)return Promise.reject(l(`InvalidStateError`,`Can not set remote `+r.type+` in state `+i.signalingState));var a={};i.remoteStreams.forEach(function(e){a[e.id]=e});var p=[],m=n.splitSections(r.sdp),h=m.shift(),ee=n.matchPrefix(h,`a=ice-lite`).length>0,g=n.matchPrefix(h,`a=group:BUNDLE `).length>0;i.usingBundle=g;var _=n.matchPrefix(h,`a=ice-options:`)[0];return _?i.canTrickleIceCandidates=_.substr(14).split(` `).indexOf(`trickle`)>=0:i.canTrickleIceCandidates=!1,m.forEach(function(s,l){var f=n.splitLines(s),m=n.getKind(s),_=n.isRejected(s)&&n.matchPrefix(s,`a=bundle-only`).length===0,v=f[0].substr(2).split(` `)[2],y=n.getDirection(s,h),b=n.parseMsid(s),te=n.getMid(s)||n.generateIdentifier();if(_||m===`application`&&(v===`DTLS/SCTP`||v===`UDP/DTLS/SCTP`)){i.transceivers[l]={mid:te,kind:m,protocol:v,rejected:!0};return}!_&&i.transceivers[l]&&i.transceivers[l].rejected&&(i.transceivers[l]=i._createTransceiver(m,!0));var x,ne,S,C,w,T,E,D,O,re=n.parseRtpParameters(s),ie,k;_||(ie=n.getIceParameters(s,h),k=n.getDtlsParameters(s,h),k.role=`client`),E=n.parseRtpEncodingParameters(s);var ae=n.parseRtcpParameters(s),oe=n.matchPrefix(s,`a=end-of-candidates`,h).length>0,A=n.matchPrefix(s,`a=candidate:`).map(function(e){return n.parseCandidate(e)}).filter(function(e){return e.component===1});if((r.type===`offer`||r.type===`answer`)&&!_&&g&&l>0&&i.transceivers[l]&&(i._disposeIceAndDtlsTransports(l),i.transceivers[l].iceGatherer=i.transceivers[0].iceGatherer,i.transceivers[l].iceTransport=i.transceivers[0].iceTransport,i.transceivers[l].dtlsTransport=i.transceivers[0].dtlsTransport,i.transceivers[l].rtpSender&&i.transceivers[l].rtpSender.setTransport(i.transceivers[0].dtlsTransport),i.transceivers[l].rtpReceiver&&i.transceivers[l].rtpReceiver.setTransport(i.transceivers[0].dtlsTransport)),r.type===`offer`&&!_){x=i.transceivers[l]||i._createTransceiver(m),x.mid=te,x.iceGatherer||=i._createIceGatherer(l,g),A.length&&x.iceTransport.state===`new`&&(oe&&(!g||l===0)?x.iceTransport.setRemoteCandidates(A):A.forEach(function(e){c(x.iceTransport,e)})),D=e.RTCRtpReceiver.getCapabilities(m),t<15019&&(D.codecs=D.codecs.filter(function(e){return e.name!==`rtx`})),T=x.sendEncodingParameters||[{ssrc:(2*l+2)*1001}];var j=!1;if(y===`sendrecv`||y===`sendonly`){if(j=!x.rtpReceiver,w=x.rtpReceiver||new e.RTCRtpReceiver(x.dtlsTransport,m),j){var M;O=w.track,b&&b.stream===`-`||(b?(a[b.stream]||(a[b.stream]=new e.MediaStream,Object.defineProperty(a[b.stream],`id`,{get:function(){return b.stream}})),Object.defineProperty(O,`id`,{get:function(){return b.track}}),M=a[b.stream]):(a.default||=new e.MediaStream,M=a.default)),M&&(u(O,M),x.associatedRemoteMediaStreams.push(M)),p.push([O,w,M])}}else x.rtpReceiver&&x.rtpReceiver.track&&(x.associatedRemoteMediaStreams.forEach(function(e){var t=e.getTracks().find(function(e){return e.id===x.rtpReceiver.track.id});t&&d(t,e)}),x.associatedRemoteMediaStreams=[]);x.localCapabilities=D,x.remoteCapabilities=re,x.rtpReceiver=w,x.rtcpParameters=ae,x.sendEncodingParameters=T,x.recvEncodingParameters=E,i._transceive(i.transceivers[l],!1,j)}else r.type===`answer`&&!_&&(x=i.transceivers[l],ne=x.iceGatherer,S=x.iceTransport,C=x.dtlsTransport,w=x.rtpReceiver,T=x.sendEncodingParameters,D=x.localCapabilities,i.transceivers[l].recvEncodingParameters=E,i.transceivers[l].remoteCapabilities=re,i.transceivers[l].rtcpParameters=ae,A.length&&S.state===`new`&&((ee||oe)&&(!g||l===0)?S.setRemoteCandidates(A):A.forEach(function(e){c(x.iceTransport,e)})),(!g||l===0)&&(S.state===`new`&&S.start(ne,ie,`controlling`),C.state===`new`&&C.start(k)),!o(x.localCapabilities,x.remoteCapabilities).codecs.filter(function(e){return e.name.toLowerCase()===`rtx`}).length&&x.sendEncodingParameters[0].rtx&&delete x.sendEncodingParameters[0].rtx,i._transceive(x,y===`sendrecv`||y===`recvonly`,y===`sendrecv`||y===`sendonly`),w&&(y===`sendrecv`||y===`sendonly`)?(O=w.track,b?(a[b.stream]||(a[b.stream]=new e.MediaStream),u(O,a[b.stream]),p.push([O,w,a[b.stream]])):(a.default||=new e.MediaStream,u(O,a.default),p.push([O,w,a.default]))):delete x.rtpReceiver)}),i._dtlsRole===void 0&&(i._dtlsRole=r.type===`offer`?`active`:`passive`),i._remoteDescription={type:r.type,sdp:r.sdp},r.type===`offer`?i._updateSignalingState(`have-remote-offer`):i._updateSignalingState(`stable`),Object.keys(a).forEach(function(t){var n=a[t];if(n.getTracks().length){if(i.remoteStreams.indexOf(n)===-1){i.remoteStreams.push(n);var r=new Event(`addstream`);r.stream=n,e.setTimeout(function(){i._dispatchEvent(`addstream`,r)})}p.forEach(function(e){var t=e[0],r=e[1];n.id===e[2].id&&f(i,t,r,[n])})}}),p.forEach(function(e){e[2]||f(i,e[0],e[1],[])}),e.setTimeout(function(){i&&i.transceivers&&i.transceivers.forEach(function(e){e.iceTransport&&e.iceTransport.state===`new`&&e.iceTransport.getRemoteCandidates().length>0&&(console.warn(`Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification`),e.iceTransport.addRemoteCandidate({}))})},4e3),Promise.resolve()},p.prototype.close=function(){this.transceivers.forEach(function(e){e.iceTransport&&e.iceTransport.stop(),e.dtlsTransport&&e.dtlsTransport.stop(),e.rtpSender&&e.rtpSender.stop(),e.rtpReceiver&&e.rtpReceiver.stop()}),this._isClosed=!0,this._updateSignalingState(`closed`)},p.prototype._updateSignalingState=function(e){this.signalingState=e;var t=new Event(`signalingstatechange`);this._dispatchEvent(`signalingstatechange`,t)},p.prototype._maybeFireNegotiationNeeded=function(){var t=this;this.signalingState!==`stable`||this.needNegotiation===!0||(this.needNegotiation=!0,e.setTimeout(function(){if(t.needNegotiation){t.needNegotiation=!1;var e=new Event(`negotiationneeded`);t._dispatchEvent(`negotiationneeded`,e)}},0))},p.prototype._updateIceConnectionState=function(){var e,t={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(e){e.iceTransport&&!e.rejected&&t[e.iceTransport.state]++}),e=`new`,t.failed>0?e=`failed`:t.checking>0?e=`checking`:t.disconnected>0?e=`disconnected`:t.new>0?e=`new`:t.connected>0?e=`connected`:t.completed>0&&(e=`completed`),e!==this.iceConnectionState){this.iceConnectionState=e;var n=new Event(`iceconnectionstatechange`);this._dispatchEvent(`iceconnectionstatechange`,n)}},p.prototype._updateConnectionState=function(){var e,t={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(e){e.iceTransport&&e.dtlsTransport&&!e.rejected&&(t[e.iceTransport.state]++,t[e.dtlsTransport.state]++)}),t.connected+=t.completed,e=`new`,t.failed>0?e=`failed`:t.connecting>0?e=`connecting`:t.disconnected>0?e=`disconnected`:t.new>0?e=`new`:t.connected>0&&(e=`connected`),e!==this.connectionState){this.connectionState=e;var n=new Event(`connectionstatechange`);this._dispatchEvent(`connectionstatechange`,n)}},p.prototype.createOffer=function(){var r=this;if(r._isClosed)return Promise.reject(l(`InvalidStateError`,`Can not call createOffer after close`));var a=r.transceivers.filter(function(e){return e.kind===`audio`}).length,o=r.transceivers.filter(function(e){return e.kind===`video`}).length,s=arguments[0];if(s){if(s.mandatory||s.optional)throw TypeError(`Legacy mandatory/optional constraints not supported.`);s.offerToReceiveAudio!==void 0&&(a=s.offerToReceiveAudio===!0?1:s.offerToReceiveAudio===!1?0:s.offerToReceiveAudio),s.offerToReceiveVideo!==void 0&&(o=s.offerToReceiveVideo===!0?1:s.offerToReceiveVideo===!1?0:s.offerToReceiveVideo)}for(r.transceivers.forEach(function(e){e.kind===`audio`?(a--,a<0&&(e.wantReceive=!1)):e.kind===`video`&&(o--,o<0&&(e.wantReceive=!1))});a>0||o>0;)a>0&&(r._createTransceiver(`audio`),a--),o>0&&(r._createTransceiver(`video`),o--);var c=n.writeSessionBoilerplate(r._sdpSessionId,r._sdpSessionVersion++);r.transceivers.forEach(function(i,a){var o=i.track,s=i.kind;i.mid=i.mid||n.generateIdentifier(),i.iceGatherer||=r._createIceGatherer(a,r.usingBundle);var c=e.RTCRtpSender.getCapabilities(s);t<15019&&(c.codecs=c.codecs.filter(function(e){return e.name!==`rtx`})),c.codecs.forEach(function(e){e.name===`H264`&&e.parameters[`level-asymmetry-allowed`]===void 0&&(e.parameters[`level-asymmetry-allowed`]=`1`),i.remoteCapabilities&&i.remoteCapabilities.codecs&&i.remoteCapabilities.codecs.forEach(function(t){e.name.toLowerCase()===t.name.toLowerCase()&&e.clockRate===t.clockRate&&(e.preferredPayloadType=t.payloadType)})}),c.headerExtensions.forEach(function(e){(i.remoteCapabilities&&i.remoteCapabilities.headerExtensions||[]).forEach(function(t){e.uri===t.uri&&(e.id=t.id)})});var l=i.sendEncodingParameters||[{ssrc:(2*a+1)*1001}];o&&t>=15019&&s===`video`&&!l[0].rtx&&(l[0].rtx={ssrc:l[0].ssrc+1}),i.wantReceive&&(i.rtpReceiver=new e.RTCRtpReceiver(i.dtlsTransport,s)),i.localCapabilities=c,i.sendEncodingParameters=l}),r._config.bundlePolicy!==`max-compat`&&(c+=`a=group:BUNDLE `+r.transceivers.map(function(e){return e.mid}).join(` `)+`\r -`),c+=`a=ice-options:trickle\r -`,r.transceivers.forEach(function(e,t){c+=i(e,e.localCapabilities,`offer`,e.stream,r._dtlsRole),c+=`a=rtcp-rsize\r -`,e.iceGatherer&&r.iceGatheringState!==`new`&&(t===0||!r.usingBundle)&&(e.iceGatherer.getLocalCandidates().forEach(function(e){e.component=1,c+=`a=`+n.writeCandidate(e)+`\r -`}),e.iceGatherer.state===`completed`&&(c+=`a=end-of-candidates\r -`))});var u=new e.RTCSessionDescription({type:`offer`,sdp:c});return Promise.resolve(u)},p.prototype.createAnswer=function(){var r=this;if(r._isClosed)return Promise.reject(l(`InvalidStateError`,`Can not call createAnswer after close`));if(!(r.signalingState===`have-remote-offer`||r.signalingState===`have-local-pranswer`))return Promise.reject(l(`InvalidStateError`,`Can not call createAnswer in signalingState `+r.signalingState));var a=n.writeSessionBoilerplate(r._sdpSessionId,r._sdpSessionVersion++);r.usingBundle&&(a+=`a=group:BUNDLE `+r.transceivers.map(function(e){return e.mid}).join(` `)+`\r -`),a+=`a=ice-options:trickle\r -`;var s=n.getMediaSections(r._remoteDescription.sdp).length;r.transceivers.forEach(function(e,n){if(!(n+1>s)){if(e.rejected){e.kind===`application`?e.protocol===`DTLS/SCTP`?a+=`m=application 0 DTLS/SCTP 5000\r -`:a+=`m=application 0 `+e.protocol+` webrtc-datachannel\r -`:e.kind===`audio`?a+=`m=audio 0 UDP/TLS/RTP/SAVPF 0\r -a=rtpmap:0 PCMU/8000\r -`:e.kind===`video`&&(a+=`m=video 0 UDP/TLS/RTP/SAVPF 120\r -a=rtpmap:120 VP8/90000\r -`),a+=`c=IN IP4 0.0.0.0\r -a=inactive\r -a=mid:`+e.mid+`\r -`;return}if(e.stream){var c;e.kind===`audio`?c=e.stream.getAudioTracks()[0]:e.kind===`video`&&(c=e.stream.getVideoTracks()[0]),c&&t>=15019&&e.kind===`video`&&!e.sendEncodingParameters[0].rtx&&(e.sendEncodingParameters[0].rtx={ssrc:e.sendEncodingParameters[0].ssrc+1})}var l=o(e.localCapabilities,e.remoteCapabilities);!l.codecs.filter(function(e){return e.name.toLowerCase()===`rtx`}).length&&e.sendEncodingParameters[0].rtx&&delete e.sendEncodingParameters[0].rtx,a+=i(e,l,`answer`,e.stream,r._dtlsRole),e.rtcpParameters&&e.rtcpParameters.reducedSize&&(a+=`a=rtcp-rsize\r -`)}});var c=new e.RTCSessionDescription({type:`answer`,sdp:a});return Promise.resolve(c)},p.prototype.addIceCandidate=function(e){var t=this,r;return e&&!(e.sdpMLineIndex!==void 0||e.sdpMid)?Promise.reject(TypeError(`sdpMLineIndex or sdpMid required`)):new Promise(function(i,a){if(!t._remoteDescription)return a(l(`InvalidStateError`,`Can not add ICE candidate without a remote description`));if(!e||e.candidate===``)for(var o=0;o0?n.parseCandidate(e.candidate):{};if(f.protocol===`tcp`&&(f.port===0||f.port===9)||f.component&&f.component!==1)return i();if((s===0||s>0&&d.iceTransport!==t.transceivers[0].iceTransport)&&!c(d.iceTransport,f))return a(l(`OperationError`,`Can not add ICE candidate`));var p=e.candidate.trim();p.indexOf(`a=`)===0&&(p=p.substr(2)),r=n.getMediaSections(t._remoteDescription.sdp),r[s]+=`a=`+(f.type?p:`end-of-candidates`)+`\r -`,t._remoteDescription.sdp=n.getDescription(t._remoteDescription.sdp)+r.join(``)}else return a(l(`OperationError`,`Can not add ICE candidate`))}i()})},p.prototype.getStats=function(t){if(t&&t instanceof e.MediaStreamTrack){var n=null;if(this.transceivers.forEach(function(e){e.rtpSender&&e.rtpSender.track===t?n=e.rtpSender:e.rtpReceiver&&e.rtpReceiver.track===t&&(n=e.rtpReceiver)}),!n)throw l(`InvalidAccessError`,`Invalid selector.`);return n.getStats()}var r=[];return this.transceivers.forEach(function(e){[`rtpSender`,`rtpReceiver`,`iceGatherer`,`iceTransport`,`dtlsTransport`].forEach(function(t){e[t]&&r.push(e[t].getStats())})}),Promise.all(r).then(function(e){var t=new Map;return e.forEach(function(e){e.forEach(function(e){t.set(e.id,e)})}),t})},[`RTCRtpSender`,`RTCRtpReceiver`,`RTCIceGatherer`,`RTCIceTransport`,`RTCDtlsTransport`].forEach(function(t){var n=e[t];if(n&&n.prototype&&n.prototype.getStats){var i=n.prototype.getStats;n.prototype.getStats=function(){return i.apply(this).then(function(e){var t=new Map;return Object.keys(e).forEach(function(n){e[n].type=r(e[n]),t.set(n,e[n])}),t})}}});var m=[`createOffer`,`createAnswer`];return m.forEach(function(e){var t=p.prototype[e];p.prototype[e]=function(){var e=arguments;return typeof e[0]==`function`||typeof e[1]==`function`?t.apply(this,[arguments[2]]).then(function(t){typeof e[0]==`function`&&e[0].apply(null,[t])},function(t){typeof e[1]==`function`&&e[1].apply(null,[t])}):t.apply(this,arguments)}}),m=[`setLocalDescription`,`setRemoteDescription`,`addIceCandidate`],m.forEach(function(e){var t=p.prototype[e];p.prototype[e]=function(){var e=arguments;return typeof e[1]==`function`||typeof e[2]==`function`?t.apply(this,arguments).then(function(){typeof e[1]==`function`&&e[1].apply(null)},function(t){typeof e[2]==`function`&&e[2].apply(null,[t])}):t.apply(this,arguments)}}),[`getStats`].forEach(function(e){var t=p.prototype[e];p.prototype[e]=function(){var e=arguments;return typeof e[1]==`function`?t.apply(this,arguments).then(function(){typeof e[1]==`function`&&e[1].apply(null)}):t.apply(this,arguments)}}),p}}))());function k(e){let t=e&&e.navigator,n=function(e){return{name:{PermissionDeniedError:`NotAllowedError`}[e.name]||e.name,message:e.message,constraint:e.constraint,toString(){return this.name}}},r=t.mediaDevices.getUserMedia.bind(t.mediaDevices);Object.getOwnPropertyDescriptor(t.mediaDevices,`getUserMedia`)?.writable&&(t.mediaDevices.getUserMedia=function(e){return r(e).catch(e=>Promise.reject(n(e)))})}function ae(e){`getDisplayMedia`in e.navigator&&e.navigator.mediaDevices&&(e.navigator.mediaDevices&&`getDisplayMedia`in e.navigator.mediaDevices||(e.navigator.mediaDevices.getDisplayMedia=e.navigator.getDisplayMedia.bind(e.navigator)))}var oe=e({shimGetDisplayMedia:()=>ae,shimGetUserMedia:()=>k,shimPeerConnection:()=>A,shimReplaceTrack:()=>j});function A(e,t){if(e.RTCIceGatherer&&(e.RTCIceCandidate||=function(e){return e},e.RTCSessionDescription||=function(e){return e},t.version<15025)){let t=Object.getOwnPropertyDescriptor(e.MediaStreamTrack.prototype,`enabled`);Object.defineProperty(e.MediaStreamTrack.prototype,`enabled`,{set(e){t.set.call(this,e);let n=new Event(`enabled`);n.enabled=e,this.dispatchEvent(n)}})}e.RTCRtpSender&&!(`dtmf`in e.RTCRtpSender.prototype)&&Object.defineProperty(e.RTCRtpSender.prototype,`dtmf`,{get(){return this._dtmf===void 0&&(this.track.kind===`audio`?this._dtmf=new e.RTCDtmfSender(this):this.track.kind===`video`&&(this._dtmf=null)),this._dtmf}}),e.RTCDtmfSender&&!e.RTCDTMFSender&&(e.RTCDTMFSender=e.RTCDtmfSender);let n=(0,ie.default)(e,t.version);e.RTCPeerConnection=function(e){return e&&e.iceServers&&(e.iceServers=O(e.iceServers,t.version),d(`ICE servers after filtering:`,e.iceServers)),new n(e)},e.RTCPeerConnection.prototype=n.prototype}function j(e){e.RTCRtpSender&&!(`replaceTrack`in e.RTCRtpSender.prototype)&&(e.RTCRtpSender.prototype.replaceTrack=e.RTCRtpSender.prototype.setTrack)}function M(e,t){let n=e&&e.navigator,r=e&&e.MediaStreamTrack;if(n.getUserMedia=function(e,t,r){f(`navigator.getUserMedia`,`navigator.mediaDevices.getUserMedia`),n.mediaDevices.getUserMedia(e).then(t,r)},!(t.version>55&&`autoGainControl`in n.mediaDevices.getSupportedConstraints())){let e=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])},t=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(Object.getOwnPropertyDescriptor(n.mediaDevices,`getUserMedia`)?.writable&&(n.mediaDevices.getUserMedia=function(n){return typeof n==`object`&&typeof n.audio==`object`&&(n=JSON.parse(JSON.stringify(n)),e(n.audio,`autoGainControl`,`mozAutoGainControl`),e(n.audio,`noiseSuppression`,`mozNoiseSuppression`)),t(n)}),r&&r.prototype.getSettings){let t=r.prototype.getSettings;r.prototype.getSettings=function(){let n=t.apply(this,arguments);return e(n,`mozAutoGainControl`,`autoGainControl`),e(n,`mozNoiseSuppression`,`noiseSuppression`),n}}if(r&&r.prototype.applyConstraints){let t=r.prototype.applyConstraints;r.prototype.applyConstraints=function(n){return this.kind===`audio`&&typeof n==`object`&&(n=JSON.parse(JSON.stringify(n)),e(n,`autoGainControl`,`mozAutoGainControl`),e(n,`noiseSuppression`,`mozNoiseSuppression`)),t.apply(this,[n])}}}}function se(e,t){e.navigator.mediaDevices&&`getDisplayMedia`in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(n){if(!(n&&n.video)){let e=new DOMException(`getDisplayMedia without video constraints is undefined`);return e.name=`NotFoundError`,e.code=8,Promise.reject(e)}return n.video===!0?n.video={mediaSource:t}:n.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(n)})}var ce=e({shimAddTransceiver:()=>he,shimCreateAnswer:()=>ve,shimCreateOffer:()=>_e,shimGetDisplayMedia:()=>se,shimGetParameters:()=>ge,shimGetUserMedia:()=>M,shimOnTrack:()=>le,shimPeerConnection:()=>ue,shimRTCDataChannel:()=>me,shimReceiverGetStats:()=>fe,shimRemoveStream:()=>pe,shimSenderGetStats:()=>de});function le(e){typeof e==`object`&&e.RTCTrackEvent&&`receiver`in e.RTCTrackEvent.prototype&&!(`transceiver`in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,`transceiver`,{get(){return{receiver:this.receiver}}})}function ue(e,t){if(typeof e!=`object`||!(e.RTCPeerConnection||e.mozRTCPeerConnection))return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&[`setLocalDescription`,`setRemoteDescription`,`addIceCandidate`].forEach(function(t){let n=e.RTCPeerConnection.prototype[t],r={[t](){return arguments[0]=new(t===`addIceCandidate`?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=r[t]});let n={inboundrtp:`inbound-rtp`,outboundrtp:`outbound-rtp`,candidatepair:`candidate-pair`,localcandidate:`local-candidate`,remotecandidate:`remote-candidate`},r=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){let[e,i,a]=arguments;return r.apply(this,[e||null]).then(e=>{if(t.version<53&&!i)try{e.forEach(e=>{e.type=n[e.type]||e.type})}catch(t){if(t.name!==`TypeError`)throw t;e.forEach((t,r)=>{e.set(r,Object.assign({},t,{type:n[t.type]||t.type}))})}return e}).then(i,a)}}function de(e){if(!(typeof e==`object`&&e.RTCPeerConnection&&e.RTCRtpSender)||e.RTCRtpSender&&`getStats`in e.RTCRtpSender.prototype)return;let t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){let e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});let n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){let e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function fe(e){if(!(typeof e==`object`&&e.RTCPeerConnection&&e.RTCRtpSender)||e.RTCRtpSender&&`getStats`in e.RTCRtpReceiver.prototype)return;let t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){let e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),c(e,`track`,e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function pe(e){!e.RTCPeerConnection||`removeStream`in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){f(`removeStream`,`removeTrack`),this.getSenders().forEach(t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)})})}function me(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function he(e){if(!(typeof e==`object`&&e.RTCPeerConnection))return;let t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let e=arguments[1],n=e&&`sendEncodings`in e;n&&e.sendEncodings.forEach(e=>{if(`rid`in e&&!/^[a-z0-9]{0,16}$/i.test(e.rid))throw TypeError(`Invalid RID value provided.`);if(`scaleResolutionDownBy`in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw RangeError(`scale_resolution_down_by must be >= 1.0`);if(`maxFramerate`in e&&!(parseFloat(e.maxFramerate)>=0))throw RangeError(`max_framerate must be >= 0.0`)});let r=t.apply(this,arguments);if(n){let{sender:t}=r,n=t.getParameters();(!(`encodings`in n)||n.encodings.length===1&&Object.keys(n.encodings[0]).length===0)&&(n.encodings=e.sendEncodings,t.sendEncodings=e.sendEncodings,this.setParametersPromises.push(t.setParameters(n).then(()=>{delete t.sendEncodings}).catch(()=>{delete t.sendEncodings})))}return r})}function ge(e){if(!(typeof e==`object`&&e.RTCRtpSender))return;let t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){let e=t.apply(this,arguments);return`encodings`in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function _e(e){if(!(typeof e==`object`&&e.RTCPeerConnection))return;let t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>t.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):t.apply(this,arguments)}}function ve(e){if(!(typeof e==`object`&&e.RTCPeerConnection))return;let t=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>t.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):t.apply(this,arguments)}}var ye=e({shimAudioContext:()=>Oe,shimCallbacksAPI:()=>Se,shimConstraints:()=>we,shimCreateOfferLegacy:()=>De,shimGetUserMedia:()=>Ce,shimLocalStreamsAPI:()=>be,shimRTCIceServerUrls:()=>Te,shimRemoteStreamsAPI:()=>xe,shimTrackEventTransceiver:()=>Ee});function be(e){if(!(typeof e!=`object`||!e.RTCPeerConnection)){if(`getLocalStreams`in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||=[],this._localStreams}),!(`addStream`in e.RTCPeerConnection.prototype)){let t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||=[],this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach(n=>t.call(this,n,e)),e.getVideoTracks().forEach(n=>t.call(this,n,e))},e.RTCPeerConnection.prototype.addTrack=function(e,...n){return n&&n.forEach(e=>{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]}),t.apply(this,arguments)}}`removeStream`in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||=[];let t=this._localStreams.indexOf(e);if(t===-1)return;this._localStreams.splice(t,1);let n=e.getTracks();this.getSenders().forEach(e=>{n.includes(e.track)&&this.removeTrack(e)})})}}function xe(e){if(!(typeof e!=`object`||!e.RTCPeerConnection)&&(`getRemoteStreams`in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!(`onaddstream`in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,`onaddstream`,{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener(`addstream`,this._onaddstream),this.removeEventListener(`track`,this._onaddstreampoly)),this.addEventListener(`addstream`,this._onaddstream=e),this.addEventListener(`track`,this._onaddstreampoly=e=>{e.streams.forEach(e=>{if(this._remoteStreams||=[],this._remoteStreams.includes(e))return;this._remoteStreams.push(e);let t=new Event(`addstream`);t.stream=e,this.dispatchEvent(t)})})}});let t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){let e=this;return this._onaddstreampoly||this.addEventListener(`track`,this._onaddstreampoly=function(t){t.streams.forEach(t=>{if(e._remoteStreams||=[],e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);let n=new Event(`addstream`);n.stream=t,e.dispatchEvent(n)})}),t.apply(e,arguments)}}}function Se(e){if(typeof e!=`object`||!e.RTCPeerConnection)return;let t=e.RTCPeerConnection.prototype,n=t.createOffer,r=t.createAnswer,i=t.setLocalDescription,a=t.setRemoteDescription,o=t.addIceCandidate;t.createOffer=function(e,t){let r=arguments.length>=2?arguments[2]:arguments[0],i=n.apply(this,[r]);return t?(i.then(e,t),Promise.resolve()):i},t.createAnswer=function(e,t){let n=arguments.length>=2?arguments[2]:arguments[0],i=r.apply(this,[n]);return t?(i.then(e,t),Promise.resolve()):i};let s=function(e,t,n){let r=i.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r};t.setLocalDescription=s,s=function(e,t,n){let r=a.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r},t.setRemoteDescription=s,s=function(e,t,n){let r=o.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r},t.addIceCandidate=s}function Ce(e){let t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){let e=t.mediaDevices,n=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>n(we(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,n,r){t.mediaDevices.getUserMedia(e).then(n,r)}.bind(t))}function we(e){return e&&e.video!==void 0?Object.assign({},e,{video:h(e.video)}):e}function Te(e){if(!e.RTCPeerConnection)return;let t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,n){if(e&&e.iceServers){let t=[];for(let n=0;ne.receiver.track.kind===`audio`);e.offerToReceiveAudio===!1&&t?t.direction===`sendrecv`?t.setDirection?t.setDirection(`sendonly`):t.direction=`sendonly`:t.direction===`recvonly`&&(t.setDirection?t.setDirection(`inactive`):t.direction=`inactive`):e.offerToReceiveAudio===!0&&!t&&this.addTransceiver(`audio`),e.offerToReceiveVideo!==void 0&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);let n=this.getTransceivers().find(e=>e.receiver.track.kind===`video`);e.offerToReceiveVideo===!1&&n?n.direction===`sendrecv`?n.setDirection?n.setDirection(`sendonly`):n.direction=`sendonly`:n.direction===`recvonly`&&(n.setDirection?n.setDirection(`inactive`):n.direction=`inactive`):e.offerToReceiveVideo===!0&&!n&&this.addTransceiver(`video`)}return t.apply(this,arguments)}}function Oe(e){typeof e!=`object`||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}var ke=e({removeExtmapAllowMixed:()=>Ne,shimAddIceCandidateNullOrEmpty:()=>Pe,shimConnectionState:()=>Me,shimMaxMessageSize:()=>N,shimRTCIceCandidate:()=>je,shimSendThrowTypeError:()=>P}),Ae=t(re());function je(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&`foundation`in e.RTCIceCandidate.prototype)return;let t=e.RTCIceCandidate;e.RTCIceCandidate=function(e){if(typeof e==`object`&&e.candidate&&e.candidate.indexOf(`a=`)===0&&(e=JSON.parse(JSON.stringify(e)),e.candidate=e.candidate.substr(2)),e.candidate&&e.candidate.length){let n=new t(e),r=Ae.default.parseCandidate(e.candidate),i=Object.assign(n,r);return i.toJSON=function(){return{candidate:i.candidate,sdpMid:i.sdpMid,sdpMLineIndex:i.sdpMLineIndex,usernameFragment:i.usernameFragment}},i}return new t(e)},e.RTCIceCandidate.prototype=t.prototype,c(e,`icecandidate`,t=>(t.candidate&&Object.defineProperty(t,`candidate`,{value:new e.RTCIceCandidate(t.candidate),writable:`false`}),t))}function N(e,t){if(!e.RTCPeerConnection)return;`sctp`in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,`sctp`,{get(){return this._sctp===void 0?null:this._sctp}});let n=function(e){if(!e||!e.sdp)return!1;let t=Ae.default.splitSections(e.sdp);return t.shift(),t.some(e=>{let t=Ae.default.parseMLine(e);return t&&t.kind===`application`&&t.protocol.indexOf(`SCTP`)!==-1})},r=function(e){let t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(t===null||t.length<2)return-1;let n=parseInt(t[1],10);return n===n?n:-1},i=function(e){let n=65536;return t.browser===`firefox`&&(n=t.version<57?e===-1?16384:2147483637:t.version<60?t.version===57?65535:65536:2147483637),n},a=function(e,n){let r=65536;t.browser===`firefox`&&t.version===57&&(r=65535);let i=Ae.default.matchPrefix(e.sdp,`a=max-message-size:`);return i.length>0?r=parseInt(i[0].substr(19),10):t.browser===`firefox`&&n!==-1&&(r=2147483637),r},o=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,t.browser===`chrome`&&t.version>=76){let{sdpSemantics:e}=this.getConfiguration();e===`plan-b`&&Object.defineProperty(this,`sctp`,{get(){return this._sctp===void 0?null:this._sctp},enumerable:!0,configurable:!0})}if(n(arguments[0])){let e=r(arguments[0]),t=i(e),n=a(arguments[0],e),o;o=t===0&&n===0?1/0:t===0||n===0?Math.max(t,n):Math.min(t,n);let s={};Object.defineProperty(s,`maxMessageSize`,{get(){return o}}),this._sctp=s}return o.apply(this,arguments)}}function P(e){if(!(e.RTCPeerConnection&&`createDataChannel`in e.RTCPeerConnection.prototype))return;function t(e,t){let n=e.send;e.send=function(){let r=arguments[0],i=r.length||r.size||r.byteLength;if(e.readyState===`open`&&t.sctp&&i>t.sctp.maxMessageSize)throw TypeError(`Message too large (can send a maximum of `+t.sctp.maxMessageSize+` bytes)`);return n.apply(e,arguments)}}let n=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){let e=n.apply(this,arguments);return t(e,this),e},c(e,`datachannel`,e=>(t(e.channel,e.target),e))}function Me(e){if(!e.RTCPeerConnection||`connectionState`in e.RTCPeerConnection.prototype)return;let t=e.RTCPeerConnection.prototype;Object.defineProperty(t,`connectionState`,{get(){return{completed:`connected`,checking:`connecting`}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,`onconnectionstatechange`,{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener(`connectionstatechange`,this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener(`connectionstatechange`,this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),[`setLocalDescription`,`setRemoteDescription`].forEach(e=>{let n=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{let t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;let n=new Event(`connectionstatechange`,e);t.dispatchEvent(n)}return e},this.addEventListener(`iceconnectionstatechange`,this._connectionstatechangepoly)),n.apply(this,arguments)}})}function Ne(e,t){if(!e.RTCPeerConnection||t.browser===`chrome`&&t.version>=71||t.browser===`safari`&&t.version>=605)return;let n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(t){if(t&&t.sdp&&t.sdp.indexOf(` -a=extmap-allow-mixed`)!==-1){let n=t.sdp.split(` -`).filter(e=>e.trim()!==`a=extmap-allow-mixed`).join(` -`);e.RTCSessionDescription&&t instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:t.type,sdp:n}):t.sdp=n}return n.apply(this,arguments)}}function Pe(e,t){if(!(e.RTCPeerConnection&&e.RTCPeerConnection.prototype))return;let n=e.RTCPeerConnection.prototype.addIceCandidate;!n||n.length===0||(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(t.browser===`chrome`&&t.version<78||t.browser===`firefox`&&t.version<68||t.browser===`safari`)&&arguments[0]&&arguments[0].candidate===``?Promise.resolve():n.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function Fe({window:e}={},t={shimChrome:!0,shimFirefox:!0,shimEdge:!0,shimSafari:!0}){let n=d,r=p(e),i={browserDetails:r,commonShim:ke,extractVersion:s,disableLog:l,disableWarnings:u};switch(r.browser){case`chrome`:if(!b||!E||!t.shimChrome)return n(`Chrome shim is not included in this adapter release.`),i;if(r.version===null)return n(`Chrome shim can not determine version, not shimming.`),i;n(`adapter.js shimming chrome.`),i.browserShim=b,Pe(e,r),v(e,r),te(e,r),E(e,r),x(e,r),T(e,r),ne(e,r),S(e,r),C(e,r),D(e,r),je(e,r),Me(e,r),N(e,r),P(e,r),Ne(e,r);break;case`firefox`:if(!ce||!ue||!t.shimFirefox)return n(`Firefox shim is not included in this adapter release.`),i;n(`adapter.js shimming firefox.`),i.browserShim=ce,Pe(e,r),M(e,r),ue(e,r),le(e,r),pe(e,r),de(e,r),fe(e,r),me(e,r),he(e,r),ge(e,r),_e(e,r),ve(e,r),je(e,r),Me(e,r),N(e,r),P(e,r);break;case`edge`:if(!oe||!A||!t.shimEdge)return n(`MS edge shim is not included in this adapter release.`),i;n(`adapter.js shimming edge.`),i.browserShim=oe,k(e,r),ae(e,r),A(e,r),j(e,r),N(e,r),P(e,r);break;case`safari`:if(!ye||!t.shimSafari)return n(`Safari shim is not included in this adapter release.`),i;n(`adapter.js shimming safari.`),i.browserShim=ye,Pe(e,r),Te(e,r),De(e,r),Se(e,r),be(e,r),xe(e,r),Ee(e,r),Ce(e,r),Oe(e,r),je(e,r),N(e,r),P(e,r),Ne(e,r);break;default:n(`Unsupported browser!`);break}return i}var Ie=Fe({window:typeof window>`u`?void 0:window}),Le=e({Peer:()=>Tt,default:()=>Et,util:()=>L});function F(e,t,n,r){Object.defineProperty(e,t,{get:n,set:r,enumerable:!0,configurable:!0})}var Re=Ie.default||Ie,I=new(function(){function e(){this.isIOS=[`iPad`,`iPhone`,`iPod`].includes(navigator.platform),this.supportedBrowsers=[`firefox`,`chrome`,`safari`],this.minFirefoxVersion=59,this.minChromeVersion=72,this.minSafariVersion=605}return e.prototype.isWebRTCSupported=function(){return typeof RTCPeerConnection<`u`},e.prototype.isBrowserSupported=function(){var e=this.getBrowser(),t=this.getVersion();return this.supportedBrowsers.includes(e)?e===`chrome`?t>=this.minChromeVersion:e===`firefox`?t>=this.minFirefoxVersion:e===`safari`?!this.isIOS&&t>=this.minSafariVersion:!1:!1},e.prototype.getBrowser=function(){return Re.browserDetails.browser},e.prototype.getVersion=function(){return Re.browserDetails.version||0},e.prototype.isUnifiedPlanSupported=function(){var e=this.getBrowser(),t=Re.browserDetails.version||0;if(e===`chrome`&&t=this.minFirefoxVersion)return!0;if(!window.RTCRtpTransceiver||!(`currentDirection`in RTCRtpTransceiver.prototype))return!1;var n,r=!1;try{n=new RTCPeerConnection,n.addTransceiver(`audio`),r=!0}catch{}finally{n&&n.close()}return r},e.prototype.toString=function(){return`Supports: - browser:${this.getBrowser()} - version:${this.getVersion()} - isIOS:${this.isIOS} - isWebRTCSupported:${this.isWebRTCSupported()} - isBrowserSupported:${this.isBrowserSupported()} - isUnifiedPlanSupported:${this.isUnifiedPlanSupported()}`},e}()),ze={iceServers:[{urls:`stun:stun.l.google.com:19302`},{urls:[`turn:eu-0.turn.peerjs.com:3478`,`turn:us-0.turn.peerjs.com:3478`],username:`peerjs`,credential:`peerjsp`}],sdpSemantics:`unified-plan`},L=new(function(){function e(){this.CLOUD_HOST=`0.peerjs.com`,this.CLOUD_PORT=443,this.chunkedBrowsers={Chrome:1,chrome:1},this.chunkedMTU=16300,this.defaultConfig=ze,this.browser=I.getBrowser(),this.browserVersion=I.getVersion(),this.supports=function(){var e={browser:I.isBrowserSupported(),webRTC:I.isWebRTCSupported(),audioVideo:!1,data:!1,binaryBlob:!1,reliable:!1};if(!e.webRTC)return e;var t;try{t=new RTCPeerConnection(ze),e.audioVideo=!0;var n=void 0;try{n=t.createDataChannel(`_PEERJSTEST`,{ordered:!0}),e.data=!0,e.reliable=!!n.ordered;try{n.binaryType=`blob`,e.binaryBlob=!I.isIOS}catch{}}catch{}finally{n&&n.close()}}catch{}finally{t&&t.close()}return e}(),this.pack=i.default.pack,this.unpack=i.default.unpack,this._dataCount=1}return e.prototype.noop=function(){},e.prototype.validateId=function(e){return!e||/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/.test(e)},e.prototype.chunk=function(e){for(var t=[],n=e.size,r=Math.ceil(n/L.chunkedMTU),i=0,a=0;aTt,e=>Tt=e);var R={},Ve=Object.prototype.hasOwnProperty,z=`~`;function B(){}Object.create&&(B.prototype=Object.create(null),new B().__proto__||(z=!1));function He(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function Ue(e,t,n,r,i){if(typeof n!=`function`)throw TypeError(`The listener must be a function`);var a=new He(n,r||e,i),o=z?z+t:t;return e._events[o]?e._events[o].fn?e._events[o]=[e._events[o],a]:e._events[o].push(a):(e._events[o]=a,e._eventsCount++),e}function We(e,t){--e._eventsCount===0?e._events=new B:delete e._events[t]}function V(){this._events=new B,this._eventsCount=0}V.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)Ve.call(t,n)&&e.push(z?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e},V.prototype.listeners=function(e){var t=z?z+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var r=0,i=n.length,a=Array(i);rG,e=>G=e),F(H,`default`,()=>Ke,e=>Ke=e);var U=function(e,t){var n=typeof Symbol==`function`&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(e){o={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a},W=function(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r=G.All&&this._print.apply(this,W([G.All],U(e),!1))},e.prototype.warn=function(){var e=[...arguments];this._logLevel>=G.Warnings&&this._print.apply(this,W([G.Warnings],U(e),!1))},e.prototype.error=function(){var e=[...arguments];this._logLevel>=G.Errors&&this._print.apply(this,W([G.Errors],U(e),!1))},e.prototype.setLogFunction=function(e){this._print=e},e.prototype._print=function(e){var t=[...arguments].slice(1),n=W([Ge],U(t),!1);for(var r in n)n[r]instanceof Error&&(n[r]=`(`+n[r].name+`) `+n[r].message);e>=G.All?console.log.apply(console,W([],U(n),!1)):e>=G.Warnings?console.warn.apply(console,W([`WARNING`],U(n),!1)):e>=G.Errors&&console.error.apply(console,W([`ERROR`],U(n),!1))},e}()),qe={};F(qe,`Socket`,()=>$e,e=>$e=e);var K;(function(e){e.Data=`data`,e.Media=`media`})(K||={});var q;(function(e){e.BrowserIncompatible=`browser-incompatible`,e.Disconnected=`disconnected`,e.InvalidID=`invalid-id`,e.InvalidKey=`invalid-key`,e.Network=`network`,e.PeerUnavailable=`peer-unavailable`,e.SslUnavailable=`ssl-unavailable`,e.ServerError=`server-error`,e.SocketError=`socket-error`,e.SocketClosed=`socket-closed`,e.UnavailableID=`unavailable-id`,e.WebRTC=`webrtc`})(q||={});var J;(function(e){e.Binary=`binary`,e.BinaryUTF8=`binary-utf8`,e.JSON=`json`})(J||={});var Y;(function(e){e.Message=`message`,e.Disconnected=`disconnected`,e.Error=`error`,e.Close=`close`})(Y||={});var X;(function(e){e.Heartbeat=`HEARTBEAT`,e.Candidate=`CANDIDATE`,e.Offer=`OFFER`,e.Answer=`ANSWER`,e.Open=`OPEN`,e.Error=`ERROR`,e.IdTaken=`ID-TAKEN`,e.InvalidKey=`INVALID-KEY`,e.Leave=`LEAVE`,e.Expire=`EXPIRE`})(X||={});var Je={};Je=JSON.parse(`{"name":"peerjs","version":"1.4.7","keywords":["peerjs","webrtc","p2p","rtc"],"description":"PeerJS client","homepage":"https://peerjs.com","bugs":{"url":"https://github.com/peers/peerjs/issues"},"repository":{"type":"git","url":"https://github.com/peers/peerjs"},"license":"MIT","contributors":["Michelle Bu ","afrokick ","ericz ","Jairo ","Jonas Gloning <34194370+jonasgloning@users.noreply.github.com>","Jairo Caro-Accino Viciana ","Carlos Caballero ","hc ","Muhammad Asif ","PrashoonB ","Harsh Bardhan Mishra <47351025+HarshCasper@users.noreply.github.com>","akotynski ","lmb ","Jairooo ","Moritz Stückler ","Simon ","Denis Lukov ","Philipp Hancke ","Hans Oksendahl ","Jess ","khankuan ","DUODVK ","XiZhao ","Matthias Lohr ","=frank tree <=frnktrb@googlemail.com>","Andre Eckardt ","Chris Cowan ","Alex Chuev ","alxnull ","Yemel Jardi ","Ben Parnell ","Benny Lichtner ","fresheneesz ","bob.barstead@exaptive.com ","chandika ","emersion ","Christopher Van ","eddieherm ","Eduardo Pinho ","Evandro Zanatta ","Gardner Bickford ","Gian Luca ","PatrickJS ","jonnyf ","Hizkia Felix ","Hristo Oskov ","Isaac Madwed ","Ilya Konanykhin ","jasonbarry ","Jonathan Burke ","Josh Hamit ","Jordan Austin ","Joel Wetzell ","xizhao ","Alberto Torres ","Jonathan Mayol ","Jefferson Felix ","Rolf Erik Lekang ","Kevin Mai-Husan Chia ","Pepijn de Vos ","JooYoung ","Tobias Speicher ","Steve Blaurock ","Kyrylo Shegeda ","Diwank Singh Tomer ","Sören Balko ","Arpit Solanki ","Yuki Ito ","Artur Zayats "],"funding":{"type":"opencollective","url":"https://opencollective.com/peer"},"collective":{"type":"opencollective","url":"https://opencollective.com/peer"},"files":["dist/*"],"sideEffects":["lib/global.ts","lib/supports.ts"],"main":"dist/bundler.cjs","module":"dist/bundler.mjs","browser-minified":"dist/peerjs.min.js","browser-unminified":"dist/peerjs.js","types":"dist/types.d.ts","engines":{"node":">= 10"},"targets":{"types":{"source":"lib/exports.ts"},"main":{"source":"lib/exports.ts","sourceMap":{"inlineSources":true}},"module":{"source":"lib/exports.ts","includeNodeModules":["eventemitter3"],"sourceMap":{"inlineSources":true}},"browser-minified":{"context":"browser","outputFormat":"global","optimize":true,"engines":{"browsers":"cover 99%, not dead"},"source":"lib/global.ts"},"browser-unminified":{"context":"browser","outputFormat":"global","optimize":false,"engines":{"browsers":"cover 99%, not dead"},"source":"lib/global.ts"}},"scripts":{"contributors":"git-authors-cli --print=false && prettier --write package.json && git add package.json package-lock.json && git commit -m \\"chore(contributors): update and sort contributors list\\"","check":"tsc --noEmit","watch":"parcel watch","build":"rm -rf dist && parcel build","prepublishOnly":"npm run build","test":"mocha -r ts-node/register -r jsdom-global/register test/**/*.ts","format":"prettier --write .","semantic-release":"semantic-release"},"devDependencies":{"@parcel/config-default":"^2.5.0","@parcel/packager-ts":"^2.5.0","@parcel/transformer-typescript-tsc":"^2.5.0","@parcel/transformer-typescript-types":"^2.5.0","@semantic-release/changelog":"^6.0.1","@semantic-release/git":"^10.0.1","@types/chai":"^4.3.0","@types/mocha":"^9.1.0","@types/node":"^17.0.18","chai":"^4.3.6","git-authors-cli":"^1.0.40","jsdom":"^19.0.0","jsdom-global":"^3.0.2","mocha":"^9.2.0","mock-socket":"8.0.5","parcel":"^2.5.0","parcel-transformer-tsc-sourcemaps":"^1.0.2","prettier":"^2.6.2","semantic-release":"^19.0.2","standard":"^16.0.4","ts-node":"^10.5.0","typescript":"^4.5.5"},"dependencies":{"@swc/helpers":"^0.3.13","eventemitter3":"^4.0.7","peerjs-js-binarypack":"1.0.1","webrtc-adapter":"^7.7.1"}}`);var Ye=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if(typeof n!=`function`&&n!==null)throw TypeError(`Class extends value `+String(n)+` is not a constructor or null`);e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),Xe=function(e,t){var n=typeof Symbol==`function`&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(e){o={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a},Ze=function(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)},$e=function(e){Ye(t,e);function t(t,n,r,i,a,o){o===void 0&&(o=5e3);var s=e.call(this)||this;return s.pingInterval=o,s._disconnected=!0,s._messagesQueue=[],s._baseUrl=(t?`wss://`:`ws://`)+n+`:`+r+i+`peerjs?key=`+a,s}return t.prototype.start=function(e,t){var n=this;this._id=e;var r=`${this._baseUrl}&id=${e}&token=${t}`;this._socket||!this._disconnected||(this._socket=new WebSocket(r+`&version=`+Je.version),this._disconnected=!1,this._socket.onmessage=function(e){var t;try{t=JSON.parse(e.data),H.default.log(`Server message received:`,t)}catch{H.default.log(`Invalid server message`,e.data);return}n.emit(Y.Message,t)},this._socket.onclose=function(e){n._disconnected||(H.default.log(`Socket closed.`,e),n._cleanup(),n._disconnected=!0,n.emit(Y.Disconnected))},this._socket.onopen=function(){n._disconnected||(n._sendQueuedMessages(),H.default.log(`Socket open`),n._scheduleHeartbeat())})},t.prototype._scheduleHeartbeat=function(){var e=this;this._wsPingTimer=setTimeout(function(){e._sendHeartbeat()},this.pingInterval)},t.prototype._sendHeartbeat=function(){if(!this._wsOpen()){H.default.log(`Cannot send heartbeat, because socket closed`);return}var e=JSON.stringify({type:X.Heartbeat});this._socket.send(e),this._scheduleHeartbeat()},t.prototype._wsOpen=function(){return!!this._socket&&this._socket.readyState===1},t.prototype._sendQueuedMessages=function(){var e,t,n=Ze([],Xe(this._messagesQueue),!1);this._messagesQueue=[];try{for(var r=Qe(n),i=r.next();!i.done;i=r.next()){var a=i.value;this.send(a)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}},t.prototype.send=function(e){if(!this._disconnected){if(!this._id){this._messagesQueue.push(e);return}if(!e.type){this.emit(Y.Error,`Invalid message`);return}if(this._wsOpen()){var t=JSON.stringify(e);this._socket.send(t)}}},t.prototype.close=function(){this._disconnected||=(this._cleanup(),!0)},t.prototype._cleanup=function(){this._socket&&=(this._socket.onopen=this._socket.onmessage=this._socket.onclose=null,this._socket.close(),void 0),clearTimeout(this._wsPingTimer)},t}(R.EventEmitter),et={};F(et,`MediaConnection`,()=>dt,e=>dt=e);var tt={};F(tt,`Negotiator`,()=>it,e=>it=e);var nt=function(){return nt=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&a[a.length-1]))&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!a||o[1]>a[0]&&o[1]st,e=>st=e);var ot=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if(typeof n!=`function`&&n!==null)throw TypeError(`Class extends value `+String(n)+` is not a constructor or null`);e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),st=function(e){ot(t,e);function t(t,n,r){var i=e.call(this)||this;return i.peer=t,i.provider=n,i.options=r,i._open=!1,i.metadata=r.metadata,i}return Object.defineProperty(t.prototype,`open`,{get:function(){return this._open},enumerable:!1,configurable:!0}),t}(R.EventEmitter),ct=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if(typeof n!=`function`&&n!==null)throw TypeError(`Class extends value `+String(n)+` is not a constructor or null`);e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),lt=function(){return lt=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)},dt=function(e){ct(t,e);function t(n,r,i){var a=e.call(this,n,r,i)||this;return a._localStream=a.options._stream,a.connectionId=a.options.connectionId||t.ID_PREFIX+L.randomToken(),a._negotiator=new tt.Negotiator(a),a._localStream&&a._negotiator.startConnection({_stream:a._localStream,originator:!0}),a}return Object.defineProperty(t.prototype,`type`,{get:function(){return K.Media},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`localStream`,{get:function(){return this._localStream},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`remoteStream`,{get:function(){return this._remoteStream},enumerable:!1,configurable:!0}),t.prototype.addStream=function(t){H.default.log(`Receiving stream`,t),this._remoteStream=t,e.prototype.emit.call(this,`stream`,t)},t.prototype.handleMessage=function(e){var t=e.type,n=e.payload;switch(e.type){case X.Answer:this._negotiator.handleSDP(t,n.sdp),this._open=!0;break;case X.Candidate:this._negotiator.handleCandidate(n.candidate);break;default:H.default.warn(`Unrecognized message type:${t} from peer:${this.peer}`);break}},t.prototype.answer=function(e,t){var n,r;if(t===void 0&&(t={}),this._localStream){H.default.warn(`Local stream already exists on this MediaConnection. Are you answering a call twice?`);return}this._localStream=e,t&&t.sdpTransform&&(this.options.sdpTransform=t.sdpTransform),this._negotiator.startConnection(lt(lt({},this.options._payload),{_stream:e}));var i=this.provider._getMessages(this.connectionId);try{for(var a=ut(i),o=a.next();!o.done;o=a.next()){var s=o.value;this.handleMessage(s)}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}this._open=!0},t.prototype.close=function(){this._negotiator&&=(this._negotiator.cleanup(),null),this._localStream=null,this._remoteStream=null,this.provider&&=(this.provider._removeConnection(this),null),this.options&&this.options._stream&&(this.options._stream=null),this.open&&(this._open=!1,e.prototype.emit.call(this,`close`))},t.ID_PREFIX=`mc_`,t}(at.BaseConnection),ft={};F(ft,`DataConnection`,()=>vt,e=>vt=e);var pt={};F(pt,`EncodingQueue`,()=>ht,e=>ht=e);var mt=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if(typeof n!=`function`&&n!==null)throw TypeError(`Class extends value `+String(n)+` is not a constructor or null`);e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),ht=function(e){mt(t,e);function t(){var t=e.call(this)||this;return t.fileReader=new FileReader,t._queue=[],t._processing=!1,t.fileReader.onload=function(e){t._processing=!1,e.target&&t.emit(`done`,e.target.result),t.doNextTask()},t.fileReader.onerror=function(e){H.default.error(`EncodingQueue error:`,e),t._processing=!1,t.destroy(),t.emit(`error`,e)},t}return Object.defineProperty(t.prototype,`queue`,{get:function(){return this._queue},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`size`,{get:function(){return this.queue.length},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`processing`,{get:function(){return this._processing},enumerable:!1,configurable:!0}),t.prototype.enque=function(e){this.queue.push(e),!this.processing&&this.doNextTask()},t.prototype.destroy=function(){this.fileReader.abort(),this._queue=[]},t.prototype.doNextTask=function(){this.size!==0&&(this.processing||(this._processing=!0,this.fileReader.readAsArrayBuffer(this.queue.shift())))},t}(R.EventEmitter),gt=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if(typeof n!=`function`&&n!==null)throw TypeError(`Class extends value `+String(n)+` is not a constructor or null`);e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),_t=function(e){var t=typeof Symbol==`function`&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length==`number`)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)},vt=function(e){gt(t,e);function t(n,r,i){var a=e.call(this,n,r,i)||this;return a.stringify=JSON.stringify,a.parse=JSON.parse,a._buffer=[],a._bufferSize=0,a._buffering=!1,a._chunkedData={},a._encodingQueue=new pt.EncodingQueue,a.connectionId=a.options.connectionId||t.ID_PREFIX+L.randomToken(),a.label=a.options.label||a.connectionId,a.serialization=a.options.serialization||J.Binary,a.reliable=!!a.options.reliable,a._encodingQueue.on(`done`,function(e){a._bufferedSend(e)}),a._encodingQueue.on(`error`,function(){H.default.error(`DC#${a.connectionId}: Error occured in encoding from blob to arraybuffer, close DC`),a.close()}),a._negotiator=new tt.Negotiator(a),a._negotiator.startConnection(a.options._payload||{originator:!0}),a}return Object.defineProperty(t.prototype,`type`,{get:function(){return K.Data},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`dataChannel`,{get:function(){return this._dc},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`bufferSize`,{get:function(){return this._bufferSize},enumerable:!1,configurable:!0}),t.prototype.initialize=function(e){this._dc=e,this._configureDataChannel()},t.prototype._configureDataChannel=function(){var e=this;(!L.supports.binaryBlob||L.supports.reliable)&&(this.dataChannel.binaryType=`arraybuffer`),this.dataChannel.onopen=function(){H.default.log(`DC#${e.connectionId} dc connection success`),e._open=!0,e.emit(`open`)},this.dataChannel.onmessage=function(t){H.default.log(`DC#${e.connectionId} dc onmessage:`,t.data),e._handleDataMessage(t)},this.dataChannel.onclose=function(){H.default.log(`DC#${e.connectionId} dc closed for:`,e.peer),e.close()}},t.prototype._handleDataMessage=function(t){var n=this,r=t.data,i=r.constructor,a=this.serialization===J.Binary||this.serialization===J.BinaryUTF8,o=r;if(a){if(i===Blob){L.blobToArrayBuffer(r,function(e){var t=L.unpack(e);n.emit(`data`,t)});return}else if(i===ArrayBuffer)o=L.unpack(r);else if(i===String){var s=L.binaryStringToArrayBuffer(r);o=L.unpack(s)}}else this.serialization===J.JSON&&(o=this.parse(r));if(o.__peerData){this._handleChunk(o);return}e.prototype.emit.call(this,`data`,o)},t.prototype._handleChunk=function(e){var t=e.__peerData,n=this._chunkedData[t]||{data:[],count:0,total:e.total};if(n.data[e.n]=e.data,n.count++,this._chunkedData[t]=n,n.total===n.count){delete this._chunkedData[t];var r=new Blob(n.data);this._handleDataMessage({data:r})}},t.prototype.close=function(){this._buffer=[],this._bufferSize=0,this._chunkedData={},this._negotiator&&=(this._negotiator.cleanup(),null),this.provider&&=(this.provider._removeConnection(this),null),this.dataChannel&&(this.dataChannel.onopen=null,this.dataChannel.onmessage=null,this.dataChannel.onclose=null,this._dc=null),this._encodingQueue&&=(this._encodingQueue.destroy(),this._encodingQueue.removeAllListeners(),null),this.open&&(this._open=!1,e.prototype.emit.call(this,`close`))},t.prototype.send=function(t,n){if(!this.open){e.prototype.emit.call(this,`error`,Error("Connection is not open. You should listen for the `open` event before sending messages."));return}if(this.serialization===J.JSON)this._bufferedSend(this.stringify(t));else if(this.serialization===J.Binary||this.serialization===J.BinaryUTF8){var r=L.pack(t);if(!n&&r.size>L.chunkedMTU){this._sendChunks(r);return}L.supports.binaryBlob?this._bufferedSend(r):this._encodingQueue.enque(r)}else this._bufferedSend(t)},t.prototype._bufferedSend=function(e){(this._buffering||!this._trySend(e))&&(this._buffer.push(e),this._bufferSize=this._buffer.length)},t.prototype._trySend=function(e){var n=this;if(!this.open)return!1;if(this.dataChannel.bufferedAmount>t.MAX_BUFFERED_AMOUNT)return this._buffering=!0,setTimeout(function(){n._buffering=!1,n._tryBuffer()},50),!1;try{this.dataChannel.send(e)}catch(e){return H.default.error(`DC#:${this.connectionId} Error when sending:`,e),this._buffering=!0,this.close(),!1}return!0},t.prototype._tryBuffer=function(){if(this.open&&this._buffer.length!==0){var e=this._buffer[0];this._trySend(e)&&(this._buffer.shift(),this._bufferSize=this._buffer.length,this._tryBuffer())}},t.prototype._sendChunks=function(e){var t,n,r=L.chunk(e);H.default.log(`DC#${this.connectionId} Try to send ${r.length} chunks...`);try{for(var i=_t(r),a=i.next();!a.done;a=i.next()){var o=a.value;this.send(o,!0)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}},t.prototype.handleMessage=function(e){var t=e.payload;switch(e.type){case X.Answer:this._negotiator.handleSDP(e.type,t.sdp);break;case X.Candidate:this._negotiator.handleCandidate(t.candidate);break;default:H.default.warn(`Unrecognized message type:`,e.type,`from peer:`,this.peer);break}},t.ID_PREFIX=`dc_`,t.MAX_BUFFERED_AMOUNT=8388608,t}(at.BaseConnection),yt={};F(yt,`API`,()=>St,e=>St=e);var bt=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})},xt=function(e,t){var n={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},r,i,a,o;return o={next:s(0),throw:s(1),return:s(2)},typeof Symbol==`function`&&(o[Symbol.iterator]=function(){return this}),o;function s(e){return function(t){return c([e,t])}}function c(o){if(r)throw TypeError(`Generator is already executing.`);for(;n;)try{if(r=1,i&&(a=o[0]&2?i.return:o[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,o[1])).done)return a;switch(i=0,a&&(o=[o[0]&2,a.value]),o[0]){case 0:case 1:a=o;break;case 4:return n.label++,{value:o[1],done:!1};case 5:n.label++,i=o[1],o=[0];continue;case 7:o=n.ops.pop(),n.trys.pop();continue;default:if((a=n.trys,!(a=a.length>0&&a[a.length-1]))&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!a||o[1]>a[0]&&o[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)},wt=function(e,t){var n=typeof Symbol==`function`&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(e){o={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a};(function(){function e(){}return e})();var Tt=function(e){Ct(t,e);function t(n,r){var i=e.call(this)||this;i._id=null,i._lastServerId=null,i._destroyed=!1,i._disconnected=!1,i._open=!1,i._connections=new Map,i._lostMessages=new Map;var a;return n&&n.constructor==Object?r=n:n&&(a=n.toString()),r=Q({debug:0,host:L.CLOUD_HOST,port:L.CLOUD_PORT,path:`/`,key:t.DEFAULT_KEY,token:L.randomToken(),config:L.defaultConfig,referrerPolicy:`strict-origin-when-cross-origin`},r),i._options=r,i._options.host===`/`&&(i._options.host=window.location.hostname),i._options.path&&(i._options.path[0]!==`/`&&(i._options.path=`/`+i._options.path),i._options.path[i._options.path.length-1]!==`/`&&(i._options.path+=`/`)),i._options.secure===void 0&&i._options.host!==L.CLOUD_HOST?i._options.secure=L.isSecure():i._options.host==L.CLOUD_HOST&&(i._options.secure=!0),i._options.logFunction&&H.default.setLogFunction(i._options.logFunction),H.default.logLevel=i._options.debug||0,i._api=new yt.API(r),i._socket=i._createServerConnection(),!L.supports.audioVideo&&!L.supports.data?(i._delayedAbort(q.BrowserIncompatible,`The current browser does not support WebRTC`),i):a&&!L.validateId(a)?(i._delayedAbort(q.InvalidID,`ID "${a}" is invalid`),i):(a?i._initialize(a):i._api.retrieveId().then(function(e){return i._initialize(e)}).catch(function(e){return i._abort(q.ServerError,e)}),i)}return Object.defineProperty(t.prototype,`id`,{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`options`,{get:function(){return this._options},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`open`,{get:function(){return this._open},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`socket`,{get:function(){return this._socket},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`connections`,{get:function(){var e,t,n=Object.create(null);try{for(var r=$(this._connections),i=r.next();!i.done;i=r.next()){var a=wt(i.value,2),o=a[0];n[o]=a[1]}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}return n},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`destroyed`,{get:function(){return this._destroyed},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,`disconnected`,{get:function(){return this._disconnected},enumerable:!1,configurable:!0}),t.prototype._createServerConnection=function(){var e=this,t=new qe.Socket(this._options.secure,this._options.host,this._options.port,this._options.path,this._options.key,this._options.pingInterval);return t.on(Y.Message,function(t){e._handleMessage(t)}),t.on(Y.Error,function(t){e._abort(q.SocketError,t)}),t.on(Y.Disconnected,function(){e.disconnected||(e.emitError(q.Network,`Lost connection to server.`),e.disconnect())}),t.on(Y.Close,function(){e.disconnected||e._abort(q.SocketClosed,`Underlying socket is already closed.`)}),t},t.prototype._initialize=function(e){this._id=e,this.socket.start(e,this._options.token)},t.prototype._handleMessage=function(e){var t,n,r=e.type,i=e.payload,a=e.src;switch(r){case X.Open:this._lastServerId=this.id,this._open=!0,this.emit(`open`,this.id);break;case X.Error:this._abort(q.ServerError,i.msg);break;case X.IdTaken:this._abort(q.UnavailableID,`ID "${this.id}" is taken`);break;case X.InvalidKey:this._abort(q.InvalidKey,`API KEY "${this._options.key}" is invalid`);break;case X.Leave:H.default.log(`Received leave message from ${a}`),this._cleanupPeer(a),this._connections.delete(a);break;case X.Expire:this.emitError(q.PeerUnavailable,`Could not connect to peer ${a}`);break;case X.Offer:var o=i.connectionId,s=this.getConnection(a,o);if(s&&(s.close(),H.default.warn(`Offer received for existing Connection ID:${o}`)),i.type===K.Media){var c=new et.MediaConnection(a,this,{connectionId:o,_payload:i,metadata:i.metadata});s=c,this._addConnection(a,s),this.emit(`call`,c)}else if(i.type===K.Data){var l=new ft.DataConnection(a,this,{connectionId:o,_payload:i,metadata:i.metadata,label:i.label,serialization:i.serialization,reliable:i.reliable});s=l,this._addConnection(a,s),this.emit(`connection`,l)}else{H.default.warn(`Received malformed connection type:${i.type}`);return}var u=this._getMessages(o);try{for(var d=$(u),f=d.next();!f.done;f=d.next()){var p=f.value;s.handleMessage(p)}}catch(e){t={error:e}}finally{try{f&&!f.done&&(n=d.return)&&n.call(d)}finally{if(t)throw t.error}}break;default:if(!i){H.default.warn(`You received a malformed message from ${a} of type ${r}`);return}var o=i.connectionId,s=this.getConnection(a,o);s&&s.peerConnection?s.handleMessage(e):o?this._storeMessage(o,e):H.default.warn(`You received an unrecognized message:`,e);break}},t.prototype._storeMessage=function(e,t){this._lostMessages.has(e)||this._lostMessages.set(e,[]),this._lostMessages.get(e).push(t)},t.prototype._getMessages=function(e){var t=this._lostMessages.get(e);return t?(this._lostMessages.delete(e),t):[]},t.prototype.connect=function(e,t){if(t===void 0&&(t={}),this.disconnected){H.default.warn(`You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect, or call reconnect on this peer if you believe its ID to still be available.`),this.emitError(q.Disconnected,`Cannot connect to new Peer after disconnecting from server.`);return}var n=new ft.DataConnection(e,this,t);return this._addConnection(e,n),n},t.prototype.call=function(e,t,n){if(n===void 0&&(n={}),this.disconnected){H.default.warn(`You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect.`),this.emitError(q.Disconnected,`Cannot connect to new Peer after disconnecting from server.`);return}if(!t){H.default.error("To call a peer, you must provide a stream from your browser's `getUserMedia`.");return}var r=new et.MediaConnection(e,this,Q(Q({},n),{_stream:t}));return this._addConnection(e,r),r},t.prototype._addConnection=function(e,t){H.default.log(`add connection ${t.type}:${t.connectionId} to peerId:${e}`),this._connections.has(e)||this._connections.set(e,[]),this._connections.get(e).push(t)},t.prototype._removeConnection=function(e){var t=this._connections.get(e.peer);if(t){var n=t.indexOf(e);n!==-1&&t.splice(n,1)}this._lostMessages.delete(e.connectionId)},t.prototype.getConnection=function(e,t){var n,r,i=this._connections.get(e);if(!i)return null;try{for(var a=$(i),o=a.next();!o.done;o=a.next()){var s=o.value;if(s.connectionId===t)return s}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}return null},t.prototype._delayedAbort=function(e,t){var n=this;setTimeout(function(){n._abort(e,t)},0)},t.prototype._abort=function(e,t){H.default.error(`Aborting!`),this.emitError(e,t),this._lastServerId?this.disconnect():this.destroy()},t.prototype.emitError=function(e,t){H.default.error(`Error:`,t);var n=typeof t==`string`?Error(t):t;n.type=e,this.emit(`error`,n)},t.prototype.destroy=function(){this.destroyed||(H.default.log(`Destroy peer with ID:${this.id}`),this.disconnect(),this._cleanup(),this._destroyed=!0,this.emit(`close`))},t.prototype._cleanup=function(){var e,t;try{for(var n=$(this._connections.keys()),r=n.next();!r.done;r=n.next()){var i=r.value;this._cleanupPeer(i),this._connections.delete(i)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}this.socket.removeAllListeners()},t.prototype._cleanupPeer=function(e){var t,n,r=this._connections.get(e);if(r)try{for(var i=$(r),a=i.next();!a.done;a=i.next())a.value.close()}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}},t.prototype.disconnect=function(){if(!this.disconnected){var e=this.id;H.default.log(`Disconnect peer with ID:${e}`),this._disconnected=!0,this._open=!1,this.socket.close(),this._lastServerId=e,this._id=null,this.emit(`disconnected`,e)}},t.prototype.reconnect=function(){if(this.disconnected&&!this.destroyed)H.default.log(`Attempting reconnection to server with ID ${this._lastServerId}`),this._disconnected=!1,this._initialize(this._lastServerId);else if(this.destroyed)throw Error(`This peer cannot reconnect to the server. It has already been destroyed.`);else if(!this.disconnected&&!this.open)H.default.error(`In a hurry? We're still trying to make the initial connection!`);else throw Error(`Peer ${this.id} cannot reconnect because it is not disconnected from the server!`)},t.prototype.listAllPeers=function(e){var t=this;e===void 0&&(e=function(e){}),this._api.listAllPeers().then(function(t){return e(t)}).catch(function(e){return t._abort(q.ServerError,e)})},t.DEFAULT_KEY=`peerjs`,t}(R.EventEmitter),Et=Be.Peer;export{Le as t}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/peerjs.UdR1_Ath.js.gz b/Needle/MenuScene/dist/assets/peerjs.UdR1_Ath.js.gz deleted file mode 100644 index 174c92c..0000000 Binary files a/Needle/MenuScene/dist/assets/peerjs.UdR1_Ath.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/postprocessing.Wy71DpiM.js b/Needle/MenuScene/dist/assets/postprocessing.Wy71DpiM.js deleted file mode 100644 index de6f214..0000000 --- a/Needle/MenuScene/dist/assets/postprocessing.Wy71DpiM.js +++ /dev/null @@ -1,947 +0,0 @@ -import{$t as e,A as t,Ar as n,Bt as r,Dn as i,E as a,En as o,Er as s,Fr as c,H as l,It as u,Jn as d,O as f,On as p,Qn as m,Rt as h,S as g,Un as _,Ut as v,V as y,Vt as b,X as x,Xt as S,Y as ee,Zn as C,Zt as te,f as w,gn as T,gr as ne,it as re,jr as E,kr as D,mn as O,nt as ie,on as k,ot as A,qn as ae,qt as oe,tn as se,tr as j,wr as ce,x as le,xr as M}from"./three@0.169.19.js";var ue=`6.39.0`,de=class{dispose(){}},fe=(()=>{let e=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),t=new Float32Array([0,0,2,0,0,2]),n=new g;return n.setAttribute(`position`,new le(e,3)),n.setAttribute(`uv`,new le(t,2)),n})(),N=class e{static get fullscreenGeometry(){return fe}constructor(e=`Pass`,t=new m,n=new O){this.name=e,this.renderer=null,this.scene=t,this.camera=n,this.screen=null,this.rtt=!0,this.needsSwap=!0,this.needsDepthBlit=!1,this.needsDepthTexture=!1,this.enabled=!0}get renderToScreen(){return!this.rtt}set renderToScreen(e){if(this.rtt===e){let t=this.fullscreenMaterial;t!==null&&(t.needsUpdate=!0),this.rtt=!e}}set mainScene(e){}set mainCamera(e){}setRenderer(e){this.renderer=e}isEnabled(){return this.enabled}setEnabled(e){this.enabled=e}get fullscreenMaterial(){return this.screen===null?null:this.screen.material}set fullscreenMaterial(t){let n=this.screen;n===null?(n=new te(e.fullscreenGeometry,t),n.frustumCulled=!1,this.scene===null&&(this.scene=new m),this.scene.add(n),this.screen=n):n.material=t}getFullscreenMaterial(){return this.fullscreenMaterial}setFullscreenMaterial(e){this.fullscreenMaterial=e}getDepthTexture(){return null}setDepthTexture(e,t=w){}render(e,t,n,r,i){throw Error(`Render method not implemented!`)}setSize(e,t){}initialize(e,t,n){}dispose(){for(let t of Object.keys(this)){let n=this[t];(n instanceof c||n instanceof oe||n instanceof ne||n instanceof e)&&this[t].dispose()}this.fullscreenMaterial!==null&&this.fullscreenMaterial.dispose()}},pe=class extends N{constructor(){super(`ClearMaskPass`,null,null),this.needsSwap=!1}render(e,t,n,r,i){let a=e.state.buffers.stencil;a.setLocked(!1),a.setTest(!1)}},me=`#ifdef COLOR_WRITE -#include -#include -#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#endif -#ifdef DEPTH_WRITE -#include -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -return unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -return texture2D(depthBuffer,uv).r; -#endif -} -#endif -#ifdef USE_WEIGHTS -uniform vec4 channelWeights; -#endif -uniform float opacity;varying vec2 vUv;void main(){ -#ifdef COLOR_WRITE -vec4 texel=texture2D(inputBuffer,vUv); -#ifdef USE_WEIGHTS -texel*=channelWeights; -#endif -gl_FragColor=opacity*texel; -#ifdef COLOR_SPACE_CONVERSION -#include -#endif -#include -#else -gl_FragColor=vec4(0.0); -#endif -#ifdef DEPTH_WRITE -gl_FragDepth=readDepth(vUv); -#endif -}`,P=`varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}`,he=class extends j{constructor(){super({name:`CopyMaterial`,defines:{COLOR_SPACE_CONVERSION:`1`,DEPTH_PACKING:`0`,COLOR_WRITE:`1`},uniforms:{inputBuffer:new M(null),depthBuffer:new M(null),channelWeights:new M(null),opacity:new M(1)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:me,vertexShader:P}),this.depthFunc=1}get inputBuffer(){return this.uniforms.inputBuffer.value}set inputBuffer(e){let t=e!==null;this.colorWrite!==t&&(t?this.defines.COLOR_WRITE=!0:delete this.defines.COLOR_WRITE,this.colorWrite=t,this.needsUpdate=!0),this.uniforms.inputBuffer.value=e}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(e){let t=e!==null;this.depthWrite!==t&&(t?this.defines.DEPTH_WRITE=!0:delete this.defines.DEPTH_WRITE,this.depthTest=t,this.depthWrite=t,this.needsUpdate=!0),this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}get colorSpaceConversion(){return this.defines.COLOR_SPACE_CONVERSION!==void 0}set colorSpaceConversion(e){this.colorSpaceConversion!==e&&(e?this.defines.COLOR_SPACE_CONVERSION=!0:delete this.defines.COLOR_SPACE_CONVERSION,this.needsUpdate=!0)}get channelWeights(){return this.uniforms.channelWeights.value}set channelWeights(e){e===null?delete this.defines.USE_WEIGHTS:(this.defines.USE_WEIGHTS=`1`,this.uniforms.channelWeights.value=e),this.needsUpdate=!0}setInputBuffer(e){this.uniforms.inputBuffer.value=e}getOpacity(e){return this.uniforms.opacity.value}setOpacity(e){this.uniforms.opacity.value=e}},ge=class extends N{constructor(e,t=!0){super(`CopyPass`),this.fullscreenMaterial=new he,this.needsSwap=!1,this.renderTarget=e,e===void 0&&(this.renderTarget=new c(1,1,{minFilter:u,magFilter:u,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name=`CopyPass.Target`),this.autoResize=t}get resize(){return this.autoResize}set resize(e){this.autoResize=e}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}setAutoResizeEnabled(e){this.autoResize=e}render(e,t,n,r,i){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){this.autoResize&&this.renderTarget.setSize(e,t)}initialize(e,t,n){n!==void 0&&(this.renderTarget.texture.type=n,n===1009?e!==null&&e.outputColorSpace===`srgb`&&(this.renderTarget.texture.colorSpace=C):this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH=`1`)}},_e=new t,ve=class extends N{constructor(e=!0,t=!0,n=!1){super(`ClearPass`,null,null),this.needsSwap=!1,this.color=e,this.depth=t,this.stencil=n,this.overrideClearColor=null,this.overrideClearAlpha=-1}setClearFlags(e,t,n){this.color=e,this.depth=t,this.stencil=n}getOverrideClearColor(){return this.overrideClearColor}setOverrideClearColor(e){this.overrideClearColor=e}getOverrideClearAlpha(){return this.overrideClearAlpha}setOverrideClearAlpha(e){this.overrideClearAlpha=e}render(e,t,n,r,i){let a=this.overrideClearColor,o=this.overrideClearAlpha,s=e.getClearAlpha(),c=a!==null,l=o>=0;c?(e.getClearColor(_e),e.setClearColor(a,l?o:s)):l&&e.setClearAlpha(o),e.setRenderTarget(this.renderToScreen?null:t),e.clear(this.color,this.depth,this.stencil),c?e.setClearColor(_e,s):l&&e.setClearAlpha(s)}},ye=class extends N{constructor(e,t){super(`MaskPass`,e,t),this.needsSwap=!1,this.clearPass=new ve(!1,!1,!0),this.inverse=!1}set mainScene(e){this.scene=e}set mainCamera(e){this.camera=e}get inverted(){return this.inverse}set inverted(e){this.inverse=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getClearPass(){return this.clearPass}isInverted(){return this.inverted}setInverted(e){this.inverted=e}render(e,t,n,r,i){let a=e.getContext(),o=e.state.buffers,s=this.scene,c=this.camera,l=this.clearPass,u=+!this.inverted,d=1-u;o.color.setMask(!1),o.depth.setMask(!1),o.color.setLocked(!0),o.depth.setLocked(!0),o.stencil.setTest(!0),o.stencil.setOp(a.REPLACE,a.REPLACE,a.REPLACE),o.stencil.setFunc(a.ALWAYS,u,4294967295),o.stencil.setClear(d),o.stencil.setLocked(!0),this.clearPass.enabled&&(this.renderToScreen?l.render(e,null):(l.render(e,t),l.render(e,n))),this.renderToScreen?(e.setRenderTarget(null),e.render(s,c)):(e.setRenderTarget(t),e.render(s,c),e.setRenderTarget(n),e.render(s,c)),o.color.setLocked(!1),o.depth.setLocked(!1),o.stencil.setLocked(!1),o.stencil.setFunc(a.EQUAL,1,4294967295),o.stencil.setOp(a.KEEP,a.KEEP,a.KEEP),o.stencil.setLocked(!0)}},be=1/1e3,xe=1e3,Se=class{constructor(){this.startTime=performance.now(),this.previousTime=0,this.currentTime=0,this._delta=0,this._elapsed=0,this._fixedDelta=1e3/60,this.timescale=1,this.useFixedDelta=!1,this._autoReset=!1}get autoReset(){return this._autoReset}set autoReset(e){typeof document<`u`&&document.hidden!==void 0&&(e?document.addEventListener(`visibilitychange`,this):document.removeEventListener(`visibilitychange`,this),this._autoReset=e)}get delta(){return this._delta*be}get fixedDelta(){return this._fixedDelta*be}set fixedDelta(e){this._fixedDelta=e*xe}get elapsed(){return this._elapsed*be}update(e){this.useFixedDelta?this._delta=this.fixedDelta:(this.previousTime=this.currentTime,this.currentTime=(e===void 0?performance.now():e)-this.startTime,this._delta=this.currentTime-this.previousTime),this._delta*=this.timescale,this._elapsed+=this._delta}reset(){this._delta=0,this._elapsed=0,this.currentTime=performance.now()-this.startTime}getDelta(){return this.delta}getElapsed(){return this.elapsed}handleEvent(e){document.hidden||(this.currentTime=performance.now()-this.startTime)}dispose(){this.autoReset=!1}},Ce=class{constructor(e=null,{depthBuffer:t=!0,stencilBuffer:n=!1,multisampling:r=0,frameBufferType:i}={}){this.renderer=null,this.inputBuffer=this.createBuffer(t,n,i,r),this.outputBuffer=this.inputBuffer.clone(),this.copyPass=new ge,this.depthTexture=null,this.depthRenderTarget=null,this.passes=[],this.timer=new Se,this.autoRenderToScreen=!0,this.setRenderer(e)}get multisampling(){return this.inputBuffer.samples}set multisampling(e){let t=this.inputBuffer,n=this.multisampling;n>0&&e>0?(this.inputBuffer.samples=e,this.outputBuffer.samples=e,this.inputBuffer.dispose(),this.outputBuffer.dispose()):n!==e&&(this.inputBuffer.dispose(),this.outputBuffer.dispose(),this.inputBuffer=this.createBuffer(t.depthBuffer,t.stencilBuffer,t.texture.type,e),this.outputBuffer=this.inputBuffer.clone())}getTimer(){return this.timer}getRenderer(){return this.renderer}setRenderer(e){if(this.renderer=e,e!==null){let t=e.getSize(new D),n=e.getContext().getContextAttributes().alpha,r=this.inputBuffer.texture.type;r===1009&&e.outputColorSpace===`srgb`&&(this.inputBuffer.texture.colorSpace=C,this.outputBuffer.texture.colorSpace=C,this.inputBuffer.dispose(),this.outputBuffer.dispose()),e.autoClear=!1,this.setSize(t.width,t.height);for(let t of this.passes)t.initialize(e,n,r)}}replaceRenderer(e,t=!0){let n=this.renderer,r=n.domElement.parentNode;return this.setRenderer(e),t&&r!==null&&(r.removeChild(n.domElement),r.appendChild(e.domElement)),n}createDepthTexture(){let e=this.inputBuffer,t=new x;this.depthTexture=t,e.stencilBuffer?(t.format=ee,t.type=s):t.type=A;let n=t.clone();return n.name=`EffectComposer.StableDepth`,this.depthRenderTarget=new c(e.width,e.height,{depthBuffer:!0,stencilBuffer:e.stencilBuffer,depthTexture:n}),n}blitDepthBuffer(e){let t=this.renderer,n=this.depthRenderTarget,r=t.properties,i=t.getContext();t.setRenderTarget(n);let a=r.get(e).__webglFramebuffer,o=r.get(n).__webglFramebuffer,s=e.stencilBuffer?i.DEPTH_BUFFER_BIT|i.STENCIL_BUFFER_BIT:i.DEPTH_BUFFER_BIT;i.bindFramebuffer(i.READ_FRAMEBUFFER,a),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,o),i.blitFramebuffer(0,0,e.width,e.height,0,0,n.width,n.height,s,i.NEAREST),i.bindFramebuffer(i.READ_FRAMEBUFFER,null),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,null),t.setRenderTarget(null)}deleteDepthTexture(){if(this.depthTexture!==null){this.depthTexture.dispose(),this.depthTexture=null,this.depthRenderTarget.dispose(),this.depthRenderTarget=null,this.inputBuffer.depthTexture=null,this.outputBuffer.depthTexture=null;for(let e of this.passes)e.setDepthTexture(null)}}createBuffer(e,t,n,r){let i=this.renderer,a=i===null?new D:i.getDrawingBufferSize(new D),o={minFilter:u,magFilter:u,stencilBuffer:t,depthBuffer:e,type:n},s=new c(a.width,a.height,o);return r>0&&(s.samples=r),n===1009&&i!==null&&i.outputColorSpace===`srgb`&&(s.texture.colorSpace=C),s.texture.name=`EffectComposer.Buffer`,s.texture.generateMipmaps=!1,s}setMainScene(e){for(let t of this.passes)t.mainScene=e}setMainCamera(e){for(let t of this.passes)t.mainCamera=e}addPass(e,t){let n=this.passes,r=this.renderer,i=r.getDrawingBufferSize(new D),a=r.getContext().getContextAttributes().alpha,o=this.inputBuffer.texture.type;if(e.renderer=r,e.setSize(i.width,i.height),e.initialize(r,a,o),this.autoRenderToScreen&&(n.length>0&&(n[n.length-1].renderToScreen=!1),e.renderToScreen&&(this.autoRenderToScreen=!1)),t===void 0?n.push(e):n.splice(t,0,e),this.autoRenderToScreen&&(n[n.length-1].renderToScreen=!0),e.needsDepthTexture||this.depthTexture!==null)if(this.depthTexture===null){let t=this.createDepthTexture();for(e of n)e.setDepthTexture(t)}else{let t=this.depthRenderTarget.depthTexture;e.setDepthTexture(t)}}removePass(e){let t=this.passes,n=t.indexOf(e);if(n!==-1&&t.splice(n,1).length>0){if(this.depthTexture!==null&&!t.reduce((e,t)=>e||t.needsDepthTexture,!1)){let t=this.depthRenderTarget.depthTexture;e.getDepthTexture()===t&&e.setDepthTexture(null),this.deleteDepthTexture()}this.autoRenderToScreen&&n===t.length&&(e.renderToScreen=!1,t.length>0&&(t[t.length-1].renderToScreen=!0))}}removeAllPasses(){let e=this.passes;this.deleteDepthTexture(),e.length>0&&(this.autoRenderToScreen&&(e[e.length-1].renderToScreen=!1),this.passes=[])}render(e){let t=this.renderer,n=this.copyPass,r=this.inputBuffer,i=this.outputBuffer,a,o=!1;e===void 0&&(this.timer.update(),e=this.timer.getDelta());for(let s of this.passes)if(s.enabled){if(r.depthTexture=this.depthTexture,i.depthTexture=null,s.render(t,r,i,e,o),s.needsDepthBlit&&this.depthRenderTarget!==null&&this.blitDepthBuffer(r),s.needsSwap){if(o){n.renderToScreen=s.renderToScreen;let a=t.getContext(),c=t.state.buffers.stencil;c.setFunc(a.NOTEQUAL,1,4294967295),n.render(t,r,i,e,o),c.setFunc(a.EQUAL,1,4294967295)}a=r,r=i,i=a}s instanceof ye?o=!0:s instanceof pe&&(o=!1)}}setSize(e,t,n){let r=this.renderer,i=r.getSize(new D);(e===void 0||t===void 0)&&(e=i.width,t=i.height),(i.width!==e||i.height!==t)&&r.setSize(e,t,n);let a=r.getDrawingBufferSize(new D);this.inputBuffer.setSize(a.width,a.height),this.outputBuffer.setSize(a.width,a.height),this.depthRenderTarget!==null&&this.depthRenderTarget.setSize(a.width,a.height);for(let e of this.passes)e.setSize(a.width,a.height)}reset(){this.dispose(),this.autoRenderToScreen=!0}dispose(){for(let e of this.passes)e.dispose();this.passes=[],this.inputBuffer!==null&&this.inputBuffer.dispose(),this.outputBuffer!==null&&this.outputBuffer.dispose(),this.deleteDepthTexture(),this.copyPass.dispose(),this.timer.dispose(),N.fullscreenGeometry.dispose()}},F={NONE:0,DEPTH:1,CONVOLUTION:2},I={FRAGMENT_HEAD:`FRAGMENT_HEAD`,FRAGMENT_MAIN_UV:`FRAGMENT_MAIN_UV`,FRAGMENT_MAIN_IMAGE:`FRAGMENT_MAIN_IMAGE`,VERTEX_HEAD:`VERTEX_HEAD`,VERTEX_MAIN_SUPPORT:`VERTEX_MAIN_SUPPORT`},we=class{constructor(){this.shaderParts=new Map([[I.FRAGMENT_HEAD,null],[I.FRAGMENT_MAIN_UV,null],[I.FRAGMENT_MAIN_IMAGE,null],[I.VERTEX_HEAD,null],[I.VERTEX_MAIN_SUPPORT,null]]),this.defines=new Map,this.uniforms=new Map,this.blendModes=new Map,this.extensions=new Set,this.attributes=F.NONE,this.varyings=new Set,this.uvTransformation=!1,this.readDepth=!1,this.colorSpace=r}};function Te(e){let t;if(e===0)t=new Float64Array;else if(e===1)t=new Float64Array([1]);else if(e>1){let n=new Float64Array(e),r=new Float64Array(e);for(let i=1;i<=e;++i){for(let e=0;e1020)throw Error(`The kernel size must be in the range [3, 1020]`);let n=e+t*2,r=t>0?Te(n).slice(t,-t):Te(n),i=Math.floor((r.length-1)/2),a=r.reduce((e,t)=>e+t,0),o=r.slice(i),s=[...Array(i+1).keys()],c=new Float64Array(Math.floor(s.length/2)),l=new Float64Array(c.length);c[0]=o[0]/a;for(let e=1,t=1,n=s.length-1;ee+t,0)-c[0]*.5)*2;if(u!==0)for(let e=0,t=c.length,n=1/u;e{if(e.isMesh){let t;if(e.material.flatShading)switch(e.material.side){case 2:t=this.materialsFlatShadedDoubleSide;break;case 1:t=this.materialsFlatShadedBackSide;break;default:t=this.materialsFlatShaded;break}else switch(e.material.side){case 2:t=this.materialsDoubleSide;break;case 1:t=this.materialsBackSide;break;default:t=this.materials;break}this.originalMaterials.set(e,e.material),e.isSkinnedMesh?e.material=t[2]:e.isInstancedMesh?e.material=t[1]:e.material=t[0],++this.meshCount}}}cloneMaterial(e){if(!(e instanceof j))return e.clone();let t=e.uniforms,n=new Map;for(let e in t){let r=t[e].value;r.isRenderTargetTexture&&(t[e].value=null,n.set(e,r))}let r=e.clone();for(let e of n)t[e[0]].value=e[1],r.uniforms[e[0]].value=e[1];return r}setMaterial(e){if(this.disposeMaterials(),this.material=e,e!==null){let t=this.materials=[this.cloneMaterial(e),this.cloneMaterial(e),this.cloneMaterial(e)];for(let n of t)n.uniforms=Object.assign({},e.uniforms),n.side=0;t[2].skinning=!0,this.materialsBackSide=t.map(t=>{let n=this.cloneMaterial(t);return n.uniforms=Object.assign({},e.uniforms),n.side=1,n}),this.materialsDoubleSide=t.map(t=>{let n=this.cloneMaterial(t);return n.uniforms=Object.assign({},e.uniforms),n.side=2,n}),this.materialsFlatShaded=t.map(t=>{let n=this.cloneMaterial(t);return n.uniforms=Object.assign({},e.uniforms),n.flatShading=!0,n}),this.materialsFlatShadedBackSide=t.map(t=>{let n=this.cloneMaterial(t);return n.uniforms=Object.assign({},e.uniforms),n.flatShading=!0,n.side=1,n}),this.materialsFlatShadedDoubleSide=t.map(t=>{let n=this.cloneMaterial(t);return n.uniforms=Object.assign({},e.uniforms),n.flatShading=!0,n.side=2,n})}}render(e,t,n){let r=e.shadowMap.enabled;if(e.shadowMap.enabled=!1,ke){let r=this.originalMaterials;this.meshCount=0,t.traverse(this.replaceMaterial),e.render(t,n);for(let e of r)e[0].material=e[1];this.meshCount!==r.size&&r.clear()}else{let r=t.overrideMaterial;t.overrideMaterial=this.material,e.render(t,n),t.overrideMaterial=r}e.shadowMap.enabled=r}disposeMaterials(){if(this.material!==null){let e=this.materials.concat(this.materialsBackSide).concat(this.materialsDoubleSide).concat(this.materialsFlatShaded).concat(this.materialsFlatShadedBackSide).concat(this.materialsFlatShadedDoubleSide);for(let t of e)t.dispose()}}dispose(){this.originalMaterials.clear(),this.disposeMaterials()}static get workaroundEnabled(){return ke}static set workaroundEnabled(e){ke=e}},je=class{setSize(e,t){}},L=-1,R=class extends ie{constructor(e,t=L,n=L,r=1){super(),this.resizable=e,this.baseSize=new D(1,1),this.preferredSize=new D(t,n),this.target=this.preferredSize,this.s=r,this.effectiveSize=new D,this.addEventListener(`change`,()=>this.updateEffectiveSize()),this.updateEffectiveSize()}updateEffectiveSize(){let e=this.baseSize,t=this.preferredSize,n=this.effectiveSize,r=this.scale;t.width===L?t.height===L?n.width=Math.round(e.width*r):n.width=Math.round(t.height*(e.width/Math.max(e.height,1))):n.width=t.width,t.height===L?t.width===L?n.height=Math.round(e.height*r):n.height=Math.round(t.width/Math.max(e.width/Math.max(e.height,1),1)):n.height=t.height}get width(){return this.effectiveSize.width}set width(e){this.preferredWidth=e}get height(){return this.effectiveSize.height}set height(e){this.preferredHeight=e}getWidth(){return this.width}getHeight(){return this.height}get scale(){return this.s}set scale(e){this.s!==e&&(this.s=e,this.preferredSize.setScalar(L),this.dispatchEvent({type:`change`}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}getScale(){return this.scale}setScale(e){this.scale=e}get baseWidth(){return this.baseSize.width}set baseWidth(e){this.baseSize.width!==e&&(this.baseSize.width=e,this.dispatchEvent({type:`change`}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}getBaseWidth(){return this.baseWidth}setBaseWidth(e){this.baseWidth=e}get baseHeight(){return this.baseSize.height}set baseHeight(e){this.baseSize.height!==e&&(this.baseSize.height=e,this.dispatchEvent({type:`change`}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}getBaseHeight(){return this.baseHeight}setBaseHeight(e){this.baseHeight=e}setBaseSize(e,t){(this.baseSize.width!==e||this.baseSize.height!==t)&&(this.baseSize.set(e,t),this.dispatchEvent({type:`change`}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}get preferredWidth(){return this.preferredSize.width}set preferredWidth(e){this.preferredSize.width!==e&&(this.preferredSize.width=e,this.dispatchEvent({type:`change`}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}getPreferredWidth(){return this.preferredWidth}setPreferredWidth(e){this.preferredWidth=e}get preferredHeight(){return this.preferredSize.height}set preferredHeight(e){this.preferredSize.height!==e&&(this.preferredSize.height=e,this.dispatchEvent({type:`change`}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}getPreferredHeight(){return this.preferredHeight}setPreferredHeight(e){this.preferredHeight=e}setPreferredSize(e,t){(this.preferredSize.width!==e||this.preferredSize.height!==t)&&(this.preferredSize.set(e,t),this.dispatchEvent({type:`change`}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}copy(e){this.s=e.scale,this.baseSize.set(e.baseWidth,e.baseHeight),this.preferredSize.set(e.preferredWidth,e.preferredHeight),this.dispatchEvent({type:`change`}),this.resizable.setSize(this.baseSize.width,this.baseSize.height)}static get AUTO_SIZE(){return L}},Me=new class{constructor(e=0){this.nextId=e}getNextId(){return this.nextId++}reset(e=0){return this.nextId=e,this}}(2),Ne=class extends Set{constructor(e,t=Me.getNextId()){super(),this.exclusive=!1,this._layer=t,(this._layer<1||this._layer>31)&&(console.warn(`Layer out of range, resetting to 2`),Me.reset(2),this._layer=Me.getNextId()),e!==void 0&&this.set(e)}get layer(){return this._layer}set layer(e){let t=this._layer;for(let n of this)n.layers.disable(t),n.layers.enable(e);this._layer=e}getLayer(){return this.layer}setLayer(e){this.layer=e}isExclusive(){return this.exclusive}setExclusive(e){this.exclusive=e}clear(){let e=this.layer;for(let t of this)t.layers.disable(e);return super.clear()}set(e){this.clear();for(let t of e)this.add(t);return this}indexOf(e){return this.has(e)?0:-1}add(e){return this.exclusive?e.layers.set(this.layer):e.layers.enable(this.layer),super.add(e)}delete(e){return this.has(e)&&e.layers.disable(this.layer),super.delete(e)}toggle(e){let t;return this.has(e)?(this.delete(e),t=!1):(this.add(e),t=!0),t}setVisible(e){for(let t of this)e?t.layers.enable(0):t.layers.disable(0);return this}},z={SKIP:9,SET:30,ADD:0,ALPHA:1,AVERAGE:2,COLOR:3,COLOR_BURN:4,COLOR_DODGE:5,DARKEN:6,DIFFERENCE:7,DIVIDE:8,DST:9,EXCLUSION:10,HARD_LIGHT:11,HARD_MIX:12,HUE:13,INVERT:14,INVERT_RGB:15,LIGHTEN:16,LINEAR_BURN:17,LINEAR_DODGE:18,LINEAR_LIGHT:19,LUMINOSITY:20,MULTIPLY:21,NEGATION:22,NORMAL:23,OVERLAY:24,PIN_LIGHT:25,REFLECT:26,SATURATION:27,SCREEN:28,SOFT_LIGHT:29,SRC:30,SUBTRACT:31,VIVID_LIGHT:32},Pe=new Map([[z.ADD,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=dst.rgb+src.rgb;return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.ALPHA,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){return mix(dst,src,src.a*opacity);}`],[z.AVERAGE,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=(dst.rgb+src.rgb)*0.5;return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.COLOR,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=RGBToHSL(dst.rgb);vec3 b=RGBToHSL(src.rgb);vec3 c=HSLToRGB(vec3(b.xy,a.z));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.COLOR_BURN,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=dst.rgb,b=src.rgb;vec3 c=mix(step(0.0,b)*(1.0-min(vec3(1.0),(1.0-a)/max(b,1e-9))),vec3(1.0),step(1.0,a));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.COLOR_DODGE,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=dst.rgb,b=src.rgb;vec3 c=step(0.0,a)*mix(min(vec3(1.0),a/max(1.0-b,1e-9)),vec3(1.0),step(1.0,b));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.DARKEN,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=min(dst.rgb,src.rgb);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.DIFFERENCE,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=abs(dst.rgb-src.rgb);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.DIVIDE,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=dst.rgb/max(src.rgb,1e-9);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.DST,null],[z.EXCLUSION,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=dst.rgb+src.rgb-2.0*dst.rgb*src.rgb;return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.HARD_LIGHT,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=min(dst.rgb,1.0);vec3 b=min(src.rgb,1.0);vec3 c=mix(2.0*a*b,1.0-2.0*(1.0-a)*(1.0-b),step(0.5,b));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.HARD_MIX,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=step(1.0,dst.rgb+src.rgb);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.HUE,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=RGBToHSL(dst.rgb);vec3 b=RGBToHSL(src.rgb);vec3 c=HSLToRGB(vec3(b.x,a.yz));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.INVERT,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=max(1.0-src.rgb,0.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.INVERT_RGB,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=src.rgb*max(1.0-dst.rgb,0.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.LIGHTEN,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=max(dst.rgb,src.rgb);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.LINEAR_BURN,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=clamp(src.rgb+dst.rgb-1.0,0.0,1.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.LINEAR_DODGE,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=min(dst.rgb+src.rgb,1.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.LINEAR_LIGHT,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=clamp(2.0*src.rgb+dst.rgb-1.0,0.0,1.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.LUMINOSITY,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=RGBToHSL(dst.rgb);vec3 b=RGBToHSL(src.rgb);vec3 c=HSLToRGB(vec3(a.xy,b.z));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.MULTIPLY,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=dst.rgb*src.rgb;return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.NEGATION,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=max(1.0-abs(1.0-dst.rgb-src.rgb),0.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.NORMAL,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){return mix(dst,src,opacity);}`],[z.OVERLAY,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=2.0*src.rgb*dst.rgb;vec3 b=1.0-2.0*(1.0-src.rgb)*(1.0-dst.rgb);vec3 c=mix(a,b,step(0.5,dst.rgb));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.PIN_LIGHT,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 src2=2.0*src.rgb;vec3 c=mix(mix(src2,dst.rgb,step(0.5*dst.rgb,src.rgb)),max(src2-1.0,vec3(0.0)),step(dst.rgb,src2-1.0));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.REFLECT,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=min(dst.rgb*dst.rgb/max(1.0-src.rgb,1e-9),1.0);vec3 c=mix(a,src.rgb,step(1.0,src.rgb));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.SATURATION,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 a=RGBToHSL(dst.rgb);vec3 b=RGBToHSL(src.rgb);vec3 c=HSLToRGB(vec3(a.x,b.y,a.z));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.SCREEN,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=dst.rgb+src.rgb-min(dst.rgb*src.rgb,1.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.SOFT_LIGHT,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 src2=2.0*src.rgb;vec3 d=dst.rgb+(src2-1.0);vec3 w=step(0.5,src.rgb);vec3 a=dst.rgb-(1.0-src2)*dst.rgb*(1.0-dst.rgb);vec3 b=mix(d*(sqrt(dst.rgb)-dst.rgb),d*dst.rgb*((16.0*dst.rgb-12.0)*dst.rgb+3.0),w*(1.0-step(0.25,dst.rgb)));vec3 c=mix(a,b,w);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.SRC,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){return src;}`],[z.SUBTRACT,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=max(dst.rgb-src.rgb,0.0);return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`],[z.VIVID_LIGHT,`vec4 blend(const in vec4 dst,const in vec4 src,const in float opacity){vec3 c=mix(max(1.0-min((1.0-dst.rgb)/(2.0*src.rgb),1.0),0.0),min(dst.rgb/(2.0*(1.0-src.rgb)),1.0),step(0.5,src.rgb));return mix(dst,vec4(c,max(dst.a,src.a)),opacity);}`]]),Fe=class extends ie{constructor(e,t=1){super(),this._blendFunction=e,this.opacity=new M(t)}getOpacity(){return this.opacity.value}setOpacity(e){this.opacity.value=e}get blendFunction(){return this._blendFunction}set blendFunction(e){this._blendFunction=e,this.dispatchEvent({type:`change`})}getBlendFunction(){return this.blendFunction}setBlendFunction(e){this.blendFunction=e}getShaderCode(){return Pe.get(this.blendFunction)}},Ie=class extends a{constructor({characters:e=` .:,'-^=*+?!|0#X%WM@`,font:t=`Arial`,fontSize:n=54,size:r=1024,cellCount:i=16}={}){super(document.createElement(`canvas`),void 0,d,d);let a=this.image;a.width=a.height=r;let o=a.getContext(`2d`),s=r/i;o.font=`${n}px ${t}`,o.textAlign=`center`,o.textBaseline=`middle`,o.fillStyle=`#ffffff`;for(let t=0,n=e.length;tthis.setChanged()),this._inputColorSpace=r,this._outputColorSpace=``}get inputColorSpace(){return this._inputColorSpace}set inputColorSpace(e){this._inputColorSpace=e,this.setChanged()}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e,this.setChanged()}set mainScene(e){}set mainCamera(e){}getName(){return this.name}setRenderer(e){this.renderer=e}getDefines(){return this.defines}getUniforms(){return this.uniforms}getExtensions(){return this.extensions}getBlendMode(){return this.blendMode}getAttributes(){return this.attributes}setAttributes(e){this.attributes=e,this.setChanged()}getFragmentShader(){return this.fragmentShader}setFragmentShader(e){this.fragmentShader=e,this.setChanged()}getVertexShader(){return this.vertexShader}setVertexShader(e){this.vertexShader=e,this.setChanged()}setChanged(){this.dispatchEvent({type:`change`})}setDepthTexture(e,t=w){}update(e,t,n){}setSize(e,t){}initialize(e,t,n){}dispose(){for(let e of Object.keys(this)){let t=this[e];(t instanceof c||t instanceof oe||t instanceof ne||t instanceof N)&&this[e].dispose()}}},Le=`uniform sampler2D asciiTexture;uniform vec4 cellCount; -#ifdef USE_COLOR -uniform vec3 color; -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 pixelizedUv=cellCount.zw*(0.5+floor(uv*cellCount.xy));vec4 texel=texture(inputBuffer,pixelizedUv);float lum=min(luminance(texel.rgb),1.0); -#ifdef INVERTED -lum=1.0-lum; -#endif -float characterIndex=floor(CHAR_COUNT_MINUS_ONE*lum);vec2 characterPosition=vec2(mod(characterIndex,TEX_CELL_COUNT),floor(characterIndex*INV_TEX_CELL_COUNT));vec2 offset=vec2(characterPosition.x,-characterPosition.y)*INV_TEX_CELL_COUNT;vec2 characterUv=mod(uv*(cellCount.xy*INV_TEX_CELL_COUNT),INV_TEX_CELL_COUNT);characterUv=characterUv-vec2(0.0,INV_TEX_CELL_COUNT)+offset;float asciiCharacter=texture(asciiTexture,characterUv).r; -#ifdef USE_COLOR -outputColor=vec4(color*asciiCharacter,inputColor.a); -#else -outputColor=vec4(texel.rgb*asciiCharacter,inputColor.a); -#endif -}`,Re=class extends B{constructor({asciiTexture:e=new Ie,cellSize:n=16,color:r=null,inverted:i=!1}={}){super(`ASCIIEffect`,Le,{uniforms:new Map([[`asciiTexture`,new M(null)],[`cellCount`,new M(new E)],[`color`,new M(new t)]])}),this._cellSize=-1,this.resolution=new D,this.asciiTexture=e,this.cellSize=n,this.color=r,this.inverted=i}get asciiTexture(){return this.uniforms.get(`asciiTexture`).value}set asciiTexture(e){let t=this.uniforms.get(`asciiTexture`).value;if(this.uniforms.get(`asciiTexture`).value=e,t!==null&&t!==e&&t.dispose(),e!==null){let t=e.cellCount;this.defines.set(`CHAR_COUNT_MINUS_ONE`,(e.characterCount-1).toFixed(1)),this.defines.set(`TEX_CELL_COUNT`,t.toFixed(1)),this.defines.set(`INV_TEX_CELL_COUNT`,(1/t).toFixed(9)),this.setChanged()}}get color(){return this.uniforms.get(`color`).value}set color(e){e!==null&&this.uniforms.get(`color`).value.set(e),this.defines.has(`USE_COLOR`)&&e===null?(this.defines.delete(`USE_COLOR`),this.setChanged()):!this.defines.has(`USE_COLOR`)&&e!==null&&(this.defines.set(`USE_COLOR`,`1`),this.setChanged())}get inverted(){return this.defines.has(`INVERTED`)}set inverted(e){this.inverted!==e&&(e?this.defines.set(`INVERTED`,`1`):this.defines.delete(`INVERTED`),this.setChanged())}get cellSize(){return this._cellSize}set cellSize(e){this._cellSize!==e&&(this._cellSize=e,this.updateCellCount())}updateCellCount(){let e=this.uniforms.get(`cellCount`).value,t=this.resolution;e.x=t.width/this.cellSize,e.y=t.height/this.cellSize,e.z=1/e.x,e.w=1/e.y}setSize(e,t){this.resolution.set(e,t),this.updateCellCount()}dispose(){this.asciiTexture!==null&&this.asciiTexture.dispose(),super.dispose()}},V={VERY_SMALL:0,SMALL:1,MEDIUM:2,LARGE:3,VERY_LARGE:4,HUGE:5},ze=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec4 sum=texture2D(inputBuffer,vUv0);sum+=texture2D(inputBuffer,vUv1);sum+=texture2D(inputBuffer,vUv2);sum+=texture2D(inputBuffer,vUv3);gl_FragColor=sum*0.25; -#include -}`,Be=`uniform vec4 texelSize;uniform float kernel;uniform float scale;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vec2 dUv=(texelSize.xy*vec2(kernel)+texelSize.zw)*scale;vUv0=vec2(uv.x-dUv.x,uv.y+dUv.y);vUv1=vec2(uv.x+dUv.x,uv.y+dUv.y);vUv2=vec2(uv.x+dUv.x,uv.y-dUv.y);vUv3=vec2(uv.x-dUv.x,uv.y-dUv.y);gl_Position=vec4(position.xy,1.0,1.0);}`,Ve=[new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10])],He=class extends j{constructor(e=new E){super({name:`KawaseBlurMaterial`,uniforms:{inputBuffer:new M(null),texelSize:new M(new E),scale:new M(1),kernel:new M(0)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:ze,vertexShader:Be}),this.setTexelSize(e.x,e.y),this.kernelSize=V.MEDIUM}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.inputBuffer=e}get kernelSequence(){return Ve[this.kernelSize]}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(){return this.uniforms.scale.value}setScale(e){this.uniforms.scale.value=e}getKernel(){return null}get kernel(){return this.uniforms.kernel.value}set kernel(e){this.uniforms.kernel.value=e}setKernel(e){this.kernel=e}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t,e*.5,t*.5)}setSize(e,t){let n=1/e,r=1/t;this.uniforms.texelSize.value.set(n,r,n*.5,r*.5)}},H=class extends N{constructor({kernelSize:e=V.MEDIUM,resolutionScale:t=.5,width:n=R.AUTO_SIZE,height:r=R.AUTO_SIZE,resolutionX:i=n,resolutionY:a=r}={}){super(`KawaseBlurPass`),this.renderTargetA=new c(1,1,{depthBuffer:!1}),this.renderTargetA.texture.name=`Blur.Target.A`,this.renderTargetB=this.renderTargetA.clone(),this.renderTargetB.texture.name=`Blur.Target.B`;let o=this.resolution=new R(this,i,a,t);o.addEventListener(`change`,e=>this.setSize(o.baseWidth,o.baseHeight)),this._blurMaterial=new He,this._blurMaterial.kernelSize=e,this.copyMaterial=new he}getResolution(){return this.resolution}get blurMaterial(){return this._blurMaterial}set blurMaterial(e){this._blurMaterial=e}get dithering(){return this.copyMaterial.dithering}set dithering(e){this.copyMaterial.dithering=e}get kernelSize(){return this.blurMaterial.kernelSize}set kernelSize(e){this.blurMaterial.kernelSize=e}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get scale(){return this.blurMaterial.scale}set scale(e){this.blurMaterial.scale=e}getScale(){return this.blurMaterial.scale}setScale(e){this.blurMaterial.scale=e}getKernelSize(){return this.kernelSize}setKernelSize(e){this.kernelSize=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,n,r,i){let a=this.scene,o=this.camera,s=this.renderTargetA,c=this.renderTargetB,l=this.blurMaterial,u=l.kernelSequence,d=t;this.fullscreenMaterial=l;for(let t=0,n=u.length;t -#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#ifdef RANGE -uniform vec2 range; -#elif defined(THRESHOLD) -uniform float threshold;uniform float smoothing; -#endif -varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);float l=luminance(texel.rgb);float mask=1.0; -#ifdef RANGE -float low=step(range.x,l);float high=step(l,range.y);mask=low*high; -#elif defined(THRESHOLD) -mask=smoothstep(threshold,threshold+smoothing,l); -#endif -#ifdef COLOR -gl_FragColor=texel*mask; -#else -gl_FragColor=vec4(l*mask); -#endif -}`,We=class extends j{constructor(e=!1,t=null){super({name:`LuminanceMaterial`,defines:{THREE_REVISION:o.replace(/\D+/g,``)},uniforms:{inputBuffer:new M(null),threshold:new M(0),smoothing:new M(1),range:new M(null)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:Ue,vertexShader:P}),this.colorOutput=e,this.luminanceRange=t}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get threshold(){return this.uniforms.threshold.value}set threshold(e){this.smoothing>0||e>0?this.defines.THRESHOLD=`1`:delete this.defines.THRESHOLD,this.uniforms.threshold.value=e}getThreshold(){return this.threshold}setThreshold(e){this.threshold=e}get smoothing(){return this.uniforms.smoothing.value}set smoothing(e){this.threshold>0||e>0?this.defines.THRESHOLD=`1`:delete this.defines.THRESHOLD,this.uniforms.smoothing.value=e}getSmoothingFactor(){return this.smoothing}setSmoothingFactor(e){this.smoothing=e}get useThreshold(){return this.threshold>0||this.smoothing>0}set useThreshold(e){}get colorOutput(){return this.defines.COLOR!==void 0}set colorOutput(e){e?this.defines.COLOR=`1`:delete this.defines.COLOR,this.needsUpdate=!0}isColorOutputEnabled(e){return this.colorOutput}setColorOutputEnabled(e){this.colorOutput=e}get useRange(){return this.luminanceRange!==null}set useRange(e){this.luminanceRange=null}get luminanceRange(){return this.uniforms.range.value}set luminanceRange(e){e===null?delete this.defines.RANGE:this.defines.RANGE=`1`,this.uniforms.range.value=e,this.needsUpdate=!0}getLuminanceRange(){return this.luminanceRange}setLuminanceRange(e){this.luminanceRange=e}},Ge=class extends N{constructor({renderTarget:e,luminanceRange:t,colorOutput:n,resolutionScale:r=1,width:i=R.AUTO_SIZE,height:a=R.AUTO_SIZE,resolutionX:o=i,resolutionY:s=a}={}){super(`LuminancePass`),this.fullscreenMaterial=new We(n,t),this.needsSwap=!1,this.renderTarget=e,this.renderTarget===void 0&&(this.renderTarget=new c(1,1,{depthBuffer:!1}),this.renderTarget.texture.name=`LuminancePass.Target`);let l=this.resolution=new R(this,o,s,r);l.addEventListener(`change`,e=>this.setSize(l.baseWidth,l.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}render(e,t,n,r,i){let a=this.fullscreenMaterial;a.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){let n=this.resolution;n.setBaseSize(e,t),this.renderTarget.setSize(n.width,n.height)}initialize(e,t,n){n!==void 0&&n!==1009&&(this.renderTarget.texture.type=n,this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH=`1`)}},Ke=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#define WEIGHT_INNER 0.125 -#define WEIGHT_OUTER 0.05556 -varying vec2 vUv;varying vec2 vUv00;varying vec2 vUv01;varying vec2 vUv02;varying vec2 vUv03;varying vec2 vUv04;varying vec2 vUv05;varying vec2 vUv06;varying vec2 vUv07;varying vec2 vUv08;varying vec2 vUv09;varying vec2 vUv10;varying vec2 vUv11;float clampToBorder(const in vec2 uv){return float(uv.s>=0.0&&uv.s<=1.0&&uv.t>=0.0&&uv.t<=1.0);}void main(){vec4 c=vec4(0.0);vec4 w=WEIGHT_INNER*vec4(clampToBorder(vUv00),clampToBorder(vUv01),clampToBorder(vUv02),clampToBorder(vUv03));c+=w.x*texture2D(inputBuffer,vUv00);c+=w.y*texture2D(inputBuffer,vUv01);c+=w.z*texture2D(inputBuffer,vUv02);c+=w.w*texture2D(inputBuffer,vUv03);w=WEIGHT_OUTER*vec4(clampToBorder(vUv04),clampToBorder(vUv05),clampToBorder(vUv06),clampToBorder(vUv07));c+=w.x*texture2D(inputBuffer,vUv04);c+=w.y*texture2D(inputBuffer,vUv05);c+=w.z*texture2D(inputBuffer,vUv06);c+=w.w*texture2D(inputBuffer,vUv07);w=WEIGHT_OUTER*vec4(clampToBorder(vUv08),clampToBorder(vUv09),clampToBorder(vUv10),clampToBorder(vUv11));c+=w.x*texture2D(inputBuffer,vUv08);c+=w.y*texture2D(inputBuffer,vUv09);c+=w.z*texture2D(inputBuffer,vUv10);c+=w.w*texture2D(inputBuffer,vUv11);c+=WEIGHT_OUTER*texture2D(inputBuffer,vUv);gl_FragColor=c; -#include -}`,qe=`uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv00;varying vec2 vUv01;varying vec2 vUv02;varying vec2 vUv03;varying vec2 vUv04;varying vec2 vUv05;varying vec2 vUv06;varying vec2 vUv07;varying vec2 vUv08;varying vec2 vUv09;varying vec2 vUv10;varying vec2 vUv11;void main(){vUv=position.xy*0.5+0.5;vUv00=vUv+texelSize*vec2(-1.0,1.0);vUv01=vUv+texelSize*vec2(1.0,1.0);vUv02=vUv+texelSize*vec2(-1.0,-1.0);vUv03=vUv+texelSize*vec2(1.0,-1.0);vUv04=vUv+texelSize*vec2(-2.0,2.0);vUv05=vUv+texelSize*vec2(0.0,2.0);vUv06=vUv+texelSize*vec2(2.0,2.0);vUv07=vUv+texelSize*vec2(-2.0,0.0);vUv08=vUv+texelSize*vec2(2.0,0.0);vUv09=vUv+texelSize*vec2(-2.0,-2.0);vUv10=vUv+texelSize*vec2(0.0,-2.0);vUv11=vUv+texelSize*vec2(2.0,-2.0);gl_Position=vec4(position.xy,1.0,1.0);}`,Je=class extends j{constructor(){super({name:`DownsamplingMaterial`,uniforms:{inputBuffer:new M(null),texelSize:new M(new D)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:Ke,vertexShader:qe})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},Ye=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer;uniform mediump sampler2D supportBuffer; -#else -uniform lowp sampler2D inputBuffer;uniform lowp sampler2D supportBuffer; -#endif -uniform float radius;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;varying vec2 vUv6;varying vec2 vUv7;void main(){vec4 c=vec4(0.0);c+=texture2D(inputBuffer,vUv0)*0.0625;c+=texture2D(inputBuffer,vUv1)*0.125;c+=texture2D(inputBuffer,vUv2)*0.0625;c+=texture2D(inputBuffer,vUv3)*0.125;c+=texture2D(inputBuffer,vUv)*0.25;c+=texture2D(inputBuffer,vUv4)*0.125;c+=texture2D(inputBuffer,vUv5)*0.0625;c+=texture2D(inputBuffer,vUv6)*0.125;c+=texture2D(inputBuffer,vUv7)*0.0625;vec4 baseColor=texture2D(supportBuffer,vUv);gl_FragColor=mix(baseColor,c,radius); -#include -}`,Xe=`uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;varying vec2 vUv6;varying vec2 vUv7;void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,1.0);vUv1=vUv+texelSize*vec2(0.0,1.0);vUv2=vUv+texelSize*vec2(1.0,1.0);vUv3=vUv+texelSize*vec2(-1.0,0.0);vUv4=vUv+texelSize*vec2(1.0,0.0);vUv5=vUv+texelSize*vec2(-1.0,-1.0);vUv6=vUv+texelSize*vec2(0.0,-1.0);vUv7=vUv+texelSize*vec2(1.0,-1.0);gl_Position=vec4(position.xy,1.0,1.0);}`,Ze=class extends j{constructor(){super({name:`UpsamplingMaterial`,uniforms:{inputBuffer:new M(null),supportBuffer:new M(null),texelSize:new M(new D),radius:new M(.85)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:Ye,vertexShader:Xe})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}set supportBuffer(e){this.uniforms.supportBuffer.value=e}get radius(){return this.uniforms.radius.value}set radius(e){this.uniforms.radius.value=e}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},Qe=class extends N{constructor(){super(`MipmapBlurPass`),this.needsSwap=!1,this.renderTarget=new c(1,1,{depthBuffer:!1}),this.renderTarget.texture.name=`Upsampling.Mipmap0`,this.downsamplingMipmaps=[],this.upsamplingMipmaps=[],this.downsamplingMaterial=new Je,this.upsamplingMaterial=new Ze,this.resolution=new D}get texture(){return this.renderTarget.texture}get levels(){return this.downsamplingMipmaps.length}set levels(e){if(this.levels!==e){let t=this.renderTarget;this.dispose(),this.downsamplingMipmaps=[],this.upsamplingMipmaps=[];for(let n=0;n=0;--t){let n=u[t];c.setSize(d.width,d.height),c.inputBuffer=d.texture,c.supportBuffer=l[t].texture,e.setRenderTarget(n),e.render(a,o),d=n}}setSize(e,t){let n=this.resolution;n.set(e,t);let r=n.width,i=n.height;for(let e=0,t=this.downsamplingMipmaps.length;ethis.setSize(m.baseWidth,m.baseHeight))}get texture(){return this.mipmapBlurPass.enabled?this.mipmapBlurPass.texture:this.renderTarget.texture}getTexture(){return this.texture}getResolution(){return this.resolution}getBlurPass(){return this.blurPass}getLuminancePass(){return this.luminancePass}get luminanceMaterial(){return this.luminancePass.fullscreenMaterial}getLuminanceMaterial(){return this.luminancePass.fullscreenMaterial}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get dithering(){return this.blurPass.dithering}set dithering(e){this.blurPass.dithering=e}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(e){this.blurPass.kernelSize=e}get distinction(){return console.warn(this.name,`distinction was removed`),1}set distinction(e){console.warn(this.name,`distinction was removed`)}get intensity(){return this.uniforms.get(`intensity`).value}set intensity(e){this.uniforms.get(`intensity`).value=e}getIntensity(){return this.intensity}setIntensity(e){this.intensity=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}update(e,t,n){let r=this.renderTarget,i=this.luminancePass;i.enabled?(i.render(e,t),this.mipmapBlurPass.enabled?this.mipmapBlurPass.render(e,i.renderTarget):this.blurPass.render(e,i.renderTarget,r)):this.mipmapBlurPass.enabled?this.mipmapBlurPass.render(e,t):this.blurPass.render(e,t,r)}setSize(e,t){let n=this.resolution;n.setBaseSize(e,t),this.renderTarget.setSize(n.width,n.height),this.blurPass.resolution.copy(n),this.luminancePass.setSize(e,t),this.mipmapBlurPass.setSize(e,t)}initialize(e,t,n){this.blurPass.initialize(e,t,n),this.luminancePass.initialize(e,t,n),this.mipmapBlurPass.initialize(e,t,n),n!==void 0&&(this.renderTarget.texture.type=n,e!==null&&e.outputColorSpace===`srgb`&&(this.renderTarget.texture.colorSpace=C))}},tt=`uniform float focus;uniform float dof;uniform float aperture;uniform float maxBlur;void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){vec2 aspectCorrection=vec2(1.0,aspect); -#ifdef PERSPECTIVE_CAMERA -float viewZ=perspectiveDepthToViewZ(depth,cameraNear,cameraFar);float linearDepth=viewZToOrthographicDepth(viewZ,cameraNear,cameraFar); -#else -float linearDepth=depth; -#endif -float focusNear=clamp(focus-dof,0.0,1.0);float focusFar=clamp(focus+dof,0.0,1.0);float low=step(linearDepth,focusNear);float high=step(focusFar,linearDepth);float factor=(linearDepth-focusNear)*low+(linearDepth-focusFar)*high;vec2 dofBlur=vec2(clamp(factor*aperture,-maxBlur,maxBlur));vec2 dofblur9=dofBlur*0.9;vec2 dofblur7=dofBlur*0.7;vec2 dofblur4=dofBlur*0.4;vec4 color=inputColor;color+=texture2D(inputBuffer,uv+(vec2(0.0,0.4)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(0.15,0.37)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(0.29,0.29)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(-0.37,0.15)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(0.40,0.0)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(0.37,-0.15)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(0.29,-0.29)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(-0.15,-0.37)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(0.0,-0.4)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(-0.15,0.37)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(-0.29,0.29)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(0.37,0.15)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(-0.4,0.0)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(-0.37,-0.15)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(-0.29,-0.29)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(0.15,-0.37)*aspectCorrection)*dofBlur);color+=texture2D(inputBuffer,uv+(vec2(0.15,0.37)*aspectCorrection)*dofblur9);color+=texture2D(inputBuffer,uv+(vec2(-0.37,0.15)*aspectCorrection)*dofblur9);color+=texture2D(inputBuffer,uv+(vec2(0.37,-0.15)*aspectCorrection)*dofblur9);color+=texture2D(inputBuffer,uv+(vec2(-0.15,-0.37)*aspectCorrection)*dofblur9);color+=texture2D(inputBuffer,uv+(vec2(-0.15,0.37)*aspectCorrection)*dofblur9);color+=texture2D(inputBuffer,uv+(vec2(0.37,0.15)*aspectCorrection)*dofblur9);color+=texture2D(inputBuffer,uv+(vec2(-0.37,-0.15)*aspectCorrection)*dofblur9);color+=texture2D(inputBuffer,uv+(vec2(0.15,-0.37)*aspectCorrection)*dofblur9);color+=texture2D(inputBuffer,uv+(vec2(0.29,0.29)*aspectCorrection)*dofblur7);color+=texture2D(inputBuffer,uv+(vec2(0.40,0.0)*aspectCorrection)*dofblur7);color+=texture2D(inputBuffer,uv+(vec2(0.29,-0.29)*aspectCorrection)*dofblur7);color+=texture2D(inputBuffer,uv+(vec2(0.0,-0.4)*aspectCorrection)*dofblur7);color+=texture2D(inputBuffer,uv+(vec2(-0.29,0.29)*aspectCorrection)*dofblur7);color+=texture2D(inputBuffer,uv+(vec2(-0.4,0.0)*aspectCorrection)*dofblur7);color+=texture2D(inputBuffer,uv+(vec2(-0.29,-0.29)*aspectCorrection)*dofblur7);color+=texture2D(inputBuffer,uv+(vec2(0.0,0.4)*aspectCorrection)*dofblur7);color+=texture2D(inputBuffer,uv+(vec2(0.29,0.29)*aspectCorrection)*dofblur4);color+=texture2D(inputBuffer,uv+(vec2(0.4,0.0)*aspectCorrection)*dofblur4);color+=texture2D(inputBuffer,uv+(vec2(0.29,-0.29)*aspectCorrection)*dofblur4);color+=texture2D(inputBuffer,uv+(vec2(0.0,-0.4)*aspectCorrection)*dofblur4);color+=texture2D(inputBuffer,uv+(vec2(-0.29,0.29)*aspectCorrection)*dofblur4);color+=texture2D(inputBuffer,uv+(vec2(-0.4,0.0)*aspectCorrection)*dofblur4);color+=texture2D(inputBuffer,uv+(vec2(-0.29,-0.29)*aspectCorrection)*dofblur4);color+=texture2D(inputBuffer,uv+(vec2(0.0,0.4)*aspectCorrection)*dofblur4);outputColor=color/41.0;}`,nt=class extends B{constructor({blendFunction:e,focus:t=.5,dof:n=.02,aperture:r=.015,maxBlur:i=1}={}){super(`BokehEffect`,tt,{blendFunction:e,attributes:F.CONVOLUTION|F.DEPTH,uniforms:new Map([[`focus`,new M(t)],[`dof`,new M(n)],[`aperture`,new M(r)],[`maxBlur`,new M(i)]])})}},rt=`uniform float brightness;uniform float contrast;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=inputColor.rgb+vec3(brightness-0.5);if(contrast>0.0){color/=vec3(1.0-contrast);}else{color*=vec3(1.0+contrast);}outputColor=vec4(color+vec3(0.5),inputColor.a);}`,it=class extends B{constructor({blendFunction:e=z.SRC,brightness:t=0,contrast:n=0}={}){super(`BrightnessContrastEffect`,rt,{blendFunction:e,uniforms:new Map([[`brightness`,new M(t)],[`contrast`,new M(n)]])}),this.inputColorSpace=C}get brightness(){return this.uniforms.get(`brightness`).value}set brightness(e){this.uniforms.get(`brightness`).value=e}getBrightness(){return this.brightness}setBrightness(e){this.brightness=e}get contrast(){return this.uniforms.get(`contrast`).value}set contrast(e){this.uniforms.get(`contrast`).value=e}getContrast(){return this.contrast}setContrast(e){this.contrast=e}},at=`void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=vec4(vec3(average(inputColor.rgb)),inputColor.a);}`,ot=class extends B{constructor(e){super(`ColorAverageEffect`,at,{blendFunction:e})}},st=`uniform float factor;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=vec4(floor(inputColor.rgb*factor+0.5)/factor,inputColor.a);}`,ct=class extends B{constructor({blendFunction:e,bits:t=16}={}){super(`ColorDepthEffect`,st,{blendFunction:e,uniforms:new Map([[`factor`,new M(1)]])}),this.bits=0,this.bitDepth=t}get bitDepth(){return this.bits}set bitDepth(e){this.bits=e,this.uniforms.get(`factor`).value=2**(e/3)}getBitDepth(){return this.bitDepth}setBitDepth(e){this.bitDepth=e}},lt=`#ifdef RADIAL_MODULATION -uniform float modulationOffset; -#endif -varying float vActive;varying vec2 vUvR;varying vec2 vUvB;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 ra=inputColor.ra;vec2 ba=inputColor.ba; -#ifdef RADIAL_MODULATION -const vec2 center=vec2(0.5);float d=distance(uv,center)*2.0;d=max(d-modulationOffset,0.0);if(vActive>0.0&&d>0.0){ra=texture2D(inputBuffer,mix(uv,vUvR,d)).ra;ba=texture2D(inputBuffer,mix(uv,vUvB,d)).ba;} -#else -if(vActive>0.0){ra=texture2D(inputBuffer,vUvR).ra;ba=texture2D(inputBuffer,vUvB).ba;} -#endif -outputColor=vec4(ra.x,inputColor.g,ba.x,max(max(ra.y,ba.y),inputColor.a));}`,ut=`uniform vec2 offset;varying float vActive;varying vec2 vUvR;varying vec2 vUvB;void mainSupport(const in vec2 uv){vec2 shift=offset*vec2(1.0,aspect);vActive=(shift.x!=0.0||shift.y!=0.0)?1.0:0.0;vUvR=uv+shift;vUvB=uv-shift;}`,dt=class extends B{constructor({offset:e=new D(.001,5e-4),radialModulation:t=!1,modulationOffset:n=.15}={}){super(`ChromaticAberrationEffect`,lt,{vertexShader:ut,attributes:F.CONVOLUTION,uniforms:new Map([[`offset`,new M(e)],[`modulationOffset`,new M(n)]])}),this.radialModulation=t}get offset(){return this.uniforms.get(`offset`).value}set offset(e){this.uniforms.get(`offset`).value=e}get radialModulation(){return this.defines.has(`RADIAL_MODULATION`)}set radialModulation(e){e?this.defines.set(`RADIAL_MODULATION`,`1`):this.defines.delete(`RADIAL_MODULATION`),this.setChanged()}get modulationOffset(){return this.uniforms.get(`modulationOffset`).value}set modulationOffset(e){this.uniforms.get(`modulationOffset`).value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}},ft=`void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){ -#ifdef INVERTED -vec3 color=vec3(1.0-depth); -#else -vec3 color=vec3(depth); -#endif -outputColor=vec4(color,inputColor.a);}`,pt=class extends B{constructor({blendFunction:e=z.SRC,inverted:t=!1}={}){super(`DepthEffect`,ft,{blendFunction:e,attributes:F.DEPTH}),this.inverted=t}get inverted(){return this.defines.has(`INVERTED`)}set inverted(e){this.inverted!==e&&(e?this.defines.set(`INVERTED`,`1`):this.defines.delete(`INVERTED`),this.setChanged())}isInverted(){return this.inverted}setInverted(e){this.inverted=e}},U={RED:0,GREEN:1,BLUE:2,ALPHA:3},mt={DISCARD:0,MULTIPLY:1,MULTIPLY_RGB_SET_ALPHA:2,MULTIPLY_RGB:3},ht=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#if PASS == 1 -uniform vec4 kernel64[32]; -#else -uniform vec4 kernel16[8]; -#endif -uniform lowp sampler2D cocBuffer;uniform vec2 texelSize;uniform float scale;varying vec2 vUv;void main(){ -#ifdef FOREGROUND -vec2 cocNearFar=texture2D(cocBuffer,vUv).rg*scale;float coc=cocNearFar.x; -#else -float coc=texture2D(cocBuffer,vUv).g*scale; -#endif -if(coc==0.0){gl_FragColor=texture2D(inputBuffer,vUv);}else{ -#ifdef FOREGROUND -vec2 step=texelSize*max(cocNearFar.x,cocNearFar.y); -#else -vec2 step=texelSize*coc; -#endif -#if PASS == 1 -vec4 acc=vec4(0.0);for(int i=0;i<32;++i){vec4 kernel=kernel64[i];vec2 uv=step*kernel.xy+vUv;acc+=texture2D(inputBuffer,uv);uv=step*kernel.zw+vUv;acc+=texture2D(inputBuffer,uv);}gl_FragColor=acc/64.0; -#else -vec4 maxValue=texture2D(inputBuffer,vUv);for(int i=0;i<8;++i){vec4 kernel=kernel16[i];vec2 uv=step*kernel.xy+vUv;maxValue=max(texture2D(inputBuffer,uv),maxValue);uv=step*kernel.zw+vUv;maxValue=max(texture2D(inputBuffer,uv),maxValue);}gl_FragColor=maxValue; -#endif -}}`,gt=class extends j{constructor(e=!1,t=!1){super({name:`BokehMaterial`,defines:{PASS:e?`2`:`1`},uniforms:{inputBuffer:new M(null),cocBuffer:new M(null),texelSize:new M(new D),kernel64:new M(null),kernel16:new M(null),scale:new M(1)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:ht,vertexShader:P}),t&&(this.defines.FOREGROUND=`1`),this.generateKernel()}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set cocBuffer(e){this.uniforms.cocBuffer.value=e}setCoCBuffer(e){this.uniforms.cocBuffer.value=e}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(e){return this.scale}setScale(e){this.scale=e}generateKernel(){let e=new Float64Array(128),t=new Float64Array(32),n=0,r=0;for(let i=0,a=Math.sqrt(80);i<80;++i){let o=i*2.39996323,s=Math.sqrt(i)/a,c=s*Math.cos(o),l=s*Math.sin(o);i%5==0?(t[r++]=c,t[r++]=l):(e[n++]=c,e[n++]=l)}this.uniforms.kernel64.value=e,this.uniforms.kernel16.value=t}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t)}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},_t=`#include -#include -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -uniform mat4 projectionMatrix;uniform mat4 projectionMatrixInverse;uniform float cameraNear;uniform float cameraFar;uniform float focusDistance;uniform float focusRange;varying vec2 vUv;float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -float depth=unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -float depth=texture2D(depthBuffer,uv).r; -#endif -#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) -float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d; -#elif defined(USE_REVERSED_DEPTH_BUFFER) -depth=1.0-depth; -#endif -return depth;} -#ifdef PERSPECTIVE_CAMERA -#define getViewZ(depth) perspectiveDepthToViewZ(depth, cameraNear, cameraFar) -#else -#define getViewZ(depth) orthographicDepthToViewZ(depth, cameraNear, cameraFar) -#endif -vec3 getViewPosition(const in vec2 screenPosition,const in float depth,const in float viewZ){vec4 clipPosition=vec4(vec3(screenPosition,depth)*2.0-1.0,1.0);float clipW=projectionMatrix[2][3]*viewZ+projectionMatrix[3][3];clipPosition*=clipW;return(projectionMatrixInverse*clipPosition).xyz;}vec3 getViewPosition(const in vec2 screenPosition,const in float depth){return getViewPosition(screenPosition,depth,getViewZ(depth));} -#define getDistance(viewPosition) length(viewPosition) -void main(){float depth=readDepth(vUv);vec3 viewPosition=getViewPosition(vUv,depth);float distance=getDistance(viewPosition);float signedDistance=distance-focusDistance;float magnitude=smoothstep(0.0,focusRange,abs(signedDistance));gl_FragColor.rg=magnitude*vec2(step(signedDistance,0.0),step(0.0,signedDistance));}`,vt=class extends j{constructor(e=null){super({name:`CircleOfConfusionMaterial`,defines:{DEPTH_PACKING:`0`},uniforms:{depthBuffer:new M(null),projectionMatrix:new M(null),projectionMatrixInverse:new M(null),cameraNear:new M(.3),cameraFar:new M(1e3),focusDistance:new M(0),focusRange:new M(0)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:_t,vertexShader:P}),this.uniforms.focalLength=this.uniforms.focusRange,e!==null&&this.copyCameraSettings(e)}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=w){this.depthBuffer=e,this.depthPacking=t}get focusDistance(){return this.uniforms.focusDistance.value}set focusDistance(e){this.uniforms.focusDistance.value=e}get worldFocusDistance(){return this.focusDistance}set worldFocusDistance(e){this.focusDistance=e}getFocusDistance(e){this.uniforms.focusDistance.value=e}setFocusDistance(e){this.uniforms.focusDistance.value=e}get focalLength(){return this.focusRange}set focalLength(e){this.focusRange=e}get focusRange(){return this.uniforms.focusRange.value}set focusRange(e){this.uniforms.focusRange.value=e}get worldFocusRange(){return this.focusRange}set worldFocusRange(e){this.focusRange=e}getFocalLength(e){return this.focusRange}setFocalLength(e){this.focusRange=e}adoptCameraSettings(e){this.copyCameraSettings(e)}copyCameraSettings(e){this.uniforms.projectionMatrix.value=e.projectionMatrix,this.uniforms.projectionMatrixInverse.value=e.projectionMatrixInverse,this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far;let t=this.defines.PERSPECTIVE_CAMERA!==void 0;e instanceof T?t||(this.defines.PERSPECTIVE_CAMERA=!0,this.needsUpdate=!0):t&&(delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},yt=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#ifdef MASK_PRECISION_HIGH -uniform mediump sampler2D maskTexture; -#else -uniform lowp sampler2D maskTexture; -#endif -#if MASK_FUNCTION != 0 -uniform float strength; -#endif -varying vec2 vUv;void main(){ -#if COLOR_CHANNEL == 0 -float mask=texture2D(maskTexture,vUv).r; -#elif COLOR_CHANNEL == 1 -float mask=texture2D(maskTexture,vUv).g; -#elif COLOR_CHANNEL == 2 -float mask=texture2D(maskTexture,vUv).b; -#else -float mask=texture2D(maskTexture,vUv).a; -#endif -#if MASK_FUNCTION == 0 -#ifdef INVERTED -mask=(mask>0.0)?0.0:1.0; -#else -mask=(mask>0.0)?1.0:0.0; -#endif -#else -mask=clamp(mask*strength,0.0,1.0); -#ifdef INVERTED -mask=1.0-mask; -#endif -#endif -#if MASK_FUNCTION == 3 -vec4 texel=texture2D(inputBuffer,vUv);gl_FragColor=vec4(mask*texel.rgb,texel.a); -#elif MASK_FUNCTION == 2 -gl_FragColor=vec4(mask*texture2D(inputBuffer,vUv).rgb,mask); -#else -gl_FragColor=mask*texture2D(inputBuffer,vUv); -#endif -}`,bt=class extends j{constructor(e=null){super({name:`MaskMaterial`,uniforms:{maskTexture:new M(e),inputBuffer:new M(null),strength:new M(1)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:yt,vertexShader:P}),this.colorChannel=U.RED,this.maskFunction=mt.DISCARD}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set maskTexture(e){this.uniforms.maskTexture.value=e,delete this.defines.MASK_PRECISION_HIGH,e.type!==1009&&(this.defines.MASK_PRECISION_HIGH=`1`),this.needsUpdate=!0}setMaskTexture(e){this.maskTexture=e}set colorChannel(e){this.defines.COLOR_CHANNEL=e.toFixed(0),this.needsUpdate=!0}setColorChannel(e){this.colorChannel=e}set maskFunction(e){this.defines.MASK_FUNCTION=e.toFixed(0),this.needsUpdate=!0}setMaskFunction(e){this.maskFunction=e}get inverted(){return this.defines.INVERTED!==void 0}set inverted(e){this.inverted&&!e?delete this.defines.INVERTED:e&&(this.defines.INVERTED=`1`),this.needsUpdate=!0}isInverted(){return this.inverted}setInverted(e){this.inverted=e}get strength(){return this.uniforms.strength.value}set strength(e){this.uniforms.strength.value=e}getStrength(){return this.strength}setStrength(e){this.strength=e}},W=class extends N{constructor(e,t=`inputBuffer`){super(`ShaderPass`),this.fullscreenMaterial=e,this.input=t}setInput(e){this.input=e}render(e,t,n,r,i){let a=this.fullscreenMaterial.uniforms;t!==null&&a!==void 0&&a[this.input]!==void 0&&(a[this.input].value=t.texture),e.setRenderTarget(this.renderToScreen?null:n),e.render(this.scene,this.camera)}initialize(e,t,n){n!==void 0&&n!==1009&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH=`1`)}},xt=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D nearColorBuffer;uniform mediump sampler2D farColorBuffer; -#else -uniform lowp sampler2D nearColorBuffer;uniform lowp sampler2D farColorBuffer; -#endif -#if MASK_FUNCTION != 1 && MASK_FUNCTION != 2 -uniform lowp sampler2D farCoCBuffer; -#endif -uniform lowp sampler2D nearCoCBuffer;uniform float scale;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 colorNear=texture2D(nearColorBuffer,uv);vec4 colorFar=texture2D(farColorBuffer,uv); -#if MASK_FUNCTION == 1 || MASK_FUNCTION == 2 -vec2 cocNearFar=vec2(texture2D(nearCoCBuffer,uv).r,colorFar.a);cocNearFar.x=min(cocNearFar.x*scale,1.0); -#else -vec2 cocNearFar=vec2(texture2D(nearCoCBuffer,uv).r,texture2D(farCoCBuffer,uv).g);cocNearFar=min(cocNearFar*scale,1.0);colorFar.a*=cocNearFar.y; -#endif -vec4 result=inputColor*(1.0-cocNearFar.y)+colorFar;result=mix(result,colorNear,cocNearFar.x);outputColor=result;}`,St=new n,Ct=class extends B{constructor(e,{blendFunction:t,worldFocusDistance:n,worldFocusRange:r,focalLength:i,focusDistance:a=n||3,focusRange:o=r||i||2,bokehScale:s=1,resolutionScale:l=.5,width:u,height:d,resolutionX:f=u||R.AUTO_SIZE,resolutionY:p=d||R.AUTO_SIZE}={}){super(`DepthOfFieldEffect`,xt,{blendFunction:t,attributes:F.DEPTH,uniforms:new Map([[`nearColorBuffer`,new M(null)],[`farColorBuffer`,new M(null)],[`nearCoCBuffer`,new M(null)],[`farCoCBuffer`,new M(null)],[`scale`,new M(1)]])}),this.camera=e,this.renderTarget=new c(1,1,{depthBuffer:!1}),this.renderTarget.texture.name=`DoF.Intermediate`,this.renderTargetMasked=this.renderTarget.clone(),this.renderTargetMasked.texture.name=`DoF.Masked.Far`,this.renderTargetNear=this.renderTarget.clone(),this.renderTargetNear.texture.name=`DoF.Bokeh.Near`,this.uniforms.get(`nearColorBuffer`).value=this.renderTargetNear.texture,this.renderTargetFar=this.renderTarget.clone(),this.renderTargetFar.texture.name=`DoF.Bokeh.Far`,this.uniforms.get(`farColorBuffer`).value=this.renderTargetFar.texture,this.renderTargetCoC=this.renderTarget.clone(),this.renderTargetCoC.texture.name=`DoF.CoC`,this.uniforms.get(`farCoCBuffer`).value=this.renderTargetCoC.texture,this.renderTargetCoCBlurred=this.renderTargetCoC.clone(),this.renderTargetCoCBlurred.texture.name=`DoF.CoC.Blurred`,this.uniforms.get(`nearCoCBuffer`).value=this.renderTargetCoCBlurred.texture,this.cocPass=new W(new vt(e));let m=this.cocMaterial;m.focusDistance=a,m.focusRange=o,this.blurPass=new H({resolutionScale:l,resolutionX:f,resolutionY:p,kernelSize:V.MEDIUM}),this.maskPass=new W(new bt(this.renderTargetCoC.texture));let h=this.maskPass.fullscreenMaterial;h.colorChannel=U.GREEN,this.maskFunction=mt.MULTIPLY_RGB,this.bokehNearBasePass=new W(new gt(!1,!0)),this.bokehNearBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehNearFillPass=new W(new gt(!0,!0)),this.bokehNearFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehFarBasePass=new W(new gt(!1,!1)),this.bokehFarBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.bokehFarFillPass=new W(new gt(!0,!1)),this.bokehFarFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.target=null;let g=this.resolution=new R(this,f,p,l);g.addEventListener(`change`,e=>this.setSize(g.baseWidth,g.baseHeight)),this.bokehScale=s}set mainCamera(e){this.camera=e,this.cocMaterial.copyCameraSettings(e)}get cocTexture(){return this.renderTargetCoC.texture}get maskFunction(){return this.maskPass.fullscreenMaterial.maskFunction}set maskFunction(e){this.maskFunction!==e&&(this.defines.set(`MASK_FUNCTION`,e.toFixed(0)),this.maskPass.fullscreenMaterial.maskFunction=e,this.setChanged())}get cocMaterial(){return this.cocPass.fullscreenMaterial}get circleOfConfusionMaterial(){return this.cocMaterial}getCircleOfConfusionMaterial(){return this.cocMaterial}getBlurPass(){return this.blurPass}getResolution(){return this.resolution}get bokehScale(){return this.uniforms.get(`scale`).value}set bokehScale(e){this.bokehNearBasePass.fullscreenMaterial.scale=e,this.bokehNearFillPass.fullscreenMaterial.scale=e,this.bokehFarBasePass.fullscreenMaterial.scale=e,this.bokehFarFillPass.fullscreenMaterial.scale=e,this.maskPass.fullscreenMaterial.strength=e,this.uniforms.get(`scale`).value=e}getBokehScale(){return this.bokehScale}setBokehScale(e){this.bokehScale=e}getTarget(){return this.target}setTarget(e){this.target=e}calculateFocusDistance(e){return this.camera.getWorldPosition(St).distanceTo(e)}setDepthTexture(e,t=w){this.cocMaterial.depthBuffer=e,this.cocMaterial.depthPacking=t}update(e,t,n){let r=this.renderTarget,i=this.renderTargetCoC,a=this.renderTargetCoCBlurred,o=this.renderTargetMasked;if(this.target!==null){let e=this.calculateFocusDistance(this.target);this.cocMaterial.focusDistance=e}this.cocPass.render(e,null,i),this.blurPass.render(e,i,a),this.maskPass.render(e,t,o),this.bokehFarBasePass.render(e,o,r),this.bokehFarFillPass.render(e,r,this.renderTargetFar),this.bokehNearBasePass.render(e,t,r),this.bokehNearFillPass.render(e,r,this.renderTargetNear)}setSize(e,t){let n=this.resolution;n.setBaseSize(e,t);let r=n.width,i=n.height;this.cocPass.setSize(e,t),this.blurPass.setSize(e,t),this.maskPass.setSize(e,t),this.renderTargetFar.setSize(e,t),this.renderTargetCoC.setSize(e,t),this.renderTargetMasked.setSize(e,t),this.renderTarget.setSize(r,i),this.renderTargetNear.setSize(r,i),this.renderTargetCoCBlurred.setSize(r,i),this.bokehNearBasePass.fullscreenMaterial.setSize(e,t),this.bokehNearFillPass.fullscreenMaterial.setSize(e,t),this.bokehFarBasePass.fullscreenMaterial.setSize(e,t),this.bokehFarFillPass.fullscreenMaterial.setSize(e,t)}initialize(e,t,n){this.cocPass.initialize(e,t,n),this.maskPass.initialize(e,t,n),this.bokehNearBasePass.initialize(e,t,n),this.bokehNearFillPass.initialize(e,t,n),this.bokehFarBasePass.initialize(e,t,n),this.bokehFarFillPass.initialize(e,t,n),this.blurPass.initialize(e,t,ce),e.capabilities.logarithmicDepthBuffer&&(this.cocPass.fullscreenMaterial.defines.LOG_DEPTH=`1`),n!==void 0&&(this.renderTarget.texture.type=n,this.renderTargetNear.texture.type=n,this.renderTargetFar.texture.type=n,this.renderTargetMasked.texture.type=n,e!==null&&e.outputColorSpace===`srgb`&&(this.renderTarget.texture.colorSpace=C,this.renderTargetNear.texture.colorSpace=C,this.renderTargetFar.texture.colorSpace=C,this.renderTargetMasked.texture.colorSpace=C))}},wt=`uniform vec2 angle;uniform float scale;float pattern(const in vec2 uv){vec2 point=scale*vec2(dot(angle.yx,vec2(uv.x,-uv.y)),dot(angle,uv));return(sin(point.x)*sin(point.y))*4.0;}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=vec3(inputColor.rgb*10.0-5.0+pattern(uv*resolution));outputColor=vec4(color,inputColor.a);}`,Tt=class extends B{constructor({blendFunction:e,angle:t=Math.PI*.5,scale:n=1}={}){super(`DotScreenEffect`,wt,{blendFunction:e,uniforms:new Map([[`angle`,new M(new D)],[`scale`,new M(n)]])}),this.angle=t}get angle(){return Math.acos(this.uniforms.get(`angle`).value.y)}set angle(e){this.uniforms.get(`angle`).value.set(Math.sin(e),Math.cos(e))}getAngle(){return this.angle}setAngle(e){this.angle=e}get scale(){return this.uniforms.get(`scale`).value}set scale(e){this.uniforms.get(`scale`).value=e}},Et=`#define QUALITY(q) ((q) < 5 ? 1.0 : ((q) > 5 ? ((q) < 10 ? 2.0 : ((q) < 11 ? 4.0 : 8.0)) : 1.5)) -#define ONE_OVER_TWELVE 0.08333333333333333 -varying vec2 vUvDown;varying vec2 vUvUp;varying vec2 vUvLeft;varying vec2 vUvRight;varying vec2 vUvDownLeft;varying vec2 vUvUpRight;varying vec2 vUvUpLeft;varying vec2 vUvDownRight;vec4 fxaa(const in vec4 inputColor,const in vec2 uv){float lumaCenter=luminance(inputColor.rgb);float lumaDown=luminance(texture2D(inputBuffer,vUvDown).rgb);float lumaUp=luminance(texture2D(inputBuffer,vUvUp).rgb);float lumaLeft=luminance(texture2D(inputBuffer,vUvLeft).rgb);float lumaRight=luminance(texture2D(inputBuffer,vUvRight).rgb);float lumaMin=min(lumaCenter,min(min(lumaDown,lumaUp),min(lumaLeft,lumaRight)));float lumaMax=max(lumaCenter,max(max(lumaDown,lumaUp),max(lumaLeft,lumaRight)));float lumaRange=lumaMax-lumaMin;if(lumaRange=edgeVertical);float stepLength=isHorizontal?texelSize.y:texelSize.x;float luma1=isHorizontal?lumaDown:lumaLeft;float luma2=isHorizontal?lumaUp:lumaRight;float gradient1=abs(luma1-lumaCenter);float gradient2=abs(luma2-lumaCenter);bool is1Steepest=gradient1>=gradient2;float gradientScaled=0.25*max(gradient1,gradient2);float lumaLocalAverage=0.0;if(is1Steepest){stepLength=-stepLength;lumaLocalAverage=0.5*(luma1+lumaCenter);}else{lumaLocalAverage=0.5*(luma2+lumaCenter);}vec2 currentUv=uv;if(isHorizontal){currentUv.y+=stepLength*0.5;}else{currentUv.x+=stepLength*0.5;}vec2 offset=isHorizontal?vec2(texelSize.x,0.0):vec2(0.0,texelSize.y);vec2 uv1=currentUv-offset*QUALITY(0);vec2 uv2=currentUv+offset*QUALITY(0);float lumaEnd1=luminance(texture2D(inputBuffer,uv1).rgb);float lumaEnd2=luminance(texture2D(inputBuffer,uv2).rgb);lumaEnd1-=lumaLocalAverage;lumaEnd2-=lumaLocalAverage;bool reached1=abs(lumaEnd1)>=gradientScaled;bool reached2=abs(lumaEnd2)>=gradientScaled;bool reachedBoth=reached1&&reached2;if(!reached1){uv1-=offset*QUALITY(1);}if(!reached2){uv2+=offset*QUALITY(1);}if(!reachedBoth){for(int i=2;i=gradientScaled;reached2=abs(lumaEnd2)>=gradientScaled;reachedBoth=reached1&&reached2;if(!reached1){uv1-=offset*QUALITY(i);}if(!reached2){uv2+=offset*QUALITY(i);}if(reachedBoth){break;}}}float distance1=isHorizontal?(uv.x-uv1.x):(uv.y-uv1.y);float distance2=isHorizontal?(uv2.x-uv.x):(uv2.y-uv.y);bool isDirection1=distance1distortion.x-columns*random){float sx=clamp(ceil(seeds.x),0.0,1.0);uv.y=sx*(1.0-(uv.y+distortion.y))+(1.0-sx)*distortion.y;}if(uv.xdistortion.y-columns*random){float sy=clamp(ceil(seeds.y),0.0,1.0);uv.x=sy*distortion.x+(1.0-sy)*(1.0-(uv.x+distortion.x));}vec2 normal=texture2D(perturbationMap,uv*random*random).rg;uv+=normal*seeds*(random*0.2);}}`,Ft=`Glitch.Generated`;function G(e,t){return e+Math.random()*(t-e)}var It=class extends B{constructor({chromaticAberrationOffset:e=null,delay:t=new D(1.5,3.5),duration:n=new D(.6,1),strength:r=new D(.3,1),columns:i=.05,ratio:a=.85,perturbationMap:o=null,dtSize:s=64}={}){if(super(`GlitchEffect`,Pt,{uniforms:new Map([[`perturbationMap`,new M(null)],[`columns`,new M(i)],[`active`,new M(!1)],[`random`,new M(1)],[`seeds`,new M(new D)],[`distortion`,new M(new D)]])}),o===null){let e=new Nt(s,s,p);e.name=Ft,this.perturbationMap=e}else this.perturbationMap=o;this.time=0,this.distortion=this.uniforms.get(`distortion`).value,this.delay=t,this.duration=n,this.breakPoint=new D(G(this.delay.x,this.delay.y),G(this.duration.x,this.duration.y)),this.strength=r,this.mode=jt.SPORADIC,this.ratio=a,this.chromaticAberrationOffset=e}get seeds(){return this.uniforms.get(`seeds`).value}get active(){return this.uniforms.get(`active`).value}isActive(){return this.active}get minDelay(){return this.delay.x}set minDelay(e){this.delay.x=e}getMinDelay(){return this.delay.x}setMinDelay(e){this.delay.x=e}get maxDelay(){return this.delay.y}set maxDelay(e){this.delay.y=e}getMaxDelay(){return this.delay.y}setMaxDelay(e){this.delay.y=e}get minDuration(){return this.duration.x}set minDuration(e){this.duration.x=e}getMinDuration(){return this.duration.x}setMinDuration(e){this.duration.x=e}get maxDuration(){return this.duration.y}set maxDuration(e){this.duration.y=e}getMaxDuration(){return this.duration.y}setMaxDuration(e){this.duration.y=e}get minStrength(){return this.strength.x}set minStrength(e){this.strength.x=e}getMinStrength(){return this.strength.x}setMinStrength(e){this.strength.x=e}get maxStrength(){return this.strength.y}set maxStrength(e){this.strength.y=e}getMaxStrength(){return this.strength.y}setMaxStrength(e){this.strength.y=e}getMode(){return this.mode}setMode(e){this.mode=e}getGlitchRatio(){return 1-this.ratio}setGlitchRatio(e){this.ratio=Math.min(Math.max(1-e,0),1)}get columns(){return this.uniforms.get(`columns`).value}set columns(e){this.uniforms.get(`columns`).value=e}getGlitchColumns(){return this.columns}setGlitchColumns(e){this.columns=e}getChromaticAberrationOffset(){return this.chromaticAberrationOffset}setChromaticAberrationOffset(e){this.chromaticAberrationOffset=e}get perturbationMap(){return this.uniforms.get(`perturbationMap`).value}set perturbationMap(e){let t=this.perturbationMap;t!==null&&t.name===Ft&&t.dispose(),e.minFilter=e.magFilter=k,e.wrapS=e.wrapT=d,e.generateMipmaps=!1,this.uniforms.get(`perturbationMap`).value=e}getPerturbationMap(){return this.perturbationMap}setPerturbationMap(e){this.perturbationMap=e}generatePerturbationMap(e=64){let t=new Nt(e,e,p);return t.name=Ft,t}update(e,t,n){let r=this.mode,i=this.breakPoint,a=this.chromaticAberrationOffset,o=this.strength,s=this.time,c=!1,l=0,u=0,d;r!==jt.DISABLED&&(r===jt.SPORADIC&&(s+=n,d=s>i.x,s>=i.x+i.y&&(i.set(G(this.delay.x,this.delay.y),G(this.duration.x,this.duration.y)),s=0)),l=Math.random(),this.uniforms.get(`random`).value=l,d&&l>this.ratio||r===jt.CONSTANT_WILD?(c=!0,l*=o.y*.03,u=G(-Math.PI,Math.PI),this.seeds.set(G(-o.y,o.y),G(-o.y,o.y)),this.distortion.set(G(0,1),G(0,1))):(d||r===jt.CONSTANT_MILD)&&(c=!0,l*=o.x*.03,u=G(-Math.PI,Math.PI),this.seeds.set(G(-o.x,o.x),G(-o.x,o.x)),this.distortion.set(G(0,1),G(0,1))),this.time=s),a!==null&&(c?a.set(Math.cos(u),Math.sin(u)).multiplyScalar(l):a.set(0,0)),this.uniforms.get(`active`).value=c}dispose(){let e=this.perturbationMap;e!==null&&e.name===Ft&&e.dispose()}},Lt=`#include -#include -#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -uniform vec2 lightPosition;uniform float exposure;uniform float decay;uniform float density;uniform float weight;uniform float clampMax;varying vec2 vUv;void main(){vec2 coord=vUv;vec2 delta=lightPosition-coord;delta*=1.0/SAMPLES_FLOAT*density;float illuminationDecay=1.0;vec4 color=vec4(0.0);for(int i=0;i -}`,Rt=class extends j{constructor(e){super({name:`GodRaysMaterial`,defines:{SAMPLES_INT:`60`,SAMPLES_FLOAT:`60.0`},uniforms:{inputBuffer:new M(null),lightPosition:new M(e),density:new M(1),decay:new M(1),weight:new M(1),exposure:new M(1),clampMax:new M(1)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:Lt,vertexShader:P})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get lightPosition(){return this.uniforms.lightPosition.value}getLightPosition(){return this.uniforms.lightPosition.value}setLightPosition(e){this.uniforms.lightPosition.value=e}get density(){return this.uniforms.density.value}set density(e){this.uniforms.density.value=e}getDensity(){return this.uniforms.density.value}setDensity(e){this.uniforms.density.value=e}get decay(){return this.uniforms.decay.value}set decay(e){this.uniforms.decay.value=e}getDecay(){return this.uniforms.decay.value}setDecay(e){this.uniforms.decay.value=e}get weight(){return this.uniforms.weight.value}set weight(e){this.uniforms.weight.value=e}getWeight(){return this.uniforms.weight.value}setWeight(e){this.uniforms.weight.value=e}get exposure(){return this.uniforms.exposure.value}set exposure(e){this.uniforms.exposure.value=e}getExposure(){return this.uniforms.exposure.value}setExposure(e){this.uniforms.exposure.value=e}get maxIntensity(){return this.uniforms.clampMax.value}set maxIntensity(e){this.uniforms.clampMax.value=e}getMaxIntensity(){return this.uniforms.clampMax.value}setMaxIntensity(e){this.uniforms.clampMax.value=e}get samples(){return Number(this.defines.SAMPLES_INT)}set samples(e){let t=Math.floor(e);this.defines.SAMPLES_INT=t.toFixed(0),this.defines.SAMPLES_FLOAT=t.toFixed(1),this.needsUpdate=!0}getSamples(){return this.samples}setSamples(e){this.samples=e}},zt=class extends N{constructor(e,t,n=null){super(`RenderPass`,e,t),this.needsSwap=!1,this.needsDepthBlit=!0,this.clearPass=new ve,this.overrideMaterialManager=n===null?null:new Ae(n),this.ignoreBackground=!1,this.skipShadowMapUpdate=!1,this.selection=null}set mainScene(e){this.scene=e}set mainCamera(e){this.camera=e}get renderToScreen(){return super.renderToScreen}set renderToScreen(e){super.renderToScreen=e,this.clearPass.renderToScreen=e}get overrideMaterial(){let e=this.overrideMaterialManager;return e===null?null:e.material}set overrideMaterial(e){let t=this.overrideMaterialManager;e===null?t!==null&&(t.dispose(),this.overrideMaterialManager=null):t===null?this.overrideMaterialManager=new Ae(e):t.setMaterial(e)}getOverrideMaterial(){return this.overrideMaterial}setOverrideMaterial(e){this.overrideMaterial=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getSelection(){return this.selection}setSelection(e){this.selection=e}isBackgroundDisabled(){return this.ignoreBackground}setBackgroundDisabled(e){this.ignoreBackground=e}isShadowMapDisabled(){return this.skipShadowMapUpdate}setShadowMapDisabled(e){this.skipShadowMapUpdate=e}getClearPass(){return this.clearPass}render(e,t,n,r,i){let a=this.scene,o=this.camera,s=this.selection,c=o.layers.mask,l=a.background,u=e.shadowMap.autoUpdate,d=this.renderToScreen?null:t;s!==null&&o.layers.set(s.getLayer()),this.skipShadowMapUpdate&&(e.shadowMap.autoUpdate=!1),(this.ignoreBackground||this.clearPass.overrideClearColor!==null)&&(a.background=null),this.clearPass.enabled&&this.clearPass.render(e,t),e.setRenderTarget(d),this.overrideMaterialManager===null?e.render(a,o):this.overrideMaterialManager.render(e,a,o),o.layers.mask=c,a.background=l,e.shadowMap.autoUpdate=u}},Bt=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D map; -#else -uniform lowp sampler2D map; -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=texture2D(map,uv);}`,Vt=new n,Ht=new S,Ut=class extends B{constructor(e,t,{blendFunction:n=z.SCREEN,samples:r=60,density:i=.96,decay:a=.9,weight:o=.4,exposure:s=.6,clampMax:l=1,blur:u=!0,kernelSize:d=V.SMALL,resolutionScale:f=.5,width:p=R.AUTO_SIZE,height:h=R.AUTO_SIZE,resolutionX:g=p,resolutionY:_=h}={}){super(`GodRaysEffect`,Bt,{blendFunction:n,attributes:F.DEPTH,uniforms:new Map([[`map`,new M(null)]])}),this.camera=e,this._lightSource=t,this.lightSource=t,this.lightScene=new m,this.screenPosition=new D,this.renderTargetA=new c(1,1,{depthBuffer:!1}),this.renderTargetA.texture.name=`GodRays.Target.A`,this.renderTargetB=this.renderTargetA.clone(),this.renderTargetB.texture.name=`GodRays.Target.B`,this.uniforms.get(`map`).value=this.renderTargetB.texture,this.renderTargetLight=new c(1,1),this.renderTargetLight.texture.name=`GodRays.Light`,this.renderTargetLight.depthTexture=new x,this.renderPassLight=new zt(this.lightScene,e),this.renderPassLight.clearPass.enabled=!1,this.blurPass=new H({kernelSize:d}),this.blurPass.enabled=u,this.copyPass=new ge(this.renderTargetLight),this.copyPass.fullscreenMaterial.channelWeights=new E(0,0,0,1),this.godRaysPass=new W(new Rt(this.screenPosition));let v=this.godRaysMaterial;v.density=i,v.decay=a,v.weight=o,v.exposure=s,v.maxIntensity=l,v.samples=r;let y=this.resolution=new R(this,g,_,f);y.addEventListener(`change`,e=>this.setSize(y.baseWidth,y.baseHeight))}set mainCamera(e){this.camera=e,this.renderPassLight.mainCamera=e}get lightSource(){return this._lightSource}set lightSource(e){this._lightSource=e,e!==null&&(e.material.depthWrite=!1,e.material.transparent=!0)}getBlurPass(){return this.blurPass}get texture(){return this.renderTargetB.texture}getTexture(){return this.texture}get godRaysMaterial(){return this.godRaysPass.fullscreenMaterial}getGodRaysMaterial(){return this.godRaysMaterial}getResolution(){return this.resolution}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get dithering(){return this.godRaysMaterial.dithering}set dithering(e){let t=this.godRaysMaterial;t.dithering=e,t.needsUpdate=!0}get blur(){return this.blurPass.enabled}set blur(e){this.blurPass.enabled=e}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(e){this.blurPass.kernelSize=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}get samples(){return this.godRaysMaterial.samples}set samples(e){this.godRaysMaterial.samples=e}setDepthTexture(e,t=w){this.copyPass.fullscreenMaterial.depthBuffer=e,this.copyPass.fullscreenMaterial.depthPacking=t}update(e,t,n){let r=this.lightSource,i=r.parent,a=r.matrixAutoUpdate,o=this.renderTargetA,s=this.renderTargetLight;r.material.depthWrite=!0,r.matrixAutoUpdate=!1,r.updateWorldMatrix(!0,!1),i!==null&&(a||Ht.copy(r.matrix),r.matrix.copy(r.matrixWorld)),this.lightScene.add(r),this.copyPass.render(e,t),this.renderPassLight.render(e,s),r.material.depthWrite=!1,r.matrixAutoUpdate=a,i!==null&&(a||r.matrix.copy(Ht),i.add(r)),Vt.setFromMatrixPosition(r.matrixWorld).project(this.camera),this.screenPosition.set(Math.min(Math.max((Vt.x+1)*.5,-1),2),Math.min(Math.max((Vt.y+1)*.5,-1),2));let c=s;this.blurPass.enabled&&(this.blurPass.render(e,c,o),c=o),this.godRaysPass.render(e,c,this.renderTargetB)}setSize(e,t){let n=this.resolution;n.setBaseSize(e,t);let r=n.width,i=n.height;this.renderTargetLight.setSize(e,t),this.renderTargetA.setSize(r,i),this.renderTargetB.setSize(r,i),this.blurPass.resolution.copy(n)}initialize(e,t,n){this.blurPass.initialize(e,t,n),this.renderPassLight.initialize(e,t,n),this.copyPass.initialize(e,t,n),this.godRaysPass.initialize(e,t,n),n!==void 0&&(this.renderTargetA.texture.type=n,this.renderTargetB.texture.type=n,this.renderTargetLight.texture.type=n,e!==null&&e.outputColorSpace===`srgb`&&(this.renderTargetA.texture.colorSpace=C,this.renderTargetB.texture.colorSpace=C,this.renderTargetLight.texture.colorSpace=C))}},Wt=`uniform vec2 scale;uniform float lineWidth;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){float grid=0.5-max(abs(mod(uv.x*scale.x,1.0)-0.5),abs(mod(uv.y*scale.y,1.0)-0.5));outputColor=vec4(vec3(smoothstep(0.0,lineWidth,grid)),inputColor.a);}`,Gt=class extends B{constructor({blendFunction:e=z.OVERLAY,scale:t=1,lineWidth:n=0}={}){super(`GridEffect`,Wt,{blendFunction:e,uniforms:new Map([[`scale`,new M(new D)],[`lineWidth`,new M(n)]])}),this.resolution=new D,this.s=0,this.scale=t,this.l=0,this.lineWidth=n}get scale(){return this.s}set scale(e){this.s=Math.max(e,1e-6),this.setSize(this.resolution.width,this.resolution.height)}getScale(){return this.scale}setScale(e){this.scale=e}get lineWidth(){return this.l}set lineWidth(e){this.l=e,this.setSize(this.resolution.width,this.resolution.height)}getLineWidth(){return this.lineWidth}setLineWidth(e){this.lineWidth=e}setSize(e,t){this.resolution.set(e,t);let n=e/t,r=this.scale*(t*.125);this.uniforms.get(`scale`).value.set(n*r,r),this.uniforms.get(`lineWidth`).value=r/t+this.lineWidth}},Kt=`uniform vec3 hue;uniform float saturation;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=vec3(dot(inputColor.rgb,hue.xyz),dot(inputColor.rgb,hue.zxy),dot(inputColor.rgb,hue.yzx));float average=(color.r+color.g+color.b)/3.0;vec3 diff=average-color;if(saturation>0.0){color+=diff*(1.0-1.0/(1.001-saturation));}else{color+=diff*-saturation;}outputColor=vec4(min(color,1.0),inputColor.a);}`,qt=class extends B{constructor({blendFunction:e=z.SRC,hue:t=0,saturation:r=0}={}){super(`HueSaturationEffect`,Kt,{blendFunction:e,uniforms:new Map([[`hue`,new M(new n)],[`saturation`,new M(r)]])}),this.hue=t}get saturation(){return this.uniforms.get(`saturation`).value}set saturation(e){this.uniforms.get(`saturation`).value=e}getSaturation(){return this.saturation}setSaturation(e){this.saturation=e}get hue(){let e=this.uniforms.get(`hue`).value;return Math.acos((e.x*3-1)/2)}set hue(e){let t=Math.sin(e),n=Math.cos(e);this.uniforms.get(`hue`).value.set((2*n+1)/3,(-Math.sqrt(3)*t-n+1)/3,(Math.sqrt(3)*t-n+1)/3)}getHue(){return this.hue}setHue(e){this.hue=e}},Jt=`uniform vec2 distortion;uniform vec2 principalPoint;uniform vec2 focalLength;uniform float skew;float mask(const in vec2 uv){return float(uv.s>=0.0&&uv.s<=1.0&&uv.t>=0.0&&uv.t<=1.0);}void mainUv(inout vec2 uv){vec2 xn=2.0*(uv.st-0.5);vec3 xDistorted=vec3((1.0+distortion*dot(xn,xn))*xn,1.0);mat3 kk=mat3(vec3(focalLength.x,0.0,0.0),vec3(skew*focalLength.x,focalLength.y,0.0),vec3(principalPoint.x,principalPoint.y,1.0));uv=(kk*xDistorted).xy*0.5+0.5;}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=mask(uv)*inputColor;}`,Yt=class extends B{constructor({distortion:e=new D(0,0),principalPoint:t=new D(0,0),focalLength:n=new D(1,1),skew:r=0}={}){super(`LensDistortionEffect`,Jt,{uniforms:new Map([[`distortion`,new M(e)],[`principalPoint`,new M(t)],[`focalLength`,new M(n)],[`skew`,new M(r)]])})}get distortion(){return this.uniforms.get(`distortion`).value}set distortion(e){this.uniforms.get(`distortion`).value=e}get principalPoint(){return this.uniforms.get(`principalPoint`).value}set principalPoint(e){this.uniforms.get(`principalPoint`).value=e}get focalLength(){return this.uniforms.get(`focalLength`).value}set focalLength(e){this.uniforms.get(`focalLength`).value=e}get skew(){return this.uniforms.get(`skew`).value}set skew(e){this.uniforms.get(`skew`).value=e}},Xt=`#ifdef LUT_PRECISION_HIGH -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D lut; -#else -uniform mediump sampler2D lut; -#endif -#else -uniform lowp sampler2D lut; -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=vec4(texture2D(lut,vec2(inputColor.r,0.5)).r,texture2D(lut,vec2(inputColor.g,0.5)).r,texture2D(lut,vec2(inputColor.b,0.5)).r,inputColor.a);}`,Zt=class extends B{constructor(e,{blendFunction:t=z.SRC}={}){super(`LUT1DEffect`,Xt,{blendFunction:t,uniforms:new Map([[`lut`,new M(null)]])}),this.lut=e}get lut(){return this.uniforms.get(`lut`).value}set lut(e){this.uniforms.get(`lut`).value=e,e!==null&&(e.type===1015||e.type===1016)&&this.defines.set(`LUT_PRECISION_HIGH`,`1`)}},Qt={SCALE_UP:`lut.scaleup`};function $t(e,t,n){let r=document.createElement(`canvas`),i=r.getContext(`2d`);if(r.width=e,r.height=t,n instanceof Image)i.drawImage(n,0,0);else{let r=i.createImageData(e,t);r.data.set(n),i.putImageData(r,0,0)}return r}var K=class e{constructor(e=0,t=0,n=null){this.width=e,this.height=t,this.data=n}toCanvas(){return typeof document>`u`?null:$t(this.width,this.height,this.data)}static from(t){let{width:n,height:r}=t,i;if(t instanceof Image){let e=$t(n,r,t);e!==null&&(i=e.getContext(`2d`).getImageData(0,0,n,r).data)}else i=t.data;return new e(n,r,i)}},en=`"use strict";(()=>{var O={SCALE_UP:"lut.scaleup"};var _=[new Float32Array(3),new Float32Array(3)],n=[new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3)],Z=[[new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1])]];function d(a,t,r,m){let i=r[0]-t[0],e=r[1]-t[1],y=r[2]-t[2],h=a[0]-t[0],A=a[1]-t[1],w=a[2]-t[2],c=e*w-y*A,l=y*h-i*w,x=i*A-e*h,u=Math.sqrt(c*c+l*l+x*x),b=u*.5,s=c/u,F=l/u,f=x/u,p=-(a[0]*s+a[1]*F+a[2]*f),M=m[0]*s+m[1]*F+m[2]*f;return Math.abs(M+p)*b/3}function V(a,t,r,m,i,e){let y=(r+m*t+i*t*t)*4;e[0]=a[y+0],e[1]=a[y+1],e[2]=a[y+2]}function k(a,t,r,m,i,e){let y=r*(t-1),h=m*(t-1),A=i*(t-1),w=Math.floor(y),c=Math.floor(h),l=Math.floor(A),x=Math.ceil(y),u=Math.ceil(h),b=Math.ceil(A),s=y-w,F=h-c,f=A-l;if(w===y&&c===h&&l===A)V(a,t,y,h,A,e);else{let p;s>=F&&F>=f?p=Z[0]:s>=f&&f>=F?p=Z[1]:f>=s&&s>=F?p=Z[2]:F>=s&&s>=f?p=Z[3]:F>=f&&f>=s?p=Z[4]:f>=F&&F>=s&&(p=Z[5]);let[M,g,X,Y]=p,P=_[0];P[0]=s,P[1]=F,P[2]=f;let o=_[1],L=x-w,S=u-c,U=b-l;o[0]=L*M[0]+w,o[1]=S*M[1]+c,o[2]=U*M[2]+l,V(a,t,o[0],o[1],o[2],n[0]),o[0]=L*g[0]+w,o[1]=S*g[1]+c,o[2]=U*g[2]+l,V(a,t,o[0],o[1],o[2],n[1]),o[0]=L*X[0]+w,o[1]=S*X[1]+c,o[2]=U*X[2]+l,V(a,t,o[0],o[1],o[2],n[2]),o[0]=L*Y[0]+w,o[1]=S*Y[1]+c,o[2]=U*Y[2]+l,V(a,t,o[0],o[1],o[2],n[3]);let T=d(g,X,Y,P)*6,q=d(M,X,Y,P)*6,C=d(M,g,Y,P)*6,E=d(M,g,X,P)*6;n[0][0]*=T,n[0][1]*=T,n[0][2]*=T,n[1][0]*=q,n[1][1]*=q,n[1][2]*=q,n[2][0]*=C,n[2][1]*=C,n[2][2]*=C,n[3][0]*=E,n[3][1]*=E,n[3][2]*=E,e[0]=n[0][0]+n[1][0]+n[2][0]+n[3][0],e[1]=n[0][1]+n[1][1]+n[2][1]+n[3][1],e[2]=n[0][2]+n[1][2]+n[2][2]+n[3][2]}}var v=class{static expand(t,r){let m=Math.cbrt(t.length/4),i=new Float32Array(3),e=new t.constructor(r**3*4),y=t instanceof Uint8Array?255:1,h=r**2,A=1/(r-1);for(let w=0;w{let t=a.data,r=t.data;t.operation===O.SCALE_UP&&(r=v.expand(r,t.size)),postMessage(r,[r.buffer]),close()});})(); -`,tn=new t,nn=class e extends y{constructor(e,t){super(e,t,t,t),this.type=A,this.format=p,this.minFilter=u,this.magFilter=u,this.wrapS=f,this.wrapT=f,this.wrapR=f,this.unpackAlignment=1,this.needsUpdate=!0,this.colorSpace=r,this.domainMin=new n(0,0,0),this.domainMax=new n(1,1,1)}get isLookupTexture3D(){return!0}scaleUp(t,n=!0){let r=this.image,i;return i=t<=r.width?Promise.reject(Error(`The target size must be greater than the current size`)):new Promise((i,a)=>{let o=URL.createObjectURL(new Blob([en],{type:`text/javascript`})),s=new Worker(o);s.addEventListener(`error`,e=>a(e.error)),s.addEventListener(`message`,n=>{let r=new e(n.data,t);this.colorSpace=r.colorSpace,r.type=this.type,r.name=this.name,URL.revokeObjectURL(o),i(r)});let c=n?[r.data.buffer]:[];s.postMessage({operation:Qt.SCALE_UP,data:r.data,size:t},c)}),i}applyLUT(e){let t=this.image,n=e.image,r=Math.min(t.width,t.height,t.depth);if(r!==Math.min(n.width,n.height,n.depth))console.error(`Size mismatch`);else if(e.type!==1015||this.type!==1015)console.error(`Both LUTs must be FloatType textures`);else if(e.format!==1023||this.format!==1023)console.error(`Both LUTs must be RGBA textures`);else{let e=t.data,i=n.data,a=r,o=a**2,s=a-1;for(let t=0,n=a**3;ti){o=new Uint8Array(e.length);for(let t=0;t=f.g){if(f.g>f.b){frac=f.rgb;v2=vec3(v4.x,v1.y,v1.z);v3=vec3(v4.x,v4.y,v1.z);}else if(f.r>=f.b){frac=f.rbg;v2=vec3(v4.x,v1.y,v1.z);v3=vec3(v4.x,v1.y,v4.z);}else{frac=f.brg;v2=vec3(v1.x,v1.y,v4.z);v3=vec3(v4.x,v1.y,v4.z);}}else{if(f.b>f.g){frac=f.bgr;v2=vec3(v1.x,v1.y,v4.z);v3=vec3(v1.x,v4.y,v4.z);}else if(f.r>=f.b){frac=f.grb;v2=vec3(v1.x,v4.y,v1.z);v3=vec3(v4.x,v4.y,v1.z);}else{frac=f.gbr;v2=vec3(v1.x,v4.y,v1.z);v3=vec3(v1.x,v4.y,v4.z);}}vec4 n1=texture(lut,v1);vec4 n2=texture(lut,v2);vec4 n3=texture(lut,v3);vec4 n4=texture(lut,v4);vec4 weights=vec4(1.0-frac.x,frac.x-frac.y,frac.y-frac.z,frac.z);vec4 result=weights*mat4(vec4(n1.r,n2.r,n3.r,n4.r),vec4(n1.g,n2.g,n3.g,n4.g),vec4(n1.b,n2.b,n3.b,n4.b),vec4(1.0));return vec4(result.rgb,1.0); -#else -return texture(lut,rgb); -#endif -} -#else -#ifdef LUT_PRECISION_HIGH -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D lut; -#else -uniform mediump sampler2D lut; -#endif -#else -uniform lowp sampler2D lut; -#endif -vec4 applyLUT(const in vec3 rgb){float slice=rgb.b*LUT_SIZE;float slice0=floor(slice);float interp=slice-slice0;float centeredInterp=interp-0.5;float slice1=slice0+sign(centeredInterp); -#ifdef LUT_STRIP_HORIZONTAL -float xOffset=clamp(rgb.r*LUT_TEXEL_HEIGHT,LUT_TEXEL_WIDTH*0.5,LUT_TEXEL_HEIGHT-LUT_TEXEL_WIDTH*0.5);vec2 uv0=vec2(slice0*LUT_TEXEL_HEIGHT+xOffset,rgb.g);vec2 uv1=vec2(slice1*LUT_TEXEL_HEIGHT+xOffset,rgb.g); -#else -float yOffset=clamp(rgb.g*LUT_TEXEL_WIDTH,LUT_TEXEL_HEIGHT*0.5,LUT_TEXEL_WIDTH-LUT_TEXEL_HEIGHT*0.5);vec2 uv0=vec2(rgb.r,slice0*LUT_TEXEL_WIDTH+yOffset);vec2 uv1=vec2(rgb.r,slice1*LUT_TEXEL_WIDTH+yOffset); -#endif -vec4 sample0=texture2D(lut,uv0);vec4 sample1=texture2D(lut,uv1);return mix(sample0,sample1,abs(centeredInterp));} -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 c=inputColor.rgb; -#ifdef CUSTOM_INPUT_DOMAIN -if(c.r>=domainMin.r&&c.g>=domainMin.g&&c.b>=domainMin.b&&c.r<=domainMax.r&&c.g<=domainMax.g&&c.b<=domainMax.b){c=applyLUT(scale*c+offset).rgb;}else{c=inputColor.rgb;} -#else -#if !defined(LUT_3D) || defined(TETRAHEDRAL_INTERPOLATION) -c=clamp(c,0.0,1.0); -#endif -c=applyLUT(scale*c+offset).rgb; -#endif -outputColor=vec4(c,inputColor.a);}`,an=class extends B{constructor(e,{blendFunction:t=z.SRC,tetrahedralInterpolation:r=!1,inputColorSpace:i=C}={}){super(`LUT3DEffect`,rn,{blendFunction:t,uniforms:new Map([[`lut`,new M(null)],[`scale`,new M(new n)],[`offset`,new M(new n)],[`domainMin`,new M(null)],[`domainMax`,new M(null)]])}),this.tetrahedralInterpolation=r,this.inputColorSpace=i,this.lut=e}get lut(){return this.uniforms.get(`lut`).value}set lut(e){let t=this.defines,n=this.uniforms;if(this.lut!==e&&(n.get(`lut`).value=e,e!==null)){let r=e.image,i=this.tetrahedralInterpolation;if(t.clear(),t.set(`LUT_SIZE`,Math.min(r.width,r.height).toFixed(16)),t.set(`LUT_TEXEL_WIDTH`,(1/r.width).toFixed(16)),t.set(`LUT_TEXEL_HEIGHT`,(1/r.height).toFixed(16)),n.get(`domainMin`).value=null,n.get(`domainMax`).value=null,(e.type===1015||e.type===1016)&&t.set(`LUT_PRECISION_HIGH`,`1`),r.width>r.height?t.set(`LUT_STRIP_HORIZONTAL`,`1`):e instanceof y&&t.set(`LUT_3D`,`1`),e instanceof nn){let r=e.domainMin,i=e.domainMax;(r.x!==0||r.y!==0||r.z!==0||i.x!==1||i.y!==1||i.z!==1)&&(t.set(`CUSTOM_INPUT_DOMAIN`,`1`),n.get(`domainMin`).value=r.clone(),n.get(`domainMax`).value=i.clone())}this.tetrahedralInterpolation=i}}getLUT(){return this.lut}setLUT(e){this.lut=e}updateScaleOffset(){let e=this.lut;if(e!==null){let t=Math.min(e.image.width,e.image.height),n=this.uniforms.get(`scale`).value,r=this.uniforms.get(`offset`).value;if(this.tetrahedralInterpolation&&e instanceof y)if(this.defines.has(`CUSTOM_INPUT_DOMAIN`)){let i=e.domainMax.clone().sub(e.domainMin);n.setScalar(t-1).divide(i),r.copy(e.domainMin).negate().multiply(n)}else n.setScalar(t-1),r.setScalar(0);else if(this.defines.has(`CUSTOM_INPUT_DOMAIN`)){let i=e.domainMax.clone().sub(e.domainMin).multiplyScalar(t);n.setScalar(t-1).divide(i),r.copy(e.domainMin).negate().multiply(n).addScalar(1/(2*t))}else n.setScalar((t-1)/t),r.setScalar(1/(2*t))}}configureTetrahedralInterpolation(){let e=this.lut;e!==null&&(e.minFilter=u,e.magFilter=u,this.tetrahedralInterpolation&&(e instanceof y?(e.minFilter=k,e.magFilter=k):console.warn(`Tetrahedral interpolation requires a 3D texture`)),e.needsUpdate=!0)}get tetrahedralInterpolation(){return this.defines.has(`TETRAHEDRAL_INTERPOLATION`)}set tetrahedralInterpolation(e){e?this.defines.set(`TETRAHEDRAL_INTERPOLATION`,`1`):this.defines.delete(`TETRAHEDRAL_INTERPOLATION`),this.configureTetrahedralInterpolation(),this.updateScaleOffset(),this.setChanged()}setTetrahedralInterpolationEnabled(e){this.tetrahedralInterpolation=e}},on={FULL:0,SINGLE:1},sn={DEFAULT:0,KEEP_MAX_DEPTH:1,DISCARD_MAX_DEPTH:2},cn={DEPTH:0,LUMA:1,COLOR:2},ln={DISABLED:0,DEPTH:1,CUSTOM:2},un={LOW:0,MEDIUM:1,HIGH:2,ULTRA:3},q={LINEAR:0,REINHARD:1,REINHARD2:2,REINHARD2_ADAPTIVE:3,UNCHARTED2:4,OPTIMIZED_CINEON:5,CINEON:5,ACES_FILMIC:6,AGX:7,NEUTRAL:8},dn={DEFAULT:0,ESKIL:1},fn={DERIVATIVES:`derivatives`,FRAG_DEPTH:`fragDepth`,DRAW_BUFFERS:`drawBuffers`,SHADER_TEXTURE_LOD:`shaderTextureLOD`},pn=`void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 noise=vec3(rand(uv*(1.0+time))); -#ifdef PREMULTIPLY -outputColor=vec4(min(inputColor.rgb*noise,vec3(1.0)),inputColor.a); -#else -outputColor=vec4(noise,inputColor.a); -#endif -}`,mn=class extends B{constructor({blendFunction:e=z.SCREEN,premultiply:t=!1}={}){super(`NoiseEffect`,pn,{blendFunction:e}),this.premultiply=t}get premultiply(){return this.defines.has(`PREMULTIPLY`)}set premultiply(e){this.premultiply!==e&&(e?this.defines.set(`PREMULTIPLY`,`1`):this.defines.delete(`PREMULTIPLY`),this.setChanged())}isPremultiplied(){return this.premultiply}setPremultiplied(e){this.premultiply=e}},hn=`#include -#include -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -uniform float cameraNear;uniform float cameraFar;centroid varying float vViewZ;centroid varying vec4 vProjTexCoord;void main(){ -#include -vec2 projTexCoord=(vProjTexCoord.xy/vProjTexCoord.w)*0.5+0.5; -#if DEPTH_PACKING == 3201 -float depth=unpackRGBAToDepth(texture2D(depthBuffer,projTexCoord)); -#else -float depth=texture2D(depthBuffer,projTexCoord).r; -#endif -#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) -float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d; -#elif defined(USE_REVERSED_DEPTH_BUFFER) -depth=1.0-depth; -#endif -#ifdef PERSPECTIVE_CAMERA -float viewZ=perspectiveDepthToViewZ(depth,cameraNear,cameraFar); -#else -float viewZ=orthographicDepthToViewZ(depth,cameraNear,cameraFar); -#endif -float depthTest=(-vViewZ>-viewZ)?1.0:0.0;gl_FragColor.rg=vec2(0.0,depthTest);}`,gn=`#include -#include -#include -#include -varying float vViewZ;varying vec4 vProjTexCoord;void main(){ -#include -#include -#include -#include -#include -vViewZ=mvPosition.z;vProjTexCoord=gl_Position; -#include -}`,_n=class extends j{constructor(e=null,t){super({name:`DepthComparisonMaterial`,defines:{DEPTH_PACKING:`0`},uniforms:{depthBuffer:new M(null),cameraNear:new M(.3),cameraFar:new M(1e3)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:hn,vertexShader:gn}),this.depthBuffer=e,this.depthPacking=i,this.copyCameraSettings(t)}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=i){this.depthBuffer=e,this.depthPacking=t}adoptCameraSettings(e){this.copyCameraSettings(e)}copyCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof T?this.defines.PERSPECTIVE_CAMERA=`1`:delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},vn=`uniform lowp sampler2D inputBuffer;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 c0=texture2D(inputBuffer,vUv0).rg;vec2 c1=texture2D(inputBuffer,vUv1).rg;vec2 c2=texture2D(inputBuffer,vUv2).rg;vec2 c3=texture2D(inputBuffer,vUv3).rg;float d0=(c0.x-c1.x)*0.5;float d1=(c2.x-c3.x)*0.5;float d=length(vec2(d0,d1));float a0=min(c0.y,c1.y);float a1=min(c2.y,c3.y);float visibilityFactor=min(a0,a1);gl_FragColor.rg=(1.0-visibilityFactor>0.001)?vec2(d,0.0):vec2(0.0,d);}`,yn=`uniform vec2 texelSize;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vUv0=vec2(uv.x+texelSize.x,uv.y);vUv1=vec2(uv.x-texelSize.x,uv.y);vUv2=vec2(uv.x,uv.y+texelSize.y);vUv3=vec2(uv.x,uv.y-texelSize.y);gl_Position=vec4(position.xy,1.0,1.0);}`,bn=class extends j{constructor(e=new D){super({name:`OutlineMaterial`,uniforms:{inputBuffer:new M(null),texelSize:new M(new D)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:vn,vertexShader:yn}),this.uniforms.texelSize.value.set(e.x,e.y),this.uniforms.maskTexture=this.uniforms.inputBuffer}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t)}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},xn=class extends N{constructor(t,n,{renderTarget:r,resolutionScale:a=1,width:o=R.AUTO_SIZE,height:s=R.AUTO_SIZE,resolutionX:l=o,resolutionY:u=s}={}){super(`DepthPass`),this.needsSwap=!1,this.renderPass=new zt(t,n,new e({depthPacking:i}));let d=this.renderPass;d.skipShadowMapUpdate=!0,d.ignoreBackground=!0,this.renderTarget=r,this.renderTarget===void 0&&(this.renderTarget=new c(1,1,{minFilter:k,magFilter:k}),this.renderTarget.texture.name=`DepthPass.Target`);let f=this.resolution=new R(this,l,u,a);f.addEventListener(`change`,e=>this.setSize(f.baseWidth,f.baseHeight))}set mainScene(e){this.renderPass.mainScene=e}set mainCamera(e){this.renderPass.mainCamera=e}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,n,r,i){let a=this.renderToScreen?null:this.renderTarget;this.renderPass.render(e,a)}setSize(e,t){let n=this.resolution;n.setBaseSize(e,t),this.renderTarget.setSize(n.width,n.height)}initialize(e,n,r){let i=e.capabilities.reversedDepthBuffer?0:16777215,a=this.renderPass.clearPass;a.overrideClearColor=new t(i),a.overrideClearAlpha=1}},Sn=`uniform lowp sampler2D edgeTexture;uniform lowp sampler2D maskTexture;uniform vec3 visibleEdgeColor;uniform vec3 hiddenEdgeColor;uniform float pulse;uniform float edgeStrength; -#ifdef USE_PATTERN -uniform lowp sampler2D patternTexture;varying vec2 vUvPattern; -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 edge=texture2D(edgeTexture,uv).rg;vec2 mask=texture2D(maskTexture,uv).rg; -#ifndef X_RAY -edge.y=0.0; -#endif -edge*=(edgeStrength*mask.x*pulse);vec3 color=edge.x*visibleEdgeColor+edge.y*hiddenEdgeColor;float visibilityFactor=0.0; -#ifdef USE_PATTERN -vec4 patternColor=texture2D(patternTexture,vUvPattern); -#ifdef X_RAY -float hiddenFactor=0.5; -#else -float hiddenFactor=0.0; -#endif -visibilityFactor=(1.0-mask.y>0.0)?1.0:hiddenFactor;visibilityFactor*=(1.0-mask.x)*patternColor.a;color+=visibilityFactor*patternColor.rgb; -#endif -float alpha=max(max(edge.x,edge.y),visibilityFactor); -#ifdef ALPHA -outputColor=vec4(color,alpha); -#else -outputColor=vec4(color,max(alpha,inputColor.a)); -#endif -}`,Cn=`uniform float patternScale;varying vec2 vUvPattern;void mainSupport(const in vec2 uv){vUvPattern=uv*vec2(aspect,1.0)*patternScale;}`,wn=class extends B{constructor(e,n,{blendFunction:r=z.SCREEN,patternTexture:i=null,patternScale:a=1,edgeStrength:o=1,pulseSpeed:s=0,visibleEdgeColor:l=16777215,hiddenEdgeColor:u=2230538,kernelSize:d=V.VERY_SMALL,blur:f=!1,xRay:p=!0,multisampling:m=0,resolutionScale:h=.5,width:g=R.AUTO_SIZE,height:_=R.AUTO_SIZE,resolutionX:v=g,resolutionY:y=_}={}){super(`OutlineEffect`,Sn,{uniforms:new Map([[`maskTexture`,new M(null)],[`edgeTexture`,new M(null)],[`edgeStrength`,new M(o)],[`visibleEdgeColor`,new M(new t(l))],[`hiddenEdgeColor`,new M(new t(u))],[`pulse`,new M(1)],[`patternScale`,new M(a)],[`patternTexture`,new M(null)]])}),this.blendMode.addEventListener(`change`,e=>{this.blendMode.blendFunction===z.ALPHA?this.defines.set(`ALPHA`,`1`):this.defines.delete(`ALPHA`),this.setChanged()}),this.blendMode.blendFunction=r,this.patternTexture=i,this.xRay=p,this.scene=e,this.camera=n,this.renderTargetMask=new c(1,1),this.renderTargetMask.samples=m,this.renderTargetMask.texture.name=`Outline.Mask`,this.uniforms.get(`maskTexture`).value=this.renderTargetMask.texture,this.renderTargetOutline=new c(1,1,{depthBuffer:!1}),this.renderTargetOutline.texture.name=`Outline.Edges`,this.uniforms.get(`edgeTexture`).value=this.renderTargetOutline.texture,this.clearPass=new ve,this.clearPass.overrideClearColor=new t(0),this.clearPass.overrideClearAlpha=1,this.depthPass=new xn(e,n),this.maskPass=new zt(e,n,new _n(this.depthPass.texture,n));let b=this.maskPass.clearPass;b.overrideClearColor=new t(16777215),b.overrideClearAlpha=1,this.blurPass=new H({resolutionScale:h,resolutionX:v,resolutionY:y,kernelSize:d}),this.blurPass.enabled=f;let x=this.blurPass.resolution;x.addEventListener(`change`,e=>this.setSize(x.baseWidth,x.baseHeight)),this.outlinePass=new W(new bn);let S=this.outlinePass.fullscreenMaterial;S.inputBuffer=this.renderTargetMask.texture,this.time=0,this.forceUpdate=!0,this.selection=new Ne,this.pulseSpeed=s}set mainScene(e){this.scene=e,this.depthPass.mainScene=e,this.maskPass.mainScene=e}set mainCamera(e){this.camera=e,this.depthPass.mainCamera=e,this.maskPass.mainCamera=e,this.maskPass.overrideMaterial.copyCameraSettings(e)}get resolution(){return this.blurPass.resolution}getResolution(){return this.blurPass.getResolution()}get multisampling(){return this.renderTargetMask.samples}set multisampling(e){this.renderTargetMask.samples=e,this.renderTargetMask.dispose()}get patternScale(){return this.uniforms.get(`patternScale`).value}set patternScale(e){this.uniforms.get(`patternScale`).value=e}get edgeStrength(){return this.uniforms.get(`edgeStrength`).value}set edgeStrength(e){this.uniforms.get(`edgeStrength`).value=e}get visibleEdgeColor(){return this.uniforms.get(`visibleEdgeColor`).value}set visibleEdgeColor(e){this.uniforms.get(`visibleEdgeColor`).value=e}get hiddenEdgeColor(){return this.uniforms.get(`hiddenEdgeColor`).value}set hiddenEdgeColor(e){this.uniforms.get(`hiddenEdgeColor`).value=e}getBlurPass(){return this.blurPass}getSelection(){return this.selection}getPulseSpeed(){return this.pulseSpeed}setPulseSpeed(e){this.pulseSpeed=e}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get selectionLayer(){return this.selection.layer}set selectionLayer(e){this.selection.layer=e}get dithering(){return this.blurPass.dithering}set dithering(e){this.blurPass.dithering=e}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(e){this.blurPass.kernelSize=e}get blur(){return this.blurPass.enabled}set blur(e){this.blurPass.enabled=e}get xRay(){return this.defines.has(`X_RAY`)}set xRay(e){this.xRay!==e&&(e?this.defines.set(`X_RAY`,`1`):this.defines.delete(`X_RAY`),this.setChanged())}isXRayEnabled(){return this.xRay}setXRayEnabled(e){this.xRay=e}get patternTexture(){return this.uniforms.get(`patternTexture`).value}set patternTexture(e){e===null?(this.defines.delete(`USE_PATTERN`),this.setVertexShader(null)):(e.wrapS=e.wrapT=d,this.defines.set(`USE_PATTERN`,`1`),this.setVertexShader(Cn)),this.uniforms.get(`patternTexture`).value=e,this.setChanged()}setPatternTexture(e){this.patternTexture=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}setSelection(e){return this.selection.set(e),this}clearSelection(){return this.selection.clear(),this}selectObject(e){return this.selection.add(e),this}deselectObject(e){return this.selection.delete(e),this}update(e,t,n){let r=this.scene,i=this.camera,a=this.selection,o=this.uniforms.get(`pulse`),s=r.background,c=i.layers.mask;(this.forceUpdate||a.size>0)&&(r.background=null,o.value=1,this.pulseSpeed>0&&(o.value=Math.cos(this.time*this.pulseSpeed*10)*.375+.625),this.time+=n,a.setVisible(!1),this.depthPass.render(e),a.setVisible(!0),i.layers.set(a.layer),this.maskPass.render(e,this.renderTargetMask),i.layers.mask=c,r.background=s,this.outlinePass.render(e,null,this.renderTargetOutline),this.blurPass.enabled&&this.blurPass.render(e,this.renderTargetOutline,this.renderTargetOutline)),this.forceUpdate=a.size>0}setSize(e,t){this.blurPass.setSize(e,t),this.renderTargetMask.setSize(e,t);let n=this.resolution;n.setBaseSize(e,t);let r=n.width,i=n.height;this.depthPass.setSize(r,i),this.renderTargetOutline.setSize(r,i),this.outlinePass.fullscreenMaterial.setSize(r,i)}initialize(e,t,n){this.blurPass.initialize(e,t,ce),n!==void 0&&(this.depthPass.initialize(e,t,n),this.maskPass.initialize(e,t,n),this.outlinePass.initialize(e,t,n))}},Tn=`uniform bool active;uniform vec4 d;void mainUv(inout vec2 uv){if(active){uv=d.xy*(floor(uv*d.zw)+0.5);}}`,En=class extends B{constructor(e=30){super(`PixelationEffect`,Tn,{uniforms:new Map([[`active`,new M(!1)],[`d`,new M(new E)]])}),this.resolution=new D,this._granularity=0,this.granularity=e}get granularity(){return this._granularity}set granularity(e){let t=Math.floor(e);t%2>0&&(t+=1),this._granularity=t,this.uniforms.get(`active`).value=t>0,this.setSize(this.resolution.width,this.resolution.height)}getGranularity(){return this.granularity}setGranularity(e){this.granularity=e}setSize(e,t){let n=this.resolution;n.set(e,t);let r=this.granularity,i=r/n.x,a=r/n.y;this.uniforms.get(`d`).value.set(i,a,1/i,1/a)}},Dn=`uniform float focus;uniform float focalLength;uniform float fStop;uniform float maxBlur;uniform float luminanceThreshold;uniform float luminanceGain;uniform float bias;uniform float fringe; -#ifdef MANUAL_DOF -uniform vec4 dof; -#endif -#ifdef PENTAGON -float pentagon(const in vec2 coords){const vec4 HS0=vec4(1.0,0.0,0.0,1.0);const vec4 HS1=vec4(0.309016994,0.951056516,0.0,1.0);const vec4 HS2=vec4(-0.809016994,0.587785252,0.0,1.0);const vec4 HS3=vec4(-0.809016994,-0.587785252,0.0,1.0);const vec4 HS4=vec4(0.309016994,-0.951056516,0.0,1.0);const vec4 HS5=vec4(0.0,0.0,1.0,1.0);const vec4 ONE=vec4(1.0);const float P_FEATHER=0.4;const float N_FEATHER=-P_FEATHER;float inOrOut=-4.0;vec4 P=vec4(coords,vec2(RINGS_FLOAT-1.3));vec4 dist=vec4(dot(P,HS0),dot(P,HS1),dot(P,HS2),dot(P,HS3));dist=smoothstep(N_FEATHER,P_FEATHER,dist);inOrOut+=dot(dist,ONE);dist.x=dot(P,HS4);dist.y=HS5.w-abs(P.z);dist=smoothstep(N_FEATHER,P_FEATHER,dist);inOrOut+=dist.x;return clamp(inOrOut,0.0,1.0);} -#endif -vec3 processTexel(const in vec2 coords,const in float blur){vec2 scale=texelSize*fringe*blur;vec3 c=vec3(texture2D(inputBuffer,coords+vec2(0.0,1.0)*scale).r,texture2D(inputBuffer,coords+vec2(-0.866,-0.5)*scale).g,texture2D(inputBuffer,coords+vec2(0.866,-0.5)*scale).b);float luminance=linearToRelativeLuminance(c);float threshold=max((luminance-luminanceThreshold)*luminanceGain,0.0);return c+mix(vec3(0.0),c,threshold*blur);}float gather(const in float i,const in float j,const in float ringSamples,const in vec2 uv,const in vec2 blurFactor,const in float blur,inout vec3 color){float step=PI2/ringSamples;vec2 wh=vec2(cos(j*step)*i,sin(j*step)*i); -#ifdef PENTAGON -float p=pentagon(wh); -#else -float p=1.0; -#endif -color+=processTexel(wh*blurFactor+uv,blur)*mix(1.0,i/RINGS_FLOAT,bias)*p;return mix(1.0,i/RINGS_FLOAT,bias)*p;}void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){ -#ifdef PERSPECTIVE_CAMERA -float viewZ=perspectiveDepthToViewZ(depth,cameraNear,cameraFar);float linearDepth=viewZToOrthographicDepth(viewZ,cameraNear,cameraFar); -#else -float linearDepth=depth; -#endif -#ifdef MANUAL_DOF -float focalPlane=linearDepth-focus;float farDoF=(focalPlane-dof.z)/dof.w;float nearDoF=(-focalPlane-dof.x)/dof.y;float blur=(focalPlane>0.0)?farDoF:nearDoF; -#else -const float CIRCLE_OF_CONFUSION=0.03;float focalPlaneMM=focus*1000.0;float depthMM=linearDepth*1000.0;float focalPlane=(depthMM*focalLength)/(depthMM-focalLength);float farDoF=(focalPlaneMM*focalLength)/(focalPlaneMM-focalLength);float nearDoF=(focalPlaneMM-focalLength)/(focalPlaneMM*fStop*CIRCLE_OF_CONFUSION);float blur=abs(focalPlane-farDoF)*nearDoF; -#endif -const int MAX_RING_SAMPLES=RINGS_INT*SAMPLES_INT;blur=clamp(blur,0.0,1.0);vec3 color=inputColor.rgb;if(blur>=0.05){vec2 blurFactor=blur*maxBlur*texelSize;float s=1.0;int ringSamples;for(int i=1;i<=RINGS_INT;i++){ringSamples=i*SAMPLES_INT;for(int j=0;j=ringSamples){break;}s+=gather(float(i),float(j),float(ringSamples),uv,blurFactor,blur,color);}}color/=s;} -#ifdef SHOW_FOCUS -float edge=0.002*linearDepth;float m=clamp(smoothstep(0.0,edge,blur),0.0,1.0);float e=clamp(smoothstep(1.0-edge,1.0,blur),0.0,1.0);color=mix(color,vec3(1.0,0.5,0.0),(1.0-m)*0.6);color=mix(color,vec3(0.0,0.5,1.0),((1.0-e)-(1.0-m))*0.2); -#endif -outputColor=vec4(color,inputColor.a);}`,On=class extends B{constructor({blendFunction:e,focus:t=1,focalLength:n=24,fStop:r=.9,luminanceThreshold:i=.5,luminanceGain:a=2,bias:o=.5,fringe:s=.7,maxBlur:c=1,rings:l=3,samples:u=2,showFocus:d=!1,manualDoF:f=!1,pentagon:p=!1}={}){super(`RealisticBokehEffect`,Dn,{blendFunction:e,attributes:F.CONVOLUTION|F.DEPTH,uniforms:new Map([[`focus`,new M(t)],[`focalLength`,new M(n)],[`fStop`,new M(r)],[`luminanceThreshold`,new M(i)],[`luminanceGain`,new M(a)],[`bias`,new M(o)],[`fringe`,new M(s)],[`maxBlur`,new M(c)],[`dof`,new M(null)]])}),this.rings=l,this.samples=u,this.showFocus=d,this.manualDoF=f,this.pentagon=p}get rings(){return Number.parseInt(this.defines.get(`RINGS_INT`))}set rings(e){let t=Math.floor(e);this.defines.set(`RINGS_INT`,t.toFixed(0)),this.defines.set(`RINGS_FLOAT`,t.toFixed(1)),this.setChanged()}get samples(){return Number.parseInt(this.defines.get(`SAMPLES_INT`))}set samples(e){let t=Math.floor(e);this.defines.set(`SAMPLES_INT`,t.toFixed(0)),this.defines.set(`SAMPLES_FLOAT`,t.toFixed(1)),this.setChanged()}get showFocus(){return this.defines.has(`SHOW_FOCUS`)}set showFocus(e){this.showFocus!==e&&(e?this.defines.set(`SHOW_FOCUS`,`1`):this.defines.delete(`SHOW_FOCUS`),this.setChanged())}get manualDoF(){return this.defines.has(`MANUAL_DOF`)}set manualDoF(e){this.manualDoF!==e&&(e?(this.defines.set(`MANUAL_DOF`,`1`),this.uniforms.get(`dof`).value=new E(.2,1,.2,2)):(this.defines.delete(`MANUAL_DOF`),this.uniforms.get(`dof`).value=null),this.setChanged())}get pentagon(){return this.defines.has(`PENTAGON`)}set pentagon(e){this.pentagon!==e&&(e?this.defines.set(`PENTAGON`,`1`):this.defines.delete(`PENTAGON`),this.setChanged())}},kn=`uniform float count; -#ifdef SCROLL -uniform float scrollSpeed; -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){float y=uv.y; -#ifdef SCROLL -y+=time*scrollSpeed; -#endif -vec2 sl=vec2(sin(y*count),cos(y*count));outputColor=vec4(sl.xyx,inputColor.a);}`,An=class extends B{constructor({blendFunction:e=z.OVERLAY,density:t=1.25,scrollSpeed:n=0}={}){super(`ScanlineEffect`,kn,{blendFunction:e,uniforms:new Map([[`count`,new M(0)],[`scrollSpeed`,new M(0)]])}),this.resolution=new D,this.d=t,this.scrollSpeed=n}get density(){return this.d}set density(e){this.d=e,this.setSize(this.resolution.width,this.resolution.height)}getDensity(){return this.density}setDensity(e){this.density=e}get scrollSpeed(){return this.uniforms.get(`scrollSpeed`).value}set scrollSpeed(e){this.uniforms.get(`scrollSpeed`).value=e,e===0?this.defines.delete(`SCROLL`)&&this.setChanged():this.defines.has(`SCROLL`)||(this.defines.set(`SCROLL`,`1`),this.setChanged())}setSize(e,t){this.resolution.set(e,t),this.uniforms.get(`count`).value=Math.round(t*this.density)}},jn=`uniform bool active;uniform vec2 center;uniform float waveSize;uniform float radius;uniform float maxRadius;uniform float amplitude;varying float vSize;void mainUv(inout vec2 uv){if(active){vec2 aspectCorrection=vec2(aspect,1.0);vec2 difference=uv*aspectCorrection-center*aspectCorrection;float distance=sqrt(dot(difference,difference))*vSize;if(distance>radius){if(distanceNn,o.value&&(a.get(`cameraDistance`).value=i.position.distanceTo(r),Pn.copy(r).project(i),this.screenPosition.set((Pn.x+1)*.5,(Pn.y+1)*.5)),this.time+=n*this.speed;let t=this.time-e;a.get(`radius`).value=t,t>=(a.get(`maxRadius`).value+e)*2&&(this.active=!1,o.value=!1)}}},Ln=`#include -#include -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer0;uniform highp sampler2D depthBuffer1; -#else -uniform mediump sampler2D depthBuffer0;uniform mediump sampler2D depthBuffer1; -#endif -uniform sampler2D inputBuffer;uniform vec2 cameraNearFar;float getViewZ(const in float depth){ -#ifdef PERSPECTIVE_CAMERA -return perspectiveDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y); -#else -return orthographicDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y); -#endif -}varying vec2 vUv;void main(){vec2 depth; -#if DEPTH_PACKING_0 == 3201 -depth.x=unpackRGBAToDepth(texture2D(depthBuffer0,vUv)); -#else -depth.x=texture2D(depthBuffer0,vUv).r; -#endif -#if DEPTH_PACKING_1 == 3201 -depth.y=unpackRGBAToDepth(texture2D(depthBuffer1,vUv)); -#else -depth.y=texture2D(depthBuffer1,vUv).r; -#endif -#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) -float a=cameraNearFar.y/(cameraNearFar.y-cameraNearFar.x);float b=cameraNearFar.y*cameraNearFar.x/(cameraNearFar.x-cameraNearFar.y);float c=log2(cameraNearFar.y+1.0);float d=pow(2.0,depth.x*c)-1.0;depth.x=a+b/d;d=pow(2.0,depth.y*c)-1.0;depth.y=a+b/d; -#elif defined(USE_REVERSED_DEPTH_BUFFER) -depth.x=1.0-depth.x;depth.y=1.0-depth.y; -#endif -bool isMaxDepth=(depth.x==1.0); -#ifdef PERSPECTIVE_CAMERA -depth.x=viewZToOrthographicDepth(getViewZ(depth.x),cameraNearFar.x,cameraNearFar.y);depth.y=viewZToOrthographicDepth(getViewZ(depth.y),cameraNearFar.x,cameraNearFar.y); -#endif -#if DEPTH_TEST_STRATEGY == 0 -bool keep=depthTest(depth.x,depth.y); -#elif DEPTH_TEST_STRATEGY == 1 -bool keep=isMaxDepth||depthTest(depth.x,depth.y); -#else -bool keep=!isMaxDepth&&depthTest(depth.x,depth.y); -#endif -if(keep){gl_FragColor=texture2D(inputBuffer,vUv);}else{discard;}}`,Rn=class extends j{constructor(){super({name:`DepthMaskMaterial`,defines:{DEPTH_EPSILON:`0.0001`,DEPTH_PACKING_0:`0`,DEPTH_PACKING_1:`0`,DEPTH_TEST_STRATEGY:sn.KEEP_MAX_DEPTH},uniforms:{inputBuffer:new M(null),depthBuffer0:new M(null),depthBuffer1:new M(null),cameraNearFar:new M(new D(1,1))},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:Ln,vertexShader:P}),this.depthMode=2}set depthBuffer0(e){this.uniforms.depthBuffer0.value=e}set depthPacking0(e){this.defines.DEPTH_PACKING_0=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer0(e,t=w){this.depthBuffer0=e,this.depthPacking0=t}set depthBuffer1(e){this.uniforms.depthBuffer1.value=e}set depthPacking1(e){this.defines.DEPTH_PACKING_1=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer1(e,t=w){this.depthBuffer1=e,this.depthPacking1=t}get maxDepthStrategy(){return Number(this.defines.DEPTH_TEST_STRATEGY)}set maxDepthStrategy(e){this.defines.DEPTH_TEST_STRATEGY=e.toFixed(0),this.needsUpdate=!0}get keepFar(){return this.maxDepthStrategy}set keepFar(e){this.maxDepthStrategy=e?sn.KEEP_MAX_DEPTH:sn.DISCARD_MAX_DEPTH}getMaxDepthStrategy(){return this.maxDepthStrategy}setMaxDepthStrategy(e){this.maxDepthStrategy=e}get epsilon(){return Number(this.defines.DEPTH_EPSILON)}set epsilon(e){this.defines.DEPTH_EPSILON=e.toFixed(16),this.needsUpdate=!0}getEpsilon(){return this.epsilon}setEpsilon(e){this.epsilon=e}get depthMode(){return Number(this.defines.DEPTH_MODE)}set depthMode(e){let t;switch(e){case 0:t=`false`;break;case 1:t=`true`;break;case 4:t=`abs(d1 - d0) <= DEPTH_EPSILON`;break;case 7:t=`abs(d1 - d0) > DEPTH_EPSILON`;break;case 2:t=`d0 > d1`;break;case 3:t=`d0 >= d1`;break;case 5:t=`d0 <= d1`;break;default:t=`d0 < d1`;break}this.defines.DEPTH_MODE=e.toFixed(0),this.defines[`depthTest(d0, d1)`]=t,this.needsUpdate=!0}getDepthMode(){return this.depthMode}setDepthMode(e){this.depthMode=e}adoptCameraSettings(e){this.copyCameraSettings(e)}copyCameraSettings(e){e&&(this.uniforms.cameraNearFar.value.set(e.near,e.far),e instanceof T?this.defines.PERSPECTIVE_CAMERA=`1`:delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},zn=class extends et{constructor(e,n,r){super(r),this.setAttributes(this.getAttributes()|F.DEPTH),this.camera=n,this.depthPass=new xn(e,n),this.clearPass=new ve(!0,!1,!1),this.clearPass.overrideClearColor=new t(0),this.depthMaskPass=new W(new Rn);let a=this.depthMaskMaterial;a.copyCameraSettings(n),a.depthBuffer1=this.depthPass.texture,a.depthPacking1=i,a.depthMode=4,this.renderTargetMasked=new c(1,1,{depthBuffer:!1}),this.renderTargetMasked.texture.name=`Bloom.Masked`,this.selection=new Ne,this._inverted=!1,this._ignoreBackground=!1}set mainScene(e){this.depthPass.mainScene=e}set mainCamera(e){this.camera=e,this.depthPass.mainCamera=e,this.depthMaskMaterial.copyCameraSettings(e)}getSelection(){return this.selection}get depthMaskMaterial(){return this.depthMaskPass.fullscreenMaterial}get inverted(){return this._inverted}set inverted(e){this._inverted=e,this.depthMaskMaterial.depthMode=e?7:4}isInverted(){return this.inverted}setInverted(e){this.inverted=e}get ignoreBackground(){return this._ignoreBackground}set ignoreBackground(e){this._ignoreBackground=e,this.depthMaskMaterial.maxDepthStrategy=e?sn.DISCARD_MAX_DEPTH:sn.KEEP_MAX_DEPTH}isBackgroundDisabled(){return this.ignoreBackground}setBackgroundDisabled(e){this.ignoreBackground=e}setDepthTexture(e,t=w){this.depthMaskMaterial.depthBuffer0=e,this.depthMaskMaterial.depthPacking0=t}update(e,t,n){let r=this.camera,i=this.selection,a=this.inverted,o=t;if(this.ignoreBackground||!a||i.size>0){let n=r.layers.mask;r.layers.set(i.layer),this.depthPass.render(e),r.layers.mask=n,o=this.renderTargetMasked,this.clearPass.render(e,o),this.depthMaskPass.render(e,t,o)}super.update(e,o,n)}setSize(e,t){super.setSize(e,t),this.renderTargetMasked.setSize(e,t),this.depthPass.setSize(e,t)}initialize(e,t,n){super.initialize(e,t,n),this.clearPass.initialize(e,t,n),this.depthPass.initialize(e,t,n),this.depthMaskPass.initialize(e,t,n),e!==null&&e.capabilities.logarithmicDepthBuffer&&(this.depthMaskPass.fullscreenMaterial.defines.LOG_DEPTH=`1`),n!==void 0&&(this.renderTargetMasked.texture.type=n,e!==null&&e.outputColorSpace===`srgb`&&(this.renderTargetMasked.texture.colorSpace=C))}},Bn=`uniform vec3 weightsR;uniform vec3 weightsG;uniform vec3 weightsB;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=vec3(dot(inputColor.rgb,weightsR),dot(inputColor.rgb,weightsG),dot(inputColor.rgb,weightsB));outputColor=vec4(color,inputColor.a);}`,Vn=class extends B{constructor({blendFunction:e,intensity:t=1}={}){super(`SepiaEffect`,Bn,{blendFunction:e,uniforms:new Map([[`weightsR`,new M(new n(.393,.769,.189))],[`weightsG`,new M(new n(.349,.686,.168))],[`weightsB`,new M(new n(.272,.534,.131))]])})}get intensity(){return this.blendMode.opacity.value}set intensity(e){this.blendMode.opacity.value=e}getIntensity(){return this.intensity}setIntensity(e){this.intensity=e}get weightsR(){return this.uniforms.get(`weightsR`).value}get weightsG(){return this.uniforms.get(`weightsG`).value}get weightsB(){return this.uniforms.get(`weightsB`).value}},Hn=`varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1; -#if EDGE_DETECTION_MODE != 0 -varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5; -#endif -#if EDGE_DETECTION_MODE == 1 -#include -#endif -#if EDGE_DETECTION_MODE == 0 || PREDICATION_MODE == 1 -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -return unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -return texture2D(depthBuffer,uv).r; -#endif -}vec3 gatherNeighbors(){float p=readDepth(vUv);float pLeft=readDepth(vUv0);float pTop=readDepth(vUv1);return vec3(p,pLeft,pTop);} -#elif PREDICATION_MODE == 2 -uniform sampler2D predicationBuffer;vec3 gatherNeighbors(){float p=texture2D(predicationBuffer,vUv).r;float pLeft=texture2D(predicationBuffer,vUv0).r;float pTop=texture2D(predicationBuffer,vUv1).r;return vec3(p,pLeft,pTop);} -#endif -#if PREDICATION_MODE != 0 -vec2 calculatePredicatedThreshold(){vec3 neighbours=gatherNeighbors();vec2 delta=abs(neighbours.xx-neighbours.yz);vec2 edges=step(PREDICATION_THRESHOLD,delta);return PREDICATION_SCALE*EDGE_THRESHOLD*(1.0-PREDICATION_STRENGTH*edges);} -#endif -#if EDGE_DETECTION_MODE != 0 -uniform sampler2D inputBuffer; -#endif -void main(){ -#if EDGE_DETECTION_MODE == 0 -const vec2 threshold=vec2(DEPTH_THRESHOLD); -#elif PREDICATION_MODE != 0 -vec2 threshold=calculatePredicatedThreshold(); -#else -const vec2 threshold=vec2(EDGE_THRESHOLD); -#endif -#if EDGE_DETECTION_MODE == 0 -vec3 neighbors=gatherNeighbors();vec2 delta=abs(neighbors.xx-vec2(neighbors.y,neighbors.z));vec2 edges=step(threshold,delta);if(dot(edges,vec2(1.0))==0.0){discard;}gl_FragColor=vec4(edges,0.0,1.0); -#elif EDGE_DETECTION_MODE == 1 -float l=luminance(texture2D(inputBuffer,vUv).rgb);float lLeft=luminance(texture2D(inputBuffer,vUv0).rgb);float lTop=luminance(texture2D(inputBuffer,vUv1).rgb);vec4 delta;delta.xy=abs(l-vec2(lLeft,lTop));vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}float lRight=luminance(texture2D(inputBuffer,vUv2).rgb);float lBottom=luminance(texture2D(inputBuffer,vUv3).rgb);delta.zw=abs(l-vec2(lRight,lBottom));vec2 maxDelta=max(delta.xy,delta.zw);float lLeftLeft=luminance(texture2D(inputBuffer,vUv4).rgb);float lTopTop=luminance(texture2D(inputBuffer,vUv5).rgb);delta.zw=abs(vec2(lLeft,lTop)-vec2(lLeftLeft,lTopTop));maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges.xy*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0); -#elif EDGE_DETECTION_MODE == 2 -vec4 delta;vec3 c=texture2D(inputBuffer,vUv).rgb;vec3 cLeft=texture2D(inputBuffer,vUv0).rgb;vec3 t=abs(c-cLeft);delta.x=max(max(t.r,t.g),t.b);vec3 cTop=texture2D(inputBuffer,vUv1).rgb;t=abs(c-cTop);delta.y=max(max(t.r,t.g),t.b);vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}vec3 cRight=texture2D(inputBuffer,vUv2).rgb;t=abs(c-cRight);delta.z=max(max(t.r,t.g),t.b);vec3 cBottom=texture2D(inputBuffer,vUv3).rgb;t=abs(c-cBottom);delta.w=max(max(t.r,t.g),t.b);vec2 maxDelta=max(delta.xy,delta.zw);vec3 cLeftLeft=texture2D(inputBuffer,vUv4).rgb;t=abs(c-cLeftLeft);delta.z=max(max(t.r,t.g),t.b);vec3 cTopTop=texture2D(inputBuffer,vUv5).rgb;t=abs(c-cTopTop);delta.w=max(max(t.r,t.g),t.b);maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0); -#endif -}`,Un=`uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1; -#if EDGE_DETECTION_MODE != 0 -varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5; -#endif -void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,0.0);vUv1=vUv+texelSize*vec2(0.0,-1.0); -#if EDGE_DETECTION_MODE != 0 -vUv2=vUv+texelSize*vec2(1.0,0.0);vUv3=vUv+texelSize*vec2(0.0,1.0);vUv4=vUv+texelSize*vec2(-2.0,0.0);vUv5=vUv+texelSize*vec2(0.0,-2.0); -#endif -gl_Position=vec4(position.xy,1.0,1.0);}`,Wn=class extends j{constructor(e=new D,t=cn.COLOR){super({name:`EdgeDetectionMaterial`,defines:{THREE_REVISION:o.replace(/\D+/g,``),LOCAL_CONTRAST_ADAPTATION_FACTOR:`2.0`,EDGE_THRESHOLD:`0.1`,DEPTH_THRESHOLD:`0.01`,PREDICATION_MODE:`0`,PREDICATION_THRESHOLD:`0.01`,PREDICATION_SCALE:`2.0`,PREDICATION_STRENGTH:`1.0`,DEPTH_PACKING:`0`},uniforms:{inputBuffer:new M(null),depthBuffer:new M(null),predicationBuffer:new M(null),texelSize:new M(e)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:Hn,vertexShader:Un}),this.edgeDetectionMode=t}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=w){this.depthBuffer=e,this.depthPacking=t}get edgeDetectionMode(){return Number(this.defines.EDGE_DETECTION_MODE)}set edgeDetectionMode(e){this.defines.EDGE_DETECTION_MODE=e.toFixed(0),this.needsUpdate=!0}getEdgeDetectionMode(){return this.edgeDetectionMode}setEdgeDetectionMode(e){this.edgeDetectionMode=e}get localContrastAdaptationFactor(){return Number(this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR)}set localContrastAdaptationFactor(e){this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR=e.toFixed(`6`),this.needsUpdate=!0}getLocalContrastAdaptationFactor(){return this.localContrastAdaptationFactor}setLocalContrastAdaptationFactor(e){this.localContrastAdaptationFactor=e}get edgeDetectionThreshold(){return Number(this.defines.EDGE_THRESHOLD)}set edgeDetectionThreshold(e){this.defines.EDGE_THRESHOLD=e.toFixed(`6`),this.defines.DEPTH_THRESHOLD=(e*.1).toFixed(`6`),this.needsUpdate=!0}getEdgeDetectionThreshold(){return this.edgeDetectionThreshold}setEdgeDetectionThreshold(e){this.edgeDetectionThreshold=e}get predicationMode(){return Number(this.defines.PREDICATION_MODE)}set predicationMode(e){this.defines.PREDICATION_MODE=e.toFixed(0),this.needsUpdate=!0}getPredicationMode(){return this.predicationMode}setPredicationMode(e){this.predicationMode=e}set predicationBuffer(e){this.uniforms.predicationBuffer.value=e}setPredicationBuffer(e){this.uniforms.predicationBuffer.value=e}get predicationThreshold(){return Number(this.defines.PREDICATION_THRESHOLD)}set predicationThreshold(e){this.defines.PREDICATION_THRESHOLD=e.toFixed(`6`),this.needsUpdate=!0}getPredicationThreshold(){return this.predicationThreshold}setPredicationThreshold(e){this.predicationThreshold=e}get predicationScale(){return Number(this.defines.PREDICATION_SCALE)}set predicationScale(e){this.defines.PREDICATION_SCALE=e.toFixed(`6`),this.needsUpdate=!0}getPredicationScale(){return this.predicationScale}setPredicationScale(e){this.predicationScale=e}get predicationStrength(){return Number(this.defines.PREDICATION_STRENGTH)}set predicationStrength(e){this.defines.PREDICATION_STRENGTH=e.toFixed(`6`),this.needsUpdate=!0}getPredicationStrength(){return this.predicationStrength}setPredicationStrength(e){this.predicationStrength=e}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},Gn=`#define sampleLevelZeroOffset(t, coord, offset) texture2D(t, coord + offset * texelSize) -#if __VERSION__ < 300 -#define round(v) floor(v + 0.5) -#endif -#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -uniform lowp sampler2D areaTexture;uniform lowp sampler2D searchTexture;uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}vec2 decodeDiagBilinearAccess(in vec2 e){e.r=e.r*abs(5.0*e.r-5.0*0.75);return round(e);}vec4 decodeDiagBilinearAccess(in vec4 e){e.rb=e.rb*abs(5.0*e.rb-5.0*0.75);return round(e);}vec2 searchDiag1(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);vec3 t=vec3(texelSize,1.0);for(int i=0;i0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 searchDiag2(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);coord.x+=0.25*texelSize.x;vec3 t=vec3(texelSize,1.0);for(int i=0;i0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;e=decodeDiagBilinearAccess(e);coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 areaDiag(const in vec2 dist,const in vec2 e,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE_DIAG,AREATEX_MAX_DISTANCE_DIAG)*e+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.x+=0.5;texCoord.y+=AREATEX_SUBTEX_SIZE*offset;return texture2D(areaTexture,texCoord).rg;}vec2 calculateDiagWeights(const in vec2 texCoord,const in vec2 e,const in vec4 subsampleIndices){vec2 weights=vec2(0.0);vec4 d;vec2 end;if(e.r>0.0){d.xz=searchDiag1(texCoord,vec2(-1.0,1.0),end);d.x+=float(end.y>0.9);}else{d.xz=vec2(0.0);}d.yw=searchDiag1(texCoord,vec2(1.0,-1.0),end);if(d.x+d.y>2.0){vec4 coords=vec4(-d.x+0.25,d.x,d.y,-d.y-0.25)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.xy=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).rg;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).rg;c.yxwz=decodeDiagBilinearAccess(c.xyzw);vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.z);}d.xz=searchDiag2(texCoord,vec2(-1.0,-1.0),end);if(sampleLevelZeroOffset(inputBuffer,texCoord,vec2(1,0)).r>0.0){d.yw=searchDiag2(texCoord,vec2(1.0),end);d.y+=float(end.y>0.9);}else{d.yw=vec2(0.0);}if(d.x+d.y>2.0){vec4 coords=vec4(-d.x,-d.x,d.y,d.y)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.x=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).g;c.y=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(0,-1)).r;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).gr;vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.w).gr;}return weights;}float searchLength(const in vec2 e,const in float offset){vec2 scale=SEARCHTEX_SIZE*vec2(0.5,-1.0);vec2 bias=SEARCHTEX_SIZE*vec2(offset,1.0);scale+=vec2(-1.0,1.0);bias+=vec2(0.5,-0.5);scale*=1.0/SEARCHTEX_PACKED_SIZE;bias*=1.0/SEARCHTEX_PACKED_SIZE;return texture2D(searchTexture,scale*e+bias).r;}float searchXLeft(in vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;iend&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(-2.0,0.0)*texelSize+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.0)+3.25;return texelSize.x*offset+texCoord.x;}float searchXRight(vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(2.0,0.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.5)+3.25;return-texelSize.x*offset+texCoord.x;}float searchYUp(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;iend&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=-vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.0)+3.25;return texelSize.y*offset+texCoord.y;}float searchYDown(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.5)+3.25;return-texelSize.y*offset+texCoord.y;}vec2 area(const in vec2 dist,const in float e1,const in float e2,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE)*round(4.0*vec2(e1,e2))+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.y=AREATEX_SUBTEX_SIZE*offset+texCoord.y;return texture2D(areaTexture,texCoord).rg;}void detectHorizontalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){ -#if !defined(DISABLE_CORNER_DETECTION) -vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,1)).r;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).r;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,-2)).r;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,-2)).r;weights*=clamp(factor,0.0,1.0); -#endif -}void detectVerticalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){ -#if !defined(DISABLE_CORNER_DETECTION) -vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(1,0)).g;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).g;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(-2,0)).g;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(-2,1)).g;weights*=clamp(factor,0.0,1.0); -#endif -}void main(){vec4 weights=vec4(0.0);vec4 subsampleIndices=vec4(0.0);vec2 e=texture2D(inputBuffer,vUv).rg;if(e.g>0.0){ -#if !defined(DISABLE_DIAG_DETECTION) -weights.rg=calculateDiagWeights(vUv,e,subsampleIndices);if(weights.r==-weights.g){ -#endif -vec2 d;vec3 coords;coords.x=searchXLeft(vOffset[0].xy,vOffset[2].x);coords.y=vOffset[1].y;d.x=coords.x;float e1=texture2D(inputBuffer,coords.xy).r;coords.z=searchXRight(vOffset[0].zw,vOffset[2].y);d.y=coords.z;d=round(resolution.xx*d+-vPixCoord.xx);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.zy,vec2(1,0)).r;weights.rg=area(sqrtD,e1,e2,subsampleIndices.y);coords.y=vUv.y;detectHorizontalCornerPattern(weights.rg,coords.xyzy,d); -#if !defined(DISABLE_DIAG_DETECTION) -}else{e.r=0.0;} -#endif -}if(e.r>0.0){vec2 d;vec3 coords;coords.y=searchYUp(vOffset[1].xy,vOffset[2].z);coords.x=vOffset[0].x;d.x=coords.y;float e1=texture2D(inputBuffer,coords.xy).g;coords.z=searchYDown(vOffset[1].zw,vOffset[2].w);d.y=coords.z;d=round(resolution.yy*d-vPixCoord.yy);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.xz,vec2(0,1)).g;weights.ba=area(sqrtD,e1,e2,subsampleIndices.x);coords.x=vUv.x;detectVerticalCornerPattern(weights.ba,coords.xyxz,d);}gl_FragColor=weights;}`,Kn=`uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void main(){vUv=position.xy*0.5+0.5;vPixCoord=vUv*resolution;vOffset[0]=vUv.xyxy+texelSize.xyxy*vec4(-0.25,-0.125,1.25,-0.125);vOffset[1]=vUv.xyxy+texelSize.xyxy*vec4(-0.125,-0.25,-0.125,1.25);vOffset[2]=vec4(vOffset[0].xz,vOffset[1].yw)+vec4(-2.0,2.0,-2.0,2.0)*texelSize.xxyy*MAX_SEARCH_STEPS_FLOAT;gl_Position=vec4(position.xy,1.0,1.0);}`,qn=class extends j{constructor(e=new D,t=new D){super({name:`SMAAWeightsMaterial`,defines:{MAX_SEARCH_STEPS_INT:`16`,MAX_SEARCH_STEPS_FLOAT:`16.0`,MAX_SEARCH_STEPS_DIAG_INT:`8`,MAX_SEARCH_STEPS_DIAG_FLOAT:`8.0`,CORNER_ROUNDING:`25`,CORNER_ROUNDING_NORM:`0.25`,AREATEX_MAX_DISTANCE:`16.0`,AREATEX_MAX_DISTANCE_DIAG:`20.0`,AREATEX_PIXEL_SIZE:`(1.0 / vec2(160.0, 560.0))`,AREATEX_SUBTEX_SIZE:`(1.0 / 7.0)`,SEARCHTEX_SIZE:`vec2(66.0, 33.0)`,SEARCHTEX_PACKED_SIZE:`vec2(64.0, 16.0)`},uniforms:{inputBuffer:new M(null),searchTexture:new M(null),areaTexture:new M(null),resolution:new M(t),texelSize:new M(e)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:Gn,vertexShader:Kn})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get searchTexture(){return this.uniforms.searchTexture.value}set searchTexture(e){this.uniforms.searchTexture.value=e}get areaTexture(){return this.uniforms.areaTexture.value}set areaTexture(e){this.uniforms.areaTexture.value=e}setLookupTextures(e,t){this.searchTexture=e,this.areaTexture=t}get orthogonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_INT)}set orthogonalSearchSteps(e){let t=Math.min(Math.max(e,0),112);this.defines.MAX_SEARCH_STEPS_INT=t.toFixed(`0`),this.defines.MAX_SEARCH_STEPS_FLOAT=t.toFixed(`1`),this.needsUpdate=!0}setOrthogonalSearchSteps(e){this.orthogonalSearchSteps=e}get diagonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_DIAG_INT)}set diagonalSearchSteps(e){let t=Math.min(Math.max(e,0),20);this.defines.MAX_SEARCH_STEPS_DIAG_INT=t.toFixed(`0`),this.defines.MAX_SEARCH_STEPS_DIAG_FLOAT=t.toFixed(`1`),this.needsUpdate=!0}setDiagonalSearchSteps(e){this.diagonalSearchSteps=e}get diagonalDetection(){return this.defines.DISABLE_DIAG_DETECTION===void 0}set diagonalDetection(e){e?delete this.defines.DISABLE_DIAG_DETECTION:this.defines.DISABLE_DIAG_DETECTION=`1`,this.needsUpdate=!0}isDiagonalDetectionEnabled(){return this.diagonalDetection}setDiagonalDetectionEnabled(e){this.diagonalDetection=e}get cornerRounding(){return Number(this.defines.CORNER_ROUNDING)}set cornerRounding(e){let t=Math.min(Math.max(e,0),100);this.defines.CORNER_ROUNDING=t.toFixed(`4`),this.defines.CORNER_ROUNDING_NORM=(t/100).toFixed(`4`),this.needsUpdate=!0}setCornerRounding(e){this.cornerRounding=e}get cornerDetection(){return this.defines.DISABLE_CORNER_DETECTION===void 0}set cornerDetection(e){e?delete this.defines.DISABLE_CORNER_DETECTION:this.defines.DISABLE_CORNER_DETECTION=`1`,this.needsUpdate=!0}isCornerRoundingEnabled(){return this.cornerDetection}setCornerRoundingEnabled(e){this.cornerDetection=e}setSize(e,t){let n=this.uniforms;n.texelSize.value.set(1/e,1/t),n.resolution.value.set(e,t)}},Jn=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAQCAYAAACm53kpAAAAeElEQVRYR+2XSwqAMAxEJ168ePEqwRSKhIIiuHjJqiU0gWE+1CQdApcVAMUAuARaMGCX1MIL/Ow13++9lW2s3mW9MWvsnWc/2fvGygwPAN4E8QzAA4CXAB6AHjG4JTHYI1ey3pcx6FHnEfhLDOIBKAmUBK6/ANUDTlROXAHd9EC1AAAAAElFTkSuQmCC`,Yn=`data:image/png;base64,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`,Xn=`uniform sampler2D weightMap;varying vec2 vOffset0;varying vec2 vOffset1;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 a;a.x=texture2D(weightMap,vOffset0).a;a.y=texture2D(weightMap,vOffset1).g;a.wz=texture2D(weightMap,uv).rb;vec4 color=inputColor;if(dot(a,vec4(1.0))>=1e-5){bool h=max(a.x,a.z)>max(a.y,a.w);vec4 blendingOffset=vec4(0.0,a.y,0.0,a.w);vec2 blendingWeight=a.yw;movec(bvec4(h),blendingOffset,vec4(a.x,0.0,a.z,0.0));movec(bvec2(h),blendingWeight,a.xz);blendingWeight/=dot(blendingWeight,vec2(1.0));vec4 blendingCoord=blendingOffset*vec4(texelSize,-texelSize)+uv.xyxy;color=blendingWeight.x*texture2D(inputBuffer,blendingCoord.xy);color+=blendingWeight.y*texture2D(inputBuffer,blendingCoord.zw);}outputColor=color;}`,Zn=`varying vec2 vOffset0;varying vec2 vOffset1;void mainSupport(const in vec2 uv){vOffset0=uv+texelSize*vec2(1.0,0.0);vOffset1=uv+texelSize*vec2(0.0,1.0);}`,Qn=class extends B{constructor({blendFunction:e=z.SRC,preset:n=un.MEDIUM,edgeDetectionMode:r=cn.COLOR,predicationMode:i=ln.DISABLED}={}){super(`SMAAEffect`,Xn,{vertexShader:Zn,blendFunction:e,attributes:F.CONVOLUTION|F.DEPTH,uniforms:new Map([[`weightMap`,new M(null)]])});let a,o;arguments.length>1&&(a=arguments[0],o=arguments[1],arguments.length>2&&(n=arguments[2]),arguments.length>3&&(r=arguments[3])),this.renderTargetEdges=new c(1,1,{depthBuffer:!1}),this.renderTargetEdges.texture.name=`SMAA.Edges`,this.renderTargetWeights=this.renderTargetEdges.clone(),this.renderTargetWeights.texture.name=`SMAA.Weights`,this.uniforms.get(`weightMap`).value=this.renderTargetWeights.texture,this.clearPass=new ve(!0,!1,!1),this.clearPass.overrideClearColor=new t(0),this.clearPass.overrideClearAlpha=1,this.edgeDetectionPass=new W(new Wn),this.edgeDetectionMaterial.edgeDetectionMode=r,this.edgeDetectionMaterial.predicationMode=i,this.weightsPass=new W(new qn);let s=new v;s.onLoad=()=>{let e=new ne(a);e.name=`SMAA.Search`,e.magFilter=k,e.minFilter=k,e.generateMipmaps=!1,e.needsUpdate=!0,e.flipY=!0,this.weightsMaterial.searchTexture=e;let t=new ne(o);t.name=`SMAA.Area`,t.magFilter=u,t.minFilter=u,t.generateMipmaps=!1,t.needsUpdate=!0,t.flipY=!1,this.weightsMaterial.areaTexture=t,this.dispatchEvent({type:`load`})},s.itemStart(`search`),s.itemStart(`area`),a!==void 0&&o!==void 0?(s.itemEnd(`search`),s.itemEnd(`area`)):typeof Image<`u`&&(a=new Image,o=new Image,a.addEventListener(`load`,()=>s.itemEnd(`search`)),o.addEventListener(`load`,()=>s.itemEnd(`area`)),a.src=Jn,o.src=Yn),this.applyPreset(n)}get edgesTexture(){return this.renderTargetEdges.texture}getEdgesTexture(){return this.edgesTexture}get weightsTexture(){return this.renderTargetWeights.texture}getWeightsTexture(){return this.weightsTexture}get edgeDetectionMaterial(){return this.edgeDetectionPass.fullscreenMaterial}get colorEdgesMaterial(){return this.edgeDetectionMaterial}getEdgeDetectionMaterial(){return this.edgeDetectionMaterial}get weightsMaterial(){return this.weightsPass.fullscreenMaterial}getWeightsMaterial(){return this.weightsMaterial}setEdgeDetectionThreshold(e){this.edgeDetectionMaterial.edgeDetectionThreshold=e}setOrthogonalSearchSteps(e){this.weightsMaterial.orthogonalSearchSteps=e}applyPreset(e){let t=this.edgeDetectionMaterial,n=this.weightsMaterial;switch(e){case un.LOW:t.edgeDetectionThreshold=.15,n.orthogonalSearchSteps=4,n.diagonalDetection=!1,n.cornerDetection=!1;break;case un.MEDIUM:t.edgeDetectionThreshold=.1,n.orthogonalSearchSteps=8,n.diagonalDetection=!1,n.cornerDetection=!1;break;case un.HIGH:t.edgeDetectionThreshold=.1,n.orthogonalSearchSteps=16,n.diagonalSearchSteps=8,n.cornerRounding=25,n.diagonalDetection=!0,n.cornerDetection=!0;break;case un.ULTRA:t.edgeDetectionThreshold=.05,n.orthogonalSearchSteps=32,n.diagonalSearchSteps=16,n.cornerRounding=25,n.diagonalDetection=!0,n.cornerDetection=!0;break}}setDepthTexture(e,t=w){this.edgeDetectionMaterial.depthBuffer=e,this.edgeDetectionMaterial.depthPacking=t}update(e,t,n){this.clearPass.render(e,this.renderTargetEdges),this.edgeDetectionPass.render(e,t,this.renderTargetEdges),this.weightsPass.render(e,this.renderTargetEdges,this.renderTargetWeights)}setSize(e,t){this.edgeDetectionMaterial.setSize(e,t),this.weightsMaterial.setSize(e,t),this.renderTargetEdges.setSize(e,t),this.renderTargetWeights.setSize(e,t)}dispose(){let{searchTexture:e,areaTexture:t}=this.weightsMaterial;e!==null&&t!==null&&(e.dispose(),t.dispose()),super.dispose()}static get searchImageDataURL(){return Jn}static get areaImageDataURL(){return Yn}};function $n(e,t,n){return e*(t-n)-t}function er(e,t,n){return Math.min(Math.max((e+t)/(t-n),0),1)}var tr=`#include -#include -uniform vec2 cameraNearFar; -#define cameraNear cameraNearFar.x -#define cameraFar cameraNearFar.y -#ifdef NORMAL_DEPTH -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D normalDepthBuffer; -#else -uniform mediump sampler2D normalDepthBuffer; -#endif -float readDepth(const in vec2 uv){float depth=texture2D(normalDepthBuffer,uv).a; -#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) -float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d; -#endif -return depth;} -#else -uniform lowp sampler2D normalBuffer; -#if DEPTH_PACKING == 3201 -uniform lowp sampler2D depthBuffer; -#elif defined(GL_FRAGMENT_PRECISION_HIGH) -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -float depth=unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -float depth=texture2D(depthBuffer,uv).r; -#endif -#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) -float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d; -#endif -return depth;} -#endif -uniform lowp sampler2D noiseTexture;uniform mat4 inverseProjectionMatrix;uniform mat4 projectionMatrix;uniform vec2 texelSize;uniform float intensity;uniform float minRadiusScale;uniform float fade;uniform float bias;uniform vec2 distanceCutoff;uniform vec2 proximityCutoff;varying vec2 vUv;varying vec2 vUv2;float getViewZ(const in float depth){ -#ifdef PERSPECTIVE_CAMERA -return perspectiveDepthToViewZ(depth,cameraNear,cameraFar); -#else -return orthographicDepthToViewZ(depth,cameraNear,cameraFar); -#endif -}vec3 getViewPosition(const in vec2 screenPosition,const in float depth,const in float viewZ){vec4 clipPosition=vec4(vec3(screenPosition,depth)*2.0-1.0,1.0);float clipW=projectionMatrix[2][3]*viewZ+projectionMatrix[3][3];clipPosition*=clipW;return(inverseProjectionMatrix*clipPosition).xyz;}float getAmbientOcclusion(const in vec3 p,const in vec3 n,const in float depth,const in vec2 uv){float radiusScale=1.0-smoothstep(0.0,distanceCutoff.y,depth);radiusScale=radiusScale*(1.0-minRadiusScale)+minRadiusScale;float radius=RADIUS*radiusScale;float noise=texture2D(noiseTexture,vUv2).r;float baseAngle=noise*PI2;float rings=SPIRAL_TURNS*PI2;float occlusion=0.0;int taps=0;for(int i=0;i1.0||coords.t<0.0||coords.t>1.0){continue;}float sampleDepth=readDepth(coords);float viewZ=getViewZ(sampleDepth); -#ifdef PERSPECTIVE_CAMERA -float linearSampleDepth=viewZToOrthographicDepth(viewZ,cameraNear,cameraFar); -#else -float linearSampleDepth=sampleDepth; -#endif -float proximity=abs(depth-linearSampleDepth);if(proximity -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -#ifdef DOWNSAMPLE_NORMALS -uniform lowp sampler2D normalBuffer; -#endif -varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -return unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -return texture2D(depthBuffer,uv).r; -#endif -}int findBestDepth(const in float samples[4]){float c=(samples[0]+samples[1]+samples[2]+samples[3])*0.25;float distances[4];distances[0]=abs(c-samples[0]);distances[1]=abs(c-samples[1]);distances[2]=abs(c-samples[2]);distances[3]=abs(c-samples[3]);float maxDistance=max(max(distances[0],distances[1]),max(distances[2],distances[3]));int remaining[3];int rejected[3];int i,j,k;for(i=0,j=0,k=0;i<4;++i){if(distances[i]this.setSize(s.baseWidth,s.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}setDepthTexture(e,t=w){this.fullscreenMaterial.depthBuffer=e,this.fullscreenMaterial.depthPacking=t}render(e,t,n,r,i){e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){let n=this.resolution;n.setBaseSize(e,t),this.renderTarget.setSize(n.width,n.height),this.fullscreenMaterial.setSize(e,t)}initialize(e,t,n){let r=e.getContext();if(!(r.getExtension(`EXT_color_buffer_float`)||r.getExtension(`EXT_color_buffer_half_float`)))throw Error(`Rendering to float texture is not supported.`)}},cr=`uniform lowp sampler2D aoBuffer;uniform float luminanceInfluence;uniform float intensity; -#if defined(DEPTH_AWARE_UPSAMPLING) && defined(NORMAL_DEPTH) -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D normalDepthBuffer; -#else -uniform mediump sampler2D normalDepthBuffer; -#endif -#endif -#ifdef COLORIZE -uniform vec3 color; -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){float aoLinear=texture2D(aoBuffer,uv).r; -#if defined(DEPTH_AWARE_UPSAMPLING) && defined(NORMAL_DEPTH) && __VERSION__ == 300 -vec4 normalDepth[4];normalDepth[0]=textureOffset(normalDepthBuffer,uv,ivec2(0,0));normalDepth[1]=textureOffset(normalDepthBuffer,uv,ivec2(0,1));normalDepth[2]=textureOffset(normalDepthBuffer,uv,ivec2(1,0));normalDepth[3]=textureOffset(normalDepthBuffer,uv,ivec2(1,1));float dot01=dot(normalDepth[0].rgb,normalDepth[1].rgb);float dot02=dot(normalDepth[0].rgb,normalDepth[2].rgb);float dot03=dot(normalDepth[0].rgb,normalDepth[3].rgb);float minDot=min(dot01,min(dot02,dot03));float s=step(THRESHOLD,minDot);float smallestDistance=1.0;int index;for(int i=0;i<4;++i){float distance=abs(depth-normalDepth[i].a);if(distancethis.setSize(E.baseWidth,E.baseHeight)),this.camera=e,this.depthDownsamplingPass=new sr({normalBuffer:t,resolutionScale:te}),this.depthDownsamplingPass.enabled=a===null,this.ssaoPass=new W(new rr(e));let D=new Nt(lr,lr,p);D.wrapS=D.wrapT=d;let O=this.ssaoMaterial;O.normalBuffer=t,O.noiseTexture=D,O.minRadiusScale=v,O.samples=r,O.radius=b,O.rings=i,O.fade=ee,O.bias=S,O.distanceThreshold=m,O.distanceFalloff=h,O.proximityThreshold=g,O.proximityFalloff=_,s!==void 0&&(O.worldDistanceThreshold=s),l!==void 0&&(O.worldDistanceFalloff=l),u!==void 0&&(O.worldProximityThreshold=u),f!==void 0&&(O.worldProximityFalloff=f),a!==null&&(this.ssaoMaterial.normalDepthBuffer=a,this.defines.set(`NORMAL_DEPTH`,`1`)),this.depthAwareUpsampling=o,this.color=C}set mainCamera(e){this.camera=e,this.ssaoMaterial.copyCameraSettings(e)}get normalBuffer(){return this.ssaoMaterial.normalBuffer}set normalBuffer(e){this.ssaoMaterial.normalBuffer=e,this.depthDownsamplingPass.fullscreenMaterial.normalBuffer=e}getResolution(){return this.resolution}get ssaoMaterial(){return this.ssaoPass.fullscreenMaterial}getSSAOMaterial(){return this.ssaoMaterial}get samples(){return this.ssaoMaterial.samples}set samples(e){this.ssaoMaterial.samples=e}get rings(){return this.ssaoMaterial.rings}set rings(e){this.ssaoMaterial.rings=e}get radius(){return this.ssaoMaterial.radius}set radius(e){this.ssaoMaterial.radius=e}get depthAwareUpsampling(){return this.defines.has(`DEPTH_AWARE_UPSAMPLING`)}set depthAwareUpsampling(e){this.depthAwareUpsampling!==e&&(e?this.defines.set(`DEPTH_AWARE_UPSAMPLING`,`1`):this.defines.delete(`DEPTH_AWARE_UPSAMPLING`),this.setChanged())}isDepthAwareUpsamplingEnabled(){return this.depthAwareUpsampling}setDepthAwareUpsamplingEnabled(e){this.depthAwareUpsampling=e}get distanceScaling(){return!0}set distanceScaling(e){}get color(){return this.uniforms.get(`color`).value}set color(e){let n=this.uniforms,r=this.defines;e===null?r.has(`COLORIZE`)&&(r.delete(`COLORIZE`),n.get(`color`).value=null,this.setChanged()):r.has(`COLORIZE`)?n.get(`color`).value.set(e):(r.set(`COLORIZE`,`1`),n.get(`color`).value=new t(e),this.setChanged())}get luminanceInfluence(){return this.uniforms.get(`luminanceInfluence`).value}set luminanceInfluence(e){this.uniforms.get(`luminanceInfluence`).value=e}get intensity(){return this.uniforms.get(`intensity`).value}set intensity(e){this.uniforms.get(`intensity`).value=e}getColor(){return this.color}setColor(e){this.color=e}setDistanceCutoff(e,t){this.ssaoMaterial.distanceThreshold=e,this.ssaoMaterial.distanceFalloff=t}setProximityCutoff(e,t){this.ssaoMaterial.proximityThreshold=e,this.ssaoMaterial.proximityFalloff=t}setDepthTexture(e,t=w){this.depthDownsamplingPass.setDepthTexture(e,t),this.ssaoMaterial.depthBuffer=e,this.ssaoMaterial.depthPacking=t}update(e,t,n){let r=this.renderTarget;this.depthDownsamplingPass.enabled&&this.depthDownsamplingPass.render(e),this.ssaoPass.render(e,null,r)}setSize(e,t){let n=this.resolution;n.setBaseSize(e,t);let r=n.width,i=n.height;this.ssaoMaterial.copyCameraSettings(this.camera),this.ssaoMaterial.setSize(r,i),this.renderTarget.setSize(r,i),this.depthDownsamplingPass.resolution.scale=n.scale,this.depthDownsamplingPass.setSize(e,t)}initialize(e,t,n){try{let r=this.uniforms.get(`normalDepthBuffer`).value;r===null&&(this.depthDownsamplingPass.initialize(e,t,n),r=this.depthDownsamplingPass.texture,this.uniforms.get(`normalDepthBuffer`).value=r,this.ssaoMaterial.normalDepthBuffer=r,this.defines.set(`NORMAL_DEPTH`,`1`))}catch{this.depthDownsamplingPass.enabled=!1}}},dr=`#ifdef TEXTURE_PRECISION_HIGH -uniform mediump sampler2D map; -#else -uniform lowp sampler2D map; -#endif -varying vec2 vUv2;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){ -#ifdef UV_TRANSFORM -vec4 texel=texture2D(map,vUv2); -#else -vec4 texel=texture2D(map,uv); -#endif -outputColor=TEXEL;outputColor.a=max(inputColor.a,outputColor.a);}`,fr=`#ifdef ASPECT_CORRECTION -uniform float scale; -#else -uniform mat3 uvTransform; -#endif -varying vec2 vUv2;void mainSupport(const in vec2 uv){ -#ifdef ASPECT_CORRECTION -vUv2=uv*vec2(aspect,1.0)*scale; -#else -vUv2=(uvTransform*vec3(uv,1.0)).xy; -#endif -}`,pr=class extends B{constructor({blendFunction:e,texture:t=null,aspectCorrection:n=!1}={}){super(`TextureEffect`,dr,{blendFunction:e,defines:new Map([[`TEXEL`,`texel`]]),uniforms:new Map([[`map`,new M(null)],[`scale`,new M(1)],[`uvTransform`,new M(null)]])}),this.texture=t,this.aspectCorrection=n}get texture(){return this.uniforms.get(`map`).value}set texture(e){let t=this.texture,n=this.uniforms,r=this.defines;t!==e&&(n.get(`map`).value=e,n.get(`uvTransform`).value=e.matrix,r.delete(`TEXTURE_PRECISION_HIGH`),e!==null&&(e.matrixAutoUpdate?(r.set(`UV_TRANSFORM`,`1`),this.setVertexShader(fr)):(r.delete(`UV_TRANSFORM`),this.setVertexShader(null)),e.type!==1009&&r.set(`TEXTURE_PRECISION_HIGH`,`1`),(t===null||t.type!==e.type||t.encoding!==e.encoding)&&this.setChanged()))}getTexture(){return this.texture}setTexture(e){this.texture=e}get aspectCorrection(){return this.defines.has(`ASPECT_CORRECTION`)}set aspectCorrection(e){this.aspectCorrection!==e&&(e?this.defines.set(`ASPECT_CORRECTION`,`1`):this.defines.delete(`ASPECT_CORRECTION`),this.setChanged())}get uvTransform(){let e=this.texture;return e!==null&&e.matrixAutoUpdate}set uvTransform(e){let t=this.texture;t!==null&&(t.matrixAutoUpdate=e)}setTextureSwizzleRGBA(e,t=e,n=e,r=e){let i=`rgba`,a=``;(e!==U.RED||t!==U.GREEN||n!==U.BLUE||r!==U.ALPHA)&&(a=[`.`,i[e],i[t],i[n],i[r]].join(``)),this.defines.set(`TEXEL`,`texel`+a),this.setChanged()}update(e,t,n){this.texture.matrixAutoUpdate&&this.texture.updateMatrix()}},mr=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -uniform vec4 maskParams;varying vec2 vUv;varying vec2 vUv2;varying vec2 vOffset;float linearGradientMask(const in float x){return smoothstep(maskParams.x,maskParams.y,x)-smoothstep(maskParams.w,maskParams.z,x);}void main(){vec2 dUv=vOffset*(1.0-linearGradientMask(vUv2.y));vec4 sum=texture2D(inputBuffer,vec2(vUv.x-dUv.x,vUv.y+dUv.y));sum+=texture2D(inputBuffer,vec2(vUv.x+dUv.x,vUv.y+dUv.y));sum+=texture2D(inputBuffer,vec2(vUv.x+dUv.x,vUv.y-dUv.y));sum+=texture2D(inputBuffer,vec2(vUv.x-dUv.x,vUv.y-dUv.y));gl_FragColor=sum*0.25; -#include -}`,hr=`uniform vec4 texelSize;uniform float kernel;uniform float scale;uniform float aspect;uniform vec2 rotation;varying vec2 vUv;varying vec2 vUv2;varying vec2 vOffset;void main(){vec2 uv=position.xy*0.5+0.5;vUv=uv;vUv2=(uv-0.5)*2.0*vec2(aspect,1.0);vUv2=vec2(dot(rotation,vUv2),dot(rotation,vec2(vUv2.y,-vUv2.x)));vOffset=(texelSize.xy*vec2(kernel)+texelSize.zw)*scale;gl_Position=vec4(position.xy,1.0,1.0);}`,gr=class extends He{constructor({kernelSize:e=V.MEDIUM,offset:t=0,rotation:n=0,focusArea:r=.4,feather:i=.3}={}){super(),this.fragmentShader=mr,this.vertexShader=hr,this.kernelSize=e,this.uniforms.aspect=new M(1),this.uniforms.rotation=new M(new D),this.uniforms.maskParams=new M(new E),this._offset=t,this._focusArea=r,this._feather=i,this.rotation=n,this.updateParams()}updateParams(){let e=this.uniforms.maskParams.value,t=Math.max(this.focusArea,0),n=Math.max(t-this.feather,0);e.set(this.offset-t,this.offset-n,this.offset+t,this.offset+n)}get rotation(){return Math.acos(this.uniforms.rotation.value.x)}set rotation(e){this.uniforms.rotation.value.set(Math.cos(e),Math.sin(e))}get offset(){return this._offset}set offset(e){this._offset=e,this.updateParams()}get focusArea(){return this._focusArea}set focusArea(e){this._focusArea=e,this.updateParams()}get feather(){return this._feather}set feather(e){this._feather=e,this.updateParams()}setSize(e,t){super.setSize(e,t),this.uniforms.aspect.value=e/t}},_r=class extends H{constructor({offset:e=0,rotation:t=0,focusArea:n=.4,feather:r=.3,kernelSize:i=V.MEDIUM,resolutionScale:a=.5,resolutionX:o=R.AUTO_SIZE,resolutionY:s=R.AUTO_SIZE}={}){super({kernelSize:i,resolutionScale:a,resolutionX:o,resolutionY:s}),this.blurMaterial=new gr({kernelSize:i,offset:e,rotation:t,focusArea:n,feather:r})}},vr=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D map; -#else -uniform lowp sampler2D map; -#endif -uniform vec2 maskParams;varying vec2 vUv2;float linearGradientMask(const in float x){return step(maskParams.x,x)-step(maskParams.y,x);}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){float mask=linearGradientMask(vUv2.y);vec4 texel=texture2D(map,uv);outputColor=mix(texel,inputColor,mask);}`,yr=`uniform vec2 rotation;varying vec2 vUv2;void mainSupport(const in vec2 uv){vUv2=(uv-0.5)*2.0*vec2(aspect,1.0);vUv2=vec2(dot(rotation,vUv2),dot(rotation,vec2(vUv2.y,-vUv2.x)));}`,br=class extends B{constructor({blendFunction:e,offset:t=0,rotation:n=0,focusArea:r=.4,feather:i=.3,kernelSize:a=V.MEDIUM,resolutionScale:o=.5,resolutionX:s=R.AUTO_SIZE,resolutionY:l=R.AUTO_SIZE}={}){super(`TiltShiftEffect`,vr,{vertexShader:yr,blendFunction:e,uniforms:new Map([[`rotation`,new M(new D)],[`maskParams`,new M(new D)],[`map`,new M(null)]])}),this._offset=t,this._focusArea=r,this._feather=i,this.renderTarget=new c(1,1,{depthBuffer:!1}),this.renderTarget.texture.name=`TiltShift.Target`,this.uniforms.get(`map`).value=this.renderTarget.texture,this.blurPass=new _r({kernelSize:a,resolutionScale:o,resolutionX:s,resolutionY:l,offset:t,rotation:n,focusArea:r,feather:i});let u=this.resolution=new R(this,s,l,o);u.addEventListener(`change`,e=>this.setSize(u.baseWidth,u.baseHeight)),this.rotation=n,this.updateParams()}updateParams(){let e=this.uniforms.get(`maskParams`).value,t=Math.max(this.focusArea-this.feather,0);e.set(this.offset-t,this.offset+t)}get rotation(){return Math.acos(this.uniforms.get(`rotation`).value.x)}set rotation(e){this.uniforms.get(`rotation`).value.set(Math.cos(e),Math.sin(e)),this.blurPass.blurMaterial.rotation=e}get offset(){return this._offset}set offset(e){this._offset=e,this.blurPass.blurMaterial.offset=e,this.updateParams()}get focusArea(){return this._focusArea}set focusArea(e){this._focusArea=e,this.blurPass.blurMaterial.focusArea=e,this.updateParams()}get feather(){return this._feather}set feather(e){this._feather=e,this.blurPass.blurMaterial.feather=e,this.updateParams()}get bias(){return 0}set bias(e){}update(e,t,n){this.blurPass.render(e,t,this.renderTarget)}setSize(e,t){let n=this.resolution;n.setBaseSize(e,t),this.renderTarget.setSize(n.width,n.height),this.blurPass.resolution.copy(n)}initialize(e,t,n){this.blurPass.initialize(e,t,n),n!==void 0&&(this.renderTarget.texture.type=n,e!==null&&e.outputColorSpace===`srgb`&&(this.renderTarget.texture.colorSpace=C))}},xr=`#include -#define packFloatToRGBA(v) packDepthToRGBA(v) -#define unpackRGBAToFloat(v) unpackRGBAToDepth(v) -uniform lowp sampler2D luminanceBuffer0;uniform lowp sampler2D luminanceBuffer1;uniform float minLuminance;uniform float deltaTime;uniform float tau;varying vec2 vUv;void main(){float l0=unpackRGBAToFloat(texture2D(luminanceBuffer0,vUv)); -#if __VERSION__ < 300 -float l1=texture2DLodEXT(luminanceBuffer1,vUv,MIP_LEVEL_1X1).r; -#else -float l1=textureLod(luminanceBuffer1,vUv,MIP_LEVEL_1X1).r; -#endif -l0=max(minLuminance,l0);l1=max(minLuminance,l1);float adaptedLum=l0+(l1-l0)*(1.0-exp(-deltaTime*tau));gl_FragColor=(adaptedLum==1.0)?vec4(1.0):packFloatToRGBA(adaptedLum);}`,Sr=class extends j{constructor(){super({name:`AdaptiveLuminanceMaterial`,defines:{MIP_LEVEL_1X1:`0.0`},uniforms:{luminanceBuffer0:new M(null),luminanceBuffer1:new M(null),minLuminance:new M(.01),deltaTime:new M(0),tau:new M(1)},extensions:{shaderTextureLOD:!0},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:xr,vertexShader:P})}set luminanceBuffer0(e){this.uniforms.luminanceBuffer0.value=e}setLuminanceBuffer0(e){this.uniforms.luminanceBuffer0.value=e}set luminanceBuffer1(e){this.uniforms.luminanceBuffer1.value=e}setLuminanceBuffer1(e){this.uniforms.luminanceBuffer1.value=e}set mipLevel1x1(e){this.defines.MIP_LEVEL_1X1=e.toFixed(1),this.needsUpdate=!0}setMipLevel1x1(e){this.mipLevel1x1=e}set deltaTime(e){this.uniforms.deltaTime.value=e}setDeltaTime(e){this.uniforms.deltaTime.value=e}get minLuminance(){return this.uniforms.minLuminance.value}set minLuminance(e){this.uniforms.minLuminance.value=e}getMinLuminance(){return this.uniforms.minLuminance.value}setMinLuminance(e){this.uniforms.minLuminance.value=e}get adaptationRate(){return this.uniforms.tau.value}set adaptationRate(e){this.uniforms.tau.value=e}getAdaptationRate(){return this.uniforms.tau.value}setAdaptationRate(e){this.uniforms.tau.value=e}},Cr=class extends N{constructor(e,{minLuminance:t=.01,adaptationRate:n=1}={}){super(`AdaptiveLuminancePass`),this.fullscreenMaterial=new Sr,this.needsSwap=!1,this.renderTargetPrevious=new c(1,1,{minFilter:k,magFilter:k,depthBuffer:!1}),this.renderTargetPrevious.texture.name=`Luminance.Previous`;let r=this.fullscreenMaterial;r.luminanceBuffer0=this.renderTargetPrevious.texture,r.luminanceBuffer1=e,r.minLuminance=t,r.adaptationRate=n,this.renderTargetAdapted=this.renderTargetPrevious.clone(),this.renderTargetAdapted.texture.name=`Luminance.Adapted`,this.copyPass=new ge(this.renderTargetPrevious,!1)}get texture(){return this.renderTargetAdapted.texture}getTexture(){return this.renderTargetAdapted.texture}set mipLevel1x1(e){this.fullscreenMaterial.mipLevel1x1=e}get adaptationRate(){return this.fullscreenMaterial.adaptationRate}set adaptationRate(e){this.fullscreenMaterial.adaptationRate=e}render(e,t,n,r,i){this.fullscreenMaterial.deltaTime=r,e.setRenderTarget(this.renderToScreen?null:this.renderTargetAdapted),e.render(this.scene,this.camera),this.copyPass.render(e,this.renderTargetAdapted)}},wr=`#include -uniform float whitePoint; -#if TONE_MAPPING_MODE == 2 || TONE_MAPPING_MODE == 3 -uniform float middleGrey; -#if TONE_MAPPING_MODE == 3 -uniform lowp sampler2D luminanceBuffer; -#else -uniform float averageLuminance; -#endif -vec3 Reinhard2ToneMapping(vec3 color){color*=toneMappingExposure;float l=luminance(color); -#if TONE_MAPPING_MODE == 3 -float lumAvg=unpackRGBAToFloat(texture2D(luminanceBuffer,vec2(0.5))); -#else -float lumAvg=averageLuminance; -#endif -float lumScaled=(l*middleGrey)/max(lumAvg,1e-6);float lumCompressed=lumScaled*(1.0+lumScaled/(whitePoint*whitePoint));lumCompressed/=(1.0+lumScaled);return clamp(lumCompressed*color,0.0,1.0);} -#elif TONE_MAPPING_MODE == 4 -#define A 0.15 -#define B 0.50 -#define C 0.10 -#define D 0.20 -#define E 0.02 -#define F 0.30 -vec3 Uncharted2Helper(const in vec3 x){return((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;}vec3 Uncharted2ToneMapping(vec3 color){color*=toneMappingExposure;return clamp(Uncharted2Helper(color)/Uncharted2Helper(vec3(whitePoint)),0.0,1.0);} -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){ -#if TONE_MAPPING_MODE == 2 || TONE_MAPPING_MODE == 3 -outputColor=vec4(Reinhard2ToneMapping(inputColor.rgb),inputColor.a); -#elif TONE_MAPPING_MODE == 4 -outputColor=vec4(Uncharted2ToneMapping(inputColor.rgb),inputColor.a); -#else -outputColor=vec4(toneMapping(inputColor.rgb),inputColor.a); -#endif -}`,Tr=class extends B{constructor({blendFunction:e=z.SRC,adaptive:t=!1,mode:n=t?q.REINHARD2_ADAPTIVE:q.AGX,resolution:r=256,maxLuminance:i=4,whitePoint:a=i,middleGrey:o=.6,minLuminance:s=.01,averageLuminance:l=1,adaptationRate:u=1}={}){super(`ToneMappingEffect`,wr,{blendFunction:e,uniforms:new Map([[`luminanceBuffer`,new M(null)],[`maxLuminance`,new M(i)],[`whitePoint`,new M(a)],[`middleGrey`,new M(o)],[`averageLuminance`,new M(l)]])}),this.renderTargetLuminance=new c(1,1,{minFilter:h,depthBuffer:!1}),this.renderTargetLuminance.texture.generateMipmaps=!0,this.renderTargetLuminance.texture.name=`Luminance`,this.luminancePass=new Ge({renderTarget:this.renderTargetLuminance}),this.adaptiveLuminancePass=new Cr(this.luminancePass.texture,{minLuminance:s,adaptationRate:u}),this.uniforms.get(`luminanceBuffer`).value=this.adaptiveLuminancePass.texture,this.resolution=r,this.mode=n}get mode(){return Number(this.defines.get(`TONE_MAPPING_MODE`))}set mode(e){if(this.mode===e)return;let t=`169.19`.replace(/\D+/g,``)>=168?`CineonToneMapping(texel)`:`OptimizedCineonToneMapping(texel)`;switch(this.defines.clear(),this.defines.set(`TONE_MAPPING_MODE`,e.toFixed(0)),e){case q.LINEAR:this.defines.set(`toneMapping(texel)`,`LinearToneMapping(texel)`);break;case q.REINHARD:this.defines.set(`toneMapping(texel)`,`ReinhardToneMapping(texel)`);break;case q.CINEON:case q.OPTIMIZED_CINEON:this.defines.set(`toneMapping(texel)`,t);break;case q.ACES_FILMIC:this.defines.set(`toneMapping(texel)`,`ACESFilmicToneMapping(texel)`);break;case q.AGX:this.defines.set(`toneMapping(texel)`,`AgXToneMapping(texel)`);break;case q.NEUTRAL:this.defines.set(`toneMapping(texel)`,`NeutralToneMapping(texel)`);break;default:this.defines.set(`toneMapping(texel)`,`texel`);break}this.adaptiveLuminancePass.enabled=e===q.REINHARD2_ADAPTIVE,this.setChanged()}getMode(){return this.mode}setMode(e){this.mode=e}get whitePoint(){return this.uniforms.get(`whitePoint`).value}set whitePoint(e){this.uniforms.get(`whitePoint`).value=e}get middleGrey(){return this.uniforms.get(`middleGrey`).value}set middleGrey(e){this.uniforms.get(`middleGrey`).value=e}get averageLuminance(){return this.uniforms.get(`averageLuminance`).value}set averageLuminance(e){this.uniforms.get(`averageLuminance`).value=e}get adaptiveLuminanceMaterial(){return this.adaptiveLuminancePass.fullscreenMaterial}getAdaptiveLuminanceMaterial(){return this.adaptiveLuminanceMaterial}get resolution(){return this.luminancePass.resolution.width}set resolution(e){let t=Math.max(0,Math.ceil(Math.log2(e))),n=2**t;this.luminancePass.resolution.setPreferredSize(n,n),this.adaptiveLuminanceMaterial.mipLevel1x1=t}getResolution(){return this.resolution}setResolution(e){this.resolution=e}get adaptive(){return this.mode===q.REINHARD2_ADAPTIVE}set adaptive(e){this.mode=e?q.REINHARD2_ADAPTIVE:q.REINHARD2}get adaptationRate(){return this.adaptiveLuminanceMaterial.adaptationRate}set adaptationRate(e){this.adaptiveLuminanceMaterial.adaptationRate=e}get distinction(){return console.warn(this.name,`distinction was removed.`),1}set distinction(e){console.warn(this.name,`distinction was removed.`)}update(e,t,n){this.adaptiveLuminancePass.enabled&&(this.luminancePass.render(e,t),this.adaptiveLuminancePass.render(e,null,null,n))}initialize(e,t,n){this.adaptiveLuminancePass.initialize(e,t,n)}},Er=`uniform float offset;uniform float darkness;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){const vec2 center=vec2(0.5);vec3 color=inputColor.rgb; -#if VIGNETTE_TECHNIQUE == 0 -float d=distance(uv,center);color*=smoothstep(0.8,offset*0.799,d*(darkness+offset)); -#else -vec2 coord=(uv-center)*vec2(offset);color=mix(color,vec3(1.0-darkness),dot(coord,coord)); -#endif -outputColor=vec4(color,inputColor.a);}`,Dr=class extends B{constructor({blendFunction:e,eskil:t=!1,technique:n=t?dn.ESKIL:dn.DEFAULT,offset:r=.5,darkness:i=.5}={}){super(`VignetteEffect`,Er,{blendFunction:e,defines:new Map([[`VIGNETTE_TECHNIQUE`,n.toFixed(0)]]),uniforms:new Map([[`offset`,new M(r)],[`darkness`,new M(i)]])})}get technique(){return Number(this.defines.get(`VIGNETTE_TECHNIQUE`))}set technique(e){this.technique!==e&&(this.defines.set(`VIGNETTE_TECHNIQUE`,e.toFixed(0)),this.setChanged())}get eskil(){return this.technique===dn.ESKIL}set eskil(e){this.technique=e?dn.ESKIL:dn.DEFAULT}getTechnique(){return this.technique}setTechnique(e){this.technique=e}get offset(){return this.uniforms.get(`offset`).value}set offset(e){this.uniforms.get(`offset`).value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}get darkness(){return this.uniforms.get(`darkness`).value}set darkness(e){this.uniforms.get(`darkness`).value=e}getDarkness(){return this.darkness}setDarkness(e){this.darkness=e}},Or=class extends b{load(e,t=()=>{},n=()=>{},r=null){let i=this.manager,a=new v,o=new re(a);o.setPath(this.path),o.setResponseType(`text`),i.itemStart(e),o.load(e,n=>{try{let r=this.parse(n);i.itemEnd(e),t(r)}catch(t){a.onError(e),r(t)}},n)}loadAsync(e,t=()=>{}){let n=this.manager,r=new v;return new Promise((i,a)=>{r.onError=e=>{n.itemError(e),a(`Failed to load ${e}`)},this.load(e,i,t)})}parse(e){let t=/^[\d ]+$/m,n=/^([\d.e+-]+) +([\d.e+-]+) +([\d.e+-]+) *$/gm,r=t.exec(e);if(r===null)throw Error(`Missing grid information`);let i=r[0].trim().split(/\s+/g).map(e=>Number(e)),a=i[1]-i[0],o=i.length,s=o**2;for(let e=1,t=i.length;e{},n=()=>{},r=null){let i=this.manager,a=new v,o=new re(a);o.setPath(this.path),o.setResponseType(`text`),o.load(e,n=>{try{let r=this.parse(n);i.itemEnd(e),t(r)}catch(t){a.onError(e),r(t)}},n)}loadAsync(e,t=()=>{}){let n=this.manager,r=new v;return new Promise((i,a)=>{r.onError=e=>{n.itemError(e),a(`Failed to load ${e}`)},this.load(e,i,t)})}parse(e){let t=/TITLE +"([^"]*)"/,r=/LUT_3D_SIZE +(\d+)/,i=/DOMAIN_MIN +([\d.]+) +([\d.]+) +([\d.]+)/,a=/DOMAIN_MAX +([\d.]+) +([\d.]+) +([\d.]+)/,o=/^([\d.e+-]+) +([\d.e+-]+) +([\d.e+-]+) *$/gm,s=t.exec(e),c=s===null?null:s[1];if(s=r.exec(e),s===null)throw Error(`Missing LUT_3D_SIZE information`);let l=Number(s[1]),u=new Float32Array(l**3*4),d=new n(0,0,0),f=new n(1,1,1);if(s=i.exec(e),s!==null&&d.set(Number(s[1]),Number(s[2]),Number(s[3])),s=a.exec(e),s!==null&&f.set(Number(s[1]),Number(s[2]),Number(s[3])),d.x>f.x||d.y>f.y||d.z>f.z)throw d.set(0,0,0),f.set(1,1,1),Error(`Invalid input domain`);let p=0;for(;(s=o.exec(e))!==null;)u[p++]=Number(s[1]),u[p++]=Number(s[2]),u[p++]=Number(s[3]),u[p++]=1;let m=new nn(u,l);return m.domainMin.copy(d),m.domainMax.copy(f),c!==null&&(m.name=c),m}},Ar=class extends b{load(e=()=>{},t=null){arguments.length===4?(e=arguments[1],t=arguments[3]):(arguments.length===3||typeof arguments[0]!=`function`)&&(e=arguments[1],t=null);let n=this.manager,r=new v;return new Promise((i,a)=>{let o=new Image,s=new Image;r.onError=e=>{n.itemError(e),t===null?a(`Failed to load ${e}`):(t(`Failed to load ${e}`),i())},r.onLoad=()=>{let t=[o,s];e(t),i(t)},o.addEventListener(`error`,e=>{r.itemError(`smaa-search`)}),s.addEventListener(`error`,e=>{r.itemError(`smaa-area`)}),o.addEventListener(`load`,()=>{n.itemEnd(`smaa-search`),r.itemEnd(`smaa-search`)}),s.addEventListener(`load`,()=>{n.itemEnd(`smaa-area`),r.itemEnd(`smaa-area`)}),n.itemStart(`smaa-search`),n.itemStart(`smaa-area`),r.itemStart(`smaa-search`),r.itemStart(`smaa-area`),o.src=Jn,s.src=Yn})}},jr=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#ifdef BILATERAL -#include -uniform vec2 cameraNearFar; -#define cameraNear cameraNearFar.x -#define cameraFar cameraNearFar.y -#ifdef NORMAL_DEPTH -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D normalDepthBuffer; -#else -uniform mediump sampler2D normalDepthBuffer; -#endif -float readDepth(const in vec2 uv){float depth=texture2D(normalDepthBuffer,uv).a; -#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) -float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d; -#elif defined(USE_REVERSED_DEPTH_BUFFER) -depth=1.0-depth; -#endif -return depth;} -#else -#if DEPTH_PACKING == 3201 -uniform lowp sampler2D depthBuffer; -#elif defined(GL_FRAGMENT_PRECISION_HIGH) -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -float depth=unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -float depth=texture2D(depthBuffer,uv).r; -#endif -#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) -float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d; -#elif defined(USE_REVERSED_DEPTH_BUFFER) -depth=1.0-depth; -#endif -return depth;} -#endif -float getViewZ(const in float depth){ -#ifdef PERSPECTIVE_CAMERA -return perspectiveDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y); -#else -return orthographicDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y); -#endif -} -#ifdef PERSPECTIVE_CAMERA -#define linearDepth(v) viewZToOrthographicDepth(getViewZ(readDepth(v)), cameraNearFar.x, cameraNearFar.y) -#else -#define linearDepth(v) readDepth(v) -#endif -#endif -#define getTexel(v) texture2D(inputBuffer, v) -#if KERNEL_SIZE == 3 -varying vec2 vUv00,vUv01,vUv02;varying vec2 vUv03,vUv04,vUv05;varying vec2 vUv06,vUv07,vUv08; -#elif KERNEL_SIZE == 5 && MAX_VARYING_VECTORS >= 13 -varying vec2 vUv00,vUv01,vUv02,vUv03,vUv04;varying vec2 vUv05,vUv06,vUv07,vUv08,vUv09;varying vec2 vUv10,vUv11,vUv12,vUv13,vUv14;varying vec2 vUv15,vUv16,vUv17,vUv18,vUv19;varying vec2 vUv20,vUv21,vUv22,vUv23,vUv24; -#else -uniform vec2 texelSize;uniform float scale;varying vec2 vUv; -#endif -void main(){ -#if KERNEL_SIZE == 3 -vec4 c[]=vec4[KERNEL_SIZE_SQ](getTexel(vUv00),getTexel(vUv01),getTexel(vUv02),getTexel(vUv03),getTexel(vUv04),getTexel(vUv05),getTexel(vUv06),getTexel(vUv07),getTexel(vUv08)); -#ifdef BILATERAL -float z[]=float[KERNEL_SIZE_SQ](linearDepth(vUv00),linearDepth(vUv01),linearDepth(vUv02),linearDepth(vUv03),linearDepth(vUv04),linearDepth(vUv05),linearDepth(vUv06),linearDepth(vUv07),linearDepth(vUv08)); -#endif -#elif KERNEL_SIZE == 5 && MAX_VARYING_VECTORS >= 13 -vec4 c[]=vec4[KERNEL_SIZE_SQ](getTexel(vUv00),getTexel(vUv01),getTexel(vUv02),getTexel(vUv03),getTexel(vUv04),getTexel(vUv05),getTexel(vUv06),getTexel(vUv07),getTexel(vUv08),getTexel(vUv09),getTexel(vUv10),getTexel(vUv11),getTexel(vUv12),getTexel(vUv13),getTexel(vUv14),getTexel(vUv15),getTexel(vUv16),getTexel(vUv17),getTexel(vUv18),getTexel(vUv19),getTexel(vUv20),getTexel(vUv21),getTexel(vUv22),getTexel(vUv23),getTexel(vUv24)); -#ifdef BILATERAL -float z[]=float[KERNEL_SIZE_SQ](linearDepth(vUv00),linearDepth(vUv01),linearDepth(vUv02),linearDepth(vUv03),linearDepth(vUv04),linearDepth(vUv05),linearDepth(vUv06),linearDepth(vUv07),linearDepth(vUv08),linearDepth(vUv09),linearDepth(vUv10),linearDepth(vUv11),linearDepth(vUv12),linearDepth(vUv13),linearDepth(vUv14),linearDepth(vUv15),linearDepth(vUv16),linearDepth(vUv17),linearDepth(vUv18),linearDepth(vUv19),linearDepth(vUv20),linearDepth(vUv21),linearDepth(vUv22),linearDepth(vUv23),linearDepth(vUv24)); -#endif -#endif -vec4 result=vec4(0.0); -#ifdef BILATERAL -float w=0.0; -#if KERNEL_SIZE == 3 || (KERNEL_SIZE == 5 && MAX_VARYING_VECTORS >= 13) -float centerDepth=z[KERNEL_SIZE_SQ_HALF];for(int i=0;i= 13) -for(int i=0;i= 13 -varying vec2 vUv00,vUv01,vUv02,vUv03,vUv04;varying vec2 vUv05,vUv06,vUv07,vUv08,vUv09;varying vec2 vUv10,vUv11,vUv12,vUv13,vUv14;varying vec2 vUv15,vUv16,vUv17,vUv18,vUv19;varying vec2 vUv20,vUv21,vUv22,vUv23,vUv24; -#else -varying vec2 vUv; -#endif -void main(){vec2 uv=position.xy*0.5+0.5; -#if KERNEL_SIZE == 3 -vec2 s=texelSize*scale;vUv00=uv+s*vec2(-1.0,-1.0);vUv01=uv+s*vec2(0.0,-1.0);vUv02=uv+s*vec2(1.0,-1.0);vUv03=uv+s*vec2(-1.0,0.0);vUv04=uv;vUv05=uv+s*vec2(1.0,0.0);vUv06=uv+s*vec2(-1.0,1.0);vUv07=uv+s*vec2(0.0,1.0);vUv08=uv+s*vec2(1.0,1.0); -#elif KERNEL_SIZE == 5 -vec2 s=texelSize*scale;vUv00=uv+s*vec2(-2.0,-2.0);vUv01=uv+s*vec2(-1.0,-2.0);vUv02=uv+s*vec2(0.0,-2.0);vUv03=uv+s*vec2(1.0,-2.0);vUv04=uv+s*vec2(2.0,-2.0);vUv05=uv+s*vec2(-2.0,-1.0);vUv06=uv+s*vec2(-1.0,-1.0);vUv07=uv+s*vec2(0.0,-1.0);vUv08=uv+s*vec2(1.0,-1.0);vUv09=uv+s*vec2(2.0,-1.0);vUv10=uv+s*vec2(-2.0,0.0);vUv11=uv+s*vec2(-1.0,0.0);vUv12=uv;vUv13=uv+s*vec2(1.0,0.0);vUv14=uv+s*vec2(2.0,0.0);vUv15=uv+s*vec2(-2.0,1.0);vUv16=uv+s*vec2(-1.0,1.0);vUv17=uv+s*vec2(0.0,1.0);vUv18=uv+s*vec2(1.0,1.0);vUv19=uv+s*vec2(2.0,1.0);vUv20=uv+s*vec2(-2.0,2.0);vUv21=uv+s*vec2(-1.0,2.0);vUv22=uv+s*vec2(0.0,2.0);vUv23=uv+s*vec2(1.0,2.0);vUv24=uv+s*vec2(2.0,2.0); -#else -vUv=uv; -#endif -gl_Position=vec4(position.xy,1.0,1.0);}`,Nr=class extends j{constructor({bilateral:e=!1,kernelSize:t=5}={}){super({name:`BoxBlurMaterial`,defines:{DEPTH_PACKING:`0`,DISTANCE_THRESHOLD:`0.1`},uniforms:{inputBuffer:new M(null),depthBuffer:new M(null),normalDepthBuffer:new M(null),texelSize:new M(new D),cameraNearFar:new M(new D),scale:new M(1)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:jr,vertexShader:Mr}),this.bilateral=e,this.kernelSize=t,this.maxVaryingVectors=8}set maxVaryingVectors(e){this.defines.MAX_VARYING_VECTORS=e.toFixed(0)}get kernelSize(){return Number(this.defines.KERNEL_SIZE)}set kernelSize(e){if(e%2==0)throw Error(`The kernel size must be an odd number`);this.defines.KERNEL_SIZE=e.toFixed(0),this.defines.KERNEL_SIZE_HALF=Math.floor(e/2).toFixed(0),this.defines.KERNEL_SIZE_SQ=(e**2).toFixed(0),this.defines.KERNEL_SIZE_SQ_HALF=Math.floor(e**2/2).toFixed(0),this.defines.INV_KERNEL_SIZE_SQ=(1/e**2).toFixed(6),this.needsUpdate=!0}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}get near(){return this.uniforms.cameraNearFar.value.x}get far(){return this.uniforms.cameraNearFar.value.y}set inputBuffer(e){this.uniforms.inputBuffer.value=e}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set normalDepthBuffer(e){this.uniforms.normalDepthBuffer.value=e,e===null?delete this.defines.NORMAL_DEPTH:this.defines.NORMAL_DEPTH=`1`,this.needsUpdate=!0}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}get bilateral(){return this.defines.BILATERAL!==void 0}set bilateral(e){e===null?delete this.defines.BILATERAL:this.defines.BILATERAL=`1`,this.needsUpdate=!0}get worldDistanceThreshold(){return-$n(Number(this.defines.DISTANCE_THRESHOLD),this.near,this.far)}set worldDistanceThreshold(e){let t=er(-e,this.near,this.far);this.defines.DISTANCE_THRESHOLD=t.toFixed(12),this.needsUpdate=!0}copyCameraSettings(e){e&&(this.uniforms.cameraNearFar.value.set(e.near,e.far),e instanceof T?this.defines.PERSPECTIVE_CAMERA=`1`:delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},Pr=`#include -varying vec2 vUv; -#ifdef NORMAL_DEPTH -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D normalDepthBuffer; -#else -uniform mediump sampler2D normalDepthBuffer; -#endif -float readDepth(const in vec2 uv){return texture2D(normalDepthBuffer,uv).a;} -#else -#if INPUT_DEPTH_PACKING == 3201 -uniform lowp sampler2D depthBuffer; -#elif defined(GL_FRAGMENT_PRECISION_HIGH) -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -float readDepth(const in vec2 uv){ -#if INPUT_DEPTH_PACKING == 3201 -return unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -return texture2D(depthBuffer,uv).r; -#endif -} -#endif -void main(){ -#if INPUT_DEPTH_PACKING == OUTPUT_DEPTH_PACKING -gl_FragColor=texture2D(depthBuffer,vUv); -#else -float depth=readDepth(vUv); -#if OUTPUT_DEPTH_PACKING == 3201 -gl_FragColor=(depth==1.0)?vec4(1.0):packDepthToRGBA(depth); -#else -gl_FragColor=vec4(vec3(depth),1.0); -#endif -#endif -}`,Fr=`varying vec2 vUv; -#if DEPTH_COPY_MODE == 1 -uniform vec2 texelPosition; -#endif -void main(){ -#if DEPTH_COPY_MODE == 1 -vUv=texelPosition; -#else -vUv=position.xy*0.5+0.5; -#endif -gl_Position=vec4(position.xy,1.0,1.0);}`,Ir=class extends j{constructor(){super({name:`DepthCopyMaterial`,defines:{INPUT_DEPTH_PACKING:`0`,OUTPUT_DEPTH_PACKING:`0`,DEPTH_COPY_MODE:`0`},uniforms:{depthBuffer:new M(null),texelPosition:new M(new D)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:Pr,vertexShader:Fr}),this.depthCopyMode=on.FULL}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set inputDepthPacking(e){this.defines.INPUT_DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}get outputDepthPacking(){return Number(this.defines.OUTPUT_DEPTH_PACKING)}set outputDepthPacking(e){this.defines.OUTPUT_DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=w){this.depthBuffer=e,this.inputDepthPacking=t}getInputDepthPacking(){return Number(this.defines.INPUT_DEPTH_PACKING)}setInputDepthPacking(e){this.defines.INPUT_DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}getOutputDepthPacking(){return Number(this.defines.OUTPUT_DEPTH_PACKING)}setOutputDepthPacking(e){this.defines.OUTPUT_DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}get texelPosition(){return this.uniforms.texelPosition.value}getTexelPosition(){return this.uniforms.texelPosition.value}setTexelPosition(e){this.uniforms.texelPosition.value=e}get mode(){return this.depthCopyMode}set mode(e){this.depthCopyMode=e,this.defines.DEPTH_COPY_MODE=e.toFixed(0),this.needsUpdate=!0}getMode(){return this.mode}setMode(e){this.mode=e}},Lr=`#include -#include -#include -#define packFloatToRGBA(v) packDepthToRGBA(v) -#define unpackRGBAToFloat(v) unpackRGBAToDepth(v) -#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#if DEPTH_PACKING == 3201 -uniform lowp sampler2D depthBuffer; -#elif defined(GL_FRAGMENT_PRECISION_HIGH) -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;vec4 sRGBToLinear(const in vec4 value){return vec4(mix(pow(value.rgb*0.9478672986+vec3(0.0521327014),vec3(2.4)),value.rgb*0.0773993808,vec3(lessThanEqual(value.rgb,vec3(0.04045)))),value.a);}float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -float depth=unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -float depth=texture2D(depthBuffer,uv).r; -#endif -#if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) -float d=pow(2.0,depth*log2(cameraFar+1.0))-1.0;float a=cameraFar/(cameraFar-cameraNear);float b=cameraFar*cameraNear/(cameraNear-cameraFar);depth=a+b/d; -#elif defined(USE_REVERSED_DEPTH_BUFFER) -depth=1.0-depth; -#endif -return depth;}float getViewZ(const in float depth){ -#ifdef PERSPECTIVE_CAMERA -return perspectiveDepthToViewZ(depth,cameraNear,cameraFar); -#else -return orthographicDepthToViewZ(depth,cameraNear,cameraFar); -#endif -}vec3 RGBToHCV(const in vec3 RGB){vec4 P=mix(vec4(RGB.bg,-1.0,2.0/3.0),vec4(RGB.gb,0.0,-1.0/3.0),step(RGB.b,RGB.g));vec4 Q=mix(vec4(P.xyw,RGB.r),vec4(RGB.r,P.yzx),step(P.x,RGB.r));float C=Q.x-min(Q.w,Q.y);float H=abs((Q.w-Q.y)/(6.0*C+EPSILON)+Q.z);return vec3(H,C,Q.x);}vec3 RGBToHSL(const in vec3 RGB){vec3 HCV=RGBToHCV(RGB);float L=HCV.z-HCV.y*0.5;float S=HCV.y/(1.0-abs(L*2.0-1.0)+EPSILON);return vec3(HCV.x,S,L);}vec3 HueToRGB(const in float H){float R=abs(H*6.0-3.0)-1.0;float G=2.0-abs(H*6.0-2.0);float B=2.0-abs(H*6.0-4.0);return clamp(vec3(R,G,B),0.0,1.0);}vec3 HSLToRGB(const in vec3 HSL){vec3 RGB=HueToRGB(HSL.x);float C=(1.0-abs(2.0*HSL.z-1.0))*HSL.y;return(RGB-0.5)*C+HSL.z;}FRAGMENT_HEAD void main(){FRAGMENT_MAIN_UV vec4 color0=texture2D(inputBuffer,UV);vec4 color1=vec4(0.0);FRAGMENT_MAIN_IMAGE color0.a=clamp(color0.a,0.0,1.0);gl_FragColor=color0; -#ifdef ENCODE_OUTPUT -#include -#endif -#include -}`,Rr=`uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;VERTEX_HEAD void main(){vUv=position.xy*0.5+0.5;VERTEX_MAIN_SUPPORT gl_Position=vec4(position.xy,1.0,1.0);}`,zr=class extends j{constructor(e,t,n,r,i=!1){super({name:`EffectMaterial`,defines:{THREE_REVISION:o.replace(/\D+/g,``),DEPTH_PACKING:`0`,ENCODE_OUTPUT:`1`},uniforms:{inputBuffer:new M(null),depthBuffer:new M(null),resolution:new M(new D),texelSize:new M(new D),cameraNear:new M(.3),cameraFar:new M(1e3),aspect:new M(1),time:new M(0)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,dithering:i}),e&&this.setShaderParts(e),t&&this.setDefines(t),n&&this.setUniforms(n),this.copyCameraSettings(r)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}get depthPacking(){return Number(this.defines.DEPTH_PACKING)}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=w){this.depthBuffer=e,this.depthPacking=t}setShaderData(e){this.setShaderParts(e.shaderParts),this.setDefines(e.defines),this.setUniforms(e.uniforms),this.setExtensions(e.extensions)}setShaderParts(e){return this.fragmentShader=Lr.replace(I.FRAGMENT_HEAD,e.get(I.FRAGMENT_HEAD)||``).replace(I.FRAGMENT_MAIN_UV,e.get(I.FRAGMENT_MAIN_UV)||``).replace(I.FRAGMENT_MAIN_IMAGE,e.get(I.FRAGMENT_MAIN_IMAGE)||``),this.vertexShader=Rr.replace(I.VERTEX_HEAD,e.get(I.VERTEX_HEAD)||``).replace(I.VERTEX_MAIN_SUPPORT,e.get(I.VERTEX_MAIN_SUPPORT)||``),this.needsUpdate=!0,this}setDefines(e){for(let t of e.entries())this.defines[t[0]]=t[1];return this.needsUpdate=!0,this}setUniforms(e){for(let t of e.entries())this.uniforms[t[0]]=t[1];return this}setExtensions(e){this.extensions={};for(let t of e)this.extensions[t]=!0;return this}get encodeOutput(){return this.defines.ENCODE_OUTPUT!==void 0}set encodeOutput(e){this.encodeOutput!==e&&(e?this.defines.ENCODE_OUTPUT=`1`:delete this.defines.ENCODE_OUTPUT,this.needsUpdate=!0)}isOutputEncodingEnabled(e){return this.encodeOutput}setOutputEncodingEnabled(e){this.encodeOutput=e}get time(){return this.uniforms.time.value}set time(e){this.uniforms.time.value=e}setDeltaTime(e){this.uniforms.time.value+=e}adoptCameraSettings(e){this.copyCameraSettings(e)}copyCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof T?this.defines.PERSPECTIVE_CAMERA=`1`:delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}setSize(e,t){let n=this.uniforms;n.resolution.value.set(e,t),n.texelSize.value.set(1/e,1/t),n.aspect.value=e/t}static get Section(){return I}},Br=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -uniform vec2 kernel[STEPS];varying vec2 vOffset;varying vec2 vUv;void main(){vec4 result=texture2D(inputBuffer,vUv)*kernel[0].y;for(int i=1;i -}`,Vr=`uniform vec2 texelSize;uniform vec2 direction;uniform float scale;varying vec2 vOffset;varying vec2 vUv;void main(){vOffset=direction*texelSize*scale;vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}`,Hr=class extends j{constructor({kernelSize:e=35}={}){super({name:`GaussianBlurMaterial`,uniforms:{inputBuffer:new M(null),texelSize:new M(new D),direction:new M(new D),kernel:new M(null),scale:new M(1)},blending:0,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:Br,vertexShader:Vr}),this._kernelSize=0,this.kernelSize=e}set inputBuffer(e){this.uniforms.inputBuffer.value=e}get kernelSize(){return this._kernelSize}set kernelSize(e){this._kernelSize=e,this.generateKernel(e)}get direction(){return this.uniforms.direction.value}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}generateKernel(e){let t=new Ee(e),n=t.linearSteps,r=new Float64Array(n*2);for(let e=0,i=0;ethis.setSize(o.baseWidth,o.baseHeight)),this.iterations=t}set mainCamera(e){this.blurMaterial.copyCameraSettings(e)}setDepthTexture(e,t=w){this.blurMaterial.depthBuffer=e,this.blurMaterial.depthPacking=t}render(e,t,n,r,i){let a=this.scene,o=this.camera,s=this.renderTargetA,c=this.renderTargetB,l=this.blurMaterial;this.fullscreenMaterial=l;let u=t;for(let t=0,n=Math.max(this.iterations,1);t=167?qr:Kr;return(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3])/255}var Yr=class extends Wr{constructor({depthPacking:e=i,mode:t=on.SINGLE}={}){if(e!==3201&&e!==3200)throw Error(`Unsupported depth packing: ${e}`);super({depthPacking:e}),this.name=`DepthPickingPass`,this.fullscreenMaterial.mode=t,this.pixelBuffer=e===3201?new Uint8Array(4):new Float32Array(4),this.callback=null}readDepth(e){return this.fullscreenMaterial.texelPosition.set(e.x*.5+.5,e.y*.5+.5),new Promise(e=>{this.callback=e})}render(e,t,n,r,i){let a=this.fullscreenMaterial,o=a.mode;if(o===on.FULL&&super.render(e),this.callback!==null){let t=this.renderTarget,n=this.pixelBuffer,r=t.texture.type!==A,i=0,s=0;if(o===on.SINGLE)super.render(e);else{let e=a.texelPosition;i=Math.round(e.x*t.width),s=Math.round(e.y*t.height)}e.readRenderTargetPixels(t,i,s,1,1,n),this.callback(r?Jr(n):n[0]),this.callback=null}}setSize(e,t){this.fullscreenMaterial.mode===on.FULL&&super.setSize(e,t)}};function Xr(e,t,n){for(let r of t){let t=`$1`+e+r.charAt(0).toUpperCase()+r.slice(1),i=RegExp(`([^\\.])(\\b`+r+`\\b)`,`g`);for(let e of n.entries())e[1]!==null&&n.set(e[0],e[1].replace(i,t))}}function Zr(e,t,n){let r=t.getFragmentShader(),i=t.getVertexShader(),a=r!==void 0&&/mainImage/.test(r),o=r!==void 0&&/mainUv/.test(r);if(n.attributes|=t.getAttributes(),r===void 0)throw Error(`Missing fragment shader (${t.name})`);if(o&&(n.attributes&F.CONVOLUTION)!==0)throw Error(`Effects that transform UVs are incompatible with convolution effects (${t.name})`);if(!a&&!o)throw Error(`Could not find mainImage or mainUv function (${t.name})`);{let s=/\w+\s+(\w+)\([\w\s,]*\)\s*{/g,c=n.shaderParts,l=c.get(I.FRAGMENT_HEAD)||``,u=c.get(I.FRAGMENT_MAIN_UV)||``,d=c.get(I.FRAGMENT_MAIN_IMAGE)||``,f=c.get(I.VERTEX_HEAD)||``,p=c.get(I.VERTEX_MAIN_SUPPORT)||``,m=new Set,h=new Set;if(o&&(u+=` ${e}MainUv(UV); -`,n.uvTransformation=!0),i!==null&&/mainSupport/.test(i)){let t=/mainSupport *\([\w\s]*?uv\s*?\)/.test(i);p+=` ${e}MainSupport(`,p+=t?`vUv); -`:`); -`;for(let e of i.matchAll(/(?:varying\s+\w+\s+([\S\s]*?);)/g))for(let t of e[1].split(/\s*,\s*/))n.varyings.add(t),m.add(t),h.add(t);for(let e of i.matchAll(s))h.add(e[1])}for(let e of r.matchAll(s))h.add(e[1]);for(let e of t.defines.keys())h.add(e.replace(/\([\w\s,]*\)/g,``));for(let e of t.uniforms.keys())h.add(e);h.delete(`while`),h.delete(`for`),h.delete(`if`),t.uniforms.forEach((t,r)=>n.uniforms.set(e+r.charAt(0).toUpperCase()+r.slice(1),t)),t.defines.forEach((t,r)=>n.defines.set(e+r.charAt(0).toUpperCase()+r.slice(1),t));let g=new Map([[`fragment`,r],[`vertex`,i]]);Xr(e,h,n.defines),Xr(e,h,g),r=g.get(`fragment`),i=g.get(`vertex`);let _=t.blendMode;if(n.blendModes.set(_.blendFunction,_),a){t.inputColorSpace!==null&&t.inputColorSpace!==n.colorSpace&&(d+=t.inputColorSpace===`srgb`?`color0 = sRGBTransferOETF(color0); - `:`color0 = sRGBToLinear(color0); - `),t.outputColorSpace===``?t.inputColorSpace!==null&&(n.colorSpace=t.inputColorSpace):n.colorSpace=t.outputColorSpace,d+=`${e}MainImage(color0, UV, `,(n.attributes&F.DEPTH)!==0&&/MainImage *\([\w\s,]*?depth[\w\s,]*?\)/.test(r)&&(d+=`depth, `,n.readDepth=!0),d+=`color1); - `;let i=e+`BlendOpacity`;n.uniforms.set(i,_.opacity),d+=`color0 = blend${_.blendFunction}(color0, color1, ${i}); - - `,l+=`uniform float ${i}; - -`}if(l+=r+` -`,i!==null&&(f+=i+` -`),c.set(I.FRAGMENT_HEAD,l),c.set(I.FRAGMENT_MAIN_UV,u),c.set(I.FRAGMENT_MAIN_IMAGE,d),c.set(I.VERTEX_HEAD,f),c.set(I.VERTEX_MAIN_SUPPORT,p),t.extensions!==null)for(let e of t.extensions)n.extensions.add(e)}}var Qr=class extends N{constructor(e,...t){super(`EffectPass`),this.fullscreenMaterial=new zr(null,null,null,e),this.listener=e=>this.handleEvent(e),this.effects=[],this.setEffects(t),this.skipRendering=!1,this.minTime=1,this.maxTime=1/0,this.timeScale=1}set mainScene(e){for(let t of this.effects)t.mainScene=e}set mainCamera(e){this.fullscreenMaterial.copyCameraSettings(e);for(let t of this.effects)t.mainCamera=e}get encodeOutput(){return this.fullscreenMaterial.encodeOutput}set encodeOutput(e){this.fullscreenMaterial.encodeOutput=e}get dithering(){return this.fullscreenMaterial.dithering}set dithering(e){let t=this.fullscreenMaterial;t.dithering=e,t.needsUpdate=!0}setEffects(e){for(let e of this.effects)e.removeEventListener(`change`,this.listener);this.effects=e.sort((e,t)=>t.attributes-e.attributes);for(let e of this.effects)e.addEventListener(`change`,this.listener)}updateMaterial(){let e=new we,t=0;for(let n of this.effects)if(n.blendMode.blendFunction===z.DST)e.attributes|=n.getAttributes()&F.DEPTH;else if((e.attributes&n.getAttributes()&F.CONVOLUTION)!==0)throw Error(`Convolution effects cannot be merged (${n.name})`);else Zr(`e`+ t++,n,e);let n=e.shaderParts.get(I.FRAGMENT_HEAD),r=e.shaderParts.get(I.FRAGMENT_MAIN_IMAGE),i=e.shaderParts.get(I.FRAGMENT_MAIN_UV),a=/\bblend\b/g;for(let t of e.blendModes.values())n+=t.getShaderCode().replace(a,`blend${t.blendFunction}`)+` -`;(e.attributes&F.DEPTH)===0?this.needsDepthTexture=!1:(e.readDepth&&(r=`float depth = readDepth(UV); - - `+r),this.needsDepthTexture=this.getDepthTexture()===null),e.colorSpace===`srgb`&&(r+=`color0 = sRGBToLinear(color0); - `),e.uvTransformation?(i=`vec2 transformedUv = vUv; -`+i,e.defines.set(`UV`,`transformedUv`)):e.defines.set(`UV`,`vUv`),e.shaderParts.set(I.FRAGMENT_HEAD,n),e.shaderParts.set(I.FRAGMENT_MAIN_IMAGE,r),e.shaderParts.set(I.FRAGMENT_MAIN_UV,i);for(let[t,n]of e.shaderParts)n!==null&&e.shaderParts.set(t,n.trim().replace(/^#/,` -#`));this.skipRendering=t===0,this.needsSwap=!this.skipRendering,this.fullscreenMaterial.setShaderData(e)}recompile(){this.updateMaterial()}getDepthTexture(){return this.fullscreenMaterial.depthBuffer}setDepthTexture(e,t=w){this.fullscreenMaterial.depthBuffer=e,this.fullscreenMaterial.depthPacking=t;for(let n of this.effects)n.setDepthTexture(e,t)}render(e,t,n,r,i){for(let n of this.effects)n.update(e,t,r);if(!this.skipRendering||this.renderToScreen){let i=this.fullscreenMaterial;i.inputBuffer=t.texture,i.time+=r*this.timeScale,e.setRenderTarget(this.renderToScreen?null:n),e.render(this.scene,this.camera)}}setSize(e,t){this.fullscreenMaterial.setSize(e,t);for(let n of this.effects)n.setSize(e,t)}initialize(e,t,n){this.renderer=e;for(let r of this.effects)r.initialize(e,t,n);this.updateMaterial(),n!==void 0&&n!==1009&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH=`1`)}dispose(){super.dispose();for(let e of this.effects)e.removeEventListener(`change`,this.listener),e.dispose()}handleEvent(e){switch(e.type){case`change`:this.recompile();break}}},$r=class extends N{constructor({kernelSize:e=35,iterations:t=1,resolutionScale:n=1,resolutionX:r=R.AUTO_SIZE,resolutionY:i=R.AUTO_SIZE}={}){super(`GaussianBlurPass`),this.renderTargetA=new c(1,1,{depthBuffer:!1}),this.renderTargetA.texture.name=`Blur.Target.A`,this.renderTargetB=this.renderTargetA.clone(),this.renderTargetB.texture.name=`Blur.Target.B`,this.blurMaterial=new Hr({kernelSize:e}),this.copyMaterial=new he,this.copyMaterial.inputBuffer=this.renderTargetB.texture;let a=this.resolution=new R(this,r,i,n);a.addEventListener(`change`,e=>this.setSize(a.baseWidth,a.baseHeight)),this.iterations=t}render(e,t,n,r,i){let a=this.scene,o=this.camera,s=this.renderTargetA,c=this.renderTargetB,l=this.blurMaterial;this.fullscreenMaterial=l;let u=t;for(let t=0,n=Math.max(this.iterations,1);t1&&(u=c);this.fullscreenMaterial=this.copyMaterial,e.setRenderTarget(this.renderToScreen?null:n),e.render(a,o)}setSize(e,t){let n=this.resolution;n.setBaseSize(e,t);let r=n.width,i=n.height;this.renderTargetA.setSize(r,i),this.renderTargetB.setSize(r,i),this.blurMaterial.setSize(e,t)}initialize(e,t,n){n!==void 0&&(this.renderTargetA.texture.type=n,this.renderTargetB.texture.type=n,n===1009?e!==null&&e.outputColorSpace===`srgb`&&(this.renderTargetA.texture.colorSpace=C,this.renderTargetB.texture.colorSpace=C):(this.blurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH=`1`,this.copyMaterial.defines.FRAMEBUFFER_PRECISION_HIGH=`1`))}},ei=class extends N{constructor(e){super(`LambdaPass`,null,null),this.needsSwap=!1,this.f=e}render(e,t,n,r,i){this.f()}},ti=class extends N{constructor(e,n,{renderTarget:r,resolutionScale:i=1,width:a=R.AUTO_SIZE,height:o=R.AUTO_SIZE,resolutionX:s=a,resolutionY:l=o}={}){super(`NormalPass`),this.needsSwap=!1,this.renderPass=new zt(e,n,new se);let u=this.renderPass;u.ignoreBackground=!0,u.skipShadowMapUpdate=!0;let d=u.getClearPass();d.overrideClearColor=new t(7829503),d.overrideClearAlpha=1,this.renderTarget=r,this.renderTarget===void 0&&(this.renderTarget=new c(1,1,{minFilter:k,magFilter:k}),this.renderTarget.texture.name=`NormalPass.Target`);let f=this.resolution=new R(this,s,l,i);f.addEventListener(`change`,e=>this.setSize(f.baseWidth,f.baseHeight))}set mainScene(e){this.renderPass.mainScene=e}set mainCamera(e){this.renderPass.mainCamera=e}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,n,r,i){let a=this.renderToScreen?null:this.renderTarget;this.renderPass.render(e,a,a)}setSize(e,t){let n=this.resolution;n.setBaseSize(e,t),this.renderTarget.setSize(n.width,n.height)}},ni=[new Float32Array(3),new Float32Array(3)],Y=[new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3)],ri=[[new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1])]];function ii(e,t,n,r){let i=n[0]-t[0],a=n[1]-t[1],o=n[2]-t[2],s=e[0]-t[0],c=e[1]-t[1],l=e[2]-t[2],u=a*l-o*c,d=o*s-i*l,f=i*c-a*s,p=Math.sqrt(u*u+d*d+f*f),m=p*.5,h=u/p,g=d/p,_=f/p,v=-(e[0]*h+e[1]*g+e[2]*_),y=r[0]*h+r[1]*g+r[2]*_;return Math.abs(y+v)*m/3}function ai(e,t,n,r,i,a){let o=(n+r*t+i*t*t)*4;a[0]=e[o+0],a[1]=e[o+1],a[2]=e[o+2]}function oi(e,t,n,r,i,a){let o=n*(t-1),s=r*(t-1),c=i*(t-1),l=Math.floor(o),u=Math.floor(s),d=Math.floor(c),f=Math.ceil(o),p=Math.ceil(s),m=Math.ceil(c),h=o-l,g=s-u,_=c-d;if(l===o&&u===s&&d===c)ai(e,t,o,s,c,a);else{let n;h>=g&&g>=_?n=ri[0]:h>=_&&_>=g?n=ri[1]:_>=h&&h>=g?n=ri[2]:g>=h&&h>=_?n=ri[3]:g>=_&&_>=h?n=ri[4]:_>=g&&g>=h&&(n=ri[5]);let[r,i,o,s]=n,c=ni[0];c[0]=h,c[1]=g,c[2]=_;let v=ni[1],y=f-l,b=p-u,x=m-d;v[0]=y*r[0]+l,v[1]=b*r[1]+u,v[2]=x*r[2]+d,ai(e,t,v[0],v[1],v[2],Y[0]),v[0]=y*i[0]+l,v[1]=b*i[1]+u,v[2]=x*i[2]+d,ai(e,t,v[0],v[1],v[2],Y[1]),v[0]=y*o[0]+l,v[1]=b*o[1]+u,v[2]=x*o[2]+d,ai(e,t,v[0],v[1],v[2],Y[2]),v[0]=y*s[0]+l,v[1]=b*s[1]+u,v[2]=x*s[2]+d,ai(e,t,v[0],v[1],v[2],Y[3]);let S=ii(i,o,s,c)*6,ee=ii(r,o,s,c)*6,C=ii(r,i,s,c)*6,te=ii(r,i,o,c)*6;Y[0][0]*=S,Y[0][1]*=S,Y[0][2]*=S,Y[1][0]*=ee,Y[1][1]*=ee,Y[1][2]*=ee,Y[2][0]*=C,Y[2][1]*=C,Y[2][2]*=C,Y[3][0]*=te,Y[3][1]*=te,Y[3][2]*=te,a[0]=Y[0][0]+Y[1][0]+Y[2][0]+Y[3][0],a[1]=Y[0][1]+Y[1][1]+Y[2][1]+Y[3][1],a[2]=Y[0][2]+Y[1][2]+Y[2][2]+Y[3][2]}}var si=class{static expand(e,t){let n=Math.cbrt(e.length/4),r=new Float32Array(3),i=new e.constructor(t**3*4),a=e instanceof Uint8Array?255:1,o=t**2,s=1/(t-1);for(let c=0;c=e&&ce&&l<=n)if(Math.sign(u)===Math.sign(d)||Math.abs(u)<1e-4||Math.abs(d)<1e-4){let e=(u+d)/2;e<0?(a[0]=Math.abs(e),a[1]=0):(a[0]=0,a[1]=Math.abs(e))}else{let r=-t*o/s+e,i=Math.trunc(r),c=r>e?u*(r-i)/2:0,l=rMath.abs(l)?c:-l)<0?(a[0]=Math.abs(c),a[1]=Math.abs(l)):(a[0]=Math.abs(l),a[1]=Math.abs(c))}else a[0]=0,a[1]=0;return a}function yi(e,t,n,r,i){let a=X[0],o=X[1],s=.5+r,c=.5+r-1,l=t+n+1;switch(e){case 0:i[0]=0,i[1]=0;break;case 1:t<=n?Z(0,c,l/2,0,t,i):(i[0]=0,i[1]=0);break;case 2:t>=n?Z(l/2,0,l,c,t,i):(i[0]=0,i[1]=0);break;case 3:Z(0,c,l/2,0,t,a),Z(l/2,0,l,c,t,o),vi(l,X),i[0]=a[0]+o[0],i[1]=a[1]+o[1];break;case 4:t<=n?Z(0,s,l/2,0,t,i):(i[0]=0,i[1]=0);break;case 5:i[0]=0,i[1]=0;break;case 6:Math.abs(r)>0?(Z(0,s,l,c,t,a),Z(0,s,l/2,0,t,o),Z(l/2,0,l,c,t,i),o[0]+=i[0],o[1]+=i[1],i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2):Z(0,s,l,c,t,i);break;case 7:Z(0,s,l,c,t,i);break;case 8:t>=n?Z(l/2,0,l,s,t,i):(i[0]=0,i[1]=0);break;case 9:Math.abs(r)>0?(Z(0,c,l,s,t,a),Z(0,c,l/2,0,t,o),Z(l/2,0,l,s,t,i),o[0]+=i[0],o[1]+=i[1],i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2):Z(0,c,l,s,t,i);break;case 10:i[0]=0,i[1]=0;break;case 11:Z(0,c,l,s,t,i);break;case 12:Z(0,s,l/2,0,t,a),Z(l/2,0,l,s,t,o),vi(l,X),i[0]=a[0]+o[0],i[1]=a[1]+o[1];break;case 13:Z(0,c,l,s,t,i);break;case 14:Z(0,s,l,c,t,i);break;case 15:i[0]=0,i[1]=0;break}return i}function bi(e,t,n,r,i,a){let o=e===n&&t===r;if(!o){let s=(e+n)/2,c=(t+r)/2,l=r-t,u=e-n;o=l*(i-s)+u*(a-c)>0}return o}function xi(e,t,n,r,i,a){let o=0;for(let s=0;s0&&(t+=o[0],n+=o[1]),u>0&&(r+=o[0],i+=o[1]),s[0]=1-xi(t,n,r,i,1+a,0+a),s[1]=xi(t,n,r,i,1+a,1+a),s}function Si(e,t,n,r,i){let a=X[0],o=X[1],s=t+n+1;switch(e){case 0:Q(e,1,1,1+s,1+s,t,r,a),Q(e,1,0,1+s,0+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 1:Q(e,1,0,0+s,0+s,t,r,a),Q(e,1,0,1+s,0+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 2:Q(e,0,0,1+s,0+s,t,r,a),Q(e,1,0,1+s,0+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 3:Q(e,1,0,1+s,0+s,t,r,i);break;case 4:Q(e,1,1,0+s,0+s,t,r,a),Q(e,1,1,1+s,0+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 5:Q(e,1,1,0+s,0+s,t,r,a),Q(e,1,0,1+s,0+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 6:Q(e,1,1,1+s,0+s,t,r,i);break;case 7:Q(e,1,1,1+s,0+s,t,r,a),Q(e,1,0,1+s,0+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 8:Q(e,0,0,1+s,1+s,t,r,a),Q(e,1,0,1+s,1+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 9:Q(e,1,0,1+s,1+s,t,r,i),Q(e,1,0,1+s,1+s,t,r,i);break;case 10:Q(e,0,0,1+s,1+s,t,r,a),Q(e,1,0,1+s,0+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 11:Q(e,1,0,1+s,1+s,t,r,a),Q(e,1,0,1+s,0+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 12:Q(e,1,1,1+s,1+s,t,r,i);break;case 13:Q(e,1,1,1+s,1+s,t,r,a),Q(e,1,0,1+s,1+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 14:Q(e,1,1,1+s,1+s,t,r,a),Q(e,1,1,1+s,0+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break;case 15:Q(e,1,1,1+s,1+s,t,r,a),Q(e,1,0,1+s,0+s,t,r,o),i[0]=(a[0]+o[0])/2,i[1]=(a[1]+o[1])/2;break}return i}function Ci(e,t,n){let r=new Float32Array(2);for(let i=0,a=e.length;i{function q(t,a,s){let e=document.createElement("canvas"),n=e.getContext("2d");if(e.width=t,e.height=a,s instanceof Image)n.drawImage(s,0,0);else{let r=n.createImageData(t,a);r.data.set(s),n.putImageData(r,0,0)}return e}var F=class t{constructor(a=0,s=0,e=null){this.width=a,this.height=s,this.data=e}toCanvas(){return typeof document=="undefined"?null:q(this.width,this.height,this.data)}static from(a){let{width:s,height:e}=a,n;if(a instanceof Image){let r=q(s,e,a);r!==null&&(n=r.getContext("2d").getImageData(0,0,s,e).data)}else n=a.data;return new t(s,e,n)}};var M=[new Float32Array(2),new Float32Array(2)],D=16,W=20,I=30,j=32,v=new Float32Array([0,-.25,.25,-.125,.125,-.375,.375]),N=[new Float32Array([0,0]),new Float32Array([.25,-.25]),new Float32Array([-.25,.25]),new Float32Array([.125,-.125]),new Float32Array([-.125,.125])],z=[new Uint8Array([0,0]),new Uint8Array([3,0]),new Uint8Array([0,3]),new Uint8Array([3,3]),new Uint8Array([1,0]),new Uint8Array([4,0]),new Uint8Array([1,3]),new Uint8Array([4,3]),new Uint8Array([0,1]),new Uint8Array([3,1]),new Uint8Array([0,4]),new Uint8Array([3,4]),new Uint8Array([1,1]),new Uint8Array([4,1]),new Uint8Array([1,4]),new Uint8Array([4,4])],p=[new Uint8Array([0,0]),new Uint8Array([1,0]),new Uint8Array([0,2]),new Uint8Array([1,2]),new Uint8Array([2,0]),new Uint8Array([3,0]),new Uint8Array([2,2]),new Uint8Array([3,2]),new Uint8Array([0,1]),new Uint8Array([1,1]),new Uint8Array([0,3]),new Uint8Array([1,3]),new Uint8Array([2,1]),new Uint8Array([3,1]),new Uint8Array([2,3]),new Uint8Array([3,3])];function C(t,a,s){return t+(a-t)*s}function B(t){return Math.min(Math.max(t,0),1)}function _(t){let a=M[0],s=M[1],e=Math.sqrt(a[0]*2)*.5,n=Math.sqrt(a[1]*2)*.5,r=Math.sqrt(s[0]*2)*.5,o=Math.sqrt(s[1]*2)*.5,c=B(t/j);a[0]=C(e,a[0],c),a[1]=C(n,a[1],c),s[0]=C(r,s[0],c),s[1]=C(o,s[1],c)}function d(t,a,s,e,n,r){let o=s-t,c=e-a,h=n,i=n+1,w=a+c*(h-t)/o,b=a+c*(i-t)/o;if(h>=t&&ht&&i<=s)if(Math.sign(w)===Math.sign(b)||Math.abs(w)<1e-4||Math.abs(b)<1e-4){let g=(w+b)/2;g<0?(r[0]=Math.abs(g),r[1]=0):(r[0]=0,r[1]=Math.abs(g))}else{let g=-a*o/c+t,k=Math.trunc(g),m=g>t?w*(g-k)/2:0,U=gMath.abs(U)?m:-U)<0?(r[0]=Math.abs(m),r[1]=Math.abs(U)):(r[0]=Math.abs(U),r[1]=Math.abs(m))}else r[0]=0,r[1]=0;return r}function J(t,a,s,e,n){let r=M[0],o=M[1],c=.5+e,h=.5+e-1,i=a+s+1;switch(t){case 0:{n[0]=0,n[1]=0;break}case 1:{a<=s?d(0,h,i/2,0,a,n):(n[0]=0,n[1]=0);break}case 2:{a>=s?d(i/2,0,i,h,a,n):(n[0]=0,n[1]=0);break}case 3:{d(0,h,i/2,0,a,r),d(i/2,0,i,h,a,o),_(i,M),n[0]=r[0]+o[0],n[1]=r[1]+o[1];break}case 4:{a<=s?d(0,c,i/2,0,a,n):(n[0]=0,n[1]=0);break}case 5:{n[0]=0,n[1]=0;break}case 6:{Math.abs(e)>0?(d(0,c,i,h,a,r),d(0,c,i/2,0,a,o),d(i/2,0,i,h,a,n),o[0]=o[0]+n[0],o[1]=o[1]+n[1],n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2):d(0,c,i,h,a,n);break}case 7:{d(0,c,i,h,a,n);break}case 8:{a>=s?d(i/2,0,i,c,a,n):(n[0]=0,n[1]=0);break}case 9:{Math.abs(e)>0?(d(0,h,i,c,a,r),d(0,h,i/2,0,a,o),d(i/2,0,i,c,a,n),o[0]=o[0]+n[0],o[1]=o[1]+n[1],n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2):d(0,h,i,c,a,n);break}case 10:{n[0]=0,n[1]=0;break}case 11:{d(0,h,i,c,a,n);break}case 12:{d(0,c,i/2,0,a,r),d(i/2,0,i,c,a,o),_(i,M),n[0]=r[0]+o[0],n[1]=r[1]+o[1];break}case 13:{d(0,h,i,c,a,n);break}case 14:{d(0,c,i,h,a,n);break}case 15:{n[0]=0,n[1]=0;break}}return n}function K(t,a,s,e,n,r){let o=t===s&&a===e;if(!o){let c=(t+s)/2,h=(a+e)/2,i=e-a,w=t-s;o=i*(n-c)+w*(r-h)>0}return o}function G(t,a,s,e,n,r){let o=0;for(let c=0;c0&&(a+=o[0],s+=o[1]),w>0&&(e+=o[0],n+=o[1]),c[0]=1-G(a,s,e,n,1+r,0+r),c[1]=G(a,s,e,n,1+r,1+r),c}function Q(t,a,s,e,n){let r=M[0],o=M[1],c=a+s+1;switch(t){case 0:{A(t,1,1,1+c,1+c,a,e,r),A(t,1,0,1+c,0+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 1:{A(t,1,0,0+c,0+c,a,e,r),A(t,1,0,1+c,0+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 2:{A(t,0,0,1+c,0+c,a,e,r),A(t,1,0,1+c,0+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 3:{A(t,1,0,1+c,0+c,a,e,n);break}case 4:{A(t,1,1,0+c,0+c,a,e,r),A(t,1,1,1+c,0+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 5:{A(t,1,1,0+c,0+c,a,e,r),A(t,1,0,1+c,0+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 6:{A(t,1,1,1+c,0+c,a,e,n);break}case 7:{A(t,1,1,1+c,0+c,a,e,r),A(t,1,0,1+c,0+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 8:{A(t,0,0,1+c,1+c,a,e,r),A(t,1,0,1+c,1+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 9:{A(t,1,0,1+c,1+c,a,e,n),A(t,1,0,1+c,1+c,a,e,n);break}case 10:{A(t,0,0,1+c,1+c,a,e,r),A(t,1,0,1+c,0+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 11:{A(t,1,0,1+c,1+c,a,e,r),A(t,1,0,1+c,0+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 12:{A(t,1,1,1+c,1+c,a,e,n);break}case 13:{A(t,1,1,1+c,1+c,a,e,r),A(t,1,0,1+c,1+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 14:{A(t,1,1,1+c,1+c,a,e,r),A(t,1,1,1+c,0+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}case 15:{A(t,1,1,1+c,1+c,a,e,r),A(t,1,0,1+c,0+c,a,e,o),n[0]=(r[0]+o[0])/2,n[1]=(r[1]+o[1])/2;break}}return n}function R(t,a,s){let e=new Float32Array(2);for(let n=0,r=t.length;n{let a=S.generate(),s=E.generate();postMessage({areaImageData:a,searchImageData:s},[a.data.buffer,s.data.buffer]),close()});})(); -`;function Di(e=!0){let t=URL.createObjectURL(new Blob([Ei],{type:`text/javascript`})),n=new Worker(t);return URL.revokeObjectURL(t),new Promise((t,r)=>{n.addEventListener(`error`,e=>r(e.error)),n.addEventListener(`message`,n=>{let r=K.from(n.data.searchImageData),i=K.from(n.data.areaImageData),a=[r.toCanvas().toDataURL(`image/png`,1),i.toCanvas().toDataURL(`image/png`,1)];e&&(localStorage.setItem(`smaa-search`,a[0]),localStorage.setItem(`smaa-area`,a[1])),t(a)}),n.postMessage(null)})}var Oi=class{constructor(){this.disableCache=!1}setCacheEnabled(e){this.disableCache=!e}generate(){let e=!this.disableCache&&window.localStorage!==void 0,t=e?[localStorage.getItem(`smaa-search`),localStorage.getItem(`smaa-area`)]:[null,null];return(t[0]!==null&&t[1]!==null?Promise.resolve(t):Di(e)).then(e=>new Promise((t,n)=>{let r=new Image,i=new Image,a=new v;a.onLoad=()=>t([r,i]),a.onError=n,r.addEventListener(`error`,e=>a.itemError(`smaa-search`)),i.addEventListener(`error`,e=>a.itemError(`smaa-area`)),r.addEventListener(`load`,()=>a.itemEnd(`smaa-search`)),i.addEventListener(`load`,()=>a.itemEnd(`smaa-area`)),a.itemStart(`smaa-search`),a.itemStart(`smaa-area`),r.src=e[0],i.src=e[1]}))}},ki=new Map([[$(0,0,0,0),new Float32Array([0,0,0,0])],[$(0,0,0,1),new Float32Array([0,0,0,1])],[$(0,0,1,0),new Float32Array([0,0,1,0])],[$(0,0,1,1),new Float32Array([0,0,1,1])],[$(0,1,0,0),new Float32Array([0,1,0,0])],[$(0,1,0,1),new Float32Array([0,1,0,1])],[$(0,1,1,0),new Float32Array([0,1,1,0])],[$(0,1,1,1),new Float32Array([0,1,1,1])],[$(1,0,0,0),new Float32Array([1,0,0,0])],[$(1,0,0,1),new Float32Array([1,0,0,1])],[$(1,0,1,0),new Float32Array([1,0,1,0])],[$(1,0,1,1),new Float32Array([1,0,1,1])],[$(1,1,0,0),new Float32Array([1,1,0,0])],[$(1,1,0,1),new Float32Array([1,1,0,1])],[$(1,1,1,0),new Float32Array([1,1,1,0])],[$(1,1,1,1),new Float32Array([1,1,1,1])]]);function Ai(e,t,n){return e+(t-e)*n}function $(e,t,n,r){return Ai(Ai(e,t,.75),Ai(n,r,.75),.875)}function ji(e,t){let n=0;return t[3]===1&&(n+=1),n===1&&t[2]===1&&e[1]!==1&&e[3]!==1&&(n+=1),n}function Mi(e,t){let n=0;return t[3]===1&&e[1]!==1&&e[3]!==1&&(n+=1),n===1&&t[2]===1&&e[0]!==1&&e[2]!==1&&(n+=1),n}var Ni=class{static generate(){let e=new Uint8ClampedArray(2178),t=new Uint8ClampedArray(1024*4);for(let t=0;t<33;++t)for(let n=0;n<66;++n){let r=.03125*n,i=.03125*t;if(ki.has(r)&&ki.has(i)){let a=ki.get(r),o=ki.get(i),s=t*66+n;e[s]=127*ji(a,o),e[s+33]=127*Mi(a,o)}}for(let n=0,r=17;r<33;++r)for(let i=0;i<64;++i,n+=4)t[n]=e[r*66+i],t[n+3]=255;return new K(64,16,t)}};export{Ut as $,gr as $t,Ct as A,ln as At,F as B,un as Bt,Ir as C,Nt as Ct,sr as D,Ae as Dt,or as E,bn as Et,Tt as F,R as Ft,I as G,An as Gt,zr as H,qn as Ht,Je as I,Ti as It,Ee as J,Vn as Jt,Ot as K,Ne as Kt,Wn as L,Qn as Lt,Yr as M,On as Mt,sn as N,zt as Nt,pt as O,N as Ot,de as P,je as Pt,jt as Q,pr as Qt,cn as R,Oi as Rt,_n as S,mn as St,Wr as T,wn as Tt,Qr as U,ur as Ut,Ce as V,Ni as Vt,we as W,rr as Wt,$r as X,In as Xt,Hr as Y,W as Yt,It as Z,si as Zt,ot as _,Ge as _t,z as a,Ze as an,He as at,he as b,ye as bt,nt as c,fn as cn,Zt as ct,Ur as d,kr as dt,_r as en,Rt as et,it as f,Qt as ft,ve as g,We as gt,pe as h,nn as ht,Cr as i,q as in,Oe as it,xn as j,K as jt,Rn as k,En as kt,gt as l,ue as ln,an as lt,vt as m,Yt as mt,Ie as n,Se as nn,qt as nt,Fe as o,Dr as on,H as ot,dt as p,ei as pt,At as q,zn as qt,Sr as r,Tr as rn,De as rt,et as s,dn as sn,V as st,Re as t,br as tn,Gt as tt,Nr as u,Or as ut,U as v,mt as vt,on as w,ti as wt,ge as x,Qe as xt,ct as y,bt as yt,B as z,Ar as zt}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/postprocessing.Wy71DpiM.js.gz b/Needle/MenuScene/dist/assets/postprocessing.Wy71DpiM.js.gz deleted file mode 100644 index 951fc3e..0000000 Binary files a/Needle/MenuScene/dist/assets/postprocessing.Wy71DpiM.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/postprocessing.ao.BRYreHJS.js b/Needle/MenuScene/dist/assets/postprocessing.ao.BRYreHJS.js deleted file mode 100644 index 5ad30e7..0000000 --- a/Needle/MenuScene/dist/assets/postprocessing.ao.BRYreHJS.js +++ /dev/null @@ -1,842 +0,0 @@ -import{A as e,Ar as t,Er as n,Fr as r,H as i,It as a,J as o,Jn as s,On as c,Or as l,S as u,X as d,Xt as f,Y as p,Zt as m,ft as h,kr as g,lr as _,mn as v,on as y,ot as b,qn as x,tr as S,x as C}from"./three@0.169.19.js";import{Ot as w}from"./postprocessing.Wy71DpiM.js";import{t as T}from"./three-examples.extras@0.169.19.js";var E=new class extends u{boundingSphere=new _;constructor(){super(),this.setAttribute(`position`,new C(new Float32Array([-1,-1,3,-1,-1,3]),2)),this.setAttribute(`uv`,new C(new Float32Array([0,0,2,0,0,2]),2))}computeBoundingSphere(){}},D=new v,O=class{constructor(e){this._mesh=new m(E,e),this._mesh.frustumCulled=!1}render(e){e.render(this._mesh,D)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}dispose(){this._mesh.material.dispose(),this._mesh.geometry.dispose()}},k={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},sceneNormal:{value:null},projMat:{value:new f},viewMat:{value:new f},projViewMat:{value:new f},projectionMatrixInv:{value:new f},viewMatrixInv:{value:new f},cameraPos:{value:new t},resolution:{value:new g},biasAdjustment:{value:new g},time:{value:0},samples:{value:[]},bluenoise:{value:null},distanceFalloff:{value:1},radius:{value:5},near:{value:.1},far:{value:1e3},ortho:{value:!1},screenSpaceRadius:{value:!1},frame:{value:0}},depthWrite:!1,depthTest:!1,vertexShader:` -varying vec2 vUv; -void main() { - vUv = uv; - gl_Position = vec4(position, 1); -}`,fragmentShader:` - #define SAMPLES 16 - #define FSAMPLES 16.0 -uniform sampler2D sceneDiffuse; -uniform highp sampler2D sceneNormal; -uniform highp sampler2D sceneDepth; -uniform mat4 projectionMatrixInv; -uniform mat4 viewMatrixInv; -uniform mat4 projMat; -uniform mat4 viewMat; -uniform mat4 projViewMat; -uniform vec3 cameraPos; -uniform vec2 resolution; -uniform vec2 biasAdjustment; -uniform float time; -uniform vec3[SAMPLES] samples; -uniform float radius; -uniform float distanceFalloff; -uniform float near; -uniform float far; -uniform float frame; -uniform bool ortho; -uniform bool screenSpaceRadius; -uniform sampler2D bluenoise; - varying vec2 vUv; - highp float linearize_depth(highp float d, highp float zNear,highp float zFar) - { - return (zFar * zNear) / (zFar - d * (zFar - zNear)); - } - highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) { - return nearZ + (farZ - nearZ) * d; - } - highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) { - float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - /*return ortho ? linearize_depth_ortho( - linDepth, - nearZ, - farZ - ) :linearize_depth(linDepth, nearZ, farZ);*/ - #ifdef ORTHO - - return linearize_depth_ortho(d, nearZ, farZ); - - #else - return linearize_depth(linDepth, nearZ, farZ); - #endif - } - - vec3 getWorldPosLog(vec3 posS) { - vec2 uv = posS.xy; - float z = posS.z; - float nearZ =near; - float farZ = far; - float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0; - vec4 wpos = projectionMatrixInv * clipVec; - return wpos.xyz / wpos.w; - } - vec3 getWorldPos(float depth, vec2 coord) { - #ifdef LOGDEPTH - #ifndef ORTHO - return getWorldPosLog(vec3(coord, depth)); - #endif - #endif - float z = depth * 2.0 - 1.0; - vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0); - vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition; - // Perspective division - vec4 worldSpacePosition = viewSpacePosition; - worldSpacePosition.xyz /= worldSpacePosition.w; - return worldSpacePosition.xyz; - } - - vec3 computeNormal(vec3 worldPos, vec2 vUv) { - ivec2 p = ivec2(vUv * resolution); - #ifdef REVERSEDEPTH - float c0 = 1.0 - texelFetch(sceneDepth, p, 0).x; - float l2 = 1.0 - texelFetch(sceneDepth, p - ivec2(2, 0), 0).x; - float l1 = 1.0 - texelFetch(sceneDepth, p - ivec2(1, 0), 0).x; - float r1 = 1.0 - texelFetch(sceneDepth, p + ivec2(1, 0), 0).x; - float r2 = 1.0 - texelFetch(sceneDepth, p + ivec2(2, 0), 0).x; - float b2 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 2), 0).x; - float b1 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 1), 0).x; - float t1 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 1), 0).x; - float t2 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 2), 0).x; - #else - float c0 = texelFetch(sceneDepth, p, 0).x; - float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x; - float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x; - float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x; - float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x; - float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x; - float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x; - float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x; - float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x; - #endif - - float dl = abs((2.0 * l1 - l2) - c0); - float dr = abs((2.0 * r1 - r2) - c0); - float db = abs((2.0 * b1 - b2) - c0); - float dt = abs((2.0 * t1 - t2) - c0); - - vec3 ce = getWorldPos(c0, vUv).xyz; - - vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz - : -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz; - vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz - : -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz; - - return normalize(cross(dpdx, dpdy)); -} - -mat3 makeRotationZ(float theta) { - float c = cos(theta); - float s = sin(theta); - return mat3(c, - s, 0, - s, c, 0, - 0, 0, 1); - } - -void main() { - vec4 diffuse = texture2D(sceneDiffuse, vUv); - #ifdef REVERSEDEPTH - float depth = 1.0 - texture2D(sceneDepth, vUv).x; - #else - float depth = texture2D(sceneDepth, vUv).x; - #endif - if (depth == 1.0) { - gl_FragColor = vec4(vec3(1.0), 1.0); - return; - } - vec3 worldPos = getWorldPos(depth, vUv); - #ifdef HALFRES - vec3 normal = texture2D(sceneNormal, vUv).rgb; - #else - vec3 normal = computeNormal(worldPos, vUv); - #endif - vec4 noise = texture2D(bluenoise, gl_FragCoord.xy / 128.0); - vec2 harmoniousNumbers = vec2( - 1.618033988749895, - 1.324717957244746 - ); - noise.rg += harmoniousNumbers * frame; - noise.rg = fract(noise.rg); - vec3 helperVec = vec3(0.0, 1.0, 0.0); - if (dot(helperVec, normal) > 0.99) { - helperVec = vec3(1.0, 0.0, 0.0); - } - vec3 tangent = normalize(cross(helperVec, normal)); - vec3 bitangent = cross(normal, tangent); - mediump mat3 tbn = mat3(tangent, bitangent, normal) * makeRotationZ( noise.r * 3.1415962 * 2.0) ; - - mediump float occluded = 0.0; - mediump float totalWeight = 0.0; - float radiusToUse = screenSpaceRadius ? distance( - worldPos, - getWorldPos(depth, vUv + - vec2(radius, 0.0) / resolution) - ) : radius; - float distanceFalloffToUse =screenSpaceRadius ? - radiusToUse * distanceFalloff - : radiusToUse * distanceFalloff * 0.2; - float bias = (min( - 0.1, - distanceFalloffToUse * 0.1 - ) / near) * fwidth(distance(worldPos, cameraPos)) / radiusToUse; - bias = biasAdjustment.x + biasAdjustment.y * bias; - mediump float offsetMove = noise.g; - mediump float offsetMoveInv = 1.0 / FSAMPLES; - float farTimesNear = far * near; - float farMinusNear = far - near; - - for(int i = 0; i < SAMPLES; i++) { - mediump vec3 sampleDirection = tbn * samples[i]; - - float moveAmt = fract(offsetMove); - offsetMove += offsetMoveInv; - vec3 samplePos = worldPos + radiusToUse * moveAmt * sampleDirection; - vec4 offset = projMat * vec4(samplePos, 1.0); - offset.xyz /= offset.w; - offset.xyz = offset.xyz * 0.5 + 0.5; - - if (all(greaterThan(offset.xyz * (1.0 - offset.xyz), vec3(0.0)))) { - #ifdef REVERSEDEPTH - float sampleDepth = 1.0 - textureLod(sceneDepth, offset.xy, 0.0).x; - #else - float sampleDepth = textureLod(sceneDepth, offset.xy, 0.0).x; - #endif - - /*#ifdef LOGDEPTH - float distSample = linearize_depth_log(sampleDepth, near, far); - #else - #ifdef ORTHO - float distSample = near + farMinusNear * sampleDepth; - #else - float distSample = (farTimesNear) / (far - sampleDepth * farMinusNear); - #endif - #endif*/ - #ifdef ORTHO - float distSample = near + sampleDepth * farMinusNear; - #else - #ifdef LOGDEPTH - float distSample = linearize_depth_log(sampleDepth, near, far); - #else - float distSample = (farTimesNear) / (far - sampleDepth * farMinusNear); - #endif - #endif - - #ifdef ORTHO - float distWorld = near + offset.z * farMinusNear; - #else - float distWorld = (farTimesNear) / (far - offset.z * farMinusNear); - #endif - - mediump float rangeCheck = smoothstep(0.0, 1.0, distanceFalloffToUse / (abs(distSample - distWorld))); - vec2 diff = gl_FragCoord.xy - floor(offset.xy * resolution); - occluded += rangeCheck * float(distSample != distWorld) * float(sampleDepth != depth) * step(distSample + bias, distWorld) * step( - 1.0, - dot(diff, diff) - ); - - totalWeight ++; - } - } - float occ = clamp(1.0 - occluded / (totalWeight == 0.0 ? 1.0 : totalWeight), 0.0, 1.0); - gl_FragColor = vec4(occ, 0.5 + 0.5 * normal); -}`},A={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},tDiffuse:{value:null},transparencyDWFalse:{value:null},transparencyDWTrue:{value:null},transparencyDWTrueDepth:{value:null},transparencyAware:{value:!1},projMat:{value:new f},viewMat:{value:new f},projectionMatrixInv:{value:new f},viewMatrixInv:{value:new f},cameraPos:{value:new t},resolution:{value:new g},color:{value:new t(0,0,0)},blueNoise:{value:null},downsampledDepth:{value:null},time:{value:0},intensity:{value:10},renderMode:{value:0},gammaCorrection:{value:!1},ortho:{value:!1},near:{value:.1},far:{value:1e3},screenSpaceRadius:{value:!1},radius:{value:0},distanceFalloff:{value:1},fog:{value:!1},fogExp:{value:!1},fogDensity:{value:0},fogNear:{value:1/0},fogFar:{value:1/0},colorMultiply:{value:!0},aoTones:{value:0}},depthWrite:!1,depthTest:!1,vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = vec4(position, 1); - }`,fragmentShader:` - uniform sampler2D sceneDiffuse; - uniform highp sampler2D sceneDepth; - uniform highp sampler2D downsampledDepth; - uniform highp sampler2D transparencyDWFalse; - uniform highp sampler2D transparencyDWTrue; - uniform highp sampler2D transparencyDWTrueDepth; - uniform sampler2D tDiffuse; - uniform sampler2D blueNoise; - uniform vec2 resolution; - uniform vec3 color; - uniform mat4 projectionMatrixInv; - uniform mat4 viewMatrixInv; - uniform float intensity; - uniform float renderMode; - uniform float near; - uniform float far; - uniform float aoTones; - uniform bool gammaCorrection; - uniform bool ortho; - uniform bool screenSpaceRadius; - uniform bool fog; - uniform bool fogExp; - uniform bool colorMultiply; - uniform bool transparencyAware; - uniform float fogDensity; - uniform float fogNear; - uniform float fogFar; - uniform float radius; - uniform float distanceFalloff; - uniform vec3 cameraPos; - varying vec2 vUv; - highp float linearize_depth(highp float d, highp float zNear,highp float zFar) - { - return (zFar * zNear) / (zFar - d * (zFar - zNear)); - } - highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) { - return nearZ + (farZ - nearZ) * d; - } - highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) { - float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - return ortho ? linearize_depth_ortho( - linDepth, - nearZ, - farZ - ) :linearize_depth(linDepth, nearZ, farZ); - } - vec3 getWorldPosLog(vec3 posS) { - vec2 uv = posS.xy; - float z = posS.z; - float nearZ =near; - float farZ = far; - float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0; - vec4 wpos = projectionMatrixInv * clipVec; - return wpos.xyz / wpos.w; - } - vec3 getWorldPos(float depth, vec2 coord) { - #ifdef LOGDEPTH - #ifndef ORTHO - return getWorldPosLog(vec3(coord, depth)); - #endif - #endif - // } - float z = depth * 2.0 - 1.0; - vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0); - vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition; - // Perspective division - vec4 worldSpacePosition = viewSpacePosition; - worldSpacePosition.xyz /= worldSpacePosition.w; - return worldSpacePosition.xyz; - } - - vec3 computeNormal(vec3 worldPos, vec2 vUv) { - ivec2 p = ivec2(vUv * resolution); - #ifdef REVERSEDEPTH - float c0 = 1.0 - texelFetch(sceneDepth, p, 0).x; - float l2 = 1.0 - texelFetch(sceneDepth, p - ivec2(2, 0), 0).x; - float l1 = 1.0 - texelFetch(sceneDepth, p - ivec2(1, 0), 0).x; - float r1 = 1.0 - texelFetch(sceneDepth, p + ivec2(1, 0), 0).x; - float r2 = 1.0 - texelFetch(sceneDepth, p + ivec2(2, 0), 0).x; - float b2 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 2), 0).x; - float b1 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 1), 0).x; - float t1 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 1), 0).x; - float t2 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 2), 0).x; - #else - float c0 = texelFetch(sceneDepth, p, 0).x; - float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x; - float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x; - float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x; - float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x; - float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x; - float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x; - float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x; - float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x; - #endif - - float dl = abs((2.0 * l1 - l2) - c0); - float dr = abs((2.0 * r1 - r2) - c0); - float db = abs((2.0 * b1 - b2) - c0); - float dt = abs((2.0 * t1 - t2) - c0); - - vec3 ce = getWorldPos(c0, vUv).xyz; - - vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz - : -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz; - vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz - : -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz; - - return normalize(cross(dpdx, dpdy)); - } - - #include - #include - void main() { - //vec4 texel = texture2D(tDiffuse, vUv);//vec3(0.0); - vec4 sceneTexel = texture2D(sceneDiffuse, vUv); - #ifdef REVERSEDEPTH - float depth = 1.0 - texture2D(sceneDepth, vUv).x; - #else - float depth = texture2D(sceneDepth, vUv).x; - #endif - #ifdef HALFRES - vec4 texel; - if (depth == 1.0) { - texel = vec4(0.0, 0.0, 0.0, 1.0); - } else { - vec3 worldPos = getWorldPos(depth, vUv); - vec3 normal = computeNormal(getWorldPos(depth, vUv), vUv); - // vec4 texel = texture2D(tDiffuse, vUv); - // Find closest depth; - float totalWeight = 0.0; - float radiusToUse = screenSpaceRadius ? distance( - worldPos, - getWorldPos(depth, vUv + - vec2(radius, 0.0) / resolution) - ) : radius; - float distanceFalloffToUse =screenSpaceRadius ? - radiusToUse * distanceFalloff - : distanceFalloff; - for(float x = -1.0; x <= 1.0; x++) { - for(float y = -1.0; y <= 1.0; y++) { - vec2 offset = vec2(x, y); - ivec2 p = ivec2( - (vUv * resolution * 0.5) + offset - ); - vec2 pUv = vec2(p) / (resolution * 0.5); - float sampleDepth = texelFetch(downsampledDepth,p, 0).x; - vec4 sampleInfo = texelFetch(tDiffuse, p, 0); - vec3 normalSample = sampleInfo.gba * 2.0 - 1.0; - vec3 worldPosSample = getWorldPos(sampleDepth, pUv); - float tangentPlaneDist = abs(dot(worldPosSample - worldPos, normal)); - float rangeCheck = exp(-1.0 * tangentPlaneDist * (1.0 / distanceFalloffToUse)) * max(dot(normal, normalSample), 0.0); - float weight = rangeCheck; - totalWeight += weight; - texel += sampleInfo * weight; - } - } - if (totalWeight == 0.0) { - texel = texture2D(tDiffuse, vUv); - } else { - texel /= totalWeight; - } - } - #else - vec4 texel = texture2D(tDiffuse, vUv); - #endif - - #ifdef LOGDEPTH - texel.r = clamp(texel.r, 0.0, 1.0); - if (texel.r == 0.0) { - texel.r = 1.0; - } - #endif - - float finalAo = pow(texel.r, intensity); - if (aoTones > 0.0) { - finalAo = ceil(finalAo * aoTones) / aoTones; - } - float fogFactor; - float fogDepth = distance( - cameraPos, - getWorldPos(depth, vUv) - ); - if (fog) { - if (fogExp) { - fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth ); - } else { - fogFactor = smoothstep( fogNear, fogFar, fogDepth ); - } - } - if (transparencyAware) { - float transparencyDWOff = texture2D(transparencyDWFalse, vUv).a; - float transparencyDWOn = texture2D(transparencyDWTrue, vUv).a; - float adjustmentFactorOff = transparencyDWOff; - #ifdef REVERSEDEPTH - float depthSample = 1.0 - texture2D(sceneDepth, vUv).r; - float trueDepthSample = 1.0 - texture2D(transparencyDWTrueDepth, vUv).r; - #else - float depthSample = texture2D(sceneDepth, vUv).r; - float trueDepthSample = texture2D(transparencyDWTrueDepth, vUv).r; - #endif - float adjustmentFactorOn = (1.0 - transparencyDWOn) * ( - trueDepthSample == depthSample ? 1.0 : 0.0 - ); - float adjustmentFactor = max(adjustmentFactorOff, adjustmentFactorOn); - finalAo = mix(finalAo, 1.0, adjustmentFactor); - } - finalAo = mix(finalAo, 1.0, fogFactor); - vec3 aoApplied = color * mix(vec3(1.0), sceneTexel.rgb, float(colorMultiply)); - if (renderMode == 0.0) { - gl_FragColor = vec4( mix(sceneTexel.rgb, aoApplied, 1.0 - finalAo), sceneTexel.a); - } else if (renderMode == 1.0) { - gl_FragColor = vec4( mix(vec3(1.0), aoApplied, 1.0 - finalAo), sceneTexel.a); - } else if (renderMode == 2.0) { - gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a); - } else if (renderMode == 3.0) { - if (vUv.x < 0.5) { - gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a); - } else if (abs(vUv.x - 0.5) < 1.0 / resolution.x) { - gl_FragColor = vec4(1.0); - } else { - gl_FragColor = vec4( mix(sceneTexel.rgb, aoApplied, 1.0 - finalAo), sceneTexel.a); - } - } else if (renderMode == 4.0) { - if (vUv.x < 0.5) { - gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a); - } else if (abs(vUv.x - 0.5) < 1.0 / resolution.x) { - gl_FragColor = vec4(1.0); - } else { - gl_FragColor = vec4( mix(vec3(1.0), aoApplied, 1.0 - finalAo), sceneTexel.a); - } - } - #include - if (gammaCorrection) { - gl_FragColor = sRGBTransferOETF(gl_FragColor); - } - } - `},j={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},tDiffuse:{value:null},projMat:{value:new f},viewMat:{value:new f},projectionMatrixInv:{value:new f},viewMatrixInv:{value:new f},cameraPos:{value:new t},resolution:{value:new g},time:{value:0},r:{value:5},blueNoise:{value:null},radius:{value:12},worldRadius:{value:5},index:{value:0},poissonDisk:{value:[]},distanceFalloff:{value:1},near:{value:.1},far:{value:1e3},screenSpaceRadius:{value:!1}},depthWrite:!1,depthTest:!1,vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); - }`,fragmentShader:` - uniform sampler2D sceneDiffuse; - uniform highp sampler2D sceneDepth; - uniform sampler2D tDiffuse; - uniform sampler2D blueNoise; - uniform mat4 projectionMatrixInv; - uniform mat4 viewMatrixInv; - uniform vec2 resolution; - uniform float r; - uniform float radius; - uniform float worldRadius; - uniform float index; - uniform float near; - uniform float far; - uniform float distanceFalloff; - uniform bool screenSpaceRadius; - varying vec2 vUv; - - highp float linearize_depth(highp float d, highp float zNear,highp float zFar) - { - highp float z_n = 2.0 * d - 1.0; - return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear)); - } - highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) { - float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - return linearize_depth(linDepth, nearZ, farZ); - } - highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) { - return nearZ + (farZ - nearZ) * d; - } - vec3 getWorldPosLog(vec3 posS) { - vec2 uv = posS.xy; - float z = posS.z; - float nearZ =near; - float farZ = far; - float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0; - vec4 wpos = projectionMatrixInv * clipVec; - return wpos.xyz / wpos.w; - } - vec3 getWorldPos(float depth, vec2 coord) { - #ifdef LOGDEPTH - #ifndef ORTHO - return getWorldPosLog(vec3(coord, depth)); - #endif - #endif - - float z = depth * 2.0 - 1.0; - vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0); - vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition; - // Perspective division - vec4 worldSpacePosition = viewSpacePosition; - worldSpacePosition.xyz /= worldSpacePosition.w; - return worldSpacePosition.xyz; - } - #include - #define NUM_SAMPLES 16 - uniform vec2 poissonDisk[NUM_SAMPLES]; - void main() { - const float pi = 3.14159; - vec2 texelSize = vec2(1.0 / resolution.x, 1.0 / resolution.y); - vec2 uv = vUv; - vec4 data = texture2D(tDiffuse, vUv); - float occlusion = data.r; - float baseOcc = data.r; - vec3 normal = data.gba * 2.0 - 1.0; - float count = 1.0; - float d = texture2D(sceneDepth, vUv).x; - if (d == 1.0) { - gl_FragColor = data; - return; - } - vec3 worldPos = getWorldPos(d, vUv); - float size = radius; - float angle; - if (index == 0.0) { - angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).w * PI2; - } else if (index == 1.0) { - angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).z * PI2; - } else if (index == 2.0) { - angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).y * PI2; - } else { - angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).x * PI2; - } - - mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle)); - float radiusToUse = screenSpaceRadius ? distance( - worldPos, - getWorldPos(d, vUv + - vec2(worldRadius, 0.0) / resolution) - ) : worldRadius; - float distanceFalloffToUse =screenSpaceRadius ? - radiusToUse * distanceFalloff - : radiusToUse * distanceFalloff * 0.2; - - float invDistance = (1.0 / distanceFalloffToUse); - for(int i = 0; i < NUM_SAMPLES; i++) { - vec2 offset = (rotationMatrix * poissonDisk[i]) * texelSize * size; - vec4 dataSample = texture2D(tDiffuse, uv + offset); - float occSample = dataSample.r; - vec3 normalSample = dataSample.gba * 2.0 - 1.0; - float dSample = texture2D(sceneDepth, uv + offset).x; - vec3 worldPosSample = getWorldPos(dSample, uv + offset); - float tangentPlaneDist = abs(dot(worldPosSample - worldPos, normal)); - float rangeCheck = float(dSample != 1.0) * exp(-1.0 * tangentPlaneDist * invDistance ) * max(dot(normal, normalSample), 0.0); - occlusion += occSample * rangeCheck; - count += rangeCheck; - } - if (count > 0.0) { - occlusion /= count; - } - occlusion = clamp(occlusion, 0.0, 1.0); - if (occlusion == 0.0) { - occlusion = 1.0; - } - gl_FragColor = vec4(occlusion, 0.5 + 0.5 * normal); - } - `},M={uniforms:{sceneDepth:{value:null},resolution:{value:new g},near:{value:.1},far:{value:1e3},viewMatrixInv:{value:new f},projectionMatrixInv:{value:new f},logDepth:{value:!1},ortho:{value:!1}},depthWrite:!1,depthTest:!1,vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = vec4(position, 1); - }`,fragmentShader:` - uniform highp sampler2D sceneDepth; - uniform vec2 resolution; - uniform float near; - uniform float far; - uniform bool logDepth; - uniform bool ortho; - uniform mat4 viewMatrixInv; - uniform mat4 projectionMatrixInv; - varying vec2 vUv; - layout(location = 1) out vec4 gNormal; - vec3 getWorldPosLog(vec3 posS) { - vec2 uv = posS.xy; - float z = posS.z; - float nearZ =near; - float farZ = far; - float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0; - vec4 wpos = projectionMatrixInv * clipVec; - return wpos.xyz / wpos.w; - } - vec3 getWorldPos(float depth, vec2 coord) { - if (logDepth && !ortho) { - return getWorldPosLog(vec3(coord, depth)); - } - float z = depth * 2.0 - 1.0; - vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0); - vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition; - // Perspective division - vec4 worldSpacePosition = viewSpacePosition; - worldSpacePosition.xyz /= worldSpacePosition.w; - return worldSpacePosition.xyz; - } - - vec3 computeNormal(vec3 worldPos, vec2 vUv) { - ivec2 p = ivec2(vUv * resolution); - #ifdef REVERSEDEPTH - float c0 = 1.0 - texelFetch(sceneDepth, p, 0).x; - float l2 = 1.0 - texelFetch(sceneDepth, p - ivec2(2, 0), 0).x; - float l1 = 1.0 - texelFetch(sceneDepth, p - ivec2(1, 0), 0).x; - float r1 = 1.0 - texelFetch(sceneDepth, p + ivec2(1, 0), 0).x; - float r2 = 1.0 - texelFetch(sceneDepth, p + ivec2(2, 0), 0).x; - float b2 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 2), 0).x; - float b1 = 1.0 - texelFetch(sceneDepth, p - ivec2(0, 1), 0).x; - float t1 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 1), 0).x; - float t2 = 1.0 - texelFetch(sceneDepth, p + ivec2(0, 2), 0).x; - #else - float c0 = texelFetch(sceneDepth, p, 0).x; - float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x; - float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x; - float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x; - float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x; - float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x; - float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x; - float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x; - float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x; - #endif - - float dl = abs((2.0 * l1 - l2) - c0); - float dr = abs((2.0 * r1 - r2) - c0); - float db = abs((2.0 * b1 - b2) - c0); - float dt = abs((2.0 * t1 - t2) - c0); - - vec3 ce = getWorldPos(c0, vUv).xyz; - - vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz - : -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz; - vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz - : -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz; - - return normalize(cross(dpdx, dpdy)); - } - void main() { - vec2 uv = vUv - vec2(0.5) / resolution; - vec2 pixelSize = vec2(1.0) / resolution; - highp vec2[4] uvSamples; - uvSamples[0] = uv; - uvSamples[1] = uv + vec2(pixelSize.x, 0.0); - uvSamples[2] = uv + vec2(0.0, pixelSize.y); - uvSamples[3] = uv + pixelSize; - #ifdef REVERSEDEPTH - float depth00 = 1.0 - texture2D(sceneDepth, uvSamples[0]).r; - float depth10 = 1.0 - texture2D(sceneDepth, uvSamples[1]).r; - float depth01 = 1.0 - texture2D(sceneDepth, uvSamples[2]).r; - float depth11 = 1.0 - texture2D(sceneDepth, uvSamples[3]).r; - #else - float depth00 = texture2D(sceneDepth, uvSamples[0]).r; - float depth10 = texture2D(sceneDepth, uvSamples[1]).r; - float depth01 = texture2D(sceneDepth, uvSamples[2]).r; - float depth11 = texture2D(sceneDepth, uvSamples[3]).r; - #endif - float minDepth = min(min(depth00, depth10), min(depth01, depth11)); - float maxDepth = max(max(depth00, depth10), max(depth01, depth11)); - float targetDepth = minDepth; - // Checkerboard pattern to avoid artifacts - if (mod(gl_FragCoord.x + gl_FragCoord.y, 2.0) > 0.5) { - targetDepth = maxDepth; - } - int chosenIndex = 0; - float[4] samples; - samples[0] = depth00; - samples[1] = depth10; - samples[2] = depth01; - samples[3] = depth11; - for(int i = 0; i < 4; ++i) { - if (samples[i] == targetDepth) { - chosenIndex = i; - break; - } - } - gl_FragColor = vec4(samples[chosenIndex], 0.0, 0.0, 1.0); - gNormal = vec4(computeNormal( - getWorldPos(samples[chosenIndex], uvSamples[chosenIndex]), uvSamples[chosenIndex] - ), 0.0); - }`},N=Uint8Array.from(atob(`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`),e=>e.charCodeAt(0)),P=parseInt(`169.19`.replace(/\D+/g,``))>=162?class extends r{constructor(e=1,t=1,n=1,r={}){super(e,t,{...r,count:n}),this.isWebGLMultipleRenderTargets=!0}get texture(){return this.textures}}:class extends r{constructor(e=1,t=1,n=1,r={}){super(e,t,r),this.isWebGLMultipleRenderTargets=!0;let i=this.texture;this.texture=[];for(let e=0;e{F(e,t,n)},1)}var I=class extends w{constructor(t,n,o=512,l=512){super(),this.width=o,this.height=l,this.clear=!0,this.camera=n,this.scene=t,this.autosetGamma=!0,this.configuration=new Proxy({aoSamples:16,aoRadius:5,aoTones:0,denoiseSamples:8,denoiseRadius:12,distanceFalloff:1,intensity:5,denoiseIterations:2,renderMode:0,biasOffset:0,biasMultiplier:0,color:new e(0,0,0),gammaCorrection:!0,depthBufferType:R.Default,screenSpaceRadius:!1,halfRes:!1,depthAwareUpsampling:!0,colorMultiply:!0,transparencyAware:!1,accumulate:!1},{set:(e,t,n)=>{let r=e[t];return e[t]=n,n.equals?n.equals(r)||this.firstFrame():r!==n&&this.firstFrame(),t===`aoSamples`&&r!==n&&this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),t===`denoiseSamples`&&r!==n&&this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),t===`halfRes`&&r!==n&&(this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureHalfResTargets(),this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.setSize(this.width,this.height)),t===`depthAwareUpsampling`&&r!==n&&this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),t===`gammaCorrection`&&(this.autosetGamma=!1),t===`transparencyAware`&&r!==n&&(this.autoDetectTransparency=!1,this.configureTransparencyTarget()),!0}}),this.samples=[],this.samplesDenoise=[],this.autoDetectTransparency=!0,this.frames=0,this.lastViewMatrix=new f,this.lastProjectionMatrix=new f,this.configureEffectCompositer(this.configuration.depthBufferType),this.configureSampleDependentPasses(),this.configureHalfResTargets(),this.detectTransparency(),this.configureTransparencyTarget(),this.copyQuad=new O(new S({uniforms:{tDiffuse:{value:null}},depthWrite:!1,vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = vec4(position, 1); - } - `,fragmentShader:` - uniform sampler2D tDiffuse; - varying vec2 vUv; - void main() { - gl_FragColor = texture2D(tDiffuse, vUv); - } - `})),this.writeTargetInternal=new r(this.width,this.height,{minFilter:a,magFilter:a,depthBuffer:!1,format:c}),this.readTargetInternal=new r(this.width,this.height,{minFilter:a,magFilter:a,depthBuffer:!1,format:c}),this.outputTargetInternal=new r(this.width,this.height,{minFilter:a,magFilter:a,depthBuffer:!1}),this.accumulationRenderTarget=new r(this.width,this.height,{minFilter:a,magFilter:a,depthBuffer:!1,format:c,type:h,stencilBuffer:!1,depthBuffer:!1,alpha:!0}),this.accumulationQuad=new O(new S({uniforms:{frame:{value:0},tDiffuse:{value:null}},transparent:!0,opacity:1,vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = vec4(position, 1); - }`,fragmentShader:` - uniform sampler2D tDiffuse; - uniform float frame; - varying vec2 vUv; - void main() { - vec4 color = texture2D(tDiffuse, vUv); - gl_FragColor = vec4(color.rgb, 1.0 / (frame + 1.0)); - } - `})),this.bluenoise=new i(N,128,128),this.bluenoise.colorSpace=``,this.bluenoise.wrapS=s,this.bluenoise.wrapT=s,this.bluenoise.minFilter=y,this.bluenoise.magFilter=y,this.bluenoise.needsUpdate=!0,this.lastTime=0,this.timeRollingAverage=.99,this.needsDepthTexture=!0,this.needsSwap=!0,this._r=new g,this._c=new e}configureHalfResTargets(){this.firstFrame(),this.configuration.halfRes?(this.depthDownsampleTarget=new P(this.width/2,this.height/2,2),this.depthDownsampleTarget.textures[0].format=x,this.depthDownsampleTarget.textures[0].type=b,this.depthDownsampleTarget.textures[0].minFilter=y,this.depthDownsampleTarget.textures[0].magFilter=y,this.depthDownsampleTarget.textures[0].depthBuffer=!1,this.depthDownsampleTarget.textures[1].format=c,this.depthDownsampleTarget.textures[1].type=h,this.depthDownsampleTarget.textures[1].minFilter=y,this.depthDownsampleTarget.textures[1].magFilter=y,this.depthDownsampleTarget.textures[1].depthBuffer=!1,this.depthDownsampleQuad=new O(new S(M))):(this.depthDownsampleTarget&&=(this.depthDownsampleTarget.dispose(),null),this.depthDownsampleQuad&&=(this.depthDownsampleQuad.dispose(),null))}detectTransparency(){if(this.autoDetectTransparency){let e=!1;this.scene.traverse(t=>{t.material&&t.material.transparent&&(e=!0)}),e&&(this.configuration.transparencyAware=!0)}}configureTransparencyTarget(){this.configuration.transparencyAware?(this.transparencyRenderTargetDWFalse=new r(this.width,this.height,{minFilter:a,magFilter:y,type:h,format:c}),this.transparencyRenderTargetDWTrue=new r(this.width,this.height,{minFilter:a,magFilter:y,type:h,format:c}),this.transparencyRenderTargetDWTrue.depthTexture=new d(this.width,this.height,l),this.depthCopyPass=new O(new S({uniforms:{depthTexture:{value:this.depthTexture},reverseDepthBuffer:{value:this.configuration.depthBufferType===R.Reverse}},vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = vec4(position, 1); - }`,fragmentShader:` - uniform sampler2D depthTexture; - uniform bool reverseDepthBuffer; - varying vec2 vUv; - void main() { - if (reverseDepthBuffer) { - float d = 1.0 - texture2D(depthTexture, vUv).r; - - d += 0.00001; - gl_FragDepth = 1.0 - d; - } else { - float d = texture2D(depthTexture, vUv).r; - d += 0.00001; - gl_FragDepth = d; - } - gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); - } - `}))):(this.transparencyRenderTargetDWFalse&&=(this.transparencyRenderTargetDWFalse.dispose(),null),this.transparencyRenderTargetDWTrue&&=(this.transparencyRenderTargetDWTrue.dispose(),null),this.depthCopyPass&&=(this.depthCopyPass.dispose(),null))}renderTransparency(t){let n=this.scene.background,r=t.getClearColor(new e),i=t.getClearAlpha(),a=new Map,o=t.autoClearDepth;this.scene.traverse(e=>{a.set(e,e.visible)}),this.scene.background=null,t.autoClearDepth=!1,t.setClearColor(new e(0,0,0),0),this.depthCopyPass.material.uniforms.depthTexture.value=this.depthTexture,this.depthCopyPass.material.uniforms.reverseDepthBuffer.value=this.configuration.depthBufferType===R.Reverse,t.setRenderTarget(this.transparencyRenderTargetDWFalse),this.scene.traverse(e=>{e.material&&(e.visible=a.get(e)&&(e.material.transparent&&!e.material.depthWrite&&!e.userData.treatAsOpaque||!!e.userData.cannotReceiveAO))}),t.clear(!0,!0,!0),this.depthCopyPass.render(t),t.render(this.scene,this.camera),t.setRenderTarget(this.transparencyRenderTargetDWTrue),this.scene.traverse(e=>{e.material&&(e.visible=a.get(e)&&e.material.transparent&&e.material.depthWrite&&!e.userData.treatAsOpaque)}),t.clear(!0,!0,!0),this.depthCopyPass.render(t),t.render(this.scene,this.camera),this.scene.traverse(e=>{e.visible=a.get(e)}),t.setClearColor(r,i),this.scene.background=n,t.autoClearDepth=o}configureSampleDependentPasses(){this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera)}configureAOPass(e=R.Default,t=!1){this.firstFrame(),this.samples=this.generateHemisphereSamples(this.configuration.aoSamples);let n={...k};n.fragmentShader=n.fragmentShader.replace(`16`,this.configuration.aoSamples).replace(`16.0`,this.configuration.aoSamples+`.0`),e===R.Log?n.fragmentShader=`#define LOGDEPTH -`+n.fragmentShader:e===R.Reverse&&(n.fragmentShader=`#define REVERSEDEPTH -`+n.fragmentShader),t&&(n.fragmentShader=`#define ORTHO -`+n.fragmentShader),this.configuration.halfRes&&(n.fragmentShader=`#define HALFRES -`+n.fragmentShader),this.effectShaderQuad?(this.effectShaderQuad.material.dispose(),this.effectShaderQuad.material=new S(n)):this.effectShaderQuad=new O(new S(n))}configureDenoisePass(e=R.Default,t=!1){this.firstFrame(),this.samplesDenoise=this.generateDenoiseSamples(this.configuration.denoiseSamples,11);let n={...j};n.fragmentShader=n.fragmentShader.replace(`16`,this.configuration.denoiseSamples),e===R.Log?n.fragmentShader=`#define LOGDEPTH -`+n.fragmentShader:e===R.Reverse&&(n.fragmentShader=`#define REVERSEDEPTH -`+n.fragmentShader),t&&(n.fragmentShader=`#define ORTHO -`+n.fragmentShader),this.poissonBlurQuad?(this.poissonBlurQuad.material.dispose(),this.poissonBlurQuad.material=new S(n)):this.poissonBlurQuad=new O(new S(n))}configureEffectCompositer(e=R.Default,t=!1){this.firstFrame();let n={...A};e===R.Log?n.fragmentShader=`#define LOGDEPTH -`+n.fragmentShader:e===R.Reverse&&(n.fragmentShader=`#define REVERSEDEPTH -`+n.fragmentShader),t&&(n.fragmentShader=`#define ORTHO -`+n.fragmentShader),this.configuration.halfRes&&this.configuration.depthAwareUpsampling&&(n.fragmentShader=`#define HALFRES -`+n.fragmentShader),this.effectCompositerQuad?(this.effectCompositerQuad.material.dispose(),this.effectCompositerQuad.material=new S(n)):this.effectCompositerQuad=new O(new S(n))}generateHemisphereSamples(e){let n=[];for(let r=0;r{L(e,t,n)},1)}var R={Default:1,Log:2,Reverse:3},z=class extends T{constructor(t,u,m=512,_=512){super(),this.width=m,this.height=_,this.clear=!0,this.camera=u,this.scene=t,this.configuration=new Proxy({aoSamples:16,aoRadius:5,aoTones:0,denoiseSamples:8,denoiseRadius:12,distanceFalloff:1,intensity:5,denoiseIterations:2,renderMode:0,biasOffset:0,biasMultiplier:0,color:new e(0,0,0),gammaCorrection:!0,depthBufferType:R.Default,screenSpaceRadius:!1,halfRes:!1,depthAwareUpsampling:!0,autoRenderBeauty:!0,colorMultiply:!0,transparencyAware:!1,stencil:!1,accumulate:!1},{set:(e,t,i)=>{let s=e[t];return e[t]=i,i.equals?i.equals(s)||this.firstFrame():s!==i&&this.firstFrame(),t===`aoSamples`&&s!==i&&this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),t===`denoiseSamples`&&s!==i&&this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),t===`halfRes`&&s!==i&&(this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureHalfResTargets(),this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.setSize(this.width,this.height)),t===`depthAwareUpsampling`&&s!==i&&this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),t===`transparencyAware`&&s!==i&&(this.autoDetectTransparency=!1,this.configureTransparencyTarget()),t===`stencil`&&s!==i&&(this.beautyRenderTarget.dispose(),this.beautyRenderTarget=new r(this.width,this.height,{minFilter:a,magFilter:y,type:h,format:c,stencilBuffer:i}),this.beautyRenderTarget.depthTexture=new d(this.width,this.height,i?n:l),this.beautyRenderTarget.depthTexture.format=i?p:o),!0}}),this.samples=[],this.samplesDenoise=[],this.autoDetectTransparency=!0,this.frame=0,this.lastViewMatrix=new f,this.lastProjectionMatrix=new f,this.beautyRenderTarget=new r(this.width,this.height,{minFilter:a,magFilter:y,type:h,format:c,stencilBuffer:!1}),this.beautyRenderTarget.depthTexture=new d(this.width,this.height,l),this.beautyRenderTarget.depthTexture.format=o,this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureSampleDependentPasses(),this.configureHalfResTargets(),this.detectTransparency(),this.configureTransparencyTarget(),this.writeTargetInternal=new r(this.width,this.height,{minFilter:a,magFilter:a,depthBuffer:!1,format:c}),this.readTargetInternal=new r(this.width,this.height,{minFilter:a,magFilter:a,depthBuffer:!1,format:c}),this.accumulationRenderTarget=new r(this.width,this.height,{minFilter:a,magFilter:a,depthBuffer:!1,format:c,type:h,stencilBuffer:!1,depthBuffer:!1,alpha:!0}),this.bluenoise=new i(N,128,128),this.accumulationQuad=new O(new S({uniforms:{frame:{value:0},tDiffuse:{value:null}},transparent:!0,opacity:1,vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = vec4(position, 1); - }`,fragmentShader:` - uniform sampler2D tDiffuse; - uniform float frame; - varying vec2 vUv; - void main() { - vec4 color = texture2D(tDiffuse, vUv); - gl_FragColor = vec4(color.rgb, 1.0 / (frame + 1.0)); - } - `})),this.bluenoise.colorSpace=``,this.bluenoise.wrapS=s,this.bluenoise.wrapT=s,this.bluenoise.minFilter=y,this.bluenoise.magFilter=y,this.bluenoise.needsUpdate=!0,this.lastTime=0,this.timeRollingAverage=.99,this._r=new g,this._c=new e}configureHalfResTargets(){if(this.firstFrame(),this.configuration.halfRes){this.depthDownsampleTarget=new P(this.width/2,this.height/2,2),this.depthDownsampleTarget.textures[0].format=x,this.depthDownsampleTarget.textures[0].type=b,this.depthDownsampleTarget.textures[0].minFilter=y,this.depthDownsampleTarget.textures[0].magFilter=y,this.depthDownsampleTarget.textures[0].depthBuffer=!1,this.depthDownsampleTarget.textures[1].format=c,this.depthDownsampleTarget.textures[1].type=h,this.depthDownsampleTarget.textures[1].minFilter=y,this.depthDownsampleTarget.textures[1].magFilter=y,this.depthDownsampleTarget.textures[1].depthBuffer=!1;let e={...M};this.configuration.depthBufferType===R.Reverse&&(e.fragmentShader=`#define REVERSEDEPTH -`+e.fragmentShader),this.depthDownsampleQuad=new O(new S(e))}else this.depthDownsampleTarget&&=(this.depthDownsampleTarget.dispose(),null),this.depthDownsampleQuad&&=(this.depthDownsampleQuad.dispose(),null)}detectTransparency(){if(this.autoDetectTransparency){let e=!1;this.scene.traverse(t=>{t.material&&t.material.transparent&&(e=!0)}),this.configuration.transparencyAware=e}}configureTransparencyTarget(){this.configuration.transparencyAware?(this.transparencyRenderTargetDWFalse=new r(this.width,this.height,{minFilter:a,magFilter:y,type:h,format:c}),this.transparencyRenderTargetDWTrue=new r(this.width,this.height,{minFilter:a,magFilter:y,type:h,format:c}),this.transparencyRenderTargetDWTrue.depthTexture=new d(this.width,this.height,l),this.depthCopyPass=new O(new S({uniforms:{depthTexture:{value:this.depthTexture},reverseDepthBuffer:{value:this.configuration.depthBufferType===R.Reverse}},vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = vec4(position, 1); - }`,fragmentShader:` - uniform sampler2D depthTexture; - uniform bool reverseDepthBuffer; - varying vec2 vUv; - void main() { - if (reverseDepthBuffer) { - float d = 1.0 - texture2D(depthTexture, vUv).r; - - d += 0.00001; - gl_FragDepth = 1.0 - d; - } else { - float d = texture2D(depthTexture, vUv).r; - d += 0.00001; - gl_FragDepth = d; - } - gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); - } - `}))):(this.transparencyRenderTargetDWFalse&&=(this.transparencyRenderTargetDWFalse.dispose(),null),this.transparencyRenderTargetDWTrue&&=(this.transparencyRenderTargetDWTrue.dispose(),null),this.depthCopyPass&&=(this.depthCopyPass.dispose(),null))}renderTransparency(t){let n=this.scene.background,r=t.getClearColor(new e),i=t.getClearAlpha(),a=new Map,o=t.autoClearDepth;this.scene.traverse(e=>{a.set(e,e.visible)}),this.scene.background=null,t.autoClearDepth=!1,t.setClearColor(new e(0,0,0),0),this.depthCopyPass.material.uniforms.depthTexture.value=this.beautyRenderTarget.depthTexture,this.depthCopyPass.material.uniforms.reverseDepthBuffer.value=this.configuration.depthBufferType===R.Reverse,t.setRenderTarget(this.transparencyRenderTargetDWFalse),this.scene.traverse(e=>{e.material&&(e.visible=a.get(e)&&(e.material.transparent&&!e.material.depthWrite&&!e.userData.treatAsOpaque||!!e.userData.cannotReceiveAO))}),t.clear(!0,!0,!0),this.depthCopyPass.render(t),t.render(this.scene,this.camera),t.setRenderTarget(this.transparencyRenderTargetDWTrue),this.scene.traverse(e=>{e.material&&(e.visible=a.get(e)&&e.material.transparent&&e.material.depthWrite&&!e.userData.treatAsOpaque)}),t.clear(!0,!0,!0),this.depthCopyPass.render(t),t.render(this.scene,this.camera),this.scene.traverse(e=>{e.visible=a.get(e)}),t.setClearColor(r,i),this.scene.background=n,t.autoClearDepth=o}configureSampleDependentPasses(){this.firstFrame(),this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera)}configureAOPass(e=R.Default,t=!1){this.firstFrame(),this.samples=this.generateHemisphereSamples(this.configuration.aoSamples);let n={...k};n.fragmentShader=n.fragmentShader.replace(`16`,this.configuration.aoSamples).replace(`16.0`,this.configuration.aoSamples+`.0`),e===R.Log?n.fragmentShader=`#define LOGDEPTH -`+n.fragmentShader:e===R.Reverse&&(n.fragmentShader=`#define REVERSEDEPTH -`+n.fragmentShader),t&&(n.fragmentShader=`#define ORTHO -`+n.fragmentShader),this.configuration.halfRes&&(n.fragmentShader=`#define HALFRES -`+n.fragmentShader),this.effectShaderQuad?(this.effectShaderQuad.material.dispose(),this.effectShaderQuad.material=new S(n)):this.effectShaderQuad=new O(new S(n))}configureDenoisePass(e=R.Default,t=!1){this.firstFrame(),this.samplesDenoise=this.generateDenoiseSamples(this.configuration.denoiseSamples,11);let n={...j};n.fragmentShader=n.fragmentShader.replace(`16`,this.configuration.denoiseSamples),e===R.Log?n.fragmentShader=`#define LOGDEPTH -`+n.fragmentShader:e===R.Reverse&&(n.fragmentShader=`#define REVERSEDEPTH -`+n.fragmentShader),t&&(n.fragmentShader=`#define ORTHO -`+n.fragmentShader),this.poissonBlurQuad?(this.poissonBlurQuad.material.dispose(),this.poissonBlurQuad.material=new S(n)):this.poissonBlurQuad=new O(new S(n))}configureEffectCompositer(e=R.Default,t=!1){this.firstFrame();let n={...A};e===R.Log?n.fragmentShader=`#define LOGDEPTH -`+n.fragmentShader:e===R.Reverse&&(n.fragmentShader=`#define REVERSEDEPTH -`+n.fragmentShader),t&&(n.fragmentShader=`#define ORTHO -`+n.fragmentShader),this.configuration.halfRes&&this.configuration.depthAwareUpsampling&&(n.fragmentShader=`#define HALFRES -`+n.fragmentShader),this.effectCompositerQuad?(this.effectCompositerQuad.material.dispose(),this.effectCompositerQuad.material=new S(n)):this.effectCompositerQuad=new O(new S(n))}generateHemisphereSamples(e){let n=[];for(let r=0;ryt,ActiveEvents:()=>ht,ActiveHooks:()=>gt,Ball:()=>tn,BroadPhase:()=>Zt,CCDSolver:()=>Vt,Capsule:()=>on,CharacterCollision:()=>wn,CoefficientCombineRule:()=>W,Collider:()=>jn,ColliderDesc:()=>Mn,ColliderSet:()=>Nn,ColliderShapeCastHit:()=>Xt,Cone:()=>vn,ConvexPolyhedron:()=>pn,Cuboid:()=>rn,Cylinder:()=>gn,DebugRenderBuffers:()=>Sn,DebugRenderPipeline:()=>Cn,DynamicRayCastVehicleController:()=>Dn,EventQueue:()=>An,FeatureType:()=>G,FixedImpulseJoint:()=>Et,FixedMultibodyJoint:()=>It,GenericImpulseJoint:()=>jt,HalfSpace:()=>nn,HeightFieldFlags:()=>ft,Heightfield:()=>hn,ImpulseJoint:()=>J,ImpulseJointSet:()=>Pt,IntegrationParameters:()=>wt,IslandManager:()=>Ht,JointAxesMask:()=>dt,JointData:()=>Nt,JointType:()=>U,KinematicCharacterController:()=>Tn,MassPropsMode:()=>q,MotorModel:()=>ut,MultibodyJoint:()=>Y,MultibodyJointSet:()=>Bt,NarrowPhase:()=>Qt,PhysicsPipeline:()=>bn,PidAxesMask:()=>mt,PidController:()=>En,PointColliderProjection:()=>Jt,PointProjection:()=>qt,Polyline:()=>un,PrismaticImpulseJoint:()=>kt,PrismaticMultibodyJoint:()=>Lt,Quaternion:()=>st,QueryFilterFlags:()=>vt,Ray:()=>Ut,RayColliderHit:()=>Kt,RayColliderIntersection:()=>Gt,RayIntersection:()=>Wt,RevoluteImpulseJoint:()=>At,RevoluteMultibodyJoint:()=>Rt,RigidBody:()=>bt,RigidBodyDesc:()=>xt,RigidBodySet:()=>Ct,RigidBodyType:()=>H,RopeImpulseJoint:()=>Dt,RotationOps:()=>V,RoundCone:()=>yn,RoundConvexPolyhedron:()=>mn,RoundCuboid:()=>an,RoundCylinder:()=>_n,RoundTriangle:()=>ln,SdpMatrix3:()=>ct,SdpMatrix3Ops:()=>lt,Segment:()=>sn,SerializationPipeline:()=>xn,Shape:()=>X,ShapeCastHit:()=>Yt,ShapeContact:()=>en,ShapeType:()=>K,SolverFlags:()=>_t,SphericalImpulseJoint:()=>Mt,SphericalMultibodyJoint:()=>zt,SpringImpulseJoint:()=>Ot,TempContactForceEvent:()=>kn,TempContactManifold:()=>$t,TriMesh:()=>fn,TriMeshFlags:()=>pt,Triangle:()=>cn,UnitImpulseJoint:()=>Tt,UnitMultibodyJoint:()=>Ft,Vector3:()=>ot,VectorOps:()=>B,Voxels:()=>dn,World:()=>On,default:()=>Wn,init:()=>Vn,reserveMemory:()=>Un,version:()=>Hn}),n,r=Array(128).fill(void 0);function i(e){return r[e]}r.push(void 0,null,!0,!1);var a=r.length;function o(e){a===r.length&&r.push(r.length+1);let t=a;return a=r[t],r[t]=e,t}function s(e,t){try{return e.apply(this,t)}catch(e){n.__wbindgen_export_0(o(e))}}var c=typeof TextDecoder<`u`?new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error(`TextDecoder not available`)}};typeof TextDecoder<`u`&&c.decode();var l=null;function u(e,t){return e>>>=0,c.decode((l!==null&&l.byteLength!==0||(l=new Uint8Array(n.memory.buffer)),l).subarray(e,e+t))}function d(e){return e==null}var f=null;function p(){return(f===null||!0===f.buffer.detached||f.buffer.detached===void 0&&f.buffer!==n.memory.buffer)&&(f=new DataView(n.memory.buffer)),f}function m(e){let t=i(e);return function(e){e<132||(r[e]=a,a=e)}(e),t}function h(e,t){if(!(e instanceof t))throw Error(`expected instance of ${t.name}`)}var g=128;function _(e){if(g==1)throw Error(`out of js stack`);return r[--g]=e,g}var v=null;function y(e,t){return e>>>=0,(v!==null&&v.byteLength!==0||(v=new Int32Array(n.memory.buffer)),v).subarray(e/4,e/4+t)}var b=null;function ee(){return b!==null&&b.byteLength!==0||(b=new Float32Array(n.memory.buffer)),b}function te(e,t){return e>>>=0,ee().subarray(e/4,e/4+t)}var x=null;function ne(){return x!==null&&x.byteLength!==0||(x=new Uint32Array(n.memory.buffer)),x}var S=0;function C(e,t){let n=t(4*e.length,4)>>>0;return ne().set(e,n/4),S=e.length,n}function w(e,t){let n=t(4*e.length,4)>>>0;return ee().set(e,n/4),S=e.length,n}Object.freeze({Vertex:0,0:`Vertex`,Edge:1,1:`Edge`,Face:2,2:`Face`,Unknown:3,3:`Unknown`});var T=Object.freeze({LinX:0,0:`LinX`,LinY:1,1:`LinY`,LinZ:2,2:`LinZ`,AngX:3,3:`AngX`,AngY:4,4:`AngY`,AngZ:5,5:`AngZ`}),E=Object.freeze({Revolute:0,0:`Revolute`,Fixed:1,1:`Fixed`,Prismatic:2,2:`Prismatic`,Rope:3,3:`Rope`,Spring:4,4:`Spring`,Spherical:5,5:`Spherical`,Generic:6,6:`Generic`});Object.freeze({AccelerationBased:0,0:`AccelerationBased`,ForceBased:1,1:`ForceBased`}),Object.freeze({Dynamic:0,0:`Dynamic`,Fixed:1,1:`Fixed`,KinematicPositionBased:2,2:`KinematicPositionBased`,KinematicVelocityBased:3,3:`KinematicVelocityBased`});var D=Object.freeze({Ball:0,0:`Ball`,Cuboid:1,1:`Cuboid`,Capsule:2,2:`Capsule`,Segment:3,3:`Segment`,Polyline:4,4:`Polyline`,Triangle:5,5:`Triangle`,TriMesh:6,6:`TriMesh`,HeightField:7,7:`HeightField`,Compound:8,8:`Compound`,ConvexPolyhedron:9,9:`ConvexPolyhedron`,Cylinder:10,10:`Cylinder`,Cone:11,11:`Cone`,RoundCuboid:12,12:`RoundCuboid`,RoundTriangle:13,13:`RoundTriangle`,RoundCylinder:14,14:`RoundCylinder`,RoundCone:15,15:`RoundCone`,RoundConvexPolyhedron:16,16:`RoundConvexPolyhedron`,HalfSpace:17,17:`HalfSpace`,Voxels:18,18:`Voxels`}),re=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawbroadphase_free(e>>>0,1))),O=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,re.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,re.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawbroadphase_free(e,0)}constructor(){return this.__wbg_ptr=n.rawbroadphase_new()>>>0,re.register(this,this.__wbg_ptr,this),this}castRay(e,t,i,a,o,s,c,l,u,f,p,m){try{h(e,F),h(t,I),h(i,k),h(a,z),h(o,z);let r=n.rawbroadphase_castRay(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s,c,l,d(u)?4294967297:u>>>0,!d(f),d(f)?0:f,!d(p),d(p)?0:p,_(m));return r===0?void 0:He.__wrap(r)}finally{r[g++]=void 0}}castRayAndGetNormal(e,t,i,a,o,s,c,l,u,f,p,m){try{h(e,F),h(t,I),h(i,k),h(a,z),h(o,z);let r=n.rawbroadphase_castRayAndGetNormal(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s,c,l,d(u)?4294967297:u>>>0,!d(f),d(f)?0:f,!d(p),d(p)?0:p,_(m));return r===0?void 0:We.__wrap(r)}finally{r[g++]=void 0}}intersectionsWithRay(e,t,i,a,o,s,c,l,u,f,p,m,v){try{h(e,F),h(t,I),h(i,k),h(a,z),h(o,z),n.rawbroadphase_intersectionsWithRay(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s,c,_(l),u,d(f)?4294967297:f>>>0,!d(p),d(p)?0:p,!d(m),d(m)?0:m,_(v))}finally{r[g++]=void 0,r[g++]=void 0}}intersectionWithShape(e,t,i,a,o,s,c,l,u,f,m){try{let r=n.__wbindgen_add_to_stack_pointer(-16);h(e,F),h(t,I),h(i,k),h(a,z),h(o,L),h(s,R),n.rawbroadphase_intersectionWithShape(r,this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s.__wbg_ptr,c,d(l)?4294967297:l>>>0,!d(u),d(u)?0:u,!d(f),d(f)?0:f,_(m));var v=p().getInt32(r+0,!0),y=p().getFloat64(r+8,!0);return v===0?void 0:y}finally{n.__wbindgen_add_to_stack_pointer(16),r[g++]=void 0}}projectPoint(e,t,i,a,o,s,c,l,u,f){try{h(e,F),h(t,I),h(i,k),h(a,z);let r=n.rawbroadphase_projectPoint(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o,s,d(c)?4294967297:c>>>0,!d(l),d(l)?0:l,!d(u),d(u)?0:u,_(f));return r===0?void 0:Re.__wrap(r)}finally{r[g++]=void 0}}projectPointAndGetFeature(e,t,i,a,o,s,c,l,u){try{h(e,F),h(t,I),h(i,k),h(a,z);let r=n.rawbroadphase_projectPointAndGetFeature(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o,d(s)?4294967297:s>>>0,!d(c),d(c)?0:c,!d(l),d(l)?0:l,_(u));return r===0?void 0:Re.__wrap(r)}finally{r[g++]=void 0}}intersectionsWithPoint(e,t,i,a,o,s,c,l,u,f){try{h(e,F),h(t,I),h(i,k),h(a,z),n.rawbroadphase_intersectionsWithPoint(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,_(o),s,d(c)?4294967297:c>>>0,!d(l),d(l)?0:l,!d(u),d(u)?0:u,_(f))}finally{r[g++]=void 0,r[g++]=void 0}}castShape(e,t,i,a,o,s,c,l,u,f,p,m,v,y,b){try{h(e,F),h(t,I),h(i,k),h(a,z),h(o,L),h(s,z),h(c,R);let r=n.rawbroadphase_castShape(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s.__wbg_ptr,c.__wbg_ptr,l,u,f,p,d(m)?4294967297:m>>>0,!d(v),d(v)?0:v,!d(y),d(y)?0:y,_(b));return r===0?void 0:ue.__wrap(r)}finally{r[g++]=void 0}}intersectionsWithShape(e,t,i,a,o,s,c,l,u,f,p,m){try{h(e,F),h(t,I),h(i,k),h(a,z),h(o,L),h(s,R),n.rawbroadphase_intersectionsWithShape(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s.__wbg_ptr,_(c),l,d(u)?4294967297:u>>>0,!d(f),d(f)?0:f,!d(p),d(p)?0:p,_(m))}finally{r[g++]=void 0,r[g++]=void 0}}collidersWithAabbIntersectingAabb(e,t,i,a,o,s){try{h(e,F),h(t,I),h(i,k),h(a,z),h(o,z),n.rawbroadphase_collidersWithAabbIntersectingAabb(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,_(s))}finally{r[g++]=void 0}}},ie=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawccdsolver_free(e>>>0,1))),ae=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,ie.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawccdsolver_free(e,0)}constructor(){return this.__wbg_ptr=n.rawccdsolver_new()>>>0,ie.register(this,this.__wbg_ptr,this),this}},oe=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawcharactercollision_free(e>>>0,1))),se=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,oe.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawcharactercollision_free(e,0)}constructor(){return this.__wbg_ptr=n.rawcharactercollision_new()>>>0,oe.register(this,this.__wbg_ptr,this),this}handle(){return n.rawcharactercollision_handle(this.__wbg_ptr)}translationDeltaApplied(){let e=n.rawcharactercollision_translationDeltaApplied(this.__wbg_ptr);return z.__wrap(e)}translationDeltaRemaining(){let e=n.rawcharactercollision_translationDeltaRemaining(this.__wbg_ptr);return z.__wrap(e)}toi(){return n.rawcharactercollision_toi(this.__wbg_ptr)}worldWitness1(){let e=n.rawcharactercollision_worldWitness1(this.__wbg_ptr);return z.__wrap(e)}worldWitness2(){let e=n.rawcharactercollision_worldWitness2(this.__wbg_ptr);return z.__wrap(e)}worldNormal1(){let e=n.rawcharactercollision_worldNormal1(this.__wbg_ptr);return z.__wrap(e)}worldNormal2(){let e=n.rawcharactercollision_worldNormal2(this.__wbg_ptr);return z.__wrap(e)}},ce=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawcolliderset_free(e>>>0,1))),k=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,ce.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,ce.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawcolliderset_free(e,0)}coTranslation(e){let t=n.rawcolliderset_coTranslation(this.__wbg_ptr,e);return z.__wrap(t)}coRotation(e){let t=n.rawcolliderset_coRotation(this.__wbg_ptr,e);return L.__wrap(t)}coTranslationWrtParent(e){let t=n.rawcolliderset_coTranslationWrtParent(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}coRotationWrtParent(e){let t=n.rawcolliderset_coRotationWrtParent(this.__wbg_ptr,e);return t===0?void 0:L.__wrap(t)}coSetTranslation(e,t,r,i){n.rawcolliderset_coSetTranslation(this.__wbg_ptr,e,t,r,i)}coSetTranslationWrtParent(e,t,r,i){n.rawcolliderset_coSetTranslationWrtParent(this.__wbg_ptr,e,t,r,i)}coSetRotation(e,t,r,i,a){n.rawcolliderset_coSetRotation(this.__wbg_ptr,e,t,r,i,a)}coSetRotationWrtParent(e,t,r,i,a){n.rawcolliderset_coSetRotationWrtParent(this.__wbg_ptr,e,t,r,i,a)}coIsSensor(e){return n.rawcolliderset_coIsSensor(this.__wbg_ptr,e)!==0}coShapeType(e){return n.rawcolliderset_coShapeType(this.__wbg_ptr,e)}coHalfspaceNormal(e){let t=n.rawcolliderset_coHalfspaceNormal(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}coHalfExtents(e){let t=n.rawcolliderset_coHalfExtents(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}coSetHalfExtents(e,t){h(t,z),n.rawcolliderset_coSetHalfExtents(this.__wbg_ptr,e,t.__wbg_ptr)}coRadius(e){let t=n.rawcolliderset_coRadius(this.__wbg_ptr,e);return t===4294967297?void 0:t}coSetRadius(e,t){n.rawcolliderset_coSetRadius(this.__wbg_ptr,e,t)}coHalfHeight(e){let t=n.rawcolliderset_coHalfHeight(this.__wbg_ptr,e);return t===4294967297?void 0:t}coSetHalfHeight(e,t){n.rawcolliderset_coSetHalfHeight(this.__wbg_ptr,e,t)}coRoundRadius(e){let t=n.rawcolliderset_coRoundRadius(this.__wbg_ptr,e);return t===4294967297?void 0:t}coSetRoundRadius(e,t){n.rawcolliderset_coSetRoundRadius(this.__wbg_ptr,e,t)}coVoxelData(e){try{let i=n.__wbindgen_add_to_stack_pointer(-16);n.rawcolliderset_coVoxelData(i,this.__wbg_ptr,e);var t=p().getInt32(i+0,!0),r=p().getInt32(i+4,!0);let a;return t!==0&&(a=y(t,r).slice(),n.__wbindgen_export_1(t,4*r,4)),a}finally{n.__wbindgen_add_to_stack_pointer(16)}}coVoxelSize(e){let t=n.rawcolliderset_coVoxelSize(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}coSetVoxel(e,t,r,i,a){n.rawcolliderset_coSetVoxel(this.__wbg_ptr,e,t,r,i,a)}coPropagateVoxelChange(e,t,r,i,a,o,s,c){n.rawcolliderset_coPropagateVoxelChange(this.__wbg_ptr,e,t,r,i,a,o,s,c)}coCombineVoxelStates(e,t,r,i,a){n.rawcolliderset_coCombineVoxelStates(this.__wbg_ptr,e,t,r,i,a)}coVertices(e){try{let i=n.__wbindgen_add_to_stack_pointer(-16);n.rawcolliderset_coVertices(i,this.__wbg_ptr,e);var t=p().getInt32(i+0,!0),r=p().getInt32(i+4,!0);let a;return t!==0&&(a=te(t,r).slice(),n.__wbindgen_export_1(t,4*r,4)),a}finally{n.__wbindgen_add_to_stack_pointer(16)}}coIndices(e){try{let i=n.__wbindgen_add_to_stack_pointer(-16);n.rawcolliderset_coIndices(i,this.__wbg_ptr,e);var t=p().getInt32(i+0,!0),r=p().getInt32(i+4,!0);let a;return t!==0&&(a=function(e,t){return e>>>=0,ne().subarray(e/4,e/4+t)}(t,r).slice(),n.__wbindgen_export_1(t,4*r,4)),a}finally{n.__wbindgen_add_to_stack_pointer(16)}}coTriMeshFlags(e){let t=n.rawcolliderset_coTriMeshFlags(this.__wbg_ptr,e);return t===4294967297?void 0:t}coHeightFieldFlags(e){let t=n.rawcolliderset_coHeightFieldFlags(this.__wbg_ptr,e);return t===4294967297?void 0:t}coHeightfieldHeights(e){try{let i=n.__wbindgen_add_to_stack_pointer(-16);n.rawcolliderset_coHeightfieldHeights(i,this.__wbg_ptr,e);var t=p().getInt32(i+0,!0),r=p().getInt32(i+4,!0);let a;return t!==0&&(a=te(t,r).slice(),n.__wbindgen_export_1(t,4*r,4)),a}finally{n.__wbindgen_add_to_stack_pointer(16)}}coHeightfieldScale(e){let t=n.rawcolliderset_coHeightfieldScale(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}coHeightfieldNRows(e){let t=n.rawcolliderset_coHeightfieldNRows(this.__wbg_ptr,e);return t===4294967297?void 0:t}coHeightfieldNCols(e){let t=n.rawcolliderset_coHeightfieldNCols(this.__wbg_ptr,e);return t===4294967297?void 0:t}coParent(e){try{let i=n.__wbindgen_add_to_stack_pointer(-16);n.rawcolliderset_coParent(i,this.__wbg_ptr,e);var t=p().getInt32(i+0,!0),r=p().getFloat64(i+8,!0);return t===0?void 0:r}finally{n.__wbindgen_add_to_stack_pointer(16)}}coSetEnabled(e,t){n.rawcolliderset_coSetEnabled(this.__wbg_ptr,e,t)}coIsEnabled(e){return n.rawcolliderset_coIsEnabled(this.__wbg_ptr,e)!==0}coSetContactSkin(e,t){n.rawcolliderset_coSetContactSkin(this.__wbg_ptr,e,t)}coContactSkin(e){return n.rawcolliderset_coContactSkin(this.__wbg_ptr,e)}coFriction(e){return n.rawcolliderset_coFriction(this.__wbg_ptr,e)}coRestitution(e){return n.rawcolliderset_coRestitution(this.__wbg_ptr,e)}coDensity(e){return n.rawcolliderset_coDensity(this.__wbg_ptr,e)}coMass(e){return n.rawcolliderset_coMass(this.__wbg_ptr,e)}coVolume(e){return n.rawcolliderset_coVolume(this.__wbg_ptr,e)}coCollisionGroups(e){return n.rawcolliderset_coCollisionGroups(this.__wbg_ptr,e)>>>0}coSolverGroups(e){return n.rawcolliderset_coSolverGroups(this.__wbg_ptr,e)>>>0}coActiveHooks(e){return n.rawcolliderset_coActiveHooks(this.__wbg_ptr,e)>>>0}coActiveCollisionTypes(e){return n.rawcolliderset_coActiveCollisionTypes(this.__wbg_ptr,e)}coActiveEvents(e){return n.rawcolliderset_coActiveEvents(this.__wbg_ptr,e)>>>0}coContactForceEventThreshold(e){return n.rawcolliderset_coContactForceEventThreshold(this.__wbg_ptr,e)}coContainsPoint(e,t){return h(t,z),n.rawcolliderset_coContainsPoint(this.__wbg_ptr,e,t.__wbg_ptr)!==0}coCastShape(e,t,r,i,a,o,s,c,l){h(t,z),h(r,R),h(i,z),h(a,L),h(o,z);let u=n.rawcolliderset_coCastShape(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s,c,l);return u===0?void 0:tt.__wrap(u)}coCastCollider(e,t,r,i,a,o,s){h(t,z),h(i,z);let c=n.rawcolliderset_coCastCollider(this.__wbg_ptr,e,t.__wbg_ptr,r,i.__wbg_ptr,a,o,s);return c===0?void 0:ue.__wrap(c)}coIntersectsShape(e,t,r,i){return h(t,R),h(r,z),h(i,L),n.rawcolliderset_coIntersectsShape(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr)!==0}coContactShape(e,t,r,i,a){h(t,R),h(r,z),h(i,L);let o=n.rawcolliderset_coContactShape(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a);return o===0?void 0:rt.__wrap(o)}coContactCollider(e,t,r){let i=n.rawcolliderset_coContactCollider(this.__wbg_ptr,e,t,r);return i===0?void 0:rt.__wrap(i)}coProjectPoint(e,t,r){h(t,z);let i=n.rawcolliderset_coProjectPoint(this.__wbg_ptr,e,t.__wbg_ptr,r);return Be.__wrap(i)}coIntersectsRay(e,t,r,i){return h(t,z),h(r,z),n.rawcolliderset_coIntersectsRay(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i)!==0}coCastRay(e,t,r,i,a){return h(t,z),h(r,z),n.rawcolliderset_coCastRay(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i,a)}coCastRayAndGetNormal(e,t,r,i,a){h(t,z),h(r,z);let o=n.rawcolliderset_coCastRayAndGetNormal(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i,a);return o===0?void 0:Ke.__wrap(o)}coSetSensor(e,t){n.rawcolliderset_coSetSensor(this.__wbg_ptr,e,t)}coSetRestitution(e,t){n.rawcolliderset_coSetRestitution(this.__wbg_ptr,e,t)}coSetFriction(e,t){n.rawcolliderset_coSetFriction(this.__wbg_ptr,e,t)}coFrictionCombineRule(e){return n.rawcolliderset_coFrictionCombineRule(this.__wbg_ptr,e)>>>0}coSetFrictionCombineRule(e,t){n.rawcolliderset_coSetFrictionCombineRule(this.__wbg_ptr,e,t)}coRestitutionCombineRule(e){return n.rawcolliderset_coRestitutionCombineRule(this.__wbg_ptr,e)>>>0}coSetRestitutionCombineRule(e,t){n.rawcolliderset_coSetRestitutionCombineRule(this.__wbg_ptr,e,t)}coSetCollisionGroups(e,t){n.rawcolliderset_coSetCollisionGroups(this.__wbg_ptr,e,t)}coSetSolverGroups(e,t){n.rawcolliderset_coSetSolverGroups(this.__wbg_ptr,e,t)}coSetActiveHooks(e,t){n.rawcolliderset_coSetActiveHooks(this.__wbg_ptr,e,t)}coSetActiveEvents(e,t){n.rawcolliderset_coSetActiveEvents(this.__wbg_ptr,e,t)}coSetActiveCollisionTypes(e,t){n.rawcolliderset_coSetActiveCollisionTypes(this.__wbg_ptr,e,t)}coSetShape(e,t){h(t,R),n.rawcolliderset_coSetShape(this.__wbg_ptr,e,t.__wbg_ptr)}coSetContactForceEventThreshold(e,t){n.rawcolliderset_coSetContactForceEventThreshold(this.__wbg_ptr,e,t)}coSetDensity(e,t){n.rawcolliderset_coSetDensity(this.__wbg_ptr,e,t)}coSetMass(e,t){n.rawcolliderset_coSetMass(this.__wbg_ptr,e,t)}coSetMassProperties(e,t,r,i,a){h(r,z),h(i,z),h(a,L),n.rawcolliderset_coSetMassProperties(this.__wbg_ptr,e,t,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr)}constructor(){return this.__wbg_ptr=n.rawcolliderset_new()>>>0,ce.register(this,this.__wbg_ptr,this),this}len(){return n.rawcolliderset_len(this.__wbg_ptr)>>>0}contains(e){return n.rawcolliderset_contains(this.__wbg_ptr,e)!==0}createCollider(e,t,r,i,a,o,s,c,l,u,d,f,m,g,_,v,y,b,ee,te,x,ne,S,C,w){try{let D=n.__wbindgen_add_to_stack_pointer(-16);h(t,R),h(r,z),h(i,L),h(s,z),h(c,z),h(l,L),h(w,I),n.rawcolliderset_createCollider(D,this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a,o,s.__wbg_ptr,c.__wbg_ptr,l.__wbg_ptr,u,d,f,m,g,_,v,y,b,ee,te,x,ne,S,C,w.__wbg_ptr);var T=p().getInt32(D+0,!0),E=p().getFloat64(D+8,!0);return T===0?void 0:E}finally{n.__wbindgen_add_to_stack_pointer(16)}}remove(e,t,r,i){h(t,N),h(r,I),n.rawcolliderset_remove(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i)}isHandleValid(e){return n.rawcolliderset_contains(this.__wbg_ptr,e)!==0}forEachColliderHandle(e){try{n.rawcolliderset_forEachColliderHandle(this.__wbg_ptr,_(e))}finally{r[g++]=void 0}}},le=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawcollidershapecasthit_free(e>>>0,1))),ue=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,le.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,le.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawcollidershapecasthit_free(e,0)}colliderHandle(){return n.rawcharactercollision_handle(this.__wbg_ptr)}time_of_impact(){return n.rawcollidershapecasthit_time_of_impact(this.__wbg_ptr)}witness1(){let e=n.rawcollidershapecasthit_witness1(this.__wbg_ptr);return z.__wrap(e)}witness2(){let e=n.rawcollidershapecasthit_witness2(this.__wbg_ptr);return z.__wrap(e)}normal1(){let e=n.rawcharactercollision_translationDeltaApplied(this.__wbg_ptr);return z.__wrap(e)}normal2(){let e=n.rawcharactercollision_translationDeltaRemaining(this.__wbg_ptr);return z.__wrap(e)}},de=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawcontactforceevent_free(e>>>0,1))),fe=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,de.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,de.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawcontactforceevent_free(e,0)}collider1(){return n.rawcharactercollision_handle(this.__wbg_ptr)}collider2(){return n.rawcontactforceevent_collider2(this.__wbg_ptr)}total_force(){let e=n.rawcontactforceevent_total_force(this.__wbg_ptr);return z.__wrap(e)}total_force_magnitude(){return n.rawcontactforceevent_total_force_magnitude(this.__wbg_ptr)}max_force_direction(){let e=n.rawcontactforceevent_max_force_direction(this.__wbg_ptr);return z.__wrap(e)}max_force_magnitude(){return n.rawcontactforceevent_max_force_magnitude(this.__wbg_ptr)}},pe=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawcontactmanifold_free(e>>>0,1))),me=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,pe.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,pe.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawcontactmanifold_free(e,0)}normal(){let e=n.rawcontactmanifold_normal(this.__wbg_ptr);return z.__wrap(e)}local_n1(){let e=n.rawcontactmanifold_local_n1(this.__wbg_ptr);return z.__wrap(e)}local_n2(){let e=n.rawcontactmanifold_local_n2(this.__wbg_ptr);return z.__wrap(e)}subshape1(){return n.rawcontactmanifold_subshape1(this.__wbg_ptr)>>>0}subshape2(){return n.rawcontactmanifold_subshape2(this.__wbg_ptr)>>>0}num_contacts(){return n.rawcontactmanifold_num_contacts(this.__wbg_ptr)>>>0}contact_local_p1(e){let t=n.rawcontactmanifold_contact_local_p1(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}contact_local_p2(e){let t=n.rawcontactmanifold_contact_local_p2(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}contact_dist(e){return n.rawcontactmanifold_contact_dist(this.__wbg_ptr,e)}contact_fid1(e){return n.rawcontactmanifold_contact_fid1(this.__wbg_ptr,e)>>>0}contact_fid2(e){return n.rawcontactmanifold_contact_fid2(this.__wbg_ptr,e)>>>0}contact_impulse(e){return n.rawcontactmanifold_contact_impulse(this.__wbg_ptr,e)}contact_tangent_impulse_x(e){return n.rawcontactmanifold_contact_tangent_impulse_x(this.__wbg_ptr,e)}contact_tangent_impulse_y(e){return n.rawcontactmanifold_contact_tangent_impulse_y(this.__wbg_ptr,e)}num_solver_contacts(){return n.rawcontactmanifold_num_solver_contacts(this.__wbg_ptr)>>>0}solver_contact_point(e){let t=n.rawcontactmanifold_solver_contact_point(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}solver_contact_dist(e){return n.rawcontactmanifold_solver_contact_dist(this.__wbg_ptr,e)}solver_contact_friction(e){return n.rawcontactmanifold_solver_contact_friction(this.__wbg_ptr,e)}solver_contact_restitution(e){return n.rawcontactmanifold_solver_contact_restitution(this.__wbg_ptr,e)}solver_contact_tangent_velocity(e){let t=n.rawcontactmanifold_solver_contact_tangent_velocity(this.__wbg_ptr,e);return z.__wrap(t)}},he=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawcontactpair_free(e>>>0,1))),ge=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,he.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,he.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawcontactpair_free(e,0)}collider1(){return n.rawcontactpair_collider1(this.__wbg_ptr)}collider2(){return n.rawcontactpair_collider2(this.__wbg_ptr)}numContactManifolds(){return n.rawcontactpair_numContactManifolds(this.__wbg_ptr)>>>0}contactManifold(e){let t=n.rawcontactpair_contactManifold(this.__wbg_ptr,e);return t===0?void 0:me.__wrap(t)}},_e=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawdebugrenderpipeline_free(e>>>0,1))),ve=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,_e.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawdebugrenderpipeline_free(e,0)}constructor(){return this.__wbg_ptr=n.rawdebugrenderpipeline_new()>>>0,_e.register(this,this.__wbg_ptr,this),this}vertices(){return m(n.rawdebugrenderpipeline_vertices(this.__wbg_ptr))}colors(){return m(n.rawdebugrenderpipeline_colors(this.__wbg_ptr))}render(e,t,i,a,o,s,c){try{h(e,I),h(t,k),h(i,j),h(a,P),h(o,F),n.rawdebugrenderpipeline_render(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s,_(c))}finally{r[g++]=void 0}}},ye=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawdeserializedworld_free(e>>>0,1))),be=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,ye.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,ye.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawdeserializedworld_free(e,0)}takeGravity(){let e=n.rawdeserializedworld_takeGravity(this.__wbg_ptr);return e===0?void 0:z.__wrap(e)}takeIntegrationParameters(){let e=n.rawdeserializedworld_takeIntegrationParameters(this.__wbg_ptr);return e===0?void 0:M.__wrap(e)}takeIslandManager(){let e=n.rawdeserializedworld_takeIslandManager(this.__wbg_ptr);return e===0?void 0:N.__wrap(e)}takeBroadPhase(){let e=n.rawdeserializedworld_takeBroadPhase(this.__wbg_ptr);return e===0?void 0:O.__wrap(e)}takeNarrowPhase(){let e=n.rawdeserializedworld_takeNarrowPhase(this.__wbg_ptr);return e===0?void 0:F.__wrap(e)}takeBodies(){let e=n.rawdeserializedworld_takeBodies(this.__wbg_ptr);return e===0?void 0:I.__wrap(e)}takeColliders(){let e=n.rawdeserializedworld_takeColliders(this.__wbg_ptr);return e===0?void 0:k.__wrap(e)}takeImpulseJoints(){let e=n.rawdeserializedworld_takeImpulseJoints(this.__wbg_ptr);return e===0?void 0:j.__wrap(e)}takeMultibodyJoints(){let e=n.rawdeserializedworld_takeMultibodyJoints(this.__wbg_ptr);return e===0?void 0:P.__wrap(e)}},xe=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawdynamicraycastvehiclecontroller_free(e>>>0,1))),Se=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,xe.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawdynamicraycastvehiclecontroller_free(e,0)}constructor(e){return this.__wbg_ptr=n.rawdynamicraycastvehiclecontroller_new(e)>>>0,xe.register(this,this.__wbg_ptr,this),this}current_vehicle_speed(){return n.rawdynamicraycastvehiclecontroller_current_vehicle_speed(this.__wbg_ptr)}chassis(){return n.rawdynamicraycastvehiclecontroller_chassis(this.__wbg_ptr)}index_up_axis(){return n.rawdynamicraycastvehiclecontroller_index_up_axis(this.__wbg_ptr)>>>0}set_index_up_axis(e){n.rawdynamicraycastvehiclecontroller_set_index_up_axis(this.__wbg_ptr,e)}index_forward_axis(){return n.rawdynamicraycastvehiclecontroller_index_forward_axis(this.__wbg_ptr)>>>0}set_index_forward_axis(e){n.rawdynamicraycastvehiclecontroller_set_index_forward_axis(this.__wbg_ptr,e)}add_wheel(e,t,r,i,a){h(e,z),h(t,z),h(r,z),n.rawdynamicraycastvehiclecontroller_add_wheel(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i,a)}num_wheels(){return n.rawdynamicraycastvehiclecontroller_num_wheels(this.__wbg_ptr)>>>0}update_vehicle(e,t,i,a,o,s,c,l){try{h(t,O),h(i,F),h(a,I),h(o,k),n.rawdynamicraycastvehiclecontroller_update_vehicle(this.__wbg_ptr,e,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s,d(c)?4294967297:c>>>0,_(l))}finally{r[g++]=void 0}}wheel_chassis_connection_point_cs(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_chassis_connection_point_cs(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}set_wheel_chassis_connection_point_cs(e,t){h(t,z),n.rawdynamicraycastvehiclecontroller_set_wheel_chassis_connection_point_cs(this.__wbg_ptr,e,t.__wbg_ptr)}wheel_suspension_rest_length(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_suspension_rest_length(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_suspension_rest_length(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_suspension_rest_length(this.__wbg_ptr,e,t)}wheel_max_suspension_travel(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_max_suspension_travel(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_max_suspension_travel(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_max_suspension_travel(this.__wbg_ptr,e,t)}wheel_radius(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_radius(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_radius(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_radius(this.__wbg_ptr,e,t)}wheel_suspension_stiffness(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_suspension_stiffness(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_suspension_stiffness(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_suspension_stiffness(this.__wbg_ptr,e,t)}wheel_suspension_compression(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_suspension_compression(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_suspension_compression(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_suspension_compression(this.__wbg_ptr,e,t)}wheel_suspension_relaxation(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_suspension_relaxation(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_suspension_relaxation(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_suspension_relaxation(this.__wbg_ptr,e,t)}wheel_max_suspension_force(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_max_suspension_force(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_max_suspension_force(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_max_suspension_force(this.__wbg_ptr,e,t)}wheel_brake(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_brake(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_brake(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_brake(this.__wbg_ptr,e,t)}wheel_steering(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_steering(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_steering(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_steering(this.__wbg_ptr,e,t)}wheel_engine_force(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_engine_force(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_engine_force(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_engine_force(this.__wbg_ptr,e,t)}wheel_direction_cs(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_direction_cs(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}set_wheel_direction_cs(e,t){h(t,z),n.rawdynamicraycastvehiclecontroller_set_wheel_direction_cs(this.__wbg_ptr,e,t.__wbg_ptr)}wheel_axle_cs(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_axle_cs(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}set_wheel_axle_cs(e,t){h(t,z),n.rawdynamicraycastvehiclecontroller_set_wheel_axle_cs(this.__wbg_ptr,e,t.__wbg_ptr)}wheel_friction_slip(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_friction_slip(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_friction_slip(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_friction_slip(this.__wbg_ptr,e,t)}wheel_side_friction_stiffness(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_side_friction_stiffness(this.__wbg_ptr,e);return t===4294967297?void 0:t}set_wheel_side_friction_stiffness(e,t){n.rawdynamicraycastvehiclecontroller_set_wheel_side_friction_stiffness(this.__wbg_ptr,e,t)}wheel_rotation(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_rotation(this.__wbg_ptr,e);return t===4294967297?void 0:t}wheel_forward_impulse(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_forward_impulse(this.__wbg_ptr,e);return t===4294967297?void 0:t}wheel_side_impulse(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_side_impulse(this.__wbg_ptr,e);return t===4294967297?void 0:t}wheel_suspension_force(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_suspension_force(this.__wbg_ptr,e);return t===4294967297?void 0:t}wheel_contact_normal_ws(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_contact_normal_ws(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}wheel_contact_point_ws(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_contact_point_ws(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}wheel_suspension_length(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_suspension_length(this.__wbg_ptr,e);return t===4294967297?void 0:t}wheel_hard_point_ws(e){let t=n.rawdynamicraycastvehiclecontroller_wheel_hard_point_ws(this.__wbg_ptr,e);return t===0?void 0:z.__wrap(t)}wheel_is_in_contact(e){return n.rawdynamicraycastvehiclecontroller_wheel_is_in_contact(this.__wbg_ptr,e)!==0}wheel_ground_object(e){try{let i=n.__wbindgen_add_to_stack_pointer(-16);n.rawdynamicraycastvehiclecontroller_wheel_ground_object(i,this.__wbg_ptr,e);var t=p().getInt32(i+0,!0),r=p().getFloat64(i+8,!0);return t===0?void 0:r}finally{n.__wbindgen_add_to_stack_pointer(16)}}},Ce=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_raweventqueue_free(e>>>0,1))),we=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Ce.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_raweventqueue_free(e,0)}constructor(e){return this.__wbg_ptr=n.raweventqueue_new(e)>>>0,Ce.register(this,this.__wbg_ptr,this),this}drainCollisionEvents(e){try{n.raweventqueue_drainCollisionEvents(this.__wbg_ptr,_(e))}finally{r[g++]=void 0}}drainContactForceEvents(e){try{n.raweventqueue_drainContactForceEvents(this.__wbg_ptr,_(e))}finally{r[g++]=void 0}}clear(){n.raweventqueue_clear(this.__wbg_ptr)}},Te=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawgenericjoint_free(e>>>0,1))),A=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,Te.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Te.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawgenericjoint_free(e,0)}static generic(t,r,i,a){h(t,z),h(r,z),h(i,z);let o=n.rawgenericjoint_generic(t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a);return o===0?void 0:e.__wrap(o)}static spring(t,r,i,a,o){h(a,z),h(o,z);let s=n.rawgenericjoint_spring(t,r,i,a.__wbg_ptr,o.__wbg_ptr);return e.__wrap(s)}static rope(t,r,i){h(r,z),h(i,z);let a=n.rawgenericjoint_rope(t,r.__wbg_ptr,i.__wbg_ptr);return e.__wrap(a)}static spherical(t,r){h(t,z),h(r,z);let i=n.rawgenericjoint_spherical(t.__wbg_ptr,r.__wbg_ptr);return e.__wrap(i)}static prismatic(t,r,i,a,o,s){h(t,z),h(r,z),h(i,z);let c=n.rawgenericjoint_prismatic(t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a,o,s);return c===0?void 0:e.__wrap(c)}static fixed(t,r,i,a){h(t,z),h(r,L),h(i,z),h(a,L);let o=n.rawgenericjoint_fixed(t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr);return e.__wrap(o)}static revolute(t,r,i){h(t,z),h(r,z),h(i,z);let a=n.rawgenericjoint_revolute(t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr);return a===0?void 0:e.__wrap(a)}},Ee=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawimpulsejointset_free(e>>>0,1))),j=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,Ee.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Ee.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawimpulsejointset_free(e,0)}jointType(e){return n.rawimpulsejointset_jointType(this.__wbg_ptr,e)}jointBodyHandle1(e){return n.rawimpulsejointset_jointBodyHandle1(this.__wbg_ptr,e)}jointBodyHandle2(e){return n.rawimpulsejointset_jointBodyHandle2(this.__wbg_ptr,e)}jointFrameX1(e){let t=n.rawimpulsejointset_jointFrameX1(this.__wbg_ptr,e);return L.__wrap(t)}jointFrameX2(e){let t=n.rawimpulsejointset_jointFrameX2(this.__wbg_ptr,e);return L.__wrap(t)}jointAnchor1(e){let t=n.rawimpulsejointset_jointAnchor1(this.__wbg_ptr,e);return z.__wrap(t)}jointAnchor2(e){let t=n.rawimpulsejointset_jointAnchor2(this.__wbg_ptr,e);return z.__wrap(t)}jointSetAnchor1(e,t){h(t,z),n.rawimpulsejointset_jointSetAnchor1(this.__wbg_ptr,e,t.__wbg_ptr)}jointSetAnchor2(e,t){h(t,z),n.rawimpulsejointset_jointSetAnchor2(this.__wbg_ptr,e,t.__wbg_ptr)}jointContactsEnabled(e){return n.rawimpulsejointset_jointContactsEnabled(this.__wbg_ptr,e)!==0}jointSetContactsEnabled(e,t){n.rawimpulsejointset_jointSetContactsEnabled(this.__wbg_ptr,e,t)}jointLimitsEnabled(e,t){return n.rawimpulsejointset_jointLimitsEnabled(this.__wbg_ptr,e,t)!==0}jointLimitsMin(e,t){return n.rawimpulsejointset_jointLimitsMin(this.__wbg_ptr,e,t)}jointLimitsMax(e,t){return n.rawimpulsejointset_jointLimitsMax(this.__wbg_ptr,e,t)}jointSetLimits(e,t,r,i){n.rawimpulsejointset_jointSetLimits(this.__wbg_ptr,e,t,r,i)}jointConfigureMotorModel(e,t,r){n.rawimpulsejointset_jointConfigureMotorModel(this.__wbg_ptr,e,t,r)}jointConfigureMotorVelocity(e,t,r,i){n.rawimpulsejointset_jointConfigureMotorVelocity(this.__wbg_ptr,e,t,r,i)}jointConfigureMotorPosition(e,t,r,i,a){n.rawimpulsejointset_jointConfigureMotorPosition(this.__wbg_ptr,e,t,r,i,a)}jointConfigureMotor(e,t,r,i,a,o){n.rawimpulsejointset_jointConfigureMotor(this.__wbg_ptr,e,t,r,i,a,o)}constructor(){return this.__wbg_ptr=n.rawimpulsejointset_new()>>>0,Ee.register(this,this.__wbg_ptr,this),this}createJoint(e,t,r,i){return h(e,A),n.rawimpulsejointset_createJoint(this.__wbg_ptr,e.__wbg_ptr,t,r,i)}remove(e,t){n.rawimpulsejointset_remove(this.__wbg_ptr,e,t)}len(){return n.rawimpulsejointset_len(this.__wbg_ptr)>>>0}contains(e){return n.rawimpulsejointset_contains(this.__wbg_ptr,e)!==0}forEachJointHandle(e){try{n.rawimpulsejointset_forEachJointHandle(this.__wbg_ptr,_(e))}finally{r[g++]=void 0}}forEachJointAttachedToRigidBody(e,t){try{n.rawimpulsejointset_forEachJointAttachedToRigidBody(this.__wbg_ptr,e,_(t))}finally{r[g++]=void 0}}},De=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawintegrationparameters_free(e>>>0,1))),M=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,De.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,De.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawintegrationparameters_free(e,0)}constructor(){return this.__wbg_ptr=n.rawintegrationparameters_new()>>>0,De.register(this,this.__wbg_ptr,this),this}get dt(){return n.rawintegrationparameters_dt(this.__wbg_ptr)}get contact_erp(){return n.rawintegrationparameters_contact_erp(this.__wbg_ptr)}get normalizedAllowedLinearError(){return n.rawintegrationparameters_normalizedAllowedLinearError(this.__wbg_ptr)}get normalizedPredictionDistance(){return n.rawintegrationparameters_normalizedPredictionDistance(this.__wbg_ptr)}get numSolverIterations(){return n.rawintegrationparameters_numSolverIterations(this.__wbg_ptr)>>>0}get numInternalPgsIterations(){return n.rawdynamicraycastvehiclecontroller_index_up_axis(this.__wbg_ptr)>>>0}get minIslandSize(){return n.rawintegrationparameters_minIslandSize(this.__wbg_ptr)>>>0}get maxCcdSubsteps(){return n.rawintegrationparameters_maxCcdSubsteps(this.__wbg_ptr)>>>0}get lengthUnit(){return n.rawcontactforceevent_total_force_magnitude(this.__wbg_ptr)}set dt(e){n.rawintegrationparameters_set_dt(this.__wbg_ptr,e)}set contact_natural_frequency(e){n.rawintegrationparameters_set_contact_natural_frequency(this.__wbg_ptr,e)}set normalizedAllowedLinearError(e){n.rawintegrationparameters_set_normalizedAllowedLinearError(this.__wbg_ptr,e)}set normalizedPredictionDistance(e){n.rawintegrationparameters_set_normalizedPredictionDistance(this.__wbg_ptr,e)}set numSolverIterations(e){n.rawintegrationparameters_set_numSolverIterations(this.__wbg_ptr,e)}set numInternalPgsIterations(e){n.rawdynamicraycastvehiclecontroller_set_index_up_axis(this.__wbg_ptr,e)}set minIslandSize(e){n.rawintegrationparameters_set_minIslandSize(this.__wbg_ptr,e)}set maxCcdSubsteps(e){n.rawintegrationparameters_set_maxCcdSubsteps(this.__wbg_ptr,e)}set lengthUnit(e){n.rawintegrationparameters_set_lengthUnit(this.__wbg_ptr,e)}},Oe=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawislandmanager_free(e>>>0,1))),N=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,Oe.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Oe.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawislandmanager_free(e,0)}constructor(){return this.__wbg_ptr=n.rawislandmanager_new()>>>0,Oe.register(this,this.__wbg_ptr,this),this}forEachActiveRigidBodyHandle(e){try{n.rawislandmanager_forEachActiveRigidBodyHandle(this.__wbg_ptr,_(e))}finally{r[g++]=void 0}}},ke=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawkinematiccharactercontroller_free(e>>>0,1))),Ae=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,ke.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawkinematiccharactercontroller_free(e,0)}constructor(e){return this.__wbg_ptr=n.rawkinematiccharactercontroller_new(e)>>>0,ke.register(this,this.__wbg_ptr,this),this}up(){let e=n.rawcharactercollision_translationDeltaApplied(this.__wbg_ptr);return z.__wrap(e)}setUp(e){h(e,z),n.rawkinematiccharactercontroller_setUp(this.__wbg_ptr,e.__wbg_ptr)}normalNudgeFactor(){return n.rawkinematiccharactercontroller_normalNudgeFactor(this.__wbg_ptr)}setNormalNudgeFactor(e){n.rawkinematiccharactercontroller_setNormalNudgeFactor(this.__wbg_ptr,e)}offset(){return n.rawkinematiccharactercontroller_offset(this.__wbg_ptr)}setOffset(e){n.rawkinematiccharactercontroller_setOffset(this.__wbg_ptr,e)}slideEnabled(){return n.rawkinematiccharactercontroller_slideEnabled(this.__wbg_ptr)!==0}setSlideEnabled(e){n.rawkinematiccharactercontroller_setSlideEnabled(this.__wbg_ptr,e)}autostepMaxHeight(){let e=n.rawkinematiccharactercontroller_autostepMaxHeight(this.__wbg_ptr);return e===4294967297?void 0:e}autostepMinWidth(){let e=n.rawkinematiccharactercontroller_autostepMinWidth(this.__wbg_ptr);return e===4294967297?void 0:e}autostepIncludesDynamicBodies(){let e=n.rawkinematiccharactercontroller_autostepIncludesDynamicBodies(this.__wbg_ptr);return e===16777215?void 0:e!==0}autostepEnabled(){return n.rawkinematiccharactercontroller_autostepEnabled(this.__wbg_ptr)!==0}enableAutostep(e,t,r){n.rawkinematiccharactercontroller_enableAutostep(this.__wbg_ptr,e,t,r)}disableAutostep(){n.rawkinematiccharactercontroller_disableAutostep(this.__wbg_ptr)}maxSlopeClimbAngle(){return n.rawkinematiccharactercontroller_maxSlopeClimbAngle(this.__wbg_ptr)}setMaxSlopeClimbAngle(e){n.rawkinematiccharactercontroller_setMaxSlopeClimbAngle(this.__wbg_ptr,e)}minSlopeSlideAngle(){return n.rawkinematiccharactercontroller_minSlopeSlideAngle(this.__wbg_ptr)}setMinSlopeSlideAngle(e){n.rawkinematiccharactercontroller_setMinSlopeSlideAngle(this.__wbg_ptr,e)}snapToGroundDistance(){let e=n.rawkinematiccharactercontroller_snapToGroundDistance(this.__wbg_ptr);return e===4294967297?void 0:e}enableSnapToGround(e){n.rawkinematiccharactercontroller_enableSnapToGround(this.__wbg_ptr,e)}disableSnapToGround(){n.rawkinematiccharactercontroller_disableSnapToGround(this.__wbg_ptr)}snapToGroundEnabled(){return n.rawkinematiccharactercontroller_snapToGroundEnabled(this.__wbg_ptr)!==0}computeColliderMovement(e,t,i,a,o,s,c,l,u,f,p,m){try{h(t,O),h(i,F),h(a,I),h(o,k),h(c,z),n.rawkinematiccharactercontroller_computeColliderMovement(this.__wbg_ptr,e,t.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s,c.__wbg_ptr,l,d(u)?4294967297:Math.fround(u),f,d(p)?4294967297:p>>>0,_(m))}finally{r[g++]=void 0}}computedMovement(){let e=n.rawkinematiccharactercontroller_computedMovement(this.__wbg_ptr);return z.__wrap(e)}computedGrounded(){return n.rawkinematiccharactercontroller_computedGrounded(this.__wbg_ptr)!==0}numComputedCollisions(){return n.rawkinematiccharactercontroller_numComputedCollisions(this.__wbg_ptr)>>>0}computedCollision(e,t){return h(t,se),n.rawkinematiccharactercontroller_computedCollision(this.__wbg_ptr,e,t.__wbg_ptr)!==0}},je=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawmultibodyjointset_free(e>>>0,1))),P=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,je.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,je.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawmultibodyjointset_free(e,0)}jointType(e){return n.rawmultibodyjointset_jointType(this.__wbg_ptr,e)}jointFrameX1(e){let t=n.rawmultibodyjointset_jointFrameX1(this.__wbg_ptr,e);return L.__wrap(t)}jointFrameX2(e){let t=n.rawmultibodyjointset_jointFrameX2(this.__wbg_ptr,e);return L.__wrap(t)}jointAnchor1(e){let t=n.rawmultibodyjointset_jointAnchor1(this.__wbg_ptr,e);return z.__wrap(t)}jointAnchor2(e){let t=n.rawmultibodyjointset_jointAnchor2(this.__wbg_ptr,e);return z.__wrap(t)}jointContactsEnabled(e){return n.rawmultibodyjointset_jointContactsEnabled(this.__wbg_ptr,e)!==0}jointSetContactsEnabled(e,t){n.rawmultibodyjointset_jointSetContactsEnabled(this.__wbg_ptr,e,t)}jointLimitsEnabled(e,t){return n.rawmultibodyjointset_jointLimitsEnabled(this.__wbg_ptr,e,t)!==0}jointLimitsMin(e,t){return n.rawmultibodyjointset_jointLimitsMin(this.__wbg_ptr,e,t)}jointLimitsMax(e,t){return n.rawmultibodyjointset_jointLimitsMax(this.__wbg_ptr,e,t)}constructor(){return this.__wbg_ptr=n.rawmultibodyjointset_new()>>>0,je.register(this,this.__wbg_ptr,this),this}createJoint(e,t,r,i){return h(e,A),n.rawmultibodyjointset_createJoint(this.__wbg_ptr,e.__wbg_ptr,t,r,i)}remove(e,t){n.rawmultibodyjointset_remove(this.__wbg_ptr,e,t)}contains(e){return n.rawmultibodyjointset_contains(this.__wbg_ptr,e)!==0}forEachJointHandle(e){try{n.rawmultibodyjointset_forEachJointHandle(this.__wbg_ptr,_(e))}finally{r[g++]=void 0}}forEachJointAttachedToRigidBody(e,t){try{n.rawmultibodyjointset_forEachJointAttachedToRigidBody(this.__wbg_ptr,e,_(t))}finally{r[g++]=void 0}}},Me=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawnarrowphase_free(e>>>0,1))),F=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,Me.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Me.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawnarrowphase_free(e,0)}constructor(){return this.__wbg_ptr=n.rawnarrowphase_new()>>>0,Me.register(this,this.__wbg_ptr,this),this}contact_pairs_with(e,t){n.rawnarrowphase_contact_pairs_with(this.__wbg_ptr,e,o(t))}contact_pair(e,t){let r=n.rawnarrowphase_contact_pair(this.__wbg_ptr,e,t);return r===0?void 0:ge.__wrap(r)}intersection_pairs_with(e,t){n.rawnarrowphase_intersection_pairs_with(this.__wbg_ptr,e,o(t))}intersection_pair(e,t){return n.rawnarrowphase_intersection_pair(this.__wbg_ptr,e,t)!==0}},Ne=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawphysicspipeline_free(e>>>0,1))),Pe=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Ne.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawphysicspipeline_free(e,0)}constructor(){return this.__wbg_ptr=n.rawphysicspipeline_new()>>>0,Ne.register(this,this.__wbg_ptr,this),this}set_profiler_enabled(e){n.rawphysicspipeline_set_profiler_enabled(this.__wbg_ptr,e)}is_profiler_enabled(){return n.rawphysicspipeline_is_profiler_enabled(this.__wbg_ptr)!==0}timing_step(){return n.rawphysicspipeline_timing_step(this.__wbg_ptr)}timing_collision_detection(){return n.rawphysicspipeline_timing_collision_detection(this.__wbg_ptr)}timing_broad_phase(){return n.rawphysicspipeline_timing_broad_phase(this.__wbg_ptr)}timing_narrow_phase(){return n.rawphysicspipeline_timing_narrow_phase(this.__wbg_ptr)}timing_solver(){return n.rawphysicspipeline_timing_solver(this.__wbg_ptr)}timing_velocity_assembly(){return n.rawphysicspipeline_timing_velocity_assembly(this.__wbg_ptr)}timing_velocity_resolution(){return n.rawphysicspipeline_timing_velocity_resolution(this.__wbg_ptr)}timing_velocity_update(){return n.rawphysicspipeline_timing_velocity_update(this.__wbg_ptr)}timing_velocity_writeback(){return n.rawphysicspipeline_timing_velocity_writeback(this.__wbg_ptr)}timing_ccd(){return n.rawphysicspipeline_timing_ccd(this.__wbg_ptr)}timing_ccd_toi_computation(){return n.rawphysicspipeline_timing_ccd_toi_computation(this.__wbg_ptr)}timing_ccd_broad_phase(){return n.rawphysicspipeline_timing_ccd_broad_phase(this.__wbg_ptr)}timing_ccd_narrow_phase(){return n.rawphysicspipeline_timing_ccd_narrow_phase(this.__wbg_ptr)}timing_ccd_solver(){return n.rawphysicspipeline_timing_ccd_solver(this.__wbg_ptr)}timing_island_construction(){return n.rawphysicspipeline_timing_island_construction(this.__wbg_ptr)}timing_user_changes(){return n.rawphysicspipeline_timing_user_changes(this.__wbg_ptr)}step(e,t,r,i,a,o,s,c,l,u){h(e,z),h(t,M),h(r,N),h(i,O),h(a,F),h(o,I),h(s,k),h(c,j),h(l,P),h(u,ae),n.rawphysicspipeline_step(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s.__wbg_ptr,c.__wbg_ptr,l.__wbg_ptr,u.__wbg_ptr)}stepWithEvents(e,t,r,i,a,s,c,l,u,d,f,p,m,g){h(e,z),h(t,M),h(r,N),h(i,O),h(a,F),h(s,I),h(c,k),h(l,j),h(u,P),h(d,ae),h(f,we),n.rawphysicspipeline_stepWithEvents(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,s.__wbg_ptr,c.__wbg_ptr,l.__wbg_ptr,u.__wbg_ptr,d.__wbg_ptr,f.__wbg_ptr,o(p),o(m),o(g))}},Fe=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawpidcontroller_free(e>>>0,1))),Ie=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Fe.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawpidcontroller_free(e,0)}constructor(e,t,r,i){return this.__wbg_ptr=n.rawpidcontroller_new(e,t,r,i)>>>0,Fe.register(this,this.__wbg_ptr,this),this}set_kp(e,t){n.rawpidcontroller_set_kp(this.__wbg_ptr,e,t)}set_ki(e,t){n.rawpidcontroller_set_ki(this.__wbg_ptr,e,t)}set_kd(e,t){n.rawpidcontroller_set_kd(this.__wbg_ptr,e,t)}set_axes_mask(e){n.rawpidcontroller_set_axes_mask(this.__wbg_ptr,e)}reset_integrals(){n.rawpidcontroller_reset_integrals(this.__wbg_ptr)}apply_linear_correction(e,t,r,i,a){h(t,I),h(i,z),h(a,z),n.rawpidcontroller_apply_linear_correction(this.__wbg_ptr,e,t.__wbg_ptr,r,i.__wbg_ptr,a.__wbg_ptr)}apply_angular_correction(e,t,r,i,a){h(t,I),h(i,L),h(a,z),n.rawpidcontroller_apply_angular_correction(this.__wbg_ptr,e,t.__wbg_ptr,r,i.__wbg_ptr,a.__wbg_ptr)}linear_correction(e,t,r,i,a){h(t,I),h(i,z),h(a,z);let o=n.rawpidcontroller_linear_correction(this.__wbg_ptr,e,t.__wbg_ptr,r,i.__wbg_ptr,a.__wbg_ptr);return z.__wrap(o)}angular_correction(e,t,r,i,a){h(t,I),h(i,L),h(a,z);let o=n.rawpidcontroller_angular_correction(this.__wbg_ptr,e,t.__wbg_ptr,r,i.__wbg_ptr,a.__wbg_ptr);return z.__wrap(o)}},Le=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawpointcolliderprojection_free(e>>>0,1))),Re=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,Le.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Le.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawpointcolliderprojection_free(e,0)}colliderHandle(){return n.rawpointcolliderprojection_colliderHandle(this.__wbg_ptr)}point(){let e=n.rawpointcolliderprojection_point(this.__wbg_ptr);return z.__wrap(e)}isInside(){return n.rawpointcolliderprojection_isInside(this.__wbg_ptr)!==0}featureType(){return n.rawpointcolliderprojection_featureType(this.__wbg_ptr)}featureId(){let e=n.rawpointcolliderprojection_featureId(this.__wbg_ptr);return e===4294967297?void 0:e}},ze=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawpointprojection_free(e>>>0,1))),Be=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,ze.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,ze.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawpointprojection_free(e,0)}point(){let e=n.rawpointprojection_point(this.__wbg_ptr);return z.__wrap(e)}isInside(){return n.rawpointprojection_isInside(this.__wbg_ptr)!==0}},Ve=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawraycolliderhit_free(e>>>0,1))),He=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,Ve.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Ve.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawraycolliderhit_free(e,0)}colliderHandle(){return n.rawcharactercollision_handle(this.__wbg_ptr)}timeOfImpact(){return n.rawcollidershapecasthit_time_of_impact(this.__wbg_ptr)}},Ue=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawraycolliderintersection_free(e>>>0,1))),We=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,Ue.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Ue.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawraycolliderintersection_free(e,0)}colliderHandle(){return n.rawpointcolliderprojection_colliderHandle(this.__wbg_ptr)}normal(){let e=n.rawcollidershapecasthit_witness1(this.__wbg_ptr);return z.__wrap(e)}time_of_impact(){return n.rawcollidershapecasthit_time_of_impact(this.__wbg_ptr)}featureType(){return n.rawpointcolliderprojection_featureType(this.__wbg_ptr)}featureId(){let e=n.rawpointcolliderprojection_featureId(this.__wbg_ptr);return e===4294967297?void 0:e}},Ge=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawrayintersection_free(e>>>0,1))),Ke=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,Ge.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Ge.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawrayintersection_free(e,0)}normal(){let e=n.rawcollidershapecasthit_witness1(this.__wbg_ptr);return z.__wrap(e)}time_of_impact(){return n.rawcollidershapecasthit_time_of_impact(this.__wbg_ptr)}featureType(){return n.rawpointcolliderprojection_featureType(this.__wbg_ptr)}featureId(){let e=n.rawpointcolliderprojection_featureId(this.__wbg_ptr);return e===4294967297?void 0:e}},qe=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawrigidbodyset_free(e>>>0,1))),I=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,qe.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,qe.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawrigidbodyset_free(e,0)}rbTranslation(e){let t=n.rawrigidbodyset_rbTranslation(this.__wbg_ptr,e);return z.__wrap(t)}rbRotation(e){let t=n.rawrigidbodyset_rbRotation(this.__wbg_ptr,e);return L.__wrap(t)}rbSleep(e){n.rawrigidbodyset_rbSleep(this.__wbg_ptr,e)}rbIsSleeping(e){return n.rawrigidbodyset_rbIsSleeping(this.__wbg_ptr,e)!==0}rbIsMoving(e){return n.rawrigidbodyset_rbIsMoving(this.__wbg_ptr,e)!==0}rbNextTranslation(e){let t=n.rawrigidbodyset_rbNextTranslation(this.__wbg_ptr,e);return z.__wrap(t)}rbNextRotation(e){let t=n.rawrigidbodyset_rbNextRotation(this.__wbg_ptr,e);return L.__wrap(t)}rbSetTranslation(e,t,r,i,a){n.rawrigidbodyset_rbSetTranslation(this.__wbg_ptr,e,t,r,i,a)}rbSetRotation(e,t,r,i,a,o){n.rawrigidbodyset_rbSetRotation(this.__wbg_ptr,e,t,r,i,a,o)}rbSetLinvel(e,t,r){h(t,z),n.rawrigidbodyset_rbSetLinvel(this.__wbg_ptr,e,t.__wbg_ptr,r)}rbSetAngvel(e,t,r){h(t,z),n.rawrigidbodyset_rbSetAngvel(this.__wbg_ptr,e,t.__wbg_ptr,r)}rbSetNextKinematicTranslation(e,t,r,i){n.rawrigidbodyset_rbSetNextKinematicTranslation(this.__wbg_ptr,e,t,r,i)}rbSetNextKinematicRotation(e,t,r,i,a){n.rawrigidbodyset_rbSetNextKinematicRotation(this.__wbg_ptr,e,t,r,i,a)}rbRecomputeMassPropertiesFromColliders(e,t){h(t,k),n.rawrigidbodyset_rbRecomputeMassPropertiesFromColliders(this.__wbg_ptr,e,t.__wbg_ptr)}rbSetAdditionalMass(e,t,r){n.rawrigidbodyset_rbSetAdditionalMass(this.__wbg_ptr,e,t,r)}rbSetAdditionalMassProperties(e,t,r,i,a,o){h(r,z),h(i,z),h(a,L),n.rawrigidbodyset_rbSetAdditionalMassProperties(this.__wbg_ptr,e,t,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o)}rbLinvel(e){let t=n.rawrigidbodyset_rbLinvel(this.__wbg_ptr,e);return z.__wrap(t)}rbAngvel(e){let t=n.rawrigidbodyset_rbAngvel(this.__wbg_ptr,e);return z.__wrap(t)}rbVelocityAtPoint(e,t){h(t,z);let r=n.rawrigidbodyset_rbVelocityAtPoint(this.__wbg_ptr,e,t.__wbg_ptr);return z.__wrap(r)}rbLockTranslations(e,t,r){n.rawrigidbodyset_rbLockTranslations(this.__wbg_ptr,e,t,r)}rbSetEnabledTranslations(e,t,r,i,a){n.rawrigidbodyset_rbSetEnabledTranslations(this.__wbg_ptr,e,t,r,i,a)}rbLockRotations(e,t,r){n.rawrigidbodyset_rbLockRotations(this.__wbg_ptr,e,t,r)}rbSetEnabledRotations(e,t,r,i,a){n.rawrigidbodyset_rbSetEnabledRotations(this.__wbg_ptr,e,t,r,i,a)}rbDominanceGroup(e){return n.rawrigidbodyset_rbDominanceGroup(this.__wbg_ptr,e)}rbSetDominanceGroup(e,t){n.rawrigidbodyset_rbSetDominanceGroup(this.__wbg_ptr,e,t)}rbEnableCcd(e,t){n.rawrigidbodyset_rbEnableCcd(this.__wbg_ptr,e,t)}rbSetSoftCcdPrediction(e,t){n.rawrigidbodyset_rbSetSoftCcdPrediction(this.__wbg_ptr,e,t)}rbMass(e){return n.rawrigidbodyset_rbMass(this.__wbg_ptr,e)}rbInvMass(e){return n.rawrigidbodyset_rbInvMass(this.__wbg_ptr,e)}rbEffectiveInvMass(e){let t=n.rawrigidbodyset_rbEffectiveInvMass(this.__wbg_ptr,e);return z.__wrap(t)}rbLocalCom(e){let t=n.rawrigidbodyset_rbLocalCom(this.__wbg_ptr,e);return z.__wrap(t)}rbWorldCom(e){let t=n.rawrigidbodyset_rbWorldCom(this.__wbg_ptr,e);return z.__wrap(t)}rbInvPrincipalInertia(e){let t=n.rawrigidbodyset_rbInvPrincipalInertia(this.__wbg_ptr,e);return z.__wrap(t)}rbPrincipalInertiaLocalFrame(e){let t=n.rawrigidbodyset_rbPrincipalInertiaLocalFrame(this.__wbg_ptr,e);return L.__wrap(t)}rbPrincipalInertia(e){let t=n.rawrigidbodyset_rbPrincipalInertia(this.__wbg_ptr,e);return z.__wrap(t)}rbEffectiveWorldInvInertia(e){let t=n.rawrigidbodyset_rbEffectiveWorldInvInertia(this.__wbg_ptr,e);return Xe.__wrap(t)}rbEffectiveAngularInertia(e){let t=n.rawrigidbodyset_rbEffectiveAngularInertia(this.__wbg_ptr,e);return Xe.__wrap(t)}rbWakeUp(e){n.rawrigidbodyset_rbWakeUp(this.__wbg_ptr,e)}rbIsCcdEnabled(e){return n.rawrigidbodyset_rbIsCcdEnabled(this.__wbg_ptr,e)!==0}rbSoftCcdPrediction(e){return n.rawrigidbodyset_rbSoftCcdPrediction(this.__wbg_ptr,e)}rbNumColliders(e){return n.rawrigidbodyset_rbNumColliders(this.__wbg_ptr,e)>>>0}rbCollider(e,t){return n.rawrigidbodyset_rbCollider(this.__wbg_ptr,e,t)}rbBodyType(e){return n.rawrigidbodyset_rbBodyType(this.__wbg_ptr,e)}rbSetBodyType(e,t,r){n.rawrigidbodyset_rbSetBodyType(this.__wbg_ptr,e,t,r)}rbIsFixed(e){return n.rawrigidbodyset_rbIsFixed(this.__wbg_ptr,e)!==0}rbIsKinematic(e){return n.rawrigidbodyset_rbIsKinematic(this.__wbg_ptr,e)!==0}rbIsDynamic(e){return n.rawrigidbodyset_rbIsDynamic(this.__wbg_ptr,e)!==0}rbLinearDamping(e){return n.rawrigidbodyset_rbLinearDamping(this.__wbg_ptr,e)}rbAngularDamping(e){return n.rawrigidbodyset_rbAngularDamping(this.__wbg_ptr,e)}rbSetLinearDamping(e,t){n.rawrigidbodyset_rbSetLinearDamping(this.__wbg_ptr,e,t)}rbSetAngularDamping(e,t){n.rawrigidbodyset_rbSetAngularDamping(this.__wbg_ptr,e,t)}rbSetEnabled(e,t){n.rawrigidbodyset_rbSetEnabled(this.__wbg_ptr,e,t)}rbIsEnabled(e){return n.rawrigidbodyset_rbIsEnabled(this.__wbg_ptr,e)!==0}rbGravityScale(e){return n.rawrigidbodyset_rbGravityScale(this.__wbg_ptr,e)}rbSetGravityScale(e,t,r){n.rawrigidbodyset_rbSetGravityScale(this.__wbg_ptr,e,t,r)}rbResetForces(e,t){n.rawrigidbodyset_rbResetForces(this.__wbg_ptr,e,t)}rbResetTorques(e,t){n.rawrigidbodyset_rbResetTorques(this.__wbg_ptr,e,t)}rbAddForce(e,t,r){h(t,z),n.rawrigidbodyset_rbAddForce(this.__wbg_ptr,e,t.__wbg_ptr,r)}rbApplyImpulse(e,t,r){h(t,z),n.rawrigidbodyset_rbApplyImpulse(this.__wbg_ptr,e,t.__wbg_ptr,r)}rbAddTorque(e,t,r){h(t,z),n.rawrigidbodyset_rbAddTorque(this.__wbg_ptr,e,t.__wbg_ptr,r)}rbApplyTorqueImpulse(e,t,r){h(t,z),n.rawrigidbodyset_rbApplyTorqueImpulse(this.__wbg_ptr,e,t.__wbg_ptr,r)}rbAddForceAtPoint(e,t,r,i){h(t,z),h(r,z),n.rawrigidbodyset_rbAddForceAtPoint(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i)}rbApplyImpulseAtPoint(e,t,r,i){h(t,z),h(r,z),n.rawrigidbodyset_rbApplyImpulseAtPoint(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i)}rbAdditionalSolverIterations(e){return n.rawrigidbodyset_rbAdditionalSolverIterations(this.__wbg_ptr,e)>>>0}rbSetAdditionalSolverIterations(e,t){n.rawrigidbodyset_rbSetAdditionalSolverIterations(this.__wbg_ptr,e,t)}rbUserData(e){return n.rawrigidbodyset_rbUserData(this.__wbg_ptr,e)>>>0}rbSetUserData(e,t){n.rawrigidbodyset_rbSetUserData(this.__wbg_ptr,e,t)}rbUserForce(e){let t=n.rawrigidbodyset_rbUserForce(this.__wbg_ptr,e);return z.__wrap(t)}rbUserTorque(e){let t=n.rawrigidbodyset_rbUserTorque(this.__wbg_ptr,e);return z.__wrap(t)}constructor(){return this.__wbg_ptr=n.rawrigidbodyset_new()>>>0,qe.register(this,this.__wbg_ptr,this),this}createRigidBody(e,t,r,i,a,o,s,c,l,u,d,f,p,m,g,_,v,y,b,ee,te,x,ne,S,C,w){return h(t,z),h(r,L),h(s,z),h(c,z),h(l,z),h(u,z),h(d,L),n.rawrigidbodyset_createRigidBody(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i,a,o,s.__wbg_ptr,c.__wbg_ptr,l.__wbg_ptr,u.__wbg_ptr,d.__wbg_ptr,f,p,m,g,_,v,y,b,ee,te,x,ne,S,C,w)}remove(e,t,r,i,a){h(t,N),h(r,k),h(i,j),h(a,P),n.rawrigidbodyset_remove(this.__wbg_ptr,e,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr)}len(){return n.rawrigidbodyset_len(this.__wbg_ptr)>>>0}contains(e){return n.rawrigidbodyset_contains(this.__wbg_ptr,e)!==0}forEachRigidBodyHandle(e){try{n.rawrigidbodyset_forEachRigidBodyHandle(this.__wbg_ptr,_(e))}finally{r[g++]=void 0}}propagateModifiedBodyPositionsToColliders(e){h(e,k),n.rawrigidbodyset_propagateModifiedBodyPositionsToColliders(this.__wbg_ptr,e.__wbg_ptr)}},Je=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawrotation_free(e>>>0,1))),L=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,Je.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Je.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawrotation_free(e,0)}constructor(e,t,r,i){return this.__wbg_ptr=n.rawrotation_new(e,t,r,i)>>>0,Je.register(this,this.__wbg_ptr,this),this}static identity(){let t=n.rawrotation_identity();return e.__wrap(t)}get x(){return n.rawintegrationparameters_dt(this.__wbg_ptr)}get y(){return n.rawkinematiccharactercontroller_offset(this.__wbg_ptr)}get z(){return n.rawcollidershapecasthit_time_of_impact(this.__wbg_ptr)}get w(){return n.rawrotation_w(this.__wbg_ptr)}},Ye=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawsdpmatrix3_free(e>>>0,1))),Xe=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,Ye.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Ye.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawsdpmatrix3_free(e,0)}elements(){return m(n.rawsdpmatrix3_elements(this.__wbg_ptr))}},Ze=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawserializationpipeline_free(e>>>0,1))),Qe=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,Ze.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawserializationpipeline_free(e,0)}constructor(){return this.__wbg_ptr=n.rawccdsolver_new()>>>0,Ze.register(this,this.__wbg_ptr,this),this}serializeAll(e,t,r,i,a,o,s,c,l){return h(e,z),h(t,M),h(r,N),h(i,O),h(a,F),h(o,I),h(s,k),h(c,j),h(l,P),m(n.rawserializationpipeline_serializeAll(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s.__wbg_ptr,c.__wbg_ptr,l.__wbg_ptr))}deserializeAll(e){let t=n.rawserializationpipeline_deserializeAll(this.__wbg_ptr,o(e));return t===0?void 0:be.__wrap(t)}},$e=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawshape_free(e>>>0,1))),R=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,$e.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,$e.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawshape_free(e,0)}static cuboid(t,r,i){let a=n.rawshape_cuboid(t,r,i);return e.__wrap(a)}static roundCuboid(t,r,i,a){let o=n.rawshape_roundCuboid(t,r,i,a);return e.__wrap(o)}static ball(t){let r=n.rawshape_ball(t);return e.__wrap(r)}static halfspace(t){h(t,z);let r=n.rawshape_halfspace(t.__wbg_ptr);return e.__wrap(r)}static capsule(t,r){let i=n.rawshape_capsule(t,r);return e.__wrap(i)}static cylinder(t,r){let i=n.rawshape_cylinder(t,r);return e.__wrap(i)}static roundCylinder(t,r,i){let a=n.rawshape_roundCylinder(t,r,i);return e.__wrap(a)}static cone(t,r){let i=n.rawshape_cone(t,r);return e.__wrap(i)}static roundCone(t,r,i){let a=n.rawshape_roundCone(t,r,i);return e.__wrap(a)}static voxels(t,r){h(t,z);let i=C(r,n.__wbindgen_export_2),a=S,o=n.rawshape_voxels(t.__wbg_ptr,i,a);return e.__wrap(o)}static voxelsFromPoints(t,r){h(t,z);let i=w(r,n.__wbindgen_export_2),a=S,o=n.rawshape_voxelsFromPoints(t.__wbg_ptr,i,a);return e.__wrap(o)}static polyline(t,r){let i=w(t,n.__wbindgen_export_2),a=S,o=C(r,n.__wbindgen_export_2),s=S,c=n.rawshape_polyline(i,a,o,s);return e.__wrap(c)}static trimesh(t,r,i){let a=w(t,n.__wbindgen_export_2),o=S,s=C(r,n.__wbindgen_export_2),c=S,l=n.rawshape_trimesh(a,o,s,c,i);return l===0?void 0:e.__wrap(l)}static heightfield(t,r,i,a,o){let s=w(i,n.__wbindgen_export_2),c=S;h(a,z);let l=n.rawshape_heightfield(t,r,s,c,a.__wbg_ptr,o);return e.__wrap(l)}static segment(t,r){h(t,z),h(r,z);let i=n.rawshape_segment(t.__wbg_ptr,r.__wbg_ptr);return e.__wrap(i)}static triangle(t,r,i){h(t,z),h(r,z),h(i,z);let a=n.rawshape_triangle(t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr);return e.__wrap(a)}static roundTriangle(t,r,i,a){h(t,z),h(r,z),h(i,z);let o=n.rawshape_roundTriangle(t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a);return e.__wrap(o)}static convexHull(t){let r=w(t,n.__wbindgen_export_2),i=S,a=n.rawshape_convexHull(r,i);return a===0?void 0:e.__wrap(a)}static roundConvexHull(t,r){let i=w(t,n.__wbindgen_export_2),a=S,o=n.rawshape_roundConvexHull(i,a,r);return o===0?void 0:e.__wrap(o)}static convexMesh(t,r){let i=w(t,n.__wbindgen_export_2),a=S,o=C(r,n.__wbindgen_export_2),s=S,c=n.rawshape_convexMesh(i,a,o,s);return c===0?void 0:e.__wrap(c)}static roundConvexMesh(t,r,i){let a=w(t,n.__wbindgen_export_2),o=S,s=C(r,n.__wbindgen_export_2),c=S,l=n.rawshape_roundConvexMesh(a,o,s,c,i);return l===0?void 0:e.__wrap(l)}castShape(t,r,i,a,o,s,c,l,u,d){h(t,z),h(r,L),h(i,z),h(a,e),h(o,z),h(s,L),h(c,z);let f=n.rawshape_castShape(this.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s.__wbg_ptr,c.__wbg_ptr,l,u,d);return f===0?void 0:tt.__wrap(f)}intersectsShape(t,r,i,a,o){return h(t,z),h(r,L),h(i,e),h(a,z),h(o,L),n.rawshape_intersectsShape(this.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr)!==0}contactShape(t,r,i,a,o,s){h(t,z),h(r,L),h(i,e),h(a,z),h(o,L);let c=n.rawshape_contactShape(this.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a.__wbg_ptr,o.__wbg_ptr,s);return c===0?void 0:rt.__wrap(c)}containsPoint(e,t,r){return h(e,z),h(t,L),h(r,z),n.rawshape_containsPoint(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr)!==0}projectPoint(e,t,r,i){h(e,z),h(t,L),h(r,z);let a=n.rawshape_projectPoint(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i);return Be.__wrap(a)}intersectsRay(e,t,r,i,a){return h(e,z),h(t,L),h(r,z),h(i,z),n.rawshape_intersectsRay(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a)!==0}castRay(e,t,r,i,a,o){return h(e,z),h(t,L),h(r,z),h(i,z),n.rawshape_castRay(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a,o)}castRayAndGetNormal(e,t,r,i,a,o){h(e,z),h(t,L),h(r,z),h(i,z);let s=n.rawshape_castRayAndGetNormal(this.__wbg_ptr,e.__wbg_ptr,t.__wbg_ptr,r.__wbg_ptr,i.__wbg_ptr,a,o);return s===0?void 0:Ke.__wrap(s)}},et=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawshapecasthit_free(e>>>0,1))),tt=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,et.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,et.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawshapecasthit_free(e,0)}time_of_impact(){return n.rawintegrationparameters_dt(this.__wbg_ptr)}witness1(){let e=n.rawshapecasthit_witness1(this.__wbg_ptr);return z.__wrap(e)}witness2(){let e=n.rawcontactforceevent_total_force(this.__wbg_ptr);return z.__wrap(e)}normal1(){let e=n.rawshapecasthit_normal1(this.__wbg_ptr);return z.__wrap(e)}normal2(){let e=n.rawshapecasthit_normal2(this.__wbg_ptr);return z.__wrap(e)}},nt=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawshapecontact_free(e>>>0,1))),rt=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,nt.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,nt.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawshapecontact_free(e,0)}distance(){return n.rawkinematiccharactercontroller_maxSlopeClimbAngle(this.__wbg_ptr)}point1(){let e=n.rawpointprojection_point(this.__wbg_ptr);return z.__wrap(e)}point2(){let e=n.rawcollidershapecasthit_witness1(this.__wbg_ptr);return z.__wrap(e)}normal1(){let e=n.rawcollidershapecasthit_witness2(this.__wbg_ptr);return z.__wrap(e)}normal2(){let e=n.rawcharactercollision_translationDeltaApplied(this.__wbg_ptr);return z.__wrap(e)}},it=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((e=>n.__wbg_rawvector_free(e>>>0,1))),z=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,it.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,it.unregister(this),e}free(){let e=this.__destroy_into_raw();n.__wbg_rawvector_free(e,0)}static zero(){let t=n.rawvector_zero();return e.__wrap(t)}constructor(e,t,r){return this.__wbg_ptr=n.rawvector_new(e,t,r)>>>0,it.register(this,this.__wbg_ptr,this),this}get x(){return n.rawintegrationparameters_dt(this.__wbg_ptr)}set x(e){n.rawintegrationparameters_set_dt(this.__wbg_ptr,e)}get y(){return n.rawkinematiccharactercontroller_offset(this.__wbg_ptr)}set y(e){n.rawvector_set_y(this.__wbg_ptr,e)}get z(){return n.rawcollidershapecasthit_time_of_impact(this.__wbg_ptr)}set z(e){n.rawvector_set_z(this.__wbg_ptr,e)}xyz(){let t=n.rawvector_xyz(this.__wbg_ptr);return e.__wrap(t)}yxz(){let t=n.rawvector_yxz(this.__wbg_ptr);return e.__wrap(t)}zxy(){let t=n.rawvector_zxy(this.__wbg_ptr);return e.__wrap(t)}xzy(){let t=n.rawvector_xzy(this.__wbg_ptr);return e.__wrap(t)}yzx(){let t=n.rawvector_yzx(this.__wbg_ptr);return e.__wrap(t)}zyx(){let t=n.rawvector_zyx(this.__wbg_ptr);return e.__wrap(t)}};async function at(e){if(n!==void 0)return n;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn(`using deprecated parameters for the initialization function; pass a single object instead`)),e===void 0&&(e=new URL(`rapier_wasm3d_bg.wasm`,``));let t=function(){let e={wbg:{}};return e.wbg.__wbg_bind_c8359b1cba058168=function(e,t,n,r){return o(i(e).bind(i(t),i(n),i(r)))},e.wbg.__wbg_buffer_609cc3eee51ed158=function(e){return o(i(e).buffer)},e.wbg.__wbg_call_672a4d21634d4a24=function(){return s((function(e,t){return o(i(e).call(i(t)))}),arguments)},e.wbg.__wbg_call_7cccdd69e0791ae2=function(){return s((function(e,t,n){return o(i(e).call(i(t),i(n)))}),arguments)},e.wbg.__wbg_call_833bed5770ea2041=function(){return s((function(e,t,n,r){return o(i(e).call(i(t),i(n),i(r)))}),arguments)},e.wbg.__wbg_call_b8adc8b1d0a0d8eb=function(){return s((function(e,t,n,r,a){return o(i(e).call(i(t),i(n),i(r),i(a)))}),arguments)},e.wbg.__wbg_length_3b4f022188ae8db6=function(e){return i(e).length},e.wbg.__wbg_length_a446193dc22c12f8=function(e){return i(e).length},e.wbg.__wbg_new_a12002a7f91c75be=function(e){return o(new Uint8Array(i(e)))},e.wbg.__wbg_newnoargs_105ed471475aaf50=function(e,t){return o(Function(u(e,t)))},e.wbg.__wbg_newwithbyteoffsetandlength_d97e637ebe145a9a=function(e,t,n){return o(new Uint8Array(i(e),t>>>0,n>>>0))},e.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(e,t,n){return o(new Float32Array(i(e),t>>>0,n>>>0))},e.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(e){return o(new Float32Array(e>>>0))},e.wbg.__wbg_now_2c95c9de01293173=function(e){return i(e).now()},e.wbg.__wbg_performance_7a3ffd0b17f663ad=function(e){return o(i(e).performance)},e.wbg.__wbg_rawcontactforceevent_new=function(e){return o(fe.__wrap(e))},e.wbg.__wbg_rawraycolliderintersection_new=function(e){return o(We.__wrap(e))},e.wbg.__wbg_set_10bad9bee0e9c58b=function(e,t,n){i(e).set(i(t),n>>>0)},e.wbg.__wbg_set_65595bdd868b3009=function(e,t,n){i(e).set(i(t),n>>>0)},e.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07=function(){let e=typeof global>`u`?null:global;return d(e)?0:o(e)},e.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0=function(){let e=typeof globalThis>`u`?null:globalThis;return d(e)?0:o(e)},e.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819=function(){let e=typeof self>`u`?null:self;return d(e)?0:o(e)},e.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40=function(){let e=typeof window>`u`?null:window;return d(e)?0:o(e)},e.wbg.__wbindgen_boolean_get=function(e){let t=i(e);return typeof t==`boolean`?+!!t:2},e.wbg.__wbindgen_is_function=function(e){return typeof i(e)==`function`},e.wbg.__wbindgen_is_undefined=function(e){return i(e)===void 0},e.wbg.__wbindgen_memory=function(){return o(n.memory)},e.wbg.__wbindgen_number_get=function(e,t){let n=i(t),r=typeof n==`number`?n:void 0;p().setFloat64(e+8,d(r)?0:r,!0),p().setInt32(e+0,!d(r),!0)},e.wbg.__wbindgen_number_new=function(e){return o(e)},e.wbg.__wbindgen_object_clone_ref=function(e){return o(i(e))},e.wbg.__wbindgen_object_drop_ref=function(e){m(e)},e.wbg.__wbindgen_throw=function(e,t){throw Error(u(e,t))},e}();(typeof e==`string`||typeof Request==`function`&&e instanceof Request||typeof URL==`function`&&e instanceof URL)&&(e=fetch(e));let{instance:r,module:a}=await async function(e,t){if(typeof Response==`function`&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming==`function`)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if(e.headers.get(`Content-Type`)==`application/wasm`)throw t;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",t)}let n=await e.arrayBuffer();return await WebAssembly.instantiate(n,t)}{let n=await WebAssembly.instantiate(e,t);return n instanceof WebAssembly.Instance?{instance:n,module:e}:n}}(await e,t);return function(e,t){return n=e.exports,at.__wbindgen_wasm_module=t,f=null,b=null,v=null,x=null,l=null,n}(r,a)}var ot=class{constructor(e,t,n){this.x=e,this.y=t,this.z=n}},B=class e{static new(e,t,n){return new ot(e,t,n)}static intoRaw(e){return new z(e.x,e.y,e.z)}static zeros(){return e.new(0,0,0)}static fromRaw(t){if(!t)return null;let n=e.new(t.x,t.y,t.z);return t.free(),n}static copy(e,t){e.x=t.x,e.y=t.y,e.z=t.z}},st=class{constructor(e,t,n,r){this.x=e,this.y=t,this.z=n,this.w=r}},V=class{static identity(){return new st(0,0,0,1)}static fromRaw(e){if(!e)return null;let t=new st(e.x,e.y,e.z,e.w);return e.free(),t}static intoRaw(e){return new L(e.x,e.y,e.z,e.w)}static copy(e,t){e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w}},ct=class{constructor(e){this.elements=e}get m11(){return this.elements[0]}get m12(){return this.elements[1]}get m21(){return this.m12}get m13(){return this.elements[2]}get m31(){return this.m13}get m22(){return this.elements[3]}get m23(){return this.elements[4]}get m32(){return this.m23}get m33(){return this.elements[5]}},lt=class{static fromRaw(e){let t=new ct(e.elements());return e.free(),t}},H,U,ut,dt,W,G,K,ft,pt,mt,ht,gt,_t,vt,yt,q;(function(e){e[e.Dynamic=0]=`Dynamic`,e[e.Fixed=1]=`Fixed`,e[e.KinematicPositionBased=2]=`KinematicPositionBased`,e[e.KinematicVelocityBased=3]=`KinematicVelocityBased`})(H||={});var bt=class{constructor(e,t,n){this.rawSet=e,this.colliderSet=t,this.handle=n}finalizeDeserialization(e){this.colliderSet=e}isValid(){return this.rawSet.contains(this.handle)}lockTranslations(e,t){return this.rawSet.rbLockTranslations(this.handle,e,t)}lockRotations(e,t){return this.rawSet.rbLockRotations(this.handle,e,t)}setEnabledTranslations(e,t,n,r){return this.rawSet.rbSetEnabledTranslations(this.handle,e,t,n,r)}restrictTranslations(e,t,n,r){this.setEnabledTranslations(e,t,n,r)}setEnabledRotations(e,t,n,r){return this.rawSet.rbSetEnabledRotations(this.handle,e,t,n,r)}restrictRotations(e,t,n,r){this.setEnabledRotations(e,t,n,r)}dominanceGroup(){return this.rawSet.rbDominanceGroup(this.handle)}setDominanceGroup(e){this.rawSet.rbSetDominanceGroup(this.handle,e)}additionalSolverIterations(){return this.rawSet.rbAdditionalSolverIterations(this.handle)}setAdditionalSolverIterations(e){this.rawSet.rbSetAdditionalSolverIterations(this.handle,e)}enableCcd(e){this.rawSet.rbEnableCcd(this.handle,e)}setSoftCcdPrediction(e){this.rawSet.rbSetSoftCcdPrediction(this.handle,e)}softCcdPrediction(){return this.rawSet.rbSoftCcdPrediction(this.handle)}translation(){let e=this.rawSet.rbTranslation(this.handle);return B.fromRaw(e)}rotation(){let e=this.rawSet.rbRotation(this.handle);return V.fromRaw(e)}nextTranslation(){let e=this.rawSet.rbNextTranslation(this.handle);return B.fromRaw(e)}nextRotation(){let e=this.rawSet.rbNextRotation(this.handle);return V.fromRaw(e)}setTranslation(e,t){this.rawSet.rbSetTranslation(this.handle,e.x,e.y,e.z,t)}setLinvel(e,t){let n=B.intoRaw(e);this.rawSet.rbSetLinvel(this.handle,n,t),n.free()}gravityScale(){return this.rawSet.rbGravityScale(this.handle)}setGravityScale(e,t){this.rawSet.rbSetGravityScale(this.handle,e,t)}setRotation(e,t){this.rawSet.rbSetRotation(this.handle,e.x,e.y,e.z,e.w,t)}setAngvel(e,t){let n=B.intoRaw(e);this.rawSet.rbSetAngvel(this.handle,n,t),n.free()}setNextKinematicTranslation(e){this.rawSet.rbSetNextKinematicTranslation(this.handle,e.x,e.y,e.z)}setNextKinematicRotation(e){this.rawSet.rbSetNextKinematicRotation(this.handle,e.x,e.y,e.z,e.w)}linvel(){return B.fromRaw(this.rawSet.rbLinvel(this.handle))}velocityAtPoint(e){let t=B.intoRaw(e),n=B.fromRaw(this.rawSet.rbVelocityAtPoint(this.handle,t));return t.free(),n}angvel(){return B.fromRaw(this.rawSet.rbAngvel(this.handle))}mass(){return this.rawSet.rbMass(this.handle)}effectiveInvMass(){return B.fromRaw(this.rawSet.rbEffectiveInvMass(this.handle))}invMass(){return this.rawSet.rbInvMass(this.handle)}localCom(){return B.fromRaw(this.rawSet.rbLocalCom(this.handle))}worldCom(){return B.fromRaw(this.rawSet.rbWorldCom(this.handle))}invPrincipalInertia(){return B.fromRaw(this.rawSet.rbInvPrincipalInertia(this.handle))}principalInertia(){return B.fromRaw(this.rawSet.rbPrincipalInertia(this.handle))}principalInertiaLocalFrame(){return V.fromRaw(this.rawSet.rbPrincipalInertiaLocalFrame(this.handle))}effectiveWorldInvInertia(){return lt.fromRaw(this.rawSet.rbEffectiveWorldInvInertia(this.handle))}effectiveAngularInertia(){return lt.fromRaw(this.rawSet.rbEffectiveAngularInertia(this.handle))}sleep(){this.rawSet.rbSleep(this.handle)}wakeUp(){this.rawSet.rbWakeUp(this.handle)}isCcdEnabled(){return this.rawSet.rbIsCcdEnabled(this.handle)}numColliders(){return this.rawSet.rbNumColliders(this.handle)}collider(e){return this.colliderSet.get(this.rawSet.rbCollider(this.handle,e))}setEnabled(e){this.rawSet.rbSetEnabled(this.handle,e)}isEnabled(){return this.rawSet.rbIsEnabled(this.handle)}bodyType(){return this.rawSet.rbBodyType(this.handle)}setBodyType(e,t){return this.rawSet.rbSetBodyType(this.handle,e,t)}isSleeping(){return this.rawSet.rbIsSleeping(this.handle)}isMoving(){return this.rawSet.rbIsMoving(this.handle)}isFixed(){return this.rawSet.rbIsFixed(this.handle)}isKinematic(){return this.rawSet.rbIsKinematic(this.handle)}isDynamic(){return this.rawSet.rbIsDynamic(this.handle)}linearDamping(){return this.rawSet.rbLinearDamping(this.handle)}angularDamping(){return this.rawSet.rbAngularDamping(this.handle)}setLinearDamping(e){this.rawSet.rbSetLinearDamping(this.handle,e)}recomputeMassPropertiesFromColliders(){this.rawSet.rbRecomputeMassPropertiesFromColliders(this.handle,this.colliderSet.raw)}setAdditionalMass(e,t){this.rawSet.rbSetAdditionalMass(this.handle,e,t)}setAdditionalMassProperties(e,t,n,r,i){let a=B.intoRaw(t),o=B.intoRaw(n),s=V.intoRaw(r);this.rawSet.rbSetAdditionalMassProperties(this.handle,e,a,o,s,i),a.free(),o.free(),s.free()}setAngularDamping(e){this.rawSet.rbSetAngularDamping(this.handle,e)}resetForces(e){this.rawSet.rbResetForces(this.handle,e)}resetTorques(e){this.rawSet.rbResetTorques(this.handle,e)}addForce(e,t){let n=B.intoRaw(e);this.rawSet.rbAddForce(this.handle,n,t),n.free()}applyImpulse(e,t){let n=B.intoRaw(e);this.rawSet.rbApplyImpulse(this.handle,n,t),n.free()}addTorque(e,t){let n=B.intoRaw(e);this.rawSet.rbAddTorque(this.handle,n,t),n.free()}applyTorqueImpulse(e,t){let n=B.intoRaw(e);this.rawSet.rbApplyTorqueImpulse(this.handle,n,t),n.free()}addForceAtPoint(e,t,n){let r=B.intoRaw(e),i=B.intoRaw(t);this.rawSet.rbAddForceAtPoint(this.handle,r,i,n),r.free(),i.free()}applyImpulseAtPoint(e,t,n){let r=B.intoRaw(e),i=B.intoRaw(t);this.rawSet.rbApplyImpulseAtPoint(this.handle,r,i,n),r.free(),i.free()}userForce(){return B.fromRaw(this.rawSet.rbUserForce(this.handle))}userTorque(){return B.fromRaw(this.rawSet.rbUserTorque(this.handle))}},xt=class e{constructor(e){this.enabled=!0,this.status=e,this.translation=B.zeros(),this.rotation=V.identity(),this.gravityScale=1,this.linvel=B.zeros(),this.mass=0,this.massOnly=!1,this.centerOfMass=B.zeros(),this.translationsEnabledX=!0,this.translationsEnabledY=!0,this.angvel=B.zeros(),this.principalAngularInertia=B.zeros(),this.angularInertiaLocalFrame=V.identity(),this.translationsEnabledZ=!0,this.rotationsEnabledX=!0,this.rotationsEnabledY=!0,this.rotationsEnabledZ=!0,this.linearDamping=0,this.angularDamping=0,this.canSleep=!0,this.sleeping=!1,this.ccdEnabled=!1,this.softCcdPrediction=0,this.dominanceGroup=0,this.additionalSolverIterations=0}static dynamic(){return new e(H.Dynamic)}static kinematicPositionBased(){return new e(H.KinematicPositionBased)}static kinematicVelocityBased(){return new e(H.KinematicVelocityBased)}static fixed(){return new e(H.Fixed)}static newDynamic(){return new e(H.Dynamic)}static newKinematicPositionBased(){return new e(H.KinematicPositionBased)}static newKinematicVelocityBased(){return new e(H.KinematicVelocityBased)}static newStatic(){return new e(H.Fixed)}setDominanceGroup(e){return this.dominanceGroup=e,this}setAdditionalSolverIterations(e){return this.additionalSolverIterations=e,this}setEnabled(e){return this.enabled=e,this}setTranslation(e,t,n){if(typeof e!=`number`||typeof t!=`number`||typeof n!=`number`)throw TypeError(`The translation components must be numbers.`);return this.translation={x:e,y:t,z:n},this}setRotation(e){return V.copy(this.rotation,e),this}setGravityScale(e){return this.gravityScale=e,this}setAdditionalMass(e){return this.mass=e,this.massOnly=!0,this}setLinvel(e,t,n){if(typeof e!=`number`||typeof t!=`number`||typeof n!=`number`)throw TypeError(`The linvel components must be numbers.`);return this.linvel={x:e,y:t,z:n},this}setAngvel(e){return B.copy(this.angvel,e),this}setAdditionalMassProperties(e,t,n,r){return this.mass=e,B.copy(this.centerOfMass,t),B.copy(this.principalAngularInertia,n),V.copy(this.angularInertiaLocalFrame,r),this.massOnly=!1,this}enabledTranslations(e,t,n){return this.translationsEnabledX=e,this.translationsEnabledY=t,this.translationsEnabledZ=n,this}restrictTranslations(e,t,n){return this.enabledTranslations(e,t,n)}lockTranslations(){return this.enabledTranslations(!1,!1,!1)}enabledRotations(e,t,n){return this.rotationsEnabledX=e,this.rotationsEnabledY=t,this.rotationsEnabledZ=n,this}restrictRotations(e,t,n){return this.enabledRotations(e,t,n)}lockRotations(){return this.restrictRotations(!1,!1,!1)}setLinearDamping(e){return this.linearDamping=e,this}setAngularDamping(e){return this.angularDamping=e,this}setCanSleep(e){return this.canSleep=e,this}setSleeping(e){return this.sleeping=e,this}setCcdEnabled(e){return this.ccdEnabled=e,this}setSoftCcdPrediction(e){return this.softCcdPrediction=e,this}setUserData(e){return this.userData=e,this}},St=class{constructor(){this.fconv=new Float64Array(1),this.uconv=new Uint32Array(this.fconv.buffer),this.data=[],this.size=0}set(e,t){let n=this.index(e);for(;this.data.length<=n;)this.data.push(null);this.data[n]??(this.size+=1),this.data[n]=t}len(){return this.size}delete(e){let t=this.index(e);te!=null))}index(e){return this.fconv[0]=e,this.uconv[0]}},Ct=class{constructor(e){this.raw=e||new I,this.map=new St,e&&e.forEachRigidBodyHandle((t=>{this.map.set(t,new bt(e,null,t))}))}free(){this.raw&&this.raw.free(),this.raw=void 0,this.map&&this.map.clear(),this.map=void 0}finalizeDeserialization(e){this.map.forEach((t=>t.finalizeDeserialization(e)))}createRigidBody(e,t){let n=B.intoRaw(t.translation),r=V.intoRaw(t.rotation),i=B.intoRaw(t.linvel),a=B.intoRaw(t.centerOfMass),o=B.intoRaw(t.angvel),s=B.intoRaw(t.principalAngularInertia),c=V.intoRaw(t.angularInertiaLocalFrame),l=this.raw.createRigidBody(t.enabled,n,r,t.gravityScale,t.mass,t.massOnly,a,i,o,s,c,t.translationsEnabledX,t.translationsEnabledY,t.translationsEnabledZ,t.rotationsEnabledX,t.rotationsEnabledY,t.rotationsEnabledZ,t.linearDamping,t.angularDamping,t.status,t.canSleep,t.sleeping,t.softCcdPrediction,t.ccdEnabled,t.dominanceGroup,t.additionalSolverIterations);n.free(),r.free(),i.free(),a.free(),o.free(),s.free(),c.free();let u=new bt(this.raw,e,l);return u.userData=t.userData,this.map.set(l,u),u}remove(e,t,n,r,i){for(let t=0;tr.unmap(e))),i.forEachJointHandleAttachedToRigidBody(e,(e=>i.unmap(e))),this.raw.remove(e,t.raw,n.raw,r.raw,i.raw),this.map.delete(e)}len(){return this.map.len()}contains(e){return this.get(e)!=null}get(e){return this.map.get(e)}forEach(e){this.map.forEach(e)}forEachActiveRigidBody(e,t){e.forEachActiveRigidBodyHandle((e=>{t(this.get(e))}))}getAll(){return this.map.getAll()}},wt=class{constructor(e){this.raw=e||new M}free(){this.raw&&this.raw.free(),this.raw=void 0}get dt(){return this.raw.dt}get contact_erp(){return this.raw.contact_erp}get lengthUnit(){return this.raw.lengthUnit}get normalizedAllowedLinearError(){return this.raw.normalizedAllowedLinearError}get normalizedPredictionDistance(){return this.raw.normalizedPredictionDistance}get numSolverIterations(){return this.raw.numSolverIterations}get numInternalPgsIterations(){return this.raw.numInternalPgsIterations}get minIslandSize(){return this.raw.minIslandSize}get maxCcdSubsteps(){return this.raw.maxCcdSubsteps}set dt(e){this.raw.dt=e}set contact_natural_frequency(e){this.raw.contact_natural_frequency=e}set lengthUnit(e){this.raw.lengthUnit=e}set normalizedAllowedLinearError(e){this.raw.normalizedAllowedLinearError=e}set normalizedPredictionDistance(e){this.raw.normalizedPredictionDistance=e}set numSolverIterations(e){this.raw.numSolverIterations=e}set numInternalPgsIterations(e){this.raw.numInternalPgsIterations=e}set minIslandSize(e){this.raw.minIslandSize=e}set maxCcdSubsteps(e){this.raw.maxCcdSubsteps=e}};(function(e){e[e.Revolute=0]=`Revolute`,e[e.Fixed=1]=`Fixed`,e[e.Prismatic=2]=`Prismatic`,e[e.Rope=3]=`Rope`,e[e.Spring=4]=`Spring`,e[e.Spherical=5]=`Spherical`,e[e.Generic=6]=`Generic`})(U||={}),function(e){e[e.AccelerationBased=0]=`AccelerationBased`,e[e.ForceBased=1]=`ForceBased`}(ut||={}),function(e){e[e.LinX=1]=`LinX`,e[e.LinY=2]=`LinY`,e[e.LinZ=4]=`LinZ`,e[e.AngX=8]=`AngX`,e[e.AngY=16]=`AngY`,e[e.AngZ=32]=`AngZ`}(dt||={});var J=class e{constructor(e,t,n){this.rawSet=e,this.bodySet=t,this.handle=n}static newTyped(t,n,r){switch(t.jointType(r)){case E.Revolute:return new At(t,n,r);case E.Prismatic:return new kt(t,n,r);case E.Fixed:return new Et(t,n,r);case E.Spring:return new Ot(t,n,r);case E.Rope:return new Dt(t,n,r);case E.Spherical:return new Mt(t,n,r);case E.Generic:return new jt(t,n,r);default:return new e(t,n,r)}}finalizeDeserialization(e){this.bodySet=e}isValid(){return this.rawSet.contains(this.handle)}body1(){return this.bodySet.get(this.rawSet.jointBodyHandle1(this.handle))}body2(){return this.bodySet.get(this.rawSet.jointBodyHandle2(this.handle))}type(){return this.rawSet.jointType(this.handle)}frameX1(){return V.fromRaw(this.rawSet.jointFrameX1(this.handle))}frameX2(){return V.fromRaw(this.rawSet.jointFrameX2(this.handle))}anchor1(){return B.fromRaw(this.rawSet.jointAnchor1(this.handle))}anchor2(){return B.fromRaw(this.rawSet.jointAnchor2(this.handle))}setAnchor1(e){let t=B.intoRaw(e);this.rawSet.jointSetAnchor1(this.handle,t),t.free()}setAnchor2(e){let t=B.intoRaw(e);this.rawSet.jointSetAnchor2(this.handle,t),t.free()}setContactsEnabled(e){this.rawSet.jointSetContactsEnabled(this.handle,e)}contactsEnabled(){return this.rawSet.jointContactsEnabled(this.handle)}},Tt=class extends J{limitsEnabled(){return this.rawSet.jointLimitsEnabled(this.handle,this.rawAxis())}limitsMin(){return this.rawSet.jointLimitsMin(this.handle,this.rawAxis())}limitsMax(){return this.rawSet.jointLimitsMax(this.handle,this.rawAxis())}setLimits(e,t){this.rawSet.jointSetLimits(this.handle,this.rawAxis(),e,t)}configureMotorModel(e){this.rawSet.jointConfigureMotorModel(this.handle,this.rawAxis(),e)}configureMotorVelocity(e,t){this.rawSet.jointConfigureMotorVelocity(this.handle,this.rawAxis(),e,t)}configureMotorPosition(e,t,n){this.rawSet.jointConfigureMotorPosition(this.handle,this.rawAxis(),e,t,n)}configureMotor(e,t,n,r){this.rawSet.jointConfigureMotor(this.handle,this.rawAxis(),e,t,n,r)}},Et=class extends J{},Dt=class extends J{},Ot=class extends J{},kt=class extends Tt{rawAxis(){return T.LinX}},At=class extends Tt{rawAxis(){return T.AngX}},jt=class extends J{},Mt=class extends J{},Nt=class e{constructor(){}static fixed(t,n,r,i){let a=new e;return a.anchor1=t,a.anchor2=r,a.frame1=n,a.frame2=i,a.jointType=U.Fixed,a}static spring(t,n,r,i,a){let o=new e;return o.anchor1=i,o.anchor2=a,o.length=t,o.stiffness=n,o.damping=r,o.jointType=U.Spring,o}static rope(t,n,r){let i=new e;return i.anchor1=n,i.anchor2=r,i.length=t,i.jointType=U.Rope,i}static generic(t,n,r,i){let a=new e;return a.anchor1=t,a.anchor2=n,a.axis=r,a.axesMask=i,a.jointType=U.Generic,a}static spherical(t,n){let r=new e;return r.anchor1=t,r.anchor2=n,r.jointType=U.Spherical,r}static prismatic(t,n,r){let i=new e;return i.anchor1=t,i.anchor2=n,i.axis=r,i.jointType=U.Prismatic,i}static revolute(t,n,r){let i=new e;return i.anchor1=t,i.anchor2=n,i.axis=r,i.jointType=U.Revolute,i}intoRaw(){let e,t,n=B.intoRaw(this.anchor1),r=B.intoRaw(this.anchor2),i=!1,a=0,o=0;switch(this.jointType){case U.Fixed:let s=V.intoRaw(this.frame1),c=V.intoRaw(this.frame2);t=A.fixed(n,s,r,c),s.free(),c.free();break;case U.Spring:t=A.spring(this.length,this.stiffness,this.damping,n,r);break;case U.Rope:t=A.rope(this.length,n,r);break;case U.Prismatic:e=B.intoRaw(this.axis),this.limitsEnabled&&(i=!0,a=this.limits[0],o=this.limits[1]),t=A.prismatic(n,r,e,i,a,o),e.free();break;case U.Generic:e=B.intoRaw(this.axis);let l=this.axesMask;t=A.generic(n,r,e,l);break;case U.Spherical:t=A.spherical(n,r);break;case U.Revolute:e=B.intoRaw(this.axis),t=A.revolute(n,r,e),e.free()}return n.free(),r.free(),t}},Pt=class{constructor(e){this.raw=e||new j,this.map=new St,e&&e.forEachJointHandle((t=>{this.map.set(t,J.newTyped(e,null,t))}))}free(){this.raw&&this.raw.free(),this.raw=void 0,this.map&&this.map.clear(),this.map=void 0}finalizeDeserialization(e){this.map.forEach((t=>t.finalizeDeserialization(e)))}createJoint(e,t,n,r,i){let a=t.intoRaw(),o=this.raw.createJoint(a,n,r,i);a.free();let s=J.newTyped(this.raw,e,o);return this.map.set(o,s),s}remove(e,t){this.raw.remove(e,t),this.unmap(e)}forEachJointHandleAttachedToRigidBody(e,t){this.raw.forEachJointAttachedToRigidBody(e,t)}unmap(e){this.map.delete(e)}len(){return this.map.len()}contains(e){return this.get(e)!=null}get(e){return this.map.get(e)}forEach(e){this.map.forEach(e)}getAll(){return this.map.getAll()}},Y=class e{constructor(e,t){this.rawSet=e,this.handle=t}static newTyped(t,n){switch(t.jointType(n)){case E.Revolute:return new Rt(t,n);case E.Prismatic:return new Lt(t,n);case E.Fixed:return new It(t,n);case E.Spherical:return new zt(t,n);default:return new e(t,n)}}isValid(){return this.rawSet.contains(this.handle)}setContactsEnabled(e){this.rawSet.jointSetContactsEnabled(this.handle,e)}contactsEnabled(){return this.rawSet.jointContactsEnabled(this.handle)}},Ft=class extends Y{},It=class extends Y{},Lt=class extends Ft{rawAxis(){return T.LinX}},Rt=class extends Ft{rawAxis(){return T.AngX}},zt=class extends Y{},Bt=class{constructor(e){this.raw=e||new P,this.map=new St,e&&e.forEachJointHandle((e=>{this.map.set(e,Y.newTyped(this.raw,e))}))}free(){this.raw&&this.raw.free(),this.raw=void 0,this.map&&this.map.clear(),this.map=void 0}createJoint(e,t,n,r){let i=e.intoRaw(),a=this.raw.createJoint(i,t,n,r);i.free();let o=Y.newTyped(this.raw,a);return this.map.set(a,o),o}remove(e,t){this.raw.remove(e,t),this.map.delete(e)}unmap(e){this.map.delete(e)}len(){return this.map.len()}contains(e){return this.get(e)!=null}get(e){return this.map.get(e)}forEach(e){this.map.forEach(e)}forEachJointHandleAttachedToRigidBody(e,t){this.raw.forEachJointAttachedToRigidBody(e,t)}getAll(){return this.map.getAll()}};(function(e){e[e.Average=0]=`Average`,e[e.Min=1]=`Min`,e[e.Multiply=2]=`Multiply`,e[e.Max=3]=`Max`})(W||={});var Vt=class{constructor(e){this.raw=e||new ae}free(){this.raw&&this.raw.free(),this.raw=void 0}},Ht=class{constructor(e){this.raw=e||new N}free(){this.raw&&this.raw.free(),this.raw=void 0}forEachActiveRigidBodyHandle(e){this.raw.forEachActiveRigidBodyHandle(e)}};(function(e){e[e.Vertex=0]=`Vertex`,e[e.Edge=1]=`Edge`,e[e.Face=2]=`Face`,e[e.Unknown=3]=`Unknown`})(G||={});var Ut=class{constructor(e,t){this.origin=e,this.dir=t}pointAt(e){return{x:this.origin.x+this.dir.x*e,y:this.origin.y+this.dir.y*e,z:this.origin.z+this.dir.z*e}}},Wt=class e{constructor(e,t,n,r){this.featureType=G.Unknown,this.featureId=void 0,this.timeOfImpact=e,this.normal=t,r!==void 0&&(this.featureId=r),n!==void 0&&(this.featureType=n)}static fromRaw(t){if(!t)return null;let n=new e(t.time_of_impact(),B.fromRaw(t.normal()),t.featureType(),t.featureId());return t.free(),n}},Gt=class e{constructor(e,t,n,r,i){this.featureType=G.Unknown,this.featureId=void 0,this.collider=e,this.timeOfImpact=t,this.normal=n,i!==void 0&&(this.featureId=i),r!==void 0&&(this.featureType=r)}static fromRaw(t,n){if(!n)return null;let r=new e(t.get(n.colliderHandle()),n.time_of_impact(),B.fromRaw(n.normal()),n.featureType(),n.featureId());return n.free(),r}},Kt=class e{constructor(e,t){this.collider=e,this.timeOfImpact=t}static fromRaw(t,n){if(!n)return null;let r=new e(t.get(n.colliderHandle()),n.timeOfImpact());return n.free(),r}},qt=class e{constructor(e,t){this.point=e,this.isInside=t}static fromRaw(t){if(!t)return null;let n=new e(B.fromRaw(t.point()),t.isInside());return t.free(),n}},Jt=class e{constructor(e,t,n,r,i){this.featureType=G.Unknown,this.featureId=void 0,this.collider=e,this.point=t,this.isInside=n,i!==void 0&&(this.featureId=i),r!==void 0&&(this.featureType=r)}static fromRaw(t,n){if(!n)return null;let r=new e(t.get(n.colliderHandle()),B.fromRaw(n.point()),n.isInside(),n.featureType(),n.featureId());return n.free(),r}},Yt=class e{constructor(e,t,n,r,i){this.time_of_impact=e,this.witness1=t,this.witness2=n,this.normal1=r,this.normal2=i}static fromRaw(t,n){if(!n)return null;let r=new e(n.time_of_impact(),B.fromRaw(n.witness1()),B.fromRaw(n.witness2()),B.fromRaw(n.normal1()),B.fromRaw(n.normal2()));return n.free(),r}},Xt=class e extends Yt{constructor(e,t,n,r,i,a){super(t,n,r,i,a),this.collider=e}static fromRaw(t,n){if(!n)return null;let r=new e(t.get(n.colliderHandle()),n.time_of_impact(),B.fromRaw(n.witness1()),B.fromRaw(n.witness2()),B.fromRaw(n.normal1()),B.fromRaw(n.normal2()));return n.free(),r}},Zt=class{constructor(e){this.raw=e||new O}free(){this.raw&&this.raw.free(),this.raw=void 0}castRay(e,t,n,r,i,a,o,s,c,l,u){let d=B.intoRaw(r.origin),f=B.intoRaw(r.dir),p=Kt.fromRaw(n,this.raw.castRay(e.raw,t.raw,n.raw,d,f,i,a,o,s,c,l,u));return d.free(),f.free(),p}castRayAndGetNormal(e,t,n,r,i,a,o,s,c,l,u){let d=B.intoRaw(r.origin),f=B.intoRaw(r.dir),p=Gt.fromRaw(n,this.raw.castRayAndGetNormal(e.raw,t.raw,n.raw,d,f,i,a,o,s,c,l,u));return d.free(),f.free(),p}intersectionsWithRay(e,t,n,r,i,a,o,s,c,l,u,d){let f=B.intoRaw(r.origin),p=B.intoRaw(r.dir);this.raw.intersectionsWithRay(e.raw,t.raw,n.raw,f,p,i,a,(e=>o(Gt.fromRaw(n,e))),s,c,l,u,d),f.free(),p.free()}intersectionWithShape(e,t,n,r,i,a,o,s,c,l,u){let d=B.intoRaw(r),f=V.intoRaw(i),p=a.intoRaw(),m=this.raw.intersectionWithShape(e.raw,t.raw,n.raw,d,f,p,o,s,c,l,u);return d.free(),f.free(),p.free(),m}projectPoint(e,t,n,r,i,a,o,s,c,l){let u=B.intoRaw(r),d=Jt.fromRaw(n,this.raw.projectPoint(e.raw,t.raw,n.raw,u,i,a,o,s,c,l));return u.free(),d}projectPointAndGetFeature(e,t,n,r,i,a,o,s,c){let l=B.intoRaw(r),u=Jt.fromRaw(n,this.raw.projectPointAndGetFeature(e.raw,t.raw,n.raw,l,i,a,o,s,c));return l.free(),u}intersectionsWithPoint(e,t,n,r,i,a,o,s,c,l){let u=B.intoRaw(r);this.raw.intersectionsWithPoint(e.raw,t.raw,n.raw,u,i,a,o,s,c,l),u.free()}castShape(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m){let h=B.intoRaw(r),g=V.intoRaw(i),_=B.intoRaw(a),v=o.intoRaw(),y=Xt.fromRaw(n,this.raw.castShape(e.raw,t.raw,n.raw,h,g,_,v,s,c,l,u,d,f,p,m));return h.free(),g.free(),_.free(),v.free(),y}intersectionsWithShape(e,t,n,r,i,a,o,s,c,l,u,d){let f=B.intoRaw(r),p=V.intoRaw(i),m=a.intoRaw();this.raw.intersectionsWithShape(e.raw,t.raw,n.raw,f,p,m,o,s,c,l,u,d),f.free(),p.free(),m.free()}collidersWithAabbIntersectingAabb(e,t,n,r,i,a){let o=B.intoRaw(r),s=B.intoRaw(i);this.raw.collidersWithAabbIntersectingAabb(e.raw,t.raw,n.raw,o,s,a),o.free(),s.free()}},Qt=class{constructor(e){this.raw=e||new F,this.tempManifold=new $t(null)}free(){this.raw&&this.raw.free(),this.raw=void 0}contactPairsWith(e,t){this.raw.contact_pairs_with(e,t)}intersectionPairsWith(e,t){this.raw.intersection_pairs_with(e,t)}contactPair(e,t,n){let r=this.raw.contact_pair(e,t);if(r){let t=r.collider1()!=e,i;for(i=0;ie.free())),this.pidControllers.forEach((e=>e.free())),this.vehicleControllers.forEach((e=>e.free())),this.integrationParameters=void 0,this.islands=void 0,this.broadPhase=void 0,this.narrowPhase=void 0,this.bodies=void 0,this.colliders=void 0,this.ccdSolver=void 0,this.impulseJoints=void 0,this.multibodyJoints=void 0,this.physicsPipeline=void 0,this.serializationPipeline=void 0,this.debugRenderPipeline=void 0,this.characterControllers=void 0,this.pidControllers=void 0,this.vehicleControllers=void 0}static fromRaw(t){return t?new e(B.fromRaw(t.takeGravity()),t.takeIntegrationParameters(),t.takeIslandManager(),t.takeBroadPhase(),t.takeNarrowPhase(),t.takeBodies(),t.takeColliders(),t.takeImpulseJoints(),t.takeMultibodyJoints()):null}takeSnapshot(){return this.serializationPipeline.serializeAll(this.gravity,this.integrationParameters,this.islands,this.broadPhase,this.narrowPhase,this.bodies,this.colliders,this.impulseJoints,this.multibodyJoints)}static restoreSnapshot(e){return new xn().deserializeAll(e)}debugRender(e,t){return this.debugRenderPipeline.render(this.bodies,this.colliders,this.impulseJoints,this.multibodyJoints,this.narrowPhase,e,t),new Sn(this.debugRenderPipeline.vertices,this.debugRenderPipeline.colors)}step(e,t){this.physicsPipeline.step(this.gravity,this.integrationParameters,this.islands,this.broadPhase,this.narrowPhase,this.bodies,this.colliders,this.impulseJoints,this.multibodyJoints,this.ccdSolver,e,t)}propagateModifiedBodyPositionsToColliders(){this.bodies.raw.propagateModifiedBodyPositionsToColliders(this.colliders.raw)}get timestep(){return this.integrationParameters.dt}set timestep(e){this.integrationParameters.dt=e}get lengthUnit(){return this.integrationParameters.lengthUnit}set lengthUnit(e){this.integrationParameters.lengthUnit=e}get numSolverIterations(){return this.integrationParameters.numSolverIterations}set numSolverIterations(e){this.integrationParameters.numSolverIterations=e}get numInternalPgsIterations(){return this.integrationParameters.numInternalPgsIterations}set numInternalPgsIterations(e){this.integrationParameters.numInternalPgsIterations=e}get maxCcdSubsteps(){return this.integrationParameters.maxCcdSubsteps}set maxCcdSubsteps(e){this.integrationParameters.maxCcdSubsteps=e}createRigidBody(e){return this.bodies.createRigidBody(this.colliders,e)}createCharacterController(e){let t=new Tn(e,this.integrationParameters,this.broadPhase,this.narrowPhase,this.bodies,this.colliders);return this.characterControllers.add(t),t}removeCharacterController(e){this.characterControllers.delete(e),e.free()}createPidController(e,t,n,r){let i=new En(this.integrationParameters,this.bodies,e,t,n,r);return this.pidControllers.add(i),i}removePidController(e){this.pidControllers.delete(e),e.free()}createVehicleController(e){let t=new Dn(e,this.broadPhase,this.narrowPhase,this.bodies,this.colliders);return this.vehicleControllers.add(t),t}removeVehicleController(e){this.vehicleControllers.delete(e),e.free()}createCollider(e,t){let n=t?t.handle:void 0;return this.colliders.createCollider(this.bodies,e,n)}createImpulseJoint(e,t,n,r){return this.impulseJoints.createJoint(this.bodies,e,t.handle,n.handle,r)}createMultibodyJoint(e,t,n,r){return this.multibodyJoints.createJoint(e,t.handle,n.handle,r)}getRigidBody(e){return this.bodies.get(e)}getCollider(e){return this.colliders.get(e)}getImpulseJoint(e){return this.impulseJoints.get(e)}getMultibodyJoint(e){return this.multibodyJoints.get(e)}removeRigidBody(e){this.bodies&&this.bodies.remove(e.handle,this.islands,this.colliders,this.impulseJoints,this.multibodyJoints)}removeCollider(e,t){this.colliders&&this.colliders.remove(e.handle,this.islands,this.bodies,t)}removeImpulseJoint(e,t){this.impulseJoints&&this.impulseJoints.remove(e.handle,t)}removeMultibodyJoint(e,t){this.impulseJoints&&this.multibodyJoints.remove(e.handle,t)}forEachCollider(e){this.colliders.forEach(e)}forEachRigidBody(e){this.bodies.forEach(e)}forEachActiveRigidBody(e){this.bodies.forEachActiveRigidBody(this.islands,e)}castRay(e,t,n,r,i,a,o,s){return this.broadPhase.castRay(this.narrowPhase,this.bodies,this.colliders,e,t,n,r,i,a?a.handle:null,o?o.handle:null,this.colliders.castClosure(s))}castRayAndGetNormal(e,t,n,r,i,a,o,s){return this.broadPhase.castRayAndGetNormal(this.narrowPhase,this.bodies,this.colliders,e,t,n,r,i,a?a.handle:null,o?o.handle:null,this.colliders.castClosure(s))}intersectionsWithRay(e,t,n,r,i,a,o,s,c){this.broadPhase.intersectionsWithRay(this.narrowPhase,this.bodies,this.colliders,e,t,n,r,i,a,o?o.handle:null,s?s.handle:null,this.colliders.castClosure(c))}intersectionWithShape(e,t,n,r,i,a,o,s){let c=this.broadPhase.intersectionWithShape(this.narrowPhase,this.bodies,this.colliders,e,t,n,r,i,a?a.handle:null,o?o.handle:null,this.colliders.castClosure(s));return c==null?null:this.colliders.get(c)}projectPoint(e,t,n,r,i,a,o){return this.broadPhase.projectPoint(this.narrowPhase,this.bodies,this.colliders,e,t,n,r,i?i.handle:null,a?a.handle:null,this.colliders.castClosure(o))}projectPointAndGetFeature(e,t,n,r,i,a){return this.broadPhase.projectPointAndGetFeature(this.narrowPhase,this.bodies,this.colliders,e,t,n,r?r.handle:null,i?i.handle:null,this.colliders.castClosure(a))}intersectionsWithPoint(e,t,n,r,i,a,o){this.broadPhase.intersectionsWithPoint(this.narrowPhase,this.bodies,this.colliders,e,this.colliders.castClosure(t),n,r,i?i.handle:null,a?a.handle:null,this.colliders.castClosure(o))}castShape(e,t,n,r,i,a,o,s,c,l,u,d){return this.broadPhase.castShape(this.narrowPhase,this.bodies,this.colliders,e,t,n,r,i,a,o,s,c,l?l.handle:null,u?u.handle:null,this.colliders.castClosure(d))}intersectionsWithShape(e,t,n,r,i,a,o,s,c){this.broadPhase.intersectionsWithShape(this.narrowPhase,this.bodies,this.colliders,e,t,n,this.colliders.castClosure(r),i,a,o?o.handle:null,s?s.handle:null,this.colliders.castClosure(c))}collidersWithAabbIntersectingAabb(e,t,n){this.broadPhase.collidersWithAabbIntersectingAabb(this.narrowPhase,this.bodies,this.colliders,e,t,this.colliders.castClosure(n))}contactPairsWith(e,t){this.narrowPhase.contactPairsWith(e.handle,this.colliders.castClosure(t))}intersectionPairsWith(e,t){this.narrowPhase.intersectionPairsWith(e.handle,this.colliders.castClosure(t))}contactPair(e,t,n){this.narrowPhase.contactPair(e.handle,t.handle,n)}intersectionPair(e,t){return this.narrowPhase.intersectionPair(e.handle,t.handle)}set profilerEnabled(e){this.physicsPipeline.raw.set_profiler_enabled(e)}get profilerEnabled(){return this.physicsPipeline.raw.is_profiler_enabled()}timingStep(){return this.physicsPipeline.raw.timing_step()}timingCollisionDetection(){return this.physicsPipeline.raw.timing_collision_detection()}timingBroadPhase(){return this.physicsPipeline.raw.timing_broad_phase()}timingNarrowPhase(){return this.physicsPipeline.raw.timing_narrow_phase()}timingSolver(){return this.physicsPipeline.raw.timing_solver()}timingVelocityAssembly(){return this.physicsPipeline.raw.timing_velocity_assembly()}timingVelocityResolution(){return this.physicsPipeline.raw.timing_velocity_resolution()}timingVelocityUpdate(){return this.physicsPipeline.raw.timing_velocity_update()}timingVelocityWriteback(){return this.physicsPipeline.raw.timing_velocity_writeback()}timingCcd(){return this.physicsPipeline.raw.timing_ccd()}timingCcdToiComputation(){return this.physicsPipeline.raw.timing_ccd_toi_computation()}timingCcdBroadPhase(){return this.physicsPipeline.raw.timing_ccd_broad_phase()}timingCcdNarrowPhase(){return this.physicsPipeline.raw.timing_ccd_narrow_phase()}timingCcdSolver(){return this.physicsPipeline.raw.timing_ccd_solver()}timingIslandConstruction(){return this.physicsPipeline.raw.timing_island_construction()}timingUserChanges(){return this.physicsPipeline.raw.timing_user_changes()}};(function(e){e[e.NONE=0]=`NONE`,e[e.COLLISION_EVENTS=1]=`COLLISION_EVENTS`,e[e.CONTACT_FORCE_EVENTS=2]=`CONTACT_FORCE_EVENTS`})(ht||={});var kn=class{free(){this.raw&&this.raw.free(),this.raw=void 0}collider1(){return this.raw.collider1()}collider2(){return this.raw.collider2()}totalForce(){return B.fromRaw(this.raw.total_force())}totalForceMagnitude(){return this.raw.total_force_magnitude()}maxForceDirection(){return B.fromRaw(this.raw.max_force_direction())}maxForceMagnitude(){return this.raw.max_force_magnitude()}},An=class{constructor(e,t){this.raw=t||new we(e)}free(){this.raw&&this.raw.free(),this.raw=void 0}drainCollisionEvents(e){this.raw.drainCollisionEvents(e)}drainContactForceEvents(e){let t=new kn;this.raw.drainContactForceEvents((n=>{t.raw=n,e(t),t.free()}))}clear(){this.raw.clear()}};(function(e){e[e.NONE=0]=`NONE`,e[e.FILTER_CONTACT_PAIRS=1]=`FILTER_CONTACT_PAIRS`,e[e.FILTER_INTERSECTION_PAIRS=2]=`FILTER_INTERSECTION_PAIRS`})(gt||={}),function(e){e[e.EMPTY=0]=`EMPTY`,e[e.COMPUTE_IMPULSE=1]=`COMPUTE_IMPULSE`}(_t||={}),function(e){e[e.EXCLUDE_FIXED=1]=`EXCLUDE_FIXED`,e[e.EXCLUDE_KINEMATIC=2]=`EXCLUDE_KINEMATIC`,e[e.EXCLUDE_DYNAMIC=4]=`EXCLUDE_DYNAMIC`,e[e.EXCLUDE_SENSORS=8]=`EXCLUDE_SENSORS`,e[e.EXCLUDE_SOLIDS=16]=`EXCLUDE_SOLIDS`,e[e.ONLY_DYNAMIC=3]=`ONLY_DYNAMIC`,e[e.ONLY_KINEMATIC=5]=`ONLY_KINEMATIC`,e[e.ONLY_FIXED=6]=`ONLY_FIXED`}(vt||={}),function(e){e[e.DYNAMIC_DYNAMIC=1]=`DYNAMIC_DYNAMIC`,e[e.DYNAMIC_KINEMATIC=12]=`DYNAMIC_KINEMATIC`,e[e.DYNAMIC_FIXED=2]=`DYNAMIC_FIXED`,e[e.KINEMATIC_KINEMATIC=52224]=`KINEMATIC_KINEMATIC`,e[e.KINEMATIC_FIXED=8704]=`KINEMATIC_FIXED`,e[e.FIXED_FIXED=32]=`FIXED_FIXED`,e[e.DEFAULT=15]=`DEFAULT`,e[e.ALL=60943]=`ALL`}(yt||={});var jn=class{constructor(e,t,n,r){this.colliderSet=e,this.handle=t,this._parent=n,this._shape=r}finalizeDeserialization(e){this.handle!=null&&(this._parent=e.get(this.colliderSet.raw.coParent(this.handle)))}ensureShapeIsCached(){this._shape||=X.fromRaw(this.colliderSet.raw,this.handle)}get shape(){return this.ensureShapeIsCached(),this._shape}clearShapeCache(){this._shape=null}isValid(){return this.colliderSet.raw.contains(this.handle)}translation(){return B.fromRaw(this.colliderSet.raw.coTranslation(this.handle))}translationWrtParent(){return B.fromRaw(this.colliderSet.raw.coTranslationWrtParent(this.handle))}rotation(){return V.fromRaw(this.colliderSet.raw.coRotation(this.handle))}rotationWrtParent(){return V.fromRaw(this.colliderSet.raw.coRotationWrtParent(this.handle))}isSensor(){return this.colliderSet.raw.coIsSensor(this.handle)}setSensor(e){this.colliderSet.raw.coSetSensor(this.handle,e)}setShape(e){let t=e.intoRaw();this.colliderSet.raw.coSetShape(this.handle,t),t.free(),this._shape=e}setEnabled(e){this.colliderSet.raw.coSetEnabled(this.handle,e)}isEnabled(){return this.colliderSet.raw.coIsEnabled(this.handle)}setRestitution(e){this.colliderSet.raw.coSetRestitution(this.handle,e)}setFriction(e){this.colliderSet.raw.coSetFriction(this.handle,e)}frictionCombineRule(){return this.colliderSet.raw.coFrictionCombineRule(this.handle)}setFrictionCombineRule(e){this.colliderSet.raw.coSetFrictionCombineRule(this.handle,e)}restitutionCombineRule(){return this.colliderSet.raw.coRestitutionCombineRule(this.handle)}setRestitutionCombineRule(e){this.colliderSet.raw.coSetRestitutionCombineRule(this.handle,e)}setCollisionGroups(e){this.colliderSet.raw.coSetCollisionGroups(this.handle,e)}setSolverGroups(e){this.colliderSet.raw.coSetSolverGroups(this.handle,e)}contactSkin(){return this.colliderSet.raw.coContactSkin(this.handle)}setContactSkin(e){return this.colliderSet.raw.coSetContactSkin(this.handle,e)}activeHooks(){return this.colliderSet.raw.coActiveHooks(this.handle)}setActiveHooks(e){this.colliderSet.raw.coSetActiveHooks(this.handle,e)}activeEvents(){return this.colliderSet.raw.coActiveEvents(this.handle)}setActiveEvents(e){this.colliderSet.raw.coSetActiveEvents(this.handle,e)}activeCollisionTypes(){return this.colliderSet.raw.coActiveCollisionTypes(this.handle)}setContactForceEventThreshold(e){return this.colliderSet.raw.coSetContactForceEventThreshold(this.handle,e)}contactForceEventThreshold(){return this.colliderSet.raw.coContactForceEventThreshold(this.handle)}setActiveCollisionTypes(e){this.colliderSet.raw.coSetActiveCollisionTypes(this.handle,e)}setDensity(e){this.colliderSet.raw.coSetDensity(this.handle,e)}setMass(e){this.colliderSet.raw.coSetMass(this.handle,e)}setMassProperties(e,t,n,r){let i=B.intoRaw(t),a=B.intoRaw(n),o=V.intoRaw(r);this.colliderSet.raw.coSetMassProperties(this.handle,e,i,a,o),i.free(),a.free(),o.free()}setTranslation(e){this.colliderSet.raw.coSetTranslation(this.handle,e.x,e.y,e.z)}setTranslationWrtParent(e){this.colliderSet.raw.coSetTranslationWrtParent(this.handle,e.x,e.y,e.z)}setRotation(e){this.colliderSet.raw.coSetRotation(this.handle,e.x,e.y,e.z,e.w)}setRotationWrtParent(e){this.colliderSet.raw.coSetRotationWrtParent(this.handle,e.x,e.y,e.z,e.w)}shapeType(){return this.colliderSet.raw.coShapeType(this.handle)}halfExtents(){return B.fromRaw(this.colliderSet.raw.coHalfExtents(this.handle))}setHalfExtents(e){let t=B.intoRaw(e);this.colliderSet.raw.coSetHalfExtents(this.handle,t)}radius(){return this.colliderSet.raw.coRadius(this.handle)}setRadius(e){this.colliderSet.raw.coSetRadius(this.handle,e)}roundRadius(){return this.colliderSet.raw.coRoundRadius(this.handle)}setRoundRadius(e){this.colliderSet.raw.coSetRoundRadius(this.handle,e)}halfHeight(){return this.colliderSet.raw.coHalfHeight(this.handle)}setHalfHeight(e){this.colliderSet.raw.coSetHalfHeight(this.handle,e)}setVoxel(e,t,n,r){this.colliderSet.raw.coSetVoxel(this.handle,e,t,n,r),this._shape=null}propagateVoxelChange(e,t,n,r,i,a,o){this.colliderSet.raw.coPropagateVoxelChange(this.handle,e.handle,t,n,r,i,a,o),this._shape=null}combineVoxelStates(e,t,n,r){this.colliderSet.raw.coCombineVoxelStates(this.handle,e.handle,t,n,r),this._shape=null}vertices(){return this.colliderSet.raw.coVertices(this.handle)}indices(){return this.colliderSet.raw.coIndices(this.handle)}heightfieldHeights(){return this.colliderSet.raw.coHeightfieldHeights(this.handle)}heightfieldScale(){let e=this.colliderSet.raw.coHeightfieldScale(this.handle);return B.fromRaw(e)}heightfieldNRows(){return this.colliderSet.raw.coHeightfieldNRows(this.handle)}heightfieldNCols(){return this.colliderSet.raw.coHeightfieldNCols(this.handle)}parent(){return this._parent}friction(){return this.colliderSet.raw.coFriction(this.handle)}restitution(){return this.colliderSet.raw.coRestitution(this.handle)}density(){return this.colliderSet.raw.coDensity(this.handle)}mass(){return this.colliderSet.raw.coMass(this.handle)}volume(){return this.colliderSet.raw.coVolume(this.handle)}collisionGroups(){return this.colliderSet.raw.coCollisionGroups(this.handle)}solverGroups(){return this.colliderSet.raw.coSolverGroups(this.handle)}containsPoint(e){let t=B.intoRaw(e),n=this.colliderSet.raw.coContainsPoint(this.handle,t);return t.free(),n}projectPoint(e,t){let n=B.intoRaw(e),r=qt.fromRaw(this.colliderSet.raw.coProjectPoint(this.handle,n,t));return n.free(),r}intersectsRay(e,t){let n=B.intoRaw(e.origin),r=B.intoRaw(e.dir),i=this.colliderSet.raw.coIntersectsRay(this.handle,n,r,t);return n.free(),r.free(),i}castShape(e,t,n,r,i,a,o,s){let c=B.intoRaw(e),l=B.intoRaw(n),u=V.intoRaw(r),d=B.intoRaw(i),f=t.intoRaw(),p=Yt.fromRaw(this.colliderSet,this.colliderSet.raw.coCastShape(this.handle,c,f,l,u,d,a,o,s));return c.free(),l.free(),u.free(),d.free(),f.free(),p}castCollider(e,t,n,r,i,a){let o=B.intoRaw(e),s=B.intoRaw(n),c=Xt.fromRaw(this.colliderSet,this.colliderSet.raw.coCastCollider(this.handle,o,t.handle,s,r,i,a));return o.free(),s.free(),c}intersectsShape(e,t,n){let r=B.intoRaw(t),i=V.intoRaw(n),a=e.intoRaw(),o=this.colliderSet.raw.coIntersectsShape(this.handle,a,r,i);return r.free(),i.free(),a.free(),o}contactShape(e,t,n,r){let i=B.intoRaw(t),a=V.intoRaw(n),o=e.intoRaw(),s=en.fromRaw(this.colliderSet.raw.coContactShape(this.handle,o,i,a,r));return i.free(),a.free(),o.free(),s}contactCollider(e,t){return en.fromRaw(this.colliderSet.raw.coContactCollider(this.handle,e.handle,t))}castRay(e,t,n){let r=B.intoRaw(e.origin),i=B.intoRaw(e.dir),a=this.colliderSet.raw.coCastRay(this.handle,r,i,t,n);return r.free(),i.free(),a}castRayAndGetNormal(e,t,n){let r=B.intoRaw(e.origin),i=B.intoRaw(e.dir),a=Wt.fromRaw(this.colliderSet.raw.coCastRayAndGetNormal(this.handle,r,i,t,n));return r.free(),i.free(),a}};(function(e){e[e.Density=0]=`Density`,e[e.Mass=1]=`Mass`,e[e.MassProps=2]=`MassProps`})(q||={});var Mn=class e{constructor(e){this.enabled=!0,this.shape=e,this.massPropsMode=q.Density,this.density=1,this.friction=.5,this.restitution=0,this.rotation=V.identity(),this.translation=B.zeros(),this.isSensor=!1,this.collisionGroups=4294967295,this.solverGroups=4294967295,this.frictionCombineRule=W.Average,this.restitutionCombineRule=W.Average,this.activeCollisionTypes=yt.DEFAULT,this.activeEvents=ht.NONE,this.activeHooks=gt.NONE,this.mass=0,this.centerOfMass=B.zeros(),this.contactForceEventThreshold=0,this.contactSkin=0,this.principalAngularInertia=B.zeros(),this.angularInertiaLocalFrame=V.identity()}static ball(t){return new e(new tn(t))}static capsule(t,n){return new e(new on(t,n))}static segment(t,n){return new e(new sn(t,n))}static triangle(t,n,r){return new e(new cn(t,n,r))}static roundTriangle(t,n,r,i){return new e(new ln(t,n,r,i))}static polyline(t,n){return new e(new un(t,n))}static voxels(t,n){return new e(new dn(t,n))}static trimesh(t,n,r){return new e(new fn(t,n,r))}static cuboid(t,n,r){return new e(new rn(t,n,r))}static roundCuboid(t,n,r,i){return new e(new an(t,n,r,i))}static heightfield(t,n,r,i,a){return new e(new hn(t,n,r,i,a))}static cylinder(t,n){return new e(new gn(t,n))}static roundCylinder(t,n,r){return new e(new _n(t,n,r))}static cone(t,n){return new e(new vn(t,n))}static roundCone(t,n,r){return new e(new yn(t,n,r))}static convexHull(t){return new e(new pn(t,null))}static convexMesh(t,n){return new e(new pn(t,n))}static roundConvexHull(t,n){return new e(new mn(t,null,n))}static roundConvexMesh(t,n,r){return new e(new mn(t,n,r))}setTranslation(e,t,n){if(typeof e!=`number`||typeof t!=`number`||typeof n!=`number`)throw TypeError(`The translation components must be numbers.`);return this.translation={x:e,y:t,z:n},this}setRotation(e){return V.copy(this.rotation,e),this}setSensor(e){return this.isSensor=e,this}setEnabled(e){return this.enabled=e,this}setContactSkin(e){return this.contactSkin=e,this}setDensity(e){return this.massPropsMode=q.Density,this.density=e,this}setMass(e){return this.massPropsMode=q.Mass,this.mass=e,this}setMassProperties(e,t,n,r){return this.massPropsMode=q.MassProps,this.mass=e,B.copy(this.centerOfMass,t),B.copy(this.principalAngularInertia,n),V.copy(this.angularInertiaLocalFrame,r),this}setRestitution(e){return this.restitution=e,this}setFriction(e){return this.friction=e,this}setFrictionCombineRule(e){return this.frictionCombineRule=e,this}setRestitutionCombineRule(e){return this.restitutionCombineRule=e,this}setCollisionGroups(e){return this.collisionGroups=e,this}setSolverGroups(e){return this.solverGroups=e,this}setActiveHooks(e){return this.activeHooks=e,this}setActiveEvents(e){return this.activeEvents=e,this}setActiveCollisionTypes(e){return this.activeCollisionTypes=e,this}setContactForceEventThreshold(e){return this.contactForceEventThreshold=e,this}},Nn=class{constructor(e){this.raw=e||new k,this.map=new St,e&&e.forEachColliderHandle((e=>{this.map.set(e,new jn(this,e,null))}))}free(){this.raw&&this.raw.free(),this.raw=void 0,this.map&&this.map.clear(),this.map=void 0}castClosure(e){return t=>e?e(this.get(t)):void 0}finalizeDeserialization(e){this.map.forEach((t=>t.finalizeDeserialization(e)))}createCollider(e,t,n){let r=n!=null&&n!=null;if(r&&isNaN(n))throw Error(`Cannot create a collider with a parent rigid-body handle that is not a number.`);let i=t.shape.intoRaw(),a=B.intoRaw(t.translation),o=V.intoRaw(t.rotation),s=B.intoRaw(t.centerOfMass),c=B.intoRaw(t.principalAngularInertia),l=V.intoRaw(t.angularInertiaLocalFrame),u=this.raw.createCollider(t.enabled,i,a,o,t.massPropsMode,t.mass,s,c,l,t.density,t.friction,t.restitution,t.frictionCombineRule,t.restitutionCombineRule,t.isSensor,t.collisionGroups,t.solverGroups,t.activeCollisionTypes,t.activeHooks,t.activeEvents,t.contactForceEventThreshold,t.contactSkin,r,r?n:0,e.raw);i.free(),a.free(),o.free(),s.free(),c.free(),l.free();let d=r?e.get(n):null,f=new jn(this,u,d,t.shape);return this.map.set(u,f),f}remove(e,t,n,r){this.raw.remove(e,t.raw,n.raw,r),this.unmap(e)}unmap(e){this.map.delete(e)}get(e){return this.map.get(e)}len(){return this.map.len()}contains(e){return this.get(e)!=null}forEach(e){this.map.forEach(e)}getAll(){return this.map.getAll()}};function Pn(e,t,n,r){return new(n||=Promise)((function(i,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}c((r=r.apply(e,t||[])).next())}))}for(var Fn={byteLength:function(e){var t=zn(e),n=t[0],r=t[1];return 3*(n+r)/4-r},toByteArray:function(e){var t,n,r=zn(e),i=r[0],a=r[1],o=new In(function(e,t,n){return 3*(t+n)/4-n}(0,i,a)),s=0,c=a>0?i-4:i;for(n=0;n>16&255,o[s++]=t>>8&255,o[s++]=255&t;return a===2&&(t=Q[e.charCodeAt(n)]<<2|Q[e.charCodeAt(n+1)]>>4,o[s++]=255&t),a===1&&(t=Q[e.charCodeAt(n)]<<10|Q[e.charCodeAt(n+1)]<<4|Q[e.charCodeAt(n+2)]>>2,o[s++]=t>>8&255,o[s++]=255&t),o},fromByteArray:function(e){for(var t,n=e.length,r=n%3,i=[],a=16383,o=0,s=n-r;os?s:o+a));return r===1?(t=e[n-1],i.push(Z[t>>2]+Z[t<<4&63]+`==`)):r===2&&(t=(e[n-2]<<8)+e[n-1],i.push(Z[t>>10]+Z[t>>4&63]+Z[t<<2&63]+`=`)),i.join(``)}},Z=[],Q=[],In=typeof Uint8Array<`u`?Uint8Array:Array,Ln=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,$=0,Rn=Ln.length;$0)throw Error(`Invalid string. Length must be a multiple of 4`);var n=e.indexOf(`=`);return n===-1&&(n=t),[n,n===t?0:4-n%4]}function Bn(e,t,n){for(var r,i,a=[],o=t;o>18&63]+Z[i>>12&63]+Z[i>>6&63]+Z[63&i]);return a.join(``)}function Vn(){return Pn(this,void 0,void 0,(function*(){yield at(Fn.toByteArray(`AGFzbQEAAAAB6QykAWACf38AYAN/f38AYAR/f39/AGACf38Bf2ABfwF/YAN/f38Bf2ABfwBgBX9/f39/AGACf3wBf2AGf39/f31/AGAGf39/f39/AGABfwF9YAV/f399fwBgA39/fQBgBX9/f399AGADf3x/AGABfwF8YAR/f39/AX9gDH9/f39/f39/f399fwF/YAZ/f39/f30AYAR/f399AX9gAAF/YAR/f39/AX1gA39/fwF9YAN/f30Bf2ACf38BfGADf39/AX5gAn99AGAGf39/f39/AX9gAn98AX1gA398fQBgBH98f38AYAV/f39/fwF/YAd/f39/f39/AGACf3wBfGAIf39/f39/f38AYAF9AX1gAn9/AX1gAABgCX9/f39/f39/fwBgBH9+f38Bf2AIf39/f39/f30AYAR/f399AGADf398AGALf39/f39/f399fX8AYAh/f39/fX9/fwBgCX9/f39/fX9/fwBgBX9/fX9/AGAGf3x/f39/AGADf3x/AX9gA398fwF9YAN9fX0Bf2AGf31/f399AGAJf39/f39/fX9/AX9gBX98f39/AGAGf3x9fX19AGAFf3x9fX0AYAN/fX8AYAJ9fQF/YAF8AX9gBH99f38AYAt/f39/f39/f31/fwBgCn9/f39/f31/f38AYAZ/f319f38AYAt/f39/f39/fX9/fwBgCH9/f399fX9/AGAGf319f399AGAMf39/f31/f39/fX9/AGAPf39/f39/f39/fH98f3x/AGAPf39/f39/fX9/fH98f3x/AX9gBn9/f399fQBgBn99f3x/fwF/YAZ/fX98f38AYAV/fX1/fwBgAn5/AX9gBn9/fX9/fwBgBX9/fHx/AXxgA398fAF/YAR/fH1/AGAFf3x/fX0AYAF9AX9gAn98AGAEfX19fQF/YA5/f39/f39/f39/f39/fwBgB39/f39/f30AYA9/f39/f39/f39/f399fX8AYAt/f399f399f319fwBgCX99f39/f39/fwF/YAd/f39/f39/AX1gCn9/f39/f399fX8AYAt/f39/f39/f319fwF/YBJ/f39/f39/f39/f399f319fX0AYAd/f39/f399AX9gD39/f39/f39/f39/f39/fwBgCn9/f39/f39/f38Bf2ASf39/f39/f399fX9/fH98f3x/AX9gC39/f39/f39/f39/AGAJf39/f39/fX9/AGAGf3x/f399AX9gG39/f399fX9/f39/f39/f39/f319f39/fX9/fwF8YBB/f39/f399f39/fH98f3x/AGAIf31/f39/f38AYBt/f39/f39/fX9/f319fX9/f39/f39/fX1/fH8AYAx/f39/f39/f39/f38AYAp/fX9/f39/f39/AGAMf39/f31/f39/f39/AGAHf39/f399fwF/YAp/fH9/f39/fX1/AX9gDX9/f39/f398f3x/fH8AYAt/f39/fX9/f39/fwBgCH9/f39/fX9/AGAJf39/f39/f39/AX1gBn99f39/fwBgBH9/fX8AYA1/f39/f39/fH98f3x/AX9gB39/f39/fX8BfWAMf39/f39/fH98f3x/AX9gBn9/f39/fQF/YAZ/f39/fX0Bf2AIf31/fX99f38AYA1/fX9/f398f398f3x/AGASf39/f39/f39/f39/f39/f39/AGAGf3x/f31/AX9gBX98f39/AX9gCX99f39/f398fwBgCH98f3x/fX1/AX9gCn9/f39/f39/f38AYAd/fH1/f39/AGAGf3x/f31/AX1gAn9+AX9gBn98fX9/fwBgBX98f399AX9gDX9/f39/f399fX19fX0AYAR/fH9/AX9gBX19fX9/AX9gA31/fwF/YAl/f39/f39+fn4AYAR/fHx9AX9gB39/f39/f38Bf2ANf39/f39/f39/f39/fwBgA398fwF8YAZ/fH99fX0AYAd/fH99fX19AGACf34AYAh/f39/f39/fwF/YAd/fH19fX1/AGAJf3x8f39/f39/AGAFf39/f30Bf2AGf3x9fX1/AGAGf3x8f39/AGAEf39+fwBgA39/fgF/YAV/fn9+fwBgA39+fgBgBH19fX8Bf2ADf399AX1gAn19AGAEf319fwBgBn9/fX19fQBgA319fwF/YAV/f3x/fwBgBX9/fn9/AGAEf35/fwBgAn19AX0CqwkgA3diZxVfX3diaW5kZ2VuX251bWJlcl9uZXcAOwN3YmcWX193YmluZGdlbl9ib29sZWFuX2dldAAEA3diZxpfX3diaW5kZ2VuX29iamVjdF9kcm9wX3JlZgAGA3diZxVfX3diaW5kZ2VuX251bWJlcl9nZXQAAAN3YmcWX193YmluZGdlbl9pc19mdW5jdGlvbgAEA3diZyRfX3diZ19yYXdyYXljb2xsaWRlcmludGVyc2VjdGlvbl9uZXcABAN3YmceX193YmdfcmF3Y29udGFjdGZvcmNlZXZlbnRfbmV3AAQDd2JnIl9fd2JnX3BlcmZvcm1hbmNlXzdhM2ZmZDBiMTdmNjYzYWQABAN3YmcXX193YmluZGdlbl9pc191bmRlZmluZWQABAN3YmcaX193Ymdfbm93XzJjOTVjOWRlMDEyOTMxNzMAEAN3YmcbX193YmluZGdlbl9vYmplY3RfY2xvbmVfcmVmAAQDd2JnIF9fd2JnX25ld25vYXJnc18xMDVlZDQ3MTQ3NWFhZjUwAAMDd2JnG19fd2JnX2NhbGxfNjcyYTRkMjE2MzRkNGEyNAADA3diZxtfX3diZ19jYWxsXzdjY2NkZDY5ZTA3OTFhZTIABQN3YmcbX193YmdfY2FsbF84MzNiZWQ1NzcwZWEyMDQxABEDd2JnG19fd2JnX2NhbGxfYjhhZGM4YjFkMGEwZDhlYgAgA3diZxtfX3diZ19iaW5kX2M4MzU5YjFjYmEwNTgxNjgAEQN3YmcdX193YmdfYnVmZmVyXzYwOWNjM2VlZTUxZWQxNTgABAN3YmcyX193Ymdfc3RhdGljX2FjY2Vzc29yX0dMT0JBTF9USElTXzU2NTc4YmU3ZTlmODMyYjAAFQN3YmcrX193Ymdfc3RhdGljX2FjY2Vzc29yX1NFTEZfMzdjNWQ0MThlNGJmNTgxOQAVA3diZy1fX3diZ19zdGF0aWNfYWNjZXNzb3JfV0lORE9XXzVkZTM3MDQzYTkxYTljNDAAFQN3YmctX193Ymdfc3RhdGljX2FjY2Vzc29yX0dMT0JBTF84OGE5MDJkMTNhNTU3ZDA3ABUDd2JnMV9fd2JnX25ld3dpdGhieXRlb2Zmc2V0YW5kbGVuZ3RoX2Q5N2U2MzdlYmUxNDVhOWEABQN3YmcaX193YmdfbmV3X2ExMjAwMmE3ZjkxYzc1YmUABAN3YmcaX193Ymdfc2V0XzY1NTk1YmRkODY4YjMwMDkAAQN3YmcdX193YmdfbGVuZ3RoX2E0NDYxOTNkYzIyYzEyZjgABAN3YmcxX193YmdfbmV3d2l0aGJ5dGVvZmZzZXRhbmRsZW5ndGhfZTZiN2U2OWFjZDRjNzM1NAAFA3diZxpfX3di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BgYGBgYAAAYGBgYCBwYAAA0BAgMDGBgYGBgYGBgYGBgYGBgYACYmBgMmAwoKCgoKAAufAQEEBgMGCwYGBgYGBgYDFQMBAAAAAwMDAAMDAwMDAwMLCwQDHAcgoAGhAS8GAgADAwUDDQYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEQYGBgYGAgANAAAAAAAAAREBAQEBAQEBAQEKCgoKCgoKCgoKCg0BAwcAAAAAAAADAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAADAwADAQcHBwcLAQEBBgMEAwMDAwMDACYmAwEBAQENCwMDAwADAwMDAwMAAQQHowEGCwsLJCQkAwQLBAQLAwUECwQEBAQEBAQLBAQLBAQEBAQEBAc0AAYEBwFwAfgI+AgFAwEAEgYJAX8BQYCAwAALB4yeAZoEBm1lbW9yeQIAB3ZlcnNpb24A1wwqX193YmdfcmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9mcmVlALsII3Jhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfbmV3AMwHJXJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfc2V0VXAA9AUxcmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9ub3JtYWxOdWRnZUZhY3RvcgDoCzRyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX3NldE5vcm1hbE51ZGdlRmFjdG9yAJQMJnJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfb2Zmc2V0AOkLKXJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfc2V0T2Zmc2V0AOoLLHJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfc2xpZGVFbmFibGVkAOsLL3Jhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfc2V0U2xpZGVFbmFibGVkAI4MMXJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfYXV0b3N0ZXBNYXhIZWlnaHQArAswcmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9hdXRvc3RlcE1pbldpZHRoAK0LPXJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfYXV0b3N0ZXBJbmNsdWRlc0R5bmFtaWNCb2RpZXMAngsvcmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9hdXRvc3RlcEVuYWJsZWQA2wsucmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9lbmFibGVBdXRvc3RlcACLCy9yYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX2Rpc2FibGVBdXRvc3RlcACVDDJyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX21heFNsb3BlQ2xpbWJBbmdsZQDsCzVyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX3NldE1heFNsb3BlQ2xpbWJBbmdsZQCWDDJyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX21pblNsb3BlU2xpZGVBbmdsZQDtCzVyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX3NldE1pblNsb3BlU2xpZGVBbmdsZQCXDDRyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX3NuYXBUb0dyb3VuZERpc3RhbmNlAK4LMnJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfZW5hYmxlU25hcFRvR3JvdW5kAO4LM3Jhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfZGlzYWJsZVNuYXBUb0dyb3VuZACYDDNyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX3NuYXBUb0dyb3VuZEVuYWJsZWQA3As3cmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9jb21wdXRlQ29sbGlkZXJNb3ZlbWVudADIAjByYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX2NvbXB1dGVkTW92ZW1lbnQA1AgwcmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9jb21wdXRlZEdyb3VuZGVkAO8LNXJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfbnVtQ29tcHV0ZWRDb2xsaXNpb25zAPALMXJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfY29tcHV0ZWRDb2xsaXNpb24A1wYgX193YmdfcmF3Y2hhcmFjdGVyY29sbGlzaW9uX2ZyZWUArAkZcmF3Y2hhcmFjdGVyY29sbGlzaW9uX25ldwDwChxyYXdjaGFyYWN0ZXJjb2xsaXNpb25faGFuZGxlAPELLXJhd2NoYXJhY3RlcmNvbGxpc2lvbl90cmFuc2xhdGlvbkRlbHRhQXBwbGllZADVCC9yYXdjaGFyYWN0ZXJjb2xsaXNpb25fdHJhbnNsYXRpb25EZWx0YVJlbWFpbmluZwDWCBlyYXdjaGFyYWN0ZXJjb2xsaXNpb25fdG9pAPILI3Jhd2NoYXJhY3RlcmNvbGxpc2lvbl93b3JsZFdpdG5lc3MxANcII3Jhd2NoYXJhY3RlcmNvbGxpc2lvbl93b3JsZFdpdG5lc3MyANMFInJhd2NoYXJhY3RlcmNvbGxpc2lvbl93b3JsZE5vcm1hbDEA2AgicmF3Y2hhcmFjdGVyY29sbGlzaW9uX3dvcmxkTm9ybWFsMgCOBhtfX3diZ19yYXdwaWRjb250cm9sbGVyX2ZyZWUArQkUcmF3cGlkY29udHJvbGxlcl9uZXcA1AoXcmF3cGlkY29udHJvbGxlcl9zZXRfa3AApAgXcmF3cGlkY29udHJvbGxlcl9zZXRfa2kApQgXcmF3cGlkY29udHJvbGxlcl9zZXRfa2QApggecmF3cGlkY29udHJvbGxlcl9zZXRfYXhlc19tYXNrALgLIHJhd3BpZGNvbnRyb2xsZXJfcmVzZXRfaW50ZWdyYWxzAO4JKHJhd3BpZGNvbnRyb2xsZXJfYXBwbHlfbGluZWFyX2NvcnJlY3Rpb24AsAMpcmF3cGlkY29udHJvbGxlcl9hcHBseV9hbmd1bGFyX2NvcnJlY3Rpb24AsQMicmF3cGlkY29udHJvbGxlcl9saW5lYXJfY29ycmVjdGlvbgCJAyNyYXdwaWRjb250cm9sbGVyX2FuZ3VsYXJfY29ycmVjdGlvbgCKAy1fX3diZ19yYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX2ZyZWUA7AYmcmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl9uZXcAjAs4cmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl9jdXJyZW50X3ZlaGljbGVfc3BlZWQA8wsqcmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl9jaGFzc2lzAPQLMHJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfaW5kZXhfdXBfYXhpcwD1CzRyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3NldF9pbmRleF91cF9heGlzAJkMNXJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfaW5kZXhfZm9yd2FyZF9heGlzAPYLOXJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfc2V0X2luZGV4X2ZvcndhcmRfYXhpcwCaDCxyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX2FkZF93aGVlbADWAy1yYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX251bV93aGVlbHMA9wsxcmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl91cGRhdGVfdmVoaWNsZQCNA0RyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3doZWVsX2NoYXNzaXNfY29ubmVjdGlvbl9wb2ludF9jcwD5BkhyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3NldF93aGVlbF9jaGFzc2lzX2Nvbm5lY3Rpb25fcG9pbnRfY3MA1QU/cmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl93aGVlbF9zdXNwZW5zaW9uX3Jlc3RfbGVuZ3RoAL8KQ3Jhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfc2V0X3doZWVsX3N1c3BlbnNpb25fcmVzdF9sZW5ndGgAiQk+cmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl93aGVlbF9tYXhfc3VzcGVuc2lvbl90cmF2ZWwAwApCcmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl9zZXRfd2hlZWxfbWF4X3N1c3BlbnNpb25fdHJhdmVsAIoJL3Jhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfd2hlZWxfcmFkaXVzAMEKM3Jhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfc2V0X3doZWVsX3JhZGl1cwCLCT1yYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3doZWVsX3N1c3BlbnNpb25fc3RpZmZuZXNzAMIKQXJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfc2V0X3doZWVsX3N1c3BlbnNpb25fc3RpZmZuZXNzAIwJP3Jhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfd2hlZWxfc3VzcGVuc2lvbl9jb21wcmVzc2lvbgDDCkNyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3NldF93aGVlbF9zdXNwZW5zaW9uX2NvbXByZXNzaW9uAI0JPnJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfd2hlZWxfc3VzcGVuc2lvbl9yZWxheGF0aW9uAMQKQnJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfc2V0X3doZWVsX3N1c3BlbnNpb25fcmVsYXhhdGlvbgCOCT1yYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3doZWVsX21heF9zdXNwZW5zaW9uX2ZvcmNlAMUKQXJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfc2V0X3doZWVsX21heF9zdXNwZW5zaW9uX2ZvcmNlAI8JLnJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfd2hlZWxfYnJha2UAxgoycmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl9zZXRfd2hlZWxfYnJha2UAkAkxcmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl93aGVlbF9zdGVlcmluZwDHCjVyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3NldF93aGVlbF9zdGVlcmluZwCRCTVyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3doZWVsX2VuZ2luZV9mb3JjZQDICjlyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3NldF93aGVlbF9lbmdpbmVfZm9yY2UAkgk1cmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl93aGVlbF9kaXJlY3Rpb25fY3MA+gY5cmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl9zZXRfd2hlZWxfZGlyZWN0aW9uX2NzANYFMHJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfd2hlZWxfYXhsZV9jcwD7BjRyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3NldF93aGVlbF9heGxlX2NzANcFNnJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfd2hlZWxfZnJpY3Rpb25fc2xpcADJCjpyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3NldF93aGVlbF9mcmljdGlvbl9zbGlwAJMJQHJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfd2hlZWxfc2lkZV9mcmljdGlvbl9zdGlmZm5lc3MAygpEcmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl9zZXRfd2hlZWxfc2lkZV9mcmljdGlvbl9zdGlmZm5lc3MAlAkxcmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl93aGVlbF9yb3RhdGlvbgDLCjhyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3doZWVsX2ZvcndhcmRfaW1wdWxzZQDMCjVyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3doZWVsX3NpZGVfaW1wdWxzZQDNCjlyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3doZWVsX3N1c3BlbnNpb25fZm9yY2UAzgo6cmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl93aGVlbF9jb250YWN0X25vcm1hbF93cwD8BjlyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3doZWVsX2NvbnRhY3RfcG9pbnRfd3MA/QY6cmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl93aGVlbF9zdXNwZW5zaW9uX2xlbmd0aADPCjZyYXdkeW5hbWljcmF5Y2FzdHZlaGljbGVjb250cm9sbGVyX3doZWVsX2hhcmRfcG9pbnRfd3MA/gY2cmF3ZHluYW1pY3JheWNhc3R2ZWhpY2xlY29udHJvbGxlcl93aGVlbF9pc19pbl9jb250YWN0ANUKNnJhd2R5bmFtaWNyYXljYXN0dmVoaWNsZWNvbnRyb2xsZXJfd2hlZWxfZ3JvdW5kX29iamVjdACnCRdfX3diZ19yYXdjY2Rzb2x2ZXJfZnJlZQCuCRxyYXdpbXB1bHNlam9pbnRzZXRfam9pbnRUeXBlAIcHI3Jhd2ltcHVsc2Vqb2ludHNldF9qb2ludEJvZHlIYW5kbGUxAOEHI3Jhd2ltcHVsc2Vqb2ludHNldF9qb2ludEJvZHlIYW5kbGUyAOIHH3Jhd2ltcHVsc2Vqb2ludHNldF9qb2ludEZyYW1lWDEAjwYfcmF3aW1wdWxzZWpvaW50c2V0X2pvaW50RnJhbWVYMgCQBh9yYXdpbXB1bHNlam9pbnRzZXRfam9pbnRBbmNob3IxAJEGH3Jhd2ltcHVsc2Vqb2ludHNldF9qb2ludEFuY2hvcjIAkgYicmF3aW1wdWxzZWpvaW50c2V0X2pvaW50U2V0QW5jaG9yMQDbBSJyYXdpbXB1bHNlam9pbnRzZXRfam9pbnRTZXRBbmNob3IyANwFJ3Jhd2ltcHVsc2Vqb2ludHNldF9qb2ludENvbnRhY3RzRW5hYmxlZADjBypyYXdpbXB1bHNlam9pbnRzZXRfam9pbnRTZXRDb250YWN0c0VuYWJsZWQAvAglcmF3aW1wdWxzZWpvaW50c2V0X2pvaW50TGltaXRzRW5hYmxlZACAByFyYXdpbXB1bHNlam9pbnRzZXRfam9pbnRMaW1pdHNNaW4AowchcmF3aW1wdWxzZWpvaW50c2V0X2pvaW50TGltaXRzTWF4AKQHIXJhd2ltcHVsc2Vqb2ludHNldF9qb2ludFNldExpbWl0cwCzBytyYXdpbXB1bHNlam9pbnRzZXRfam9pbnRDb25maWd1cmVNb3Rvck1vZGVsAIQHLnJhd2ltcHVsc2Vqb2ludHNldF9qb2ludENvbmZpZ3VyZU1vdG9yVmVsb2NpdHkAxgcucmF3aW1wdWxzZWpvaW50c2V0X2pvaW50Q29uZmlndXJlTW90b3JQb3NpdGlvbgDHByZyYXdpbXB1bHNlam9pbnRzZXRfam9pbnRDb25maWd1cmVNb3RvcgDIBx1fX3diZ19yYXdpbXB1bHNlam9pbnRzZXRfZnJlZQDNBxZyYXdpbXB1bHNlam9pbnRzZXRfbmV3ANYKHnJhd2ltcHVsc2Vqb2ludHNldF9jcmVhdGVKb2ludADGBhlyYXdpbXB1bHNlam9pbnRzZXRfcmVtb3ZlAJkJFnJhd2ltcHVsc2Vqb2ludHNldF9sZW4A9QsbcmF3aW1wdWxzZWpvaW50c2V0X2NvbnRhaW5zANkIJXJhd2ltcHVsc2Vqb2ludHNldF9mb3JFYWNoSm9pbnRIYW5kbGUAkwYycmF3aW1wdWxzZWpvaW50c2V0X2ZvckVhY2hKb2ludEF0dGFjaGVkVG9SaWdpZEJvZHkAmgkjX193YmdfcmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX2ZyZWUArwkccmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX25ldwCfCxtyYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfZHQA+AskcmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX2NvbnRhY3RfZXJwAN8KNXJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19ub3JtYWxpemVkQWxsb3dlZExpbmVhckVycm9yAPkLNXJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19ub3JtYWxpemVkUHJlZGljdGlvbkRpc3RhbmNlAPoLLHJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19udW1Tb2x2ZXJJdGVyYXRpb25zAPsLJnJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19taW5Jc2xhbmRTaXplAPwLJ3Jhd2ludGVncmF0aW9ucGFyYW1ldGVyc19tYXhDY2RTdWJzdGVwcwD9Cx9yYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfc2V0X2R0AJsMNnJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19zZXRfY29udGFjdF9uYXR1cmFsX2ZyZXF1ZW5jeQCcDDlyYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfc2V0X25vcm1hbGl6ZWRBbGxvd2VkTGluZWFyRXJyb3IAnQw5cmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX3NldF9ub3JtYWxpemVkUHJlZGljdGlvbkRpc3RhbmNlAJ4MMHJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19zZXRfbnVtU29sdmVySXRlcmF0aW9ucwCfDCpyYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfc2V0X21pbklzbGFuZFNpemUAoAwrcmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX3NldF9tYXhDY2RTdWJzdGVwcwChDCdyYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfc2V0X2xlbmd0aFVuaXQAogwbX193YmdfcmF3aXNsYW5kbWFuYWdlcl9mcmVlAKoGFHJhd2lzbGFuZG1hbmFnZXJfbmV3ALkLLXJhd2lzbGFuZG1hbmFnZXJfZm9yRWFjaEFjdGl2ZVJpZ2lkQm9keUhhbmRsZQCmBhpfX3diZ19yYXdnZW5lcmljam9pbnRfZnJlZQCwCRdyYXdnZW5lcmljam9pbnRfZ2VuZXJpYwDOAhZyYXdnZW5lcmljam9pbnRfc3ByaW5nALYEFHJhd2dlbmVyaWNqb2ludF9yb3BlAMEEGXJhd2dlbmVyaWNqb2ludF9zcGhlcmljYWwAxQQZcmF3Z2VuZXJpY2pvaW50X3ByaXNtYXRpYwDCAhVyYXdnZW5lcmljam9pbnRfZml4ZWQAqgIYcmF3Z2VuZXJpY2pvaW50X3Jldm9sdXRlANwCHnJhd211bHRpYm9keWpvaW50c2V0X2pvaW50VHlwZQDBBiFyYXdtdWx0aWJvZHlqb2ludHNldF9qb2ludEZyYW1lWDEAxgUhcmF3bXVsdGlib2R5am9pbnRzZXRfam9pbnRGcmFtZVgyAMcFIXJhd211bHRpYm9keWpvaW50c2V0X2pvaW50QW5jaG9yMQDIBSFyYXdtdWx0aWJvZHlqb2ludHNldF9qb2ludEFuY2hvcjIAyQUpcmF3bXVsdGlib2R5am9pbnRzZXRfam9pbnRDb250YWN0c0VuYWJsZWQA8wYscmF3bXVsdGlib2R5am9pbnRzZXRfam9pbnRTZXRDb250YWN0c0VuYWJsZWQAnAcncmF3bXVsdGlib2R5am9pbnRzZXRfam9pbnRMaW1pdHNFbmFibGVkALcGI3Jhd211bHRpYm9keWpvaW50c2V0X2pvaW50TGltaXRzTWluANEGI3Jhd211bHRpYm9keWpvaW50c2V0X2pvaW50TGltaXRzTWF4ANIGH19fd2JnX3Jhd211bHRpYm9keWpvaW50c2V0X2ZyZWUAzgcYcmF3bXVsdGlib2R5am9pbnRzZXRfbmV3ANcKIHJhd211bHRpYm9keWpvaW50c2V0X2NyZWF0ZUpvaW50AMcGG3Jhd211bHRpYm9keWpvaW50c2V0X3JlbW92ZQCiCR1yYXdtdWx0aWJvZHlqb2ludHNldF9jb250YWlucwCtCCdyYXdtdWx0aWJvZHlqb2ludHNldF9mb3JFYWNoSm9pbnRIYW5kbGUAngk0cmF3bXVsdGlib2R5am9pbnRzZXRfZm9yRWFjaEpvaW50QXR0YWNoZWRUb1JpZ2lkQm9keQCbCR1yYXdyaWdpZGJvZHlzZXRfcmJUcmFuc2xhdGlvbgCUBhpyYXdyaWdpZGJvZHlzZXRfcmJSb3RhdGlvbgCVBhdyYXdyaWdpZGJvZHlzZXRfcmJTbGVlcACFCRxyYXdyaWdpZGJvZHlzZXRfcmJJc1NsZWVwaW5nAPUHGnJhd3JpZ2lkYm9keXNldF9yYklzTW92aW5nAJ4IIXJhd3JpZ2lkYm9keXNldF9yYk5leHRUcmFuc2xhdGlvbgCWBh5yYXdyaWdpZGJvZHlzZXRfcmJOZXh0Um90YXRpb24AlwYgcmF3cmlnaWRib2R5c2V0X3JiU2V0VHJhbnNsYXRpb24AwgkdcmF3cmlnaWRib2R5c2V0X3JiU2V0Um90YXRpb24AvAkbcmF3cmlnaWRib2R5c2V0X3JiU2V0TGludmVsAIYGG3Jhd3JpZ2lkYm9keXNldF9yYlNldEFuZ3ZlbACHBi1yYXdyaWdpZGJvZHlzZXRfcmJTZXROZXh0S2luZW1hdGljVHJhbnNsYXRpb24A9gcqcmF3cmlnaWRib2R5c2V0X3JiU2V0TmV4dEtpbmVtYXRpY1JvdGF0aW9uALIGNnJhd3JpZ2lkYm9keXNldF9yYlJlY29tcHV0ZU1hc3NQcm9wZXJ0aWVzRnJvbUNvbGxpZGVycwClBiNyYXdyaWdpZGJvZHlzZXRfcmJTZXRBZGRpdGlvbmFsTWFzcwD3By1yYXdyaWdpZGJvZHlzZXRfcmJTZXRBZGRpdGlvbmFsTWFzc1Byb3BlcnRpZXMAtQMYcmF3cmlnaWRib2R5c2V0X3JiTGludmVsAJgGGHJhd3JpZ2lkYm9keXNldF9yYkFuZ3ZlbACZBiFyYXdyaWdpZGJvZHlzZXRfcmJWZWxvY2l0eUF0UG9pbnQAyAQicmF3cmlnaWRib2R5c2V0X3JiTG9ja1RyYW5zbGF0aW9ucwDEBihyYXdyaWdpZGJvZHlzZXRfcmJTZXRFbmFibGVkVHJhbnNsYXRpb25zAMoFH3Jhd3JpZ2lkYm9keXNldF9yYkxvY2tSb3RhdGlvbnMAxQYlcmF3cmlnaWRib2R5c2V0X3JiU2V0RW5hYmxlZFJvdGF0aW9ucwDLBSByYXdyaWdpZGJvZHlzZXRfcmJEb21pbmFuY2VHcm91cAD4ByNyYXdyaWdpZGJvZHlzZXRfcmJTZXREb21pbmFuY2VHcm91cADYBxtyYXdyaWdpZGJvZHlzZXRfcmJFbmFibGVDY2QA2ggmcmF3cmlnaWRib2R5c2V0X3JiU2V0U29mdENjZFByZWRpY3Rpb24A9QgWcmF3cmlnaWRib2R5c2V0X3JiTWFzcwDDBxlyYXdyaWdpZGJvZHlzZXRfcmJJbnZNYXNzAPkHInJhd3JpZ2lkYm9keXNldF9yYkVmZmVjdGl2ZUludk1hc3MAmgYacmF3cmlnaWRib2R5c2V0X3JiTG9jYWxDb20AmwYacmF3cmlnaWRib2R5c2V0X3JiV29ybGRDb20AnAYlcmF3cmlnaWRib2R5c2V0X3JiSW52UHJpbmNpcGFsSW5lcnRpYQCdBixyYXdyaWdpZGJvZHlzZXRfcmJQcmluY2lwYWxJbmVydGlhTG9jYWxGcmFtZQCeBiJyYXdyaWdpZGJvZHlzZXRfcmJQcmluY2lwYWxJbmVydGlhAM0GKnJhd3JpZ2lkYm9keXNldF9yYkVmZmVjdGl2ZVdvcmxkSW52SW5lcnRpYQDMBSlyYXdyaWdpZGJvZHlzZXRfcmJFZmZlY3RpdmVBbmd1bGFySW5lcnRpYQCuBhhyYXdyaWdpZGJvZHlzZXRfcmJXYWtlVXAA0wcecmF3cmlnaWRib2R5c2V0X3JiSXNDY2RFbmFibGVkAPoHI3Jhd3JpZ2lkYm9keXNldF9yYlNvZnRDY2RQcmVkaWN0aW9uAPsHHnJhd3JpZ2lkYm9keXNldF9yYk51bUNvbGxpZGVycwD8BxpyYXdyaWdpZGJvZHlzZXRfcmJDb2xsaWRlcgCIBxpyYXdyaWdpZGJvZHlzZXRfcmJCb2R5VHlwZQD9Bx1yYXdyaWdpZGJvZHlzZXRfcmJTZXRCb2R5VHlwZQDsBxlyYXdyaWdpZGJvZHlzZXRfcmJJc0ZpeGVkANQHHXJhd3JpZ2lkYm9keXNldF9yYklzS2luZW1hdGljANUHG3Jhd3JpZ2lkYm9keXNldF9yYklzRHluYW1pYwDZBx9yYXdyaWdpZGJvZHlzZXRfcmJMaW5lYXJEYW1waW5nAP4HIHJhd3JpZ2lkYm9keXNldF9yYkFuZ3VsYXJEYW1waW5nAP8HInJhd3JpZ2lkYm9keXNldF9yYlNldExpbmVhckRhbXBpbmcA9ggjcmF3cmlnaWRib2R5c2V0X3JiU2V0QW5ndWxhckRhbXBpbmcA9wgccmF3cmlnaWRib2R5c2V0X3JiU2V0RW5hYmxlZADbCBtyYXdyaWdpZGJvZHlzZXRfcmJJc0VuYWJsZWQAgAgecmF3cmlnaWRib2R5c2V0X3JiR3Jhdml0eVNjYWxlAIEIIXJhd3JpZ2lkYm9keXNldF9yYlNldEdyYXZpdHlTY2FsZQClBx1yYXdyaWdpZGJvZHlzZXRfcmJSZXNldEZvcmNlcwDcCB5yYXdyaWdpZGJvZHlzZXRfcmJSZXNldFRvcnF1ZXMA3QgacmF3cmlnaWRib2R5c2V0X3JiQWRkRm9yY2UAiAYecmF3cmlnaWRib2R5c2V0X3JiQXBwbHlJbXB1bHNlAIkGG3Jhd3JpZ2lkYm9keXNldF9yYkFkZFRvcnF1ZQCKBiRyYXdyaWdpZGJvZHlzZXRfcmJBcHBseVRvcnF1ZUltcHVsc2UAiwYhcmF3cmlnaWRib2R5c2V0X3JiQWRkRm9yY2VBdFBvaW50ANEEJXJhd3JpZ2lkYm9keXNldF9yYkFwcGx5SW1wdWxzZUF0UG9pbnQAnQQscmF3cmlnaWRib2R5c2V0X3JiQWRkaXRpb25hbFNvbHZlckl0ZXJhdGlvbnMAgggvcmF3cmlnaWRib2R5c2V0X3JiU2V0QWRkaXRpb25hbFNvbHZlckl0ZXJhdGlvbnMA+AgacmF3cmlnaWRib2R5c2V0X3JiVXNlckRhdGEA7QcdcmF3cmlnaWRib2R5c2V0X3JiU2V0VXNlckRhdGEAzQgbcmF3cmlnaWRib2R5c2V0X3JiVXNlckZvcmNlANMGHHJhd3JpZ2lkYm9keXNldF9yYlVzZXJUb3JxdWUA1AYaX193YmdfcmF3cmlnaWRib2R5c2V0X2ZyZWUA7gcTcmF3cmlnaWRib2R5c2V0X25ldwDiCh9yYXdyaWdpZGJvZHlzZXRfY3JlYXRlUmlnaWRCb2R5AOEBFnJhd3JpZ2lkYm9keXNldF9yZW1vdmUA+gITcmF3cmlnaWRib2R5c2V0X2xlbgD+CxhyYXdyaWdpZGJvZHlzZXRfY29udGFpbnMA+QgmcmF3cmlnaWRib2R5c2V0X2ZvckVhY2hSaWdpZEJvZHlIYW5kbGUAnwk5cmF3cmlnaWRib2R5c2V0X3Byb3BhZ2F0ZU1vZGlmaWVkQm9keVBvc2l0aW9uc1RvQ29sbGlkZXJzAIEHGF9fd2JnX3Jhd2Jyb2FkcGhhc2VfZnJlZQDPBxFyYXdicm9hZHBoYXNlX25ldwCVCRVyYXdicm9hZHBoYXNlX2Nhc3RSYXkAmQIhcmF3YnJvYWRwaGFzZV9jYXN0UmF5QW5kR2V0Tm9ybWFsAIoCInJhd2Jyb2FkcGhhc2VfaW50ZXJzZWN0aW9uc1dpdGhSYXkA5AEjcmF3YnJvYWRwaGFzZV9pbnRlcnNlY3Rpb25XaXRoU2hhcGUA1AEacmF3YnJvYWRwaGFzZV9wcm9qZWN0UG9pbnQAtAIncmF3YnJvYWRwaGFzZV9wcm9qZWN0UG9pbnRBbmRHZXRGZWF0dXJlALcCJHJhd2Jyb2FkcGhhc2VfaW50ZXJzZWN0aW9uc1dpdGhQb2ludACbAhdyYXdicm9hZHBoYXNlX2Nhc3RTaGFwZQDIASRyYXdicm9hZHBoYXNlX2ludGVyc2VjdGlvbnNXaXRoU2hhcGUA1wEvcmF3YnJvYWRwaGFzZV9jb2xsaWRlcnNXaXRoQWFiYkludGVyc2VjdGluZ0FhYmIAxQIccmF3Y29sbGlkZXJzZXRfY29UcmFuc2xhdGlvbgCfBhlyYXdjb2xsaWRlcnNldF9jb1JvdGF0aW9uAKAGJXJhd2NvbGxpZGVyc2V0X2NvVHJhbnNsYXRpb25XcnRQYXJlbnQA9wUicmF3Y29sbGlkZXJzZXRfY29Sb3RhdGlvbldydFBhcmVudAD4BR9yYXdjb2xsaWRlcnNldF9jb1NldFRyYW5zbGF0aW9uANoHKHJhd2NvbGxpZGVyc2V0X2NvU2V0VHJhbnNsYXRpb25XcnRQYXJlbnQAxAcccmF3Y29sbGlkZXJzZXRfY29TZXRSb3RhdGlvbgCvBiVyYXdjb2xsaWRlcnNldF9jb1NldFJvdGF0aW9uV3J0UGFyZW50AM8JGXJhd2NvbGxpZGVyc2V0X2NvSXNTZW5zb3IAgwgacmF3Y29sbGlkZXJzZXRfY29TaGFwZVR5cGUAnAkgcmF3Y29sbGlkZXJzZXRfY29IYWxmc3BhY2VOb3JtYWwAtAUccmF3Y29sbGlkZXJzZXRfY29IYWxmRXh0ZW50cwCjBR9yYXdjb2xsaWRlcnNldF9jb1NldEhhbGZFeHRlbnRzAOAGF3Jhd2NvbGxpZGVyc2V0X2NvUmFkaXVzAL0IGnJhd2NvbGxpZGVyc2V0X2NvU2V0UmFkaXVzAN4JG3Jhd2NvbGxpZGVyc2V0X2NvSGFsZkhlaWdodAC+CB5yYXdjb2xsaWRlcnNldF9jb1NldEhhbGZIZWlnaHQA3wkccmF3Y29sbGlkZXJzZXRfY29Sb3VuZFJhZGl1cwC/CB9yYXdjb2xsaWRlcnNldF9jb1NldFJvdW5kUmFkaXVzAOAJGnJhd2NvbGxpZGVyc2V0X2NvVm94ZWxEYXRhALgGGnJhd2NvbGxpZGVyc2V0X2NvVm94ZWxTaXplALkFGXJhd2NvbGxpZGVyc2V0X2NvU2V0Vm94ZWwAmAclcmF3Y29sbGlkZXJzZXRfY29Qcm9wYWdhdGVWb3hlbENoYW5nZQC9CSNyYXdjb2xsaWRlcnNldF9jb0NvbWJpbmVWb3hlbFN0YXRlcwDQCRlyYXdjb2xsaWRlcnNldF9jb1ZlcnRpY2VzALkGGHJhd2NvbGxpZGVyc2V0X2NvSW5kaWNlcwC6Bh1yYXdjb2xsaWRlcnNldF9jb1RyaU1lc2hGbGFncwDoBiFyYXdjb2xsaWRlcnNldF9jb0hlaWdodEZpZWxkRmxhZ3MA6QYjcmF3Y29sbGlkZXJzZXRfY29IZWlnaHRmaWVsZEhlaWdodHMAuwYhcmF3Y29sbGlkZXJzZXRfY29IZWlnaHRmaWVsZFNjYWxlAKEFIXJhd2NvbGxpZGVyc2V0X2NvSGVpZ2h0ZmllbGROUm93cwDOBiFyYXdjb2xsaWRlcnNldF9jb0hlaWdodGZpZWxkTkNvbHMAzwYXcmF3Y29sbGlkZXJzZXRfY29QYXJlbnQAmQcbcmF3Y29sbGlkZXJzZXRfY29TZXRFbmFibGVkAKYHGnJhd2NvbGxpZGVyc2V0X2NvSXNFbmFibGVkANsHH3Jhd2NvbGxpZGVyc2V0X2NvU2V0Q29udGFjdFNraW4A+ggccmF3Y29sbGlkZXJzZXRfY29Db250YWN0U2tpbgCECBlyYXdjb2xsaWRlcnNldF9jb0ZyaWN0aW9uAIUIHHJhd2NvbGxpZGVyc2V0X2NvUmVzdGl0dXRpb24AhggYcmF3Y29sbGlkZXJzZXRfY29EZW5zaXR5AJ8IFXJhd2NvbGxpZGVyc2V0X2NvTWFzcwCgCBdyYXdjb2xsaWRlcnNldF9jb1ZvbHVtZQChCCByYXdjb2xsaWRlcnNldF9jb0NvbGxpc2lvbkdyb3VwcwC4Bx1yYXdjb2xsaWRlcnNldF9jb1NvbHZlckdyb3VwcwC5BxxyYXdjb2xsaWRlcnNldF9jb0FjdGl2ZUhvb2tzAIcIJXJhd2NvbGxpZGVyc2V0X2NvQWN0aXZlQ29sbGlzaW9uVHlwZXMAiAgdcmF3Y29sbGlkZXJzZXRfY29BY3RpdmVFdmVudHMAiQgrcmF3Y29sbGlkZXJzZXRfY29Db250YWN0Rm9yY2VFdmVudFRocmVzaG9sZACKCB5yYXdjb2xsaWRlcnNldF9jb0NvbnRhaW5zUG9pbnQAlgUacmF3Y29sbGlkZXJzZXRfY29DYXN0U2hhcGUAiAIdcmF3Y29sbGlkZXJzZXRfY29DYXN0Q29sbGlkZXIAlQMgcmF3Y29sbGlkZXJzZXRfY29JbnRlcnNlY3RzU2hhcGUA5wIdcmF3Y29sbGlkZXJzZXRfY29Db250YWN0U2hhcGUA3AEgcmF3Y29sbGlkZXJzZXRfY29Db250YWN0Q29sbGlkZXIAtQUdcmF3Y29sbGlkZXJzZXRfY29Qcm9qZWN0UG9pbnQAlwQecmF3Y29sbGlkZXJzZXRfY29JbnRlcnNlY3RzUmF5ANoDGHJhd2NvbGxpZGVyc2V0X2NvQ2FzdFJheQC3AyRyYXdjb2xsaWRlcnNldF9jb0Nhc3RSYXlBbmRHZXROb3JtYWwA3QIacmF3Y29sbGlkZXJzZXRfY29TZXRTZW5zb3IA1gcfcmF3Y29sbGlkZXJzZXRfY29TZXRSZXN0aXR1dGlvbgD7CBxyYXdjb2xsaWRlcnNldF9jb1NldEZyaWN0aW9uAPwIJHJhd2NvbGxpZGVyc2V0X2NvRnJpY3Rpb25Db21iaW5lUnVsZQCLCCdyYXdjb2xsaWRlcnNldF9jb1NldEZyaWN0aW9uQ29tYmluZVJ1bGUAwAgncmF3Y29sbGlkZXJzZXRfY29SZXN0aXR1dGlvbkNvbWJpbmVSdWxlAIwIKnJhd2NvbGxpZGVyc2V0X2NvU2V0UmVzdGl0dXRpb25Db21iaW5lUnVsZQDBCCNyYXdjb2xsaWRlcnNldF9jb1NldENvbGxpc2lvbkdyb3VwcwCUByByYXdjb2xsaWRlcnNldF9jb1NldFNvbHZlckdyb3VwcwCVBx9yYXdjb2xsaWRlcnNldF9jb1NldEFjdGl2ZUhvb2tzAK4IIHJhd2NvbGxpZGVyc2V0X2NvU2V0QWN0aXZlRXZlbnRzAMIIKHJhd2NvbGxpZGVyc2V0X2NvU2V0QWN0aXZlQ29sbGlzaW9uVHlwZXMAwwgZcmF3Y29sbGlkZXJzZXRfY29TZXRTaGFwZQDYBS5yYXdjb2xsaWRlcnNldF9jb1NldENvbnRhY3RGb3JjZUV2ZW50VGhyZXNob2xkAP0IG3Jhd2NvbGxpZGVyc2V0X2NvU2V0RGVuc2l0eQD+CBhyYXdjb2xsaWRlcnNldF9jb1NldE1hc3MA/wgicmF3Y29sbGlkZXJzZXRfY29TZXRNYXNzUHJvcGVydGllcwDBAxlfX3diZ19yYXdjb2xsaWRlcnNldF9mcmVlAMoGEnJhd2NvbGxpZGVyc2V0X25ldwCXCRJyYXdjb2xsaWRlcnNldF9sZW4A/wsXcmF3Y29sbGlkZXJzZXRfY29udGFpbnMAgAkdcmF3Y29sbGlkZXJzZXRfY3JlYXRlQ29sbGlkZXIA6AEVcmF3Y29sbGlkZXJzZXRfcmVtb3ZlAJsEJHJhd2NvbGxpZGVyc2V0X2ZvckVhY2hDb2xsaWRlckhhbmRsZQCgCRpfX3diZ19yYXdzaGFwZWNvbnRhY3RfZnJlZQCxCRlfX3diZ19yYXduYXJyb3dwaGFzZV9mcmVlALUIEnJhd25hcnJvd3BoYXNlX25ldwCgCyFyYXduYXJyb3dwaGFzZV9jb250YWN0X3BhaXJzX3dpdGgAqAkbcmF3bmFycm93cGhhc2VfY29udGFjdF9wYWlyAOoGJnJhd25hcnJvd3BoYXNlX2ludGVyc2VjdGlvbl9wYWlyc193aXRoAKkJIHJhd25hcnJvd3BoYXNlX2ludGVyc2VjdGlvbl9wYWlyAO8HHV9fd2JnX3Jhd2NvbnRhY3RtYW5pZm9sZF9mcmVlALIJGHJhd2NvbnRhY3RwYWlyX2NvbGxpZGVyMQChCxhyYXdjb250YWN0cGFpcl9jb2xsaWRlcjIAogsicmF3Y29udGFjdHBhaXJfbnVtQ29udGFjdE1hbmlmb2xkcwCjCx5yYXdjb250YWN0cGFpcl9jb250YWN0TWFuaWZvbGQAhgkZcmF3Y29udGFjdG1hbmlmb2xkX25vcm1hbACNCBtyYXdjb250YWN0bWFuaWZvbGRfbG9jYWxfbjEAjggbcmF3Y29udGFjdG1hbmlmb2xkX2xvY2FsX24yAI8IHHJhd2NvbnRhY3RtYW5pZm9sZF9zdWJzaGFwZTEApAsccmF3Y29udGFjdG1hbmlmb2xkX3N1YnNoYXBlMgClCx9yYXdjb250YWN0bWFuaWZvbGRfbnVtX2NvbnRhY3RzAKYLI3Jhd2NvbnRhY3RtYW5pZm9sZF9jb250YWN0X2xvY2FsX3AxAPAGI3Jhd2NvbnRhY3RtYW5pZm9sZF9jb250YWN0X2xvY2FsX3AyAPEGH3Jhd2NvbnRhY3RtYW5pZm9sZF9jb250YWN0X2Rpc3QAtAofcmF3Y29udGFjdG1hbmlmb2xkX2NvbnRhY3RfZmlkMQC1Ch9yYXdjb250YWN0bWFuaWZvbGRfY29udGFjdF9maWQyALYKInJhd2NvbnRhY3RtYW5pZm9sZF9jb250YWN0X2ltcHVsc2UAtwoscmF3Y29udGFjdG1hbmlmb2xkX2NvbnRhY3RfdGFuZ2VudF9pbXB1bHNlX3gAuAoscmF3Y29udGFjdG1hbmlmb2xkX2NvbnRhY3RfdGFuZ2VudF9pbXB1bHNlX3kAuQomcmF3Y29udGFjdG1hbmlmb2xkX251bV9zb2x2ZXJfY29udGFjdHMApwsncmF3Y29udGFjdG1hbmlmb2xkX3NvbHZlcl9jb250YWN0X3BvaW50APIGJnJhd2NvbnRhY3RtYW5pZm9sZF9zb2x2ZXJfY29udGFjdF9kaXN0ALoKKnJhd2NvbnRhY3RtYW5pZm9sZF9zb2x2ZXJfY29udGFjdF9mcmljdGlvbgCUCi1yYXdjb250YWN0bWFuaWZvbGRfc29sdmVyX2NvbnRhY3RfcmVzdGl0dXRpb24AlQoycmF3Y29udGFjdG1hbmlmb2xkX3NvbHZlcl9jb250YWN0X3RhbmdlbnRfdmVsb2NpdHkAkAcdX193YmdfcmF3cG9pbnRwcm9qZWN0aW9uX2ZyZWUAswkYcmF3cG9pbnRwcm9qZWN0aW9uX3BvaW50AN4IG3Jhd3BvaW50cHJvamVjdGlvbl9pc0luc2lkZQCADCVfX3diZ19yYXdwb2ludGNvbGxpZGVycHJvamVjdGlvbl9mcmVlALQJKXJhd3BvaW50Y29sbGlkZXJwcm9qZWN0aW9uX2NvbGxpZGVySGFuZGxlAIEMIHJhd3BvaW50Y29sbGlkZXJwcm9qZWN0aW9uX3BvaW50AN8II3Jhd3BvaW50Y29sbGlkZXJwcm9qZWN0aW9uX2lzSW5zaWRlAIIMJnJhd3BvaW50Y29sbGlkZXJwcm9qZWN0aW9uX2ZlYXR1cmVUeXBlAIMMJHJhd3BvaW50Y29sbGlkZXJwcm9qZWN0aW9uX2ZlYXR1cmVJZACvCx1fX3diZ19yYXdyYXlpbnRlcnNlY3Rpb25fZnJlZQC1CRxfX3diZ19yYXdyYXljb2xsaWRlcmhpdF9mcmVlALYJE19fd2JnX3Jhd3NoYXBlX2ZyZWUAyQcPcmF3c2hhcGVfY3Vib2lkAI0LFHJhd3NoYXBlX3JvdW5kQ3Vib2lkAIILDXJhd3NoYXBlX2JhbGwAsAsScmF3c2hhcGVfaGFsZnNwYWNlAKsGEHJhd3NoYXBlX2NhcHN1bGUA1AkRcmF3c2hhcGVfY3lsaW5kZXIAqAsWcmF3c2hhcGVfcm91bmRDeWxpbmRlcgCOCw1yYXdzaGFwZV9jb25lAKkLEnJhd3NoYXBlX3JvdW5kQ29uZQCPCw9yYXdzaGFwZV92b3hlbHMA9AYZcmF3c2hhcGVfdm94ZWxzRnJvbVBvaW50cwD1BhFyYXdzaGFwZV9wb2x5bGluZQCBChByYXdzaGFwZV90cmltZXNoAL4JFHJhd3NoYXBlX2hlaWdodGZpZWxkAKUFEHJhd3NoYXBlX3NlZ21lbnQAwgURcmF3c2hhcGVfdHJpYW5nbGUAmQQWcmF3c2hhcGVfcm91bmRUcmlhbmdsZQCYBBNyYXdzaGFwZV9jb252ZXhIdWxsAIIKGHJhd3NoYXBlX3JvdW5kQ29udmV4SHVsbAD7CRNyYXdzaGFwZV9jb252ZXhNZXNoAMMJGHJhd3NoYXBlX3JvdW5kQ29udmV4TWVzaAC/CRJyYXdzaGFwZV9jYXN0U2hhcGUAiwEYcmF3c2hhcGVfaW50ZXJzZWN0c1NoYXBlAIwCFXJhd3NoYXBlX2NvbnRhY3RTaGFwZQC0ARZyYXdzaGFwZV9jb250YWluc1BvaW50AIADFXJhd3NoYXBlX3Byb2plY3RQb2ludADeAhZyYXdzaGFwZV9pbnRlcnNlY3RzUmF5AMACEHJhd3NoYXBlX2Nhc3RSYXkAtQIccmF3c2hhcGVfY2FzdFJheUFuZEdldE5vcm1hbACAAhpfX3diZ19yYXdzaGFwZWNhc3RoaXRfZnJlZQC3CRhyYXdzaGFwZWNhc3RoaXRfd2l0bmVzczEA4AgXcmF3c2hhcGVjYXN0aGl0X25vcm1hbDEA4QgXcmF3c2hhcGVjYXN0aGl0X25vcm1hbDIA4ggiX193YmdfcmF3Y29sbGlkZXJzaGFwZWNhc3RoaXRfZnJlZQC4CSZyYXdjb2xsaWRlcnNoYXBlY2FzdGhpdF90aW1lX29mX2ltcGFjdACEDCByYXdjb2xsaWRlcnNoYXBlY2FzdGhpdF93aXRuZXNzMQDjCCByYXdjb2xsaWRlcnNoYXBlY2FzdGhpdF93aXRuZXNzMgDkCA9yYXdyb3RhdGlvbl9uZXcArgwUcmF3cm90YXRpb25faWRlbnRpdHkA2AwNcmF3cm90YXRpb25fdwCFDA5yYXd2ZWN0b3JfemVybwDlDA1yYXd2ZWN0b3JfbmV3AL0MD3Jhd3ZlY3Rvcl9zZXRfeQCjDA9yYXd2ZWN0b3Jfc2V0X3oApAwNcmF3dmVjdG9yX3h5egDhCQ1yYXd2ZWN0b3JfeXh6AOIJDXJhd3ZlY3Rvcl96eHkA4wkNcmF3dmVjdG9yX3h6eQDkCQ1yYXd2ZWN0b3JfeXp4AOUJDXJhd3ZlY3Rvcl96eXgA5gkWcmF3c2RwbWF0cml4M19lbGVtZW50cwDKByFfX3diZ19yYXdkZWJ1Z3JlbmRlcnBpcGVsaW5lX2ZyZWUA0AcacmF3ZGVidWdyZW5kZXJwaXBlbGluZV9uZXcA/AkfcmF3ZGVidWdyZW5kZXJwaXBlbGluZV92ZXJ0aWNlcwCBCR1yYXdkZWJ1Z3JlbmRlcnBpcGVsaW5lX2NvbG9ycwCCCR1yYXdkZWJ1Z3JlbmRlcnBpcGVsaW5lX3JlbmRlcgCWAhhfX3diZ19yYXdldmVudHF1ZXVlX2ZyZWUAggcfX193YmdfcmF3Y29udGFjdGZvcmNlZXZlbnRfZnJlZQC5CR5yYXdjb250YWN0Zm9yY2VldmVudF9jb2xsaWRlcjIAhgwgcmF3Y29udGFjdGZvcmNlZXZlbnRfdG90YWxfZm9yY2UA5QgqcmF3Y29udGFjdGZvcmNlZXZlbnRfdG90YWxfZm9yY2VfbWFnbml0dWRlAIcMKHJhd2NvbnRhY3Rmb3JjZWV2ZW50X21heF9mb3JjZV9kaXJlY3Rpb24A5ggocmF3Y29udGFjdGZvcmNlZXZlbnRfbWF4X2ZvcmNlX21hZ25pdHVkZQCIDBFyYXdldmVudHF1ZXVlX25ldwDVCSJyYXdldmVudHF1ZXVlX2RyYWluQ29sbGlzaW9uRXZlbnRzAMsJJXJhd2V2ZW50cXVldWVfZHJhaW5Db250YWN0Rm9yY2VFdmVudHMAzAkTcmF3ZXZlbnRxdWV1ZV9jbGVhcgDkBx1fX3diZ19yYXdwaHlzaWNzcGlwZWxpbmVfZnJlZQDRBxZyYXdwaHlzaWNzcGlwZWxpbmVfbmV3ALEEJ3Jhd3BoeXNpY3NwaXBlbGluZV9zZXRfcHJvZmlsZXJfZW5hYmxlZACPDCZyYXdwaHlzaWNzcGlwZWxpbmVfaXNfcHJvZmlsZXJfZW5hYmxlZACJDB5yYXdwaHlzaWNzcGlwZWxpbmVfdGltaW5nX3N0ZXAAkAstcmF3cGh5c2ljc3BpcGVsaW5lX3RpbWluZ19jb2xsaXNpb25fZGV0ZWN0aW9uAOUKJXJhd3BoeXNpY3NwaXBlbGluZV90aW1pbmdfYnJvYWRfcGhhc2UA5gomcmF3cGh5c2ljc3BpcGVsaW5lX3RpbWluZ19uYXJyb3dfcGhhc2UA5wogcmF3cGh5c2ljc3BpcGVsaW5lX3RpbWluZ19zb2x2ZXIA6AorcmF3cGh5c2ljc3BpcGVsaW5lX3RpbWluZ192ZWxvY2l0eV9hc3NlbWJseQCRCy1yYXdwaHlzaWNzcGlwZWxpbmVfdGltaW5nX3ZlbG9jaXR5X3Jlc29sdXRpb24A6QopcmF3cGh5c2ljc3BpcGVsaW5lX3RpbWluZ192ZWxvY2l0eV91cGRhdGUA6goscmF3cGh5c2ljc3BpcGVsaW5lX3RpbWluZ192ZWxvY2l0eV93cml0ZWJhY2sAkgsdcmF3cGh5c2ljc3BpcGVsaW5lX3RpbWluZ19jY2QA6wotcmF3cGh5c2ljc3BpcGVsaW5lX3RpbWluZ19jY2RfdG9pX2NvbXB1dGF0aW9uAJMLKXJhd3BoeXNpY3NwaXBlbGluZV90aW1pbmdfY2NkX2Jyb2FkX3BoYXNlAJQLKnJhd3BoeXNpY3NwaXBlbGluZV90aW1pbmdfY2NkX25hcnJvd19waGFzZQCVCyRyYXdwaHlzaWNzcGlwZWxpbmVfdGltaW5nX2NjZF9zb2x2ZXIAlgstcmF3cGh5c2ljc3BpcGVsaW5lX3RpbWluZ19pc2xhbmRfY29uc3RydWN0aW9uAOwKJnJhd3BoeXNpY3NwaXBlbGluZV90aW1pbmdfdXNlcl9jaGFuZ2VzAJcLF3Jhd3BoeXNpY3NwaXBlbGluZV9zdGVwAMkBIXJhd3BoeXNpY3NwaXBlbGluZV9zdGVwV2l0aEV2ZW50cwC4AR9fX3diZ19yYXdkZXNlcmlhbGl6ZWR3b3JsZF9mcmVlAPAHIHJhd2Rlc2VyaWFsaXplZHdvcmxkX3Rha2VHcmF2aXR5AJYILnJhd2Rlc2VyaWFsaXplZHdvcmxkX3Rha2VJbnRlZ3JhdGlvblBhcmFtZXRlcnMAsgQmcmF3ZGVzZXJpYWxpemVkd29ybGRfdGFrZUlzbGFuZE1hbmFnZXIAmwUjcmF3ZGVzZXJpYWxpemVkd29ybGRfdGFrZUJyb2FkUGhhc2UA5QckcmF3ZGVzZXJpYWxpemVkd29ybGRfdGFrZU5hcnJvd1BoYXNlAJwFH3Jhd2Rlc2VyaWFsaXplZHdvcmxkX3Rha2VCb2RpZXMA/wUicmF3ZGVzZXJpYWxpemVkd29ybGRfdGFrZUNvbGxpZGVycwDeBSZyYXdkZXNlcmlhbGl6ZWR3b3JsZF90YWtlSW1wdWxzZUpvaW50cwDmAyhyYXdkZXNlcmlhbGl6ZWR3b3JsZF90YWtlTXVsdGlib2R5Sm9pbnRzAOcDJXJhd3NlcmlhbGl6YXRpb25waXBlbGluZV9zZXJpYWxpemVBbGwAwgEncmF3c2VyaWFsaXphdGlvbnBpcGVsaW5lX2Rlc2VyaWFsaXplQWxsAN0GHHJhd2NvbGxpZGVyc2V0X2lzSGFuZGxlVmFsaWQAgAkccmF3cmF5aW50ZXJzZWN0aW9uX2ZlYXR1cmVJZACvCyRyYXdyYXljb2xsaWRlcmludGVyc2VjdGlvbl9mZWF0dXJlSWQArws1cmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX3NldF9udW1JbnRlcm5hbFBnc0l0ZXJhdGlvbnMAmQwPcmF3dmVjdG9yX3NldF94AJsMDnJlc2VydmVfbWVtb3J5ALsLInJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfdXAA1QgXcmF3c2hhcGVjb250YWN0X25vcm1hbDIA1QgWcmF3c2hhcGVjb250YWN0X3BvaW50MQDeCBZyYXdzaGFwZWNvbnRhY3RfcG9pbnQyAOMIGXJhd3JheWludGVyc2VjdGlvbl9ub3JtYWwA4wghcmF3cmF5Y29sbGlkZXJpbnRlcnNlY3Rpb25fbm9ybWFsAOMIF3Jhd3NoYXBlY29udGFjdF9ub3JtYWwxAOQIH3Jhd2NvbGxpZGVyc2hhcGVjYXN0aGl0X25vcm1hbDEA1QgfcmF3Y29sbGlkZXJzaGFwZWNhc3RoaXRfbm9ybWFsMgDWCBhyYXdzaGFwZWNhc3RoaXRfd2l0bmVzczIA5QgxcmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX251bUludGVybmFsUGdzSXRlcmF0aW9ucwD1CxhyYXdzaGFwZWNvbnRhY3RfZGlzdGFuY2UA7AsecmF3cmF5aW50ZXJzZWN0aW9uX2ZlYXR1cmVUeXBlAIMMKXJhd3JheWNvbGxpZGVyaW50ZXJzZWN0aW9uX2NvbGxpZGVySGFuZGxlAIEMIXJhd3JheWludGVyc2VjdGlvbl90aW1lX29mX2ltcGFjdACEDCZyYXdyYXljb2xsaWRlcmludGVyc2VjdGlvbl9mZWF0dXJlVHlwZQCDDCByYXdyYXljb2xsaWRlcmhpdF9jb2xsaWRlckhhbmRsZQDxCylyYXdyYXljb2xsaWRlcmludGVyc2VjdGlvbl90aW1lX29mX2ltcGFjdACEDB5yYXdzaGFwZWNhc3RoaXRfdGltZV9vZl9pbXBhY3QA+AsmcmF3Y29sbGlkZXJzaGFwZWNhc3RoaXRfY29sbGlkZXJIYW5kbGUA8QsecmF3cmF5Y29sbGlkZXJoaXRfdGltZU9mSW1wYWN0AIQMDXJhd3JvdGF0aW9uX3gA+AsNcmF3cm90YXRpb25feQDpCw1yYXdyb3RhdGlvbl96AIQMC3Jhd3ZlY3Rvcl94APgLC3Jhd3ZlY3Rvcl95AOkLC3Jhd3ZlY3Rvcl96AIQMHnJhd2NvbnRhY3Rmb3JjZWV2ZW50X2NvbGxpZGVyMQDxCyNyYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfbGVuZ3RoVW5pdACHDBlfX3diZ19yYXdjb250YWN0cGFpcl9mcmVlALIJJV9fd2JnX3Jhd3JheWNvbGxpZGVyaW50ZXJzZWN0aW9uX2ZyZWUAtAkWX193YmdfcmF3cm90YXRpb25fZnJlZQCzCRRfX3diZ19yYXd2ZWN0b3JfZnJlZQC2CRhfX3diZ19yYXdzZHBtYXRyaXgzX2ZyZWUAtQkjX193YmdfcmF3c2VyaWFsaXphdGlvbnBpcGVsaW5lX2ZyZWUArgkQcmF3Y2Nkc29sdmVyX25ldwCvDRxyYXdzZXJpYWxpemF0aW9ucGlwZWxpbmVfbmV3AK8NE19fd2JpbmRnZW5fZXhwb3J0XzAAvg4fX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcgCTDxNfX3diaW5kZ2VuX2V4cG9ydF8xAJUOE19fd2JpbmRnZW5fZXhwb3J0XzIApA0J3BEBAEEBC/cIqw7qArsMrQ+FD5UPlA/VDdQNgQ2XD60MtwuhDaENuAW4BecMvQ+ICYgJ7QPuA4QGmA/6CbEFtgygCvkJrg3WBuwFwQWTB60OrQ6tDq0OgQvBCbQLowT5AqsEogrCBvMM8gqsCMAJogf+DL4Psg6/D7wPuw+xDq4PgA7pCOwI4AflBO0JuAKvBZ0LvQXIA+4G2AauDq4Org6uDrMKzAjeCoUE4QKKBNsM4Qz0DM8MgAvQBaEHsgi7D7AOwA2vDv8NiQ/tCI0Mlg+hCaEJrw+6D9gP1g/XD9wMqQT+BdgPV3ditQzdC90L1gmKDPYKmAt0UHpmQ6MBSyH1DNcN2A2jDdoN1g32DNkNww3eDIENlw+vDKENoQ24BbgFvQ/gB+UE7Qm4Aq8FnQu9BcgD7gbYBrgOuA64DrgOswrMCN4KhQThAooE9AyhB7sPsA68D7sPug6uD4EO7Qi1DrUOtQ61DrQO1QO3DrcOtw63DrwOqQO5DrkOuQ65DrsOkAOWA+YMrwiwCPoJsQW2DKAK+QmuDdYG7AXBBZMHtg62DrYOtg6BC8EJtAujBPkCqwTzDKIHvg+yDr8PvQ6CDuwIng5boQ5foA5Ynw6TAqIOWYgJiAntA+4DkAyZD8YNpgnFDcYNxA3PDcsNxQ3FDckNxw3IDcAFhQ6GDocOiA6JDuQLmA2KDJkLxAnNCbEL3wuLDPcKxQnOCcYJgwvdC9oO9QzmDeIN3Q3tDfQN8QfnDe8N6A3fDNsNmArhDbMP8Q33DN8Now3gDfYM7g31DesN3QflDeQN7A2lDeMNrQXzDekN5gfqDd4N+AzyDfAN3A2BDd4M3gz6CpcPsQydD5EMpw7qAdQO1A7UDtQO2w79A6UO2AGkDmzKDsoOyg7KDtwO6QOoDm3SDtIO0g7SDt0O/gOmDmrmDK8IsAj9Cf8DugyhCv4JsA3VBO4FnASWB80OzQ7NDs0OgQvBCbQLowT5AqsE8gquBL4Psg6/D7wPuw/lDq4PjQ6oBdkO2Q7ZDtkO3g7qA8cOxw7HDscO3w7dBcsOyw7LDssOvA6jDl7gB8cD7Qm4Aq8FnQuABMgDywTYBtgO2A7YDtgOswrOBd4K0wK8AuUCzwzCB7sPsA7iDosO2gLMDswOzA7MDrsOvw6/Dr8Ovw60Djwi9AffA9sJmwu5DIINpASaB9MEvwfADsAOwA7ADsgGkAWbB6cDqwLQA54N9g2SDZINkQPmC9EInwq9D+AOtA/DD+EOrg+rC6sImw2mAZkN6AOdDYgEnA2UApoN4AGDCvwDwAy8C4QKtw3SBOoFpQSRB9AO0A7QDtAOxwytAo8N6gSiA/0E4QazCIwMjAzYCa4DsAXFD+YO5w6ODooP8AjnCLgD1gvaBbYInAuMBJ0F9wKkBs8Ozw7PDs8OyAyeAYMN8ASjA4EF5waFA+AL4AuSCqoOrAf0CsoP8Q7LBssP8g6PDowPsQjYC7EN/grNDKENoQ24BbgFvQ+uCvgDhASWDocK2wrgBOYFzwT2BcUOxQ7FDsUOzAz5AYkN7QSmA4kF1wm7CrYLtguDA5EEqQaMDsQP4w61D+QO9w2xD+8IvgfcCd4DmgT5CvkKxATDBPAFiAmICe0D7gOqCvMDhQGNAZAKlQLeBOcFzQSpB9UO1Q7VDtUOuQGOAYoN9gSgA/8Esg3cCvwM1wKdAugOtQapDsYP6Q7eBt8G6g7PCKoMsA+sCvUDlAGpAZEK7QHcBOEFzASqB8gOyA7IDsgOmwGCAYUN9wShA/wE7QbFBf0MkgTdA58PqwfHD+sO7A7zCOgHwg/VC6AE2QyrCf8J0wHUBO0F2wOoB9MO0w7TDtMO2wG2AYcN+ASaA4cF7QbFBb4Lvgv8Cp8PqwfRDcgP7Q7uDosP8wi2BsIPnAG4BPsBmA6LCsAP3wTpBboEwQ/XDtcO1w7XDsYMmQGRDekEnAOFBbMN3Qq9C70LngfvDrQGyQ/wDs4IjwSLBL8ClAXWAacF5AKPBYMGlwXaDPwCvAOCA6cHww7DDsMOww7BDLECjA3uBJsDggXiDLQN0QzRDJ8HoA/pB6QJzA/zDrYP9A6QDocEhAuEC/sE+wSoA6gK9wP7ApcOjAq7DdcE4gW/BIwH1g7WDtYO1g7DDJACiA3rBJgD/gS8CtIM0gygB6EP0gjND/UOnw32DpEOhgTICccJngSeBKYE3gfcA9EJ+ArgDLYNoQS1B8IE1wfRDtEO0Q7RDoUKwQfxCrAE8wLzBJIO9w7TDNMM8wmTDugIzw/4Ds4Pig6pCvIDhAGHAY8KuQ3hBOUFzgSLB8QOxA7EDsQOyQy+AYQN7ASfA4QF7QbFBeEL4QvRCrMGqweiD9AP+Q7BDbwPvQ+uD64PsQ/zCKsK9AMmmg6ICr8N3QToBbsEigfBDsEOwQ7BDsoM3gGQDfEEmQODBbIHtwXzCvMK3weSB64H0g/8DqMP/Q75DZQErQrxAyecDooKvg3YBOAFvQSNB8YOxg7GDsYOxAzwAYYN7wSeA4YFxQfhCs4Mzgz4BvkFyQbSCNQPgA+ND58NgQ/7De4IsQrwAyibDokKug3bBOQFvASJB8IOwg7CDsIOywyRAo4N8gSlA4gF6wnUDNQM9wb6BaQJ0w/+Dv8O+g3yCLAK9gMpnQ6OCr0N2gTjBbkEjwfJDskOyQ7JDsUMngKNDegEpAOKBbsF6QK1C7UL0wnJCa0H9ArVD4IPwwaDD/wN0gWvCu8DK5kOjQq8DdkE3wW+BI4Hzg7ODs4Ozg7CDLICiw3nBJ0DgAXSCbIK0AzQDOAKwASwBrII0Q/6DqYN+w74DfEI2QrlC8cEmgXZBrYHrwPZA50JngqNBLUEsQfQCNgDgQS6CboLlQTQBMAP2A/ZD84N2QvqB8wGhA+8DLcH0A2kD4YL4wylD4EN7QrSDZMMpwamD9IN5Az+Df0NhQ/VDIYPpw/KDb0K1QaDCa4PzQ3iC8wN0g2oDK0GqA+pD6oP8QW1DasO2g6HD5YN+An1CpIPrA+/A6wMqw8MARkKpMxZug+OxQMDYX8ZfhB9IwBBwBRrIgIkACACIAE2AkACQAJAAkACQAJAAkAgASgCBCIEQQRJDQAgASgCACEGIAEgBEEEayIDNgIEIAEgBkEEajYCACADQQRJDQAgBigAACFZIAEgBEEIayIDNgIEIAEgBkEIajYCACADQQNLDQELIAJBADoAkwwgAkElOwCRDCACQQA2ApQMIAJBAToAkAwgAkGQDGoQog0hASAAQQI2AsQHIAAgATYCAAwBCyAGNQAEIXogASAEQQxrIgM2AgQgASAGQQxqNgIAIAJBBzYCRCAGNQAIIXsgAiABNgLwAgJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACfyADQQNNBEAgAkEAOgCTDCACQSU7AJEMIAJBADYClAwgAkEBOgCQDCACQZAMahCiDQwBCyABIARBEGsiAzYCBCABIAZBEGo2AgAgA0EDTQRAIAJBADoAkwwgAkElOwCRDCACQQA2ApQMIAJBAToAkAwgAkGQDGoQog0MAQsgBigADCFaIAEgBEEUayIDNgIEIAEgBkEUajYCACADQQNNBEAgAkEAOgCTDCACQSU7AJEMIAJBADYClAwgAkEBOgCQDCACQZAMahCiDQwBCyAGKAAQIVsgASAEQRhrIgM2AgQgASAGQRhqNgIAIANBA00EQCACQQA6AJMMIAJBJTsAkQwgAkEANgKUDCACQQE6AJAMIAJBkAxqEKINDAELIAYoABQhXCABIARBHGsiAzYCBCABIAZBHGo2AgAgA0EDTQRAIAJBADoAkwwgAkElOwCRDCACQQA2ApQMIAJBAToAkAwgAkGQDGoQog0MAQsgBigAGCFdIAEgBEEgayIDNgIEIAEgBkEgajYCACACQQs2AvQCIANBA00EQCACQQA6AJMMIAJBJTsAkQwgAkEANgKUDCACQQE6AJAMIAJBkAxqEKINDAELIAYoABwhXiABIARBJGs2AgQgASAGQSRqNgIAIAYoACAhXyACQZAMaiIIIAJB8AJqIgYQygkgAigClAwiYCACKAKQDCIEQQJGDQAaIARBAXEEQCAIIAYQygkgAigClAwiYSACKAKQDCIEQQJGDQEaAkAgBEEBcQRAIAggBhDKCSACKAKUDCFRIAIoApAMIgNBAkcNASBRDAMLQQdBmLPBAEGEq8EAEL4KDAILAkAgA0EBcQRAIAJBkAxqIAJB8AJqEMoJIAIoApQMIVIgAigCkAwiA0ECRw0BIFIMAwtBCEGYs8EAQYSrwQAQvgoMAgsCQCADQQFxBEAgAkGQDGogAkHwAmoQygkgAigClAwhUyACKAKQDCIDQQJHDQEgUwwDC0EJQZizwQBBhKvBABC+CgwCCwJAIANBAXEEQCACQZAMaiACQfACahD0CCACKAKUDCFUIAIoApAMIgNBAkcNASBUDAMLQQpBmLPBAEGEq8EAEL4KDAILAkAgA0EBcQRAIAJBkAxqIAJB8AJqEPQIIAIoApQMIVUgAigCkAwiA0ECRw0BIFUMAwtBC0GYs8EAQYSrwQAQvgoMAgsCQCADQQFxBEAgAkGQDGogAkHwAmoQ9AggAigClAwhViACKAKQDCIDQQJHDQEgVgwDC0EMQZizwQBBhKvBABC+CgwCCwJAIANBAXEEQCACQZAMaiACQfACahD0CCACKAKUDCFXIAIoApAMIgNBAkcNASBXDAMLQQ1BmLPBAEGEq8EAEL4KDAILAkAgA0EBcQRAIAJBkAxqIAJB8AJqEPQIIAIoApQMIVggAigCkAwiA0ECRw0BIFgMAwtBDkGYs8EAQYSrwQAQvgoMAgsCQCADQQFxBEAgAkGQDGogAkHwAmoQ6gggAi0AkAxFDQEgAigClAwMAwtBD0GYs8EAQYSrwQAQvgoMAgsgAi0AkQwiYkECRgRAQRBBmLPBAEGEq8EAEL4KDAILIAJBBjYCRCACQQQ2AvQCIAIgATYC8AIgAkGQDGoiBCACQfACaiIDEOUDIAIoApQMIhUhCiACKAKQDCIdQYGAgIB4Rg0PIB1BgICAgHhGDQIgAigCmAwhCCAEIAMQggQgAigClAwiEiEKIAIoApAMIg5BgYCAgHhGDQ4gDkGAgICAeEYNBSACKAKYDCEGIAQgAxCCBCACKAKUDCEKIAIoApAMIg1BgYCAgHhGDQ0gDUGAgICAeEYNBAJ/IAIoAvQCBEAgAigC8AIiCSgCBCIDQQRPDQUgAkKBygA3A5AMIAQQog0MAQtBA0GMsMEAQYSrwQAQvgoLIQEgDQRAIAogDUECdEEEEIgPCyABIQoMDQtBBkGYs8EAQYSrwQAQvgoLIQMgAEECNgLEByAAIAM2AgAMDgtBAEGMsMEAQYSrwQAQvgohCgwMCyACKAKYDCEEIAkgA0EEazYCBCAJIAkoAgAiA0EEajYCACACQgQ3AnwgAkIANwJ0IAJCgICAgMAANwJsIAIgBDYCaCACIAo2AmQgAiANNgJgIAIgBjYCXCACIBI2AlggAiAONgJUIAIgCDYCUCACIBU2AkwgAiAdNgJIIAIgAygAADYChAEgAkEFNgJEIAJBBDYCnBQgAiABNgKYFCACQZAMaiACQZgUahB/IAIoApQMIhshAyACKAKQDCIXQYGAgIB4Rg0HIBdBgICAgHhGDQIgAikCsAwhbiACKAKsDCEyIAIoAqgMIRggAigCpAwhQSACKAKgDCEJIAIoApwMIQwgAigCmAwhHSACQQA2AuAMIAJCEDcCoAwgAkIANwKYDCACQoCAgICACDcCkAwgAkIANwLYDCACQoCAgIDAADcC0AwgAkIANwLIDCACQoCAgIDAADcCwAwgAkIENwK4DCACQgA3ArAMIAJCgICAgMAANwKoDAJAIAIoApwUIhYEQCACIBZBAWsiOTYCnBQCfyACKAKYFCIRKAIEIgZBB00EQCACQoHKADcD8AJBASENIAJB8AJqEKINDAELIBEgBkEIayIGNgIEIBEgESgCACIDQQhqNgIAIAJBOGogAykAABCnCCACKAI4IQ0gAigCPAshAyANQQFxDQggA0UNBSADQQ9PBH9Bf0GAICADIANBgCBPG0EDdEH4/wNxQQduQQFrZ3ZBAWoFQQRBCEEQIANBCEkbIANBBEkbCyIEQRRsQQdqQfj/P3EiFSAEQQhqIgpqIhJBCBCzDiIIRQRAQQggEkGQxMQAKAIAIgBBzAggABsRAAAACyAIIBVqIRIgCgRAIBJB/wEgCvwLAAsgAkEANgL8AiACIARBAWsiCCAEQQN2QQdsIARBCUkbNgL4AiACIAg2AvQCIAIgEjYC8AIgAkKJ2bnijtO+lwg3A4ADIBEoAgAhDSACQfgCaiExA0AgBkEESQ0CIBEgBkEEayIENgIEIBEgDUEEajYCACAEQQRJDQggDSgAACEaIBEgBkEIayIENgIEIBEgDUEIajYCACAEQQRJDQggDSgABCEKIBEgBkEMayIENgIEIBEgDUEMajYCACAEQQRJDQggDSgACCEVIBEgBkEQayIENgIEIBEgDUEQajYCACAEQQNNDQggDSgADCESIBEgBkEUayIGNgIEIBEgDUEUaiIeNgIAIAIpA4ADIBqtIAqtQiCGhIUiY0IgiCJnIBJBt9OwhXxzrSJmfiBjQv////8PgyJlIBVB3aHxy3xzrSJjfoUgZSBmfiBjIGd+hUIgiIUhYyANKAAQISwgAigC+AJFBEAgAkEoaiACQfACaiIEIARBEGoQ+AELIANBAWshAyACKAL0AiIUIGOncSEEIGNCGYgib0L/AINCgYKEiJCgwIABfiFwQQAhJCACKALwAiENQQAhDgNAAn8CQAJAIHAgBCANaikAACJrhSJjQoGChIiQoMCAAX0gY0J/hYNCgIGChIiQoMCAf4MiakIAUgRAA0ACQCANQQAganqnQQN2IARqIBRxayILQRRsaiIIQRRrKAIAIBpHDQAgCEEQaygCACAKRw0AIBUgCEEMaygCAEcNACASIAhBCGsoAgBGDQMLIGpCAX0gaoMiakIAUg0ACwsga0KAgYKEiJCgwIB/gyFqIA5BAUcEQCBqUA0CIGp6p0EDdiAEaiAUcSEQC0EBIGoga0IBhoNQDQIaIA0gEGosAAAiLUEATgRAIA0gDSkDAEKAgYKEiJCgwIB/g3qnQQN2IhBqLQAAIS0LIA0gEGogb6dB/wBxIgQ6AAAgDSAQQQhrIBRxakEIaiAEOgAAIA1BACAQayILQRRsaiIEQRRrIBo2AgAgBEEQayAKNgIAIARBDGsgFTYCACAEQQhrIBI2AgAgAiACKAL8AkEBajYC/AIgAiACKAL4AiAtQQFxazYC+AILIA0gC0EUbGpBBGsgLDYCACAeIQ0gAw0DIAJBoApqIDFBCGopAwA3AwAgAiAxKQMANwOYCiACKAL0AiIDIAIoAvACIg0NChoMDAtBAAshDiAkQQhqIiQgBGogFHEhBAwACwALAAtBAUGUscEAQYSrwQAQvgohAwwHCwwFC0ECQYywwQBBhKvBABC+CiEKDAgLQQFBjLDBAEGEq8EAEL4KIQoMCAtBAEGUscEAQYSrwQAQvgohAwwECyACQaAKakKJ2bnijtO+lwg3AwAgAkIANwOYCkHIy8EAIQ1BAAshBCACQbACaiACQaAKaikDADcDACACIAIpA5gKNwOoAgJAAkACfwJAIDkEQCACIBZBAmsiBjYCnBQgESgCBCIIQQRJBEAgAkKBygA3A/ACIAJB8AJqEKINDAMLIBEgCEEEayIDNgIEIBEgESgCACISQQRqNgIAIAZFDQEgEigAACEGIAIgFkEDazYCnBQgA0EDTQRAIAJCgcoANwPwAiACQfACahCiDQwDCyARIAhBCGs2AgQgESASQQhqNgIAQQEhHAJAIBIoAAQiAw4CBAUACyACQQE6APACIAIgA603A/gCIAJB8AJqQbytwQBBhKvBABDvCgwCC0ECQZSxwQBBhKvBABC+CgwBC0EDQZSxwQBBhKvBABC+CgshAyAEBEAgDSAEQRRsQRtqQXhxIgFrIAEgBGpBCWpBCBCIDwsMAwtBACEcCyACQcgBaiACQZAMaiIVQdQA/AoAACACQcABaiACQbACaikDADcDACACQaQCaiACQesTaigAADYAACACIAIpA6gCNwO4ASACIAIoAOgTNgChAiACIBw6AKACIAIgBjYCnAIgAiAENgK0ASACIA02ArABIAIgbjcDqAEgAiAyNgKkASACIBg2AqABIAIgQTYCnAEgAiAJNgKYASACIAw2ApQBIAIgHTYCkAEgAiAbNgKMASACIBc2AogBIAJBBDYCRCACQSBqIQRBCEEEELMOIgNFBEBBBEEIQZDExAAoAgAiAEHMCCAAGxEAAAALIANCgYCAgBA3AgAgBEGw2MEANgIEIAQgAzYCACACIAIoAiQiNjYC7BMgAiACKAIgIg42AugTIAJBAjYCnBQgAiABNgKYFCAVIAJBmBRqEPACIAIoApQMIQgCQAJAAkAgAigCkAwiM0GBgICAeEYNAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAzQYCAgIB4RwRAIAIoApwURQ0BIAIoApgMIRICfyACKAKYFCIMKAIEIgNBB00EQCACQoHKADcDkAxBASENIBUQog0MAQsgDCADQQhrNgIEIAwgDCgCACIDQQhqNgIAIAJBGGogAykAABCnCCACKAIYIQ0gAigCHAshFSANQQFxBEAgFSEEDAMLIBVFDQRBpJIBIBUgFUGkkgFPGyIGQThsIgRBBBCzDiIDRQ0GIAJBADYCuAkgAiADNgK0CSACIAY2ArAJIAJB+AJqIUcgAkGYDGohJANAIAJBkAxqISZBACEGQQAhCkIAIWRBACELQQAhCUEAISBBACEoQgAhcUEAIRhBACEpQQAhGyMAQZADayIFJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAn8gDCgCBCIEQQRPBEAgDCAEQQRrIgM2AgQgDCAMKAIAIg1BBGo2AgAgA0EESQRAIAVCgcoANwPIAiAFQcgCahCiDQwCCyANKAAAITsgDCAEQQhrIgM2AgQgDCANQQhqNgIAIANBBEkNAyANKAAEITwgDCAEQQxrIgM2AgQgDCANQQxqNgIAIANBBE8NAiAFQoHKADcDyAIgBUHIAmoQog0MBAsgBUKBygA3A8gCIAVByAJqEKINCyEDICZBgICAgHg2AgAgJiADNgIEDB8LIA0oAAghPSAMIARBEGsiAzYCBCAMIA1BEGo2AgAgDSgADCFCAn8gA0EHTQRAIAVCgcoANwPIAkEBIRwgBUHIAmoQog0MAQsgDCAEQRhrNgIEIAwgDUEYajYCACAFQcgBaiANKQAQEKcIIAUoAsgBIRwgBSgCzAELIQMgHEEBcQRAIAMhHgwdCyADRQRAQQQhHkEAIRwMHgtB4TAgAyADQeEwTxsiCUGoAWwiBkEEELMOIgRFDQIgBUEANgLcASAFIAQ2AtgBIAUgCTYC1AEgBUHQAmohGwNAAn8gDCgCBCIgQQdNBEAgBUKBygA3A8gCQQEhHCAFQcgCahCiDQwBCyAMICBBCGsiIDYCBCAMIAwoAgAiBEEIajYCACAFQcABaiAEKQAAEKcIIAUoAsABIRwgBSgCxAELIR4gHEEBcQ0cAkAgHkUEQEEEIR5BACENQQAhIQwBC0GAgAEgHiAeQYCAAU8bIglBBnQiBkEEELMOIgRFDQUgBSAENgLMAiAFIAk2AsgCQQAhBCAFQQA2AtACIAwoAgAhFkEAISEDQCAgQQRJDQcgDCAgQQRrIg02AgQgDCAEIBZqIgZBBGoiCTYCACANQQRJDQcgBigAACEaIAwgDUEEayIGNgIEIAwgCUEEaiINNgIAIAZBBEkNByAJNQAAIWcgDCAGQQRrIgY2AgQgDCANQQRqIgk2AgAgBkEESQ0IIA01AAAhZSAMIAZBBGsiBjYCBCAMIAlBBGoiDTYCACAGQQRJDQggCSgAACEUIAwgBkEEayIGNgIEIAwgDUEEaiIJNgIAIAZBBEkNCCANNQAAIWYgDCAGQQRrIgY2AgQgDCAJQQRqIg02AgAgBkEESQ0JIAk1AAAhYyAMIAZBBGsiBjYCBCAMIA1BBGoiCTYCACAGQQRJDQogDSoAACGIASAMIAZBBGsiBjYCBCAMIAlBBGoiDTYCAAJAIAZBBE8EQCAJKAAAIQsgDCAGQQRrIgY2AgQgDCANQQRqIgk2AgAgBkEESQ0NIA0oAAAhECAMIAZBBGsiBjYCBCAMIAlBBGoiDTYCACAGQQRJDQ4gCSoAACGCASAMIAZBBGsiBjYCBCAMIA1BBGoiCTYCACAGQQRJDQ4gDSgAACENIAwgBkEEayIGNgIEIAwgCUEEaiIXNgIAIAZBBEkNDyAJKAAAIQkgDCAGQQRrIgY2AgQgDCAXQQRqIhg2AgAgBkEESQ0QIBcqAAAhgwEgDCAGQQRrIhc2AgQgDCAYQQRqIgY2AgAgF0EESQ0QIBgoAAAhGCAMIBdBBGsiETYCBCAMIAZBBGoiFzYCACARQQRPDQEgBUEAOgD7AiAFQSU7APkCIAVBADYC/AIgBUEBOgD4AgwfCyAFQoHKADcD+AIMHgsgZUIghiBnhCFlIGNCIIYgZoQhYyAGKAAAIQYgDCARQQRrIiA2AgQgDCAXQQRqNgIAIBcqAAAhhAEgBSgCyAIgIUYEQCAFQcgCakHIq8EAEMQICyAFKALMAiAEaiIXIBo2AgAgF0E8aiCEATgCACAXQThqIIMBOAIAIBdBNGogggE4AgAgF0EwaiAGNgIAIBdBLGogGDYCACAXQShqIAk2AgAgF0EkaiANNgIAIBdBIGogEDYCACAXQRxqIAs2AgAgF0EYaiCIATgCACAXQRBqIGM3AgAgF0EMaiAUNgIAIBdBBGogZTcCACAFICFBAWoiITYC0AIgBEFAayEEIB4gIUcNAAsgBSgCzAIhHiAFKALIAiINQYKAgIB4SA0dCwJAAkAgDCgCBCIGQQRJDQAgDCgCACEJIAwgBkEEayIENgIEIAwgCUEEajYCACAEQQRJDQAgCSgAACFDIAwgBkEIayIENgIEIAwgCUEIajYCACAEQQRJDQAgCTUABCFkIAwgBkEMayIENgIEIAwgCUEMajYCACAEQQRJDQ8gCTUACCFxIAwgBkEQayIENgIEIAwgCUEQajYCACAEQQRJDQ8gCSgADCFIIAwgBkEUayIENgIEIAwgCUEUajYCACAEQQRJDQ8gCTUAECF4IAwgBkEYayIENgIEIAwgCUEYajYCACAEQQRJDRAgCTUAFCFzIAwgBkEcayIENgIEIAwgCUEcajYCAAJAAkAgBEEETwRAIAkoABghSSAMIAZBIGsiBDYCBCAMIAlBIGo2AgAgBEUEQCAFQoHKADcDyAIgBUHIAmoQog0hBAwgCyAJKAAcIUogDCAGQSFrIiA2AgQgDCAJQSFqNgIAAkACQCAJLQAgIgkOAgQAAQsgBUHIAmogDBDjBCAFKALMAiEYIAUoAsgCQQFHDQIgGCEEDCALQQxBBBCzDiIERQ1YIAQgCTYCBCAEQYSAgIB4NgIADB8LIAVCgcoANwPIAiAFQcgCahCiDSEEDB4LIAVBqAJqIgRBEGogG0EQaikCADcDACAEQQhqIBtBCGopAgA3AwAgBSAbKQIANwOoAiAMKAIEISBBASEJCyAgRQRAIAVCgcoANwPIAiAFQcgCahCiDSEEDB0LIAwgIEEBazYCBCAMIAwoAgAiBEEBajYCAAJAAkACQAJAIAQtAAAiEA4CAwABCyAFQcgCaiAMEOMEIAUoAswCIQogBSgCyAJBAUcNASAKIQQMHwtBDEEEELMOIgRFDVcgBCAQNgIEIARBhICAgHg2AgAMHgsgBUH4AmoiBEEQaiAbQRBqKQIANwMAIARBCGogG0EIaikCADcDACAFIBspAgA3A/gCQQEhEAsgBUGQAmoiBkEQaiIsIAVB+AJqIgRBEGopAwA3AwAgBkEIaiJLIARBCGopAwA3AwAgBSAFKQP4AjcDkAIgBUEHNgLEAiAFIAw2AsACIAVByAJqIAVBwAJqEIUGIAUoAswCIRYgBSgCyAIiKUEDRgRAIBYhBAwdCyApQQJGDREgBSgC0AIhTCAFQcgCaiAFQcACahCFBiAFKALMAiEaIAUoAsgCIgZBA0YEQCAaIQQMHQsgBkECRg0SIAUoAsQCIjdFDRMgBSgCwAIiIigCBCILQQRJBEAgBUKBygA3A8gCIAVByAJqEKINIQQMHQsgBSgC0AIhTSAiIAtBBGsiBDYCBCAiICIoAgAiFEEEajYCAAJ/AkAgN0EBRwRAAkACQCAEQQRJDQAgFCgAACFOICIgC0EIayIENgIEICIgFEEIajYCACAEQQRJDQAgFCgABCFPICIgC0EMayIENgIEICIgFEEMajYCACAEQQRPDQELIAVBADoAywIgBUElOwDJAiAFQQA2AswCIAVBAToAyAIgBUHIAmoQog0hBAwgCyAUNQAIIXQgIiALQRBrIig2AgQgIiAUQRBqNgIAIDdBAkYNHSAUNQAMIWwgBSA3QQNrIlA2AsQCAn8gKEEHTQRAIAVCgcoANwPIAkEBISAgBUHIAmoQog0MAQsgIiALQRhrIig2AgQgIiAUQRhqNgIAIAVBuAFqIBQpABAQpwggBSgCuAEhICAFKAK8AQshBCAgQQFxDR8gBEUNAUGAgAEgBCAEQYCAAU8bIhdBBnQiFEEQELMOIgtFDRdBACElIAVBADYC0AIgBSALNgLMAiAFIBc2AsgCICIoAgAhE0EAIUQDQCAoQQRJDRkgIiAoQQRrIhQ2AgQgIiATICVqIgtBBGoiFzYCACAUQQRJDRkgCygAACEtICIgFEEEayILNgIEICIgF0EEaiIUNgIAIAtBBEkNGSAXNQAAIWcgIiALQQRrIgs2AgQgIiAUQQRqIhc2AgAgC0EESQ0aIBQ1AAAhZSAiIAtBBGsiCzYCBCAiIBdBBGoiFDYCACALQQRJDRsgFyoAACGCASAiIAtBBGsiCzYCBCAiIBRBBGoiFzYCACALQQRJDRwgFCoAACGDASAiIAtBBGsiCzYCBCAiIBdBBGoiFDYCACALQQRJDR0gFyoAACGEASAiIAtBBGsiCzYCBCAiIBRBBGoiFzYCACALQQRJDR0gFCgAACEnICIgC0EEayILNgIEICIgF0EEaiIUNgIAIAtBBEkNHSAXNQAAIWYgIiALQQRrIgs2AgQgIiAUQQRqIhc2AgACQCALQQRPBEAgFDUAACFjICIgC0EEayILNgIEICIgF0EEaiIUNgIAIAtBBE8EQCAXKAAAISAgIiALQQRrIgs2AgQgIiAUQQRqIhc2AgAgC0EDSw0CCyAFQQA6APsCIAVBJTsA+QIgBUEANgL8AiAFQQE6APgCDCELIAVBADoA+wIgBUElOwD5AiAFQQA2AvwCIAVBAToA+AIMIAsgFCgAACEcICIgC0EEayILNgIEICIgF0EEaiIUNgIAIAtBA00EQCAFQQA6APsCIAVBJTsA+QIgBUEANgL8AiAFQQE6APgCDCALIBcoAAAhGSAiIAtBBGsiCzYCBCAiIBRBBGoiFzYCACALQQNNBEAgBUEAOgD7AiAFQSU7APkCIAVBADYC/AIgBUEBOgD4AgwgCyAUKAAAIREgIiALQQRrIgs2AgQgIiAXQQRqIhQ2AgAgC0EDTQRAIAVCgcoANwP4AgwgCyAXKAAAIRcgIiALQQRrIio2AgQgIiAUQQRqIgs2AgAgKkEDTQRAIAVBADoA+wIgBUElOwD5AiAFQQA2AvwCIAVBAToA+AIMIAsgZUIghiBnhCFlIGNCIIYgZoQhYyAUKAAAIRQgIiAqQQRrIig2AgQgIiALQQRqNgIAIAsoAAAhCyAFKALIAiBERgRAIAVByAJqQcirwQAQxQgLIAUoAswCICVqIiogLTYCACAqQTxqIAs2AgAgKkE4aiAUNgIAICpBNGogFzYCACAqQTBqIBE2AgAgKkEsaiAZNgIAICpBKGogHDYCACAqQSRqICA2AgAgKkEcaiBjNwIAICpBGGogJzYCACAqQRRqIIQBOAIAICpBEGoggwE4AgAgKkEMaiCCATgCACAqQQRqIGU3AgAgBSBEQQFqIkQ2AtACICVBQGshJSAEIERHDQALIAUoAswCIgQgBSgCyAIiJUGCgICAeE4NAhoMHwtBA0HIscEAQYSrwQAQvgohBAweC0EAISVBACFEQRALIRQCfwJAIFAEQCAiKAIEIgtBAkkEQCAFQoHKADcDyAIgBUHIAmoQog0MAwsgIiALQQJrIgQ2AgQgIiAiKAIAIhxBAmo2AgAgN0EERg0BIARBA0sNBCAFQoHKADcDyAIgBUHIAmoQog0MAgtBBUHIscEAQYSrwQAQvgoMAQtBBkHIscEAQYSrwQAQvgoLIQQgJQRAIBQgJUEGdEEQEIgPCwwcCyAFQQA6AMsCIAVBJTsAyQIgBUEANgLMAiAFQQE6AMgCIAVByAJqEKINIQQMGwsgcUIghiBkhCFkIHNCIIYgeIQhZSBsQiCGIHSEIWMgHC8AACEZICIgHEEGajYCACAiIAtBBms2AgQgBUH4AWoiC0EIaiIRIAVBqAJqIgRBCGopAwA3AwAgC0EQaiILIARBEGopAwA3AwAgBUHgAWoiBEEIaiIoIEspAwA3AwAgBEEQaiIXICwpAwA3AwAgBSAFKQOoAjcD+AEgBSAFKQOQAjcD4AEgHCgAAiEEIAUoAtwBIhwgBSgC1AFGBEAgBUHUAWpByKvBABCXCAsgBSgC2AEgHEGoAWxqIiAgGDYCBCAgIAk2AgAgICAFKQP4ATcCCCAgIAo2AiQgICAQNgIgICAgBSkD4AE3AiggICBKNgKkASAgIEk2AqABICAgZTcCmAEgICBINgKUASAgIGQ3AowBICAgQzYCiAEgICAhNgKEASAgIB42AoABICAgDTYCfCAgIBk7AXggICAENgJ0ICAgYzcCbCAgIE82AmggICBONgJkICAgRDYCYCAgIBQ2AlwgICAlNgJYICAgTTYCVCAgIBo2AlAgICAGNgJMICAgTDYCSCAgIBY2AkQgICApNgJAICBBEGogESkDADcCACAgQRhqIAspAwA3AgAgIEEwaiAoKQMANwIAICBBOGogFykDADcCACAFIBxBAWoiHDYC3AEgA0EBayIDDQALIAUoAtgBIR4gBSgC1AEiIEGCgICAeE4NHQwcCyAFQoHKADcDyAIgBUHIAmoQog0LIQMgJkGAgICAeDYCACAmIAM2AgQMHAtBBCAGQbirwQAQ0w0AC0EEIAZBuKvBABDTDQALIAVBADoA+wIgBUElOwD5AiAFQQA2AvwCIAVBAToA+AIMFQsgBUEAOgD7AiAFQSU7APkCIAVBADYC/AIgBUEBOgD4AgwUCyAFQQA6APsCIAVBJTsA+QIgBUEANgL8AiAFQQE6APgCDBMLIAVCgcoANwP4AgwSCyAFQQA6APsCIAVBJTsA+QIgBUEANgL8AiAFQQE6APgCDBELIAVBADoA+wIgBUElOwD5AiAFQQA2AvwCIAVBAToA+AIMEAsgBUEAOgD7AiAFQSU7APkCIAVBADYC/AIgBUEBOgD4AgwPCyAFQQA6APsCIAVBJTsA+QIgBUEANgL8AiAFQQE6APgCDA4LIAVBADoAywIgBUElOwDJAiAFQQA2AswCIAVBAToAyAIgBUHIAmoQog0hBAwMCyAFQoHKADcDyAIgBUHIAmoQog0hBAwLC0EAQcixwQBBhKvBABC+CiEEDAoLQQFByLHBAEGEq8EAEL4KIQQMCQtBAkHIscEAQYSrwQAQvgohBAwIC0EQIBRBuKvBABDTDQALIAVBADoA+wIgBUElOwD5AiAFQQA2AvwCIAVBAToA+AIMBQsgBUEAOgD7AiAFQSU7APkCIAVBADYC/AIgBUEBOgD4AgwECyAFQQA6APsCIAVBJTsA+QIgBUEANgL8AiAFQQE6APgCDAMLIAVBADoA+wIgBUElOwD5AiAFQQA2AvwCIAVBAToA+AIMAgsgBUEAOgD7AiAFQSU7APkCIAVBADYC/AIgBUEBOgD4AgwBC0EEQcixwQBBhKvBABC+CiEEDAELIAVB+AJqEKINIQQgBSgCyAIiA0UNACAFKALMAiADQQZ0QRAQiA8LIA0EQCAeIA1BBnRBBBCIDwsgBCEeDAELIAVB+AJqEKINIR4gBSgCyAIiA0UNACAFKALMAiADQQZ0QQQQiA8LIAUoAtgBIQQgBSgC3AEiHARAIARBgAFqIQYDQCAGQQRrKAIAIgMEQCAGKAIAIANBBnRBBBCIDwsgBkEoaygCACIDBEAgBkEkaygCACADQQZ0QRAQiA8LIAZBqAFqIQYgHEEBayIcDQALCyAFKALUASIDRQ0AIAQgA0GoAWxBBBCIDwsgJkGAgICAeDYCACAmIB42AgQMAQsCQCAMKAIEIhBFBEAgBUKBygA3A8gCIAVByAJqEKINIQMMAQsgDCAQQQFrIgM2AgQgDCAMKAIAIhRBAWo2AgAgFC0AACIXQQJPBEBBDEEEELMOIgNFDTYgAyAXOgAEIANBgoCAgHg2AgAMAQsgA0UEQCAFQoHKADcDyAIgBUHIAmoQog0hAwwBCyAMIBBBAmsiAzYCBCAMIBRBAmo2AgAgFC0AASIWQQJPBEBBDEEEELMOIgNFDTYgAyAWOgAEIANBgoCAgHg2AgAMAQsgA0UEQCAFQoHKADcDyAIgBUHIAmoQog0hAwwBCyAMIBBBA2s2AgQgDCAUQQNqNgIAQQAhJSAFQZACaiEnAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgFC0AAiIEDgIMAAELIANBBE0EQCAFQoHKADcD+AIgBUH4AmoQog0hAwwQCyAMIBBBB2siCjYCBCAMIBRBB2o2AgBBh4CAgHghDUIAIXMCQAJAAkACQCAUKAADIgQOCQECDQwLCgkIDgALIAVBAToA+AIgBSAErTcDgAMgBUH4AmpB5LbBAEGEq8EAEO8KIQMMEgsgBUEDNgKsAiAFIAw2AqgCIAVB+AJqIAVBqAJqEK8EIAUoAvwCIQMgBSgC+AIiDUGBgICAeEYNESANQYCAgIB4Rg0FAkAgBSgCrAIiBARAIAUoAoADISkgBSAEQQFrNgKsAiAFKAKoAiIJKAIEIgZBBEkNAyAJKAIAIQogCSAGQQRrIgQ2AgQgCSAKQQRqNgIAIARBBEkNAyAKKAAAISggCSAGQQhrIgQ2AgQgCSAKQQhqNgIAIARBBEkNAyAKKAAEIRggCSAGQQxrIgQ2AgQgCSAKQQxqNgIAAkAgBEEESQ0AIAooAAghJyAJIAZBEGsiBDYCBCAJIApBEGo2AgAgBEEESQ0AIAooAAwhGyAJIAZBFGsiBDYCBCAJIApBFGo2AgAgBEEETw0CCyAFQQA6APsCIAVBJTsA+QIgBUEANgL8AiAFQQE6APgCIAVB+AJqEKINIQsMEgtBAUGot8EAQYSrwQAQvgohCwwRCyAKNQAQIWUgCSAGQRhrNgIEIAkgCkEYajYCACAKNQAUIWMgBUH4AmogBUGoAmoQrwQgBSgC/AIhCyAFKAL4AiIGQYGAgIB4Rg0QIAZBgICAgHhHDQRBAkGot8EAQYSrwQAQvgohCwwQCyAKRQRAIAVCgcoANwP4AiAFQfgCahCiDSEDDBELIAwgEEEIayILNgIEIAwgFEEIaiINNgIAAkAgFC0AByInQQJPBEBBDEEEELMOIgNFDQEgAyAnOgAEIANBgoCAgHg2AgAMEgsCfyAKQQhNBEAgBUKBygA3A/gCQQEhBCAFQfgCahCiDQwBCyAMIBBBEGsiCzYCBCAMIBRBEGoiDTYCACAFQSBqIBQpAAgQpwggBSgCICEEIAUoAiQLIQMgBEEBcQ0RIANFDQMgA0EPTwR/QX9BgCAgAyADQYAgTxtBA3RB+P8DcUEHbkEBa2d2QQFqBUEEQQhBECADQQhJGyADQQRJGwsiBEEMbEEHakH4/z9xIgogBEEIaiIQaiIJQQgQsw4iBkUNEyAGIApqIQogEARAIApB/wEgEPwLAAsgBUEANgKEAyAFIARBAWsiBiAEQQN2QQdsIARBCUkbNgKAAyAFIAY2AvwCIAUgCjYC+AIgBUKJ2bnijtO+lwg3A4gDIAVBiANqIRADQAJAAkACQCALQQNNBEAgBUKBygA3A6gCIAVBqAJqEKINIQMMAQsgDCALQQRrIgQ2AgQgDCANQQRqNgIAIARBB00EQCAFQoHKADcDqAIgBUGoAmoQog0hAwwBCyANKAAAIRogDCALQQxrIgQ2AgQgDCANQQxqNgIAIA0pAAQiZkKAgICAEFoEQCAFQQE6AKgCIAUgZjcDsAIgBUGoAmogBUHgAWpBgKrBABDvCiEDDAELIARFBEAgBUKBygA3A6gCIAVBqAJqEKINIQMMAQsgDCALQQ1rIgs2AgQgDCANQQ1qIgQ2AgAgDS0ADCIUQQJJDQFBDEEEELMOIgNFDQIgAyAUOgAEIANBgoCAgHg2AgALIAUoAvwCIgZFDRQgBSgC+AIgBkEMbEETakF4cSIEayAEIAZqQQlqQQgQiA8MFAsgGiAFKQOIAyJjp3OtImVC3aHxywx+IGNCIIgiY0K307CFDH6FIGVCt9OwhQx+IGNC3aHxywx+hUIgiIUhYyAFKAKAA0UEQCAFQRBqIAVB+AJqIBAQgQILIANBAWshAyBmpyEbIAUoAvwCIhggY6dxISEgY0IZiCJmQv8Ag0KBgoSIkKDAgAF+IWVBACEKIAUoAvgCIRFBACEJA0ACfwJAAkACQCARICFqKQAAImcgZYUiY0KBgoSIkKDAgAF9IGNCf4WDQoCBgoSIkKDAgH+DImRCAFIEQANAIBogESBkeqdBA3YgIWogGHFBdGxqIgZBDGsoAgBGDQIgZEIBfSBkgyJkQgBSDQALCyBnQoCBgoSIkKDAgH+DIWQgCUEBRwRAIGRQDQMgZHqnQQN2ICFqIBhxIQ0LQQEgZCBnQgGGg1ANAxogDSARaiwAACIhQQBOBEAgESARKQMAQoCBgoSIkKDAgH+DeqdBA3YiDWotAAAhIQsgDSARaiBmp0H/AHEiBjoAACARIA1BCGsgGHFqQQhqIAY6AAAgESANQXRsaiIGQQxrIBo2AgAgBkEIayAbNgIAIAZBBGsgFDoAACAFIAUoAoQDQQFqNgKEAyAFIAUoAoADICFBAXFrNgKAAwwBCyAGQQRrIBQ6AAAgBkEIayAbNgIACyAEIQ0gAw0EIAUoAvwCIQYgBSgC+AIiKUUEQCAGIQMMFwsgBSgCjAMhGCAFKAKIAyEoIAUoAoQDIQkgBSgCgAMhC0GAgICAeCENDBELQQALIQkgISAKQQhqIgpqIBhxISEMAAsACwsMRgsMRQsgBUEAOgD7AiAFQSU7APkCIAVBADYC/AIgBUEBOgD4AiAFQfgCahCiDSELDA4LQQxBBBCzDiIDBEAgAyAENgIEIANBhICAgHg2AgAMDwsMQwtByMvBACEpQQAhCUGJ2bnifiEoQZj1u8EAIRhBACELQQAhBkGAgICAeCENDAgLIGNCIIYgZYQhZCAFKAKAAyEJICdBCHatQiiGIXMMBwtBAEGot8EAQYSrwQAQvgohAwwLCyAKRQRAIAVCgcoANwP4AiAFQfgCahCiDSEDDAsLIAwgEEEIazYCBCAMIBRBCGo2AgAgFC0AByInQQJPBEBBDEEEELMOIgNFDUAgAyAnOgAEIANBgoCAgHg2AgAMCwsCfyAKQQhNBEAgBUKBygA3A/gCQQEhBCAFQfgCahCiDQwBCyAMIBBBEGs2AgQgDCAUQRBqNgIAIAVBsAFqIBQpAAgQpwggBSgCsAEhBCAFKAK0AQshAyAEQQFxDQoCfyADRQRAQcjLwQAhIUEADAELIANBD08Ef0F/QYAgIAMgA0GAIE8bQQN0Qfj/A3FBB25BAWtndkEBagVBBEEIQRAgA0EISRsgA0EESRsLIgRBHGxBB2pB+P8/cSIJIARBCGoiDWoiC0EIELMOIgpFBEBBCCALQZDExAAoAgAiAEHMCCAAGxEAAAALIAkgCmohISANBEAgIUH/ASAN/AsACyAEQQFrIiUgBEEDdkEHbCAEQQlJGwshBCAFQQA2AoQDIAUgBDYCgAMgBSAlNgL8AiAFICE2AvgCIAVCidm54o7TvpcINwOIAyAFQbECaiEaIAVBiANqIRQDQAJAAn8gA0UEQEECIQ1BAAwBCwJAAn8CQAJAIAwoAgQiCkEESQ0AIAwoAgAhCSAMIApBBGsiBDYCBCAMIAlBBGo2AgAgBEEESQ0AIAkoAAAhCyAMIApBCGsiBDYCBCAMIAlBCGo2AgAgBEEESQ0AIAkoAAQhKSAMIApBDGsiBDYCBCAMIAlBDGo2AgAgBEEDSw0BCyAFQoHKADcDqAIgBUGoAmoQog0MAQsgCSgACCEoIAwgCkEQazYCBCAMIAlBEGo2AgAgCSgADCEYIAVBqAJqIAwQ/QUgBS0AsAIiDUECRw0BIAUoAqgCCyEDIAUoAvwCIgZFDQ4gBSgC+AIgBkEcbEEjakF4cSIEayAEIAZqQQlqQQgQiA8MDgsgBUHWAWogGkECai0AADoAACAFIBovAAA7AdQBIAUpA6gCIXEgA0EBawshAyAFQeIBaiIJIAVB1gFqLQAAOgAAIAUgBS8B1AE7AeABIA1BAkYNACAFKQOIA0KEgICAEIUiY0L/////D4MiZyALQd2h8ct8c60iZn4gY0IgiCJlIClBt9OwhXxzrSJjfoUgYyBnfiBlIGZ+hUIgiYUgKK0gGK1CIIaEImeFImNCIIgiZUK307CFDH4gY0L/////D4MiY0LdofHLDH6FIGVC3aHxywx+IGNCt9OwhQx+hUIgiIUhYyAFKAKAA0UEQCAFQaABaiAFQfgCaiAUEOMBCyAFKAL8AiIbIGOncSElIGNCGYgiZkL/AINCgYKEiJCgwIABfiFlQQAhBCAFKAL4AiEZQQAhEANAAn8CQAJAAkAgGSAlaikAACJsIGWFImNCgYKEiJCgwIABfSBjQn+Fg0KAgYKEiJCgwIB/gyJkQgBSBEADQAJAIBlBACBkeqdBA3YgJWogG3FrIgpBHGxqIhFBHGsoAgAgC0cNACApIBFBGGsoAgBHDQAgEUEUaygCACAoRw0AIBFBEGsoAgAgGEYNAwsgZEIBfSBkgyJkQgBSDQALCyBsQoCBgoSIkKDAgH+DIWQgEEEBRwRAIGRQDQMgZHqnQQN2ICVqIBtxIQYLQQEgZCBsQgGGg1ANAxogBiAZaiwAACIlQQBOBEAgGSAZKQMAQoCBgoSIkKDAgH+DeqdBA3YiBmotAAAhJQsgBiAZaiBmp0H/AHEiBDoAACAZIAZBCGsgG3FqQQhqIAQ6AAAgGUEAIAZrIgpBHGxqIgRBHGsgCzYCACAEQRhrICk2AgAgBEEUayBnNwIAIARBDGsgcTcCACAEQQRrIA06AAAgBSAFKAKEA0EBajYChAMgBSAFKAKAAyAlQQFxazYCgAMMAQsgEUEEayANOgAAIBFBDGsgcTcCAAsgGSAKQRxsakEDayIEIAUvAeABOwAAIARBAmogCS0AADoAAAwEC0EACyEQICUgBEEIaiIEaiAbcSElDAALAAsLIAUoAvwCIQYgBSgC+AIiKUUEQCAGIQMMCwsgBSgCjAMhGCAFKAKIAyEoIAUoAoQDIQkgBSgCgAMhC0GGgICAeCENDAULIApFBEAgBUKBygA3A/gCIAVB+AJqEKINIQMMCgsgDCAQQQhrNgIEIAwgFEEIajYCAAJ/IBQtAAciJ0ECTwRAQQxBBBCzDiIDRQ1AIAMgJzoABCADQYKAgIB4NgIADAsLAn8gCkEITQRAIAVCgcoANwP4AkEBIQQgBUH4AmoQog0MAQsgDCAQQRBrNgIEIAwgFEEQajYCACAFQZgBaiAUKQAIEKcIIAUoApgBIQQgBSgCnAELIQMgBEEBcQ0KIAMEQCADQQ9PBH9Bf0GAICADIANBgCBPG0EDdEH4/wNxQQduQQFrZ3ZBAWoFQQRBCEEQIANBCEkbIANBBEkbCyIEQRhsQfj/P3EiDSAEQQhqIhBqIglBCBCzDiIKRQ0NIAogDWohCSAQBEAgCUH/ASAQ/AsACyAFQQA2AoQDIAUgBEEBayIKIARBA3ZBB2wgBEEJSRs2AoADIAUgCjYC/AIgBSAJNgL4AiAFQonZueKO076XCDcDiAMgBUGxAmohFCAFQYgDaiENA0ACQAJ/AkACQCAMKAIEIgpBBEkNACAMKAIAIQkgDCAKQQRrIgQ2AgQgDCAJQQRqNgIAIARBBEkNACAJKAAAIRogDCAKQQhrIgQ2AgQgDCAJQQhqNgIAIARBA0sNAQsgBUKBygA3A6gCIAVBqAJqEKINDAELIAkoAAQhCyAMIApBDGs2AgQgDCAJQQxqNgIAIAkoAAghBCAFQagCaiAMEP0FIAUtALACIhtBAkcNASAFKAKoAgshAyAFKAL8AiIERQ0NIAUoAvgCIARBaGxqQRhrIARBGWxBIWpBCBCIDwwNCyAFQeIBaiIKIBRBAmotAAA6AAAgBSAULwAAOwHgASAFKQOIA0KDgICAEIUiY0IgiCJsIAutImdCt9OwhQyFImZ+IGNC/////w+DImUgGkHdofHLfHOtImN+hSBlIGZ+IGMgbH6FQiCJhSJjQv////8PgyAErSJmhSJlQt2h8csMfiBjQiCIImNCt9OwhQx+hSBlQrfTsIUMfiBjQt2h8csMfoVCIIiFIWUgZkIghiFjIAUpA6gCIXQgBSgCgANFBEAgBUGIAWogBUH4AmogDRDsAQsgA0EBayEDIGMgZ4QhZyAFKAL8AiIRIGWncSElIGVCGYgiZkL/AINCgYKEiJCgwIABfiFlQQAhKCAFKAL4AiEZQQAhEANAAn8CQAJAAkAgGSAlaikAACJsIGWFImNCgYKEiJCgwIABfSBjQn+Fg0KAgYKEiJCgwIB/gyJkQgBSBEADQAJAIBlBACBkeqdBA3YgJWogEXFrIglBGGxqIhhBGGsoAgAgGkcNACAYQRRrKAIAIAtHDQAgGEEQaygCACAERg0DCyBkQgF9IGSDImRCAFINAAsLIGxCgIGChIiQoMCAf4MhZCAQQQFHBEAgZFANAyBkeqdBA3YgJWogEXEhBgtBASBkIGxCAYaDUA0DGiAGIBlqLAAAIiVBAE4EQCAZIBkpAwBCgIGChIiQoMCAf4N6p0EDdiIGai0AACElCyAGIBlqIGanQf8AcSIEOgAAIBkgBkEIayARcWpBCGogBDoAACAZQQAgBmsiCUEYbGoiBEEYayAaNgIAIARBFGsgZzcCACAEQQxrIHQ3AgAgBEEEayAbOgAAIAUgBSgChANBAWo2AoQDIAUgBSgCgAMgJUEBcWs2AoADDAELIBhBBGsgGzoAACAYQQxrIHQ3AgALIBkgCUEYbGpBA2siBCAFLwHgATsAACAEQQJqIAotAAA6AAAgAw0DIAUoAvwCIQYgBSgC+AIiKUUEQCAGIQMMEAsgBSgCjAMhGCAFKAKIAyEoIAUoAoADIQsgBSgChAMMBQtBAAshECAlIChBCGoiKGogEXEhJQwACwALAAtByMvBACEpQZj1u8EAIRhBidm54n4hKEEAIQZBACELQQALIQlBhYCAgHghDQwECyAKRQRAIAVCgcoANwP4AiAFQfgCahCiDSEDDAkLIAwgEEEIazYCBCAMIBRBCGo2AgAgFC0AByInQQJPBEBBDEEEELMOIgNFDT4gAyAnOgAEIANBgoCAgHg2AgAMCQsCfyAKQQhNBEAgBUKBygA3A/gCQQEhBCAFQfgCahCiDQwBCyAMIBBBEGs2AgQgDCAUQRBqNgIAIAVBgAFqIBQpAAgQpwggBSgCgAEhBCAFKAKEAQshAyAEQQFxDQggAwRAIANBD08Ef0F/QYAgIAMgA0GAIE8bQQN0Qfj/A3FBB25BAWtndkEBagVBBEEIQRAgA0EISRsgA0EESRsLIgRBFGxBB2pB+P8/cSIJIARBCGoiDWoiCkEIELMOIgZFBEBBCCAKQZDExAAoAgAiAEHMCCAAGxEAAAALIAYgCWohCiANBEAgCkH/ASAN/AsACyAFQQA2AoQDIAUgBEEBayIGIARBA3ZBB2wgBEEJSRs2AoADIAUgBjYC/AIgBSAKNgL4AiAFQonZueKO076XCDcDiAMgBUGxAmohFCAFQYgDaiEJA0ACQAJ/AkAgDCgCBCIGQQRPBEAgDCgCACEKIAwgBkEEayIENgIEIAwgCkEEajYCACAEQQNLDQELIAVCgcoANwOoAiAFQagCahCiDQwBCyAKKAAAIRggDCAGQQhrNgIEIAwgCkEIajYCACAKKAAEIRogBUGoAmogDBD9BSAFLQCwAiINQQJHDQEgBSgCqAILIQMgBSgC/AIiBkUNCyAFKAL4AiAGQRRsQRtqQXhxIgRrIAQgBmpBCWpBCBCIDwwLCyAFQeIBaiIGIBRBAmotAAA6AAAgBSAULwAAOwHgASAFKQOIA0KCgICAEIUiY0IgiCJnIBpBt9OwhXxzrSJmfiBjQv////8PgyJlIBhB3aHxy3xzrSJjfoUgZSBmfiBjIGd+hUIgiIUhYyAFKQOoAiFsIAUoAoADRQRAIAVB8ABqIAVB+AJqIAkQ+gELIANBAWshAyAFKAL8AiIRIGOncSEhIGNCGYgiZkL/AINCgYKEiJCgwIABfiFlQQAhECAFKAL4AiEZQQAhCgNAAn8CQAJAAkAgGSAhaikAACJnIGWFImNCgYKEiJCgwIABfSBjQn+Fg0KAgYKEiJCgwIB/gyJkQgBSBEADQCAZQQAgZHqnQQN2ICFqIBFxayIbQRRsaiIEQRRrKAIAIBhGBEAgGiAEQRBrKAIARg0DCyBkQgF9IGSDImRCAFINAAsLIGdCgIGChIiQoMCAf4MhZCAKQQFHBEAgZFANAyBkeqdBA3YgIWogEXEhKQtBASBkIGdCAYaDUA0DGiAZIClqLAAAIgtBAE4EQCAZIBkpAwBCgIGChIiQoMCAf4N6p0EDdiIpai0AACELCyAZIClqIGanQf8AcSIEOgAAIBkgKUEIayARcWpBCGogBDoAACAZQQAgKWsiG0EUbGoiBEEUayAYNgIAIARBEGsgGjYCACAEQQxrIGw3AgAgBEEEayANOgAAIAUgBSgChANBAWo2AoQDIAUgBSgCgAMgC0EBcWs2AoADDAELIARBBGsgDToAACAEQQxrIGw3AgALIBkgG0EUbGpBA2siBCAFLwHgATsAACAEQQJqIAYtAAA6AAAgAw0DIAUoAvwCIQYgBSgC+AIiKUUEQCAGIQMMDgsgBSgCjAMhGCAFKAKIAyEoIAUoAoQDIQkgBSgCgAMhC0GEgICAeCENDAgLQQALIQogEEEIaiIQICFqIBFxISEMAAsACwALQcjLwQAhKUGY9bvBACEYQYnZueJ+IShBACELQQAhCUEAIQZBhICAgHghDQwDCyAKRQRAIAVCgcoANwP4AiAFQfgCahCiDSEDDAgLIAwgEEEIayILNgIEIAwgFEEIaiINNgIAIBQtAAciJ0ECTwRAQQxBBBCzDiIDRQ09IAMgJzoABCADQYKAgIB4NgIADAgLAn8gCkEITQRAIAVCgcoANwP4AkEBIQQgBUH4AmoQog0MAQsgDCAQQRBrIgs2AgQgDCAUQRBqIg02AgAgBUHoAGogFCkACBCnCCAFKAJoIQQgBSgCbAshAyAEQQFxDQcgAwRAIANBD08Ef0F/QYAgIAMgA0GAIE8bQQN0Qfj/A3FBB25BAWtndkEBagVBBEEIQRAgA0EISRsgA0EESRsLIgRBDGxBB2pB+P8/cSIKIARBCGoiEGoiCUEIELMOIgZFDQogBiAKaiEKIBAEQCAKQf8BIBD8CwALIAVBADYChAMgBSAEQQFrIgYgBEEDdkEHbCAEQQlJGzYCgAMgBSAGNgL8AiAFIAo2AvgCIAVCidm54o7TvpcINwOIAyAFQYgDaiEQA0ACQAJAAkAgC0EDTQRAIAVCgcoANwOoAiAFQagCahCiDSEDDAELIAwgC0EEayIENgIEIAwgDUEEajYCACAEQQdNBEAgBUKBygA3A6gCIAVBqAJqEKINIQMMAQsgDSgAACEaIAwgC0EMayIENgIEIAwgDUEMajYCACANKQAEImZCgICAgBBaBEAgBUEBOgCoAiAFIGY3A7ACIAVBqAJqIAVB4AFqQYCqwQAQ7wohAwwBCyAERQRAIAVCgcoANwOoAiAFQagCahCiDSEDDAELIAwgC0ENayILNgIEIAwgDUENaiIENgIAIA0tAAwiFEECSQ0BQQxBBBCzDiIDRQ0CIAMgFDoABCADQYKAgIB4NgIACyAFKAL8AiIGRQ0LIAUoAvgCIAZBDGxBE2pBeHEiBGsgBCAGakEJakEIEIgPDAsLIBogBSkDiAMiY6dzrSJlQt2h8csMfiBjQiCIImNCt9OwhQx+hSBlQrfTsIUMfiBjQt2h8csMfoVCIIiFIWMgBSgCgANFBEAgBUHYAGogBUH4AmogEBCBAgsgA0EBayEDIGanIRsgBSgC/AIiGCBjp3EhISBjQhmIImZC/wCDQoGChIiQoMCAAX4hZUEAIQogBSgC+AIhEUEAIQkDQAJ/AkACQAJAIBEgIWopAAAiZyBlhSJjQoGChIiQoMCAAX0gY0J/hYNCgIGChIiQoMCAf4MiZEIAUgRAA0AgGiARIGR6p0EDdiAhaiAYcUF0bGoiBkEMaygCAEYNAiBkQgF9IGSDImRCAFINAAsLIGdCgIGChIiQoMCAf4MhZCAJQQFHBEAgZFANAyBkeqdBA3YgIWogGHEhDQtBASBkIGdCAYaDUA0DGiANIBFqLAAAIiFBAE4EQCARIBEpAwBCgIGChIiQoMCAf4N6p0EDdiINai0AACEhCyANIBFqIGanQf8AcSIGOgAAIBEgDUEIayAYcWpBCGogBjoAACARIA1BdGxqIgZBDGsgGjYCACAGQQhrIBs2AgAgBkEEayAUOgAAIAUgBSgChANBAWo2AoQDIAUgBSgCgAMgIUEBcWs2AoADDAELIAZBBGsgFDoAACAGQQhrIBs2AgALIAQhDSADDQQgBSgC/AIhBiAFKAL4AiIpRQRAIAYhAwwOCyAFKAKMAyEYIAUoAogDISggBSgChAMhCSAFKAKAAyELQYOAgIB4IQ0MCAtBAAshCSAhIApBCGoiCmogGHEhIQwACwALCww9C0HIy8EAISlBmPW7wQAhGEGJ2bnifiEoQQAhC0EAIQlBACEGQYOAgIB4IQ0MAgsgCkUEQCAFQoHKADcD+AIgBUH4AmoQog0hAwwHCyAMIBBBCGsiCzYCBCAMIBRBCGoiDTYCACAULQAHIidBAk8EQEEMQQQQsw4iA0UNPCADICc6AAQgA0GCgICAeDYCAAwHCwJ/IApBCE0EQCAFQoHKADcD+AJBASEEIAVB+AJqEKINDAELIAwgEEEQayILNgIEIAwgFEEQaiINNgIAIAVB0ABqIBQpAAgQpwggBSgCUCEEIAUoAlQLIQMgBEEBcQ0GAkAgAwRAIANBD08Ef0F/QYAgIAMgA0GAIE8bQQN0Qfj/A3FBB25BAWtndkEBagVBBEEIQRAgA0EISRsgA0EESRsLIgRBBHRB8P8/cSIJIARBCGoiEGoiBkEIELMOIgpFDQsgCSAKaiEJIBAEQCAJQf8BIBD8CwALIAVBADYChAMgBSAEQQFrIgogBEEDdkEHbCAEQQlJGzYCgAMgBSAKNgL8AiAFIAk2AvgCIAVCidm54o7TvpcINwOIAwJAA0AgC0EESQ0BIAwgC0EEayIENgIEIAwgDUEEajYCACAEQQRJBEAgBUKBygA3A6gCIAVBqAJqEKINIQMMBAsgDSgAACEaIAwgC0EIayIENgIEIAwgDUEIajYCACAEQQdNBEAgBUKBygA3A6gCIAVBqAJqEKINIQMMBAsgDSgABCEUIAwgC0EQayIENgIEIAwgDUEQajYCACANKQAIImZCgICAgBBaBEAgBUEBOgCoAiAFIGY3A7ACIAVBqAJqIAVB4AFqQYCqwQAQ7wohAwwECyAERQRAIAVCgcoANwOoAiAFQagCahCiDSEDDAQLIAwgC0ERayILNgIEIAwgDUERaiIbNgIAAkAgDS0AECINQQJPBEBBDEEEELMOIgNFDQEgAyANOgAEIANBgoCAgHg2AgAMBQsgBSkDiAMgGq0gFK1CIIaEhSJjQiCIImVCt9OwhQx+IGNC/////w+DImNC3aHxywx+hSBlQt2h8csMfiBjQrfTsIUMfoVCIIiFIWMgBSgCgANFBEAgBUFAayAFQfgCaiIEIARBEGoQiQILIANBAWshAyBmpyEJIAUoAvwCIhggY6dxISEgY0IZiCJmQv8Ag0KBgoSIkKDAgAF+IWVBACEQIAUoAvgCIRFBACEKA0ACfwJAAkACQCARICFqKQAAImcgZYUiY0KBgoSIkKDAgAF9IGNCf4WDQoCBgoSIkKDAgH+DImRCAFIEQANAIBEgZHqnQQN2ICFqIBhxQQR0ayIEQRBrKAIAIBpGBEAgFCAEQQxrKAIARg0DCyBkQgF9IGSDImRCAFINAAsLIGdCgIGChIiQoMCAf4MhZCAKQQFHBEAgZFANAyBkeqdBA3YgIWogGHEhBgtBASBkIGdCAYaDUA0DGiAGIBFqLAAAIiFBAE4EQCARIBEpAwBCgIGChIiQoMCAf4N6p0EDdiIGai0AACEhCyAGIBFqIGanQf8AcSIEOgAAIBEgBkEIayAYcWpBCGogBDoAACARIAZBBHRrIgRBEGsgGjYCACAEQQxrIBQ2AgAgBEEIayAJNgIAIARBBGsgDToAACAFIAUoAoQDQQFqNgKEAyAFIAUoAoADICFBAXFrNgKAAwwBCyAEQQRrIA06AAAgBEEIayAJNgIACyAbIQ0gAw0EIAUoAvwCIQYgBSgC+AIiKUUEQCAGIQMMDwsgBSgCjAMhGCAFKAKIAyEoIAUoAoQDIQkgBSgCgAMhC0GCgICAeCENDAkLQQALIQogEEEIaiIQICFqIBhxISEMAAsACwsMPgsgBUKBygA3A6gCIAVBqAJqEKINIQMMAQtByMvBACEpQZj1u8EAIRhBidm54n4hKEEAIQtBACEJQQAhBkGCgICAeCENDAILIAUoAvwCIgRFDQYgBSgC+AIgBEEEdGtBEGsgBEERbEEZakEIEIgPDAYLIApFBEAgBUKBygA3A/gCIAVB+AJqEKINIQMMBgsgDCAQQQhrIgs2AgQgDCAUQQhqIg02AgAgFC0AByInQQJPBEBBDEEEELMOIgNFDTsgAyAnOgAEIANBgoCAgHg2AgAMBgsCfyAKQQhNBEAgBUKBygA3A/gCQQEhBCAFQfgCahCiDQwBCyAMIBBBEGsiCzYCBCAMIBRBEGoiDTYCACAFQThqIBQpAAgQpwggBSgCOCEEIAUoAjwLIQMgBEEBcQ0FIAMEQCADQQ9PBH9Bf0GAICADIANBgCBPG0EDdEH4/wNxQQduQQFrZ3ZBAWoFQQRBCEEQIANBCEkbIANBBEkbCyIEQQR0QfD/P3EiCSAEQQhqIhBqIgZBCBCzDiIKRQ0JIAkgCmohCSAQBEAgCUH/ASAQ/AsACyAFQQA2AoQDIAUgBEEBayIKIARBA3ZBB2wgBEEJSRs2AoADIAUgCjYC/AIgBSAJNgL4AiAFQonZueKO076XCDcDiAMCQANAIAtBBEkNASAMIAtBBGsiBDYCBCAMIA1BBGo2AgAgBEEESQRAIAVCgcoANwOoAiAFQagCahCiDSEDDAcLIA0oAAAhGiAMIAtBCGsiBDYCBCAMIA1BCGo2AgAgBEEHTQRAIAVCgcoANwOoAiAFQagCahCiDSEDDAcLIA0oAAQhFCAMIAtBEGsiBDYCBCAMIA1BEGo2AgAgDSkACCJmQoCAgIAQWgRAIAVBAToAqAIgBSBmNwOwAiAFQagCaiAFQeABakGAqsEAEO8KIQMMBwsgBEUEQCAFQoHKADcDqAIgBUGoAmoQog0hAwwHCyAMIAtBEWsiCzYCBCAMIA1BEWoiGzYCAAJAIA0tABAiDUECTwRAQQxBBBCzDiIDRQ0BIAMgDToABCADQYKAgIB4NgIADAgLIAUpA4gDIBqtIBStQiCGhIUiY0IgiCJlQrfTsIUMfiBjQv////8PgyJjQt2h8csMfoUgZULdofHLDH4gY0K307CFDH6FQiCIhSFjIAUoAoADRQRAIAVBKGogBUH4AmoiBCAEQRBqEIkCCyADQQFrIQMgZqchCSAFKAL8AiIYIGOncSEhIGNCGYgiZkL/AINCgYKEiJCgwIABfiFlQQAhECAFKAL4AiERQQAhCgNAAn8CQAJAAkAgESAhaikAACJnIGWFImNCgYKEiJCgwIABfSBjQn+Fg0KAgYKEiJCgwIB/gyJkQgBSBEADQCARIGR6p0EDdiAhaiAYcUEEdGsiBEEQaygCACAaRgRAIBQgBEEMaygCAEYNAwsgZEIBfSBkgyJkQgBSDQALCyBnQoCBgoSIkKDAgH+DIWQgCkEBRwRAIGRQDQMgZHqnQQN2ICFqIBhxIQYLQQEgZCBnQgGGg1ANAxogBiARaiwAACIhQQBOBEAgESARKQMAQoCBgoSIkKDAgH+DeqdBA3YiBmotAAAhIQsgBiARaiBmp0H/AHEiBDoAACARIAZBCGsgGHFqQQhqIAQ6AAAgESAGQQR0ayIEQRBrIBo2AgAgBEEMayAUNgIAIARBCGsgCTYCACAEQQRrIA06AAAgBSAFKAKEA0EBajYChAMgBSAFKAKAAyAhQQFxazYCgAMMAQsgBEEEayANOgAAIARBCGsgCTYCAAsgGyENIAMNBCAFKAL8AiEGIAUoAvgCIilFBEAgBiEDDA0LIAUoAowDIRggBSgCiAMhKCAFKAKEAyEJIAUoAoADIQtBgYCAgHghDQwHC0EACyEKIBBBCGoiECAhaiAYcSEhDAALAAsLDDwLIAVCgcoANwOoAiAFQagCahCiDSEDDAQLQcjLwQAhKUGY9bvBACEYQQAhCUGJ2bnifiEoQQAhC0EAIQZBgYCAgHghDQsgBSBkNwPwAiAFIBs2AuwCIAUgKDYC4AIgBSAJNgLcAiAFIAs2AtgCIAUgBjYC1AIgBSApNgLQAiAFIAM2AswCIAUgDTYCyAIgBSAYrSAnrUL/AYNCIIYgc4SENwLkAiAFQQhqIQRBACEKQQAhBgJAAkACQAJAAkACQAJAAkACQAJAAkAgBUHIAmoiCSgCACIDQf////8HayADQR91cUEBaw4IAQIDBAUGBwgAC0EwQQQQsw4iCkUNQiAKIAkpAgA3AgAgCkEoaiAJQShqKQIANwIAIApBIGogCUEgaikCADcCACAKQRhqIAlBGGopAgA3AgAgCkEQaiAJQRBqKQIANwIAIApBCGogCUEIaikCADcCAEGc+cIAIQYMBwtBIEEIELMOIgpFDQcgCiAJKQMINwMAIApBGGogCUEgaikDADcDACAKQRBqIAlBGGopAwA3AwAgCkEIaiAJQRBqKQMANwMAQfj3wgAhBgwGC0EgQQgQsw4iCkUNBiAKIAkpAwg3AwAgCkEYaiAJQSBqKQMANwMAIApBEGogCUEYaikDADcDACAKQQhqIAlBEGopAwA3AwBByPPCACEGDAULQSBBCBCzDiIKRQ0FIAogCSkDCDcDACAKQRhqIAlBIGopAwA3AwAgCkEQaiAJQRhqKQMANwMAIApBCGogCUEQaikDADcDAEHE8MIAIQYMBAtBIEEIELMOIgpFDQQgCiAJKQMINwMAIApBGGogCUEgaikDADcDACAKQRBqIAlBGGopAwA3AwAgCkEIaiAJQRBqKQMANwMAQYDywgAhBgwDC0EgQQgQsw4iCkUNAyAKIAkpAwg3AwAgCkEYaiAJQSBqKQMANwMAIApBEGogCUEYaikDADcDACAKQQhqIAlBEGopAwA3AwBB5P/CACEGDAILQSBBCBCzDiIKRQ0CIAogCSkDCDcDACAKQRhqIAlBIGopAwA3AwAgCkEQaiAJQRhqKQMANwMAIApBCGogCUEQaikDADcDAEHg+sIAIQYMAQtBIEEIELMOIgoEQCAKIAkpAwg3AwAgCkEYaiAJQSBqKQMANwMAIApBEGogCUEYaikDADcDACAKQQhqIAlBEGopAwA3AwBBsP/CACEGDAELDAELIAQgBjYCBCAEIAo2AgAMAQtBCEEgQZDExAAoAgAiAEHMCCAAGxEAAAALIAUoAgwhJSAFKAIIIQRBIEEBELMOIgZFDQEgBkEYakH4qcEAKQAANwAAIAZBEGpB8KnBACkAADcAACAGQQhqQeipwQApAAA3AAAgBkHgqcEAKQAANwAAQQxBBBCzDiIDRQ05IANBIDYCCCADIAY2AgQgA0EgNgIAIARFDQQgAxDdCSAFIAQ2ApACIAVB+AFqIScLICcgJTYCACAFKAKQAiEEIAUoAvgBIQMgJiAWOgAlICYgFzoAJCAmIAM2AiAgJiAENgIcICYgQjYCGCAmID02AhQgJiA8NgIQICYgOzYCDCAmIBw2AgggJiAeNgIEICYgIDYCAAwEC0EBQSBB8LzBABDTDQALIAUoAvwCIgRFDQEgBSgC+AIgBEEEdGtBEGsgBEERbEEZakEIEIgPDAELIA1FBEAgCyEDDAELIAMgDUECdEEEEIgPIAshAwsgJkGAgICAeDYCACAmIAM2AgQgHARAIB5BgAFqIQYDQCAGQQRrKAIAIgMEQCAGKAIAIANBBnRBBBCIDwsgBkEoaygCACIDBEAgBkEkaygCACADQQZ0QRAQiA8LIAZBqAFqIQYgHEEBayIcDQALCyAgRQ0AIB4gIEGoAWxBBBCIDwsgBUGQA2okAAwCC0EIIAlBkMTEACgCACIAQcwIIAAbEQAAAAtBCCAGQZDExAAoAgAiAEHMCCAAGxEAAAALIAIoApQMIQQCQCACKAKQDCILQYCAgIB4RwRAIEcgJCkCADcCACBHQRhqIhsgJEEYaikCADcCACBHQRBqIg0gJEEQaikCADcCACBHQQhqIgkgJEEIaikCADcCACACIAQ2AvQCIAIgCzYC8AICfyAMKAIEIhBBA00EQCACQoHKADcDkAwgJhCiDQwBCyAMIBBBBGsiAzYCBCAMIAwoAgAiFEEEajYCACADQQNNBEAgAkKBygA3A5AMIAJBkAxqEKINDAELIBQoAAAhCiAMIBBBCGsiAzYCBCAMIBRBCGo2AgAgA0EDTQRAIAJCgcoANwOQDCACQZAMahCiDQwBCyAUKAAEIR4gDCAQQQxrIgM2AgQgDCAUQQxqNgIAIANBA0sNAiACQoHKADcDkAwgAkGQDGoQog0LIQQgAkHwAmoQyggLIAIoArQJIQMgAigCuAkiBgRAIAMhAQNAIAEQygggAUE4aiEBIAZBAWsiBg0ACwsgAigCsAkiAUUNBCADIAFBOGxBBBCIDwwECyAUKAAIIQYgDCAQQRBrNgIEIAwgFEEQajYCACAUKAAMISwgAkGYCmoiEEEIaiIDIAkpAgA3AwAgEEEQaiIUIA0pAgA3AwAgEEEYaiIQIBspAgA3AwAgAiBHKQIANwOYCiACKAK4CSIJIAIoArAJRgRAIAJBsAlqQcirwQAQmAgLIAIoArQJIAlBOGxqIg0gBDYCBCANIAs2AgAgDSACKQOYCjcCCCANICw2AjQgDSAGNgIwIA0gHjYCLCANIAo2AiggDUEQaiADKQMANwIAIA1BGGogFCkDADcCACANQSBqIBApAwA3AgAgAiAJQQFqIg02ArgJIBVBAWsiFQ0ACyACKAK0CSEEIAIoArAJIgZBgoCAgHhIDQIgM0GAgICAeGsOAgMiBQtBAEG8r8EAQYSrwQAQvgohCAwhC0EBQbyvwQBBhKvBABC+CiEECyAzBEAgCCAzQQR0QQQQiA8LIAQhCAwfC0EAQfSzwQBBhKvBABC+CiEIDB4LQQQhBEEAIQ1BACEGCyACQQI2ApwKIAIgATYCmAogAkGQDGoiCiACQZgKahDwAiACKAKUDCEDIAIoApAMIhpBgYCAgHhGDRsCQAJAAkACQAJAIBpBgICAgHhHBEAgAigCnApFDQEgAigCmAwhNwJ/IAIoApgKIgwoAgQiFUEHTQRAIAJCgcoANwOQDEEBIQsgChCiDQwBCyAMIBVBCGsiFTYCBCAMIAwoAgAiCkEIajYCACACQRBqIAopAAAQpwggAigCECELIAIoAhQLIQkgC0EBcQ0CIAlFDQRBzJkDIAkgCUHMmQNPGyIQQRRsIh5BBBCzDiIKRQ0HQQAhFCACQQA2ApgMIAIgCjYClAwgAiAQNgKQDCAMKAIAIRBBACEtA0ACQAJAIBVFBEAgAkKBygA3A/ACIAJB8AJqEKINIQkMAQsgDCAVQQFrIhU2AgQgDCAQQQFqIgo2AgAgEC0AACIeQQJPBEBBDEEEELMOIglFDTMgCSAeOgAEIAlBgoCAgHg2AgAMAQsgFUUEQCACQoHKADcD8AIgAkHwAmoQog0hCQwBCyAMIBVBAWsiFTYCBCAMIApBAWoiEDYCACAKLQAAIixBAk8EQEEMQQQQsw4iCUUNMyAJICw6AAQgCUGCgICAeDYCAAwBCyAVQQNNBEAgAkKBygA3A/ACIAJB8AJqEKINIQkMAQsgDCAVQQRrIhU2AgQgDCAQQQRqIgo2AgAgFUEDTQRAIAJCgcoANwPwAiACQfACahCiDSEJDAELIBAoAAAhCyAMIBVBBGsiFTYCBCAMIApBBGoiEDYCACAVQQNNBEAgAkKBygA3A/ACIAJB8AJqEKINIQkMAQsgCigAACEbIAwgFUEEayIVNgIEIAwgEEEEaiIKNgIAIBVBA0sNASACQoHKADcD8AIgAkHwAmoQog0hCQsgAigCkAwiAUUNBCACKAKUDCABQRRsQQQQiA8MBAsgECgAACEyIAwgFUEEayIVNgIEIAwgCkEEaiIQNgIAIAooAAAhCiACKAKQDCAtRgRAIAJBkAxqQcirwQAQlAgLIAIoApQMIBRqIhYgCzYCACAWQRFqICw6AAAgFkEQaiAeOgAAIBZBDGogCjYCACAWQQhqIDI2AgAgFkEEaiAbNgIAIAIgLUEBaiItNgKYDCAUQRRqIRQgCSAtRw0ACyACKAKUDCEJIAIoApAMIiRBgoCAgHhIDQIgGkGAgICAeGsOAgMhBQtBAEG8r8EAQYSrwQAQvgohAwwgC0EBQbyvwQBBhKvBABC+CiEJCyAaBEAgAyAaQQR0QQQQiA8LIAkhAwweC0EAQfSzwQBBhKvBABC+CiEDDB0LQQQhCUEAIS1BACEkCwJ/IAEoAgQiFUEHTQRAIAJCgcoANwOQDCACQZAMahCiDSELQQEMAQsgASAVQQhrIhU2AgQgASABKAIAIgpBCGo2AgAgAkEIaiAKKQAAEKcIIAIoAgwhCyACKAIIC0EBcQ0aAkAgC0UEQEEEIQtBACEcQQAhAQwBC0HVqgUgCyALQdWqBU8bIg5BDGwiCkEEELMOIixFDQMgAiAsNgKUDCACIA42ApAMQQAhCiACQQA2ApgMIAEoAgAhDkEAIRwDQAJAIBVBBE8EQCABIBVBBGsiGzYCBCABIAogDmoiFUEEaiIQNgIAIBtBBEkNHSAVKAAAIR4gASAbQQRrIhU2AgQgASAQQQRqIhQ2AgAgFUEETw0BDB0LDBwLIBA1AAAhYyABIBVBBGsiFTYCBCABIBRBBGo2AgAgYyAUNQAAQiCGhCFqIAIoApAMIBxGBEAgAkGQDGpByKvBABCTCCACKAKUDCEsCyAKICxqIhAgHjYCACAQQQRqIGo3AgAgAiAcQQFqIhw2ApgMIApBDGohCiALIBxHDQALIAIoApQMIQsgAigCkAwiAUGCgICAeEgNGyACKALsEyE2IAIoAugTIQ4LAkAgM0GAgICAeGsOAhAeAAsgAiA2NgLoAiACIA42AuQCIAIgHDYC4AIgAiALNgLcAiACIAE2AtgCIAIgLTYC1AIgAiAJNgLQAiACICQ2AswCIAIgNzYCyAIgAiADNgLEAiACIBo2AsACIAIgDTYCvAIgAiAENgK4AiACIAY2ArQCIAIgEjYCsAIgAiAINgKsAiACIDM2AqgCIAIoAkQiAUUEQEECIQEMFQsgAiABQQFrNgJEAn8gAigCQCITKAIEIgFBB00EQCACQoHKADcDmAogAkGYCmoQog0hCkEBDAELIBMgAUEIazYCBCATIBMoAgAiAUEIajYCACACIAEpAAAQpwggAigCBCEKIAIoAgALQQFxBEAgCiEDDBgLIApFBEBBECEGQQAhCkEAIQ0MFAtBqhUgCiAKQaoVTxsiBkGAA2wiBEEQELMOIgFFDQNBACEVIAJBADYC8BEgAiABNgLsESACIAY2AugRIAJBoApqISdBACENA0AgEygCBCIEQQNNBEAgAkKBygA3A5gKIAJBmApqEKINIQMMFAsgEyAEQQRrIgE2AgQgEyATKAIAIgZBBGo2AgACQAJAAkACQAJAIAYoAAAiIA4CAgEACyACQQE6AJgKIAIgIK03A6AKIAJBmApqQbytwQBBhKvBABDvCiEDDBcLIAFBBE8EQCATIARBCGsiATYCBCATIAZBCGo2AgAgAUEHTQRAIAJCgcoANwOYCiACQZgKahCiDSEDDBgLIAYoAAQhMyATIARBEGsiATYCBCATIAZBEGo2AgAgBikACCJqQoCAgIAQWgRAIAJBAToAmAogAiBqNwOgCiACQZgKaiACQbAJakGAqsEAEO8KIQMMGAsgAUEHTQRAIAJCgcoANwOYCiACQZgKahCiDSEDDBgLIBMgBEEYayIBNgIEIBMgBkEYajYCACAGKQAQImtCgICAgBBaBEAgAkEBOgCYCiACIGs3A6AKIAJBmApqIAJBsAlqQYCqwQAQ7wohAwwYCyABQQRJDQkgEyAEQRxrIgE2AgQgEyAGQRxqNgIAIAFBBEkEQCACQoHKADcDmAogAkGYCmoQog0hAwwYCyAGKAAYIQkgEyAEQSBrNgIEIBMgBkEgajYCACAGKAAcIS0gAkGYCmoiBCATEOMEIAIoApwKIQMgAigCmAoNFyACQbAJaiIBQRBqIisgJ0EQaiI0KQIANwMAIAFBCGoiDyAnQQhqIgwpAgA3AwAgAiAnKQIANwOwCSAEIBMQ4wQgAigCnAohECACKAKYCgRAIBAhAwwYCyACQbgTaiIBQRBqIhwgNCkCADcDACABQQhqIkUgDCkCADcDACACQdATaiIBQQhqIhkgDykDADcDACABQRBqIhEgKykDADcDACACICcpAgA3A7gTIAIgAikDsAk3A9ATIBMoAgQiBEEESQ0KIBMgBEEEayIBNgIEIBMgEygCACIGQQRqNgIAIAFBBEkEQCACQQA6AJsKIAJBJTsAmQogAkEANgKcCiACQQE6AJgKIAJBmApqEKINIQMMGAsgBigAACEUIBMgBEEIayIBNgIEIBMgBkEIajYCACABQQRJDQsgBioABCGBASATIARBDGsiATYCBCATIAZBDGo2AgAgAUEESQ0LIAYoAAghCyATIARBEGsiATYCBCATIAZBEGo2AgAgAUEESQ0LIAY1AAwhbiATIARBFGsiATYCBCATIAZBFGo2AgACQAJAIAFBBEkNACAGNQAQIXUgEyAEQRhrIgE2AgQgEyAGQRhqNgIAIAFBBEkNACAGKAAUIR4gEyAEQRxrIgE2AgQgEyAGQRxqNgIAIAFBBE8NAQsgAkEAOgCbCiACQSU7AJkKIAJBADYCnAogAkEBOgCYCiACQZgKahCiDSEDDBgLIAY1ABghbyATIARBIGsiATYCBCATIAZBIGo2AgACQAJAIAFBBEkNACAGNQAcIXYgEyAEQSRrIgE2AgQgEyAGQSRqNgIAIAFBBEkNACAGKAAgISwgEyAEQShrIgE2AgQgEyAGQShqNgIAIAFBA0sNAQsgAkEAOgCbCiACQSU7AJkKIAJBADYCnAogAkEBOgCYCiACQZgKahCiDSEDDBgLIAY1ACQhcCATIARBLGsiATYCBCATIAZBLGo2AgACQAJAIAFBBEkNACAGNQAoIXcgEyAEQTBrIgE2AgQgEyAGQTBqNgIAIAFBBEkNACAGKAAsITYgEyAEQTRrIgE2AgQgEyAGQTRqNgIAIAFBA0sNAQsgAkEAOgCbCiACQSU7AJkKIAJBADYCnAogAkEBOgCYCiACQZgKahCiDSEDDBgLIAY1ADAhcSATIARBOGsiATYCBCATIAZBOGo2AgAgAUEDTQRAIAJBADoAmwogAkElOwCZCiACQQA2ApwKIAJBAToAmAogAkGYCmoQog0hAwwYCyAGNQA0IWQgEyAEQTxrIgE2AgQgEyAGQTxqNgIAAkACQCABQQRJDQAgBioAOCGJASATIARBQGoiATYCBCATIAZBQGs2AgAgAUEESQ0AIAYoADwhDiATIARBxABrIgE2AgQgEyAGQcQAajYCACABQQNLDQELIAJBADoAmwogAkElOwCZCiACQQA2ApwKIAJBAToAmAogAkGYCmoQog0hAwwYCyAGNQBAIXggEyAEQcgAayIBNgIEIBMgBkHIAGo2AgACQAJAIAFBBEkNACAGNQBEIXMgEyAEQcwAayIBNgIEIBMgBkHMAGo2AgAgAUEESQ0AIAYoAEghJCATIARB0ABrIgE2AgQgEyAGQdAAajYCACABQQNLDQELIAJBADoAmwogAkElOwCZCiACQQA2ApwKIAJBAToAmAogAkGYCmoQog0hAwwYCyAGNQBMIXQgEyAEQdQAayIBNgIEIBMgBkHUAGo2AgAgAUUEQCACQoHKADcDmAogAkGYCmoQog0hAwwYCyAGNQBQIWwgEyAEQdUAayIBNgIEIBMgBkHVAGo2AgAgBi0AVCIyQQJPBEBBDEEEELMOIgNFDS8gAyAyOgAEIANBgoCAgHg2AgAMGAsgAUEESQ0MIBMgBEHZAGsiATYCBCATIAZB2QBqNgIAIAFBBEkNDCAGKABVITcgEyAEQd0AayIBNgIEIBMgBkHdAGo2AgAgAUEESQ0MIAY1AFkhZyATIARB4QBrIgE2AgQgEyAGQeEAajYCAAJAAkAgAUEESQ0AIAY1AF0hZiATIARB5QBrIgE2AgQgEyAGQeUAajYCACABQQRJDQAgBigAYSE5IBMgBEHpAGsiATYCBCATIAZB6QBqNgIAIAFBBEkNACAGNQBlIWUgEyAEQe0AayIBNgIEIBMgBkHtAGo2AgAgAUEESQ0PIAY1AGkhYyATIARB8QBrIgE2AgQgEyAGQfEAajYCACABQQRJDRAgBigAbSFBIBMgBEH1AGsiATYCBCATIAZB9QBqNgIAIAFBBEkNESAGKgBxIYoBIBMgBEH5AGsiATYCBCATIAZB+QBqNgIAIAFBBEkNEiAGKgB1IYsBIBMgBEH9AGsiATYCBCATIAZB/QBqNgIAIAFBBEkNEyAGKgB5IYUBIBMgBEGBAWsiATYCBCATIAZBgQFqNgIAIAFBBE8NASACQQA6AJsKIAJBJTsAmQogAkEANgKcCiACQQE6AJgKIAJBmApqEKINIQMMGQsgAkEAOgCbCiACQSU7AJkKIAJBADYCnAogAkEBOgCYCiACQZgKahCiDSEDDBgLIAYqAH0hhgEgEyAEQYUBazYCBCATIAZBhQFqNgIAIAYqAIEBIYcBIAJBmApqIgQgExDsAiACKAKcCiEdIAIoApgKDRIgAkGYFGoiAUEgaiIXICdBIGoiFikCADcDACABQRhqIhggJ0EYaiIbKQIANwMAIAFBEGoiCCA0KQIANwMAIAFBCGoiEiAMKQIANwMAIAIgJykCADcDmBQCQAJAIBMoAgQiNQRAIBMgNUEBayIBNgIEIBMgEygCACIvQQFqNgIAIAFFBEAgAkKBygA3A5gKIAQQog0hAwwbCyAvLQAAITEgEyA1QQJrIgY2AgQgEyAvQQJqIgE2AgBBACEaAkACQCAvLQABIgQOAgQAAQsgNUEFTQRAIAJCgcoANwOYCiACQZgKahCiDSEDDBwLIBMgNUEGayIBNgIEIBMgL0EGajYCAAJ/AkACQAJAAkAgLygAAiIEDgIBAgALIAJBAToAmAogAiAErTcDoAogAkGYCmpBvK3BAEGEq8EAEO8KIQMMHwsgAkGYCmogExDsAiACKAKYCkEBRw0BIAIoApwKIQMMHgsgAUEESQ0cIBMgNUEKazYCBCATIC9BCmo2AgAgLygABgwBCyAPIAwpAgA3AwAgKyA0KQIANwMAIAJBsAlqIgFBGGogGykCADcDACABQSBqIBYpAgA3AwAgAiAnKQIANwOwCSACKAKcCgshAUEwQQQQsw4iGg0CDDELQQxBBBCzDiIDRQ0xIAMgBDYCBCADQYSAgIB4NgIADBoLIAJCgcoANwOYCiACQZgKahCiDSEDDBkLIBogATYCBCAaIAQ2AgAgGiACKQOwCTcCCCAaQRBqIA8pAwA3AgAgGkEYaiArKQMANwIAIBpBIGogAkGwCWoiAUEYaikDADcCACAaQShqIAFBIGopAwA3AgAgEygCACEBIBMoAgQhBgsgAkHoE2oiBEEgaiIMIBcpAwA3AwAgBEEYaiIWIBgpAwA3AwAgBEEQaiIbIAgpAwA3AwAgBEEIaiIIIBIpAwA3AwAgAiACKQOYFDcD6BMgBkEESQ0TIBMgBkEEayIENgIEIBMgAUEEajYCACAEQQRJDRMgASgAACEuIBMgBkEIayIENgIEIBMgAUEIajYCACAEQQRJDRMgATUABCFyIBMgBkEMayIENgIEIBMgAUEMajYCAAJAAkAgBEEESQ0AIAE1AAghbSATIAZBEGsiBDYCBCATIAFBEGo2AgAgBEEESQ0AIAEoAAwhMCATIAZBFGsiBDYCBCATIAFBFGo2AgAgBEEETw0BCyACQQA6AJsKIAJBJTsAmQogAkEANgKcCiACQQE6AJgKIAJBmApqEKINIRIMFgsgATUAECFpIBMgBkEYayIENgIEIBMgAUEYajYCACAEQQNNBEAgAkEAOgCbCiACQSU7AJkKIAJBADYCnAogAkEBOgCYCiACQZgKahCiDSESDBYLIAE1ABQhaCATIAZBHGsiBDYCBCATIAFBHGo2AgAgBEEDTQRAIAJBADoAmwogAkElOwCZCiACQQA2ApwKIAJBAToAmAogAkGYCmoQog0hEgwWCyABKAAYISMgEyAGQSBrIgQ2AgQgEyABQSBqNgIAIARFBEAgAkKBygA3A5gKIAJBmApqEKINIRIMFgsgASoAHCF8IBMgBkEhayIENgIEIBMgAUEhajYCACABLQAgIjpBAk8EQEEMQQQQsw4iEkUNLyASIDo6AAQgEkGCgICAeDYCAAwWCyAERQRAIAJCgcoANwOYCiACQZgKahCiDSESDBYLIBMgBkEiayIENgIEIBMgAUEiajYCACABLQAhIj5BAk8EQEEMQQQQsw4iEkUNLyASID46AAQgEkGCgICAeDYCAAwWCyAEQQNNBEAgAkEAOgCbCiACQSU7AJkKIAJBADYCnAogAkEBOgCYCiACQZgKahCiDSESDBYLIBMgBkEmazYCBCATIAFBJmo2AgAgASoAIiF9IAJBmApqIgEgExCDBCACKAKcCiESIAIoApgKIkZBgICAgHhGDRUCQCATKAIEIgRBA00EQCACQQA6AJsKIAJBJTsAmQogAkEANgKcCiACQQE6AJgKIAEQog0hAQwBCyACKAKgCiE4IBMgBEEEayIBNgIEIBMgEygCACIGQQRqNgIAIAFBA00EQCACQQA6AJsKIAJBJTsAmQogAkEANgKcCiACQQE6AJgKIAJBmApqEKINIQEMAQsgBigAACEvIBMgBEEIayIBNgIEIBMgBkEIajYCACABQQNNBEAgAkEAOgCbCiACQSU7AJkKIAJBADYCnAogAkEBOgCYCiACQZgKahCiDSEBDAELIAYqAAQhfiATIARBDGsiATYCBCATIAZBDGo2AgAgAUEDTQRAIAJBADoAmwogAkElOwCZCiACQQA2ApwKIAJBAToAmAogAkGYCmoQog0hAQwBCyAGKgAIIX8gEyAEQRBrIgE2AgQgEyAGQRBqNgIAIAFFBEAgAkKBygA3A5gKIAJBmApqEKINIQEMAQsgBioADCGAASATIARBEWsiATYCBCATIAZBEWo2AgAgBi0AECI/QQJPBEBBDEEEELMOIgFFDTAgASA/OgAEIAFBgoCAgHg2AgAMAQsgAUEDTQRAIAJCgcoANwOYCiACQZgKahCiDSEBDAELIBMgBEEVayIBNgIEIBMgBkEVajYCACABQQNNBEAgAkKBygA3A5gKIAJBmApqEKINIQEMAQsgBigAESE1IBMgBEEZayIBNgIEIBMgBkEZajYCACAGKAAVIkBBBE8EQCACQQE6AJgKIAIgQK03A6AKIAJBmApqQeCywQBBhKvBABDvCiEBDAELIAFFBEAgAkKBygA3A5gKIAJBmApqEKINIQEMAQsgEyAEQRprIgE2AgQgEyAGQRpqNgIAIAFFBEAgAkKBygA3A5gKIAJBmApqEKINIQEMAQsgBi0AGSErIBMgBEEbayIBNgIEIBMgBkEbajYCACAGLQAaIgdBAk8EQEEMQQQQsw4iAUUNMCABIAc6AAQgAUGCgICAeDYCAAwBCyABQQdNBEAgAkKBygA3A5gKIAJBmApqEKINIQEMAQsgEyAEQSNrIgE2AgQgEyAGQSNqNgIAIAYpABsieUKAgICAEFoEQCACQQE6AJgKIAIgeTcDoAogAkGYCmogAkGwCWpBgKrBABDvCiEBDAELIAFBD0sNAyACQoHKADcDmAogAkGYCmoQog0hAQsgRgRAIBIgRkEDdEEEEIgPCyABIRIMFQsgAkKBygA3A5gKIAJBmApqEKINIQMMFgsgAUUEQCACQoHKADcDmAogAkGYCmoQog0hAwwWCyATIARBBWs2AgQgEyAGQQVqNgIAAkACQCAGLQAEIjMOAgMAAQsgAUEETQRAIAJCgcoANwOYCiACQZgKahCiDSEDDBcLIBMgBEEJazYCBCATIAZBCWo2AgAgBigABSFFQQEhMwwCC0EMQQQQsw4iA0UNLCADIDM2AgQgA0GEgICAeDYCAAwVCyBqpyE0IGunIQ8gdUIghiBuhCF1IHZCIIYgb4QhdiB3QiCGIHCEIXcgZEIghiBxhCFuIHNCIIYgeIQhbyBsQiCGIHSEIWsgZkIghiBnhCFwIGNCIIYgZYQhaiBtQiCGIHKEIXIgaEIghiBphCFtIAZBL2o1AAAhaSAGNQAjIWggBikAJyFjIBMgBEEzazYCBCATIAZBM2o2AgAgAkHYEmoiAUEIaiAIKQMANwMAIAFBEGogGykDADcDACABQRhqIBYpAwA3AwAgAUEgaiAMKQMANwMAIAJBoBNqIgFBCGogGSkDADcDACABQRBqIBEpAwA3AwAgAiACKQPoEzcD2BIgAiACKQPQEzcDoBMgAkGQE2ogHCkDADcDACACQdYSaiACQZcUai0AADoAACACIEUpAwA3A4gTIAIgAikDuBM3A4ATIAIgAi8AlRQ7AdQSIGlCIIYgY0IgiIQhaSBoIGNCIIaEIWggeachHwsgAkG4EmoiBEEQaiIXIAJBoBNqIgFBEGopAwA3AwAgBEEIaiIYIAFBCGopAwA3AwAgAkGwEmoiDCACQZATaikDADcDACACQfgRaiIEQQhqIhYgAkHYEmoiAUEIaikDADcDACAEQRBqIhsgAUEQaikDADcDACAEQRhqIgggAUEYaikDADcDACAEQSBqIgQgAUEgaikDADcDACACIAIpA6ATNwO4EiACIAIpA4ATNwOgEiACIAIpA4gTNwOoEiACIAIpA9gSNwP4ESACQfYRaiIBIAJB1hJqLQAAOgAAIAIgAi8B1BI7AfQRIAIoAugRIA1GBEAgAkHoEWpByKvBABCVCAsgFSACKALsESIGaiIRICA2AgAgEUEoaiBpNwIAIBFBIGogaDcCACARQUBrIAM2AgAgEUE9aiA+OgAAIBFBPGogOjoAACARQThqIH04AgAgEUE0aiB8OAIAIBFBMGogIzYCACARQRxqIC02AgAgEUEYaiAJNgIAIBFBFGogDzYCACARQRBqIDQ2AgAgEUEIaiBFNgIAIBFBBGogMzYCACARQcQAaiACKQO4EjcCACARQcwAaiAYKQMANwIAIBFB1ABqIBcpAwA3AgAgEUHcAGogEDYCACARQfgAaiAUNgIAIBFB/ABqIIEBOAIAIBFBgAFqIAs2AgAgEUGEAWogdTcCACARQYwBaiAeNgIAIBFBkAFqIHY3AgAgEUGYAWogLjYCACARQZwBaiByNwIAIBFBpAFqIDA2AgAgEUGoAWogbTcCACARQbABaiAsNgIAIBFBtAFqIHc3AgAgEUG8AWogNjYCACARQcABaiBuNwIAIBFByAFqIIkBOAIAIBFBzAFqIA42AgAgEUHQAWogbzcCACARQdgBaiAkNgIAIBFB3AFqIGs3AgAgEUHoAWogQTYCACARQewBaiCKATgCACARQfABaiCLATgCACARQfQBaiCFATgCACARQfgBaiCGATgCACARQfwBaiCHATgCACARQYACaiA3NgIAIBFBhAJqIHA3AgAgEUGMAmogOTYCACARQZACaiBqNwIAIBFBmAJqIB02AgAgEUHkAWogMjoAACARQeAAaiACKQOgEjcCACARQegAaiACKQOoEjcCACARQfAAaiAMKQMANwIAIBFBxAJqIBo2AgAgEUHIAmogMTYCACARQcwCaiA1NgIAIBFB0AJqIB82AgAgEUHUAmogLzYCACARQdgCaiB+OAIAIBFB3AJqIH84AgAgEUHgAmoggAE4AgAgEUHkAmogPzoAACARQbwCaiAEKQMANwIAIBFBtAJqIAgpAwA3AgAgEUGsAmogGykDADcCACARQaQCaiAWKQMANwIAIBFBnAJqIAIpA/gRNwIAIBFB9AJqICs6AAAgEUH1AmogQDoAACARQfYCaiAHOgAAIBFB8AJqIDg2AgAgEUHsAmogEjYCACARQegCaiBGNgIAIBFB5wJqIAEtAAA6AAAgEUHlAmogAi8B9BE7AAAgAiANQQFqIg02AvARIBVBgANqIRUgCiANRw0ACyACKALoESIKQYKAgIB4Tg0TIAYhAwwXC0EEIARBuKvBABDTDQALQQQgHkG4q8EAENMNAAtBBCAKQbirwQAQ0w0AC0EQIARBuKvBABDTDQALIAJCgcoANwOYCiACQZgKahCiDSEDDA0LIAJBADoAmwogAkElOwCZCiACQQA2ApwKIAJBAToAmAogAkGYCmoQog0hAwwMCyACQQA6AJsKIAJBJTsAmQogAkEANgKcCiACQQE6AJgKIAJBmApqEKINIQMMCwsgAkEAOgCbCiACQSU7AJkKIAJBADYCnAogAkEBOgCYCiACQZgKahCiDSEDDAoLIAJBADoAmwogAkElOwCZCiACQQA2ApwKIAJBAToAmAogAkGYCmoQog0hAwwJCyACQQA6AJsKIAJBJTsAmQogAkEANgKcCiACQQE6AJgKIAJBmApqEKINIQMMCAsgAkEAOgCbCiACQSU7AJkKIAJBADYCnAogAkEBOgCYCiACQZgKahCiDSEDDAcLIAJBADoAmwogAkElOwCZCiACQQA2ApwKIAJBAToAmAogAkGYCmoQog0hAwwGCyACQQA6AJsKIAJBJTsAmQogAkEANgKcCiACQQE6AJgKIAJBmApqEKINIQMMBQsgHSEDDAQLIAJBADoAmwogAkElOwCZCiACQQA2ApwKIAJBAToAmAogAkGYCmoQog0hEgwBC0EEQeTVwQBBhKvBABC+CiEBIABBAjYCxAcgACABNgIADA4LIBoEQCAaQTBBBBCIDwsgEiEDDAELIAJBADoAmwogAkElOwCZCiACQQA2ApwKIAJBAToAmAogAkGYCmoQog0hAwsgAigC7BEhBCANBEAgBCEBA0ACQCABKAIARQ0AIAFBxAJqKAIAIgYEQCAGQTBBBBCIDwsgAUHoAmooAgAiBkUNACABQewCaigCACAGQQN0QQQQiA8LIAFBgANqIQEgDUEBayINDQALCyACKALoESIBRQ0EIAQgAUGAA2xBEBCIDwwECwJAAkACQAJAIBMoAgQiBEEETwRAIBMgBEEEayIDNgIEIBMgEygCACIIQQRqNgIAIANFBEAgAkKBygA3A5gKIAJBmApqEKINIQMMBAsgCDUAACFoIBMgBEEFayIVNgIEIBMgCEEFaiIaNgIAAkACQCAILQAEIgEOAgQAAQsgA0EESw0CIAJCgcoANwOYCiACQZgKahCiDSEDDAQLQQxBBBCzDiIDRQ0aIAMgATYCBCADQYSAgIB4NgIADAMLIAJCgcoANwOYCiACQZgKahCiDSEDDAILIBMgBEEJ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GGogBSkDADcCACAUQRBqIAIpAwA3AgAgFEEIaiAAKQMANwIAIBRBMGogFigCADYCACAMIA9BAWoiADYC3AIgACAERgRAIBpBgPHBABCbCCAMKALUAiEEIAwoAtgCIQMLIAMgAEE0bGoiAiAMKQOQBDcCACACQShqIAxBkARqIgBBKGopAwA3AgAgAkEgaiAAQSBqKQMANwIAIAJBGGogAEEYaikDADcCACACQRBqIABBEGopAwA3AgAgAkEIaiAAQQhqKQMANwIAIAJBMGogAEEwaigCADYCACAMIA9BAmoiADYC3AIgACAERgRAIBpBkPHBABCbCCAMKALUAiEEIAwoAtgCIQMLIAMgAEE0bGoiAiAMKQPIBDcCACACQShqIAxByARqIgBBKGopAwA3AgAgAkEgaiAAQSBqKQMANwIAIAJBGGogAEEYaikDADcCACACQRBqIABBEGopAwA3AgAgAkEIaiAAQQhqKQMANwIAIAJBMGogAEEwaigCADYCACAMIA9BA2oiADYC3AIgACAERgRAIBpBoPHBABCbCCAMKALYAiEDCyADIABBNGxqIgIgDCkDgAU3AgAgAkEoaiAMQYAFaiIAQShqKQMANwIAIAJBIGogAEEgaikDADcCACACQRhqIABBGGopAwA3AgAgAkEQaiAAQRBqKQMANwIAIAJBCGogAEEIaikDADcCACACQTBqIABBMGooAgA2AgAgDCAPQQRqIgA2AtwCAkAgF0EBcUUNAAJAIAAEQCAMKALQAkUNASADKgIYIAwoAswCIgAqAgCUIANBHGoqAgAgAEEEaioCAJSSIANBIGoqAgAgAEEIaioCAJSSIgpDAACgtV0NByAKjCEKIAwoAvQCIgUgDCgC7AJGBEAgGUG03sEAELgICyAFQQN0IgIgDCgC8AJqIgAgCjgCBEEAIQMgAEEANgIAIAwgBUEBajYC9AIgDCgC8AIiDSACaiIAKgIEIQogACgCACEEAkAgBUUNAANAIAogDSAFQQFrIgJBAXYiA0EDdGoiAEEEaioCAF5FBEAgBSEDDAILIA0gBUEDdGogACkCADcCACADIQUgAkEBSw0ACwsgDSADQQN0aiIAIAo4AgQgACAENgIADAILQQBBAEGw8cEAEIgLAAtBAEEAQcDxwQAQiAsACwJAIBhBAXFFDQACQCAMKALcAiIAQQJP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AAsLQgEhMyAOQQFxRQRAIAUgCCAkIAMqAgCUICUgA0EEaioCAJSSICIgA0EIaioCAJSSICNeIgMbIQggAyAKciEKCyAKQQFxRQ0HICWMISUCQCAJQQxJBEBBACEKQ///f/8hIyAQIQNBACEFDAELIAZB/v///wNxIQlBACEKQ///f/8hIyAQIQNBACEFA0AgA0EEaioCACAllCAkIAMqAgCUkyAiIANBCGoqAgCUkyImICNeIQsgA0EQaioCACAllCAkIANBDGoqAgCUkyAiIANBFGoqAgCUkyInICYgIyALGyIjXiEMICcgIyAMGyEjIAVBAWogBSANIAsbIAwbIQ0gCyAMciAKciEKIANBGGohAyAJIAVBAmoiBUcNAAsLIA5BAXFFBEAgBSANIANBBGoqAgAgJZQgJCADKgIAlJMgIiADQQhqKgIAlJMgI14iAxshDSADIApyIQoLIApBAXFFDQcgAiAITQ0FIAIgDU0iDkUEQCAQIA1BDGxqIgMqAgAiKCAQIAhBDGxqIgwqAgAiKpMiIiAilCADKgIEIisgDCoCBCIskyIiICKUkiADKgIIIikgDCoCCCItkyIiICKUkpEhJEF/IQlBACELIBAhA0MAAAAAIScDQCADIQUgByEDICogBSoCACIjkyIiICKUICwgBSoCBCIlkyIiICKUkiAtIAUqAggiJpMiIiAilJKRISICQAJAAkAgIyAokyIjICOUICUgK5MiIyAjlJIgJiApkyIjICOUkpEiJiAkXUUEQCAiICRdRQ0BICYhJSAkISMMAwsgIiAkXQ0BICIhJSAkISMgJiEiDAILICYgIiAiICZdIgUbISUgIiAmIAUbISMgJCEiDAELICYgIiAiICZdIgUbISMgIiAmIAUbISIgJCElC0MAAAAAQwAAAAAgJSAjICKTkiAiICUgI5MiJpIgIiAmkyAlICMgIpKSlJSUIiIgIkMAAAAAXRsgIiAiXBuRQwAAgD6UIiIgJ14hBSAiICcgBRshJyALIAkgBRshCSADQQxBACADIA9HG2ohByAGIAtBAWoiC0cNAAsMBwsgDSACQajuwwAQiAsACyAAQoCAgIAoNwIADBALIAMgFkHY1cIAENMNAAtBBEEMQZDExAAoAgAiAEHMCCAAGxEAAAALIAcgAkHAwMMAEIgLAAsgBiACQcDAwwAQiAsACyAI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QwAAAABDAAAAACCMASCMAUMAAAAAXRsgjAEgjAFcGyAVKAJQIBUoAlQiHigCCEEBa0F4cWpBCGoiECAeKAKoARELACBGKAJQIEYoAlQiGCgCCEEBa0F4cWpBCGoiFCAYKAKoARELAJKSIJUBII4BII0BIKkBlJKUXg0AIB9B+AJqEKUMAkAgOi0APEUEQCAfQfAFaiAjEPsKDAELIEcgOykCADcCACAuICcpAgA3AgAgPyBAKQIANwIAIB9B8AVqIg5BGGogKEEYaigCADYCACAOQRBqIChBEGopAgA3AwAgDkEIaiAoQQhqKQIANwMAIEdBCGogO0EIaigCADYCACAuQQhqICdBCGooAgA2AgAgP0EIaiBAQQhqKAIANgIAIB8gKCkCADcD8AULIB9BuANqIiZBOGogH0HwBWoiDkE4aikDADcDACAmQTBqIA5BMGopAwA3AwAgJkEoaiAuKQMANwMAICZBIGogDkEgaikDADcDACAmQRhqIA5BGGopAwA3AwAgJkEQaiAOQRBqKQMANwMAICZBCGogDkEIaikDADcDACAfIB8pA/AFNwO4AyAfQfgCaiEOAkAgAUUNACABLQAsRQRAIB9BsAZqIg4gAUHMAGoQ+woMAQsgMyABKQKYAjcCACA4IAEpAogBNwIAICEgASkClAE3AgAgH0GwBmoiDkEYaiABQcgAaigCADYCACAOQRBqIAFBQGspAgA3AwAgDkEIaiABQThqKQIANwMAIDNBCGogAUGgAmooAgA2AgAgOEEIaiABQZABaigCADYCACAhQQhqIAFBnAFqKAIANgIAIB8gASkCMDcDsAYLIB9B+ANqIjRBOGogDkE4aikCADcDACA0QTBqIA5BMGopAgA3AwAgNEEoaiAOQShqKQIANwMAIDRBIGogDkEgaikCADcDACA0QRhqIA5BGGopAgA3AwAgNEEQaiAOQRBqKQIANwMAIDRBCGogDkEIaikCADcDACAfIA4pAgA3A/gDIB9B+ARqIiZBGGogFUEsQYQBICAbaiIBQRhqKAIANgIAICZBEGogAUEQaikCADcDACAmQQhqIAFBCGopAgA3AwAgHyABKQIANwP4BCAfQbgEaiIBIB9BuANqICYQzAIgH0G4BWoiIEEYaiBGQSxBhAEgGRtqIg5BGGooAgA2AgAgIEEQaiAOQRBqKQIANwMAICBBCGogDkEIaikCADcDACAfIA4pAgA3A7gFICYgNCAgEMwCICAgIiABIBAgHiAmIBQgGEMAAAAAIJUBQQAgEhEsACAfLQDsBUEGcUEERg0AIJUBIJUBIB8qArgFIowBIIwBIJUBXhsgjAEgjAFcGyGVAQsgH0GwBmogH0HMAWogFxCSAyAfKAK0BiEOIB8oArAGIQEgHygCuAYNAgwFC0GwvMIAQShB2LzCABDWDAALIB9BsAZqIB9BzAFqIBcQkgMgHygCtAYhDiAfKAKwBiEBIB8oArgGDQALDAILQYS4wgBBLEGwuMIAENcLAAtBsInCAEETQfS3wgAQ1wsACyAfKALQAiIBQSFJDQAgHygC1AEgAUECdEEEEIgPDAALAAtBsInCAEETQeS3wgAQ1wsACyACIAIgL0dBA3RqIQEgLyACIg5HDQALIB8oAmQiAUUNACAfKAJgIAFBA3RrQQhrIAFBCWxBEWpBCBCIDwsgGyCVATgCBCAbIJUBILEBXTYCACAfQfAGaiQADAILIAItADxBAUcNACASQcQAaioCACGsASASQUBrKgIAIaYBIBJBPGoqAgAhqAEgEkE4aioCACGqASASQTRqKgIAIacBIBJBMGoqAgAhqwEgEkEsaioCACGtASACKgKMASGZASACKgLoASGWASACKgKQASGSASACKgLsASGeASACKgL0ASGTASACKgKUASGUASACKgLEASGkASACKgL8ASGRASACKgK8ASGyASACKgLwASGiASACKgLAASGaASACKgL4ASGdASACKgKAASGQASACKgKMAiGPASACKgKwASGOASACKgKEASGNASACKgKQAiGMASACKgK0ASGVASAfILEBIAIqArgBIAIqApQClJQgAioCiAGSOALUASAfII0BILEBIJUBIIwBlJSSOALQASAfIJABILEBII4BII8BlJSSOALMASAfIJQBILEBIKIBILIBlCCdASCaAZSSIJEBIKQBlJKUkjgC4AEgHyCSASCxASCeASCyAZQgkwEgmgGUkiCdASCkAZSSlJI4AtwBIB8gmQEgsQEglgEgsgGUIJ4BIJoBlJIgogEgpAGUkpSSOALYASAfQRxqIB9BzAFqIhMgsQEgAkFAayACQagCahCcAiAfIKoBIB8qAigijgGUIK0BIB8qAhwikQGUkyCrASAfKgIgIpAB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AnQiDiADKAIcaigCACECIA8oAiwhASAXQQhqIA9BxAD8CgAAIBBBADYCxAIgEEEANgKMAiAQQQA2AoACIBcgFyoCCCABIAJqInmzlSKdATgCCCADKAIUIgEgR00NAQJAIEdBAWoiAiABSQRAIAMoAhAiASACQQJ0aiJxKAIAIicgASAOaiJyKAIAIiZJDQQgAygCCCJjICdPDQEgJyBjQaiMwgAQjw8ACyACIAFBmIzCABCICwALIAYoAowDIVIgBigCiAMhUyAPKgIAIcQBIAMoAgQhayAnICZrIhghDyAQQfgBaiIOIkMoAggiAiAYSQR/IBggAiIBayEeIB4gQygCACABa0sEQCBDIAEgHkEEQRgQ9gYgQygCCCEBCyAOKAIEIhkgAUEYbGohIyAeQQJPBEAgDyACQX9zakEYbCISBEAgI0EAIBL8CwALIBkgAkFobGogASAPakEYbGpBGGshIyABIB5qQQFrIQELICNCADcCACAjQRBqQgA3AgAgI0EIakIANwIAIAFBAWoFIBgLIQEgQyABNgIIIA4gDigCFCICIA9JBH8gDyACIgFrIRkgGSAOKAIMIAFrSwRAIA5BDGogASAZQQRBwAAQ9gYgDigCFCEBCyAOKAIQIAFBBnRqIRIgGUECTwRAIA8gAkF/c2oiD0EDcSECIBlBAmtBA08EQCAPQXxxISMDQCASQgA3AgAgEkEQakIANwIAIBJBCGpCgICAgICAgMA/NwIAIBJBGGpCADcCACASQSBqQgA3AgAgEkEoakIANwIAIBJBMGpCADcCACASQThqQgA3AgAgEkHQAGpCADcCACASQcgAakKAgICAgICAwD83AgAgEkFAa0IANwIAIBJB2ABqQgA3AgAgEkHgAGpCADcCACASQegAakIANwIAIBJB8ABqQgA3AgAgEkH4AGpCADcCACASQYgBakKAgICAgICAwD83AgAgEkGAAWpCADcCACASQbgBakIANwIAIBJBsAFqQgA3AgAgEkGoAWpCADcCACASQaABakIANwIAIBJBmAFqQgA3AgAgEkGQAWpCADcCACASQcABakIANwIAIBJByAFqQoCAgICAgIDAPzcCACASQdABakIANwIAIBJB2AFqQgA3AgAgEkHgAWpCADcCACASQegBakIANwIAIBJB8AFqQgA3AgAgEkH4AWpCADcCACAS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aiItKAIAQYCAgIB4Rg0DIC0oAqACICIoAghHDQMgIigCECIQIC0oAghPDQQgGigC5AEhGCAgIQIgLSgCBCAQQfADbGoQnQciHgRAIBggD0HgA2xqIiMgIkEEaiIQKQIANwIAICNBCGogEEEIaikCADcCACAjQQM2AswDICMgAjYCFCAjIBI2AhAgHiAtKAKUAmxBAXQgEmoiEiAaKAKUAUsEQCBBIBIQzQILIB4gIGohIAsgDyACICBHaiEPCyAOQQhqIQ4gAUEIayIBDQALDAMLDAMLQbCJwgBBE0HYqcIAENcLAAtB6KnCABCRDwALIBooAtABIgEgIEkEQCAgIAEiAmsiESAaKALIASABa0sEQCAaQcgBaiABIBFBBEHIABD2BiAaKALQASECCyAaKALMASACQcgAbGohDiARQQJPBEAgICABQX9zaiIQQQFxIQ8gASAgQQJrRwRAIBBBfnEhAQNAIA5CADcCACAOQQhqQn83AgAgDkEQakJ/NwIAIA5BGGpCfzcCACAOQSBqQX82AgAgDkHIAGpCADcCACAOQcQAakEAOwEAIA5BPGpC////+/f//7//ADcCACAOQTRqQv////v3//+//wA3AgAgDkEsakL////79///v/8ANwIAIA5BJGpCgICAgPD//79/NwIAIA5B0ABqQn83AgAgDkHYAGpCfzcCACAOQeAAakJ/NwIAIA5B6ABqQX82AgAgDkGEAWpC////+/f//7//ADcCACAOQfwAakL////79///v/8ANwIAIA5B9ABqQv////v3//+//wA3AgAgDkHsAGpCgICAgPD//79/NwIAIA5BjAFqQQA7AQAgDkGQAWohDiABQQJrIgENAAsLIA8EQCAOQn83AgggDkIANwIAIA5BADsBRCAOQv////v3//+//wA3AjwgDkL////79///v/8ANwI0IA5C////+/f//7//ADcCLCAOQoCAgIDw//+/fzcCJCAOQRBqQn83AgAgDkEYakJ/NwIAIA5BIGpBfzYCACAOQcgAaiEOCyACIBFqQQFrIQILIA5CfzcCCCAOQgA3AgAgDkEAOwFEIA5C////+/f//7//ADcCPCAOQv////v3//+//wA3AjQgDkL////79///v/8ANwIsIA5CgICAgPD//79/NwIkIA5BEGpCfzcCACAOQRhqQn83AgAgDkEgakF/NgIAIAJBAWohIAsgGiAgNgLQASAAKAJwIgJBgJTr3ANHBEAgACkDaCHIASAXQZgEaiIBENAKIBdBgAFqIAEgyAEgAhD2CSAAKQN4IsgBIBcpA4ABfCLJASDIAVQNBiAAKAKAASAXKAKIAWoiAUGAlOvcA08EQCDJAUJ/UQ0HIMkBQgF8IckBIAFBgJTr3ANrIQELIAAgATYCgAEgACDJATcDeAsgAEGAlOvcAzYCcCAXQYABahDQCiAXKQOAASHIASAAIBcoAogBIg42AlAgACDIATcDSAJAAkACQCB5RQ0AIBooApgCIgEgGigCgAIiAiABIAJJGyEiIBooApQCIYIBIBooAvwBITMgGigCqAIieiAaKAK4AiIBRgRAIBpBnAJqIWIgFyoCFEPbD8lAlCKMASAXKgIIIrABIIwBlCAXKgIQIo4BII4BkpKVIbwBQwAAAABDAACAP0MAAIA/ILABILwBlCKMAZVDAACAv5IijQEgjQGUII4BII4BII0BQwAAgD+SQwAAgECUlJSVQwAAgD+SlSCMAUMAAAAAWxshvgFDAAAAAEMAAIA/ILABlSCwAUMAAAAAWxshuQEgFyoCLCKNAUP//39/XCEBII0BIBcqAiQijAGMlEP//3//IAEbIb0BIIwBII0BlEP//39/IAEbIrIBjCG/ASAaKAKMAiJeIAIgAiBeSxshLCAaKAJgIg8gGigChAEiASABIA9LGyGDASAaKAJUIg4gGigCeCIBIAEgDksbITUgGigCSCICIBooAmwiASABIAJLGyE2ILABQwAAAD+UIcABIIwBIBcqAiiUIcEBIHlBAWshTSAaKALAAiInIBooAsQCImxBBHRqIW0gGigC2AEiIyAaKALcASJ7QYgBbGohXSAaKALMASItIBooAtABImdByABsaiFfIBooAlwiEiAPQcAEbGohfCAaKAJQIh4gDkGsB2xqIX0gGigCRCIZIAJBuAdsaiFoIBooAoABISogGigCdCExIBooAmghKyAaKALwASFuIBdBmAFqIWAgF0GwBGohYSAaKALkASEfIBooAogCISEgCSgCTCFpIAkoAkghaiAaKAKwAiFzIBooAqACIXQgFygCPCFkIBcoAjghZiAXKgIgIbcBIBJB/ABqISYgGigC9AEiOkHQAmwhFSAaKALoASJGQeADbCFPIBooArQC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osIAEJEPAAtBsInCAEETQciiwgAQ1wsACyABIHtByKrCABCODwALIAEgZ0GoqcIAEI4PAAtBmKnCABCRDwALQbCJwgBBE0GIqcIAENcLAAtB+KjCABCRDwALQbCJwgBBE0HoqMIAENcLAAsgECBnQZiqwgAQjg8AC0GIqsIAEJEPAAtBsInCAEETQfipwgAQ1wsACyAiBEBBACECA0AgAiCCAWoiA0EIaioCACGxASADQQRqKgIAIZUBIAIgM2oiBCADKgIAIAQqAgCSOAIAIARBBGoiACCVASAAKgIAkjgCACAEQQhqIgAgsQEgACoCAJI4AgAgA0EUaioCACGxASADQRBqKgIAIZUBIARBDGoiACADQQxqKgIAIAAqAgCSOAIAIARBEGoiACCVASAAKgIAkjgCACAEQRRqIgAgsQEgACoCAJI4AgAgAkEYaiECICJBAWsiIg0ACwsgF0EBNgKcBCAXIAE2ApgEIBdBATYCVCAXIHo2AlAgF0IANwKMASAXQoGAgIDAADcChAEgF0GE/8EANgKAASAXQdAAaiAXQZgEaiAXQYABakGM/8EAEPkMAAsgACkDSCHIASAXQZgEaiIBENAKIBdBgAFqIAEgyAEgDhD2CSAAKQNYIsgBIBcpA4ABfCLJASDIAVQNASAAKAJgIBcoAogBaiIBQYCU69wDTwRAIMkBQn9RDQIgyQFCAXwhyQEgAUGAlOvcA2shAQsgACABNgJgIAAgyQE3A1gLIABBgJTr3AM2AlAgF0GAAWoQ0AogFykDgAEhyQEgACAXKAKIASItNgKwASAAIMkBNwOoASAaKALYASICIBooAtwBQYgBbGohDyAaKALMASIOIBooAtABQcgAbGohAQNAAkAgDkUNACABIA5GDQAjAEEgayIRJAACQCAOKAIgIhBBf0YNAAJAAkACQAJAAkACQCAQID9JBEAgMiAQQYADbGohECAOKAIEIRIgDigCAEEBaw4CAgMBCyAQID9B6KfCABCICwALIBJBBk8NAyAQIBJBAnRqQdACaiAOKgIkOAIADAULIBJBBkkNASASQQZBiKjCABCICwALIBJBBkkNAiASQQZBmKjCABCICwALIBAgEkEMbGpBGGogDioCJDgCAAwCCyARQQA2AhggEUEBNgIMIBFBzP7BADYCCCARQgQ3AhAgEUEIakH4p8IAELgNAAsgECASQRxsakGkAWogDioCJDgCAAsgEUEgaiQAIA5ByABqIQ4MAQsgAiAPRwRAIwBBIGsiECQAAkACQAJAAkACQAJAAkAgAigCECIOID9JBEAgMiAOQYADbGohDiACKAIEIREgAigCAEEBaw4CAgMBCyAOID9B+KzCABCICwALIBFBBk8NAiAOIBFBAnRqQdACaiACKgIUOAIADAULIBFBBkkNAyARQQZBmK3CABCICwALIBFBBkkNASARQQZBqK3CABCICwALIBBBADYCGCAQQQE2AgwgEEHM/sEANgIIIBBCBDcCECAQQQhqQYitwgAQuA0ACyAOIBFBHGxqQaQBaiACKgIUOAIADAELIA4gEUEMbGpBGGogAioCFDgCAAsgEEEgaiQAIAJBiAFqIQJBACEODAELCyAaKAJcIgIgGigCYEHABGxqIRIgGigCUCIRIBooAlRBrAdsaiEQIBooAkQiHCAaKAJIQbgHbGohGANAIBAgEUchAUEBIQ4CQANAAkAgDkEBcQRAAkAgHEUNACAYIBxGDQAgHCBAIDsQ0gMgHEG4B2ohDgNAIA4gGEYNASAOIEAgOxDSAyAOQbgHaiEODAALAAtBACEcIAENAQsgAiASRg0CAkAgAi0AuAQiGUUNAAJAIAIoArQEIg5Bf0YEQCAZQQVrQXxPDQIMAQsCQCAOIDtJBEAgAi0AuQQiDyBAIA5BAnRqKAIAIh4oAoQBIiBPDQEgAioCkAQhjQEgAikC2AMhyAEgHigCgAEgD0EGdGoiDiACKgJ4IowBOAI4IA4gjAEgAioCfJI4AjQgDiCNATgCPCAOIMgBNwIsIBlBAUYNAyACLQC6BCIPIB4oAoQBIiBPDQEgHigCgAEgD0EGdGoiDiACKgLEASKMATgCOCAOIIwBIAIqAsgBkjgCNCAOII0BOAI8IA4gyAE3AiwgGUECRg0DIAItALsEIg8gHigChAEiIE8NASAeKAKAASAPQQZ0aiIOIAIqApACIowBOAI4IA4gjAEgAioClAKSOAI0IA4gjQE4AjwgDiDIATcCLCAZQQNGDQMgAi0AvAQiDyAeKAKEASIgTw0BIB4oAoABIA9BBnRqIg4gAioC3AIijAE4AjggDiCMASACKgLgApI4AjQgDiCNATgCPCAOIMgBNwIsIBlBBEcNAgwDCyAOIDtByKXCABCICwALIA8gIEHYpcIAEIgLAAtBBEEEQbilwgAQiAsACyACQcAEaiECQQAhDgwBCwsCQCARLQCkByIORQ0AAkAgESgCoAciAUF/RgRAIA5BBWtBfE8NAgwBCwJAIAEgO0kEQCARLQClByIPIEAgAUECdGooAgAiGSgChAEiIE8NASAZKAKAASAPQQZ0aiIBIBEqAngijAE4AjggASCMASARKgJ8kjgCNCABIBEpAtgDNwIsIAEgESoC2AMgESkC4AMiyAGnvpK8rSARKgLcAyDIAUIgiKe+krytQiCGhDcCJCAOQQFGDQMgES0ApgciDyAZKAKEASIgTw0BIBkoAoABIA9BBnRqIgEgESoCxAEijAE4AjggASCMASARKgLIAZI4AjQgASARKQLkBDcCLCABIBEqAuQEIBEpAuwEIsgBp76SvK0gESoC6AQgyAFCIIinvpK8rUIghoQ3AiQgDkECRg0DIBEtAKcHIg8gGSgChAEiIE8NASAZKAKAASAPQQZ0aiIBIBEqApACIowBOAI4IAEgjAEgESoClAKSOAI0IAEgESkC8AU3AiwgASARKgLwBSARKQL4BSLIAae+krytIBEqAvQFIMgBQiCIp76SvK1CIIaENwIkIA5BA0YNAyARLQCoByIPIBkoAoQBIiBPDQEgGSgCgAEgD0EGdGoiASARKgLcAiKMATgCOCABIIwBIBEqAuACkjgCNCABIBEpAvwGNwIsIAEgESoC/AYgESkChAciyAGnvpK8rSARKgKAByDIAUIgiKe+krytQiCGhDcCJCAOQQRHDQIMAwsgASA7QdihwgAQiAsACyAPICBB6KHCABCICwALQQRBBEHIocIAEIgLAAsgEUGsB2ohEQwBCwsgcigCACIBIHEoAgAiAk0EQCACIGNNBEAgASACRwRAIGsgAkEDdGohI0MAAAAAQwAAgD8gxAGVIMQBQwAAAABbGyGdASBrIAFBA3RqIRwgGigC/AEhICAaKAKIAiEeIBooAowCITAgGigCgAIhJyAaKAKgAiExIBooAqgCIRkgCSgCSCEYIAkoAkwhEiAaKALEAiERA0AgHCgCBCEBIBwoAgAhDgJAAkACQAJAAkACQAJAAkACQCARRQ0AIA4gWU8NACABIFogDkEUbGoiAigCAEcNACACKAIEIgEgEk8NASAYIAFBpAJsaiIPKAIAQYCAgIB4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HCAVQTBqIMkBNwMAIBVCidm54o7TvpcINwM4IBUgyAE3AyggBygCECJRQbABbCEQIAEqAhxDCtcjPJQhjQEgBigCiAMhEyAGKAKMAyESIAcoAgwhTwNAAkACQAJAAkAgDiAQRwRAIA4gT2oiESgCAEUNAyARQfIAai0AAA0DIBFBIGooAgBFDQMCQCARQSRqKAIAIgEgEk8NACATIAFBgANsaiIBKAIAQQFHDQAgASgCBCARQShqKAIARg0CC0GwicIAQRNBoLzCABDXCwALIBUgBzYCmAEgFSAGNgKUASAVIAQ2ApABIBVCADcCfCAVQQA2AnAgFUEANgJkIBVBADYCWCAVIAUoAkAiJDYCjAEgFSAFKAI8ICQoAghBAWtBeHFqQQhqIjk2AogBIJUBIYwBIAMoAggiAkUNASADKAIEIgEgAkEDdGohRyABQQhqIQ4gFUGIAmohJSAFKAIUIScgBSgCECEXIAUoAgQhJiAFKAIIIRogBSgCOCEsIAUoAjQhKiAVQegDaiEcIAYoAogDITQgBigCjAMhLyAkQSBqISIDQAJAIAEoAgAiAiAvTw0AIDQgAkGAA2xqIgIoAgBBAUcNACACKAIEIAEoAgRHDQAgDiEYAkAgAi0APEUNACACKgKkASGdASACKgLoASGbASACKgKoASGZASACKgLsASGaASACKgL0ASGWASACKgKsASGSASACKgLEASGoASACKgL8ASGTASACKgK8ASGkASACKgLwASGeASACKgLAASGyASACKgL4ASGiASACKgKYASGUASACKgKMAiGRASACKgKwASGQASACKgKcASGPASACKgKQAiGOASACKgK0ASGNASAVIJUBIAIqArgBIAIqApQClJQgAioCoAGSOALIAiAVII8BIJUBII0BII4BlJSSOALEAiAVIJQBIJUBIJABIJEBlJSSOALAAiAVIJIBIJUBIJ4BIKQBlCCiASCyAZSSIJMBIKgBlJKUkjgC1AIgFSCZASCVASCaASCkAZQglgEgsgGUkiCiASCoAZSSlJI4AtACIBUgnQEglQEgmwEgpAGUIJoBILIBlJIgngEgqAGUkpSSOALMAiAVQZwBaiAVQcACaiCVASACQUBrIAJBqAJqEJwCIAIoAvACIgFFDQAgAigC7AIiEyABQQN0aiErIBNBCGohDiAVKgK0ASGQASAV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AAAgKCgABCEmICggATYABCAoKAAMIQ4gKCAUNgAMICgoABQhESAoIBA2ABQgKCgAHCEiICggEjYAHCAoQQhqIiooAAAhHiAqIAI2AAAgKEEQaiISKAAAIQ8gEiATNgAAIChBGGoiEyoAACGNASATIIwBOAAAIChBIGoiAigAACEQIAIgGDYAACAoKAAkIRQgKCAgNgAkIChBKGoiASgAACEYIAEgIzYAACAoKAAsISAgKCAtNgAsIBVBwAJqIiNBKGoiJyABKQIANwMAICNBIGoiKyACKQIANwMAICNBGGoiMCATKQIANwMAICNBEGoiISASKQIANwMAICNBCGoiOCAqKQIANwMAIBUgKCkCADcDwAJBACETQQEhAiAyQQRPBEAgGUECayIBQQAgASAZTRshI0EAIQEDQCAoIAFBMGxqIhIgKCACICggAkEwbGoiAUEYaioCACABQcgAaioCAF1FaiITQTBsaiIBKQIANwIAIBJBKGogAUEoaikCADcCACASQSBqIAFBIGopAgA3AgAgEkEYaiABQRhqKQIANwIAIBJBEGogAUEQaikCADcCACASQQhqIAFBCGopAgA3AgAgE0EBdCISQQFyIQIgEyEBIBIgI0kNAAsLAkACQAJAIDJBAmsgAkYEQCAoIBNBMGxqIgEgKCACQTBsaiIyKQIANwIAIAFBKGogMkEoaiIjKQIANwIAIAFBIGogMkEgaiISKQIANwIAIAFBGGogMkEYaiItKQIANwIAIAFBEGogMkEQaiITKQIANwIAIAFBCGogMkEIaiIBKQIANwIAIDIgFSkDwAI3AgAgASA4KQMANwIAIBMgISkDADcCACAtIDApAwA3AgAgEiArKQMANwIAICMgJykDADcCACAtKgIAIakBDAELICggE0EwbGoiAkEYaiIBIDApAwA3AgAgAiAVKQPAAjcCACACQShqICcpAwA3AgAgAkEgaiArKQMANwIAIAJBEGogISkDADcCACACQQhqIDgpAwA3AgAgASoCACGpASATRQ0BIBMhAgsDQCCpASAoIAJBAWsiEkEBdiIBQTBsaiIjQRhqIhMqAgBdRQ0CICggAkEwbGoiAiAjKQIANwIAIAJBKGogI0EoaikCADcCACACQSBqICNBIGopAgA3AgAgAkEYaiATKQIANwIAIAJBEGogI0EQaikCADcCACAC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ENYMAAsgBCAHKQIANwOgAyAEIAdBCGooAgA2AqgDIARB+ABqIgFBC2pCADcAACAEQfwBaiIGQQtqQgA3AAAgBEHpAWoiBUELakIANwAAIARB1gFqIgdBC2pCADcAACAEQcMBaiIIQQtqQgA3AAAgBEIANwB7IARCADcA/wEgBEIANwDsASAEQgA3ANkBIARCADcAxgFBACEJIARBtANqQQA2AgAgBEIANwKsAyAEQbABaiINQQ9qIg4gAUEPaigAADYAACANQQhqIg0gAUEIaikAADcDACAEIAQpAHg3A7ABIARB4ABqIgFBD2oiESAGQQ9qKAAANgAAIAFBCGoiASAGQQhqKQAANwMAIAQgBCkA/AE3A2AgBEHIAGoiBkEPaiIMIAVBD2ooAAA2AAAgBkEIaiIGIAVBCGopAAA3AwAgBCAEKQDpATcDSCAEQTBqIgVBD2oiEiAHQQ9qKAAANgAAIAVBCGoiBSAHQQhqKQAANwMAIAQgBCkA1gE3AzAgBEEYaiIHQQ9qIg8gCEEPaigAADYAACAHQQhqIgcgCEEIaikAADcDACAEIAQpAMMBNwMYIARBogJqIARBsANqKQMANwEAIARBmgJqIAQpA6gDNwEAIAQgBCkDoAM3AZICIANCADcDGCADQgA3AxAgA0H////7BzYCYCADQoCAgIDw//+/fzcDWCADQv////v///+//wA3A1AgA0L////7BzcDSCADQoCAgIDw//+/fzcDQCADQv////v///+//wA3AzggA0L////7BzcDMCADQoCAgIDw//+/fzcDKCADQv////v///+//wA3AyAgAyAaOAIMIAMgFzgCCCADIBk4AgQgAyAYOAIAIANCADcCZCADQewAakIANwIAIANBgICA/AM2AnQgAy0AyAIhCCADQYgBakIANwMAIANBgAFqQgA3AwAgA0IANwN4IANBgICA/AM2ApABIANCADcClAEgA0GcAWpCADcCACADQaQBakIANwIAIANBrAFqQQA2AgAgA0L////7BzcDsAEgA0EAOgC4ASADQQA6ANQBIANC////+wc3AswBIAMgBCkDsAE3ALkBIANBwQFqIA0pAwA3AAAgA0HIAWogDigAADYAACADQQA6APABIANC////+wc3A+gBIANBADoAjAIgA0L////7BzcChAIgA0HkAWogESgAADYA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QRBqKQMANwMAIA5BCGoiCSANKQMANwMAIAQgBCkDoAM3A3ggBEHgAGoiDUEPaiIOIAFBD2ooAAA2AAAgDUEIaiINIAFBCGopAAA3AwAgBCAEKQD8ATcDYCAEQcgAaiIBQQ9qIgwgBkEPaigAADYAACABQQhqIgEgBkEIaikAADcDACAEIAQpAOkBNwNIIARBMGoiBkEPaiISIAVBD2ooAAA2AAAgBkEIaiIGIAVBCGopAAA3AwAgBCAEKQDWATcDMCAEQRhqIgVBD2oiDyAHQQ9qKAAANgAAIAVBCGoiBSAHQQhqKQAANwMAIAQgBCkAwwE3AxggBEEPaiIHIAhBD2ooAAA2AAAgBEEIaiIVIAhBCGopAAA3AwAgBCAEKQCwATcDACADQgA3AxggA0IANwMQIAMgGjgCdCADIBc4AnAgAyAZOAJsIAMgGDgCaCADQv////sHNwNgIANCgICAgPD//79/NwNYIANC////+////7//ADcDUCADQv////sHNwNIIANCgICAgPD//79/NwNAIANC////+////7//ADcDOCADQv////sHNwMwIANCgICAgPD//79/NwMoIANC////+////7//ADcDICADQoCAgICAgIDAPzcDCCADQgA3AwAgAy0AyAIhCCADQYCAgPwDNgKQASADQgA3ApQBIANBnAFqQgA3AgAgA0GkAWpCADcCACADQawBakEANgIAIANC////+wc3A7ABIANBADoAuAEgA0GIAWogESkDADcDACADQYABaiAJKQMANwMAIAMgBCkDeDcDeCADIAQpA2A3ALkBIANBwQFqIA0pAwA3AAAgA0HIAWogDigAADYAACADQQA6ANQBIANC////+wc3AswBIANBADoA8AEgA0L////7BzcD6AEgA0EAOgCMAiADQv////sHNwKEAiADQeQBaiAMKAAANgAAIANB3QFqIAEpAwA3AAAgAyAEKQNINwDVASADQYACaiASKAAANgAAIANB+QFqIAYpAwA3AAAgAyAEKQMwNwDxASADQZwCaiAPKAAANgAAIANBlQJqIAUpAwA3AAAgAyAEKQMYNwCNAiADQQA6AKgCIANC////+wc3A6ACIANBuAJqIAcoAAA2AAAgA0GxAmogFSkDADcAACADIAQpAwA3AKkCIANBgAI7AcwCIANBPzYCyAIgA0EAOgDE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IAxBAWoiATYC1AEgASALRgRAIBNBgIbDABCbCCAEKALMASELIAQoAtABIQMLIAMgAUE0bGoiBSAEKQOIAzcCACAFQShqIARBiANqIgFBKGopAwA3AgAgBUEgaiABQSBqKQMANwIAIAVBGGogAUEYaikDADcCACAFQRBqIAFBEGopAwA3AgAgBUEIaiABQQhqKQMANwIAIAVBMGogAUEwaigCADYCACAEIAxBAmoiATYC1AEgASALRgRAIBNBkIbDABCbCCAEKALMASELIAQoAtABIQMLIAMgAUE0bGoiBSAEKQPAAzcCACAFQShqIARBwANqIgFBKGopAwA3AgAgBUEgaiABQSBqKQMANwIAIAVBGGogAUEYaikDADcCACAFQRBqIAFBEGopAwA3AgAgBUEIaiABQQhqKQMANwIAIAVBMGogAUEwaigCADYCACAEIAxBA2oiATYC1AEgASALRgRAIBNBoIbDABCbCCAEKALQASEDCyADIAFBNGxqIgUgBCkD+AM3AgAgBUEoaiAEQfgDaiIBQShqKQMANwIAIAVBIGogAUEgaikDADcCACAFQRhqIAFBGGopAwA3AgAgBUEQaiABQRBqKQMANwIAIAVBCGogAUEIaikDADcCACAFQTBqIAFBMGooAgA2AgAgBCAMQQRqIgE2AtQBAkAgDkEBcUUNAAJAIAEEQCAEKALIAUUNASADKgIYIAQoAsQBIgEqAgCUIANBHGoqAgAgAUEEaioCAJSSIANBIGoqAgAgAUEIaioCAJSSIhVDAACgtV0NByAVjCEWIAQoAuwBIgEgBCgC5AFGBEAgEUHA08IAELgICyAEKALoASIHIAFBA3RqIgMgFjgCBCADQQA2AgAgBCABQQFqNgLsAUEAIQMCQCABRQ0AA0AgByABQQFrIgZBAXYiA0EDdGoiBUEEaioCACAWXUUEQCABIQMMAgsgByABQQN0aiAFKQIANwIAIAMhASAGQQFLDQALCyAHIANBA3RqIgEgFjgCBCABQQA2AgAMAgtBAEEAQbCGwwAQiAsAC0EAQQBBwIbDABCICwALAkAgEkEBcUUNAAJAIAQoAtQBIgFBAk8EQCAEKALIASIBQQFNDQEgBCgC0AEiAyoCTCAEKALEASIBKgIklCADQdAAaioCACABQShqKgIAlJIgA0HUAGoqAgAgAUEsaioCAJSS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NwMAIAhBGGoiEyAJQRhqIg4pAgA3AwAgCEEQaiIZIAlBEGoiDSkCADcDACAIQQhqIhogCUEIaiISKQIANwMAIAcgBykCgAc3A4gDIActALQHIREgCSAHKAL8ASAHKAKAAiAHQbQCaiAHQeQCahDPAiAHQcADaiIIQTBqIAooAgA2AgAgCEEoaiALKQIANwMAIAhBIGogDCkCADcDACAIQRhqIA4pAgA3AwAgCEEQaiANKQIANwMAIAhBCGogEikCADcDACAHIAcpAoAHNwPAAyAHLQC0ByEPIAkgBygC/AEgBygCgAIgB0HAAmogB0HwAmoQzwIgB0H4A2oiCEEwaiAKKAIANgIAIAhBKGogCykCADcDACAIQSBqIAwpAgA3AwAgCEEYaiAOKQIANwMAIAhBEGogDSkCADcDACAIQQhqIBIpAgA3AwAgByAHKQKABzcD+AMgBy0AtAchFiAJIAcoAvwBIAcoAoACIAdBzAJqIAdB/AJqEM8CIAdBsARqIghBMGogCigCADYCACAIQShqIAspAgA3AwAgCEEgaiAMKQIANwMAIAhBGGogDikCADcDACAIQRBqIA0pAgA3AwAgCEEIaiASKQIANwMAIAcgBykCgAc3A7AEIActALQHIQ4gBygChAIiCCAHKAKMAiILRgRAIBVB8IXDABCbCCAHKAKEAiEICyAHKAKIAiIJIAtBNGxqIgogBykDiAM3AgAgCkEoaiAYKQMANwIAIApBIGogFCkDADcCACAKQRhqIBMpAwA3AgAgCkEQaiAZKQMANwIAIApBCGogGikDADcCACAKQTBqIBcoAgA2AgAgByALQQFqIgo2AowCIAggCkYEQCAVQYCGwwAQmwggBygCiAIhCSAHKAKEAiEICyAJIApBNGxqIgogBykDwAM3AgAgCkEoaiAHQcADaiIMQShqKQMANwIAIApBIGogDEEgaikDADcCACAKQRhqIAxBGGopAwA3AgAgCkEQaiAMQRBqKQMANwIAIApBCGogDEEIaikDADcCACAKQTBqIAxBMGooAgA2AgAgByALQQJqIgo2AowCIAggCkYEQCAVQZCGwwAQmwggBygCiAIhCSAHKAKEAiEICyAJIApBNGxqIgogBykD+AM3AgAgCkEoaiAHQfgDaiIMQShqKQMANwIAIApBIGogDEEgaikDADcCACAKQRhq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IU8gBEHAAmoqAgAhdSAEQbwCaioCACF2IARBqAJqLQAAIVAgBEGkAmoqAgAhdyAEQaACaioCACF4IARBjAJqLQAAIREgBEGIAmoqAgAheSAEQYQCaioCACF6IARB8AFqLQAAIRQgBEHsAWoqAgAheyAEQegBaioCACF8IARB1AFqLQAAIVEgBEHQAWoqAgAhfSAEQcwBaioCACF+IARBuAFqLQAAIVIgBEG0AWoqAgAhfyAEQbABaioCACGAASAEQZwBaioCACGBASAEQZgBaioCACGCASAEQZQBaioCACGDASAEQZABaioCACGEASAEQfQAaioCACGFASAEQeQAaigCACFTIARB4ABqKgIAIYYBIARB3ABqKgIAIYcBIARB2ABqKgIAIYgBIARB1ABqKgIAIYkBIARB0ABqKgIAIYoBIARBzABqKgIAIYsBIARByABqKgIAIYwBIARBxABqKgIAIY0BIARBQGsqAgAhjgEgBEE8aioCACGPASAEQThqKgIAIZABIARBNGoqAgAhkQEgBEEwaioCACGSASAEQSxqKgIAIZMBIARBKGoqAgAhlAEgBEEkaioCACGVASAEQSBqKgIAIZYBIARBDGoqAgAhlwEgBEEIaioCACGYASAEQQRqKgIAIZkBIAQqAgAhmgEgBUGIC2oiVCAEQfAAaigCADYCACAFQegKaiIBQQhqIlUgBEGAAWopAwA3AwAgAUEQaiJWIARBiAFqKQMANwMAIAVBuApqIgFBCGoiVyAEQcEBaikAADcDACABQQ9qIlggBEHIAWooAAA2AAAgBSAEQegAaikCADcDgAsgBSAEQfgAaikDADcD6AogBSAEQaABaikDADcD0AogBSAEQagBaikDADcD2AogBSAEQbkBaikAADcDuAogBUGgCmoiAUEPaiJZIARB5AFqKAAANgAAIAFBCGoiWiAEQd0BaikAADcDACAFQYgKaiIBQQhqIlsgBEH5AWopAAA3AwAgAUEPaiJcIARBgAJqKAAANgAAIAVB8AlqIgFBCGoiXSAEQZUCaikAADcDACABQQ9qIl4gBEGcAmooAAA2AAAgBSAEQdUBaikAADcDoAogBSAEQfEBaikAADcDiAogBSAEQY0CaikAADcD8AkgBUHYCWoiAUEPaiJfIARBuAJqKAAANgAAIAFBCGoiYCAEQbECaikAADcDACAFQdYJaiIaIARBxwJqLQAAOgAAIAVBuAlqIgFBGGoiYSAEQeYCai8BADsBACABQRBqImIgBEHeAmopAQA3AwAgAUEIaiJjIARB1gJqKQEANwMAIAUgBEGpAmopAAA3A9gJIAUgBEHFAmovAAA7AdQJIAUgBEHOAmopAQA3A7gJIEwgBEGQA2opAAA3AAAgBUGwAmoiAUEgaiIbIARBiQNqKQAANwMAIAFBGGoiLSAEQYEDaikAADcDACABQRBqIi4gBEH5AmopAAA3AwAgAUEIaiIvIARB8QJqKQAANwMAIAUgBEHpAmopAAA3A7ACIAVBsAlqIhcgBEGkA2ooAAA2AgAgBSAEQZwDaikAADcDqAkgBUGgCWoiHSAEQbQDaigAADYCACAFIARBrANqKQAANwOYCSAFQegGaiIBQTBqIjAgBEHoA2opAAA3AwAgAUEoaiIxIARB4ANqKQAANwMAIAFBIGoiMiAEQdgDaikAADcDACABQRhqIgogBEHQA2opAAA3AwAgAUEQaiILIARByANqKQAANwMAIAFBCGoiDCAEQcADaikAADcDACAFIARBuANqKQAANwPoBgJ/AkACQAJAAkACQCAIRSAIICVGciIGBEAgCCATTw0CIA4gEGogBSgClAkiMzYCACAFQQA2ApwLIAVCADcClAsgBUKAgICAwAA3AowLIAVB0ARqIAVBjAtqIgEQfCAFQQA2AuALIAVCADcC2AsgBUKAgICAwAA3AtALIAEgBUHQC2oQfCAFKAKMCSAzRgRAIwBBIGsiASQAQQQgBUGMCWoiNCgCACIhQQF0IgMgA0EETRsiB61CoAJ+InFCIIhCAFIEQEEAQQBBnJDCABDTDQALAkAgcaciA0H8////B00EfyABICEEfyABICFBoAJsNgIcIAEgNCgCBDYCFEEEBUEACzYCGCABQQhqQQQgAyABQRRqEPQJIAEoAghBAUcNASABKAIQISAgASgCDAVBAAsgIEGckMIAENMNAAsgASgCDCEDIDQgBzYCACA0IAM2AgQgAUEgaiQACyAFKAKQCSAzQaACbGoiA0EANgJYIANCADcCUCADQoCAgIDAADcCSCADQgQ3AkAgA0IANwI4IANCBDcCMCADQgA3AiggA0IENwIgIANCADcCGCADQgQ3AhAgA0IANwIIIANCgICAgIACNwIAIAMgBSkC0AQ3AlwgA0HkAGogBUHQBGoiAUEIaikCADcCACADQewAaiABQRBqKQIANwIAIANB9ABqIAFBGGopAgA3AgAgA0H8AGogAUEgaikCADcCACADQQA2AqQBIANCADcCnAEgA0KAgICAwAA3ApQBIANCgICAgHA3AowBIANCgICAgMAANwKEASADQQQ2AogCIANCgICAgMAANwLQASADQgA3AtgBIANCBDcC4AEgA0IANwLoASADQgQ3AvABIANCgICAgMAANwL4ASADQgA3AoACIAMgBSkCjAs3AqgBIANBsAFqIAVBjAtqIgFBCGopAgA3AgAgA0G4AWogAUEQaikCADcCACADQcABaiABQRhqKQIANwIAIANByAFqIAFBIGopAgA3AgAgA0GcAmpBADoAACADQZQCakIANwIAIANCADcCjAIgAyAcOgCdAiAFIDNBAWo2ApQJDAELIBMgI00NCSAIIBNPDQogDiAQaiAQICNBAnRqKAIANgIACyAIIBNGDQEgDiAQaigCACIDIAUoApQJIgFPDQIgDiAPaiAFKAKQCSADQaACbGoiBygCCCIDNgIAIAYNAyAeICJBEHRyDAQLIAggE0GMkMIAEIgLAAsgEyATQayQwgAQiAsACyADIAFBvJDCABCICwALIFQgFygCADYCACAFIAUpA6gJNwOACyAFQdAEaiICQQhqIgEgHSgCADYCACAFIAUpA5gJNwPQBEIAIXIgS0IANwAAIEtBCGpCADcAACBKQgA3AAAgSkEIakIANwAAIElCADcAACBJQQhqQgA3AAAgSEIANwAAIEhBCGpCADcAACBHQgA3AAAgR0EIakIANwAAIEZCADcCAEEAIU4gRkEIakEANgIAICxBEGpCADcBACAsQQhqQgA3AQAgLEIANwEAIAVCADcD0AogBUIANwPYCiBWIAJBEGopAwA3AwAgVSABKQMANwMAIAUgBSkD0AQ3A+gKIFggBUGMC2oiAUEPaigAADYAACBXIAFBCGopAAA3AwAgBSAFKQCMCzcDuAogWSAFQdALaiIBQQ9qKAAANgAAIFogAUEIaikAADcDACAFIAUpANALNwOgCiBcIAVBjQxqIgFBD2ooAAA2AAAgWyABQQhqKQAANwMAIAUgBSkAjQw3A4gKIF4gBUH6C2oiAUEPaigAADYAACBdIAFBCGopAAA3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AjwiC0H/////A3EiBrOUkiIwIBkgHZMgGiAek5QgGyAfk5QgCLOUIBwgKSAcIClgGyIZICAgLCAgICxfGyIdkyAhICggISAoYBsiGiAiICsgIiArXxsiHpOUICMgJyAjICdgGyIbICQgKiAkICpfGyIfk5QgBkEBarOUkiIcXUUEQCAGIAhNDQEgHCAwXA0BCyAIQQFHDQIgByADKQMANwMAIAcgASkCADcDICAHIANBGGopAwA3AxggByADQRBqKQMANwMQIAcgA0EIaikDADcDCCAHIAFBCGooAgA2AiggACgCACAFRgR/IABBiOHCABDICCAAKAIEBSAECyAFQQZ0aiIBIAcpAwA3AwAgASACNgIsIAEgFikCADcCMCABQShqIAcoAig2AgAgAUEgaiAHKQMgNwMAIAFBGGogBykDGDcDACABQRBqIAcpAxA3AwAgAUEIaiAHKQMINwMAIAFBOGogFkEIaigCADYCACABQYGAgIB8NgI8IAAgBUEBajYCCCAKQQF0IQMgACgCFCIBIAAoAgxGBEAgAEEMakGY4cIAELkICyAAKAIQIAFBAnRqIAM2AgAgACABQQFqNgIUIAAoAggiASAKTQ0HIAAoAgQgCkEGdGoiASgCDCIDIAAoAiBPDQggACgCHCADQQN0aiIDKAIARQ0IIAMgBUEBdCIDNgIEIAIgACgCIE8NASAAKAIcIAJBA3RqIgAoAgBFDQEgACADQQFyNgIEIAEgBTYCDCABIAEoAhxBAWo2AhwgASABKgIAIhkgLCAZICxfGzgCACABIAEqAgQiGSArIBkgK18bOAIEIAEgASoCCCIZICogGSAqXxs4AgggASABKgIQIhkgKSAZIClgGzgCECABIAEqAhQiGSAoIBkgKGAbOAIUIAEgASoCGCIZICcgGSAnYBs4AhggFSQADwsgBkEBRgRAIAcgAykDIDcDYCAHIANBOGopAwA3A3ggByADQTBqKQMANwNwIAcgA0EoaikDADcDaCAAKAIAIAVGBH8gAEG44MIAEMgIIAAoAgQFIAQLIAVBBnRqIgMgASkCADcCACADIAI2AgwgAyAWKQIANwIQIANBgYCAgHw2AhwgAyAHKQNgNwMgIANBCGogAUEIaigCADYCACADQRhqIBZBCGooAgA2AgAgA0EoaiAHKQNoNwMAIANBMGogBykDcDcDACADQThqIAcpA3g3AwAgACAFQQFqNgIIIApBAXRBAXIhAyAAKAIUIgEgACgCDEYEQCAAQQxqQcjgwgAQuQgLIAAoAhAgAUECdGogAzYCACAAIAFBAWo2AhQgACgCCCIBIApNDQUgAiAAKAIgTw0GIAAoAhwgAkEDdGoiASgCAEUNBiAAKAIEIQIgASAFQQF0IgE2AgQCQCACIApBBnRqIgIoAiwiAyAAKAIgTw0AIAAoAhwgA0EDdGoiACgCAEUNACAAIAFBAXI2AgQgAkEgaiIAIAU2AgwgACAAKAIcQQFqNgIcIAAgACoCACIZICwgGSAsXxs4AgAgACAAKgIEIhkgKyAZICtfGzgCBCAAIAAqAggiGSAqIBkgKl8bOAIIIAAgACoCECIZICkgGSApYBs4AhAgACAAKgIUIhkgKCAZIChgGzgCFCAAIAAqAhgiGSAnIBkgJ2AbOAIYIBUkAA8LQajdwgBBD0H44MIAENcLAAsgAyALQQFqNgI8IAMgGzgCOCADIBo4AjQgAyAZOAIwIAMgHzgCKCADIB44AiQgAyAdOAIgIAMoAiwhCgwIC0Go3cIAQQ9ByOHCABDXCwALIAMgLjgCGCADIDg4AhQgAyAlOAIQIAMgLzgCCCADIC04AgQgAyAmOAIAIAMgCUEBajYCHCADKAIMIQoMBgsgCCAGQcjiwgAQiAsACyAKIAVBqODCABCICwALIAogAUHY4MIAEIgLAAtBqN3CAEEPQejgwgAQ1wsACyAKIAFBqOHCABCICwALQajdwgBBD0G44cIAENcLAAsgACgCCCIEIApLDQALIAogBEHY4cIAEIgLAAsgAyACNgIsIANBgYCAgHw2AjwgAyABKQIANwIgIAMgASkCDDcCMCADQShqIAFBCGooAgA2AgAgA0E4aiABQRRqKAIANgIAIAVBATYCBCAVJAALpiwDHH8HfiZ9IwBBoBJrIgkkACAJIAg6ADcgCSAFOAIwAkACQAJAAkACfwJAAkAgBygCACIIRQ0AIAlBKGogCCAHKAIEKAIYEQAAIAlB0AdqIAkoAigiCCAJKAIsKAIMEQAAIAhFDQAgCSkD0AdC7KO27sHd7PlWhSAJKQPYB0KoieGE1YPfwVeFhFANAQtBIEEIELMOIghFDQMgCEEAOgAYIAhCidm54o7TvpcINwMQIAhBCGpBwNXCACkDADcDACAIQbjVwgApAwA3AwACQCAHKAIAIgxFDQAgBygCBCIKKAIAIgsEQCAMIAsRBgALIAooAgQiC0UNACAMIAsgCigCCBCIDwsgB0Hg+sIANgIEIAcgCDYCAEHg+sIADAELIAcoAgAiCEUNASAHKAIECyEHIAlBIGogCCAHKAIcEQAAIAlB0AdqIAkoAiAiDCAJKAIkKAIMEQAAAkAgDEUNACAJKQPQB0Lso7buwd3s+VaFIAkpA9gHQqiJ4YTVg9/BV4WEQgBSDQAgDCAMLQAYQX9zQQFxIhE6ABggBigCCCESIAYoAgQhFyAGQgQ3AgQgBigCACEYIAZBADYCACADIAQoAhAiCBEEACETIAkgAioCbCI+QwAAAD+UIkQ4AkAgCSACKgJoIj9DAAAAP5QiRTgCPCAJIAIqAmQiQEMAAAA/lCJGOAI4Q///f38hMUP//3//ITQCQCACKAIIRQRAQ///f/8hLUP//3//IQVD//9/fyEsQ///f38hLgwBC0P//3//IS1D//9//yEFQ///f38hLEP//39/IS4CQAJAIAIoAgQiBygCPEH/////A3EgBygCHEH/////A3FqDgICAAELIAcqAhghNCAHKgIUIS0gByoCECEFIAcqAgghMSAHKgIEISwgByoCACEuDAELIAcqAhgiBSAHKgI4Ii0gBSAtYBshNCAHKgIUIgUgByoCNCItIAUgLWAbIS0gByoCECIFIAcqAjAiLCAFICxgGyEFIAcqAggiLCAHKgIoIi4gLCAuXxshMSAHKgIEIiwgByoCJCIuICwgLl8bISwgByoCACIuIAcqAiAiLyAuIC9fGyEuCwJAAkACQAJAIAMgCBEEACIHKAIIRQ0AIAcoAgQiBygCPEH/////A3EgBygCHEH/////A3FqDgIAAQILIAlC////+////79/NwPgByAJQv////v3//+/fzcD2AcgCUL////79///v/8ANwPQBwwCCyAJQdgHaiAHQQhqKAIANgIAIAlB5AdqIAdBGGooAgA2AgAgCSAHKQIANwPQByAJIAcpAhA3AtwHDAELIAkgByoCGCIvIAcqAjgiMCAvIDBgGzgC5AcgCSAHKgIUIi8gByoCNCIwIC8gMGAbOALgByAJIAcqAhAiLyAHKgIwIjAgLyAwYBs4AtwHIAkgByoCCCIvIAcqAigiMCAvIDBf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KgKsAQwBCyADKgK4ASEmIAMqArQBISogAyoCsAEhJCADKgK8AQshICANIQYgCyEFIAohBCAIIQcCQAJAAkAgGS0A5QJBAWsOAwABAQILIAwhBiASIQUgESEEIBAhBwwBCyAcIQYgGCEFIBchBCATIQcLICYgBCoCAJQhJiAqIAUqAgCUISogJCAGKgIAlCEkICAgByoCAJQLISAgDkHQAGooAgAhBCAOQdQAaigCACIFKAIIIQYgAiAgOAK0ASACICY4ArABIAIgKjgCrAEgAiAkOAKoASADIAJBzABqIAJBDGogBCAGQQFrQXhxakEIaiAFIA5BhAFqIAJBqAFqEEQLIAFBAWohASAAQbABaiEADAALAAsgA0GgAWohCCADQbABaiEKAkAgAEHAAHFFDQAgA0HgAWohBCAPKAIQQbABbCEFIA8oAgwhAEEAIQEDQAJAIAUEQCAAKAIARQ0BIABBBGooAgAhCyAAQRBqIgYoAkQhByACQeAAaiINIAYoAkAgBygCCEEBa0F4cWpBCGogBkH0AGogBygClAERAQAgAiAGNgKQASACIAs2AowBIAIgATYCiAEgAkECNgKEASACIAIqAnQgAioCaJNDAAAAP5Q4AoABIAIgAioCcCACKgJkk0MAAAA/lDgCfCACIAIqAmwgAioCYJNDAAAAP5Q4AnggAiANNgKUASACQQxqIgYgAkGEAWoiBxCPA0UNASACQoCAgICAgIDAPzcCsAEgAkIANwKoASACIAIqAmggAioCdJJDAAAAP5Q4AsABIAIgAioCZCACKgJwkkMAAAA/lDgCvAEgAiACKgJgIAIqAmySQwAAAD+UOAK4ASACQZgBaiILQQhqIARBCGopAgA3AwAgAiAEKQIANwOYASADIAcgBiACQfgAakGQyMEAIAJBqAFqIAsQRAwBCyADKAKAAiEADAILIABBsAFqIQAgAUEBaiEBIAVBsAFrIQUMAAsACyACIAo2AmwgAiAINgJoIAIgFDYCZCACIAJBDGo2AmACQCAAQQhxRQ0AIBpFDQAgGkGAA2whCCADQfAAaiEFIANB4ABqIQcgAkHcAWohCiACQcwBaiEBIAJBvAFqIQRBACEGA0AgBiAbaiIAQegCaikDACFAIARBCGogB0EIaikCADcCACAEIAcpAgA3AgAgASAFKQIANwIAIAFBCGogBUEI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DQALCwJAIAAoAkAiAUGAgICAeEYNACABBEAgACgCRCABQQxsQQQQiA8LIAAoAkwiAUUNACAAKAJQIAFBJGxBBBCIDwsgACASNgJUIAAgBTYCUCAAIAI2AkwgACAONgJIIAAgEDYCRCAAIBo2AkAgBCgCNCIABEAgBCgCMCAAQQxsQRNqQXhxIgJrIAAgAmpBCWpBCBCIDwsgBCgCHCIABEAgBCgCGCAAQRRsQRtqQXhxIgJrIAAgAmpBCWpBCBCIDwsgBEHgAGokAA8LICQgAUGsycIAENMNAAvLJQMSf1d9BX4jAEGwAmsiBCQAIARC////+w83AtgBIARC////+////79/NwLQASAEQv////v3//+//wA3AsgBIARCgICAgPD//7//ADcCwAEgBEL////7////v383ArgBIARC////+/f//79/NwKwASAEQv////v3//+//wA3AqgBIARC////+w83AqABIARC////+////79/NwKYASAEQv////v3//+//wA3ApABIARCgICAgPD//7//ADcCiAEgBEL////7////v383AoABIARC////+/f//79/NwJ4IARC////+/f//7//ADcCcCAEQv////sPNwJoIARC////+////79/NwJgIARC////+/f//7//ADcCWCAEQoCAgIDw//+//wA3AlAgBEL////7////v383AkggBEL////79///v383AkAgBEL////79///v/8ANwI4IARC////+w83AjAgBEL////7////v383AiggBEL////79///v/8ANwIgIARCgICAgPD//7//ADcCGCAEQv////v///+/fzcCECAEQv////v3//+/fzcCCCAEQv////v3//+//wA3AgACQAJAAkACQCADQQFLBEAgAkEgaiEIIANBBXQiByACaiEFIAIqAgggAioCGJJDAAAAP5QiGyEcIAIqAgAgAioCEJJDAAAAP5QiFyEYIAIqAgQgAioCFJJDAAAAP5QiFiEZA0AgGyAIQQhqKgIAIAhBGGoqAgCSQwAAAD+UIhogGiAbXxshGyAZIAhBBGoqAgAgCEEUaioCAJJDAAAAP5QiHSAZIB1gGyEZIBwgGiAaIBxgGyEcIBYgHSAWIB1fGyEWIBggCCoCACAIQRBqKgIAkkMAAAA/lCIaIBggGmAbIRggFyAaIBcgGl8bIRcgBSAIQSBqIghHDQALIAQgFzgC4AEgBCAYOALsASAEIBY4AuQBIAQgGTgC8AEgBCAcOALoASAEIBs4AvQBQQIgGSAWkyIWIBggF5MiF14iBSAbIByTIBYgFyAFG14bIhBBAnQiBSAEQeABamoqAgAhG0NY//9AIARB7AFqIAVqKgIAIBuTlSEcIARB+AFqIAVqIQlBACEFA0AgBCACIAVqIgZBCGoiCCoCACAGQRhqKgIAIheSQwAAAD+UOAKAAiAEIAZBBGoiCioCACAGQRRqKgIAIhiSQwAAAD+UOAL8ASAEIAYqAgAiFiAGQRBqKgIAIhmSQwAAAD+UOAL4ASAcIAkqAgAgG5OU/AEiBkEITw0CIAQgBkEcbGoiBiAGKAIYQQFqNgIYIAYgBioCCCIaIAgqAgAiHSAaIB1fGzgCCCAGIAYqAgQiGiAKKgIAIh0gGiAdXxs4AgQgBiAGKgIAIhogFiAWIBpgGzgCACAGIAYqAgwiFiAZIBYgGWAbOAIMIAYgBioCECIWIBggFiAYYBs4AhAgBiAGKgIUIhggFyAXIBhfGzgCFCAHIAVBIGoiBUcNAAsgBCgCwAEiCyAEKAKkASINIAQoAogBIg4gBCgCbCIMIAQoAlAiDyAEKAI0IhEgBCgCGCIFaiIGaiIHaiIJaiIIaiIKaiISIAogCCAJIAcgBiAFIAQqAgwiIyAEKgIoIhcgFyAjXxsiPSAEKgIAIj4gBCoCHCIYIBggPmAbIj+TIAQqAhAiQCAEKgIsIhYgFiBAXxsiQSAEKgIEIkIgBCoCICIZIBkgQmAbIkOTlCAEKgIUIkQgBCoCMCIaIBogRF8bIkUgBCoCCCJGIAQqAiQiHSAdIEZgGyJHk5QgBrOUIAQqAtABIkggBCoCtAEiJCAkIEhfGyJJIAQqApgBIiEgISBJXxsiSiAEKgJ8Ih4gHiBKXxsiSyAEKgJgIh8gHyBLXxsiTCAEKgJEIiAgICBMXxsiTSAEKgLEASJOIAQqAqgBIiUgJSBOYBsiTyAEKgKMASImICYgT2AbIlAgBCoCcCInICcgUGAbIlEgBCoCVCIoICggUWAbIlIgBCoCOCIiICIgUmAbIlOTIAQqAtQBIlQgBCoCuAEiKSApIFRfGyJVIAQqApwBIiogKiBVXxsiViAEKgKAASIrICsgVl8bIlcgBCoCZCIsICwgV18bIlggBCoCSCItIC0gWF8bIlkgBCoCyAEiWiAEKgKsASIuIC4gWmAbIlsgBCoCkAEiLyAvIFtgGyJcIAQqAnQiMCAwIFxgGyJdIAQqAlgiMSAxIF1gGyJeIAQqAjwiMiAyIF5gGyJfk5QgBCoC2AEiYCAEKgK8ASIzIDMgYF8bImEgBCoCoAEiNCA0IGFfGyJiIAQqAoQBIjUgNSBiXxsiYyAEKgJoIjYgNiBjXxsiZCAEKgJMIjcgNyBkXxsiZSAEKgLMASJmIAQqArABIjggOCBmYBsiZyAEKgKUASI5IDkgZ2AbImggBCoCeCI6IDogaGAbImkgBCoCXCI7IDsgaWAbImogBCoCQCI8IDwgamAbImuTlCAEKALcASIGIAtqIgsgDWoiDSAOaiIOIAxqIgwgD2oiD7OUkiJsICMgPpMgQCBCk5QgRCBGk5QgBbOUIE0gFyAXIE1fGyBTIBggGCBTYBuTIFkgFiAWIFlfGyBfIBkgGSBfYBuTlCBlIBogGiBlXxsgayAdIB0ga2Abk5QgDyARarOUkiIXQ///f38gF0P//39/XRsiI10iBRsgPSAgICAgPV8bIhcgPyAiICIgP2AbIhiTIEEgLSAtIEFfGyIWIEMgMiAyIENgGyIZk5QgRSA3IDcgRV8bIhogRyA8IDwgR2AbIh2TlCAHs5QgTCBSkyBYIF6TlCBkIGqTlCAMs5SSIiAgbCAjIAUbIiJdIgcbIBcgHyAXIB9gGyIXIBggKCAYIChfGyIYkyAWICwgFiAsYBsiFiAZIDEgGSAxXxsiGZOUIBogNiAaIDZgGyIaIB0gOyAdIDtfGyIdk5QgCbOUIEsgUZMgVyBdk5QgYyBpk5QgDrOUkiIfICAgIiAHGyIgXSIJGyAXIB4gFyAeYBsiFyAYICcgGCAnXxsiGJMgFiArIBYgK2AbIhYgGSAwIBkgMF8bIhmTlCAaIDUgGiA1YBsiGiAdIDogHSA6XxsiHZOUIAizlCBKIFCTIFYgXJOUIGIgaJOUIA2zlJIiHiAfICAgCRsiH10iCBsgFyAhIBcgIWAbIhcgGCAmIBggJl8bIhiTIBYgKiAWICpgGyIWIBkgLyAZIC9fGyIZk5QgGiA0IBogNGAbIhogHSA5IB0gOV8bIh2TlCAKs5QgSSBPkyBVIFuTlCBhIGeTlCALs5SSIiEgHiAfIAgbIh5dIgobIBcgJCAXICRgGyAYICUgGCAlXxuTIBYgKSAWIClgGyAZIC4gGSAuXxuTlCAaIDMgGiAzYBsgHSA4IB0gOF8bk5QgErOUIEggTpMgVCBak5QgYCBmk5QgBrOUkiAhIB4gChtdIgsbIgZFDQIgAyAGRg0CQQZBBUEEQQNBAiAFIAcbIAkbIAgbIAobIAsbIQpBACADayESQQAgBmshEyAEQfgBaiAQQQJ0aiEQQQAhBSAGIQcDQCAFQQFqIQkgAiAFQQV0aiEIQQAgBSADIAMgBUkbIgVrIQwDQAJAAkAgCSAMakEBRwRAIAQgCEEIaiILKgIAIAhBGGoiDSoCAJJDAAAAP5Q4AoACIAQgCEEEaioCACAIQRRqKgIAkkMAAAA/lDgC/AEgBCAIKgIAIAhBEGoiDioCAJJDAAAAP5Q4AvgBIBwgECoCACAbk5T8ASAKTQ0BIAIgB0EFdGohBUEAIAcgAyADIAdJGyIUayEVIAdBAWohBwNAIAcgFWpBAUYNAyAEIAVBCGoiDCoCACAFQRhqIg8qAgCSQwAAAD+UOAKAAiAEIAVBBGoqAgAgBUEUaioCAJJDAAAAP5Q4AvwBIAQgBSoCACAFQRBqIhEqAgCSQwAAAD+UOAL4ASAKIBwgECoCACAbk5T8AUkEQCAFQSBqIQUgEiAHQQFqIgdqQQFHDQEMCgsLIBEpAwAhbSAIKQMAIW4gCCAFKQMANwMAIA4pAwAhbyAOIG03AwAgCykDACFtIA8pAwAhcCALIAwpAwA3AwAgDSkDACFxIA0gcDcDACAFIG43AwAgESBvNwMAIAwgbTcDACAPIHE3AwAgBiAJRg0IIAkhBSADIAdHDQQMCAsgBSADQZjfwgAQiAsACyAIQSBqIQggEyAJQQFqIglqQQFHDQEMBgsLCyAUIANBmN/CABCICwALQfzbwgBBIkGg3MIAENYMAAsgBkEIQYjfwgAQiAsACyADQQF2IQYMAQsgAyAGTw0AIARBADYCiAIgBEEBNgL8ASAEQajTwgA2AvgBIARCBDcCgAIgBEH4AWpBsNzCABC4DQALAkACQAJAAkACQCAGRQ0AIAMgBkYNACAAKAIIIQcgBkEBRgRAIAEgB08NAiACQQhqKQMAIW0gACgCBCABQQZ0aiIFQRhqIAJBGGopAwA3AwAgBUEIaiBtNwMAIAJBEGopAwAhbSAFIAIpAwA3AwAgBUEQaiBtNwMAIAUoAgwhByAFKAIcQf////8DcUEBRgRAAkAgByAAKAIgTw0AIAAoAhwgB0EDdGoiBSgCAEUNACAFIAFBAXQ2AgQMBwtBqN3CAEEPQbjdwgAQ1wsACyAAKAIUIgUgB00NAyAAKAIQIAdBAnRqIAFBAXQ2AgAMBQsgACgCACAHRgRAIABB2N3CABDICAsgACgCBCAHQQZ0aiIFQgA3AwAgBUE4akIANwMAIAVBMGpCADcDACAFQShqQgA3AwAgBUEgakIANwMAIAVBGGpCADcDACAFQRBqQgA3AwAgBUEIakIANwMAIAAgB0EBajYCCCABQQF0IQkgACgCFCIFIAAoAgxGBEAgAEEMakHo3cIAELkICyAAKAIQIAVBAnRqIAk2AgAgACAFQQFqNgIUIAAgByACIAYQOiAAKAIIIgUgB00NAyABIAVJBEAgACgCBCIJIAdBBnRqIgUqAighGyAFKgIIIRwgBSoCJCEXIAUqAgQhGCAFKgIgIRYgBSoCACEZIAkgAUEGdGoiCSAHNgIMIAkgHCAbIBsgHGAbOAIIIAkgGCAXIBcgGGAbOAIEIAkgGSAWIBYgGWAbOAIAIAkgBSoCGCIbIAUqAjgiHCAbIBxgGzgCGCAJIAUqAhQiGyAFKgI0IhwgGyAcYBs4AhQgCSAFKgIQIhsgBSoCMCIcIBsgHGAbOAIQIAkgBSgCHCIHQf////8DcSAFKAI8IgVB/////wNxaiAFIAdyQYCAgIB8cXI2AhwMBQsgASAFQYjewgAQiAsAC0HA3MIAQcUAQYjdwgAQ1gwACyABIAdBmN3CABCICwALIAcgBUHI3cIAEIgLAAsgByAFQfjdwgAQiAsACyACIAZBBXRqIQUgACgCCCECAkACQAJAIAMgBmsiBkEBRgRAAkACQCABIAJJBEAgBUEIaikDACFtIAAoAgQgAUEGdGoiAkE4aiAFQRhqKQMANwMAIAJBKGogbTcDACAFQRBqKQMAIW0gAiAFKQMANwMgIAJBMGogbTcDACACKAIsIQMgAigCPEH/////A3FBAUcNAiADIAAoAiBPDQEgACgCHCADQQN0aiIAKAIARQ0BIAAgAUEBdEEBcjYCBAwGCyABIAJBmN7CABCICwALQajdwgBBD0Go3sIAENcLAAsgACgCFCICIANNDQEgACgCECADQQJ0aiABQQF0QQFyNgIADAMLIAAoAgAgAkYEQCAAQcjewgAQyAgLIAAoAgQgAkEGdGoiA0IANwMAIANBOGpCADcDACADQTBqQgA3AwAgA0EoakIANwMAIANBIGpCADcDACADQRhqQgA3AwAgA0EQakIANwMAIANBCGpCADcDACAAIAJBAWo2AgggAUEBdEEBciEHIAAoAhQiAyAAKAIMRgRAIABBDGpB2N7CABC5CAsgACgCECADQQJ0aiAHNgIAIAAgA0EBajYCFCAAIAIgBSAGEDogACgCCCIDIAJNDQEgASADSQRAIAAoAgQiAyACQQZ0aiIAKgIoIRsgACoCCCEcIAAqAiQhFyAAKgIEIRggACoCICEWIAAqAgAhGSADIAFBBnRqIgEgAjYCLCABIBwgGyAbIBxgGzgCKCABIBggFyAXIBhgGzgCJCABIBkgFiAWIBlgGzgCICABIAAqAhgiGyAAKgI4IhwgGyAcYBs4AjggASAAKgIUIhsgACoCNCIcIBsgHGAbOAI0IAEgACoCECIbIAAqAjAiHCAbIBxgGzgCMCABIAAoAhwiAUH/////A3EgACgCPCIAQf////8DcWogACABckGAgICAfHFyNgI8DAMLIAEgA0H43sIAEIgLAAsgAyACQbjewgAQiAsACyACIANB6N7CABCICwALIARBsAJqJAALvCADFX9ofQF+QX8hDAJAAkACQAJAAkAgAS4BeCIPQQBMBEBBfyENIABBf0cEQCABKAJAQQFxRQ0FIAEoAkQiCiACKAKMA08NBiACKAKIAyAKQYADbGoiCigCAEEBRw0GIAooAgQgASgCSEcNBiAKKAIYIQwLIA9BAEgNAQsgAEF/RgRAQX8hDQwBCyABKAJMQQFxRQ0BIAEoAlAiCiACKAKMA08NAiACKAKIAyAKQYADbGoiAigCAEEBRw0CIAIoAgQgASgCVEcNAiACKAIYIQ0LIAMoAgQhCiAMIAMoAggiD0kEQCAKIAxBGGxqIgIqAhQhWiACKgIQIVkgAioCDCFYIAIqAgghVyACKgIEIVYgAioCACFUC0MAAIA/IUAgDCADKAIUIgtJBEAgAygCECAMQQZ0aiICKgI8IVsgAioCOCFcIAIqAjQhXSACKgIwIU0gAioCLCE2IAIqAighTCACKgIkITUgAioCHCFLIAIqAhghXiACKgIUIV8gAioCECFgIAIqAgwhQCACKgIIITcgAioCBCE4IAIqAgAhOSACKgIgITMLIA0gD0kEQCAKIA1BGGxqIgIqAhQhZSACKgIQIWQgAioCDCFjIAIqAgghYiACKgIEIWEgAioCACFVC0MAAIA/IUEgCyANSwRAIAMoAhAgDUEGdGoiAioCPCFmIAIqAjghZyACKgI0IWggAioCMCFQIAIqAiwhOyACKgIoIU8gAioCJCE6IAIqAhwhTiACKgIYIWkgAioCFCFqIAIqAhAhayACKgIMIUEgAioCCCE8IAIqAgQhPSACKgIAIT4gAioCICE0CyABKAJgIgtBAnYgC0EDcUEAR2oiGARAQwAAAABDAACAPyBMIAEqAmwiL4wiP5QgMyABKgJoIimUkyA2IAEqAnAiKpSTIm4gP5QgKSAzID+UIEsgKZSTIDUgKpSTIm+UkyAqIDYgP5QgNSAplJMgTSAqlJMicJSTICogOiAplCA7IC+UkiBQICqUkiJxlCApIE4gKZQgNCAvlJIgOiAqlJIicpQgLyA0ICmUIE8gL5SSIDsgKpSSInOUkpKSIiyVICyLQwjlPB5dGyF0QwAAgL9DAACAPyAqjCJtmCIoICqTlSEeIFYgYZMiMCA/lCBUIFWTIiAgKZSTICogVyBikyIxlJMhLCAxICogLJSSIjEgMZQgICApICyUkiIgICCUIDAgLyAslJIiLCAslJKSkSIwQxe30ThdIQIgKiAoIC8gL5QgHpSSICwgMJUgAhsiLJQgLyAvIDEgMJUgAhsiMZSTIkUgRSBdIGiSIiiUlCApIDGUICogKSAvlCAelCAgIDCVIAIbIjCUkyJGIEYgXCBnkiIelJSSIC8gMJQgKSAslJMiRyBHIFsgZpIiIJSUkiF1IDAgKCAwlJQgLCAeICyUlJIgMSAgIDGUlJIhdiAeID+UID+UICkgKCApjCJ3lJSTICogICBtlJSTIXhBuQQhEyAEIQogCyERQQQhAgNAIAIhDwJAAkACQAJAIAsgDk8EQCABKAJgIgIgC0kNASAOQQJ2IgIgB08NAiACIAVPDQMgASgCXCEZIAYgAkHABGxqIghBBCALIA5rIhIgEkEETxsiAzoAuAQgCCAANgK0BCAIIA02ArAEIAggDDYCrAQgCCBmOAIgIAggZzgCHCAIIGg4AhggCCBbOAIUIAggXDgCECAIIF04AgwgCCBtOAIIIAggPzgCBCAIIHc4AgAgCCAxOAI0IAggLDgCMCAIIDA4AiwgBCACQaQBbGohEEMAAAAAIR5DAAAAACEgQwAAAAAhKEMAAAAAIR9DAAAAACEtQwAAAAAhQkMAAAAAIUNDAAAAACFEQwAAAAAhMiALIA5HBEBBAUEEIBEgEUEETxsiAiACQQFNG0EGdCEaQwAAgD8gA7OVISEgFCAZaiEbQQAhFiAKIQMgFSECIBMhFwNAIBYgG2oiCUEoaikDACGFASAJQRhqKgIAIXkgCUEcaioCACF6IAlBIGoqAgAheyAJQTBqKgIAIXwgCUEUaioCACFRIAlBNGoqAgAhfSAJQQxqKgIAIX4gCUEIaioCACFSIAlBBGoqAgAhUyAJKgIAIWwgCUEkaioCACEkIAlBOGooAgAhHCAIIAlBEGoqAgA4AiggBiAXaiAcOgAAIAIgBmoiCUH4AGogJDgCACAJQdQAaiAvIGwga5MiJJQgKSBTIGqTIiWUkyImOAIAIAlB0ABqICkgUiBpkyIilCAqICSUkyIrOAIAIAlBzABqICogJZQgLyAilJMiLjgCACAJQcgAaiApIFMgX5MiJ5QgLyBsIGCTIiOUkyJIOAIAIAlBxABqICogI5QgKSBSIF6TIh2UkyJJOAIAIAlBQGsgLyAdlCAqICeUkyJKOAIAIAlB7ABqIFAgJpQgOiAulCA7ICuUkpIifzgCACAJQegAaiA7ICaUIDQgLpQgTyArlJKSIoABOAIAIAlB5ABqIDogJpQgTiAulCA0ICuUkpIigQE4AgAgCUHgAGogTSBIlCA1IEqUIDYgSZSSkiKCATgCACAJQdwAaiA2IEiUIDMgSpQgTCBJlJKSIoMBOAIAIAlB2ABqIDUgSJQgSyBKlCAzIEmUkpIihAE4AgAgCUGAAWpDAAAAAEMAAIA/ICYgf5QgLiCBAZQgKyCAAZSSkiB4IEggggGUIEoghAGUIEkggwGUkpKSkiImlSAmi0MI5TweXRs4AgAgA0EcaiB+OAIAIANBGGogIiBBID0gJJQgPiAllJMiJiAmkiImlCA9IDwgJZQgPSAilJMiKyArkiIrlCA+ID4gIpQgPCAklJMiLiAukiIulJOSkjgCACADQRRqICUgQSAulCA+ICaUIDwgK5STkpI4AgAgA0EQaiAkIEEgK5QgPCAulCA9ICaUk5KSOAIAIANBDGogHSBAIDggI5QgOSAnlJMiJiAmkiImlCA4IDcgJ5QgOCAdlJMiKyArkiIrlCA5IDkgHZQgNyAjlJMiLiAukiIulJOSkjgCACADQQhqICcgQCAulCA5ICaUIDcgK5STkpI4AgAgA0EEaiAjIEAgK5QgNyAulCA4ICaUk5KSOAIAIAMgViBaICOUIFggHZSTkiBhIGUgJJQgYyAilJOSkyA/lCApIFQgWSAdlCBaICeUk5IgVSBkICKUIGUgJZSTkpOUkyAqIFcgWCAnlCBZICOUk5IgYiBjICWUIGQgJJSTkpOUkyBRIFFDAAAAAF4gUUMAAIA/YCB9QwAAAABcG7OUlDgCACADQSBqIQMgAkHMAGohAiAXQQFqIRcgHiAhIGyUkiEeIDIgISB8lJIhMiBEICEge5SSIUQgQyAhIHqUkiFDIEIgISB5lJIhQiAoICEgUpSSISggICAhIFOUkiEgIB8gISCFAae+lJIhHyAtICEghQFCIIinvpSSIS0gGiAWQUBrIhZHDQALCyAIIDI4ApAEIAggLTgC3AMgCCAfOALYAyA9IB4ga5MiIZQgPiAgIGqTIiSUkyIlICWSISIgPCAklCA9ICggaZMiJZSTIicgJ5IhJyAQICUgQSAilCA9ICeUID4gPiAllCA8ICGUkyIjICOSIiOUk5KSOAKUASAQICQgQSAjlCA+ICKUIDwgJ5STkpI4ApABIBAgISBBICeUIDwgI5QgPSAilJOSkjgCjAEgOCAeIGCTIiKUIDkgICBfkyInlJMiIyAjkiEdIDcgJ5QgOCAoIF6TIiOUkyIfIB+SIR8gECAjIEAgHZQgOCAflCA5IDkgI5QgNyAilJMiLSAtkiItlJOSkjgCiAEgECAnIEAgLZQgOSAdlCA3IB+Uk5KSOAKEASAQICIgQCAflCA3IC2UIDggHZSTkpI4AoABIBJBAU0NBCAZIA5BBnRqIgIqAkAgHpMiHSAdlCACKgJEICCTIh0gHZSSIAIqAkggKJMiHSAdlJKRIS0gAioCACAekyIdIB2UIAIqAgQgIJMiHSAdlJIgAioCCCAokyIdIB2UkpEhMkMAAAAAIR0CQCASQQJGBEBDAAAAACEfDAELIAIqAoABIB6TIh8gH5QgAioChAEgIJMiHyAflJIgAioCiAEgKJMiHyAflJKRIR8gEkEDRg0AIAIqAsABIB6TIh4gHpQgAioCxAEgIJMiHiAelJIgAioCyAEgKJMiHiAelJKRIR0LIAggHTgCqAQgCCAfOAKkBCAIIC04AqAEIAggMjgCnAQgCCB0OAKYBCAIIHE4AogEIAggczgChAQgCCByOAKABCAIIHA4AvwDIAggbjgC+AMgCCBvOAL0AyAIQQA2AowEDAQLIA4gC0HYpMIAEJAPAAsgCyACQdikwgAQjw8ACyACIAdB6KTCABCICwALIAIgBUH4pMIAEIgLAAsgCCAkIDCUICEgLJSTIh04AogDIAggISAxlCAlIDCUkyIfOAKEAyAIICUgLJQgJCAxlJMiLTgCgAMgCCAiICyUICcgMJSTIjI4AvACIAggIyAwlCAiIDGUkyImOALsAiAIICcgMZQgIyAslJMiKzgC6AIgCCAkIEWUICEgRpSTIh44ApQDIAggISBHlCAlIEWUkyIgOAKQAyAIICUgRpQgJCBHlJMiKDgCjAMgCCAiIEaUICcgRZSTIiE4AvwCIAggIyBFlCAiIEeUkyIkOAL4AiAIICcgR5QgIyBGlJMiJTgC9AIgCCBCIDCUIEMgLJSSIEQgMZSSIiI4AtADIAggIjgCyAMgCCBCIEWUIEMgRpSSIEQgR5SSIic4AtQDIAggUCAdlCA6IC2UIDsgH5SSkiIiOAK4AyAIIDsgHZQgNCAtlCBPIB+UkpIiIzgCtAMgCCA6IB2UIE4gLZQgNCAflJKSIkI4ArADIAggTSAylCA1ICuUIDYgJpSSkiJDOAKgAyAIIDYgMpQgMyArlCBMICaUkpIiRDgCnAMgCCA1IDKUIEsgK5QgMyAmlJKSIi44ApgDIAggUCAelCA6ICiUIDsgIJSSkiJIOALEAyAIIDsgHpQgNCAolCBPICCUkpIiSTgCwAMgCCA6IB6UIE4gKJQgNCAglJKSIko4ArwDIAggTSAhlCA1ICWUIDYgJJSSkiJROAKsAyAIIDYgIZQgMyAllCBMICSUkpIiUjgCqAMgCCA1ICGUIEsgJZQgMyAklJKSIlM4AqQDIAggHSAilCAtIEKUIB8gI5SSkiB2IDIgQ5QgKyAulCAmIESUkpKSkjgC6AMgCCAeIEiUICggSpQgICBJlJKSIHUgISBRlCAlIFOUICQgUpSSkpKSOALsAyAIICc4AswDIAggJSAIKgKYA5QgJCAIKgKcA5SSICEgCCoCoAOUkiAoIAgqArADlCAgIAgqArQDlJIgHiAilJKSIh4gHpI4AvADIBRBgAJqIRQgCkGkAWohCiAVQcAEaiEVIBNBwARqIRMgEUEEayERIA9BBGohAiAPIQ4gGEEBayIYDQALCw8LQYDBwgAQkQ8AC0GwicIAQRNBkMHCABDXCwALQeDAwgAQkQ8AC0GwicIAQRNB8MDCABDXCwALrnUDOn0afwN+IwBBkANrIkMkACBDQegAaiACIAMoArgBEQAAIEMoAmwhTCBDKAJoIUcgQ0HgAGogBCAFKAK4AREAACBDKAJkIUYCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIEdBAEdBACBDKAJgIkQbRQRAIAIgAygCoAERBAAiRUH/AXFBBkcgBCAFKAKgAREEACJJQf8BcUEGR3ENAiBDQRBqIAIgAygCYBEAACBDQcABaiBDKAIQIgAgQygCFCgCDBEAACAARQ0BIEMpA8ABQvq5j6ySxqjHiX+FIEMpA8gBQv/F/o/unKy7VIWEQgBSDQFBACFFIAEgACAEIAUgBiAHIAhBABBdDBILIEMgBjgCcCAIELoHIAgoAgAiAkUNAiBDQdgAaiACIAgoAgQoAhwRAAAgQ0HAAWogQygCWCJFIEMoAlwoAgwRAAAgQykDwAFC3LH4hYnRxY2mf4UgQykDyAFC16PogbHP87BWhYRCAFINAyBFIEUtABhBf3NBAXEiAjoAGCBDIAI6AHcgRyBMKAIQEQQAIQIgRCBGKAIQEQQAIQMgASoCFCEcIAEqAhAhISABKgIYISIgASoCACEQIAEqAgQhFCABKgIIIRMgQyABKAIMIgQ2AoQBIEMgE4wiBjgCgAEgQyAUjCIOOAJ8IEMgEIwiDzgCeCBDIBAgHJQgFCAhlJMiCSAJkiIJIAS+Ih6UIBQgFCAilCATIByUkyIKIAqSIgqUIBAgEyAhlCAQICKUkyILIAuSIguUk5IgIpMiDTgCkAEgQyALIB6UIAkgEJQgCiATlJOSIByTIhE4AowBIEMgCiAelCALIBOUIAkgFJSTkiAhkyISOAKIAUP//39/IR9D//9//yEMQ///f/8hFUP//3//IRZD//9//yEXQ///f38hGkP//39/IRhD//9/fyEbAkAgAigCCEUNAAJAAkAgAigCBCIBKAI8Qf////8DcSABKAIcQf////8DcWoOAgIAAQsgASoCGCEVIAEqAhQhFiABKgIQIRcgASoCCCEaIAEqAgQhGCABKgIAIRsMAQsgASoCGCIJIAEqAjgiCiAJIApgGyEVIAEqAhQiCSABKgI0IgogCSAKYBshFiABKgIQIgkgASoCMCIKIAkgCmAbIRcgASoCCCIJIAEqAigiCiAJIApfGyEaIAEqAgQiCSABKgIkIgogCSAKXxshGCABKgIAIgkgASoCICIKIAkgCl8bIRsLAkAgAygCCEUEQEP//3//IQlD//9//yEKQ///f38hC0P//39/IR0MAQtD//9//yEJQ///f/8hCkP//39/IQtD//9/fyEdAkACQCADKAIEIgEoAjxB/////wNxIAEoAhxB/////wNxag4CAgABCyABKgIYIQwgASoCFCEJIAEqAhAhCiABKgIIIR8gASoCBCELIAEqAgAhHQwBCyABKgIYIgkgASoCOCIKIAkgCmAbIQwgASoCFCIJIAEqAjQiCiAJIApgGyEJIAEqAhAiCiABKgIwIgsgCiALYBshCiABKgIIIgsgASoCKCIdIAsgHV8bIR8gASoCBCILIAEqAiQiHSALIB1fGyELIAEqAgAiHSABKgIgIhkgGSAdYBshHQsgQyAVIBqTQwAAAD+UIhkgGZQgFiAYk0MAAAA/lCIZIBmUIBcgG5NDAAAAP5QiGSAZlJKSIAwgH5NDAAAAP5QiGSAZlCAJIAuTQwAAAD+UIhkgGZQgCiAdk0MAAAA/lCIZIBmUkpJdIgE6AJcBIAENBCAMIRUgCSEWIAohFyAfIRogCyEYIB0hGyAiIQ0gHCERICEhEiATIQYgFCEOIBAhDyBGIQMgRCEEIEwhRiBHIUQMDwsgQ0EIaiAEIAUoAmARAAAgQ0HAAWoiBCBDKAIIIgAgQygCDCgCDBEAAEEAIUUgAEUNECBDKQPAAUL6uY+sksaox4l/hSBDKQPIAUL/xf6P7pysu1SFhEIAUg0QIEMgASoCDCIMOALMASBDIAEqAggiCYw4AsgBIEMgASoCBCIKjDgCxAEgQyABKgIAIguMOALAASBDIAwgCyABKgIUIg2UIAogASoCECIRlJMiEiASkiISlCAKIAogASoCGCIOlCAJIA2UkyIPIA+SIg+UIAsgCSARlCALIA6UkyIQIBCSIhCUk5IgDpM4AtgBIEMgDCAQlCALIBKUIAkgD5STkiANkzgC1AEgQyAMIA+UIAkgEJQgCiASlJOSIBGTOALQASAEIAAgAiADIAYgByAIQQEQXQwQCyBFQf8BcUEJRw0DIERFDQQgQyABKgIMIgw4AswBIEMgASoCCCIJjDgCyAEgQyABKgIEIgqMOALEASBDIAEqAgAiC4w4AsABIEMgDCALIAEqAhQiDZQgCiABKgIQIhGUkyISIBKSIhKUIAogCiABKgIYIg6UIAkgDZSTIg8gD5IiD5QgCyAJIBGUIAsgDpSTIhAgEJIiEJSTkiAOkzgC2AEgQyAMIBCUIAsgEpQgCSAPlJOSIA2TOALUASBDIAwgD5QgCSAQlCAKIBKUk5IgEZM4AtABIENBGGogAiADKAJgEQAAIENB4AJqIEMoAhgiAiBDKAIcKAIMEQAAAkAgAkUNACBDKQPgAkKtjICLoKuPmB6FIEMpA+gCQsvOwJqam+jBP4WEQgBSDQBBACFFIAAgASBDQcABaiACIEQgRiAGIAcgCEEAEHAMEAtBtILDABCRDwALQfjwwgAQkQ8AC0GI8cIAEJEPAAsgQyAiOAKQASBDIBw4AowBIEMgITgCiAEgQyAENgKEASBDIBM4AoABIEMgFDgCfCBDIBA4AnggTCEDIEchBAwKCwJAAkAgSUH/AXEOCgAHBwcHAwcHBwEHCyBFQf8BcUEFRg0DDAgLIEdFDQAgQ0HAAWoiAyABENwHIENBQGsgBCAFKAJgEQAAIENB4AJqIEMoAkAiAiBDKAJEKAIMEQAAAkAgAkUNACBDKQPgAkKtjICLoKuPmB6FIEMpA+gCQsvOwJqam+jBP4WEQgBSDQAgACADIAEgAiBHIEwgBiAHIAhBARBwDAsLQcSCwwAQkQ8ACyMAQTBrIkQkACBEQQhqIAIgAygCYBEAACBEQRBqIEQoAggiRiBEKAIMKAIMEQAAAkACQCBGRQ0AIEQpAxBCrYyAi6Crj5gehSBEKQMYQsvOwJqam+jBP4WEQgBSDQAgACABIEYgBCAFIAYgByAIQQAQeAwBCyBEIAQgBSgCYBEAACBEQRBqIgUgRCgCACIEIEQoAgQoAgwRAAAgBEUNACBEKQMQQq2MgIugq4+YHoUgRCkDGELLzsCampvowT+FhEIAUg0AIEQgASoCDCIMOAIcIEQgASoCCCIJjDgCGCBEIAEqAgQiCow4AhQgRCABKgIAIguMOAIQIEQgDCALIAEqAhQiDZQgCiABKgIQIhGUkyISIBKSIhKUIAogCiABKgIYIg6UIAkgDZSTIg8gD5IiD5QgCyAJIBGUIAsgDpSTIhAgEJIiEJSTkiAOkzgCKCBEIAwgEJQgCyASlCAJIA+Uk5IgDZM4AiQgRCAMIA+UIAkgEJQgCiASlJOSIBGTOAIgIAAgBSAEIAIgAyAGIAcgCEEBEHgLIERBMGokAAwJCyBFQf8BcQ4GAAQEBAQBBAsgBSgCYCEAIENBOGogAiADKAJgIgMRAAAgQ0HAAWoiBSBDKAI4IgggQygCPCgCDBEAACBDKQPAASFdIEMpA8gBIV4gQ0EwaiAEIAARAAAgBSBDKAIwIgUgQygCNCgCDBEAAEEAIUUgCEEAIF1Cgc/t+6qO5ZXnAIUgXkKox57Z4bjDk0eFhFAbIggEQCAFQQAgQykDwAFC3fPzxO6x3LFshSBDKQPIAUK/vvvdsdS55XaFhFAbIgUNAgsgQ0EoaiACIAMRAAAgQ0HAAWoiAiBDKAIoIgMgQygCLCgCDBEAACBDKQPAASFdIEMpA8gBIV4gQ0EgaiAEIAARAAAgAiBDKAIgIgAgQygCJCgCDBEAACADQQAgXULd8/PE7rHcsWyFIF5Cv7773bHUueV2hYRQGyIDRQ0IIABBACBDKQPAAUKBz+37qo7llecAhSBDKQPIAUKox57Z4bjDk0eFhFAbIgBFDQggQyABKgIMIgw4AswBIEMgASoCCCIJjDgCyAEgQyABKgIEIgqMOALEASBDIAEqAgAiC4w4AsABIEMgDCALIAEqAhQiDZQgCiABKgIQIhGUkyISIBKSIhKUIAogCiABKgIYIg6UIAkgDZSTIg8gD5IiD5QgCyAJIBGUIAsgDpSTIhAgEJIiEJSTkiAOkzgC2AEgQyAMIBCUIAsgEpQgCSAPlJOSIA2TOALUASBDIAwgD5QgCSAQlCAKIBKUk5IgEZM4AtABIAIgACADKgIAIAYgB0EBEIoBDAgLIAMoAmAhAyAFKAJgIUQjAEHQLWsiBSQAIAVBIGogAiADEQAAIAVBwCVqIgMgBSgCICICIAUoAiQoAgwRAAAgBSkDwCUhXSAFKQPIJSFeIAVBGGogBCBEEQAAIAMgBSgCGCJEIAUoAhwoAgwRAAACQCACQQAgXUKBz+37qo7llecAhSBeQqjHntnhuMOTR4WEUBsiBEUNACBEQQAgBSkDwCVCgc/t+6qO5ZXnAIUgBSkDyCVCqMee2eG4w5NHhYRQGyICRQ0AIAUgBjgCMCAFIAE2AiwCQAJAAkACQAJ/AkACQCAIKAIAIgFFDQAgBUEQaiABIAgoAgQoAhgRAAAgAyAFKAIQIgEgBSgCFCgCDBEAACABRQ0AIAUpA8AlQqLPgvLup8WXpX+FIAUpA8glQuPGxqTw6YbwDIWEUA0BC0EgQQgQsw4iA0UNAyADQQA6ABggA0KJ2bnijtO+lwg3AxAgA0EIakHA1cIAKQMANwMAIANBuNXCACkDADcDAAJAIAgoAgAiAUUNACAIKAIEIkQoAgAiRgRAIAEgRhEGAAsgRCgCBCJGRQ0AIAEgRiBEKAIIEIgPCyAIQbD/wgA2AgQgCCADNgIAQbD/wgAMAQsgCCgCACIDRQ0BIAgoAgQLIQEgBUEIaiADIAEoAhwRAAAgBUHAJWogBSgCCCJEIAUoAgwoAgwRAAACQAJAIERFDQAgBSkDwCVCos+C8u6nxZelf4UgBSkDyCVC48bGpPDphvAMhYRCAFINACBEIEQtABhBf3NBAXEiRzoAGCAFIEc6ADcgBUFAayAHQQhqIgEoAgA2AgAgAUEANgIAIAcpAgAhXSAHQoCAgIDAADcCACAFIF03AzggBSAEKgJsQwAAAD+UIhE4AkwgBSAEKgJoQwAAAD+UIhI4AkggBSAEKgJkIiFDAAAAP5QiIjgCRCACKgJkIRwgAioCaCEGIAUgAioCbEMAAAA/lCIPOAJYIAUgBkMAAAA/lCIQOAJUIAUgHEMAAAA/lCIdOAJQQ///f38hDEP//3//IQoCQCAEKAIIIkxFBEBD//9//yEGQ///f/8hDkP//39/IQlD//9/fyENDAELQ///f/8hBkP//3//IQ5D//9/fyEJQ///f38hDQJAAkAgBCgCBCIBKAI8Qf////8DcSABKAIcQf////8DcWoOAgIAAQsgASoCGCEKIAEqAhQhBiABKgIQIQ4gASoCCCEMIAEqAgQhCSABKgIAIQ0MAQsgASoCGCIGIAEqAjgiCSAGIAlgGyEKIAEqAhQiBiABKgI0IgkgBiAJYBshBiABKgIQIgkgASoCMCILIAkgC2AbIQ4gASoCCCIJIAEqAigiCyAJIAtfGyEMIAEqAgQiCSABKgIkIgsgCSALXxshCSABKgIAIgsgASoCICINIAsgDV8bIQ0LIAUqAjBDAAAAP5QiC0MAAAAAYEUNASAFIAogC5IiIDgCcCAFIAYgC5IiIzgCbCAFIA4gC5IiJDgCaCAFIAwgC5MiJTgCZCAFIAkgC5MiJjgCYCAFIA0gC5MiFDgCXEP//39/IQxD//9//yEKAkAgAigCCCJGRQRAQ///f/8hBkP//3//IQ5D//9/fyEJQ///f38hDQwBC0P//3//IQZD//9//yEOQ///f38hCUP//39/IQ0CQAJAIAIoAgQiASgCPEH/////A3EgASgCHEH/////A3FqDgICAAELIAEqAhghCiABKgIUIQYgASoCECEOIAEqAgghDCABKgIEIQkgASoCACENDAELIAEqAhgiBiABKgI4IgkgBiAJYBshCiABKgIUIgYgASoCNCIJIAYgCWAbIQYgASoCECIJIAEqAjAiDCAJIAxgGyEOIAEqAggiCSABKgIoIgwgCSAMXxshDCABKgIEIgkgASoCJCINIAkgDV8bIQkgASoCACINIAEqAiAiEyANIBNfGyENCyAFIAsgCpIiKTgCiAEgBSALIAaSIiw4AoQBIAUgCyAOkiItOAKAASAFIAwgC5MiLjgCfCAFIAkgC5MiLzgCeCAFIA0gC5MiMDgCdCAFKAIsIgMqAgwhFyADKgIEIRMgAyoCFCEfIAMqAgghFSADKgIQIR4gAyoCACEWIAMqAhghGSAFQQA2AowBIAVBkAFqIAVB3ABqIAMgBUH0AGoQsgEgBSgCkAFFDQUgEyATIBmUIBUgH5STIgYgBpIiBpQgFiAVIB6UIBYgGZSTIgkgCZIiCZSTIQsgFyAWIB+UIBMgHpSTIgogCpIiCpQhDCAWIAqUIBUgBpSTIQ0gFyAJlCEOIBUgCZQgEyAKlJMhCSAXIAaUIQYgESAPkkMAACBBlCEaIBIgEJJDAAAgQZQhGCAiIB2SQwAAIEGUIRsCQAJAAkACQCBGRQ0AIAIoAgQiASgCPEH/////A3EgASgCHEH/////A3FqDgIAAQILIAVC////+////79/NwPQJSAFQv////v3//+/fzcDyCUgBUL////79///v/8ANwPAJQwCCyAFQcglaiABQQhqKAIANgIAIAVB1CVqIAFBGGooAgA2AgAgBSABKQIANwPAJSAFIAEpAhA3AswlDAELIAUgASoCGCIKIAEqAjgiESAKIBFgGzgC1CUgBSABKgIUIgogASoCNCIRIAogEWAbOALQJSAFIAEqAhAiCiABKgIwIhEgCiARYBs4AswlIAUgASoCCCIKIAEqAigiESAKIBFfGzgCyCUgBSABKgIEIgogASoCJCIRIAogEV8bOALEJSAFIAEqAgAiCiABKgIgIhEgCiARXxs4AsAlCyAMIAuSIScgDiANkiEqIAYgCZIhKCAFKgLAASExIAUqArwBITIgBSoCuAEhMyAFKgK0ASE0IAUqArABITUgBSoCrAEhNiAFKgKoASE3IAUqAqQBITggBSoCoAEhOSAFKgKcASE6IAUqApgBITsgBSoClAEhPCAFQcweaiAFQcAlaiADEMIDIBogBSoC4B6SIQkgGCAFKgLcHpIhCiAFKgLUHiAakyELIAUqAtAeIBiTIQ8CQAJAIAUqAsweIBuTIhAgFCAbkyIGIAYgEF8bIgwgGyAFKgLYHpIiFCAbICSSIgYgBiAUYBsiDl4NACAKIBggI5IiBiAGIApgGyIRIA8gJiAYkyIGIAYgD18bIg1dDQAgCSAaICCSIgYgBiAJYBsiBiALICUgGpMiEiALIBJgGyISXUUNAQsgECEMIA8hDSALIRIgFCEOIAohESAJIQYLICcgGZMhGSAqIB+TIR8gKCAekyEeIBWMIQ8gE4whIyAWjCEgIAUgBjgC2AEgBSAROALUASAFIA44AtABIAUgEjgCzAEgBSANOALIASAFIAw4AsQBQ///f/8hBkP//39/IQ4CQCBMRQRAQ///f38hCUP//39/IQ1D//9//yELQ///f/8hDAwBC0P//39/IQlD//9/fyENQ///f/8hC0P//3//IQwCQAJAIAQoAgQiASgCPEH/////A3EgASgCHEH/////A3FqDgICAAELIAEqAhghDCABKgIUIQsgASoCECEGIAEqAgghDSABKgIEIQkgASoCACEODAELIAEqAhgiBiABKgI4IgkgBiAJYBshDCABKgIUIgYgASoCNCIJIAYgCWAbIQsgASoCECIGIAEqAjAiCSAGIAlgGyEGIAEqAggiCSABKgIoIgogCSAKXxshDSABKgIEIgkg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AEEQcRsiUCBFayBHbGogTWxqrUIghoQhXQNAIAVBuCxqIgBBIGogA0EgaigCACJHNgIAIABBGGogA0EYaikCADcDACAAQRBqIANBEGopAgA3AwAgAEEIaiADQQhqKQIANwMAIAUgAykCADcDuCwgR0H/AXEiAEHBAE8NFSAAQYypwQBqLQAAIQACQAJAAkACQAJAIFYOAwABAgQLIABBAWtB/wFxQQNJDQIMAwsgAEEBa0H/AXFBAkkNAQwCCyAAQQFHDQELQ///f38hDQJAIEZFBEBD//9/fyEMQ///f38hDgwBC0P//39/IQxD//9/fyEOAkACQCABKAI8Qf////8DcSABKAIcQf////8DcWoOAgIAAQsgASoCCCENIAEqAgQhDCABKgIAIQ4MAQsgASoCCCIKIAEqAigiCyAKIAtfGyENIAEqAgQiCiABKgIkIgsgCiALXxshDCABKgIAIgogASoCICILIAogC18bIQ4LIA8gDZIgBpWO/ABBAWshRSAQIAySIAmVjvwAIldBAWshSSAdIA6SIByVjvwAIlhBAWshS0P//3//IQ0CQCBGRQRAQ///f/8hDEP//3//IQ4MAQtD//9//yEMQ///f/8hDgJAAkAgASgCPEH/////A3EgASgCHEH/////A3FqDgICAAELIAEqAhghDSABKgIUIQwgASoCECEODAELIAEqAhgiCiABKgI4IgsgCiALYBshDSABKgIUIgogASoCNCILIAogC2AbIQwgASoCECIKIAEqAjAiCyAKIAtgGyEOCyAFKALILCFIIAUoAsQsIUogBSgCwCwhTSAFIF03AqgXIAUgUDYCpBcgBSBONgKgFyAFIFE2ApwXIAUgTzYCmBcgBSBSNgKUFyAFIFM2ApAXIAUgSiAMIBCTIAmVjvwAQQFqIlkgR0E/c0EAIEdBP2tB/wFxQQJPGyIAQQRxGyJHNgLAFyAFIEggDSAPkyAGlY78AEEBaiAAQRBxGyJaNgLEFyAFIE0gDiAdkyAclY78AEEBaiJbIABBAXEbIlw2ArwXIAUgSiBJIABBCHEbIko2ArQXIAUgRSBIIABB/wFxQSBJGyJINgK4FyAFIE0gSyAAQQJxGyIANgKwFyAFIABBASBYayIAaiBbIEtrIksgSkEBIFdrIkpqIFkgSWsiSSBIIEVrbGpsaq0gACBcaiBHIEpq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IgU2AgAgA0E8aigCACAFaiEFIANBQGshAyAHQQhrIgcNAAsLIAYEQANAIAMgBTYCACADQQRqKAIAIAVqIQUgA0EIaiEDIAZBAWsiBg0ACwsgBEHIAGogBRC/BiAEQdQAaiAFEL8GIAghAyAKQQdxIgUEQANAIANBBGpBADYCACADQQhqIQMgBUEBayIFDQALCyACQQdJDQEgCCALQQN0aiECA0AgA0E8akEANgIAIANBNGpBADYCACADQSxqQQA2AgAgA0EkakEANgIAIANBHGpBADYCACADQRRqQQA2AgAgA0EMakEANgIAIANBBGpBADYCACACIANBQGsiA0cNAAsMAQsgBEHIAGpBABC/BiAEQdQAakEAEL8GCyAMBEAgDkEUaiEDIAQoAmQhFCAEKAJYIRUgBCgCXCESIAQoAmghDyAEKAJMIRcgBCgCUCETIAQoAnAhGCAEKAJ0IQlBASEGQQAhDANAIA4hAiADIQ4gDCEDIAYhDAJAIAIoAgAiByAHIAIoAgQiDWpPDQAgB0ECdCICIBhqIQYgAiAUaiECIAcgCSAHIAlLGyIWIAdrIQUgByAPIAcgD0sbIhkgB2shBwJAAkACQAJAA0AgBUUNASAGKAIAIgogC08NAiAIIApBA3RqIgooAgQgCigCAGoiECATTw0DIBcgEEECdGogAzYCACAHRQ0EIAooAgQgCigCAGoiECASSQRAIBUgEEECdGogAigCADYCACAKIAooAgRBAWo2AgQgBkEEaiEGIAJBBGohAiAFQQFrIQUgB0EBayEHIA1BAWsiDUUNBgwBCwsgECASQeC7wwAQiAsACyAWIAlBoLvDABCICwALIAogC0Gwu8MAEIgLAAsgECATQcC7wwAQiAsACyAZIA9B0LvDABCICwALIA4gEUciAiAMaiEGIA5BFEEAIAIbaiEDIAINAAsLIARBhAJqIARBCGooAgA2AgAgBEGQAmogBEEgaigCADYCACAEQZwCaiAEQRRqKAIANgIAIARBqAJqIARB0ABqKAIANgIAIARBtAJqIARB3ABqKAIANgIAIAQgBCkCADcC/AEgBCAEKQIYNwOIAiAEIAQpAgw3ApQCIAQgBCkCSDcDoAIgBCAEKQJUNwKsAiAEQcACaiAEQegAaigCADYCACAEQcwCaiAEQfQAaigCADYCACAEQfABaiICQQhq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QQEgDWshBCAHKAIEQUBrIQADQCAAQShrKgIAIhIgCGAgEkMAAAAAYHIEQCAAQUBrIQAgBEEBaiIEQQFHDQEMAgsLIARFBEBBASEGDAELQQAgBGshDEEBIQYDQCAAQRhqIQ4CQAJAIA8qAgAiCEMAAAAAYA0AIA4qAgAiEkMAAAAAYA0AIBIgCEMAAKBAlGANACAGQQFqIQYMAQsgACAGQQZ0ayIEIAApAgA3AgAgBEE4aiAAQThqKQIANwIAIARBMGogAEEwaikCADcCACAEQShqIABBKGopAgA3AgAgBEEgaiAAQSBqKQIANwIAIARBGGogDikCADcCACAEQRBqIABBEGopAgA3AgAgBEEIaiAAQQhqKQIANwIACyAAQUBrIQAgDEEBayIMDQALCyAHIA0gBms2AggLCyAJIAtBKGoiACALQRhqIgQgChsiBikCADcCiAEgCSAEIAAgChsiACkCADcClAEgCUGQAWogBkEIaigCADYCACAJQZwBaiAAQQhqKAIANgIAAkAgCSgChAEiAEUNACACRQ0AIAkoAoABIgogAEEGdGohBiADIAJBBnRqIQcgA0EkaiEEIANBQGshACAFQUBqIglBwABxIQ0DQCAKQSRqIQIgCigCHCEFIAMhDAJAIA0NACAAIQwgBSADKAIcRw0AIAooAiAgAygCIEcNACACIAQpAgA3AgAgAkEYaiAEQRhqKAIANgIAIAJBEGogBEEQaikCADcCACACQQhqIARBCGopAgA3AgALIAkEQANAAkAgBSAMQRxqKAIARw0AIAooAiAgDEEgaigCAEcNACACQRhqIAxBPGooAgA2AgAgAkEQaiAMQTRqKQIANwIAIAJBCGogDEEsaikCADcCACACIAxBJGopAgA3AgALAkAgBSAMQdwAaigCAEcNACAKKAIgIAxB4ABqKAIARw0AIAJBGGogDEH8AGooAgA2AgAgAkEQaiAMQfQAaikCADcCACACQQhqIAxB7ABqKQIANwIAIAIgDEHkAGopAgA3AgALIAcgDEGAAWoiDEcNAAsLIAYgCkFAayIKRw0ACwsgAUUNAyADIAFBBnRBBBCIDwwDCyANIAVB4PnBABDTDQALIAlBADYChAEMAQsgCUEANgKEAQsgC0GAAmokAAvvHAIpfx19IwBB4ABrIgQkAEECIRdBAiEYAn9BACAAKAKk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BUEIaiIGKQIANwIAIAogBUEQaiIKKQIANwIAIAggBUEYaiIIKQIANwIAIAcgBUEgaiIHKAIANgIAIAQgWzcDMCAFIAQpAzA3AgAgByACKAIANgIAIAggCSkDADcCACAKIAspAwA3AgAgBiADKQMANwIAQQgMBAsgBikCACFbIAYgAykCADcCACAEQTBqIgJBIGoiBSAGQSBqIgcoAgA2AgAgAkEYaiIJIAZBGGoiCCkCADcDACACQRBqIgsgBkEQaiIKKQIANwMAIAJBCGoiAiAGQQhqIgYpAgA3AwAgBiADQQhqIgYpAgA3AgAgCiADQRBqIgopAgA3AgAgCCADQRhqIggpAgA3AgAgByADQSBqIgcoAgA2AgAgBCBbNwMwIAMgBCkDMDcCACAHIAUoAgA2AgAgCCAJKQMANwIAIAogCykDADcCACAGIAIpAwA3AgAMAgsgAikCACFbIAIgAykCADcCACAEQTBqIgVBIGoiBiACQSBqIgcoAgA2AgAgBUEYaiIJIAJBGGoiCCkCADcDACAFQRBqIgsgAkEQaiIKKQIANwMAIAVBCGoiBSACQQhqIgIpAgA3AwAgAiADQQhqIgIpAgA3AgAgCiADQRBqIgopAgA3AgAgCCADQRhqIggpAgA3AgAgByADQSBqIgcoAgA2AgAgBCBbNwMwIAMgBCkDMDcCACAHIAYoAgA2AgAgCCAJKQMANwIAIAogCykDADcCACACIAUpAwA3AgBBDAwECyACKQIAIVsgAiAFKQIANwIAIARBMGoiB0EgaiIJIAJBIGoiCigCADYCACAHQRhqIgggAkEYaiIOKQIANwMAIAdBEGoiCyACQRBqIg8pAgA3AwAgB0EIaiIHIAJBCGoiAikCADcDACACIAVBCGoiAikCADcCACAPIAVBEGoiDykCADcCACAOIAVBGGoiDikCADcCACAKIAVBIGoiCigCADYCACAEIFs3AzAgBSAEKQMwNwIAIAogCSgCADYCACAOIAgpAwA3AgAgDyALKQMANwIAIAIgBykDADcCACABKAIIIQIgASABKAIANgIIIAEgAjYCACAJIAZBIGoiAigCADYCACAIIAZBGGoiBSkCADcDACALIAZBEGoiCikCADcDACAHIAZBCGoiDikCADcDACAGKQIAIVsgBiADKQIANwIAIA4gA0EIaiIGKQIANwIAIAogA0EQaiIKKQIANwIAIAUgA0EYaiIFKQIANwIAIAIgA0EgaiICKAIANgIAIAQgWzcDMCADIAQpAzA3AgAgAiAJKAIANgIAIAUgCCkDADcCACAKIAspAwA3AgAgBiAHKQMANwIAC0EMCyEDIAEoAgQhAiABIAEgA2oiAygCADYCBCADIAI2AgAMAgsgAikCACFbIAIgBSkCADcCACAEQTBqIgNBIGoiBiACQSBqIgcoAgA2AgAgA0EYaiIJIAJBGGoiCCkCADcDACADQRBqIgsgAkEQaiIKKQIANwMAIANBCGoiAyACQQhqIgIpAgA3AwAgAiAFQQhqIgIpAgA3AgAgCiAFQRBqIgopAgA3AgAgCCAFQRhqIggpAgA3AgAgByAFQSBqIgcoAgA2AgAgBCBbNwMwIAUgBCkDMDcCACAHIAYoAgA2AgAgCCAJKQMANwIAIAogCykDADcCACACIAMpAwA3AgBBCAshAyABKAIAIQIgASABIANqIgMoAgA2AgAgAyACNgIAIBUhFyAWIRULIAEgFTgCtAEgASAXOAKwAQwHC0GA1MIAQShBkI3DABDWDAALIAEgCTYCuAEgASAVOAK0ASABIBY4ArABDAULIAEgCTYCuAEgASAVOAK0ASABIBY4ArABIAUgAykCADcCACAFQSBqIANBIGooAgA2AgAgBUEYaiADQRhqKQIANwIAIAVBEGogA0EQaikCADcCACAFQQhqIANBCGopAgA3AgAMBAsgASAVOAK4ASABIAk2ArQBIAEgFjgCsAEgBiADKQIANwIAIAZBIGogA0EgaigCADYCACAGQRhqIANBGGopAgA3AgAgBkEQaiADQRBqKQIANwIAIAZBCGogA0EIaikCADcCAAwDCyABIBU4ArgBIAEgFjgCtAEgASAJNgKwASACIAMpAgA3AgAgAkEgaiADQSBqKAIANgIAIAJBGGogA0EYaikCADcCACACQRBqIANBEGopAgA3AgAgAkEIaiADQQhqKQIANwIADAILIAVBBEH4i8MAEIgLAAsgB0EEQfiLwwAQiAsACyABIA02ArwBCyAAIAQpA3A3AgAgAEEIaiAMKAIANgIADAILIAEgFjgCtAEgASAVOAKwAQsgACAEKQNwNwIAIABBCGogBigCADYCAAsgBEGAAWokAAvwRAMJfx59An4jAEGAA2siCiQA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gAJqJAAMAwsgCyAAQcD5wwAQiAsACyAOIABB0PnDABCICwALQQRBoAJBkMTEACgCACIAQcwIIAAbEQAAAAsgBygCJCEAIAcoAhghASAHKAIsIQkgBygCKCEDIAcoAiAhCiAHKAIcIQQgB0GAgID8AzYCICAHQoCAgPyDgIDAPzcCGCACIAQgCiADIAkgBSAQIAYQqwMgAARAIAMgAEEDdEEEEIgPCyABRQ0MIAQgAUEMbEEEEIgPDAwLIAAgASACIAcoAhBBtMTBACAFIAYQRAwLCyAHQRhqIgwhBCAHKAIQIQkgACgC8AEhCCAAKAL0ASEDIwBB4ABrIgEkACABQTBqIgBBCGoiCkEANgIAIAFBADYCCCABQoCAgIDAADcCACABQQA2AhQgAUKAgICAwAA3AgwgAUEANgIgIAFBADYCLCABQQA2AkQgASAJKgIAIh44AiggASAeOAJAIAEgHowiHzgCHCABIAkqAgSMIh04AhggASAdOAIkIAEgHTgCMCABIB8gCSoCCCIgkzgCNCABIB0gIJMiITgCPCABQZD1wwAQkwggASgCBCIJIAEpAjA3AgAgCUEIaiAKKAIANgIAIAFBATYCCCABQQA2AlAgASAfOAJMIAEgITgCSCABQRhqIAAgAUHIAGogAyABEMkCIAEoAgAiCiABKAIIIglGBEAgAUGg9cMAEJMIIAEoAgAhCgsgICAekiEeIAEoAgQiACAJQQxsaiILQQA2AgggCyAfOAIEIAsgITgCACABIAlBAWoiCzYCCCAKIAtGBEAgAUGw9cMAEJMIIAEoAgQhAAsgACALQQxsaiIAIAEpAjw3AgAgAEEIaiABQTxqIgBBCGooAgA2AgAgASAJQQJqNgIIIAFBADYCUCABIB44AkwgASAdOAJIIAFBJGogACABQcgAaiADIAEQyQIgASgCCCIAIAEoAgBGBEAgAUHA9cMAEJMICyABQQhqIgkgAEEBajYCACABKAIEIABBDGxqIgBBADYCCCAAIB44AgQgACAdOAIAIAFCgICAgBA3AkggASADNgJQIAEgA0ECajYCVCABIANBAXQiAEECajYCXCABIABBAXI2AlhBACABQcgAakEDIAggASABQQxqIgAQjAEgBEEIaiAJKAIANgIAIAQgASkCADcCACAEIAEpAgw3AgwgBEEUaiAAQQhqKAIANgIA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AwA3AwAgAkEIaiAEQQhqKQMANwMAIAMgCEEEdGohAyAFIAhBAXNBBHRqIQUgBiAJQQR0IgRrIQYgBCAHakEQayEHIAJBEGshAiAAQRBqIQAgDUEBayINDQALIAZBEGohBCABQQFxBEAgACAFIAMgBCAFSyICGyIBKQMANwMAIABBCGogAUEIaikDADcDACADIAQgBU1BBHRqIQMgBSACQQR0aiEFCyAEIAVGIAMgB0EQakZxDQAQlw0ACyALQYAGaiQAC/kXAhx/AnwjAEGwBGsiAyQAIANCADcDmAEgA0IANwOQASADQgA3A4gBIANCADcDgAEgA0IANwN4IANCADcDcCADQgA3A2ggA0IANwNgIANCADcDWCADQgA3A1AgA0IANwNIIANCADcDQCADQgA3AzggA0IANwMwIANCADcDKCADQgA3AyAgA0IANwMYIANCADcDECADQgA3AwggA0IANwMAIANCADcDuAIgA0IANwOwAiADQgA3A6gCIANCADcDoAIgA0IANwOYAiADQgA3A5ACIANCADcDiAIgA0IANwOAAiADQgA3A/gBIANCADcD8AEgA0IANwPoASADQgA3A+ABIANCADcD2AEgA0IANwPQASADQgA3A8gBIANCADcDwAEgA0IANwO4ASADQgA3A7ABIANCADcDqAEgA0IANwOgASADQgA3A9gDIANCADcD0AMgA0IANwPIAyADQgA3A8ADIANCADcDuAMgA0IANwOwAyADQgA3A6gDIANCADcDoAMgA0IANwOYAyADQgA3A5ADIANCADcDiAMgA0IANwOAAyADQgA3A/gCIANCADcD8AIgA0IANwPoAiADQgA3A+ACIANCADcD2AIgA0IANwPQAiADQgA3A8gCIANCADcDwAIgA0HgA2pBAEHQAPwLAEGAwMQAKAIAIgohBSACQQNrQRhtIgRBACAEQQBKGyIOIQcgDkECdEGQwMQAaiEIQQAhBANAIAMgBEEDdGogB0EASAR8RAAAAAAAAAAABSAIKAIAtws5AwAgBCAFSSILBEAgCEEEaiEIIAdBAWohByAFIAQgC2oiBE8NAQsLIAJBGGshBUEAIQcDQCADQcACaiAHQQN0aiAAKwMAIAMgB0EDdGorAwCiRAAAAAAAAAAAoDkDACAHIApJIgQEQCAKIAQgB2oiB08NAQsLIAUgDkFo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KAIIIgUoAggiAAR+IAIgAEEGdEFAaq18QswAfAUgAkIMfAshAiAFKAIUIgAEfiACIABBAWtB/////wNxrUIDhnxCEHwFIAJCCHwLQhB8IQICQCAFKAIgIgdFDQAgBSgCHCEGIAdBAWtB/////wFxIQoCQCAHQQdxIghFBEAgBiEADAELIAYhAANAQglCASAAKAIAGyACfCECIABBCGohACAIQQFrIggNAAsLIApBB0kNACAGIAdBA3RqIQYDQEIJQgEgACgCABsgAnxCCUIBIABBCGooAgAbfEIJQgEgAEEQaigCABt8QglCASAAQRhqKAIAG3xCCUIBIABBIGooAgAbfEIJQgEgAEEoaigCABt8QglCASAAQTBqKAIAG3xCCUIBIABBOGooAgAbfCECIAYgAEFAayIARw0ACwsgBSgCNCIABH4gAEEBa61CHH4hAyAFKAIoIgApAwBCgIGChIiQoMCAf4NCgIGChIiQoMCAf1EEQCAAQQhqIQADQCAAKQMAIQQgAEEIaiEAIARCgIGChIiQoMCAf4NCgIGChIiQoMCAf1ENAAsLIAIgA3xCJHwFIAJCCHwLIQIgBSgCSCIABH4gAiAAQQxsQQxrQQxurUIMfnxCFHwFIAJCCHwLIQIgBSgCVCIABH4gAiAAQQl0QYAEa618QogEfAUgAkIIfAshAiABIAUoAmAiAAR+IAIgAEEBa0H/////A3GtQgOGfEIQfAUgAkIIfAtCDHw3AwBBACEADA4LIAEpAwAhAiAJKAIIIgUoAggiAAR+IAIgAEEGdEFAaq18QswAfAUgAkIMfAshAiAFKAIUIgAEfiACIABBAWtB/////wNxrUIDhnxCEHwFIAJCCHwLQhB8IQICQCAFKAIgIgdFDQAgBSgCHCEGIAdBAWtB/////wFxIQoCQCAHQQdxIghFBEAgBiEADAELIAYhAANAQglCASAAKAIAGyACfCECIABBCGohACAIQQFrIggNAAsLIApBB0kNACAGIAdBA3RqIQYDQEIJQgEgACgCABsgAnxCCUIBIABBCGooAgAbfEIJQgEgAEEQaigCABt8QglCASAAQRhqKAIAG3xCCUIBIABBIGooAgAbfEIJQgEgAEEoaigCABt8QglCASAAQTBqKAIAG3xCCUIBIABBOGooAgAbfCECIAYgAEFAayIARw0ACwsgBSgCMCIABH4gAiAAQQxsQQxrQQxurUIMfnxCFHwFIAJCCHwLIQIgBSgCPCIABH4gAiAAQQxsQQxrQQxurUIMfnxCFHwFIAJCCHwLIQICfiAFKAJAQYCAgIB4RwRAIAUoAlQhACAFKAJIIgYEfiACIAZBDGxBDGtBDG6tQgx+fEIVfAUgAkIJfAsiA0IIfCAARQ0BGiAAQSRsQSRrQSRurUIkfiADfEIsfAwBCyACQgF8CyECAkAgBSgCWEGAgICAeEcEQCAFKAJgIgAEfiACIABBAnRBBGutfEINfAUgAkIJfAshAiAFKAJsIgAEfiACIABBAnRBBGutfEIMfAUgAkIIfAsiA0IIfCECIAUoAngiAEUNASADIABBBHRBEGutfEIYfCECDAELIAJCAXwhAgsCQCAFKAJ8QYCAgIB4RwRAIAUoAoQBIgAEfiACIABBAnRBBGutfEINfAUgAkIJfAshAiAFKAKQASIABH4gAiAAQQJ0QQRrrXxCDHwFIAJCCHwLIgJCCHwhAyAFKAKcASIARQ0BIAIgAEEBa0H/////A3GtQgOGfEIQfCEDDAELIAJCAXwhAwsgASADQgJ8NwMAQQAhAAwNCyABKQMAIQIgCSgCCCIFKAIIIgAEfiACIABBBnRBQGqtfELMAHwFIAJCDHwLIQIgBSgCFCIABH4gAiAAQQFrQf////8Dca1CA4Z8QhB8BSACQgh8C0IQfCECAkAgBSgCICIHRQ0AIAUoAhwhBiAHQQFrQf////8BcSEKAkAgB0EHcSIIRQRAIAYhAAwBCyAGIQADQEIJQgEgACgCABsgAnwhAiAAQQhqIQAgCEEBayIIDQALCyAKQQdJDQAgBiAHQQN0aiEGA0BCCUIBIAAoAgAbIAJ8QglCASAAQQhqKAIAG3xCCUIBIABBEGooAgAbfEIJQgEgAEEYaigCABt8QglCASAAQSBqKAIAG3xCCUIBIABBKGooAgAbfEIJQgEgAEEwaigCABt8QglCASAAQThqKAIAG3whAiAGIABBQGsiAEcNAAsLIAUoAjAiAAR+IAIgAEEMbEEMa0EMbq1CDH58QhR8BSACQgh8CyECIAEgBSgCPCIABH4gAiAAQQN0QQhrrXxCEHwFIAJCCHwLNwMAQQAhAAwMCyABIAEpAwBCEHw3AwBBACEADAsLIAEpAwAhAiAJKAIIIgAoAggiBgR+IAIgBkECdEEEa618QhB8BSACQgx8CyECIAEgACgCHCIGBH4gAiAAKAIYIgAgBmogAEF/c2qtfEIZfAUgAkIYfAtCPXw3AwBBACEADAoLIAEgASkDAEIMfCICNwMAIAkoAggiBUEIaigCACIABEAgBUEEaigCAEEcaiEIIABBJGwhBgNAIAEgASkDAEIcfDcDACAIIAEQVCIADQsgCEEkaiEIIAZBJGsiBg0ACyABKQMAIQILIAUoAhQiAAR+IAIgAEEGdEFAaq18QsgAfAUgAkIIfAshAiAFKAIgIgAEfiACIABBAWtB/////wNxrUIDhnxCEHwFIAJCCHwLQhB8IQICQCAFKAIsIgdFDQAgBSgCKCEGIAdBAWtB/////wFxIQoCQCAHQQdxIghFBEAgBiEADAELIAYhAANAQglCASAAKAIAGyACfCECIABBCGohACAIQQFrIggNAAsLIApBB0kNACAGIAdBA3RqIQYDQEIJQgEgACgCABsgAnxCCUIBIABBCGooAgAbfEIJQgEgAEEQaigCABt8QglCASAAQRhqKAIAG3xCCUIBIABBIGooAgAbfEIJQgEgAEEoaigCABt8QglCASAAQTBqKAIAG3xCCUIBIABBOGooAgAbfCECIAYgAEFAayIARw0ACwsgASAFQTxqKAIAIgAEfiACIABBGGxBGGtBGG6tQhh+fEIgfAUgAkIIfAtCGHw3AwBBACEADAkLIAEgASkDAEIEfDcDACAJKAIIIAEQmAUhAAwICyABIAEpAwBCDHw3AwBBACEADAcLIAEgASkDAEIMfDcDAEEAIQAMBgsgASABKQMAQhR8NwMAQQAhAAwFCyABIAEpAwBCLHw3AwBBACEADAQLIAEgASkDAEIQfDcDAEEAIQAMAwsgASABKQMAQhB8NwMAQQAhAAwCCyABIAEpAwBCBHw3AwAgCSgCCCABEJgFIgANASABIAEpAwBCBHw3AwBBACEADAELQThBARCzDiIBRQ0BIAFBMGpB6LvBACkAADcAACABQShqQeC7wQApAAA3AAAgAUEgakHYu8EAKQAANwAAIAFBGGpB0LvBACkAADcAACABQRBqQci7wQApAAA3AAAgAUEIakHAu8EAKQAANwAAIAFBuLvBACkAADcAAEEMQQQQsw4iAEUNAiAAQTg2AgggACABNgIEIABBODYC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IJSTkiAhICeUkzgCyAEgCCAmICCUICMgH5SSICIgJ5STICEgJZSTOALEASAIICEgIJQgJiAllCAjICeUkyAiIB+Uk5I4AsABICIgByoCECABKgIQkyIllCAjIAcqAhQgASoCFJMiJ5STIh8gH5IhHyAhICeUICIgByoCGCABKgIYkyIklJMiICAgkiEgIAggJCAmIB+UICIgIJQgIyAjICSUICEgJZSTIiQgJJIiJJSTkpI4AtgBIAggJyAmICSUICMgH5QgISAglJOSkjgC1AEgCCAlICYgIJQgISAklCAiIB+Uk5KSOALQAQwCCyAJIAdBoO3BABCICwALIAhBwAFqIgFBGGogB0EYaigCADYCACABQRBqIAdBEGopAgA3AwAgAUEIaiAHQQhqKQIANwMAIAggBykCADcDwAELIAogCEHAAWogAiADIAAoAiQgACgCKCAEIAVBACAIIAAoAiwqAgAgCSAGKAIoERIAGgwBCyAAKAIgIQcCQCABBEAgCCAHKgIMIiYgASoCDCIflCAHKgIAIiEgASoCACIglJMgByoCBCIiIAEqAgQiJZSTIAcqAggiIyABKgIIIieUkzgCzAEgCCAjIB+UICEgJZQgJiAnlJIgIiAglJOSOALIASAIICMgIJQgIiAflCAmICWUICEgJ5STkpI4AsQBIAggIiAnlCAmICCUICEgH5SSkiAjICWUkzgCwAEgISABKgIUIiWUICIgASoCECInlJMiHyAfkiEfICMgJ5QgASoCGCIkICGUkyIgICCSISAgCCAHKgIYICQgJiAflCAhICCUICIgIiAklCAjICWUkyIkICSSIiSUk5KSkjgC2AEgCCAHKgIUICUgJiAglCAjICSUICEgH5STkpKSOALUASAIIAcqAhAgJyAmICSUICIgH5QgIyAglJOSkpI4AtABDAELIAhBwAFqIgFBGGogB0EYaigCADYCACABQRBqIAdBEGopAgA3AwAgAUEIaiAHQQhqKQIANwMAIAggBykCADcDwAELIAogCEHAAWogACgCJCAAKAIoIAIgA0EAIAggBCAFIAAoAiwqAgAgCSAGKAIoERIAGgsgCEHgAWokAAuKGAMGfx19AX4jAEHgAmsiCyQAAkACQCAKRQRAIAkgABD/Ag0CDAELIAkgARD/Ag0BCyALIAIgAyAAEM0BAkAgCyoCACIr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ArQDIAtBBToA9AMgCyALQaADajYC/AMgCyALQcADajYC+AMgASAKIAtB+ANqQYyUwwAgDRECACALQfACaiIKQQhqIhAgD0EIaikCADcDACAKQRBqIhogD0EQaikCADcDACAKQRhqIhIgD0EYaikCADcDACAKQSBqIhMgD0EgaikCADcDACAKQShqIhQgD0EoaikCADcDACALQe4CaiIbIBdBAmotAAA6AAAgCyAPKQIANwPwAiALIBcvAAA7AewCAkAgCy0A9AMiCkEFRg0AIAsqAsADIQggC0GAAmoiDUEoaiIcIBQpAwA3AwAgDUEgaiIUIBMpAwA3AwAgDUEYaiITIBIpAwA3AwAgDUEQaiISIBopAwA3AwAgDUEIaiINIBApAwA3AwAgC0H+AWoiECAbLQAAOgAAIAsgCykD8AI3A4ACIAsgCy8B7AI7AfwBIApBBEYNACAIIAldRQ0AIAtByAFqIg5BKGogHCkDADcDACAOQSBqIBQpAwA3AwAgDkEYaiATKQMANwMAIA5BEGogEikDADcDACAOQQhqIA0pAwA3AwAgC0HGAWogEC0AADoAACALIAspA4ACNwPIASALIAsvAfwBOwHEASACKAIMIRkgCCIhIQkgCiEOCwsgCSAfXkUNAyAfQ///f39bDQMgESgCHEH/////A3FBAUYNAQsgESgCDCEMDAMLQQAhAgsgESgCDCEKIAsgBzYCsAMgCyAGNgKsAyALIAU2AqgDIAsgBDYCpAMgCyADNgKgAyAeKAIAIQ0gCyALQRNqNgK8AyALIAtBDGo2ArgDIAsgC0EIajYCtAMgC0EFOgD0AyALIAtBoANqNgL8AyALIAtBwANqNgL4AyABIAogC0H4A2pBjJTDACANEQIAIAtB8AJqIgpBCGoiECAPQQhqKQIANwMAIApBEGoiGiAPQRBqKQIANwMAIApBGGoiEiAPQRhqKQIANwMAIApBIGoiEyAPQSBqKQIANwMAIApBKGoiFCAPQShqKQIANwMAIAtB7gJqIhsgF0ECai0AADoAACALIA8pAgA3A/ACIAsgFy8AADsB7AICQAJAIAstAPQDIgpBBUYNACALKgLAAyEIIAtBuAJqIg1BKGoiHCAUKQMANwMAIA1BIGoiFCATKQMANwMAIA1BGGoiEyASKQMANwMAIA1BEGoiEiAaKQMANwMAIA1BCGoiDSAQKQMANwMAIAtBtgJqIhAgGy0AADoAACALIAspA/ACNwO4AiALIAsvAewCOwG0AiAKQQRGDQAgCCAJXQ0BCyACRQ0BDAILIAtByAFqIg5BKGogHCkDADcDACAOQSBqIBQpAwA3AwAgDkEYaiATKQMANwMAIA5BEGogEikDADcDACAOQQhqIA0pAwA3AwAgC0HGAWogEC0AADoAACALIAspA7gCNwPIASALIAsvAbQCOwHEASARKAIMIRkgCCIhIQkgCiEOIAINAQsgFiEMIB0hAiALKALAASIKQSFPBEAgCygCQCEKIAsoAkQhDCAWIQILIApFDQIgAiAKQQFrIgI2AgAgDCACQQJ0aigCACEMCyAMIBhJDQALIAwgGEHI68IAEIgLAAsgDkH/AXFBBEcEQCAAIAspA8gBNwIIIAAgCy8BxAE7ADkgACAOOgA4IAAgITgCBCAAIBk2AgAgAEEwaiALQcgBaiIBQShqKQMANwIAIABBKGogAUEgaikDADcCACAAQSBqIAFBGGopAwA3AgAgAEEYaiABQRBqKQMANwIAIABBEGogC0HQAWopAwA3AgAgAEE7aiALQcYBai0AADoAAAwCCyAAQQQ6ADgMAQsgC0EkaiAVEKoFIAldRQRAIABBBDoAOAwBCyAVKAIMIQogCyAHNgKQAiALIAY2AowCIAsgBTYCiAIgCyAENgKEAiALIAM2AoACIAJBDGooAgAhAiALIAtBE2o2ApwCIAsgC0EMajYCmAIgCyALQQhqNgKUAiALQQU6APQDIAsgC0GAAmo2AswBIAsgC0HAA2oiAzYCyAEgASAKIAtByAFqQYyUwwAgAhECACALQfACaiIBQQhqIgQgA0EMaikCADcDACABQRBqIgMgC0HUA2opAgA3AwAgAUEYaiIFIAtB3ANqKQIANwMAIAFBIGoiBiALQeQDaikCADcDACABQShqIgcgC0HsA2opAgA3AwAgC0GiA2oiCiALQfcDai0AADoAACALIAspAsQDNwPwAiALIAsvAPUDOwGgAwJAIAstAPQDIgFBBUcEQCALKgLAAyEIIAtBuAJqIgJBKGogBykDADcDACACQSBqIAYpAwA3AwAgAkEYaiAFKQMANwMAIAJBEGogAykDADcDACACQQhqIAQpAwA3AwAgC0H6A2ogCi0AADoAACALIAspA/ACNwO4AiALIAsvAaADOwH4A0EEIQwgAUEERw0BCyAAQQQ6ADgMAQsgC0HAA2oiAkEoaiIEIAtBuAJqIgNBKGopAwA3AwAgAkEgaiIFIANBIGopAwA3AwAgAkEYaiIGIANBGGopAwA3AwAgAkEQaiIHIANBEGopAwA3AwAgAkEIaiICIANBCGopAwA3AwAgCyALKQO4AjcDwAMgC0HyAmoiAyALQfoDai0AADoAACALIAsvAfgDOwHwAiAAIAggCV0EfyAAIAspA8ADNwIIIAAgCy8B8AI7ADkgACAIOAIEIAAgFSgCDDYCACAAQRBqIAIpAwA3AgAgAEEYaiAHKQMANwIAIABBIGogBikDADcCACAAQShqIAUpAwA3AgAgAEEwaiAEKQMANwIAIABBO2ogAy0AADoAACABBUEECzoAOAsgCygCwAEiAEEhTwRAIAsoAkQgAEECdEEEEIgPCyALQYAEaiQAC/AYAwl/CX0CfiMAQfABayIGJAAgBCgCCCICBEAgAkGoAWwgBCgCBCICaiEKA0ACQCACIgMoAoQBIglFBEBDAAAAACEPDAELIAMoAoABIQdDAAAAACEPAkAgCUEBcUUEQCAHIQIgECERDAELIAdBQGshAiAHKgI0IhFDAAAAAJIhDyAQIBFdRQRAIBAhEQwBCyADKgJwIRIgAyoCbCETIAMqAmghFCARIRALIAlB////H3FBAUYNACAHIAlBBnRqIQcgESEQA0AgAkE0aioCACIRIBBeBEAgAyoCcCESIAMqAmwhEyADKgJoIRQgESEQCyAPIBGSIQ8gAkH0AGoqAgAiESAQXgRAIAMqAnAhEiADKgJsIRMgAyoCaCEUIBEhEAsgDyARkiEPIAcgAkGAAWoiAkcNAAsLIBUgDyADKgJwlJIhFSAWIA8gAyoCbJSSIRYgFyAPIAMqAmiUkiEXIAogA0GoAWoiAkcNAAsLIAQoAhghCSAEKAIUIQogBCgCECELIAQoAgwhDEMAAAAAQwAAgD8gAZUgAYtDCOU8Hl8bIg8gEJQhASAPIBWUIRAgDyAWlCERIA8gF5QhDyAAKAIMIQMCQAJAAkACQAJAAkACQAJAAkACQCAAKAIIQQFrDgIHAQALIAZBgJTr3AM2AoABIAZBwAFqQQA2AgAgBkG4AWpCADcDACAGQgA3A7ABIAMoAkAiBCADKALIASIHcQRAQQEhAAwCCwNAAkACQCADKALMASAHQQFrIARxIgdBNGxqIgAoAjAiAiAERwRAIAMoAsQBIgAgAmogBEEBakcNAiAAIAMoAgBqIARGDQEMAgsgAygCQCIIIARGIQIgAwJ/IAMoAsABIAdBAWpNBEAgAygCxAEiByAEQQAgB2txagwBCyAEQQFqCyAIIAIbNgJAIAJFDQEgBiAANgKwASAGIARBAWoiAjYCtAEgACACNgIwIAAgATgCLCAAIBI4AiggACATOAIkIAAgFDgCICAAIAU4AhwgACAQOAIYIAAgETgCFCAAIA84AhAgACAJNgIMIAAgCjYCCCAAIAs2AgQgACAMNgIAIANBoAFqEMQDQQIhAAwECwJAIAYoAoABIgBBgJTr3ANGDQAgBikDeCEYEJQNAkAgGCAGKQMwIhlRBEAgBigCOCAATw0BDAILIBggGVYNAQtBACEADAQLQYTIxAAoAgBFBEAQ9QkLQYjIxAAoAgAhAEGIyMQAQQA2AgACQCAARQRAIAYQlwciADYCGCAGIAM2AjQgBiAGQfgAajYCOCAGIAZBsAFqNgIwIAZBMGogBkEYaiICELoCIAAgACgCACIAQQFrNgIAIABBAUcNASACENoLDAELIABCADcCDCAGIAA2AhggBiADNgI0IAYgBkH4AGo2AjggBiAGQbABajYCMCAGQTBqIgQgBkEYahC6AkGIyMQAKAIAIQJBiMjEACAANgIAIAYgAjYCMCACRQ0AIAIgAigCACIAQQFrNgIAIABBAUcNACAEENoLC0EBIQAgAygCQCIEIAMoAsgBIgdxRQ0BDAMLIAMoAkAiBCADKALIASIHcUUNAAtBASEADAELIAZBgJTr3AM2AhAgBkEoakEANgIAIAZBIGpCADcDACAGQgA3AxggBiADLQAAIgA6ADAgA0EBOgAAIABBAUYNAQJAAkAgAygCJCIARQ0AIABBDGwhDSADKAIgIQ5BACEEQQEhBwNAAkAgBCAOaiICKAIAIgAoAhRBmIjEAEYNACAAIAAoAgwiCCACQQRqKAIAIAgbNgIMIAgNACAHQQFrIQggAkEIaigCACICBEAgACACNgIQCyADKAIkIgAgCE0NBiADKAIgIARqIgQoAgAhAiAEQQRqKQIAIRggACAHa0EMbCIHBEAgBCAEQQxqIAf8CgAACyADIABBAWs2AiQgAkUNAiAGIAI2AjAgBiAYNwI0IAYgGEIgiKciADYCKCADQQA6AAAgGEKAgICAEFQNByAAQQE6ADQgACABOAIwIAAgEjgCLCAAIBM4AiggACAUOAIkIAAgBTgCICAAIBA4AhwgACAROAIYIAAgDzgCFCAAIAk2AhAgACAKNgIMIAAgCzYCCCAAIAw2AgQgAEEBNgIAIAIgAigCACIAQQFrNgIAIAZBAjYCsAEgAEEBRw0DIAZBMGoQ2gsMAwsgB0EBaiEHIA0gBEEMaiIERw0ACwsgAy0ANEUEQCAGIAE4AmwgBiASOAJoIAYgEzgCZCAGIBQ4AmAgBiAFOAJcIAYgEDgCWCAGIBE4AlQgBiAPOAJQIAYgCTYCTCAGIAo2AkggBiALNgJEIAYgDDYCQCAGIAM2AjwgBiADNgI0IAYgBkEIajYCOCAGIAZBGGo2AjBBhMjEACgCAEUEQBD1CQtBiMjEACgCACECQYjIxABBADYCAAJAIAJFBEAgBhCXByIANgJ0IAZBADYCMCAGIAE4AuwBIAYgEjgC6AEgBiATOALkASAGIBQ4AuABIAYgBTgC3AEgBiAQOALYASAGIBE4AtQBIAYgDzgC0AEgBiAJNgLMASAGIAo2AsgBIAYgCzYCxAEgBiAMNgLAASAGIAM2ArwBIAYgAzYCtAEgBiAGQQhqNgK4ASAGIAZBGGo2ArABIAZB+ABqIAZBsAFqIAZB9ABqIgIQvwEgACAAKAIAIgBBAWs2AgAgAEEBRw0BIAIQ2gsMAQsgAkIANwIMIAYgAjYCdCAGQbwBaiAGQTRqIgBBCGopAgA3AgAgBkHEAWogAEEQaikCADcCACAGQcwBaiAAQRhqKQIANwIAIAZB1AFqIABBIGopAgA3AgAgBkHcAWogAEEoaikCADcCACAGQeQBaiAAQTBqKQIANwIAIAZB7AFqIABBOGooAgA2AgAgBkEANgIwIAYgACkCADcCtAEgBiAGQRhqNgKwASAGQfgAaiAGQbABaiIDIAZB9ABqEL8BQYjIxAAoAgAhAEGIyMQAIAI2AgAgBiAANgKwASAARQ0AIAAgACgCACIAQQFrNgIAIABBAUcNACADENoLCwJAIAYoAngiAEEDRgRAIAZBsAFqIQkjAEHQAGsiAyQAIAMQlwciBDYCDCAGQTBqIgAoAgAhByAAQQA2AgAgBwRAIANBEGoiAkEMaiAAQQxqKQIANwIAIAJBFGogAEEUaikCADcCACACQRxqIABBHGopAgA3AgAgAkEkaiAAQSRqKQIANwIAIAJBLGogAEEsaikCADcCACACQTRqIABBNGopAgA3AgAgAkE8aiAAQTxqKAIANgIAIAMgBzYCECADIAApAgQ3AhQgCSACIANBDGoiABC/ASAEIAQoAgAiAkEBazYCACACQQFGBEAgABDaCwsgA0HQAGokAAwCC0HU3MEAEJEPAAsgBiAANgKwAQsgBigCMEUNASAGKAI0QQA6AAAMAQsgA0EAOgAAIAZBATYCsAELIAYoArABIQALIABBAkYNBSAAQQFxRQ0DDAULIAZCADcCvAEgBkKBgICAwAA3ArQBIAZBhN3BADYCsAEgBkEwaiAGQbABakGM3cEAEP8MAAsgCCAAQaTcwQAQhwsAC0Gk28EAEJEPAAtB3NrBAEEoQYTbwQAQ1gwACyADKAJAIgRBAXENACADKAJEIQBBACECAkACQAJAA0ACQCAEQQF2QR9xIgdBH0YEQANAIAMoAkAiBEEBcQ0CIARBAXZBH3EiB0EfRg0ACyADKAJEIQALAkAgB0EeRw0AIAINAEHQDBCrDCICDQAMBwsCQAJAIAANAEHQDBCrDCIABEAgAyADKAJEIgggACAIGzYCRCAIRQRAIAMgADYCBAwCCyACBEAgAkHQDEEEEIgPCyAAIQIMAgsMCAsgAygCQCINIARGIQggAyAEQQJqIA0gCBs2AkAgCEUNACAHQR5HDQMgAkUNBSADIAI2AkQgAyADKAJAQQJqNgJAIAAgAjYCAEEeIQcMBAsgAygCRCEAIAMoAkAiBEEBcUUNAQsLQQAhAEEAIQcLIAIEQCACQdAMQQQQiA8LIABFDQILIAAgB0E0bGoiACABOAIwIAAgEjgCLCAAIBM4AiggACAUOAIkIAAgBTgCICAAIBA4AhwgACAROAIYIAAgDzgCFCAAIAk2AhAgACAKNgIMIAAgCzYCCCAAIAw2AgQgACAAKAI0QQFyNgI0IANBgAFqEMQDDAELQZTbwQAQkQ8ACyAGQfABaiQADwtBBEHQDEGQxMQAKAIAIgBBzAggABsRAAAAC8MUAg5/I30jAEHgAWsiCSQAIAAoAgAhCyAGKgIEIS4gACoCBCEXIAlBADYCCCAJQoCAgIDAADcCACAJQbgBaiADIAUgBCgClAERAQACQCAXIBcgLpQgCxtDzcxMPZIiKUMAAAAAYARAICkgCSoCzAGSIRcgKSAJKgLIAZIhGSApIAkqAsQBkiEdIAkqAsABICmTIRogCSoCvAEgKZMhGCAJKgK4ASApkyEoAkAgAigCOCILKAIIRQRADAELAn9BACALKAIEIgYqAgAgHV9FDQAaQQAgBioCBCAZX0UNABpBACAGKgIIIBdfRQ0AGiAGQQAgBioCGCAaYBtBACAGKgIUIBhgG0EAIAYqAhAgKGAbCyEKIAYoAjxB/////wNxRQ0AIAYqAiAgHV9FDQAgBioCJCAZX0UNACAGKgIoIBdfRQ0AIAZBIGohDSAGKgIwIChgIAYqAjQgGGBxIAYqAjggGmBxIQwLIAkgAjYCtAEgCSAXOAKwASAJIBk4AqwBIAkgHTgCqAEgCSAaOAKkASAJIBg4AqABIAkgKDgCnAEgCSAKNgKYASAJIAs2ApQBIAkgDDYCkAEgCSANNgIQQQAhDSAJQQA2AgwgCUEMaiIGQagBaiEQIAlBuAFqIAYgEBCSAyAJKALAASIKRQ0BIAdFIAhFciESIAIoAjwhESAFKgIYITMgBSoCFCE0IAUqAhAhNSAFKgIIISAgBSoCBCEhIAUqAgAhIiAFKgIMISYgCEEEaiEPA0AgCSgCCCECIAlBADYCCCACBEAgCSgCBEGAAWohBgNAIAZBBGsoAgAiCwRAIAYoAgAgC0EGdEEEEIgPCyAGQShrKAIAIgsEQCAGQSRrKAIAIAtBBnRBEBCIDwsgBkGoAWohBiACQQFrIgINAAsLIAkgICAKKgJ8IheUICEgCioCeCIZlCAiIAoqAnQiHZQgJiAKKgKAASIalJKSkjgCxAEgCSAhIB2UICYgF5QgIiAZlJOSICAgGpSTOALAASAJICYgGZQgIiAXlJIgISAalJMgICAdlJM4ArwBIAkgICAZlCAmIB2UICIgGpSTICEgF5STkjgCuAEgISAKKgKEASA1kyIdlCAiIAoqAogBIDSTIhqUkyIXIBeSIRcgICAalCAhIAoqAowBIDOTIhiUkyIZIBmSIRkgCSAYICYgF5QgISAZlCAiICIgGJQgICAdlJMiGCAYkiIYlJOSkjgC0AEgCSAaICYgGJQgIiAXlCAgIBmUk5KSOALMASAJIB0gJiAZlCAgIBiUICEgF5STkpI4AsgBIAooAkAhAiAKKAJEIgYoAgghCyAJQQA2AtQBIAlB3wFqIAlBuAFqIAMgBCACIAtBAWtBeHFqQQhqIAYgKSAJIAlB1AFqEEsaAkAgCSgC1AEiAkUNACAJKALYASIGKAIAIgsEQCACIAsRBgALIAYoAgQiC0UNACACIAsgBigCCBCIDwsCQCASBEAgCSgCCEGoAWwhBiAJKAIEIQoDQCAGRQ0CIAZBqAFrIQYgACAKIAUgLhChBiECIApBqAFqIQogAkUNAAtBASENDAQLQQAhBgJAIAooAhBBAXFFDQAgCigCFCICIBEoAowDTw0AIBEoAogDIAJBgANsaiICKAIAQQFHDQAgAigCBCAKKAIYRw0AIAJBEGpBACACLQD1AkECTxshBgsgByoCCCEXIAcqAgQhGSAHKgIAIR0CfSAJKAIIIgIEQCACQagBbCECIAkoAgQhCyAGBEAgAiALaiETIAtBqAFqIQwgHSEaIBkhGCAXISgDQCALIQIgDCELIAAgAiAFIC4QoQYhFAJAIAIoAoQBIgxFDQAgIiACKgKMASIklCAhIAIqAogBIhyUkyIbIBuSIScgICAclCAiIAIqApABIhuUkyIeIB6SIR4gGyAmICeUICIgHpQgISAhIBuUICAgJJSTIhsgG5IiI5STkpIhGyAcICYgI5QgISAnlCAgIB6Uk5KSIRwgJCAmIB6UICAgI5QgIiAnlJOSkiIwjCEnIAIoAoABIRUgDEEGdCEWQwAAAAAhHkEAIQJBACEMQwAAAAAhJEMAAAAAISMDQCApIAIgFWoiDkEYaioCAGAEQCAOQRRqKgIAIi8gCioCeCIflCAOQRBqKgIAIjEgCioCfCIqlJMiJSAlkiElIDEgCioCdCIrlCAOQQxqKgIAIiwgH5STIi0gLZIhLSABIAYqAnQgCioChAEgLCAKKgKAASIyICWUIB8gLZQgKiAsICqUIC8gK5STIiwgLJIiLJSTkpKSIjYgBioC8AGTIjcgBioChAEiOJQgCioCjAEgLyAyIC2UICsgLJQgHyAllJOSkpIiLyAGKgL4AZMiHyAGKgJ8IjmUk5IgJ5QgHCAGKgJwIB8gBioCgAEiH5QgCioCiAEgMSAyICyUICogJZQgKyAtlJOSkpIiKiAGKgL0AZMiJSA4lJOSlJMgGyAGKgJ4ICUgOZQgNyAflJOSlJOUIA8qAgAiJSAnlCAcIAgqAgAiK5STIBsgCEEIaiIOKgIAIi2Uk5MhHyAOIC0gGyAflJM4AgAgDyAlIDAgH5STOAIAIAggKyAcIB+UkzgCACAeIC+SIR4gJCAqkiEkICMgNpIhIyAMQQFqIQwLIBYgAkFAayICRw0ACyAMQQBMDQAgBioCeCAkIAyzIiSVIAYqAvQBkyIfIAYqAnwiKpQgIyAklSAGKgLwAZMiIyAGKgKAASIllJOSIisgGyAGKgJ0ICMgBioChAEiI5QgHiAklSAGKgL4AZMiHiAqlJOSIiQgJ5QgHCAGKgJwIB4gJZQgHyAjlJOSIh6UkyAbICuUkyInlJIhIyABICQgMCAnlJKUIRsgASAeIBwgJ5SSlCIciyAai14EQCAHIBw4AgAgHCEaCyABICOUIRwgG4sgGIteBEAgByAbOAIEIBshGAsgHIsgKIteRQ0AIAcgHDgCCCAcISgLIA0gFHIhDSALQQBBqAEgCyATRiICG2ohDCACRQ0ACyAHKgIEIRggByoCACEoIAcqAggMAgsDQCAAIAsgBSAuEKEGIA1yIQ0gC0GoAWohCyACQagBayICDQALCyAZIRggHSEoIBcLIRogCCAoIB2TIAgqAgCSOAIAIA8gGCAZkyAPKgIAkjgCACAIQQhqIgIgGiAXkyACKgIAkjgCAAsgCUG4AWogCUEMaiAQEJIDIAkoAsABIgoNAAsMAQsgCUEANgIcIAlBATYCECAJQZTXwQA2AgwgCUIENwIUIAlBDGpBnNfBABC4DQALIAkoApABIgBBIU8EQCAJKAIUIABBAnRBBBCIDwsgCSgCBCEAIAkoAggiCgRAIABBgAFqIQYDQCAGQQRrKAIAIgIEQCAGKAIAIAJBBnRBBBCIDwsgBkEoaygCACICBEAgBkEkaygCACACQQZ0QRAQiA8LIAZBqAFqIQYgCkEBayIKDQALCyAJKAIAIgIEQCAAIAJBqAFsQQQQiA8LIAlB4AFqJAAgDUEBcQv9FgIXfwJ+IwBBQGoiAiQAIAJBCDYCJCACIAE2AiAgAkEoaiIBIAJBIGoQugMgAigCLCEPAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACfwJAAkACQAJ/AkACQAJ/AkACQAJAAkAgAigCKCIRQYGAgIB4RwRAIBFBgICAgHhHBEAgAigCJCIJRQ0EIAIoAjAhFyACIAlBAWsiBjYCJAJ/IAIoAiAiBCgCBCIDQQdNBEAgAkKBygA3AyhBASENIAEQog0MAQsgBCADQQhrIgM2AgQgBCAEKAIAIgFBCGo2AgAgAkEYaiABKQAAEKcIIAIoAhghDSACKAIcCyELIA1BAXENJCALRQ0CQYCACCALIAtBgIAITxsiAUEDdCIGQQQQsw4iCUUNGiACIAk2AiwgAiABNgIoQQAhASACQQA2AjAgBCgCACEHQQAhDQNAIANBBEkNJCAEIANBBGsiBjYCBCAEIAEgB2oiA0EEaiIKNgIAIAZBBEkNJCADKAAAIQUgBCAGQQRrIgM2AgQgBCAKQQRqNgIAIAooAAAhBiACKAIoIA1GBEAgAkEoakHIq8EAELgIIAIoAiwhCQsgASAJaiIKIAU2AgAgCkEEaiAGNgIAIAIgDUEBaiINNgIwIAFBCGohASALIA1HDQALIAIoAiwhCyACKAIoIhNBgoCAgHhIDSQgAigCJCEGDAMLQQBBvLDBAEGEq8EAEL4KIQ8LIABBgICAgHg2AgAgACAPNgIEDCQLQQQhC0EAIQ0LIAZFDQMCfyACKAIgIgQoAgQiAUEHTQRAIAJCgcoANwMoQQEhAyACQShqEKINDAELIAQgAUEIayIBNgIEIAQgBCgCACIJQQhqNgIAIAJBEGogCSkAABCnCCACKAIQIQMgAigCFAshCSADQQFxDR0gCUUNAUHMmQMgCSAJQcyZA08bIgNBFGwiCkEEELMOIgdFDRcgAiAHNgIsIAIgAzYCKEEAIQMgAkEANgIwIAQoAgAhEEEAIQoDQCABQQRJDRkgBCABQQRrIgE2AgQgBCADIBBqIgVBBGoiBzYCACABQQRJDRogBSgAACEIIAQgAUEEayIBNgIEIAQgB0EEaiIFNgIAAkACQCABQQRJDQAgBygAACEMIAQgAUEEayIBNgIEIAQgBUEEaiIHNgIAIAFBBEkNACAFKAAAIQ4gBCABQQRrIgE2AgQgBCAHQQRqIgU2AgAgAUEETw0BCyACQQA6ADsgAkElOwA5IAJBADYCPCACQQE6ADgMHgsgBzUAACEZIAQgAUEEayIBNgIEIAQgBUEEajYCACAZIAU1AABCIIaEIRkgAigCKCAKRgRAIAJBKGpByKvBABCUCAsgAigCLCADaiIHIAg2AgAgB0EMaiAZNwIAIAdBCGogDjYCACAHQQRqIAw2AgAgAiAKQQFqIgo2AjAgA0EUaiEDIAkgCkcNAAsgAigCLCIJIAIoAigiEEGCgICAeE4NAhoMHQtBAUG8sMEAQYSrwQAQvgohCwwfC0EAIQpBBAshCSAGQQFGDQMgAiAGQQJrNgIkAn8gBCgCBCIDQQdNBEAgAkKBygA3AyggAkEoahCiDSEGQQEMAQsgBCADQQhrIgM2AgQgBCAEKAIAIgFBCGo2AgAgAkEIaiABKQAAEKcIIAIoAgwhBiACKAIIC0EBcQ0EIAZFDQFBgIACIAYgBkGAgAJPGyIHQQV0IgFBBBCzDiIFRQ0XQQAhASACQQA2AjAgAiAFNgIsIAIgBzYCKCAEKAIAIQhBACEHA0ACQAJAAkAgA0EETwRAIAQgA0EEayIDNgIEIAQgCEEEaiIFNgIAIANBA0sNAQsgAkKBygA3AzggAkE4ahCiDSEGDAELIAgoAAAhDiAEIANBBGsiAzYCBCAEIAVBBGoiCDYCAAJAIANBBE8EQCAFKAAAIRIgBCADQQRrIgM2AgQgBCAIQQRqIgU2AgAgA0EDSw0BCyACQoHKADcDOCACQThqEKINIQYMAQsgCCgAACEUIAQgA0EEayIDNgIEIAQgBUEEaiIINgIAAkACQCADQQRJDQAgBSgAACEVIAQgA0EEayIDNgIEIAQgCEEEaiIFNgIAIANBBEkNACAIKAAAIRYgBCADQQRrIgM2AgQgBCAFQQRqIgg2AgAgA0EDSw0BCyACQQA6ADsgAkElOwA5IAJBADYCPCACQQE6ADggAkE4ahCiDSEGDAELIAU1AAAhGSAEIANBBGsiAzYCBCAEIAhBBGoiBTYCACADRQRAIAJCgcoANwM4IAJBOGoQog0hBgwBCyAINQAAIRogBCADQQFrIgM2AgQgBCAFQQFqIgg2AgAgBS0AACIMQQJJDQFBDEEEELMOIgZFDRsgBiAMOgAEIAZBgoCAgHg2AgALIAIoAigiAUUNBiACKAIsIAFBBXRBBBCIDwwGCyAaQiCGIBmEIRkgAigCKCAHRgRAIAJBKGpByKvBABDJCAsgAigCLCABaiIFIA42AgAgBUEcaiAMOgAAIAVBFGogGTcCACAFQRBqIBY2AgAgBUEMaiAVNgIAIAVBCGogFDYCACAFQQRqIBI2AgAgAiAHQQFqIgc2AjAgAUEgaiEBIAYgB0cNAAsgAigCLCIGIAIoAigiAUGCgICAeE4NAhoMBAtBAkG8sMEAQYSrwQAQvgohCQwZC0EAIQFBACEHQQQLIQQgAkEoaiIFIAJBIGoiCBCvBCACKAIsIg4gAigCKCIGQYGAgIB4Rg0DGiAGQYCAgIB4Rg0CIAIoAjAhFCAFIAgQrwQgAigCLCISIAIoAigiA0GBgICAeEYNBRogA0GAgICAeEYNBCACKAIwIRUgBSAIEK8EIAIoAiwhBSACKAIoIghBgICAgHhrDgIHCAYLQQNBvLDBAEGEq8EAEL4KIQYLIABBgICAgHg2AgAgACAGNgIEDA0LQQRBvLDBAEGEq8EAEL4KCyEDIABBgICAgHg2AgAgACADNgIEDAoLQQVBvLDBAEGEq8EAEL4KCyEMIABBgICAgHg2AgAgACAMNgIEDAcLIAIoAjAhFiACQShqIAJBIGoQrwQgAigCLCEMIAIoAigiGEGAgICAeGsOAgMEAgtBBkG8sMEAQYSrwQAQvgohBQsgAEGAgICAeDYCACAAIAU2AgQMAwsgACACKAIwNgJcIAAgDDYCWCAAIBg2AlQgACAWNgJQIAAgBTYCTCAAIAg2AkggACAVNgJEIAAgEjYCQCAAIAM2AjwgACAUNgI4IAAgDjYCNCAAIAY2AjAgACAHNgIsIAAgBDYCKCAAIAE2AiQgACAKNgIgIAAgCTYCHCAAIBA2AhggACANNgIUIAAgCzYCECAAIBM2AgwgACAXNgIIIAAgDzYCBCAAIBE2AgAMEgtBB0G8sMEAQYSrwQAQvgohDAsgAEGAgICAeDYCACAAIAw2AgQgCEUNACAFIAhBAnRBBBCIDwsgA0UNACASIANBAnRBBBCIDwsgBkUNACAOIAZBAnRBBBCIDwsgAUUNACAEIAFBBXRBBBCIDwsgEEUNCCAJIBBBFGxBBBCIDwwIC0EEIAZBuKvBABDTDQALQQQgCkG4q8EAENMNAAsgAkKBygA3AzgMAwsgAkKBygA3AzgMAgtBBCABQbirwQAQ0w0AC0EEQQxBkMTEACgCACIAQcwIIAAbEQAAAAsgAkE4ahCiDSEJIAIoAigiAUUNACACKAIsIAFBFGxBBBCIDwsgAEGAgICAeDYCACAAIAk2AgQLIBNFDQIgCyATQQN0QQQQiA8MAgsgAkKBygA3AzggAkE4ahCiDSELIAIoAigiAUUNACACKAIsIAFBA3RBBBCIDwsgAEGAgICAeDYCACAAIAs2AgQLIBFFDQAgDyARQQxsQQQQiA8LIAJBQGskAAu6FQIKfwF+IwBBIGsiCCQAIAAQVyAAKAIUIQQCQAJAAkACQAJAIAAoAhBBAWsOAgIBAAsgBCAEKAKEAiIBQQFrNgKEAiABQQFHDQIgBCAEKALIASIHIAQoAkAiA3I2AkACQCADIAdxRQRAIAQtAIABIQEgBEEBOgCAASAIIAE6AAcgAUEBRg0BAkAgBCgCjAEiAUUNACAEKAKIASIHIQIgAUEMbCIJQQxrIgZBDG4iAUEHcUEHRwRAQQAgAUEBakEHcWshAQNAIAIoAgAiBSgCDCEKIAUgCkECIAobNgIMIAJBDGohAiABQQFqIgENAAsLIAZB1ABJDQAgByAJaiEFA0AgAigCACIBKAIMIQYgASAGQQIgBhs2AgwgAkEMaigCACIBKAIMIQYgASAGQQIgBhs2AgwgAkEYaigCACIBKAIMIQYgASAGQQIgBhs2AgwgAkEkaigCACIBKAIMIQYgASAGQQIgBhs2AgwgAkEwaigCACIBKAIMIQYgASAGQQIgBhs2AgwgAkE8aigCACIBKAIMIQYgASAGQQIgBhs2AgwgAkHIAGooAgAiASgCDCEGIAEgBkECIAYbNgIMIAJB1ABqKAIAIgEoAgwhBiABIAZBAiAGGzYCDCAFIAJB4ABqIgJHDQALCyAEKAKYASEBQQAhBiAEQQA2ApgBIAEEQCAEKAKUASECIAFBDGwhBwNAIAhBCGoiBUEIaiACQQhqKAIANgIAIAggAikCACILNwMIIAunIgkoAgwhASAJIAEgCCgCDCABGzYCDCAJIAkoAgAiAUEBazYCACABQQFGBEAgBRDaCwsgAkEMaiECIAdBDGsiBw0ACwsgBCgCjAFFBEAgBCgCmAFFIQYLIARBADoAgAEgBCAGOgCcASAEKALIASEHCyADIAdBf3NxIQYgBCgCACECA0ACQCAEKALMASAHQQFrIAJxIgVBHGxqKAIYIgEgAkEBakcEQCAGIAIiAUcNASAELQCIAiEBIARBAToAiAIgAUUNBiAEKALQASIBBEAgBCgCzAEgAUEcbEEEEIgPCyAEQYQBahCjCCAEQaQBahCjCCAEQcACQcAAEIgPDAYLIAQoAsABIAVBAWpLDQAgBCgCxAEiASACQQAgAWtxaiEBCyAEKALIASEHIAEhAgwACwALDAMLIAQgBCgCPCIBQQFrNgI8IAFBAUcNASAEEOkBIAQtAEAhASAEQQE6AEAgAUUNASAEQQRqEKMIIARBHGoQowggBEHEAEEEEIgPDAELIAQgBCgCxAEiAUEBazYCxAEgAUEBRw0AIAQgBCgCQCIBQQFyNgJAIAFBAXFFBEAgBCgCQCIFQT5xQT5GBEADQCAEKAJAIgVBPnFBPkYNAAsLIAQoAgQhAiAEQQA2AgQCQCAEKAIAIgdBAXYiASAFQQF2IgZGIgUNACACDQADQCAEKAIEIQIgBEEANgIEIAJFDQALCyAFRQRAA0ACQCABQR9xIgFBH0YEQANAIAIoAgAiAUUNAAsgAkHoBkEEEIgPIAEhAgwBCyACIAFBHGxqQRxqLQAAQQFxIQEDQCABRQ0ACwsgBiAHQQJqIgdBAXYiAUcNAAsLIAIEQCACQegGQQQQiA8LIAQgB0F+cTYCAAsgBC0AyAEhASAEQQE6AMgBIAFFDQAgBCgCBCEBIAQoAgBBfnEiAiAEKAJAQX5xIgZHBEADQCACQT5xQT5GBEAgASgCACEFIAFB6AZBBBCIDyAFIQELIAYgAkECaiICRw0ACwsgAQRAIAFB6AZBBBCIDwsgBEGEAWoQowggBEGAAkHAABCIDwsgACgCHCEDAkACQAJAAkAgACgCGEEBaw4CAgEACyADIAMoAoQCIgBBAWs2AoQCIABBAUcNAiADIAMoAsgBIgcgAygCQCIKcjYCQAJAIAcgCnFFBEAgAy0AgAEhACADQQE6AIABIAggADoAByAAQQFGDQECQCADKAKMASIARQ0AIAMoAogBIgkhAiAAQQxsIgZBDGsiBUEMbiIAQQdxQQdHBEBBACAAQQFqQQdxayEBA0AgAigCACIAKAIMIQcgACAHQQIgBxs2AgwgAkEMaiECIAFBAWoiAQ0ACwsgBUHUAEkNACAGIAlqIQEDQCACKAIAIgAoAgwhBSAAIAVBAiAFGzYCDCACQQxqKAIAIgAoAgwhBSAAIAVBAiAFGzYCDCACQRhqKAIAIgAoAgwhBSAAIAVBAiAFGzYCDCACQSRqKAIAIgAoAgwhBSAAIAVBAiAFGzYCDCACQTBqKAIAIgAoAgwhBSAAIAVBAiAFGzYCDCACQTxqKAIAIgAoAgwhBSAAIAVBAiAFGzYCDCACQcgAaigCACIAKAIMIQUgACAFQQIgBRs2AgwgAkHUAGooAgAiACgCDCEFIAAgBUECIAUbNgIMIAEgAkHgAGoiAkcNAAsLIAMoApgBIQBBACEFIANBADYCmAEgAARAIAMoApQBIQIgAEEMbCEHA0AgCEEIaiIBQQhqIAJBCGooAgA2AgAgCCACKQIAIgs3AwggC6ciBigCDCEAIAYgACAIKAIMIAAbNgIMIAYgBigCACIAQQFrNgIAIABBAUYEQCABENoLCyACQQxqIQIgB0EMayIHDQALCyADKAKMAUUEQCADKAKYAUUhBQsgA0EAOgCAASADIAU6AJwBIAMoAsgBIQcLIAogB0F/c3EhBSADKAIAIQIDQAJAIAMoAswBIAdBAWsgAnEiAEE0bGooAjAiASACQQFqRwRAIAUgAiIBRw0BIAMtAIgCIQAgA0EBOgCIAiAARQ0GIAMoAtABIgAEQCADKALMASAAQTRsQQQQiA8LIANBhAFqEKMIIANBpAFqEKMIIANBwAJBwAAQiA8MBgsgAygCwAEgAEEBaksNACADKALEASIAIAJBACAAa3FqIQELIAMoAsgBIQcgASECDAALAAsMAwsgAyADKAI8IgBBAWs2AjwgAEEBRw0BIAMQ6QEgAy0AQCEAIANBAToAQCAARQ0BIANBBGoQowggA0EcahCjCCADQcQAQQQQiA8MAQsgAyADKALEASIAQQFrNgLEASAAQQFHDQAgAyADKAJAIgBBAXI2AkAgAEEBcUUEQCADKAJAIgBBPnFBPkYEQANAIAMoAkAiAEE+cUE+Rg0ACwsgAygCBCECIANBADYCBAJAIAMoAgAiB0EBdiIBIABBAXYiBUYiAA0AIAINAANAIAMoAgQhAiADQQA2AgQgAkUNAAsLIABFBEADQAJAIAFBH3EiAEEfRgRAA0AgAigCACIARQ0ACyACQdAMQQQQiA8gACECDAELIAIgAEE0bGpBNGotAABBAXEhAANAIABFDQALCyAFIAdBAmoiB0EBdiIBRw0ACwsgAgRAIAJB0AxBBBCIDwsgAyAHQX5xNgIACyADLQDIASEAIANBAToAyAEgAEUNACADKAIEIQEgAygCAEF+cSICIAMoAkBBfnEiBUcEQANAIAJBPnFBPkYEQCABKAIAIQAgAUHQDEEEEIgPIAAhAQsgBSACQQJqIgJHDQALCyABBEAgAUHQDEEEEIgPCyADQYQBahCjCCADQYACQcAAEIgPCyAIQSBqJAAPCyAIQgA3AhQgCEKBgICAwAA3AgwgCEGguMEANgIIIAhBB2ogCEEIakGouMEAEP8MAAvOOQMHfyR9An4jAEGAAmsiCCQAIAhB+ABqIAMgBCgCYCILEQAAIAhBoAFqIgwgCCgCeCIKIAgoAnwoAgwRAAAgCCkDoAEhMyAIKQOoASE0IAhB8ABqIAUgBigCYCIOEQAAIAwgCCgCcCIJIAgoAnQoAgwRAAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAJQQAgCCkDoAFC3fPzxO6x3LFshSAIKQOoAUK/vvvdsdS55XaFhFAbIg1BAEdBACAKQQAgM0Ld8/PE7rHcsWyFIDRCv7773bHUueV2hYRQGyIJG0UEQCAJQQAgBSAGKAKwAREEABsNASANQQAgAyAEKAKwAREEABsNAiAIQegAaiADIAsRAAAgDCAIKAJoIgogCCgCbCgCDBEAACAIKQOgASEzIAgpA6gBITQgCEHgAGogBSAOEQAAIAwgCCgCYCIJIAgoAmQoAgwRAAAgCkEAIDNC5ZTL2cyFlMymf4UgNEKnv6zhvbL9yjqFhFAbIgoEQCAJQQAgCCkDoAFC5ZTL2cyFlMymf4UgCCkDqAFCp7+s4b2y/co6hYRQGyIJDQQLIAhB2ABqIAMgCxEAACAIQaABaiIJIAgoAlgiCiAIKAJcKAIMEQAAIAgpA6ABITMgCCkDqAEhNCAIQdAAaiAFIA4RAAAgCSAIKAJQIgkgCCgCVCgCDBEAACAKQQAgM0LllMvZzIWUzKZ/hSA0Qqe/rOG9sv3KOoWEUBsiCgRAIAlBACAIKQOgAULllMvZzIWUzKZ/hSAIKQOoAUKnv6zhvbL9yjqFhFAbIgkNBQsgCEHIAGogAyALEQAAIAhBoAFqIgkgCCgCSCIKIAgoAkwoAgwRAAAgCCkDoAEhMyAIKQOoASE0IAhBQGsgBSAOEQAAIAkgCCgCQCIJIAgoAkQoAgwRAAAgCkEAIDNCjJTxyqTruczJAIUgNELkl4yh0uz6nqt/hYRQGyIKBEAgCUEAIAgpA6ABQrHO9tO4jpSUywCFIAgpA6gBQrnZiIyNvqmxZoWEUBsiCQ0GCyAIQThqIAMgCxEAACAIQaABaiAIKAI4IgkgCCgCPCgCDBEAACAIKQOgASEzIAgpA6gBITQgCEEwaiAFIAYoArQBIgsRAAAgCUEAIDNChbmYgbH0spqPf4UgNEK8mdCQsa2+yq1/hYRQGyIKBEAgCCgCMCIJDQcLIAhBKGogAyAEKAK0ASIMEQAAIAgoAiwhCiAIKAIoIQ0gCEEgaiAFIA4RAAAgCEGgAWogCCgCICIJIAgoAiQoAgwRAAAgDQRAIAlBACAIKQOgAUKFuZiBsfSymo9/hSAIKQOoAUK8mdCQsa2+yq1/hYRQGyIJDQgLIAhBGGogAyAMEQAAIAgoAhwhCSAIKAIYIQwgCEEQaiAFIAsRAAAgDARAIAgoAhAiCg0JCyAIQQhqIAMgBCgCuAERAAAgCCgCCCIJRQ0JIAhBoAFqIgMgCSAIKAIMIAEgAiAFIAYgBxB2IAAhASAIKAKkASIAQQNHBEAgCEHwAWogCEG4AWopAgA3AwAgCEHoAWogA0EQaikCADcDACAIIAgpAqgBNwPgAQVBAiEACyABIAA2AgAgASAIKQPgATcCBCABQQxqIAhB6AFqKQMANwIAIAFBFGogCEHwAWopAwA3AgAMDQsgB0MAAAAAYEUNCQJ/IAIqAhAiFiAWlCACKgIUIhUgFZSSIAIqAhgiGyAblJKRIhAgB5MhEUECIBEgCSoCACIZIA0qAgAiD5IiB19FDQAaQQAgByAQYA0AGiAWIBCVIhcgAioCBCISlCAVIBCVIhQgAioCACIWlJMiByAHkiEYIBQgAioCCCIalCAbIBCVIhMgEpSTIgcgB5IhECATIAIqAgwiFSAYlCASIBCUIBYgEyAWlCAXIBqUkyIHIAeSIhGUk5KSIA+MIg+UIQcgFCAVIBGUIBYgGJQgGiAQlJOSkiAPlCEWIBcgFSAQlCAaIBGUIBIgGJSTkpIgD5QhFSAZIBOUIRsgGSAUlCEQIBkgF5QhGUEBCyEBIAAgBzgCGCAAIBY4AhQgACAVOAIQIAAgGzgCDCAAIBA4AgggACAZOAIEIAAgATYCAAwMCyAJKgIAIREgCCACKgIMIhY4AuwBIAggAioCCCIXjDgC6AEgCCACKgIEIhKMOALkASAIIAIqAgAiFIw4AuABIAggFiAUIAIqAhQiGJQgEiACKgIQIhqUkyIPIA+SIhOUIBIgEiACKgIYIhCUIBcgGJSTIg8gD5IiFZQgFCAXIBqUIBQgEJSTIg8gD5IiD5STkiAQkzgC+AEgCCAWIA+UIBQgE5QgFyAVlJOSIBiTOAL0ASAIIBYgFZQgFyAPlCASIBOUk5IgGpM4AvABIAhBoAFqIAhB4AFqIAUgBiARIAcQ8gIgCCgCoAFFBEBBAiECDAsLIAgqAtQBQwAAAABfBEBBACECDAsLIAgoArgBIQYgCCgCtAEhBSAIKAKwASEJIAgoAqwBIQ0gCCgCqAEhBCAIKAKkASEDQQEhAgwKCyAIQaABaiACIAMgBCANKgIAIAcQ8gIgCCgCoAFBAUcEQEECIQIMCQsgCCoC1AFDAAAAAF8EQEEAIQIMCQsgCEHoAWogCEGsAWooAgA2AgAgCEGYAWogCEG4AWooAgA2AgAgCCAIKQKkATcD4AEgCCAIKQKwATcDkAFBASECDAgLIAhBoAFqIgEgAiAKIAkgBxCHAiAAQRhqIAFBGGooAgA2AgAgAEEQaiABQRBqKQIANwIAIABBCGogAUEIaikCADcCACAAIAgpAqABNwIADAkLIAhBoAFqIgEgAiAKIAkgBxCHAiAAQRhqIAFBGGooAgA2AgAgAEEQaiABQRBqKQIANwIAIABBCGogAUEIaikCADcCACAAIAgpAqABNwIADAgLIAhBoAFqIgMgAhDcByAIQeABaiIGIQEgByEVQQAhBSMAQbACayICJAAgAiADKgIMIiI4AhAgAiADKgIIIhyMOAIMIAIgAyoCBCIdjDgCCCACIAMqAgAiHow4AgQgAiAiIB4gAyoCFCIrlCAdIAMqAhAiLJSTIgcgB5IiEZQgHSAdIAMqAhgiLZQgHCArlJMiByAHkiIPlCAeIBwgLJQgHiAtlJMiByAHkiIHlJOSIC2TIhY4AhwgAiAiIAeUIB4gEZQgHCAPlJOSICuTIhg4AhggAiAiIA+UIBwgB5QgHSARlJOSICyTIho4AhQgAkEgaiAJIAogAxDNAQJAAkAgAioCICIvIBVeRQRAIAIgCioCDCIjIAoqAgAiJJMiEyAKKgIcIh8gCioCBCImkyIQlCAKKgIQIhIgJpMiByAKKgIYIiAgJJMiEZSTIhQgFJQgByAKKgIgIiEgCioCCCIlkyIPlCAKKgIUIhsgJZMiByAQlJMiECAQlCAHIBGUIBMgD5STIg8gD5SSkiIHQwAAgCheBH8gAiAUIAeRIgeVOAKIASACIA8gB5U4AoQBIAIgECAHlTgCgAFBAQVBAAs2AnwgAkEwaiAKIAJB/ABqIAkgAkEEahDFAyACKgIwIjAgFV4NASACQQA2AuQBIAJBADYC1AEgAkIANwLAASACQQA2ArABIAJCADcCnAEgAkEANgKMASACQQA2AnwgAiArIBIgIiAcICOUIB4gG5STIgcgB5IiGZQgHCAdIBuUIBwgEpSTIgcgB5IiF5QgHiAeIBKUIB0gI5STIgcgB5IiEpSTkpKSIjIgJiAiIBwgJJQgHiAllJMiByAHkiIUlCAcIB0gJZQgHCAmlJMiByAHkiITlCAeIB4gJpQgHSAklJMiByAHkiIQlJOSkiArkiIokyInOAKEASACICeMOAKUASACICggKyAfICIgHCAglCAeICGUkyIHIAeSIhGUIBwgHSAhlCAcIB+UkyIHIAeSIg+UIB4gHiAflCAdICCUkyIHIAeSIgeUk5KSkiIukyIxOALMASACIDGMOALcASACICwgJCAiIBOUIB0gEJQgHCAUlJOSkpIiKSAsICAgIiAPlCAdIAeUIBwgEZSTkpKSIiSTIiY4AuABIAIgJow4AtgBIAIgJSAiIBCUIB4gFJQgHSATlJOSkiAtkiIqIC0gISAiIAeUIB4gEZQgHSAPlJOSkpIiJZMiETgC0AEgAiARjDgCyAEgAiAuIDKTIh84AqgBIAIgH4w4ArgBIAIgJCAsICMgIiAXlCAdIBKUIBwgGZSTkpKSIg+TIiA4ArwBIAIgIIw4ArQBIAIgJSAtIBsgIiASlCAeIBmUIB0gF5STkpKSIgeTIiE4AqwBIAIgIYw4AqQBIAIgDyApkyIXOAKYASACIBeMOAKQASACIAcgKpMiEjgCiAEgAiASjCIbOAKAAUMAAAAAIRkgAiAyICaUIA8gMZSTIAdDAAAAAJSSOAKsAiACICggJpQgKSAxlJMgKkMAAAAAlCIUkjgCqAIgAiAPIBGUIDJDAAAAAJSSICYgB5STOAKkAiACICkgEZQgKEMAAAAAlCITkiAmICqUkzgCoAIgAiAPQwAAAACUIBEgMpSTIAcgMZSSOAKcAiACIClDAAAAAJQiECARICiUkyAqIDGUkjgCmAIgAiAuICCUICQgH5STICVDAAAAAJQiEZI4ApQCIAIgKCAglCApIB+UkyAUkjgCkAIgAiAkICGUIC5DAAAAAJQiD5IgICAllJM4AowCIAIgKSAhlCATkiAgICqUkzgCiAIgAiAkQwAAAACUIgcgISAulJMgJSAflJI4AoQCIAIgECAhICiUkyAqIB+UkjgCgAIgAiAuIBeUICcgJJSTIBGSOAL8ASACICggF5QgKSAnlJMgFJI4AvgBIAIgEiAklCAPkiAXICWUkzgC9AEgAiApIBKUIBOSIBcgKpSTOALwASACICcgJZQgByASIC6Uk5I4AuwBIAIgKiAnlCAQICggEpSTkjgC6AEgCSoCCCEXIAkqAgQhEiAJKgIAIRRD//9//yEHIAJB6AFqIQwDQAJAIAJB/ABqIAVqIgQqAgAiHyAflCAEQQRqKgIAIiAgIJSSIARBCGoqAgAiISAhlJIiD0MAAAA0XkUNACAMKgIAIhMgDEEEaioCACIQXiEEIB8gFCAfmJQgICASICCYlJIgISAXICGYlJIgD5EiI5UhDyATIBAgBBuMICOVIA+TIREgECATIAQbICOVIA+TIg8gB14EQCAhICOVIScgICAjlSEbIB8gI5UhGSAPIQcLIAcgEV1FDQAgIYwgI5UhJyAgjCAjlSEbIB+MICOVIRkgESEHCyAMQQhqIQwgBUEMaiIFQewARw0ACwJAAkACQAJAIAcgFV5FBEACQCAvQwAAAABfRQ0AIDBDAAAAAF9FDQAgB0MAAAAAXw0CCyAHIC9fIC8gMGBxDQQgByAwXyAvIDBfcQ0DIAcgMGAgByAvYHENAkGA1MIAQShBwO/CABDWDAALIAFBAjYCAAwGCyABQQA2AgAMBQsgAiAZOAJ8IAIgGzgCgAEgAiAnOAKEASACQegBaiIFIAkgAkH8AGoiCxDQBiACICeMOAKEASACIBuMOAKAASACIBmMOAJ8IAJB2ABqIgQgAkEEaiALEIcJIApBGGohDCAKQQxqIQkCQAJAAkACQEECIAQqAgAiEyAKKgIMlCAEKgIEIhAgCioCEJSSIAQqAggiESAKKgIUlJIiDyATIAoqAgCUIBAgCioCBJSSIBEgCioCCJSSIgddIgQgEyAKKgIYlCAQIAoqAhyUkiARIAoqAiCUkiAPIAcgBBtdGw4CAQIACyALIAkpAgA3AgwgCyAKKQIANwIAIAtBFGogCUEIaigCADYCACALQQhqIApBCGooAgA2AgAMAgsgCyAJKQIANwIAIAsgDCkCADcCDCALQQhqIAlBCGooAgA2AgAgC0EUaiAMQQhqKAIANgIADAELIAsgDCkCADcCACALIAopAgA3AgwgC0EIaiAMQQhqKAIANgIAIAtBFGogCkEIaigCADYCAAsgASADIAUgCyAVEIcCDAQLIAIgAioCPIw4AoQBIAIgAioCOIw4AoABIAIgAioCNIw4AnwgAkHMAGoiBSAJIAJBBGogAkH8AGoiBBC4BSAEIAogBUEBEFYgASACKgJMIAIqAnwiEJMiByAHlCACKgJQIAIqAoABIhGTIgcgB5SSIAIqAlQgAioChAEiD5MiByAHlJIgFSAVlF4Ef0ECBSACQfAAaiADIAUQhwkgASAPOAIYIAEgETgCFCABIBA4AhAgASAtIAIqAniSOAIMIAEgKyACKgJ0kjgCCCABICwgAioCcJI4AgRBAQs2AgAMAwsgAiACKgIsjDgChAEgAiACKgIojDgCgAEgAiACKgIkjDgCfCACQUBrIgQgCiADIAJB/ABqEO0DIAECfyAUjCACKgJAIhmTIgdDAAAAACAHQwAAAABgGyAZIBSTIgdDAAAAACAHQwAAAABgG5MiEUMAAAAAXCASjCACKgJEIhOTIgdDAAAAACAHQwAAAABgGyATIBKTIgdDAAAAACAHQwAAAABgG5MiD0MAAAAAXHIgF4wgAioCSCIQkyIHQwAAAAAgB0MAAAAAYBsgECAXkyIHQwAAAAAgB0MAAAAAYBuTIgdDAAAAAFxyIQVBAiAQIBAgB5IgECAFGyIQkyIHIAeUIBkgGSARkiAZIAUbIhGTIgcgB5QgEyATIA+SIBMgBRsiD5MiByAHlJKSIBUgFZReDQAaIAJB5ABqIAJBBGogBBCHCSABIBA4AgwgASAPOAIIIAEgETgCBCABIBYgAioCbJI4AhggASAYIAIqAmiSOAIUIAEgGiACKgJkkjgCEEEBCzYCAAwCCyABQQI2AgAMAQsgAUECNgIACyACQbACaiQAIAhBhAFqIgUgCEGQAWoiBCAIKALgASIDQQFGIgIbIgEgCCkC5AE3AgAgAUEIaiAGQQxqKAIANgIAIAQgBSACGyIBQQhqIAZBGGooAgA2AgAgASAIKQLwATcCACAAIAM2AgAgACAIKQKQATcCBCAAQQxqIARBCGooAgA2AgAgACAIKQKEATcCECAAQRhqIAVBCGooAgA2AgAMBwsgCEGgAWoiASACIAogCSAIKAI0QRRqKAIAIAcQtAQgAEEYaiABQRhqKAIANgIAIABBEGogAUEQaikCADcCACAAQQhqIAFBCGopAgA3AgAgACAIKQKgATcCAAwGCyAIQaABaiEDIApBFGooAgAhASMAQUBqIgQkACAEIAIqAgwiGDgCMCAEIAIqAggiEow4AiwgBCACKgIEIhSMOAIoIAQgAioCACIWjDgCJCAEIBggFiACKgIUIhqUIBQgAioCECITlJMiDyAPkiIQlCAUIBQgAioCGCIVlCASIBqUkyIPIA+SIhGUIBYgEiATlCAWIBWUkyIPIA+SIg+Uk5IgFZM4AjwgBCAYIA+UIBYgEJQgEiARlJOSIBqTOAI4IAQgGCARlCASIA+UIBQgEJSTkiATkzgCNCAEQQhqIgIgBEEkaiAJIA0gASAHELQEAkAgBCgCCEEBRgRAIAMgBCkCDDcCECADIAQpAhg3AgQgA0EBNgIAIANBGGogAkEMaigCADYCACADQQxqIAJBGGooAgA2AgAMAQsgAyAEKQIINwIAIANBGGogBEEIaiIBQRhqKAIANgIAIANBEGogAUEQaikCADcCACADQQhqIAFBCGopAgA3AgALIARBQGskACAAQRhqIANBGGooAgA2AgAgAEEQaiADQRBqKQIANwIAIABBCGogA0EIaikCADcCACAAIAgpAqABNwIADAULIAlBDGooAgAhBSAIKAIUQRRqKAIAIQQjAEGQAmsiBiQAIAZB5AFqQgA3AgAgBkIANwLcASAGQoKAgIAwNwI0IAZCgICAgBA3AiwgBkE8akEAQaAB/AsAAn0gAioCGCISIBKUIAIqAhAiECAQlCACKgIUIhMgE5SSkiIPQwAAgCheBEAgBiAQjCAPkSIPlSIVOALsASAGIBOMIA+VIhE4AvABIAYgEowgD5UiDzgC9AEgBkH4AWoiAyAMIAZB7AFqIAURAQAgBiAPjDgCDCAGIBGMOAIIIAYgFYw4AgQgBkGEAmoiASAKIAIgBkEEaiAEEQIAIAZB0ABqIANBCGoiAygCADYCACAGQdwAaiABQQhqIgEoAgA2AgAgBiAGKQL4ATcCSCAGIAYpAoQCNwJUIAYqAvwBIAYqAogCkyEbIAYqAvgBIAYqAoQCkyERIAMqAgAgASoCAJMMAQsgBkEANgL0ASAGQoCAgPwDNwLsASAGQfgBaiIDIAwgBkHsAWogBREBACAGQYCAgIB4NgIMIAZCgICA/IuAgICAfzcCBCAGQYQCaiIBIAogAiAGQQRqIAQRAgAgBkHQAGogA0EIaiIDKAIANgIAIAZB3ABqIAFBCGoiASgCADYCACAGIAYpAvgBNwJIIAYgBikChAI3AlQgBioC/AEgBioCiAKTIRsgBioC+AEgBioChAKTIREgAyoCACABKgIAkwshDyAGQQA2AtgBIAZBADYC6AEgBiAPOAJEIAYgGzgCQCAGIBE4AjwgBkEEaiACIAwgBSAKIAQgB0EBIAZBLGoQzgECQAJAAkACQCAGKAIEIgFBAWsOAwABAgMLIAAgBikCCDcCBCAAQQxqIAZBEGooAgA2AgAgBioCFCAQkyIQIAIqAgQiFJQgBioCGCATkyIVIAIqAgAiFpSTIgcgB5IhGCAVIAIqAggiGpQgBioCHCASkyIRIBSUkyIHIAeSIRMgACARIAIqAgwiDyAYlCAUIBOUIBYgESAWlCAQIBqUkyIHIAeSIgeUk5KSOAIYIAAgFSAPIAeUIBYgGJQgGiATlJOSkjgCFCAAIBAgDyATlCAaIAeUIBQgGJSTkpI4AhBBASEBDAILQYDUwgBBKEHg78IAENYMAAtBAiEBCyAAIAE2AgAgBkGQAmokAAwECyAIIAUgBigCuAERAAAgCCgCACIGBEAgCCgCBCEFIwBB4ABrIgkkACAJIAIqAgwiGDgCMCAJIAIqAggiEow4AiwgCSACKgIEIhSMOAIoIAkgAioCACIWjDgCJCAJIBggFiACKgIUIhqUIBQgAioCECITlJMiDyAPkiIQlCAUIBQgAioCGCIVlCASIBqUkyIPIA+SIhGUIBYgEiATlCAWIBWUkyIPIA+SIg+Uk5IgFZM4AjwgCSAYIA+UIBYgEJQgEiARlJOSIBqTOAI4IAkgGCARlCASIA+UIBQgEJSTkiATkzgCNCAJQUBrIAYgBSABIAlBJGogAyAEIAcQdgJAAkAgCSgCRCIDQQNHBEAgCUEgaiICIAlB0ABqKAIANgIAIAlBEGoiASAJQdwAaigCADYCACAJIAkpAkg3AxggCSAJKQJUNwMIIANBAUcNASAAIAkpAxg3AhAgACAJKQMINwIEIABBATYCACAAQRhqIAIoAgA2AgAgAEEMaiABKAIANgIADAILQQIhAwsgACADNgIAIAAgCSkDGDcCBCAAIAkpAwg3AhAgAEEMaiAJQSBqKAIANgIAIABBGGogCUEQaigCADYCAAsgCUHgAGokAAwECyAAQQM2AgAMAwsgCEEANgKwASAIQQE2AqQBIAhBmO/CADYCoAEgCEIENwKoASAIQaABakGg78IAELgNAAsgACACNgIAIAAgCCkD4AE3AgQgACAIKQOQATcCECAAQQxqIAhB6AFqKAIANgIAIABBGGogCEGYAWooAgA2AgAMAQsgACANNgIYIAAgBDYCFCAAIAM2AhAgACAGNgIMIAAgBTYCCCAAIAk2AgQgACACNgIACyAIQYACaiQAC4QTAg1/CH0jAEFAaiIHJAACQAJAIAAoApQCIglFBEAMAQsgASAAKAIIIghPBEAgASAIQdyYwgAQiAsACwJAAkACQAJAIAYgBCgCACIIIAlqIg9PBEAgACgCBCABQfADbGooApADIgogACgCRCIBTwRAIAogAUHsmMIAEIgLAAsgACgCQCAKQQR0aiILQQxqIgooAgAiASAJRw0DIAMqAgghFSADKgIEIRYgAyoCACEXIAIqAgghGCACKgIEIRkgAioCACEaIAUgCEECdGohAUEAIQJBFCEMA0AgAkEBaiICIAooAgBLDQIgASALQQRqKAIAIAxqIgNBFGsqAgAgGpRDAAAAAJIgA0EQayoCACAZlJIgA0EMayoCACAYlJIgA0EIayoCACAXlJIgA0EEayoCACAWlJIgAyoCACAVlJI4AgAgAUEEaiEBIAxBGGohDCACIAlHDQALQQEgCSAJQQFNGyECA0AgBiAIQQAgBkEBRyILGyIKS0EAIAsgCEVyG0UEQCAHQQA2AjggB0EBNgIsIAdBzP7BADYCKCAHQgQ3AjAgB0EoakH8mMIAELgNAAsgCCAJaiIDQQAgCxsiASAGTw0DIAsgA0VyRQ0DIAUgAUECdGogBSAKQQJ0aioCADgCACAIQQFqIQggAkEBayICDQALDAQLDAULIAdBADYCOCAHQQE2AiwgB0GQ+8EANgIoIAdCBDcCMCAHQShqQaj7wQAQuA0ACyAHQQA2AjggB0EBNgIsIAdBzP7BADYCKCAHQgQ3AjAgB0EoakGMmcIAELgNAAsgByABNgIMIAdBBjYCCCAHQQE2AhQgByAJNgIQIAdBAzYCLCAHQYiAwgA2AiggB0ICNwI0IAcgB0EQaq1CgICAgJAPhDcDICAHIAdBCGqtQoCAgICQD4Q3AxggByAHQRhqNgIwIAdBKGpBoIDCABC4DQALAn0CQAJAAkACQAJAIAYgCSAPak8EQCAFIA9BAnRqIQ0gCSEIAkAgACgCkAEiDkF/Rg0AAkAgACgCjAEiCkUNACAAKAKIASEDIAlBAUcEQCAKQQJ0IQwgDSAOQQJ0aiECIA4gCSAJIA5LG0EBayEBA0AgAygCACIIIAlPDQUgCSABQQFqIgFGDQYgA0EEaiEDIAIgDSAIQQJ0aioCADgCACACQQRqIQIgDEEEayIMDQALDAELIA5BAWshAiAKQQJ0IQEDQCADKAIADQQgAkEBaiICDQUgA0EEaiEDIAFBBGsiAQ0ACwsgCSAKIA5qIghrIgNFDQAgCEEBaiEQIAlBAnQiCyANaiEMIAhBAnQiASANaiECAkAgA0EBcUUEQCACIQEMAQsgAiAGQQJ0aiIKIAIgASALRiICGyIBQQA2AgAgCiAMIAIbIQwgASADQQFrIgNBAEdBAnRqIQILIAkgEEYNAANAIAZBAnQiESABaiIQIAIgAiAMRiISGyIKQQA2AgAgCiADQQFHQQJ0aiITIAIgEWogDCASGyILRiEMIBAgASASGyIKIBFqIgEgEyAMGyICQQA2AgAgASAKIAwbIQEgESATaiALIAwbIQwgAiADQQJHQQJ0aiECIANBAmsiAw0ACwsgCARAIAggCUsNCSAAQdwAaiANIAgQ2QELAkAgDkF/Rg0AIAAoAowBIgJFDQAgACgCiAEhCCAJQQFHBEAgAkECdEEEayEDA0AgA0ECdiAOaiICIAlPDQYgAyAIaigCACIBIAlPDQcgDSABQQJ0aiANIAJBAnRqIgEqAgA4AgAgAUEANgIAIANBBGsiA0F8Rw0ACwwBC0EAIA5rIQEgAkECdEEEayEDA0AgA0ECdiABRw0FIAMgCGooAgANBiANQQA2AgAgA0EEayIDQXxHDQALCyAEKAIAIgogCWogBksNCCAEIAogCUEBdGo2AgAgCUEISQRAQQAhAUMAAAAADAcLIApBAnQhBCAPQQJ0IQMgCUF4cSEBIAkhAiAFIQZDAAAAACEVQwAAAAAhFkMAAAAAIRdDAAAAACEYQwAAAAAhGUMAAAAAIRoDQCAaIAQgBmoiCyoCACADIAZqIggqAgCUkiEaIBQgC0EcaioCACAIQRxqKgIAlJIhFCAbIAtBGGoqAgAgCEEYaioCAJSSIRsgFSALQRRqKgIAIAhBFGoqAgCUkiEVIBYgC0EQaioCACAIQRBqKgIAlJIhFiAXIAtBDGoqAgAgCEEMaioCAJSSIRcgGCALQQhqKgIAIAhBCGoqAgCUkiEYIBkgC0EEaioCACAIQQRqKgIAlJIhGSAGQSBqIQYgAkEIayICQQdLDQALDAULDAcLIAdBADYCOCAHQQE2AiwgB0HM/sEANgIoIAdCBDcCMCAHQShqQayZwgAQuA0ACyAHQQA2AjggB0EBNgIsIAdBzP7BADYCKCAHQgQ3AjAgB0EoakG8mcIAELgNAAsgB0EANgI4IAdBATYCLCAHQcz+wQA2AiggB0IENwIwIAdBKGpBzJnCABC4DQALIAdBADYCOCAHQQE2AiwgB0HM/sEANgIoIAdCBDcCMCAHQShqQdyZwgAQuA0ACyAXIBSSIBggG5IgGSAVkiAaIBaSQwAAAACSkpKSCyEUAkAgASAJTw0AAkAgCUEDcSICRQRAIAEhBgwBCyAFIAFBAnQiBCAKQQJ0amohAyAFIAQgD0ECdGpqIQggASEGA0AgBkEBaiEGIBQgAyoCACAIKgIAlJIhFCADQQRqIQMgCEEEaiEIIAJBAWsiAg0ACwsgASAJa0F8Sw0AIAUgBkECdCIBIApBAnRqaiEDIAUgASAPQQJ0amohCCAJIAZrIQYDQCAUIAMqAgAgCCoCAJSSIANBBGoqAgAgCEEEaioCAJSSIANBCGoqAgAgCEEIaioCAJSSIANBDGoqAgAgCEEMaioCAJSSIRQgA0EQaiEDIAhBEGohCCAGQQRrIgYNAAsLIAAoAhggCU8EQEEAIQgCQCAJQQhJDQAgCUEIayIBQQN2QQFqIgBBB3EhAyABQThPBEAgAEH4////A3EhCANAIAhBCGsiCA0ACwsgCUF4cSEIIANFDQADQCADQQFrIgMNAAsLIAggCU8NASAIIQYgCUEHcSIDBEAgAyAIaiEGA0AgA0EBayIDDQALCyAIIAlrQXhLDQEgCSAGayEDA0AgA0EIayIDDQALDAELDAELIAdBQGskACAUDwsgB0EANgI4IAdBATYCLCAHQZD7wQA2AiggB0IENwIwIAdBKGpBmPvBABC4DQAL+EoDHn8lfQJ+IwBBoARrIgIkACAAKAIAKAIAIgNBIEkhBCAAKAIEIgkoAgBBAUYEQCAJKAIEIglB//8DcSEOIAlBEHYhEUEBIQgLIANBACAEGyEKIAAoAhQhAyAAKAIMIgQoAgghCSAEKAIEIQwgBCgCACEEIAAoAggiBigCBCELIAYoAgAhDwJAIAAoAhAiBigCAEEBRgRAIAYqAgQhPAwBCyAEQQFxRQ0AIAMoAgAgDCAJELcMIgZFDQBDAAAAAEMAAIA/IAYqAqQCIjyVIDxDAAAAAFsbITwLIAMoAgAhBiAAKAIgKAIAIQUgACgCHCgCACEHIAAoAhgoAgAhDSACQQRqIgNBCGoiECAONgIAIANBEGoiDiAPNgIAIANBGGoiDyAENgIAIAIgDTYCPCACQQE2AhAgAiARNgIIIAIgCDYCBCAHKAI8IQggBygCQCEEIAIgBTYCRCACIAY2AkAgAiAENgI4IAIgCCAEKAIIQQFrQXhxakEIaiIHNgI0IAIgCzYCGCACIAw2AiAgA0EgaiIMIAk2AgAgAiAKNgIoIANBKGoiCCABNgIAIAJB+M/BADYCMEEAIQMgACgCJCIWKAIAQQA2AkggFigCACEBIAAoAigiHCoCACEwIAJByABqIglBKGogCCkCADcDACAJQSBqIAwpAgA3AwAgCUEYaiAPKQIANwMAIAlBEGogDikCADcDACAJQQhqIBApAgA3AwAgAiAFNgKIASACIAY2AoQBIAIgDTYCgAEgAiAENgJ8IAIgBzYCeCACIAIpAgQ3A0ggACgCMCEFIAAoAiwiFygCACEMIBcoAgQiDSgCCCEGIAJBmAFqIgcgACgCNCgCACIEQQhqKAIANgIAIAIgBCkCADcDkAEgAkIANwGmASACQgA3A6ABIwBBIGsiBCQAIARBCGogDCAGQQFrQXhxakEIaiIIIA0oAoABEQAAIAQqAhQgBCoCCJMiICABKgIkiyIhlCAEKgIYIAQqAgyTIiIgASoCKIsiJpSSIAQqAhwgBCoCEJMiLCABKgIsiyIllJIhIyACQbABaiIMICwgJSAjlJMiLCAslCAgICEgI5STIiAgIJQgIiAmICOUkyIgICCUkpKRvK0gI7ytQiCGhDcCACAEQSBqJAAgAkHAAWoiECAHKAIANgIAIAIgAikDkAE3A7gBIAEgMCAJIAggDSAFIAxBAEEAEGMhHSACQQA2AtABIAJCADcCyAECQAJAIAIqArgBIiMgI5QgAioCvAEiICAglJIgECoCACIhICGUkiIiQ/7m2y5eRQRAIAUqAhghJiAFKgIUISwgBSoCECElQwAAAAAhIkMAAAAAISNDAAAAACEgDAELIAEqAgQiJiAmIAIqArQBlCABKAIAGyFAIAFBQGshEiABKgI4ITYgAkHoAWohDiAFKgIYISYgBSoCFCEsIAUqAhAhJUFrIREgAS0APEEBcSEeAkADQAJAIAIgISAikSIhlTgC3AEgAiAgICGVOALYASACICMgIZU4AtQBIBFBAWoiEUUNACACQaACaiIDQQhqIAVBCGoiGCkCADcDACAFKQIAIUUgAiAlIAIqAqABkjgCsAIgAiAsIAIqAqQBkjgCtAIgAiAmIAIqAqgBkjgCuAIgAiBFNwOgAiACQYACOwHAAyACIEA4ArwDIAIgITgCuAMgAkHgAWogAkHIAGogAyACQdQBaiAIIA0gAkG4A2oiBBByIAItAJwCQQRGDQIgAkHAAmoiA0EIaiAOQQhqIgcpAgA3AwAgA0EQaiAOQRBqIgspAgA3AwAgA0EYaiAOQRhqIg8pAgA3AwAgA0EgaiAOQSBqIhUpAgA3AwAgA0EoaiAOQShqIhMpAgA3AwAgA0EwaiAOQTBqIhkpAgA3AwAgAiAOKQIANwPAAiACKALkASEKIAIoAuABIQwgAioCoAEhISACKgLYASEiIAIqAtQBISQgAioCwAIiIyACKgLcAZQiJyACQagBaiIDKgIAkiEgIAMgIDgCACAQIBAqAgAgJ5M4AgAgAiACKgK4ASAjICSUIiSTOAK4ASACIAIqArwBICMgIpQiI5M4ArwBIAIgJCAhkiIhOAKgASACICMgAioCpAGSIiM4AqQBIARBCGoiGiADKAIANgIAIAJBgANqIhsgECgCADYCACACIAIpA6ABNwO4AyACIAIpA7gBNwP4AiAmICCSISAgLCAjkiEjICUgIZIhISABKAJIIgQgASgCQEYEQEEAIQkjAEEgayIDJABBBCASKAIAIgZBAXQiFCAUQQRNGyIUrUL0AH4iRUIgiEIAUgRAQQBBAEHA0sEAENMNAAsCQCBFpyIfQfz///8HTQR/IAMgBgR/IAMgBkH0AGw2AhwgAyASKAIENgIUQQQFQQALNgIYIANBCGpBBCAfIANBFGoQ9AkgAygCCEEBRw0BIAMoAhAhCSADKAIMBUEACyAJQcDSwQAQ0w0ACyADKAIMIQkgEiAUNgIAIBIgCTYCBCADQSBqJAALIAEoAkQgBEH0AGxqIgMgCjYCBCADIAw2AgAgAyAFKQIANwIIIANBEGogGCkCADcCACADICA4AiAgAyAjOAIcIAMgITgCGCADIAIpA7gDNwIkIANBLGogGigCADYCACADQThqIBsoAgA2AgAgAyACKQP4AjcCMCADIA4pAgA3AjwgA0HEAGogBykCADcCACADQcwAaiALKQIANwIAIANB1ABqIA8pAgA3AgAgA0HcAGogFSkCADcCACADQeQAaiATKQIANwIAIANB7ABqIBkpAgA3AgAgASAEQQFqNgJIIAJB+AJqIQdDAAAAACEhIAJBwAJqIgMqAiAhIyADKgIcISAgAyoCJCEiAkACQCABKgIkIiQgJJQgASoCKCInICeUkiABKgIsIiggKJSSIitDAAAAAFwEQCAgICCUICMgI5SSICIgIpSSIilDAAAAAFwNAQsgJCAglCAnICOUkiAoICKUkiEjDAELQwAAgL9DAACAPyAkICCUICcgI5SSICggIpSSIiMgK5EgKZGUlSIgICBDAACAP14bICBDAACAv10bELkPISELIAcgAykCADcCACAHQQhqIANBCGopAgA3AgAgB0EQaiADQRBqKQIANwIAIAdBGGogA0EYaikCADcCACAHQSBqIANBIGopAgA3AgAgB0EoaiADQShqKQIANwIAIAdBMGogA0EwaikCADcCACAHICEgASoCNF86ADkgByAjQwAAAABdQX9zICEgASoCMGBxOgA4IAJBuANqIgMgAkHIAGpBxAD8CgAAIAJBgARqIgRBCGogGCkCADcDACAFKQIAIUUgAiAmIAIqAqgBkjgCmAQgAiAsIAIqAqQBkjgClAQgAiAlIAIqAqABkjgCkAQgAiBFNwOABCACQbABaiELIAJBuAFqIQkgAkGgAWohD0EAIRUjAEGAAmsiBiQAAkAgASgCCCITQQJGDQAgBy0AOEEBRw0AIAsqAgQhIyAB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AkG4AWoQYzoArAEgHkUNBEEBIQMgAioCuAEiIyAjlCACKgK8ASIgICCUkiACKgLAASIhICGUkiIiQ/7m2y5eDQEMBAsLIANBAXENAiACKgKoASEiIAIqAqQBISMgAioCoAEhIAwBCyACKgK8ASEjIAIqArgBISAgAkIANwO4ASACKgLAASEhIAJBADYCwAEgAiAgIAIqAqABkiIgOAKgASACICMgAioCpAGSIiM4AqQBIAIgISACKgKoAZIiITgCqAEgAkG4A2oiA0EIaiAFQQhqKQIANwMAIAIgBSkCADcDuAMgAiAmICGSOALQAyACICwgI5I4AswDIAIgJSAgkjgCyAMgAiABIDAgAkHIAGogCCANIAMgAkGwAWpBAEEAEGM6AKwBDAELIAJBuANqIgNBCGogBUEIaikCADcDACACIAUpAgA3A7gDIAIgJiAikjgC0AMgAiAsICOSOALMAyACICUgIJI4AsgDIAIgASAwIAJByABqIAggDSADIAJBsAFqQQBBABBjOgCsAQsgHQRAIAJB4AFqIgxBCGogBUEIaikCADcDACAFKQIAIUUgAiAlIAIqAqABkjgC8AEgAiAsIAIqAqQBkjgC9AEgAiAmIAIqAqgBkjgC+AEgAiBFNwPgASACQbgDaiEEIAJByABqIQYgAkGwAWohBSACQaABaiEJIwBB4ABrIgMkAAJAAkAgASgCHCIHQQJGDQAgCSoCACIlIAEqAiQiI5QgCSoCBCIkIAEqAigiIJSSIAkqAggiJyABKgIsIiGUkkOsxSe3XUUNACABKgIgISIgASgCACEOIAEqAgQhJiAFKgIEISwgAyAhjDgCUCADICCMOAJMIAMgI4w4AkggA0GAAjsBXCADICYgLCAmlCAOGzgCWCADICIgIiAslCAHQQFxGzgCVCADQQhqIgEgBiAMIANByABqIAggDSADQdQAahByIAMtAERBBEYNACAJQQE6AAwgBCADKQIINwIAIARBCGogAUEIaiIMKQIANwIAIARBEGogAUEQaikCADcCACAEQRhqIAFBGGopAgA3AgAgBEEgaiABQSBqKQIANwIAIARBKGogAUEoaikCADcCACAEQTBqIAFBMGopAgA3AgAgBEE4aiABQThqKQIANwIAIAkgJyAhIAwqAgAiIZSTOAIIIAkgJCAgICGUkzgCBCAJICUgIyAh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QyACQSU7AEEgAkEANgJEIAJBAToAQCACQUBrEKINDA4LIAEoADghICADIAVBQGoiBDYCBCADIAFBQGs2AgAgBEEESQ0LIAEoADwhISADIAVBxABrIgQ2AgQgAyABQcQAajYCACAEQQRJDQwgASgAQCEiIAMgBUHIAGsiBDYCBCADIAFByABqNgIAIARBBEkEQCACQQA6AEMgAkElOwBBIAJBADYCRCACQQE6AEAgAkFAaxCiDQwOCyABKABEISMgAyAFQcwAazYCBCADIAFBzABqNgIAIAEoAEghJCACQUBrIQEjAEHQAWsiAyQAQRghBAJAIAJBCGoiBSgCBCIIRQRAQQIhBQwBCyAFIAhBAWs2AgQgBSgCACEFIANBBjYCICADIAU2AhwgA0EkaiADQRxqEIcDIAECfyADLQA8IghBA0YEQCADKAIkDAELAkACQAJAIAhBAkcEQCADQUBrIANBHGoQhwMgAy0AWCIKQQNGBEAgAygCQAwFCyAKQQJGDQEgA0HcAGogA0EcahCHAyADLQB0IgtBA0YEQCADKAJcDAULIAtBAkYNAiADQfgAaiADQRxqEIcDIAMtAJABIgdBA0YEQCADKAJ4DAULIAdBAkYNAyADQZQBaiADQRxqEIcDIAMtAKwBIg1BA0YEQCADKAKUAQwFCwJAAkACQCANQQJHBEAgA0GwAWogA0EcahCHAyADLQDIASIFQQJrDgICAQMLQQQgA0HPAWpBuMvBABC+CgwHCyADKAKwAQwGC0EFIANBzwFqQbjLwQAQvgoMBQsgASADKQKwATcCjAEgASADLwDJATsApQEgASADKQIoNwIEIAFBnAFqIANBsAFqIgRBEGopAgA3AgAgAUGUAWogBEEIaikCADcCACABQacBaiADQcsBai0AADoAACABQQxqIANBJGoiBEEMaikCADcCACABQRRqIARBFGooAgA2AgAgAygCJCEEIANBAmogA0E9aiIGQQJqLQAAOgAAIANBE2ogA0FAayIJQRBqKQIANwAAIANBC2ogCUEIaikCADcAACABQTdqIANB2QBqIglBAmotAAA6AAAgASAJLwAAOwA1IAFByABqIANB3ABqIglBEGopAgA3AgAgAUFAayAJQQhqKQIANwIAIAEgAykCXDcCOCADIAYvAAA7AQAgAyADKQJANwADIAFB0wBqIANB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ACARIBQpAgA3AgAgEUEIaiAUQQhqKAIANgIAIBAgEykCADcCACAQQQhqIBNBCGooAgA2AgAgA0HQBWogDBCSAiADKALQBQ0MIA4gBCICRw0ACwsgAUEANgL0AQJAIAEoAoQDQQFHDQAgA0HQBWogHxCSAiADKALQBUEBRw0AIANB8AJqIApBCGooAgA2AgAgAyAKKQIANwPoAgwNCyABQQA2AoQDDAELCyABQQA2ArwBIAUgAkECdEEEEIgPCyABQQI2AjAgBiADQfgCakHAAfwKAAALIAFBAjYC9AEgDCADQRRqQdQC/AoAAAJAIAEoAswEIgRBAkYNAAJAIARBAXFFDQAgA0H4AmogFxCSAiADKAL4AkUNACADQfACaiAIQQhqKAIANgIAIAMgCCkCADcD6AIMCgsCQCABKALsBiINRQ0AIAEoApwHIgIgASgCoAciDk4NACABKALwBiEPIAEoApgHIQkgASgChAchByABKAL4BiEFA0AgASACQQFqIgQ2ApwHIAEgDzYCpAUgASANNgKgBSABQQA2AvgEIAFCATcCzAQgASACNgLABSABIAk2AtAFIAEgBTYC1AUgASAHNgLYBSAbIB4pAgA3AgAgG0EIaiAeQQhqKAIANgIAIBogHSkCADcCACAaQQhqIB1BCGooAgA2AgAgGSAcKQIANwIAIBlBCGogHEEIaigCADYCACADQfgCaiAXEJICIAMoAvgCDQogDiAEIgJHDQALCyABQQA2AswEIAEoAtwFQQFHDQAgA0H4AmogIBCSAiADKAL4AkEBRw0AIANB8AJqIAhBCGooAgA2AgAgAyAIKQIANwPoAgwJCyABQQI2AswEIBcgA0EUakHUAvwKAAACQCABKAIwIgZBA0YNACAGQQJGDQAgCygCACIGQSFJDQAgASgCOCAGQQJ0QQQQiA8LIAFBAzYCMAsgASgCGEEBRg0BQQAMAgsgA0HwAmogCEEIaigCADYCACADIAgpAgA3A+gCDAYLIAEoAhwiBiABKAIgRwRAQQEhAiABIAZBAWo2AhwgASAGQQJ0aigCJCEBDAcLIAFBADYCGEEACyECDAULQQEhAiABIAVBAWo2AgQgFiAFQQJ0aigCACEBDAQLIAUgBEHQqcEAEIgLAAsgA0HwAmogCkEIaigCADYCACADIAopAgA3A+gCDAELIANB8AJq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IAEgBEEYaikDADcDmAEgASAEQRBqKQMANwOQASABIARBCGopAwA3A4gBIAEgBEEoaikDADcDqAEgASAEQTBqKQMANwOwASABIARBOGopAwA3A7gBIAEoAgwiAiABKAIERgRAIAFBBGpBiOzCABDICAsgASgCCCACQQZ0aiIDIAEpA4ABNwMAIANBIGogASkDoAE3AwAgA0EYaiABKQOYATcDACADQRBqIAEpA5ABNwMAIANBCGogASkDiAE3AwAgA0EoaiABKQOoATcDACADQTBqIAEpA7ABNwMAIANBOGogASkDuAE3AwAgASACQQFqNgIMIAEoAhgiAiABKAIQRgRAIA1BmOzCABC5CAsgASgCFCACQQJ0akEANgIAIAEgAkEBajYCGAJAIAEoAiQiAkUNACABKAIgIgMoAgBBAUcNACADQQA2AgQCQCACQQFGDQAgAygCCEUNACADQQE2AgwMBAtBqN3CAEEPQbjswgAQ1wsAC0Go3cIAQQ9BqOzCABDXCwALIAEgBCkDADcDgAEgASAEQRhqKQMANwOYASABIARBEGopAwA3A5ABIAEgBEEIaikDADcDiAEgASgCDCICIAEoAgRGBEAgAUEEakHY68IAEMgICyABKAIIIAJBBnRqIgMgASkDgAE3AwAgA0IANwMgIANBGGogASkDmAE3AwAgA0EQaiABKQOQATcDACADQQhqIAEpA4gBNwMAIANBKGpCADcDACADQTBqQgA3AwAgA0E4akIANwMAIAEgAkEBajYCDCABKAIYIgIgASgCEEYEQCANQejrwgAQuQgLIAEoAhQgAkECdGpBADYCACABIAJBAWo2AhgCQCABKAIkRQ0AIAEoAiAiAigCAEEBRw0AIAJBADYCBAwCC0Go3cIAQQ9B+OvCABDXCwALIAEoAgQgASgCDCICayAHSQRAIAFBBGogAiAHQcAAQcAAEOMGCyABKAIQIAEoAhgiAmsgB0kEQCABQRBqIAIgB0EEQQQQ4wYLQQAhBSABQQA2AhggASgCDCICIAEoAgRGBEAgAUEEakHI7MIAEMgIIAEoAhghBQsgASgCCCACQQZ0aiIDQgA3AwAgA0EgakIANwMAIANBGGpCADcDACADQRBqQgA3AwAgA0EIakIANwMAIANBKGpCADcDACADQTBqQgA3AwAgA0E4akIANwMAIAEgAkEB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JCAAQQA2AhwgACANNgIYIAAgBjYCFCAAIAw2AhAgACAHNgIMIABBADYCCCAAQoCAgIDAADcCACAAIAmtIAKtQiCGhDcCMAsgBSADQQFqNgIACyAEQSBqJAAPCyAEQQA2AhggBEEBNgIMIARBzIvCADYCCCAEQgQ3AhAgBEEIakHUi8IAELgNAAvCEQIRfwJ+IwBB4AFrIgIkAAJAIAEoAgQiA0UEQCAAQYCAgIB4NgIADAELIAEgA0EBazYCBAJAAn8gASgCACIFKAIEIgFBB00EQCACQoHKADcDkAEgAkGQAWoQog0hBEEBDAELIAUgAUEIazYCBCAFIAUoAgAiAUEIajYCACACQRBqIAEpAAAQpwggAigCFCEEIAIoAhALQQFxBEAgBCEJDAELAkACQAJAAkACQAJAAkACQAJAAkAgBEUEQEHAACEJDAELQYCAASAEIARBgIABTxsiCUEGdCIDQcAAELMOIgFFDQEgAkEANgIkIAIgATYCICACIAk2AhwgAkGkAWohDANAIAJBAjYCbCACIAU2AmggAkGQAWoiDSACQegAaiIBEMADIAIoAqABIQkgAikDmAEgAikDkAEiE0IChYRQDQogAkHwAGoiC0EYaiIQIAxBGGoiBygCADYCACALQRBqIgggDEEQaiIDKQIANwMAIAtBCGoiDiAMQQhqIgspAgA3AwAgAiAMKQIANwNwIBOnQQFxRQ0DIA0gARDAAyACKAKgASEBIAIpA5gBIAIpA5ABIhNCAoWEUARAIAEhCQwLCyACQcABaiIGQRhqIg0gBygCADYCACAGQRBqIgcgAykCADcDACAGQQhqIgMgCykCADcDACACIAwpAgA3A8ABIBOnQQFxRQRAQQFB6LDBAEGEq8EAEL4KIQkMCwsgAkEoaiIPQRhqIgYgDSgCADYCACAPQRBqIgsgBykDADcDACAPQQhqIg0gAykDADcDACACQcgAaiIDQQhqIhIgDikDADcDACADQRBqIgcgCCkDADcDACADQRhqIgMgECgCADYCACACIAIpA8ABNwMoIAIgAikDcDcDSCACKAIkIg4gAigCHEYEQCACQRxqQcirwQAQyAgLIAIoAiAgDkEGdGoiCCACKQNINwIEIAggCTYCACAIIAE2AiAgCCACKQMoNwIkIAhBDGogEikDADcCACAIQRRqIAcpAwA3AgAg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OgA0DAcLIAAgHCkCCDcCACAAQTBqIBxBCGoiAUEwaikCADcCACAAQShqIAFBKGopAgA3AgAgAEEgaiABQSBqKQIANwIAIABBGGogAUEYaikCADcCACAAQRBqIAFBEGopAgA3AgAgAEEIaiABQQhqKQIANwIADAYLIAEgA2ohAyACIAVqIQUgAkUNACAHICBPDQAgHSAhIB0gIUobIQEgHSEEA0AgASAERg0BIBxBQGsgBCAHEIQCIQIgBEEBaiEEIAJFDQALCyAAQQU6ADQMBAsgACAcKQIINwIAIABBMGogHEEIaiIBQTBqKQIANwIAIABBKGogAUEoaikCADcCACAAQSBqIAFBIGopAgA3AgAgAEEYaiABQRhqKQIANwIAIABBEGogAUEQaikCADcCACAAQQhqIAFBCGopAgA3AgAMAwtBvtLCAEEcQdzSwgAQ1gwAC0G+0sIAQRxB3NLCABDWDAALIABBBDoANAsgHEHgAGokAAuxEAITfwR9IwBBkAJrIgUkACABKAIIIRMgASgCBCEOIAVBADYCGCAFQQA2ApwBAkACQCATRQ0AAkACQAJAAkAgDigCPEH/////A3EEQCAFQRxqIQsgBUGcAWohFiABKAIsIRAgASgCMCEMIAEoAjghFyABKAI8IREgBUGEAmohDyAFQewBaiESQQQhDQJAA0AgDyAOIAdBBnRqIgEpAhA3AgAgD0EIaiIUIAFBGGooAgA2AgAgBUH4AWoiCEEIaiIGIAFBCGooAgA2AgAgBSABKQIANwP4ASAFQRBqIAggAiADQQEQygQgBSoCFCEYIAUoAhAhCSAUIAFBOGooAgA2AgAgDyABKQIwNwIAIAYgAUEoaigCADYCACAFIAEpAiA3A/gBIAVBCGogCCACIANBARDKBCABQSBqIQYCQCAFKgIMQ///f38gBSgCCEEBcRsiGiAYQ///f38gCUEBcRsiGF1FBEAgGiEZIBghGiAGIQkgASEGDAELIBghGSABIQkLAkACQAJAAkACQCADIBpeRQRAIAMgGV5FDQQgGUP//39/Ww0EIAkoAhxB/////wNxQQFHDQEMAgsCQCAaQ///f39bBEAMAQsgBigCDCEBIAYoAhxB/////wNxQQFHBEAgAyAZXkUEQCABIQcMBwsgGUP//39/WwRAIAEhBwwHC0EBIQYgCSgCHEH/////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cUVyIRULIBAgD5MgGpQgEV0NAiASQQhqIhQQpQwgFCETAkAgCUUNACAJLQAsRQRAIBJBgANqIhMgCUHMAGoQ+woMAQsgEkGYA2ogCUHIAGooAgA2AgAgEkGQA2ogCUFAaykCADcDACASQYgDaiAJQThqKQIANwMAIBJBpANqIAlBoAJqKAIANgIAIBJBsANqIAlBkAFqKAIANgIAIBJBvANqIAlBnAFqKAIANgIAIBIgCSkCMDcDgAMgEiAJKQKYAjcCnAMgEiAJKQKIATcDqAMgEiAJKQKUATcCtAMgEkGAA2ohEwsgEkHIAGoiCUE4aiATQThqKQIANwMAIAlBMGogE0EwaikCADcDACAJQShqIBNBKGopAgA3AwAgCUEgaiATQSBqKQIANwMAIAlBGGogE0EYaikCADcDACAJQRBqIBNBEGopAgA3AwAgCUEIaiATQQhqKQIANwMAIBIgEykCADcDSAJAIApFDQAgCi0ALEUEQCASQcADaiIUIApBzABqEPsKDAELIBJB2ANqIApByABqKAIANgIAIBJB0ANqIApBQGspAgA3AwAgEkHIA2ogCkE4aikCADcDACASQeQDaiAKQaACaigCADYCACASQfADaiAKQZABaigCADYCACASQfwDaiAKQZwBaigCADYCACASIAopAjA3A8ADIBIgCikCmAI3AtwDIBIgCikCiAE3A+gDIBIgCikClAE3AvQDIBJBwANqIRQLIBJBiAFqIglBOGogFEE4aikCADcDACAJQTBqIBRBMGopAgA3AwAgCUEoaiAUQShqKQIANwMAIAlBIGogFEEgaikCADcDACAJQRhqIBRBGGopAgA3AwAgCUEQaiAUQRBqKQIANwMAIAlBCGogFEEIaikCADcDACASIBQpAgA3A4gBIAtBAXEEQCASQcgAaiAMEKcKCyANQQFxBEAgEkGIAWogDhCnCgsgEkGIAmoiCUEIaiAHQRxB9AAgBygCEEEBcSING2oiCkEIaikCADcDACAJQRBqIApBEGopAgA3AwAgCUEYaiAKQRhqKAIANgIAIBIgCikCADcDiAIgEkHIAWoiFCASQcgAaiAJEMwCIBJByAJqIgpBCGogCEEcQfQAIAgoAhBBAXEiExtqIgtBCGopAgA3AwAgCkEQaiALQRBqKQIANwMAIApBGGogC0EYaigCADYCACAS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IANCgICAgMAANwLQASADQgA3AtgBIANCBDcC4AEgA0IANwLoASADQgQ3AvABIANCgICAgMAANwL4ASADQgA3AoACIANCBDcCiAIgAyADKQK4BTcCqAEgA0GoA2pCADcDACADQaADakIANwMAIANByANqQgA3AwAgA0EBOgCcAiAGQQtqQgA3AAAgBEELakIANwAAIAVBC2pCADcAACADQY0GaiIIQQtqQgA3AAAgA0H6BWoiB0ELakIANwAAIANCADcDmAMgA0IANwPAAyADQgA3ALsFIANCADcAkwUgA0IANwDnBSADQgA3AJAGIANCADcA/QUgA0GEBWpBADYCACADQgA3AvwEIANCADcDuAIgA0IANwOwAiADQf////sHNgKAAyADQoCAgIDw//+/fzcD+AIgA0L////7////v/8ANwPwAiADQv////sHNwPoAiADQoCAgIDw//+/fzcD4AIgA0L////7////v/8ANwPYAiADQv////sHNwPQAiADQoCAgIDw//+/fzcDyAIgA0L////7////v/8ANwPAAiADQoCAgICAgIDAPzcDqAIgA0IANwOgAiADQaACaiIJQewAakIANwIAIANCADcChAMgA0EAOgDYAyADQv////sHNwPQAyADQgA3A7gDIANCgICA/AM3A7ADIANBgICA/AM2ApQDIAlByAFqIAZBD2ooAAA2AAAgA0HhA2ogCykAADcAACADIAMpALgFNwDZAyADQQA6APQDIANC////+wc3AuwDIANBhARqIARBD2ooAAA2AAAgA0H9A2ogCikAADcAACADIAMpAJAFNwD1AyADQQA6AJAEIANC////+wc3A4gEIAlBgAJqIAVBD2ooAAA2AAAgA0GZBGogBUEIaikAADcAACADIAMpAOQFNwCRBCADQQA6AKwEIANC////+wc3AqQEIANBvARqIAhBD2ooAAA2AAAgA0G1BGogCEEIaikAADcAACADIAMpAI0GNwCtBCADQQA6AMgEIANC////+wc3A8AEIANB2ARqIAdBD2ooAAA2AAAgA0HRBGogB0EIaikAADcAACADIAMpAPoFNwDJBCADQQA6AIgFIANBADYC+AQgA0IANwPwBCADQYACOwHsBCADQQA2AugEIANBADoA5AQgA0L////7BzcC3AQgAygCCCEGIANBDGogAygCGCII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NgIgIAAgLzYCHCAAIBE4AhggACAgOAIUIAAgITgCECAAIBY4AgwgACAMOAIIIAAgCTgCBCAAIAo4AgAgACAiKQNgNwIkIABBLGogLSkDADcCACAAQTRqICMpAwA3AgAgAEE8aiApKAIANgIAIAYgJEEBaiIkNgKEAQsgAkEMaiECICdBBGohJyAsIANBAWoiA0cNAAsLAkAgBwRAIAYgFzgCkAEgBiAYOAKMASAGIBk4AogBIAYgASkCADcClAEgBkGcAWogAUEIaigCADYCAAwBCyAGIBc4ApwBIAYgGDgCmAEgBiAZOAKUASAGQYgBaiIAIAEpAgA3AgAgAEEIaiABQQhqKAIANgIACwJAICRFDQAgJUUNACAGKAKAASIHICRBBnRqIScgJiAlQQZ0aiEoICZBJGohAyAmQUBrIQEgJUEBcSEpICVB////H3FBAUYhKgNAIAdBJGohAiAHKAIcIQYgJiEAAkAgKUUNACABIQAgBiAmKAIcRw0AIAcoAiAgJigCIEcNACACIAMpAgA3AgAgAkEYaiADQRhqKAIANgIAIAJBEGogA0EQaikCADcCACACQQhqIANBCGopAgA3AgALICpFBEAgAkEYaiEjIAJBEGohJCACQQhqISUDQAJAIAYgAEEcaigCAEcNACAHKAIgIABBIGooAgBHDQAgIyAAQTxqKAIANgIAICQgAEE0aikCADcCACAlIABBLGopAgA3AgAgAiAAQSRqKQIANwIACwJAIAYgAEHcAGooAgBHDQAgBygCICAAQeAAaigCAEcNACAjIABB/ABqKAIANgIAICQgAEH0AGopAgA3AgAgJSAAQewAaikCADcCACACIABB5ABqKQIANwIACyAoIABBgAFqIgBHDQALCyAnIAdBQGsiB0cNAAsLICsEQCAmICtBBnRBBBCIDwsgIkGAAWokAAvYDQIHfwN9IwBB4AFrIgskACALQTBqIAMgBCgCtAERAAAgCygCNCENIAsoAjAhDCALQShqIAYgBygCtAERAAACQAJAAkACQAJAIAwEQCALKAIoIhANAQsgC0EgaiADIAQoArgBEQAAIAsoAiAiDEUNASALQaABaiAMIAsoAiQgASACIAUgBiAHIAggCSAKEGEgCy0A2AEiAUEERwRAIAtB6ABqIAtB1AFqKAIANgIAIAtB4ABqIAtBzAFqKQIANwMAIAtB2ABqIAtBxAFqKQIANwMAIAtB0ABqIAtBvAFqKQIANwMAIAtByABqIAtBtAFqKQIANwMAIAtBQGsgC0GsAWopAgA3AwAgC0GSAWogC0HbAWotAAA6AAAgCyALKQKkATcDOCALIAsvANkBOwGQAQsgACALKQM4NwIAIAAgAToANCAAIAsvAZABOwA1IABBMGogC0E4aiIBQTBqKAIANgIAIABBKGogAUEoaikDADcCACAAQSBqIAFBIGopAwA3AgAgAEEYaiABQRhqKQMANwIAIABBEGogAUEQaikDADcCACAAQQhqIAFBCGopAwA3AgAgAEE3aiALQZIBai0AADoAAAwECyALKAIsIQ4gCgR/QQAFIAcoAqwBIQogBCgCrAEhDyAHKAKoASERIAMgBCgCqAERCwAgBiAREQsAkiEUIAMgDxELACESIAYgChELACITIBMgEiASIBNdGyASIBJcGyESQQELIQogCyASOAJ4IAsgFDgCdCALIAo2AnAgDkEYaigCACEKIA5BEGooAgAhDiANQRhqKAIAIQ8gDUEQaigCACENIAtBgAFqIAMgBCgChAERAAAgC0GQAWogBiAHKAKEAREAACALKgKMASALKgKcAWANASALQaABaiIKIAEgBSAQIA4gBiAHIAIgDCAPIAMgBCAIIAkgC0HwAGoQRyALLQDUASICQQRHBEAgC0E4aiIBQRhqIApBDGooAgA2AgAgAUEMaiAKQRhqKAIANgIAIAFBMGogCkEkaigCADYCACABQSRqIApBMGooAgA2AgAgCyALKQKkATcCSCALIAspArABNwI8IAsgCykCvAE3AmAgCyALKQLIATcCVCALIAsqAqABOAI4CyALIAI6AGwMAgsgC0EYaiAGIAcoArgBEQAAIAsoAhgiDARAIAtBoAFqIAwgCygCHCABIAUgAiADIAQgCCAJIAoQYSALLQDYASIBQQRHBEAgC0GYAWogC0GwAWooAgA2AgAgC0FAayALQbwBaigCADYCACALQfgAaiALQcgBaigCADYCACALQYgBaiALQdQBaigCADYCACALIAspAqgBNwOQASALIAspArQBNwM4IAsgCykCwAE3A3AgCyALKQLMATcDgAEgCyoCpAEhCQsgACAJOAIAIAAgCykDODcCBCAAIAspA5ABNwIQIAAgCykDgAE3Ahwg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nAEgAyAGQZwBahDGAxogBkHgAGogAxBCIAMoArwBQQNGDQMgDUEBayINRQ0FIA8hDiAGKgJgIhAgEJQgBioCZCIRIBGUkiAGKgJoIhIgEpSSIg9DAADIK14NAAsLIAAgBikDMDcCCCAAQQE2AgAgACAYIBSVOAIEIABBEGogCSgCADYCAAwECyAAQQA2AgAMAwsgDkMAAKC1Xw0BCyAAIAYpAzA3AgggACAYIBSVOAIEIABBEGogBkE4aigCADYCAEEBIQQLIAAgBDYCAAsgBkHAAWokAAv+CwMJfwx9An4jAEEQayIDJAACQCAAKAIgIgQgAU0NACAAKAIcIgcgAUEDdGoiASgCACECIAFBADYCACACRQ0AIAEoAgQhBSAAIAAoAiRBAWsiATYCJCABRQRAIABBADYCFCAAQQA2AggMAQsgBUEBcyEIAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAVBAk8EQCAAKAIUIgYgBUEBdiIBTQ0BIAAoAggiBSABTQ0CIAAoAhAiCiABQQJ0aigCACECIAMgACgCBCIJIAFBBnRqIgA2AgggAyAAQSBqNgIMIANBCGogCEEBcUECdGooAgAiACgCDCEBIAAoAhxB/////wNxQQFHDQQgASAETw0DIAcgAUEDdGoiASgCAEUNAyABIAI2AgQMCgsgACgCCCIGRQ0EIAMgACgCBCIBNgIIIAMgAUEgaiICNgIMIANBCGogCEECdGoiCSgCACgCHEH/////A3FBAUYEQCAFQQFxRQRAIAEgAikDADcDACABQQhqIAJBCGopAwA3AwAgAUEQaiACQRBqKQMANwMAIAFBGGogAkEYaikDADcDACABKAIsIgAgBE8NByAHIABBA3RqIgAoAgBBAUcNByAAQQA2AgQLIAJCADcDACACQRhqQgA3AwAgAkEQakIANwMAIAJBCGpCADcDAAwNCyADIAI2AgwgAyABNgIIIAkoAgAoAgwiAiAGTw0GIAFBGGogASACQQZ0aiICQRhqKQMANwMAIAFBCGogAkEIaikDADcDACABIAIpAwA3AwAgAUEQaiACQRBqKQMANwMAIAFBIGogAkEgaikDADcDACABQShqIAJBKGopAwA3AwAgAUEwaiACQTBqKQMANwMAIAFBOGogAkE4aikDADcDACABKAIMIQIgASgCHEH/////A3FBAUYEQCACIARPDQggByACQQN0aiICKAIARQ0IIAJBADYCBAwMCyAAKAIUIgYgAksNCiACIAZByO3CABCICwALIAEgBkH47cIAEIgLAAsgASAFQYjuwgAQiAsAC0Go3cIAQQ9BmO7CABDXCwALIAEgBkkNBCABIAZBqO7CABCICwALQQBBAEGI7cIAEIgLAAtBqN3CAEEPQZjtwgAQ1wsACyACIAZBqO3CABCICwALQajdwgBBD0G47cIAENcLAAsgCiABQQJ0aiACNgIACwJAAkAgAkEBdiIBIAVJBEAgAyAJIAFBBnRqIgQ2AgggAyAEQSBqNgIMIABBEGopAwAhFyADQQhqIAJBAXFBAnRqKAIAIgQgACkDADcDACAAQRhqKQMAIRggBEEIaiAAQQhqKQMANwMAIARBEGogFzcDACAEQRhqIBg3AwAgAkECSQ0FA0AgASAGTw0DIAogAUECdGooAgAiBEEBdiIAIAVPDQIgCSABQQZ0aiICKAI8IQcgAigCHCEIIAIqAjghCyACKgIYIQwgAioCNCENIAIqAhQhDiACKgIwIQ8gAioCECEQIAIqAighESACKgIIIRIgAioCJCETIAIqAgQhFCACKgIgIRUgAioCACEWIAMgCSAAQQZ0aiICNgIIIAMgAkEgajYCDCADQQhqIARBAXFBAnRqKAIAIgIgB0H/////A3EgCEH/////A3FqIAcgCHJBgICAgHxxcjYCHCACIAwgCyALIAxfGzgCGCACIA4gDSANIA5fGzgCFCACIBAgDyAPIBBfGzgCECACIAE2AgwgAiASIBEgESASYBs4AgggAiAUIBMgEyAUYBs4AgQgAiAWIBUgFSAWYBs4AgAgACEBIARBAk8NAAsMBQsgASAFQbjuwgAQiAsACyAAIAVB2O7CABCICwALIAEgBkHI7sIAEIgLAAsgACgCECACQQJ0akEANgIACyABKAIsIQIgASgCPEH/////A3FBAUYEQAJAIAIgBE8NACAHIAJBA3RqIgAoAgBFDQAgAEEBNgIEDAILQajdwgBBD0HY7cIAENcLAAsgAiAAKAIUIgFPBEAgAiABQejtwgAQiAsACyAAKAIQIAJBAnRqQQE2AgALIANBEGokAAuZCwIbfQJ/IwBBMGsiICQAAkACQCADKgIMIgcgB5QgAyoCECIGIAaUkiADKgIUIgog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ATYCaCACIAMgASgCCEEBa0F4cWpBCGo2AmQgAkH4AGohASAAKAIsKgIAIRMgACgCMC0AACELQQAhA0EAIQYjAEHQAGsiACQAIAJBNGoiDCgCOCEEIABBGGoiCCIFQRBqIg0gB0EQaiIOKQIANwMAIAVBCGoiDyAJKQIANwMAIAAgEzgCMCAAIAcpAgA3AxgCf0EAIAQoAghFDQAaIABBzABqIhEgBCgCBCIDQRhqKAIANgIAIAAgAykCEDcCRCAAQThqIgpBCGogA0EIaigCADYCACAAIAMpAgA3AzggAEEQaiAKIAggE0EBEMoEIANBACAAKAIQQQFGGyEGQQAgAygCPEH/////A3FFDQAaIBEgA0E4aigCADYCACAAQUBrIANBKGooAgA2AgAgACADKQIwNwJEIAAgAykCIDcDOCAAQQhqIAogCCATQQEQygQgA0EgaiEDIAAoAghBAUYLIQUgASAAKQMYNwKQASABQagBaiAAQTBqKAIANgIAIAFBoAFqIA0pAwA3AgAgAUGYAWogDykDADcCACABIAw2AqwBIAEgBjYCjAEgASAENgKIASABIAU2AoQBIAEgAzYCBCABQQA2AgAgASALOgDMASABIBM4AsgBIAEgBykCADcCsAEgAUG4AWogCSkCADcCACABQcABaiAOKQIANwIAIABB0ABqJAAgAkHIAmoiACABQdAB/AoAACACQbQEaiEHIABBsAFqIQsgAkG8BGohCCACQdgDaiEKIABBBGohASAAQYQBaiEJAkACQAJAAkADQCACKALUAyIARQRAIAEhBCAJIQMgAigCzAMiBSIAQSFPBEAgAigC0AIhBCABIQMgAigCzAIhAAsgAEUNAiADIABBAWsiADYCACAEIABBAnRqKAIAIQALIAJBADYC1AMgACgCHEH/////A3FBAUcEQCAAKAIMIgAgAigC0AMiAygCCCIETw0EIAggAygCBCAAQQZ0aiIAKQIQNwIAIAhBCGoiAyAAQRhqKAIANgIAIAJBsARqIgRBCGoiBSAAQQhqKAIANgIAIAIgACkCADcDsAQgAkEQaiAEIAogAioC8ANBARDKBCAAQSBqIQYgAigCEEEBRgRAIAIgADYC1AMLIAggACkCMDcCACADIABBOGooAgA2AgAgBSAGQQhqKAIANgIAIAIgBikCADcDsAQgAkEIaiAC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BEAgDCALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAoqAgQhLiAQKAIIIAtrQQNNBEAgEEEIaiALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAoqAgghLiAQKAIIIAtrQQNNBEAgEEEIaiALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAoqAgwhLiAQKAIIIAtrQQNNBEAgEEEIaiALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAoqAhAhLiAQKAIIIAtrQQNNBEAgEEEIaiALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAoqAhQhLiAQKAIIIAtrQQNNBEAgEEEIaiALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAoqAhghLiAQKAIIIAtrQQNNBEAgEEEIaiALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAoqAhwhLiAQKAIIIAtrQQNNBEAgEEEIaiALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAoqAiAhLiAQKAIIIAtrQQNNBEAgEEEIaiALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAoqAiQhLiAQKAIIIAtrQQNNBEAgEEEIaiALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAoqAighLiAQKAIIIAtrQQNNBEAgEEEIaiALQQRBAUEBEOIGIBAoAhAhCwsgECgCDCALaiAuOAAAIBAgC0EEaiILNgIQIAo1AiwhKyAQKAIIIAtrQQdNBEAgEEEIaiALQQhBAUEBEOIGIBAoAhAhCwsgECgCDCALaiArNwAAIBAgC0EIaiILNgIQIAo1AjAhKyAQKAIIIAtrQQdNBEAgEEEIaiALQQhBAUEBEOIGIBAoAhAhCwsgECgCDCALaiArNwAAIBAgC0EIaiILNgIQIAo1AjQhKyAQKAIIIAtrQQdNBEAgEEEI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IApBADYChAELIAxB4ABqJAALrQwDDn8DfQF+IwBBsANrIgIkACAAKAIAKAIAIQMgACgCBCIGKAIAQQFGBEAgBigCBCIGQf//A3EhBEEBIQkgBkEQdiEFCyADQSBJIQdBACEGIAAoAggiCigCAEEBRgRAIAopAwgiE0IgiKchCCATpyELQQEhBgsgA0EAIAcbIQpBASEDAkAgACgCDCIHKAIAQQFHBEBBACEDDAELIAcpAwgiE0IgiKchDCATpyENCyAAKAIYKAIAIQ4gACgCHCgCACEPIAAoAhQoAgAhByACIAAoAhAoAgA2AkAgAkGI0cEANgI0IAIgATYCMCACIAo2AiwgAiAMNgIoIAIgDTYCJCACIAM2AiAgAiAINgIcIAIgCzYCGCACIAY2AhQgAiAENgIQIAIgBTYCDCACIAk2AgggBygCPCEEIAcoAkAhASACIA82AkggAiAONgJEIAIgATYCPCACIAQgASgCCEEBa0F4cWpBCGo2AjggACgCICEHIAJB+AFqIgFBCGogACgCJCgCACIAQQhqKAIANgIAIAIgACkCADcD+AEgAkHMAGohA0EAIQZBACEAQQAhBSABKgIIIRAgASoCBCERIAEqAgAhEgJAIAJBCGoiCSgCOCIIKAIIRQ0AAn9BACASIAgoAgQiBCoCAF0NABpBACASIAQqAhBeDQAaQQAgESAEKgIEXQ0AGkEAIBEgBCoCFF4NABpBAEEAIAQgECAEKgIYXhsgECAEKgIIXRsLIQAgBCgCPEH/////A3FFDQAgBCoCICASXg0AIAQqAjAgEl0NACAEKgIkIBFeDQAgBCoCNCARXQ0AIARBIGohBSAQIAQqAjheRSAQIAQqAihdQX9zcSEGCyADIAk2ApwBIAMgEDgCmAEgAyAROAKUASADIBI4ApABIAMgADYCjAEgAyAINgKIASADIAY2AoQBIAMgBTYCBCADQQA2AgAgAyABKQIANwKgASADQagBaiABQQhqKAIANgIAIAEgA0GsAfwKAAAgAkGYA2ohCSACQfwBaiEBIAJB/AJqIQYCQAJAAkADQCACKAKEAyIARQRAIAEhAyAGIQQgAigC/AIiBSIAQSFPBEAgAigCgAIhAyABIQQgAigC/AEhAAsgAEUNAyAEIABBAWsiADYCACADIABBAnRqKAIAIQALIAJBADYChAMgACgC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AEEANgIIIABCgYCAgBA3AgAgACAGKQM4NwIMIABBFGogBkFAaykDADcCACAAQRxqIAZByABqKQMANwIAIABBJGogBkHQAGopAwA3AgAgAEEsaiAGQdgAaikDADcCACAAQTRqIAZB4ABqKQMANwIAIABBPGogBkHoAGooAgA2AgAgAEEIaiECCyAGQYACaiQAIAIPCxCbDwsACxCcDwALQQRBwABBkMTEACgCACIAQcwIIAAbEQAAAAvNCQIKfwF+IwAiAiEJIAJBQGpBQHEiBCQAAkAgACgCCCIDRQRAIABBADYCFEEAIQMMAQsgACgCBCIFKAIcIQcCQAJAAkACQAJAIAUoAjxB/////wNxIAdB/////wNxakECTQRAIABBADYCFCABQQA2AgggBCAFQThqKQMANwM4IAQgBUEwaikDADcDMCAEIAVBKGopAwA3AyggBCAFQSBqKQMANwMgIAQgBUEYaikDADcDGCAEIAVBEGopAwA3AxAgBCAFQQhqKQMANwMIIAQgBSkDADcDACABKAIARQRAIAFB+OnCABDICAsgAEEMaiEGIAEoAgQiAiAEKQMANwMAIAJBCGogBCkDCDcDACACQRBqIAQpAxA3AwAgAkEYaiAEKQMYNwMAIAJBIGogBCkDIDcDACACQShqIAQpAyg3AwAgAkEwaiAEKQMwNwMAIAJBOGogBCkDODcDACACIAIoAhwiCEH/////B0H/////AyAIQf////97SxtxNgIcIAIoAjwiBEH/////A3EiCA0BDAULIAMgASgCCCIGSwRAIAEoAgAgBiICayADIAJrIghJBEAgASACIAhBwABBwAAQ4wYgASgCCCECCyABKAIEIgogAkEGdGohByAIQQJJBH8gAgUgAyAGQX9zakEGdCILBEAgB0EAIAv8CwALIAogAiADaiAGa0EGdGpBQGohByACIAhqQQFrCyEIIAdCADcDACAHQThqQgA3AwAgB0EwakIANwMAIAdBKGpCADcDACAHQSBqQgA3AwAgB0EYakIANwMAIAdBEGpCADcDACAHQQhqQgA3AwAgBSgCHCEHIAhBAWohAwsgAEEYaiEGIAEgAzYCCCAEQQE2AgAgBSgCLCEDAkAgB0H/////A3FBAUYEQCABKAIEIgJBGGogBUEYaikDADcDACACIAUpAwA3AwAgAkEIaiAFQQhq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OGogBEE4aikCADcDACADQUBrIARBQGspAgA3AwAgA0HIAGogBEHIAGopAgA3AwAgAyADKQJUNwMAIAMgAykCfDcDKCADQQI2AlwgBEEMaiINIANB0AD8CgAAIANBAjYC2AEgA0ECNgKwASAAKAIcIgdBNWohCiAHQQRqIQUgA0GIAWohDiADQagCaiIBQTVqIQsgAUEEaiEGIAAoAhghDCAAKAIUIQ8gACgCECEQIAAoAgwhESAAKAIIIRIgACgCBCETIAMoAogBIQQgA0GAAmoiAEEgaiEUIABBGGohFSAAQRBqIRZBACECA0AgDSACQShsaiIAKAIAIgFBAkYNASACQQFqIQgCQCABQQFxBEAgCCECDAELQQIhAiAIQQJGDQIgBEECRg0CIA4hACAEIgFBAXFFDQILIAFBAXFFDQEgFCAAQSRqKAIANgIAIBUgAEEcaikCADcDACAWIABBFGopAgA3AwAgA0GAAmoiAUEIaiAAQQxqKQIANwMAIAMgACkCBDcDgAIgA0HgAmoiAEEIaiAMQQhqKAIANgIAIAMgDCkCADcD4AIgA0GoAmogEyASIBEgAUGw9sIAIBAgDyAAEEMgAy0A3AIiAUEFRgRAQQEhCQwCCyADQfACaiIAQQhqIgggBkEIaikCADcDACAAQRBqIhcgBkEQaikCADcDACAAQRhqIhggBkEYaikCADcDACAAQSBqIhkgBkEgaikCADcDACAAQShqIgAgBkEoaikCADcDACADQe4CaiIaIAtBAmotAAA6AAAgAyAGKQIANwPwAiADIAsvAAA7AewCAkAgAUEERg0AQ///f38hGyAHLQA0QQRHBH0gByoCAAVD//9/fwsgAyoCqAIiG15FDQAgByAbOAIAIAUgAykD8AI3AgAgByABOgA0IAogAy8B7AI7AAAgBUEIaiAIKQMANwIAIAVBEGogFykDADcCACAFQRhqIBgpAwA3AgAgBUEgaiAZKQMANwIAIAVBKGogACkDADcCACAKQQJqIBotAAA6AAALIAJBAkcNAAsLIANBoANqJAAgCQvPBwISfwN9AkAgASgCAEEBRgRAIAEoAgghDCABKAIcIQUgASgCDCEGIAEoAiQhAiABKAIoIQQgASgCBCEHAkACQCABAn8CQAJAIAECfwJAAkACQCABKAJUIg0EQCABQfgAaiEOIAFBEGoh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GEECRg0EIAUoApwBIgBBIUkNBCAFKAIgIABBAnRBBBCIDwwECyACQcEAQejbwwAQiAsACyAFQYwHaiAFQRhqEHkgBSgCjAcNAAsLQQAhBiAFKAIYQQJGDQAgBSgCnAEiAEEhSQ0AIAUoAiAgAEECdEEEEIgPCyAFQeAHaiQAIAYLqAcCCn8EfSMAQSBrIgskACABKAKUAiEMAn0gACoCEEPbD8lAlCIVIAAqAgAiFiAVlCAAKgIUIhcgF5KSlSEYQwAAAAAgFiAYlCIWQwAAAABbDQAaQwAAgD8gFpVDAACAv5IiFSAVlCAXIBcgFUMAAIA/kkMAAIBAlJSUlQshFQJAAkACQAJAIAcoAgwiDSAMQQF0Ig4gBigCACIAak8EQCADKgIEIRcgAyoCACEWIAIoApQDIAAgBWpqIRIgBygCBCEPIA4EQCAPIABBAnRqIgAgDkECdGohAyAOIQIgACEHA0AgDUECdCITIAdqIhQgACAAIANGIhAbIhFBADYCACARQQRqIhEgACATaiADIBAbIgNGIQAgFCAHIBAbIgcgE2oiECARIAAbIhRBADYCACAQIAcgABshByARIBNqIAMgABshAyAUIAJBAkdBAnRqIQAgAkECayICDQALCyANQQFGIgAgEkEAR3ENASASQQAgDUEBRyICGyIDIA1PDQEgDyADQQJ0akGAgID8AzYCACAAIAwgEmoiA0EAR3ENAiADQQAgAhsiACANTw0CIA8gAEECdGoiB0GAgID8AzYCACAGKAIAIgMgDGoiACAMaiANSw0EIAFB3ABqIA8gAEECdGogDBDZASAKKAIAIgIgCUkNAyACIAlBuJzCABCICwALDAMLIAtBADYCGCALQQE2AgwgC0HM/sEANgIIIAtCBDcCECALQQhqQZicwgAQuA0ACyALQQA2AhggC0EBNgIMIAtBzP7BADYCCCALQgQ3AhAgC0EIakGonMIAELgNAAsgCCACQcgAbGoiAEEAOwFEIABBADYCQCAAIBU4AjwgAEEANgI4IABD//9/f0MAAAAAIAQgF14bOAIsIABD//9//0MAAACAIAQgFl0bOAIoIABC/////w83AiAgACADNgIcIAAgDDYCGCAAQgA3AhAgACABKAKYAjYCDCAAQX82AgggACAFNgIEIABBATYCACAAQwAAAABDAACAPyAHKgIAIhWV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Qc0AaiIJQQtqQgA3AAAgBkE6aiIHQQtqQgA3AAAgBkEnaiINQQtqQgA3AAAgBkEUaiIOQQtqQgA3AAAgBkEBaiIPQQtqQgA3AAAgBEHcAGpCADcCACAGQgA3AFAgBkIANwA9IAZCADcAKiAGQgA3ABcgBkIANwAEIARCADcDCCAEQgA3AwAgBEEAOgCoASAEQv////sHNwOgASAEQgA3A4gBIARCgICA/AM3A4ABIARBgICA/AM2AmQgBEH////7BzYCUCAEQoCAgIDw//+/fzcDSCAEQv////v///+//wA3A0AgBEL////7BzcDOCAEQoCAgIDw//+/fzcDMCAEQv////v///+//wA3AyggBEL////7BzcDICAEQoCAgIDw//+/fzcDGCAEQv////v///+//wA3AxAgBCAGKQBNNwCpASAEQbEBaiAJQQhqKQAANwAAIARBuAFqIAlBD2ooAAA2AAAgBEEAOgDEASAEQv////sHNwK8ASAEQQA6AOABIARC////+wc3A9gBIARBADoA/AEgBEL////7BzcC9AEgBEHUAWogB0EPaigAADYAACAEQc0BaiAHQQhqKQAANwAAIAQgBikAOjcAxQEgBEHwAWogDUEPaigAADYAACAEQekBaiANQQhqKQAANwAAIAQgBikAJzcA4QEgBEGMAmogDkEPaigAADYAACAEQYUCaiAOQQhqKQAANwAAIAQgBikAFDcA/QEgBEEAOgCYAiAEQv////sHNwOQAiAEQagCaiAPQQ9qKAAANgAAIARBoQJqIA9BCGopAAA3AAAgBCAGKQABNwCZAiAEQYACOwG8AiAEQT82ArgCIARBADoAtAIgBEL////7BzcCrAIgBUHAAWogEigCADYCACAFQbgBaiARKQMANwMAIAVBsAFqIBApAwA3AgAgBUHMAWogEykDADcCACAFQdQBaiAUKQMANwIAIAVB3AFqIBUoAgA2AgAgBSAFKQMwNwOoASAFIAUpA5ADNwLEASADIAMoAgBBAWs2AgAgCCAIKAIAQQFrIgM2AgAgA0UEQCAFQSxqEKsNCyACIAIoAgBBAWs2AgAgDCAMKAIAQQFrIgI2AgAgAkUEQCAFQSBqEKgNCyABIAEoAgBBAWs2AgAgCyALKAIAQQFrIgE2AgAgAUUEQCAFQRRqEKsNCyAAIAAoAgBBAWs2AgAg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AkACQAJAAkACQCAOIA9dRQRAIA0gD11FDQQgDUP//39/Ww0EICMoAhxB/////wNxQQFHDQEMAgsgDkP//39/XARAIAYoAgwhCCAGKAIcQf////8DcUEBRwRAIA0gD11FBEAgCCEFDAcLIA1D//9/f1sEQCAIIQUMBwtBASEGICMoAhxB/////wNxQQFGBEAgCCEFDAULAn8gICgCjAEiJEEhSQRAICQhBSAKISpBICEkICwMAQsgICgCDCEFICAoAhAhKiAKCyEGICMoAgwhIyAFICRGBEAgIEEIahCsBCAgKAIQISogCiEGICAoAgwhBQsgBUECdCAqaiAjNgIAIAYgBigCAEEBajYCACAIIQUMBgsCQAJ/AkAgCCAzKAIQTw0AIDMoAgwgCEGwAWxqIiQoAgBBAUcNACApIDgoAgAgNygCACAIICQoAgQgJEEQahCsBUUNACAgQZABaiAkKAJQICQoAlQiCCgCCEEBa0F4cWpBCGogJEGEAWogKCA1IAhBPGooAgARBwAgIC0AnAFBAkYNACATICAqApABIhmTIg4gDpQgEiAgKgKUASIakyIOIA6UkiARICAqApgBIhuTIg4gDpSSkSEUICAoApwBDAELICVBgH5xQQJyCyIlQf8BcUECRg0AIA8gFF5FDQAgJUEIdiE0IAYoAgwhKyAZIRUgGiEWIBshFyAUIQ8gJSEMCwsgDSAPXUUNAyANQ///f39bDQMgIygCHEH/////A3FBAUYNAQsgIygCDCEFDAMLQQAhBgsCfwJAICMoAgwiJCAzKAIQTw0AIDMoAgwgJEGwAWxqIggoAgBBAUcNACApIDgoAgAgNygCACAkIAgoAgQgCEEQahCsBUUNACAgQZABaiAIKAJQIAgoAlQiJCgCCEEBa0F4cWpBCGogCEGEAWogKCA1ICRBPGooAgARBwAgIC0AnAFBAkYNACATICAqApABIhyTIg0gDZQgEiAgKgKUASIdkyINIA2UkiARICAqApgBIh6TIg0gDZSSkSEYICAoApwBDAELICJBgH5xQQJyCyIiQf8BcUECRyAPIBhecUUEQCAGRQ0BDAILICJBCHYhNCAjKAIMISsgHCEVIB0hFiAeIRcgGCEPICIhDCAGDQELIAohBSAsIQYgICgCjAEiCEEhTwRAICAoAgwhCCAFIQYgICgCECEFCyAIRQ0C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CyAAIA84AgwgACAROAIIIAAgGDgCBCAAIA04AgAgBEGQAWokAAv6DAIRfwR9IwBBoAhrIgckAAJAAkACQAJAIABFDQAgAEEIayIKKAIAQQFqIQYgCiAGNgIAIAZFDQEgACgCACIGQX9GDQIgACAGQQFqNgIAIAcgCjYCFCAHIAA2AhAgByAAQQRqIgs2AgwgAUUNACABQQhrIgwoAgBBAWohBiAMIAY2AgAgBkUNASABKAIAIgZBf0YNAiABIAZBAWo2AgAgByAMNgIgIAcgATYCHCAHIAFBBGoiDTYCGCACRQ0AIAJBCGsiCSgCACIIQQFqIQYgCSAGNgIAIAZFDQEgAigCACIGQX9GDQIgAiAGQQFqNgIAIAcgCTYCLCAHIAI2AiggByACQQRqNgIkAkAgAioCBCIYIBiUIAIqAggiGSAZlJIgAioCDCIXIBeUkiIaQwAAAABeRQRAIAIgBjYCACAJIAg2AgBBAiEDDAELIAcgFyAakSIXlTgC/AIgByAZIBeVOAL4AiAHIBggF5U4AvQCIwBBkAFrIggkACAHQYADaiIGQgA3A5ABIAhBEGoiFEIANwMAIAZBmAFqQgA3AwAgCEHtAGoiDkELakIANwAAIAhB2gBqIg9BC2pCADcAACAIQccAaiIQQQtqQgA3AAAgCEE0aiIRQQtqQgA3AAAgCEEhaiISQQtqQgA3AAAgCEIANwMIIAhCADcAcCAIQgA3AF0gCEIANwBKIAhCADcANyAIQgA3ACQgCEGAAWoiEyAHQfQCaiIVELcEIAZB4ABqIBNBCGoiFigCADYCACAGIAgpAoABNwJYIAgqAowBIRggEyAVELcEIAhBHGogFigCADYCACAIIAgpAoABNwIUIAgqAowBIRkgBkIANwMIIAZCADcDACAGIBg4AmQgBkL////7BzcDUCAGQoCAgIDw//+/fzcDSCAGQv////v///+//wA3A0AgBkL////7BzcDOCAGQoCAgIDw//+/fzcDMCAGQv////v///+//wA3AyggBkL////7BzcDICAGQoCAgIDw//+/fzcDGCAGQv////v///+//wA3AxAgBkH4AGogCEEYaikDADcDACAGQfAAaiAUKQMANwMAIAYgCCkDCDcDaCAGQQA2AowBIAZC////+wc3A6ABIAZCADcChAEgBkEAOgCoASAGIBk4AoAB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IANB/wFxQT9NBEAgAioCBCIVIBWUIAIqAggiFiAWlJIgAioCDCIUIBSUkiIXQwAAAABeDQELIAVBAjoA7QIgAiAENgIAIAcgBjYCAAwBCyAFQfQCaiIRQQhqIhIgFCAXkSIUlTgCACAFIBYgFJU4AvgCIAUgFSAUlTgC9AIgBUHQBWoiBEIANwNoIARCADcDkAEgBEIANwJUIARB+ABqQgA3AwAgBEHwAGpCADcDACAEQZgBakIANwMAIwAiE0HgAGsiBkHNAGoiDEELakIANwAAIAZBOmoiDUELakIANwAAIAZBJ2oiDkELakIANwAAIAZBFGoiD0ELakIANwAAIAZBAWoiEEELakIANwAAIARB3ABqQgA3AgAgBkIANwBQIAZCADcAPSAGQgA3ACogBkIANwAXIAZCADcABCAEQgA3AwggBEIANwMAIARBADoAqAEgBEL////7BzcDoAEgBEIANwOIASAEQoCAgPwDNwOAASAEQYCAgPwDNgJkIARB////+wc2AlAgBEKAgICA8P//v383A0ggBEL////7////v/8ANwNAIARC////+wc3AzggBEKAgICA8P//v383AzAgBEL////7////v/8ANwMoIARC////+wc3AyAgBEKAgICA8P//v383AxggBEL////7////v/8ANwMQIAQgBikATTcAqQEgBEGxAWogDEEIaikAADcAACAEQbgBaiAMQQ9qKAAANgAAIARBADoAxAEgBEL////7BzcCvAEgBEEAOgDgASAEQv////sHNwPYASAEQQA6APwBIARC////+wc3AvQBIARB1AFqIA1BD2ooAAA2AAAgBEHNAWogDUEIaikAADcAACAEIAYpADo3AMUBIARB8AFqIA5BD2ooAAA2AAAgBEHpAWogDkEIaikAADcAACAEIAYpACc3AOEBIARBjAJqIA9BD2ooAAA2AAAgBEGFAmogD0EIaikAADcAACAEIAYpABQ3AP0BIARBADoAmAIgBEL////7BzcDkAIgBEGoAmogEEEPaigAADYAACAEQaECaiAQQQhqKQAANwAAIAQgBikAATcAmQIgBEGAAjsBvAIgBCADQf8BcTYCuAIgBEEAOgC0AiAEQv////sHNwKsAiAFQcAGaiAKQQhqKAIANgIAIAVB3AZqIAtBCGooAgA2AgAgBSAKKQIANwO4BiAF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aiIMQQtqQgA3AAAgBEHHAGoiDUELakIANwAAIARBNGoiDkELakIANwAAIARBIWoiD0ELakIANwAAIARCADcDCCAEQgA3AHAgBEIANwBdIARCADcASiAEQgA3ADcgBEIANwAkIARBgAFqIhAgBUH0AmoiEhC3BCADQeAAaiAQQQhqIhMoAgA2AgAgAyAEKQKAATcCWCAEKgKMASEVIBAgEhC3BCAEQRxqIBMoAgA2AgAgBCAEKQKAATcCFCAEKgKMASEWIANCADcDCCADQgA3AwAgAyAVOAJkIANC////+wc3A1AgA0KAgICA8P//v383A0ggA0L////7////v/8ANwNAIANC////+wc3AzggA0KAgICA8P//v383AzAgA0L////7////v/8ANwMoIANC////+wc3AyAgA0KAgICA8P//v383AxggA0L////7////v/8ANwMQIANB+ABqIARBGGopAwA3AwAgA0HwAGogESkDADcDACADIAQpAwg3A2ggA0EANgKMASADQv////sHNwOgASADQgA3AoQBIANBADoAqAEgAyAWOAKAASADQv////sHNwK8ASADQQA6AMQBIANC////+wc3A9gBIANBADoA4AEgA0G4AWogC0EPaigAADYAACADQbEBaiALQQhqKQAANwAAIAMgBCkAbTcAqQEgAyAEKQBaNwDFASADQc0BaiAMQQhqKQAANwAAIANB1AFqIAxBD2ooAAA2AAAgAyAEKQBHNwDhASADQekBaiANQQhqKQAANwAAIANB8AFqIA1BD2ooAAA2AAAgA0EAOgD8ASADQv////sHNwL0ASADQQA6AJgCIANC////+wc3A5ACIANBADoAtAIgA0L////7BzcCrAIgA0GAAjsBvAIgA0E3NgK4AiADQYwCaiAOQQ9qKAAANgAAIANBhQJqIA5BCGopAAA3AAAgAyAEKQA0NwD9ASADQagCaiAPQQ9qKAAANgAAIANBoQJqIA9BCGopAAA3AAAgAyAEKQAhNwCZAiAEQZABaiQAIAVB8ANqIAhBCGooAgA2AgAgBUGMBGogCkEIaigCADYCACAFIAgpAgA3A+gDIAUgCikCADcChAQgBUEwaiADQb0C/AoAACAGKAIAIQQgBS8BvgUhCCAFLQC9BSEDIAIgAigCAEEBazYCACAGIARBAWsiAjYCACACDQAg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NgIAIAdBBEkNACACKAAAIQcgASAEQQhrIgU2AgQgASACQQhqNgIAIAVBBEkNACACNQAEIQkgASAEQQxrIgU2AgQgASACQQxqNgIAIAVBBEkNASACNQAIIQogASAEQRBrIgU2AgQgASACQRBqNgIAIAVBBEkNAiACKgAMIQ0gASAEQRRrIgU2AgQgASACQRRqNgIAIAVBBEkNAiACKAAQIQUgASAEQRhrIgY2AgQgASACQRhqNgIAIAZBBEkNAiACNQAUIQsgASAEQRxrIgY2AgQgASACQRxqNgIAAkAgBkEESQ0AIAI1ABghDCABIARBIGsiBjYCBCABIAJBIGo2AgAgBkEESQ0AIAIoABwhBiABIARBJGsiCDYCBCABIAJBJGo2AgAgCEEESQ0AIAIqACAhDiABIARBKGsiCDYCBCABIAJBKGo2AgAgCEEESQ0AIAIqACQhDyAAIAxCIIYgC4Q3AiggACAFNgIkIAAgDTgCICAAIApCIIYgCYQ3AhggACAHNgIUIAAgDzgCDCAAIA44AgggACAGNgIEIAEgBEEsazYCBCABIAJBLGo2AgAgACACKgAoOAIQQQAMBAsgA0EAOgALIANBJTsACSADQQA2AgwgA0EBOgAIIAAgA0EIahCiDTYCBEEBDAMLIANBADoACyADQSU7AAkgA0EANgIMIANBAToACCAAIANBCGoQog02AgRBAQwCCyADQQA6AAsgA0ElOwAJIANBADYCDCADQQE6AAggACADQQhqEKINNgIEQQEMAQsgA0EAOgALIANBJTsACSADQQA2AgwgA0EBOgAIIAAgA0EIahCiDTYCBEEBCzYCACADQRBqJAALwQUBDH8jAEEgayICJAACQCABKAIEIgNFBEAgAEGAgICAeDYCAAwBCyABIANBAWs2AgQCfyABKAIAIgUoAgQiBEEHTQRAIAJCgcoANwMIQQEhBiACQQhqEKINDAELIAUgBEEIayIENgIEIAUgBSgCACIBQQhqNgIAIAIgASkAABCnCCACKAIAIQYgAigCBAshAQJAAkAgBkEBcQRAIAEhAwwBC0EEIQMgAUUEQEEAIQZBACEBDAILAn8CQEGAgAQgASABQYCABE8bIgNBBHQiBkEEELMOIgkEQCACIAk2AgwgAiADNgIIQQAhAyACQQA2AhAgBSgCACEKQQAhBgNAIARBBEkNAiAFIARBBGsiBDYCBCAFIAMgCmoiCEEEaiIHNgIAIARBBEkEQCACQoHKADcDGCACQRhqEKINDAQLIAgoAAAhCyAFIARBBGsiBDYCBCAFIAdBBGoiCDYCACAEQQNNBEAgAkKBygA3AxggAkEYahCiDQwECyAHKAAAIQwgBSAEQQRrIgQ2AgQgBSAIQQRqIgc2AgAgBEEDTQRAIAJCgcoANwMYIAJBGGoQog0MBAsgCCgAACEIIAUgBEEEayIENgIEIAUgB0EEajYCACAHKAAAIQ0gAigCCCAGRgRAIAJBCGpByKvBABC6CCACKAIMIQkLIAMgCWoiByALNgIAIAdBDGogDTYCACAHQQhqIAg2AgAgB0EEaiAMNgIAIAIgBkEBaiIGNgIQIANBEGohAyABIAZHDQALIAIoAgwhAyACKAIIIgFBgICAgHhHDQQMAwtBBCAGQbirwQAQ0w0ACyACQoHKADcDGCACQRhqEKINCyEDIAIoAggiAUUNACACKAIMIAFBBHRBBBCIDwsgAEGBgICAeDYCACAAIAM2AgQMAQsgACAGNgIIIAAgAzYCBCAAIAE2AgALIAJBIGokAAvNBQMOfwF+AXwjAEHQAmsiAiQAIAAoAgAoAgAhBCAAKAIEIgMoAgBBAUYEQCADKAIEIgNB//8DcSEIIANBEHYhCUEBIQYLIARBIEkhBSAAKAIIIgMoAgBBAUYEQCADKQMIIhBCIIinIQogEKchC0EBIQcLIARBACAFGyEMQQAhBCAAKAIMIgUoAgBBAUYEQCAFKQMIIhBCIIinIQ1BASEEIBCnIQMLIAAoAhgoAgAhDiAAKAIcKAIAIQ8gACgCFCgCACEFIAIgACgCECgCADYCRCACQcDQwQA2AjggAiABNgI0IAIgDDYCMCACIA02AiwgAiADNgIoIAIgBDYCJCACIAo2AiAgAiALNgIcIAIgBzYCGCACIAg2AhQgAiAJNgIQIAIgBjYCDCAFKAI8IQMgBSgCQCEBIAIgDzYCTCACIA42AkggAiABNgJAIAIgAyABKAIIQQFrQXhxakEIajYCPCAAKAIgIQMgAkHoAGogACgCJCgCACIBQQhqKAIANgIAIAIgASkCADcDYCACQdAAaiIBQQhqIAAoAigoAgAiBEEIaikCADcDACACIAQpAgA3A1AgACgCLCgCACIEKAIEIQAgAkHwAGogAkEMaiABIAQoAgAgACgCCEEBa0F4cWpBCGogABDJBCACQZgCaiEEA0ACQCACQcACaiIAIAJB8ABqIAQQ5wEgAigCyAJFDQAgAisDwAIhESADKAIAIQEgAkGBATYCzAIgAiAREAA2AsACIAIgASACQcwCaiAAEL8MIAIoAgQhAAJAAkAgAigCAEEBcUUEQCAAEAFBAEchASAAQYMBSw0BDAILQQEhASAAQYQBSQ0BCyAAEAILIAIoAsACIgBBhAFPBEAgABACCyACKALMAiIAQYQBTwRAIAAQAgsgAQ0BCwsgAigC9AEiAEEhTwRAIAIoAnggAEECdEEEEIgPCyACQdACaiQAC6MFAQp/AkACQCAAKAIIIgQgAU8EQCAAIAE2AgggASAERwRAIAQgAWshBCAAKAIEIAFBBHRqIQMDQCADKAIAIgAEQCADQQRqKAIAIABBAnRBBBCIDwsgA0EQaiEDIARBAWsiBA0ACwsgAigCACIARQ0BIAIoAgQgAEECdEEEEIgPDwsgAigCDCEGIAIoAgghCCACKAIEIQogAigCACELIAQhBSABIARrIgkgACgCACAEa0sEQCAAIAQgCUEEQRAQ9gYgACgCCCEFCyAAKAIEIAVBBHRqIQMCQCAJQQJJDQAgCEECdCEHIAhB/////wNLDQIgB0H8////B0sNAiAHBEAgBEF/cyABaiECIAUgCWpBAWshBUEEIQwDQCAHQQQQsw4iAUUNBCAHBEAgASAKIAf8CgAACyADQQxqIAY2AgAgA0EIaiAINgIAIANBBGogATYCACADIAg2AgAgA0EQaiEDIAJBAWsiAg0ACwwBCyABIARBf3NqIgFBA3EhAiAJQQJrQQNPBEAgAUF8cSEBA0AgA0KAgICAwAA3AgAgA0E8aiAGNgIAIANBOGpBADYCACADQTBqQoCAgIDAADcCACADQSxqIAY2AgAgA0EoakEANgIAIANBIGpCgICAgMAANwIAIANBHGogBjYCACADQRhqQQA2AgAgA0EQakKAgICAwAA3AgAgA0EMaiAGNgIAIANBCGpBADYCACADQUBrIQMgAUEEayIBDQALCyACBEADQCADQoCAgIDAADcCACADQQxqIAY2AgAgA0EIakEANgIAIANBEGohAyACQQFrIgINAAsLIAUgCWpBAWshBQsgAyAGNgIMIAMgCDYCCCADIAo2AgQgAyALNgIAIAAgBUEBajYCCAsPCyAMIAdB4PnBABDTDQALvQUBC38jAEEgayICJAACQCABKAIEIgNFBEAgAEGAgICAeDYCAAwBCyABIANBAWs2AgQCfyABKAIAIgUoAgQiBEEHTQRAIAJCgcoANwMIQQEhBiACQQhqEKINDAELIAUgBEEIayIENgIEIAUgBSgCACIBQQhqNgIAIAIgASkAABCnCCACKAIAIQYgAigCBAshAQJAAkAgBkEBcQRAIAEhAwwBC0EEIQMgAUUEQEEAIQZBACEBDAILAn8CQEGAgAQgASABQYCABE8bIgNBBHQiBkEEELMOIgcEQCACIAc2AgwgAiADNgIIQQAhAyACQQA2AhAgBSgCACEJQQAhBgNAIARBBEkNAiAFIARBBGsiBDYCBCAFIAMgCWoiCEEEaiIHNgIAIARBBEkEQCACQoHKADcDGCACQRhqEKINDAQLIAgoAAAhCiAFIARBBGsiBDYCBCAFIAdBBGoiCDYCACAEQQNNBEAgAkKBygA3AxggAkEYahCiDQwECyAHKAAAIQsgBSAEQQRrIgQ2AgQgBSAIQQRqIgc2AgAgBEEDTQRAIAJCgcoANwMYIAJBGGoQog0MBAsgCCgAACEIIAUgBEEEayIENgIEIAUgB0EEajYCACAHKAAAIQwgAigCCCAGRgRAIAJBCGpByKvBABC6CAsgAigCDCADaiIHIAo2AgAgB0EMaiAMNgIAIAdBCGogCDYCACAHQQRqIAs2AgAgAiAGQQFqIgY2AhAgA0EQaiEDIAEgBkcNAAsgAigCDCEDIAIoAggiAUGAgICAeEcNBAwDC0EEIAZBuKvBABDTDQALIAJCgcoANwMYIAJBGGoQog0LIQMgAigCCCIBRQ0AIAIoAgwgAUEEdEEEEIgPCyAAQYGAgIB4NgIAIAAgAzYCBAwBCyAAIAY2AgggACADNgIEIAAgATYCAAsgAkEgaiQAC5MFAQR/AkAgACgCACIBQYCAgIB4Rg0AIAEEQCAAKAIEIAFB8ANsQRAQiA8LIAAoAgwiAQRAIAAoAhAgAUECdEEEEIgPCyAAKAIcIgEEQCAAKAIgIAFBAnRBBBCIDwsgACgCLCIBBEAgACgCMCABQQJ0QQQQiA8LIAAoAkAhAiAAKAJEIgMEQCACIQEDQCABKAIAIgQEQCABQQRqKAIAIARBAnRBBBCIDwsgAUEQaiEBIANBAWsiAw0ACwsgACgCPCIBBEAgAiABQQR0QQQQiA8LIAAoAkgiAQRAIAAoAkwgAUECdEEEEIgPCyAAKAJcIgEEQCAAKAJgIAFBAnRBBBCIDwsgACgCcCIBBEAgACgCdCABQQN0QQQQiA8LIAAoAoQBIgEEQCAAKAKIASABQQJ0QQQQiA8LIAAoApQBIgEEQCAAKAKYASABQQJ0QQQQiA8LIAAoAqgBIgEEQCAAKAKsASABQQJ0QQQQiA8LIAAoArwBIgEEQCAAKALAASABQQN0QQQQiA8LIAAoAtABIgEEQCAAKALUASABQRhsQQQQiA8LIAAoAtwBIgEEQCAAKALgASABQQJ0QQQQiA8LIAAoAvABIQIgACgC9AEiAwRAIAIhAQNAIAEoAgAiBARAIAFBBGooAgAgBEECdEEEEIgPCyABQRBqIQEgA0EBayIDDQALCyAAKALsASIBBEAgAiABQQR0QQQQiA8LIAAoAvwBIQIgACgCgAIiAwRAIAIhAQNAIAEoAgAiBARAIAFBBGooAgAgBEECdEEEEIgPCyABQRBqIQEgA0EBayIDDQALCyAAKAL4ASIBBEAgAiABQQR0QQQQiA8LIAAoAoQCIgFFDQAgACgCiAIgAUECdEEEEIgPCwv9BAIDfwl9IwBB0ABrIgYkACAGIAEqAhgiCTgCFCAGIAEqAhQiCjgCECAGIAEqAhAiCzgCDCAGQShqIgcgAiAGQQxqIAMoAjARAQAgBkEgaiIIIAdBCGopAgA3AwAgBiAGKQIoNwMYAkAgBioCGCIMIAuTIg0gDZQgBioCHCILIAqTIg4gDpSSIAgqAgAiCiAJkyIJIAmUkiIPQwAAgCheBEAgCSAPkSIJlSEKIA4gCZUhCyANIAmVIQwgBi0AJEUEQCAJIASTIQkgCowhCiALjCELIAyMIQwMAgsgCYwgBJMhCQwBCyAGQUBrIAIgBigCOCAGKAI8IAZBGGogAygCwAERBwAgBIwhCSAGKAJARQRAIAwgDJQgCyALlJIgCiAKlJIiDUMAAIAoXkUEQEMAAIA/IQtDAAAAACEKQwAAAAAhDAwCCyAKIA2RIg2VIQogCyANlSELIAwgDZUhDAwBCyAGKgJMIQogBioCSCELIAYqAkQhDAtBACEDIAAgBSAJYAR/IAAgBikDGDcCBCAAIAk4AjQgACAKOAIkIAAgCzgCICAAIAw4AhwgAEEMaiAGQSBqKAIANgIAIAAgASoCDCIOIAsgASoCACIFlCAMIAEqAgQiCZSTIg0gDZIiD5QgCSAKIAmUIAsgASoCCCINlJMiECAQkiIQlCAFIAwgDZQgCiAFlJMiESARkiIRlJOSIAqTIgo4AjAgACAOIBGUIAUgD5QgDSAQlJOSIAuTIgU4AiwgACAOIBCUIA0gEZQgCSAPlJOSIAyTIgs4AiggACAEIAqUOAIYIAAgBCAFlDgCFCAAIAQgC5Q4AhBBAQVBAAs2AgAgBkHQAGokAAvGBAENfSADKgIIIAIqAhiTIgsgAioCACIJlCADKgIAIAIqAhCTIhAgAioCCCIKlJMiByAHkiEGIBAgAioCBCIHlCADKgIEIAIqAhSTIg0gCZSTIgwgDJIhCCABKgIEIg4gDSACKgIMIgwgBpQgCSAIlCAKIA0gCpQgCyAHlJMiDSANkiIRlJOSkoyUIAEqAgAiDSAQIAwgEZQgCiAGlCAHIAiUk5KSlJMgASoCCCIQIAsgDCAIlCAHIBGUIAkgBpSTkpKUkyERAkACfSAFBEBDAAAAACEGQwAAAAAhC0MAAAAAIBFDAAAAAF4NARoLIAcgAyoCDCILlCAJIAMqAhAiEpSTIgYgBpIhBiAKIBKUIAcgAyoCFCIPlJMiCCAIkiEIIBEgECAPIAwgBpQgByAIlCAJIAkgD5QgCiALlJMiDyAPkiIPlJOSkpQgDSALIAwgCJQgCiAPlCAHIAaUk5KSlCAOIBIgDCAPlCAJIAaUIAogCJSTkpKUkpKVIhJDAAAAAGBFDQEgBCASYEUNASAQjCAQIBFDAAAAAF4iARshBiANjCANIAEbIQsgDowgDiABGwshCCAAIBI4AgggAEICNwIAIAAgBiAMIAkgCJQgByALlJMiBCAEkiIElCAJIAogC5QgCSAGlJMiDiAOkiIOlCAHIAcgBpQgCiAIlJMiBiAGkiIGlJOSkjgCFCAAIAggDCAOlCAKIAaUIAkgBJSTkpI4AhAgACALIAwgBpQgByAElCAKIA6Uk5KSOAIMDwsgAEEENgIAC5AFAgZ+BX8gACgCDEUEQEEADwsgASkCCCIHIAApAxgiBIVC88rRy6eM2bL0AIUiBSAAKQMQIgNC4eSV89bs2bzsAIV8IQIgAiAFQhCJhSIFIARC7d6R85bM3LfkAIUiBCADQvXKzYPXrNu38wCFfCIGQiCJfCEDIAYgBEINiYUiBCACfCIGQiCJIAMgBUIViYVCgICAgICAgIAIhSICfCIFIAJCEImFIQIgAiAGIARCEYmFIgQgAyAHhXwiA0IgiXwiBiACQhWJhSECIAIgAyAEQg2JhSIDIAV8IgRCIIlC/wGFfCIFIAJCEImFIQIgAiAEIANCEYmFIgMgBkKAgICAgICAgAiFfCIEQiCJfCIGIAJCFYmFIQIgAiAEIANCDYmFIgMgBXwiBEIgiXwiBSACQhCJhSECIAIgBCADQhGJhSIDIAZ8IgRCIIl8IgYgAkIViYUhAiAAKAIEIgkgAiADQg2JIASFIgMgBXwiBEIgiXwiBSADQhGJIASFIgMgBnwgA0INiYUiA3wiBCACQhCJIAWFQhWJIANCEYmFIARCIIiFhSICp3EhCCACQhmIQv8Ag0KBgoSIkKDAgAF+IQQgACgCACIKQShrIQsgASkCACEFQQAhAQJ/A0ACQCAIIApqKQAAIgMgBIUiAkKBgoSIkKDAgAF9IAJCf4WDQoCBgoSIkKDAgH+DIgJCAFIEQANAIAUgC0EAIAJ6p0EDdiAIaiAJcWsiAEEobGoiDCkCAIUgByAMKQIIhYRQDQIgAkIBfSACgyICQgBSDQALC0EAIAMgA0IBhoNCgIGChIiQoMCAf4NCAFINAhogAUEIaiIBIAhqIAlxIQgMAQsLIAogAEEobGoLIgBBKGtBACAAGwuFBQEEfyAAKAIAIgEEQCAAKAIEIAFB8ANsQRAQiA8LIAAoAgwiAQRAIAAoAhAgAUECdEEEEIgPCyAAKAIcIgEEQCAAKAIgIAFBAnRBBBCIDwsgACgCLCIBBEAgACgCMCABQQJ0QQQQiA8LIAAoAkAhAiAAKAJEIgMEQCACIQEDQCABKAIAIgQEQCABQQRqKAIAIARBAnRBBBCIDwsgAUEQaiEBIANBAWsiAw0ACwsgACgCPCIBBEAgAiABQQR0QQQQiA8LIAAoAkgiAQRAIAAoAkwgAUECdEEEEIgPCyAAKAJcIgEEQCAAKAJgIAFBAnRBBBCIDwsgACgCcCIBBEAgACgCdCABQQN0QQQQiA8LIAAoAoQBIgEEQCAAKAKIASABQQJ0QQQQiA8LIAAoApQBIgEEQCAAKAKYASABQQJ0QQQQiA8LIAAoAqgBIgEEQCAAKAKsASABQQJ0QQQQiA8LIAAoArwBIgEEQCAAKALAASABQQN0QQQQiA8LIAAoAtABIgEEQCAAKALUASABQRhsQQQQiA8LIAAoAtwBIgEEQCAAKALgASABQQJ0QQQQiA8LIAAoAvABIQIgACgC9AEiAwRAIAIhAQNAIAEoAgAiBARAIAFBBGooAgAgBEECdEEEEIgPCyABQRBqIQEgA0EBayIDDQALCyAAKALsASIBBEAgAiABQQR0QQQQiA8LIAAoAvwBIQIgACgCgAIiAwRAIAIhAQNAIAEoAgAiBARAIAFBBGooAgAgBEECdEEEEIgPCyABQRBqIQEgA0EBayIDDQALCyAAKAL4ASIBBEAgAiABQQR0QQQQiA8LIAAoAoQCIgEEQCAAKAKIAiABQQJ0QQQQiA8LC9MEAhV9BH8gASgCBCEXIAAoAggiGCABKAIIIhlJBEAgFyAYQRhsaiIBKgIUIQwgASoCECEIIAEqAgwhByABKgIIIQYgASoCBCEFIAEqAgAhBAsgGSAAKAIMIhpLBEAgFyAaQRhsaiIBKgIUIREgASoCECEQIAEqAgwhDyABKgIIIQ4gASoCBCENIAEqAgAhCwsgACAAKgIYIgkgACoCHCIKIAAqAhQiAiAAKgJcIAAqAmAgCyAEkyAAKgIgIhKUIA0gBZMgACoCJCITlJIgDiAGkyAAKgIoIhSUkiAPIAAqAjiUIBAgACoCPJSSIBEgACoCQJSSIAcgACoCLJQgCCAAKgIwlJIgDCAAKgI0lJKTkpIgAiAAKgJolJOUkiIDIAMgCl4bIAMgCV0bIgM4AhQgFCADIAKTIgKUIQMgEyAClCEJIBIgApQhCiAYIBlJBEAgACoCeCESIAAqAnQhEyAAKgJwIRQgACoCSCEVIAAqAkQhFiAXIBhBGGxqIgEgDCAAKgJMIAKUkjgCFCABIAggFSAClJI4AhAgASAHIBYgApSSOAIMIAEgBiADIBKUkjgCCCABIAUgCSATlJI4AgQgASAEIAogFJSSOAIACyAZIBpLBEAgACoCVCEEIAAqAlAhBSAAKgKEASEGIAAqAoABIQcgACoCfCEIIBcgGkEYbGoiASARIAIgACoCWJSTOAIUIAEgECACIASUkzgCECABIA8gBSAClJM4AgwgASAOIAMgBpSTOAIIIAEgDSAJIAeUkzgCBCABIAsgCiAIlJM4AgALC9wEAgF/Dn0jAEHwAWsiBCQAIAMqAgAgAioCECIQkyIIIAIqAgQiC5QgAyoCBCACKgIUIhGTIgYgAioCACIMlJMiCSAJkiEHIAYgAioCCCIJlCADKgIIIAIqAhgiEpMiBSALlJMiDSANkiEKIAQgBSACKgIMIg0gB5QgCyAKlCAMIAUgDJQgCCAJlJMiBSAFkiIFlJOSkiIOOAIcIAQgCCANIAqUIAkgBZQgCyAHlJOSkiIIOAIUIAQgBiANIAWUIAwgB5QgCSAKlJOSkiIPOAIYIARB6AFqQgA3AgAgBEIANwLgASAEQoKAgIAwNwI4IARCgICAgBA3AjAgBEFAa0EAQaAB/AsAIARBIGogASgCBCABKAIIIARBMGogBEEUakEAEC4gDiAEKgIoIgeTIgqMIAogBC0ALCICGyIGIAaUIAggBCoCICIKkyIIjCAIIAIbIgUgBZQgDyAEKgIkIgiTIg6MIA4gAhsiDiAOlJKSIg9DAACAKF4EfyAEIAYgD5EiBpU4AjggBCAOIAaVOAI0IAQgBSAGlTgCMCAEQQhqIAEgBEEwahCsAiAEKAIMIQEgBCgCCAVBAwshAyAAIAE2AhQgACADNgIQIAAgAjoADCAAIAcgDSAMIAiUIAsgCpSTIgYgBpIiBpQgDCAJIAqUIAwgB5STIgUgBZIiBZQgCyALIAeUIAkgCJSTIgcgB5IiB5STkpIgEpI4AgggACAIIA0gBZQgCSAHlCAMIAaUk5KSIBGSOAIEIAAgECAKIA0gB5QgCyAGlCAJIAWUk5KSkjgCACAEQfABaiQAC4IFAQt/IwBBMGsiBiQAIAZBEGpCADcDACAGQQhqQgA3AwAgBkIANwMAIAAoAggiBSABSQRAIAEgBSIEayIJIAAoAgAgBGtLBEAgACAEIAlBBEEYEPYGIAAoAgghBAsgACgCBCAEQRhsaiEDIAlBAk8EQCABIAVBf3NqIgpBAXEhDCAGQSRqIQcgBkEMaiEIIAUgAUECa0cEQCAKQX5xIQUDQCAGQRhqIgFBCGoiC0EANgIAIAcgCCkCADcCACAHQQhqIg0gCEEIaiIKKAIANgIAIANCADcCACADQQhqIAspAwA3AgAgA0EQaiABQRBqIgEpAwA3AgAgC0EANgIAIAcgCCkCADcCACANIAooAgA2AgAgA0EYakIANwIAIANBIGogCykDADcCACADQShqIAEpAwA3AgAgA0EwaiEDIAVBAmsiBQ0ACwsgDARAIAZBGGoiBUEIaiIBQQA2AgAgByAIKQIANwIAIAdBCGogCEEIaigCADYCACADQgA3AgAgA0EIaiABKQMANwIAIANBEGogBUEQaikDADcCACADQRhqIQMLIAQgCWpBAWshBAsgA0IANwIAIANBEGpCADcCACADQQhqQgA3AgAgBEEBaiEBCyAAIAE2AgggAkECdCEEQQAhAQJAIAJB/////wNLDQAgBEH8////B0sNAAJAIARFBEBBBCEDQQAhBQwBC0EEIQEgAiEFIARBBBCzDiIDRQ0BCwJAIAJFDQAgBEUNACADQQAgBPwLAAsgACgCDCIBBEAgACgCECABQQJ0QQQQiA8LIAAgAjYCGCAAIAI2AhQgACADNgIQIAAgBTYCDCAGQTBqJAAPCyABIARB8N3BABDTDQALywQCCX0BfiMAQUBqIgUkACACKgIEIgsgAyoCDCIKlCACKgIAIgwgAyoCECINlJMiByAHkiEIIAIqAggiByANlCALIAMqAhQiBpSTIg4gDpIhCSAFIAYgAioCDCIOIAiUIAsgCZQgDCAMIAaUIAcgCpSTIgYgBpIiBpSTkpI4AhQgBSANIA4gBpQgDCAIlCAHIAmUk5KSOAIQIAUgCiAOIAmUIAcgBpQgCyAIlJOSkjgCDCALIAMqAgAgAioCEJMiCpQgDCADKgIEIAIqAhSTIg2UkyIIIAiSIQggDSAHlCADKgIIIAIqAhiTIgYgC5STIgkgCZIhCSAFIAYgDiAIlCALIAmUIAwgBiAMlCAKIAeUkyIGIAaSIgaUk5KSOAIIIAUgDSAOIAaUIAwgCJQgByAJlJOSkjgCBCAFIAogDiAJlCAHIAaUIAsgCJSTkpI4AgAgBUEYaiABIAFBDGogAUEYaiAFENACAkACQCAFKAIYQQRGDQAgBSoCICIKIARfRQ0AIAUpAxgiD6ciAUEERg0AIAUqAiwhBCAFKgIoIQggBSoCJCEJIAAgCjgCCCAAIAE2AgAgACAPQiCIPgIEIAAgBCAOIAwgCJQgCyAJlJMiCiAKkiIKlCAMIAcgCZQgDCAElJMiDSANkiINlCALIAsgBJQgByAIlJMiBCAEkiIElJOSkjgCFCAAIAggDiANlCAHIASUIAwgCpSTkpI4AhAgACAJIA4gBJQgCyAKlCAHIA2Uk5KSOAIMDAELIABBBDYCAAsgBUFAayQAC4AlAiN/An4jAEGwA2siECQAAkACQAJAIABFDQAgAEEQayIcKAIAQQFqIQYgHCAGNgIAIAZFDQEgACgCAA0CIABBfzYCACAQIBw2AgwgECAANgIIIBAgAEEQaiILNgIEIAJFDQAgAkEIayIdKAIAQQFqIQYgHSAGNgIAIAZFDQEgAigCAA0CIAJBfzYCACAQIB02AhggECACNgIUIBAgAkEEaiIJNgIQIANFDQAgA0EIayIeKAIAQQFqIQYgHiAGNgIAIAZFDQEgAygCAA0CIANBfzYCACAQIB42AiQgECADNgIgIBAgA0EEaiIINgIcIARFDQAgBEEIayIfKAIAQQFqIQYgHyAGNgIAIAZFDQEgBCgCAA0CIARBfzYCACAQIB82AjAgECAENgIsIBAgBEEIaiIGNgIoIAVFDQAgBUEIayIgKAIAQQFqIQcgICAHNgIAIAdFDQEgBSgCAA0CIAVBfzYCACAQICA2AjwgECAFNgI4IBAgBUEIaiIHNgI0IBBBQGshGCABvSIppyEZIClCIIinISEgByEXIwBBgARrIhQkAAJAAkACQCALKAKMAyIPIBlNDQAgCygCiAMiDCAZQYADbGoiBygCAEEBRw0AICEgBygCBEcNACAHQQA2AgAgByALKQL8AjcCBCALIBk2AoADIAtBATYC/AIgCyALKAKQA0EBajYCkAMgCyALKAKUA0EBazYClAMgBygC6AIiJkGAgICAeEYNACAHKALwAiEjIAcoAuwCISQgBygCFCEbIAcoAhAhJyAUQRBqIAdBGGpB0AL8CgAAIBRBCGogB0H8AmooAgA2AgAgFCAHKQL0AjcDAAJAIAkoAggiDSAbTQ0AIAkoAgQiByAbQQN0aiISKAIAIBlHDQAgEigCBCAhRw0AIAkgDUEBayINNgIIIBIgByANQQN0aikCACIpNwIAIA0gG00NACAppyIHIA9PDQAgDCAHQYADbGoiBygCAEEBRw0AIAcoAgQgKUIgiKdHDQAgByAbNgIUCwwBCyAYQYCAgIB4NgLYAgwBCyAjBEAgJCAjQQN0aiEPIBRBoANqIQwgJCENA0AgFEHgAmogCCANKAIAIA1BBGooAgAgCSALQQAQxwICQCAUKALwAkECRg0AIBQoAqADIgcoAgAhEiAHIBJBAWs2AgAgEkEBRgRAIAwQmgoLIBQoApgDQQJJDQAgFCgCnANBLEEEEIgPCyAPIA1BCGoiDUcNAAsLIBRB4AJqISUjAEGAA2siESQAIBFBADYCDCARQoCAgIDAADcCBAJAAkACQCAZIAYiDCgCOE8NACAhIAYoAjQgGUEDdGoiBigCAEcNACAGKAIEIRVCfyEpIAZCfzcCACAVQX9GDQAgDCgCLCEOIAwoAighGiAMKAIgIgkgFUsEQCAMKAIcIBVBBHRqKQIIISkLIClCIIinIQgCQAJAIA4gKaciC00EQANAIA4gCCIHTQ0DIBogB0GAA2xqIgooAvQCIQggCigC+AIgFUYNAAsgCyEGIAchCwwBCyAaIAtBgANsaiIKKALwAiEGCwJAAkACQAJAAkACQCAaIAtBgANsaiIHKAL4AiILIAlJBEAgBygC/AIiByAJTw0BIAwoAhwiCSAHQQR0aiIHKAIEIRIgBygCACEPIAkgC0EEdGoiBygCACENIAcoAgQhCyAKKALsAiEJIAooAugCIQdB4ABBBBCzDiIWRQ0CIAxBGGohKCAWIAk2AhQgFiAHNgIQIBYgEjYCDCAWIA82AgggFiALNgIEIBYgDTYCACARQQE2AhggESAWNgIUIBFBBDYCEEEBIQsDQAJAAkAgBiAOSQRAIBogBkGAA2xqIgooAvACIQcMAQsDQCAOIAgiCU0NAiAaIAhBgANsaiIKKAL0AiEIIAooAvgCIBVGDQALIAYhByAJIQYLIAYgDCgCLE8NBSAMKAIoIAZBgANsaiIGKAL4AiINIAwoAiAiCU8NBiAGKAL8AiIGIAlPDQcgDCgCHCIJIAZBBHRqIgYoAgQhEyAGKAIAIRIgCSANQQR0aiIGKAIAIQ8gBigCBCENIAooAuwCIQkgCigC6AIhBiARKAIQIAtGBEAgEUEQaiALQQFBBEEYEPYGIBEoAhQhFgsgFiALQRhsaiIKIAk2AhQgCiAGNgIQIAogEzYCDCAKIBI2AgggCiANNgIEIAogDzYCACARIAtBAWoiCzYCGCAHIQYMAQsLIBEoAgwiDUEDdCEGIBEoAhQiByALQRhsaiEKIBEoAhAhGiAHIQgDQCAIQRRqKAIAIQsgCEEQaigCACEiIAhBDGooAgAhDiAIQQhqKAIAIRMgCEEEaigCACESIAgoAgAhDyARKAIEIA1GBEAgEUEEakH4vMIAELgICyARKAIIIAZqIgkgIjYCACAJQQRqIAs2AgAgESANQQFqIg02AgwCQAJAAkAgIiAMKAJMTw0AIAwoAkggIkEMbGoiCSgCAEEBRw0AIAsgCSgCBEcNACAJQQA2AgAgCSgCCCEWIAkgDCkCPDcCBCAMICI2AkAgDEEBNgI8IAwgDCgCUEEBajYCUCAMIAwoAlRBAWs2AlQgEUEQaiAoIBYQvQMgFiAMKAIsTw0CAkAgDCgCKCAWQYADbGoiCygC6AIiCSAMKAJMTw0AIAwoAkggCUEMbGoiCSgCAEEBRw0AIAkoAgQgCygC7AJGDQILQbCJwgBBE0GYvcIAENcLAAtBiL3CABCRDwALIAkgFjYCCAsgDCAPIBIQ5AMgDCATIA4Q5AMgBkEIaiEGIAogCEEYaiIIRw0ACwwGCyALIAlBiK/CABCICwALIAcgCUGYr8IAEIgLAAtBBEHgAEHw3cEAENMNAAtB+K7CABCRDwALIA0gCUGIr8IAEIgLAAsgBiAJQZivwgAQiAsACyAaRQ0AIAcgGkEYbEEEEIgPCwJAIBUgDCgCICINTw0AIAwoAhwiEyAVQQR0aiIGQQhqIRIgDCgCLCEIIAwoAighDiAGKAIIIgdBf0cEQANAAkAgByAITw0AAkAgDiAHQYADbGoiDykD+AIiKqciBiANTw0AIA8pA/ACIimnIQkgKkIgiKchCwJAIBMgBkEEdGoiBigCCCIKIAdHBEADQCAIIApNDQIgDiAKQYADbGoiBigC8AIiCiAHRw0ACyAGQfACaiAJNgIADAELIAZBCGogCTYCAAsgCyANTw0AIClCIIinIQkgEyALQQR0aiIGKAIMIgogB0cEQANAIAggCk0NAiAOIApBgANsaiIGKAL0AiIKIAdHDQALIAZB9AJqIAk2AgAMAQsgBkEMaiAJNgIACyAPIA4gCEEBayIIQYADbGpBgAP8CgAAIAwgCDYCLCAHIAhPDQAgDykD+AIiKaciBiANTw0AIClCIIinIQkCQCATIAZBBHRqIgYoAggiCiAIRwRAA0AgCCAKTQ0CIA4gCkGAA2xqIgYoAvACIgogCEcNAAsgBkHwAmogBzYCAAwBCyAGQQhqIAc2AgALIAkgDU8NACATIAlBBHRqIgYoAgwiCiAIRwRAA0AgCCAKTQ0CIA4gCkGAA2xqIgYoAvQCIgogCEcNAAsgBkH0AmogBzYCAAwBCyAGQQxqIAc2AgALIBIoAgAiB0F/Rw0ACwsgEigCBCIHQX9HBEADQAJAIAcgCE8NAAJAIA4gB0GAA2xqIg8pA/gCIiqnIgYgDU8NACAPKQPwAiIppyEJICpCIIinIQsCQCATIAZBBHRqIgYoAggiCiAHRwRAA0AgCCAKTQ0CIA4gCkGAA2xqIgYoAvACIgogB0cNAAsgBkHwAmogCTYCAAwBCyAGQQhqIAk2AgALIAsgDU8NACApQiCIpyEJIBMgC0EEdGoiBigCDCIKIAdHBEADQCAIIApNDQIgDiAKQYADbGoiBigC9AIiCiAHRw0ACyAGQfQCaiAJNgIADAELIAZBDGogCTYCAAsgDyAOIAhBAWsiCEGAA2xqQYAD/AoAACAMIAg2AiwgByAITw0AIA8pA/gCIimnIgYgDU8NACApQiCIpyEJAkAgEyAGQQR0aiIGKAIIIgogCEcEQANAIAggCk0NAiAOIApBgANsaiIGKALwAiIKIAhHDQALIAZB8AJqIAc2AgAMAQsgBkEIaiAHNgIACyAJIA1PDQAgEyAJQQR0aiIGKAIMIgogCEcEQANAIAggCk0NAiAOIApBgANsaiIGKAL0AiIKIAhHDQALIAZB9AJqIAc2AgAMAQsgBkEMaiAHNgIACyASKAIEIgdBf0cNAAsLIAwgDUEBayINNgIgIBMgDUEEdGoiBikCACEpIBMgFUEEdGoiB0EIaiAGQQhqKQIANwIAIAcgKTcCACANIBVNDQAgBykCCCIpQiCIpyEHICmnIgogCEkEQANAIA4gCkGAA2xqIgYgFTYC+AIgBigC8AIiCiAISQ0ACwsgByAITw0AA0AgDiAHQYADbGoiBiAVNgL8AiAGKAL0AiIHIAhJDQALCyANIBVNDQAgDCgCHCAVQQR0aiIGQQRqKAIAIQsCQCAMKAI4IgcgBigCACIPSwRAIAchCAwBCyAHIA9BAWoiCEkEQCAIIAciBmshDSANIAwoAjAgBmtLBEAgDEEwaiAGIA1BBEEIEPYGIAwoAjghBgsgDCgCNCAGQQN0aiEIIA1BAk8EQCAPIAdrIglBB3EhCiAHIA9rQXhNBEAgCUF4cSEHA0AgCEL/////DzcCACAIQThqQv////8PNwIAIAhBMGpC/////w83AgAgCEEoakL/////DzcCACAIQSBqQv////8PNwIAIAhBGGpC/////w83AgAgCEEQakL/////DzcCACAIQQhqQv////8PNwIAIAhBQGshCCAHQQhrIgcNAAsLIAoEQANAIAhC/////w83AgAgCEEIaiEIIApBAWsiCg0ACwsgBiANakEBayEGCyAIQv////8PNwIAIAZBAWohCAsgDCAINgI4CyAIIA9NDQEgDCgCNCAPQQN0aiIGIBU2AgQgBiALNgIACyAlIBEpAgQ3AgAgJUEIaiARQQxqKAIANgIAIBFBgANqJAAMAQsgDyAIQcSJwgAQiAsACyAUKALgAiIGBEAgFCgC5AIgBkEDdEEEEIgPC0EAIQcjAEEQayIOJAACQCAZIBcoAjhPDQAgISAXKAI0IBlBFGxqIgYoAgBHDQAgBigCDCETIA5BADYCDCAOQoCAgIDAADcCBEJ/ISkgFygCICATSwRAIBcoAhwgE0EEdGopAgghKQsgFygCLCESIBcoAighD0EEIQkCQAJAA0ACfiASICmnIgZNBEAgKUL/////D4MhKiApQiCIpyEIAkADQCASIAgiBk0NASAPIAZBBHRqIgsoAgQhCCALKAIIIBNGDQALIAitQiCGICqEDAILIA4oAgQhCyAHBEAgCSAHQQN0aiEIIAkhBgNAIBcgBigCACAGQQRqKAIAQQEQLyAIIAZBCGoiBkcNAAsLIAtFDQUgCSALQQN0QQQQiA8MBQsgDyAGQQR0ajUCACApQoCAgIBwg4QLISkgFygCLCAGSwRAIBcoAiggBkEEdGoiBigCCCILIBcoAiAiCE8NAiAGKAIMIgYgCE8NAyAXKAIcIgggBkEEdGoiBigCBCEMIAYoAgAhDSAIIAtBBHRqIgYoAgAhCyAGKAIEIQggDigCBCAHRgRAIA5BBGpB+L7CABC4CCAOKAIIIQkLIAkgB0EDdGoiBiAMNgIEIAYgDTYCACAOIAdBAWoiBzYCDCAXIAsgCBDkAyAXIA0gDBDkAwwBCwtB+K7CABCRDwALIAsgCEGIr8IAEIgLAAsgBiAIQZivwgAQiAsACyAOQRBqJAAgGCAbNgIEIBggJzYCACAYQQhqIBRBEGpB0AL8CgAAIBggIzYC4AIgGCAkNgLcAiAYICY2AtgCIBggFCkDADcC5AIgGEHsAmogFEEIaigCADYCAAsgFEGABGokAAJAIBAoApgDIghBgICAgHhGDQAgECgC9AIiBgRAIAZBMEEEEIgPCyAIRQ0AIBAoApwDIAhBA3RBBBCIDwsgBUEANgIAICAgICgCAEEBayIFNgIAIAVFBEAgEEE8ahDqDAsgBEEANgIAIB8gHygCAEEBayIENgIAIARFBEAgEEEwahDwDAsgA0EANgIAIB4gHigCAEEBayIDNgIAIANFBEAgEEEkahDvDAsgAkEANgIAIB0gHSgCAEEBayICNgIAIAJFBEAgEEEYahDuDAsgAEEANgIAIBwgHCgCAEEBayIANgIAIABFBEAgEEEMahDrDAsgEEGwA2okAA8LEJsPCwALEJwPAAuBBQICfw19IwBBQGoiBCQAIAIqAgAiByAHlCACKgIIIgggCJSSkSEJIAEqAgQhCgJAAkACQCACKgIEIgsgASoCACIGjCIMXSAJIApfcUUEQCAEQQA2AhAgBCAGOAIMIARBADYCCCAEIApDAAAAACAIIAmVIAlDAAAANF8iARuUIg04AhwgBCAKQwAAgD8gByAJlSABG5QiCTgCFCAEIAw4AhggBEEkaiIBIARBCGogAhDjAyAEQSJqIgUgAUEPai0AADoAACAEIAQvADE7ASAgBC0AMCEBIAQqAiwhCiAEKgIoIQ4gBCoCJCEPIAsgDGBFDQIgBiALYEUNAiAMIAaTIhBDAAAAAJQhESALIAaTIhIgCZQgByAQlJMgBkMAAADAlCIGIAmUIBGTlCAQIAiUIBIgDZSTIBEgBiANlJOUIAcgDZQgCCAJlJMgDUMAAAAAlCAJQwAAAACUk5SSkkMAAAAAYEUNAiADDQEgDyAHkyIGIAaUIA4gC5MiBiAGlJIgCiAIkyIGIAaUkiAIIAiTIgYgBpQgByAHkyIGIAaUIAwgC5MiCyALlJKSXkUEQCAAQQE6AAwgACAKOAIIIAAgDjgCBCAAIA84AgAgACAELwEgOwANIABBD2ogBS0AADoAAAwECyAAIAg4AgggACAMOAIEIAAgBzgCACAAQQE6AAwMAwsgACAIOAIIIAAgDDgCBCAAIAc4AgAgAEEAOgAMDAILIABBAToADCAAIAIpAgA3AgAgAEEIaiACQQhqKAIANgIADAELIAAgAToADCAAIAo4AgggACAOOAIEIAAgDzgCACAAIAQvASA7AA0gAEEPaiAFLQAAOgAACyAEQUBrJAALygQBE30gAyoCACACKgIQIhWTIgYgAioCBCINlCADKgIEIAIqAhQiFpMiEyACKgIAIg6UkyIFIAWSIQggEyACKgIIIg+UIAMqAgggAioCGCIXkyIFIA2UkyIJIAmSIRAgBSACKgIMIhEgCJQgDSAQlCAOIAUgDpQgBiAPlJMiBSAFkiIUlJOSkiEFIAYgESAQlCAPIBSUIA0gCJSTkpIiCSAJlCAFIAWUkpEiCkMAAAA0XyECIAEqAgQiC0MAAAAAIAUgCpUgAhuUIQwgC0MAAIA/IAkgCpUgAhuUIRICQAJAAkACQAJAAkACQAJAIAEqAgAiB4wiBiATIBEgFJQgDiAIlCAPIBCUk5KSIghfRQ0AIAcgCGBFDQAgCiALXw0BCyAHIAhdDQFBACECIAYgCF4NAgwFC0EBIQIgBEUNAyAIIQYMBQtBACECIAogC18NASAMIQUgByEGIBIhCQwECyAKIAtfDQMgDCEFIBIhCQwDCyAHIQYMAgsgCyAKkyEKAkAgByAIkyILIAcgCJIiEF1FDQAgCiALXkUNACAHIQYMAgsgCyAQXkUNACAKIBBeDQELIAwhBSAIIQYgEiEJCyAAIAI6AAwgACAXIAUgESAOIAaUIA0gCZSTIgcgB5IiB5QgDiAPIAmUIA4gBZSTIgwgDJIiDJQgDSANIAWUIA8gBpSTIgUgBZIiBZSTkpKSOAIIIAAgFiAGIBEgDJQgDyAFlCAOIAeUk5KSkjgCBCAAIBUgCSARIAWUIA0gB5QgDyAMlJOSkpI4AgAL6gQCBH8KfQJAIAEoAggiBUUNACACKgIIIQcgAioCBCEIIAIqAgAhCSABKAIEIgQhAyAFQQxsIgVBDGsiBkEMbkEBcUUEQCADIAkgAyoCAJQ4AgAgAyAIIAMqAgSUOAIEIAMgByADKgIIlDgCCCADQQxqIQMLIAZBDEkNACAEIAVqIQUDQCADIAkgAyoCAJQ4AgAgA0EEaiIEIAggBCoCAJQ4AgAgA0EIaiIEIAcgBCoCAJQ4AgAgA0EMaiIEIAkgBCoCAJQ4AgAgA0EQaiIEIAggBCoCAJQ4AgAgA0EUaiIEIAcgBCoCAJQ4AgAgBSADQRhqIgNHDQALCyABKAIgIgMEQCADQRRsIQUgASgCHEEIaiEDIAIqAgghDSACKgIEIQ4gAioCACEPA0AgAyADKgIAIgcgD5QiCiAKlCADQQRqIgQqAgAiCCAOlCILIAuUkiADQQhqIgYqAgAiCSANlCIMIAyUkiIQQwAAAABeBH0gDCAQkSIHlSEJIAsgB5UhCCAKIAeVBSAHCzgCACAGIAk4AgAgBCAIOAIAIANBFGohAyAFQRRrIgUNAAsLIAEoAiwiBQRAIAEoAihBEGohAyAFQQV0IQUgAioCCCENIAIqAgQhDiACKgIAIQ8DQCADIAMqAgAiByAPlCIKIAqUIANBBGoiAioCACIIIA6UIgsgC5SSIANBCGoiBCoCACIJIA2UIgwgDJSSIhBDAAAAAF4EfSAMIBCRIgeVIQkgCyAHlSEIIAogB5UFIAcLOAIAIAQgCTgCACACIAg4AgAgA0EgaiEDIAVBIGsiBQ0ACwsgACABQeAA/AoAAAvIBAISfQZ/AkAgACgChAEiFEUNACAAKgKYASIFIAEqAgAiCJQgACoClAEiCyABKgIEIgmUkyIGIAaSIQIgCyABKgIIIgaUIAAqApwBIgMgCJSTIgogCpIhBCAAKgKQASINIAMgASoCDCIKIAKUIAggBJQgCSADIAmUIAUgBpSTIgMgA5IiA5STkpKUIAAqAogBIg4gCyAKIAOUIAkgApQgBiAElJOSkpQgACoCjAEiCyAFIAogBJQgBiADlCAIIAKUk5KSlJKSQwX2f79eDQAgFEEGdCEWIAEqAhghDyABKgIUIRAgASoCECERIAAoAoABIRdBACEBA0AgASAXaiIAQRhqIRQgCCAAQRBqKgIAIgWUIAkgAEEMaioCACIDlJMiAiACkiECIAYgA5QgCCAAQRRqKgIAIgeUkyIEIASSIQQgFCoCACANIA8gByAKIAKUIAggBJQgCSAJIAeUIAYgBZSTIgcgB5IiB5STkpKSIgwgAEEIaiIYKgIAIhKTlCAOIBEgAyAKIAeUIAkgApQgBiAElJOSkpIiAyAAKgIAIhOTlCALIBAgBSAKIASUIAYgB5QgCCAClJOSkpIiBCAAQQRqIhkqAgAiBZOUkpIiApRDAAAAAF0NASAMIA0gApSTIgcgEpMiDCAMlCADIA4gApSTIgMgE5MiDCAMlCAEIAsgApSTIgQgBZMiBSAFlJKSQ703hjVeDQEgACADOAIAIBQgAjgCACAYIAc4AgAgGSAEOAIAIBYgAUFAayIBRw0AC0EBIRULIBULwAQCEn0GfwJAIAAoAkgiFEUNACAAKgJcIgUgASoCACIIlCAAKgJYIgsgASoCBCIJlJMiBiAGkiECIAsgASoCCCIGlCAAKgJgIgMgCJSTIgogCpIhBCAAKgJUIg0gAyABKgIMIgogApQgCCAElCAJIAMgCZQgBSAGlJMiAyADkiIDlJOSkpQgACoCTCIOIAsgCiADlCAJIAKUIAYgBJSTkpKUIAAqAlAiCyAFIAogBJQgBiADlCAIIAKUk5KSlJKSQwX2f79eDQAgFEEkbCEWIAEqAhghDyABKgIUIRAgASoCECERIAAoAkQhF0EAIQEDQCABIBdqIgBBGGohFCAIIABBEGoqAgAiBZQgCSAAQQxqKgIAIgOUkyICIAKSIQIgBiADlCAIIABBFGoqAgAiB5STIgQgBJIhBCAUKgIAIA0gDyAHIAogApQgCCAElCAJIAkgB5QgBiAFlJMiByAHkiIHlJOSkpIiDCAAQQhqIhgqAgAiEpOUIA4gESADIAogB5QgCSAClCAGIASUk5KSkiIDIAAqAgAiE5OUIAsgECAFIAogBJQgBiAHlCAIIAKUk5KSkiIEIABBBGoiGSoCACIFk5SSkiIClEMAAAAAXQ0BIAwgDSAClJMiByASkyIMIAyUIAMgDiAClJMiAyATkyIMIAyUIAQgCyAClJMiBCAFkyIFIAWUkpJDvTeGNV4NASAAIAM4AgAgFCACOAIAIBggBzgCACAZIAQ4AgAgFiABQSRqIgFHDQALQQEhFQsgFQuPBQEIfyMAQeAAayIEJAACQAJAAkAgAEUNACAAQQhrIgooAgBBAWohBSAKIAU2AgAgBUUNASAAKAIAIgVBf0YNAiAAIAVBAWo2AgAgBCAKNgIIIAQgADYCBCAEIABBBGo2AgAgAUUNACABQQhrIgUoAgBBAWohBiAFIAY2AgAgBkUNASABKAIAIgZBf0YNAiABIAZBAWo2AgAgBCAFNgIUIAQgATYCECAEIAFBBGoiCDYCDCACRQ0AIAJBCGsiBigCAEEBaiEHIAYgBzYCACAHRQ0BIAIoAgAiB0F/Rg0CIAIgB0EBajYCACAEIAY2AiAgBCACNgIcIAQgAkEEaiILNgIYIANFDQAgA0EIayIHKAIAQQFqIQkgByAJNgIAIAlFDQEgAygCACIJQX9GDQIgAyAJQQFqNgIAIAQgBzYCLCAEIAM2AiggBCADQQRqNgIkIARBMGoiCUEIaiALQQhqKQIANwMAIAQgCykCADcDMCAEQcgAaiAIQQhqKAIANgIAIAQgCCkCADcDQCAEQdAAaiIIQQhqIANBDGooAgA2AgAgBCADKQIENwNQIAAoAgQgACgCCCILKAIIQQFrQXhxakEIaiAJIAggCygCSBEFACEIIAMgAygCAEEBazYCACAHIAcoAgBBAWsiAzYCACADRQRAIARBLGoQqA0LIAIgAigCAEEBazYCACAGIAYoAgBBAWsiAjYCACACRQRAIARBIGoQqw0LIAEgASgCAEEBazYCACAFIAUoAgBBAWsiATYCACABRQRAIARBFGoQqA0LIAAgACgCAEEBazYCACAKIAooAgBBAWsiADYCACAARQRAIARBCGoQ4wsLIARB4ABqJAAgCA8LEJsPCwALEJwPAAvgBAEGfwJAAkAgACgCCCIHQYCAgMABcUUNAAJAAkACQAJAIAdBgICAgAFxBEAgAC8BDiIDDQFBACECDAILIAJBEE8EQCABIAIQjwIhAwwECyACRQRAQQAhAgwECyACQQNxIQYCQCACQQRJBEAMAQsgAkEMcSEIA0AgAyABIAVqIgQsAABBv39KaiAEQQFqLAAAQb9/SmogBEECaiwAAEG/f0pqIARBA2osAABBv39KaiEDIAggBUEEaiIFRw0ACwsgBkUNAyABIAVqIQQDQCADIAQsAABBv39KaiEDIARBAWohBCAGQQFrIgYNAAsMAwsgASACaiEIQQAhAiABIQQgAyEFA0AgBCIGIAhGDQICfyAGQQFqIAYsAAAiBEEATg0AGiAGQQJqIARBYEkNABogBkEDaiAEQXBJDQAaIAZBBGoLIgQgBmsgAmohAiAFQQFrIgUNAAsLQQAhBQsgAyAFayEDCyAALwEMIgQgA00NACAEIANrIQZBACEDQQAhBQJAAkACQCAHQR12QQNxQQFrDgIAAQILIAYhBQwBCyAGQf7/A3FBAXYhBQsgB0H///8AcSEIIAAoAgQhByAAKAIAIQADQCADQf//A3EgBUH//wNxSQRAQQEhBCADQQFqIQMgACAIIAcoAhARAwBFDQEMAwsLQQEhBCAAIAEgAiAHKAIMEQUADQFBACEDIAYgBWtB//8DcSEBA0AgA0H//wNxIgIgAUkhBCABIAJNDQIgA0EBaiEDIAAgCCAHKAIQEQMARQ0ACwwBCyAAKAIAIAEgAiAAKAIEKAIMEQUAIQQLIAQLwwQBE30gAyoCACACKgIQIhSTIgcgAioCBCILlCADKgIEIAIqAhQiFZMiESACKgIAIgyUkyIFIAWSIQ4gESACKgIIIg2UIAMqAgggAioCGCIWkyIEIAuUkyIFIAWSIQ8gBCACKgIMIhIgDpQgCyAPlCAMIAQgDJQgByANlJMiBSAFkiIIlJOSkiEJIAcgEiAPlCANIAiUIAsgDpSTkpIiCiAKlCAJIAmUkpEiEEMAAAA0XyECIAEqAgQiE0MAAAAAIAkgEJUgAhuUIQcgE0MAAIA/IAogEJUgAhuUIQQCQAJAAkACQAJAAkACQAJAIAEqAgAiBowiBSARIBIgCJQgDCAOlCANIA+Uk5KSIghfRQ0AIAYgCGBFDQAgECATXw0BCyAGIAhdDQFBACECIAUgCF4NAgwFCyATIBCTIQ5BASECIAYgCJMiDyAGIAiSIhFdRQ0DIA4gD15FDQMgBiEFDAULQQAhAiAQIBNfDQEgByEJIAYhBSAEIQoMBAsgECATXw0DIAchCSAEIQoMAwsgBiEFDAILIA8gEV5FDQAgDiARXg0BCyAHIQkgCCEFIAQhCgsgAEEDNgIQIAAgAjoADCAAIBYgCSASIAwgBZQgCyAKlJMiBCAEkiIGlCAMIA0gCpQgDCAJlJMiBCAEkiIHlCALIAsgCZQgDSAFlJMiBCAEkiIElJOSkpI4AgggACAVIAUgEiAHlCANIASUIAwgBpSTkpKSOAIEIAAgFCAKIBIgBJQgCyAGlCANIAeUk5KSkjgCAAuSIwMXfxF9AX4jAEHAAWsiByQAIwBB8ABrIhAkAAJAAkAgAioCACIdIAIqAgQiI1wNACACKgIIIhsgHVwNACAbICNcDQAgB0GAgICAeDYCACAHIB2LIAEqAhiUOAIcIAcgHSABKgIUlDgCGCAHIB0gASoCEJQ4AhQgByAdIAEqAgyUOAIQIAcgHSABKgIIlDgCDCAHIB0gASoCBJQ4AgggByAdIAEqAgCUOAIEDAELIBBBEGohFyMAQUBqIgQkACABIhkqAhghHiABKgIIISAgASoCFCEhIAEqAgAhJCABKgIMISUgASoCBCEfIAEqAhAhJiAEQQA2AjwgBEKAgICAwAA3AjQgAyIIQQF2IQUCQCADQQJPBEBD2w/JQCADs5UhJ0PbD8k/IAWzlSEoQQQhBgNAIBwQ8QEhKSAcEPQBISIgCARAIBFBDGwhAUMAAAAAIRsgCCEDA0AgIiAbEPEBlCEqICIgGxD0AZQhKyAEKAI0IBFGBEAgBEE0akGQ+MMAEJMIIAQoAjghBgsgASAGaiIOICs4AgAgDkEIaiAqOAIAIA5BBGogKTgCACAEIBFBAWoiETYCPCABQQxqIQEgJyAbkiEbIANBAWsiAw0ACwsgKCAckiEcIAUgCUEBaiIJRw0ACyARIAQoAjRHDQELIARBNGpBsPfDABCTCAtBACEJIAQoAjgiDiARQQxsaiIBQQA2AgggAUKAgICAgICAwD83AgAgBEEANgIUIARCgICAgMAANwIMAkACQAJAIAVBAWsiFkUEQEEEIQMMAQsgCEUNASAIQQFrIQpBBCEDA0AgCgRAIAlBDGwhBUEBIQ8gCyEBA0AgASAIaiIYQQFqIQwgBCgCDCIGIAkiEkYEQCAEQQxqQZD5wwAQkwggBCgCDCEGIAQoAhAhAwsgAyAFaiIJIAw2AgAgCUEIaiABNgIAIAlBBGogAUEBaiITNgIAIAQgEkEBaiIJNgIUIAYgCUYEQCAEQQxqQaD5wwAQkwggBCgCECEDCyADIAVqIgZBFGogDDYCACAGQRBqIBg2AgAgBkEMaiABNgIAIAQgCUEBaiIJNgIUIAVBGGohBSATIQEgCCAPQQFqIg9HDQALIBJBAmohCQsgDUEBaiIBIAhsIQYgCCANbCISIApqIQ0gBCgCDCIPIAlGBEAgBEEMakGQ+cMAEJMIIAQoAgwhDwsgBiAKaiETIAQoAhAiAyAJQQxsaiIFIA02AgggBSASNgIEIAUgBjYCACAEIAlBAWoiBTYCFCAFIA9GBEAgBEEMakGg+cMAEJMIIAQoAhAhAwsgAyAFQQxsaiIFIAY2AgggBSATNgIEIAUgDTYCACAEIAlBAmoiCTYCFCAIIAtqIQsgFiABIg1HDQALCwJAIAgEQCAIIBZsIQsgCEEBayISBEAgCUEMbCEBIBIhBiALIQUDQCAEKAIMIAlGBEAgBEEMakHw+MMAEJMIIAQoAhAhAwsgASADaiINIAU2AgAgDUEIaiAFQQFqIgU2AgAgDUEEaiARNgIAIAQgCUEBaiIJNgIUIAFBDGohASAGQQFrIgYNAAsLIBFBAWohCiAEKAIMIAlGBEAgBEEMakHQ+MMAEJMIIAQoAhAhAwsgAyAJQQxsaiIBIAs2AgggASARNgIEIAEgCyASajYCACAOIApBDGxqIQwgBCgCNCEYAkAgCgRAIA4hASARQQxsIgNBDG5BAXFFBEAgASABKgIAQwAAAD+UOAIAIAEgASoCBEMAAAA/lDgCBCABIAEqAghDAAAAP5Q4AgggAUEMaiEBCyADQQxPBEADQCABIAEqAgBDAAAAP5Q4AgAgAUEEaiIDIAMqAgBDAAAAP5Q4AgAgAUEIaiIDIAMqAgBDAAAAP5Q4AgAgAUEMaiIDIAMqAgBDAAAAP5Q4AgAgAUEQaiIDIAMqAgBDAAAAP5Q4AgAgAUEUaiIDIAMqAgBDAAAAP5Q4AgAgDCABQRhqIgFHDQALCyAEKAIQIQ0gBCgCDCEWIApBDGwiD0EEELMOIgsNAUEEIA9B2NXCABDTDQALIAQoAhAhDSAEKAIMIRZBBCELQQAhDwsgCUEBaiEGIA9FIhpFBEAgCyAOIA/8CgAACyAEIAo2AhQgBCALNgIQIAQgCjYCDCAGrUIMfiIspyEBQQAhBSAsQiCIpw0BIAFB/P///wdLDQECQCABRQRAQQQhA0EAIRMMAQtBBCEFIAYhEyABQQQQsw4iA0UNAgsgAQRAIAMgDSAB/AoAAAsgBCAGNgIwIAQgAzYCLCAEIBM2AigCQCAGRQ0AIAMhASAJQQxsIhRBDG4iBUEDcUEDRwRAIAVBAWpBA3EhBQNAIAEgASkCAEIgiTcCACABQQxqIQEgBUEBayIFDQALCyAUQSRJDQAgAyAGQQxsaiEFA0AgASABKQIAQiCJNwIAIAFBDGoiFCAUKQIAQiCJNwIAIAFBGGoiFCAUKQIAQiCJNwIAIAFBJGoiFCAUKQIAQiCJNwIAIAUgAUEwaiIBRw0ACwsCQCAKRQ0AIB4gHpIhGyAlICSTIhwgHJQgJiAfkyIcIByUkiAhICCTIhwgHJSSkUMAAAA/lCIcIBySQwAAAD+UIRwgDiEBIBFBDGwiBUEMbiIUQQFxRQRAIAEgGyABKgIAlDgCACABIBsgASoCCJQ4AgggASAcIBsgASoCBJSSOAIEIAFBDGohAQsgBUEMTwRAA0AgASAbIAEqAgCUOAIAIAFBCGoiFSAbIBUqAgCUOAIAIAFBDGoiFSAbIBUqAgCUOAIAIAFBFGoiFSAbIBUqAgCUOAIAIAFBBGoiFSAcIBsgFSoCAJSSOAIAIAFBEGoiFSAcIBsgFSoCAJSSOAIAIAwgAUEYaiIBRw0ACwsgG4whHiALIQEgFEEBcUUEQCABIBsgASoCAJQ4AgAgASAbIAEqAgiUOAIIIAEgASoCBCAelCAckzgCBCABQQxqIQELIAVBDEkNACALIApBDGxqIQUDQCABIBsgASoCAJQ4AgAgAUEIaiIMIBsgDCoCAJQ4AgAgAUEMaiIMIBsgDCoCAJQ4AgAgAUEUaiIMIBsgDCoCAJQ4AgAgAUEEaiIMIAwqAgAgHpQgHJM4AgAgAUEQaiIMIAwqAgAgHpQgHJM4AgAgBSABQRhqIgFHDQALCwJAIAZFDQAgDSEBIAlBDGwiBUEMbkEBcUUEQCABIAEoAgAgCmo2AgAgASABKAIEIApqNgIEIAEgASgCCCAKajYCCCABQQxqIQELIAVBDEkNACANIAZBDGxqIQUDQCABIAEoAgAgCmo2AgAgAUEEaiIMIAwoAgAgCmo2AgAgAUEIaiIMIAwoAgAgCmo2AgAgAUEMaiIMIAwoAgAgCmo2AgAgAUEQaiIMIAwoAgAgCmo2AgAgAUEUaiIMIAwoAgAgCmo2AgAgBSABQRhqIgFHDQALC0EAIQEgCgRAIARBDGogCiAKQQRBDBDjBiAEKAIQIQsgBCgCFCEBCyAaRQRAIAsgAUEMbGogDiAP/AoAAAsgBCABIApqNgIUIBgEQCAOIBhBDGxBBBCIDwsgBkEMbCELIAYiASATIAFrSwRAIARBKGogASABQQRBDBDjBiAEKAIsIQMgBCgCMCEBCyALBEAgAyABQQxsaiANIAv8CgAACyAEIAEgBmoiBjYCMCAWBEAgDSAWQQxsQQQQiA8LIBIEQCAJQQxsIQUgAUEMbCENQQEhAQNAIAEgEWoiE0EBaiEOIAYiCyAEKAIoIg9GBEAgBEEoakGQ+cMAEJMIIAQoAighDyAEKAIsIQMLIAMgDWogBWoiBkEUaiABQQFrIhY2AgAgBkEQaiABNgIAIAZBDGogDjYCACAEIAtBAWoiBjYCMCAGIA9GBEAgBEEoakGg+cMAEJMIIAQoAiwhAwsgAyANaiAFaiIJQSBqIA42AgAgCUEcaiATNgIAIAlBGGogFjYCACAEIAZBAWoiBjYCMCAFQRhqIQUgCCABQQFqIgFHDQALIAtBAmohBgsgBiAEKAIoIgVGBEAgBEEoakGQ+cMAEJMIIAQoAighBQsgBCgCLCIBIAZBDGxqIgMgEjYCCCADQQA2AgQgAyAKNgIAIAQgBkEBaiIDNgIwIAMgBUYEQCAEQShqQaD5wwAQkwggBCgCLCEBCyABIANBDGxqIgEgCjYCCCABIAggEWo2AgQgASASNgIAIAQgBkECajYCMCAEKAIMIQggBCgCECEDIAQoAhQhBiAEQQxqIBkQnwUgBgRAIAMgBkEMbGohCyAEKgIkISYgBCoCICEnIAQqAhwhKCAEKgIYISIgBCoCFCEbIAQqAhAhHCAEKgIMIR4gAyEBA0AgHiABQQRqIg0qAgAiJJQgHCABKgIAIiWUkyIgICCSISAgGyAllCAeIAFBCGoiDioCACIflJMiISAhkiEhIA4gJiAfICIgIJQgHiAhlCAcIBwgH5QgGyAklJMiHyAfkiIflJOSkpI4AgAgDSAnICQgIiAhlCAbIB+UIB4gIJSTkpKSOAIAIAEgKCAlICIgH5QgHCAglCAbICGUk5KSkjgCACALIAFBDGoiAUcNAAsLIBcgBjYCCCAXIAM2AgQgFyAINgIAIBcgBCkCKDcCDCAXQRRqIARBMGooAgA2AgAgBEFAayQADAMLQaD4wwBBHUHg+MMAENYMAAsgBSABQdjVwgAQ0w0AC0Gg+MMAQR1BwPjDABDWDAALIBBBCGogF0EIaigCACIINgIAIBAgECkCEDcDACAQKAIcIQMgECgCICEGIBAoAiQhCwJAIAhFDQAgAioCCCEbIBAoAgQiAiEBIAhBDGwiCEEMayINQQxuQQFxRQRAIAEgASoCCCAblDgCCCABICMgASoCBJQ4AgQgASAdIAEqAgCUOAIAIAFBDGohAQsgDUEMSQ0AIAIgCGohAgNAIAEgHSABKgIAlDgCACABQQhqIgggCCoCACAblDgCACABQQRqIgggIyAIKgIAlDgCACABQQxqIgggHSAIKgIAlDgCACABQRBqIgggIyAIKgIAlDgCACABQRRqIgggCCoCACAblDgCACACIAFBGGoiAUcNAAsLIBBBEGoiASAQIAYgCxA+IBAoAhBBgICAgHhHBEAgByABQeAA/AoAACADRQ0BIAYgA0EMbEEEEIgPDAELIAdBgYCAgHg2AgAgA0UNACAGIANBDGxBBBCIDwsgEEHwAGokAAJAAkACQCAHKAIAIgJBgYCAgHhHBEAgB0GgAWoiAUEYaiIGIAdBHGooAgA2AgAgAUEQaiIIIAdBFGopAgA3AwAgAUEIaiILIAdBDGopAgA3AwAgB0HgAGoiAUEIaiINIAdBKGopAgA3AwAgAUEQaiIOIAdBMGopAgA3AwAgAUEYaiIJIAdBOGopAgA3AwAgB0GAAWoiBSAHQUBrKQIANwMAIAFBKGoiEiAHQcgAaikCADcDACABQTBqIhMgB0HQAGopAgA3AwAgAUE4aiIBIAdB2ABqKQIANwMAIAcgBykCBDcDoAEgByAHKQIgNwNgIAJBgICAgHhHBEBB4ABBBBCzDiIDRQ0DIAMgAjYCACADIAcpA6ABNwIEIAMgBykDYDcCICADQQxqIAspAwA3AgAgA0EUaiAIKQMANwIAIANBHGogBigCADYCACADQShqIA0pAwA3AgAgA0EwaiAOKQMANwIAIANBOGogCSkDADcCACADQUBrIAUpAwA3AgAgA0HIAGogEikDADcCACADQdAAaiATKQMANwIAIANB2ABqIAEpAwA3AgBBsJvDACECDAILQRxBBBCzDiIDRQ0DIAMgBykDoAE3AgAgA0EYaiAHQaABaiIBQRhqKAIANgIAIANBEGogAUEQaikDADcCACADQQhqIAFBCGopAwA3AgBB+J7DACECDAELQQAhAwsgACACNgIEIAAgAzYCACAHQcABaiQADwtBBEHgAEGQxMQAKAIAIgBBzAggABsRAAAAC0EEQRxBkMTEACgCACIAQcwIIAAbEQAAAAv4BAIFfxB9AkACQAJAAkACQAJAIAEvAaABQZABcUGQAUcNACABKAI8IgMgAk0NASABKAI4IAJBDGxqIgQoAgAiBSABKAIwIgNPDQIgAyAEKAIEIgdNDQMgBCgCCCIEIANPDQQgASgCQEGAgICAeEYNACABKAJUIgMgAk0NBSABKAIsIgMgBEEMbGoiBCoCBCADIAVBDGxqIgUqAgQiCJMiDCADIAdBDGxqIgMqAgAgBSoCACIKkyINlCAEKgIAIAqTIgogAyoCBCAIkyILlJMiCCAIlCAEKgIIIAUqAggiCZMiDiALlCAMIAMqAgggCZMiC5STIgwgDJQgCiALlCAOIA2UkyIKIAqUkpIiFEMAAIAoXkUNACABKAJQIAJBJGxqIgEqAgAiDSANlCABKgIEIgsgC5SSIAEqAggiCSAJlJIiFUPMvIwrXkUNACABKgIMIg4gDpQgASoCECIPIA+UkiABKgIUIhAgEJSSIhZDzLyMK15FDQAgASoCGCIRIBGUIAEqAhwiEiASlJIgASoCICITIBOUkiIXQ8y8jCteRQ0AIAAgCSAVkSIJlTgCGCAAIAsgCZU4AhQgACANIAmVOAIQIAAgCCAUkSIIlTgCDCAAIAogCJU4AgggACAMIAiVOAIEIAAgEyAXkSIIlTgCMCAAIBIgCJU4AiwgACARIAiVOAIoIAAgECAWkSIIlTgCJCAAIA8gCJU4AiAgACAOIAiVOAIcQQEhBgsgACAGNgIADwsgAiADQbzMwwAQiAsACyAFIANBzMzDABCICwALIAcgA0HczMMAEIgLAAsgBCADQezMwwAQiAsACyACIANB/MzDABCICwAL0wQCBn0GfyMAQSBrIgokACABKAIIIggEQCABKAIEIgEgCEEMbCILaiEMIAEqAghEAAAAAAAA8D8gCLijtiIClCEDIAEqAgQgApQhBCABKgIAIAKUIQUCQCAIQQFGDQAgAUEMaiEIAkAgC0EYayINQQxuQQFxBEAgCCEJIAEhCAwBCyABQRhqIQkgAyABKgIUIAKUkiEDIAQgASoCECAClJIhBCAFIAEqAgwgApSSIQULIA1BDEkNAANAIAMgCCoCFCAClJIgCUEUaioCACAClJIhAyAEIAgqAhAgApSSIAlBEGoqAgAgApSSIQQgBSAJKgIAIAKUkiAJQQxqIggqAgAgApSSIQUgDCAJQRhqIglHDQALCwJAIAtBDGsiCEEMbkEBcQRAQwAAAAAhAgwBCyAFIAEqAgCTIgIgApQgBCABKgIEkyICIAKUkiADIAEqAgiTIgIgApSSIgJDAAAAACACQwAAAABeGyECIAFBDGohAQsgCEEMTwRAA0AgBSABQQxqKgIAkyIGIAaUIAQgAUEQaioCAJMiBiAGlJIgAyABQRRqKgIAkyIGIAaUkiIGIAUgASoCAJMiByAHlCAEIAFBBGoqAgCTIgcgB5SSIAMgAUEIaioCAJMiByAHlJIiByACIAIgB10bIgIgAiAGXRshAiAMIAFBGGoiAUcNAAsLIAAgAzgCCCAAIAQ4AgQgACAFOAIAIAAgApE4AgwgCkEgaiQADwsgCkEANgIYIApBATYCDCAKQYD8wwA2AgggCkIENwIQIApBCGpBiPzDABC4DQAL0wQBCX8jAEEQayIHJAACfwJAIAIoAgQiA0UNACAAIAIoAgAgAyABKAIMEQUARQ0AQQEMAQsgAigCDCIDBEAgA0EMbCACKAIIIgNqIQkgB0EMaiEKA0ACQAJAAkACQCADLwEAQQFrDgICAQALAkAgAygCBCICQcEATwRAIAFBDGooAgAhBANAQQEgAEG1rMQAQcAAIAQRBQANCBogAkFAaiICQcAASw0ACwwBCyACRQ0DCyAAQbWsxAAgAiABQQxqKAIAEQUARQ0CQQEMBQsgACADKAIEIAMoAgggAUEMaigCABEFAEUNAUEBDAQLIAMvAQIhAiAKQQA6AAAgB0EANgIIAkAgAkUEQEEBIQgMAQsgAkH2/xdqIAJBnP8fanEgAkGY+DdqIAJB8LEfanFzIgRBEXZBAWohCCAEQYCAKEkNACAIQQVB+KzEABCPDwALIAdBCGoiBCAIaiIGQQFrIgUgAiACQQpuIgtBCmxrQTByOgAAAkAgBCAFRg0AIAZBAmsiBSALQQpwQTByOgAAIAQgBUYNACAGQQNrIgUgAkHkAG5BCnBBMHI6AAAgBCAFRg0AIAZBBGsiBSACQegHbkEKcEEwcjoAACAEIAVGDQAgBkEFayIFIAJBkM4AbkEwcjoAACAEIAVGDQAgBkEGayICQTA6AAAgAiAERg0AIAZBB2siAkEwOgAAIAIgBEYNACAGQQhrQTA6AAALIAAgB0EIaiAIIAFBDGooAgARBQBFDQBBAQwDCyAJIANBDGoiA0cNAAsLQQALIQIgB0EQaiQAIAILhwUCBX8EfSMAQRBrIgIkAAJAIAEoAgQiA0UEQEECIQEMAQsgASADQQFrNgIEIAIgASgCACIBNgIAAkAgAAJ/IAEoAgQiBUEDTQRAIAJBADoACyACQSU7AAkgAkEANgIMIAJBAToACCACQQhqEKINDAELIAEgBUEEayIGNgIEIAEgASgCACIDQQRqNgIAIAZBA00EQCACQQA6AAsgAkElOwAJIAJBADYCDCACQQE6AAggAkEIahCiDQwBCyADKAAAIQYgASAFQQhrIgQ2AgQgASADQQhqNgIAIARBA00EQCACQQA6AAsgAkElOwAJIAJBADYCDCACQQE6AAggAkEIahCiDQwBCyADKgAEIQcgASAFQQxrIgQ2AgQgASADQQxqNgIAIARBA00EQCACQQA6AAsgAkElOwAJIAJBADYCDCACQQE6AAggAkEIahCiDQwBCyADKgAIIQggASAFQRBrIgQ2AgQgASADQRBqNgIAIARBA00EQCACQQA6AAsgAkElOwAJIAJBADYCDCACQQE6AAggAkEIahCiDQwBCyADKgAMIQkgASAFQRRrIgQ2AgQgASADQRRqNgIAIAJBATYCBCAEQQNNBEAgAkEAOgALIAJBJTsACSACQQA2AgwgAkEBOgAIIAJBCGoQog0MAQsgAyoAECEKIAEgBUEYazYCBCABIANBGGo2AgAgAygAFCEDIAJBCGogAhDqCCACLQAIBEAgAigCDAwBCyACLQAJIgFBAkcNAUEGQfSxwQBBhKvBABC+Cgs2AgBBAyEBDAELIAAgAzYCFCAAIAo4AhAgACAJOAIMIAAgCDgCCCAAIAc4AgQgACAGNgIACyAAIAE6ABggAkEQaiQAC+YEAQ9/IAMoAhQhDiADKAIAIQsgAygCDCERIAMoAgQhDyADKAIQIQUgAygCCCEQA0ACQCAFIBBJBEAgAyAPIAVBBHRqKAIAIgk2AhAMAQsDQCAQIA4iBE0EQCAAQQA2AgAPCyADIA8gBEEEdGoiCSgCBCIONgIUIAkoAgggEUYNAAsgBSEJIAQhBQsCQAJAAkACQCALKAIUIAVLBEAgCygCECAFQQR0aiIIKAIIIgQgCygCCCIFTw0BIAgoAgwiBiAFTw0CIAkhBSABKAIEIgcgASgCACIIKAI4IgxPDQUgDCAGQQR0IAsoAgQiBmoiDSgCACAGIARBBHRqIgQoAgAiBiAGIAIoAgBGIAQoAgQiCiACQQRqKAIARnEiEhsiDE0NBSABKAIIIAgoAjQiBCAHQRRsaiIGKAIARw0FIA0oAgQgCiASGyINIAQgDEEUbGoiBCgCAEcNBSAGKAIEIgcgBCgCBEcNBSAGKAIIIgogBCgCCEcNBSAHIAgoAkxPDQUgCCgCSCAHQaQCbGoiBygCAEGAgICAeEYNBSAHKAKgAiAKRw0FIAYoAhAiCCAHKAIIIgpPDQUgBygCBCIGIAhB8ANsaiIFKAKQA0UEQCAEKAIQIQQMBAsgBCgCECIEIAUoApgDRw0DIAghBAwEC0H4rsIAEJEPAAsgBCAFQYivwgAQiAsACyAGIAVBmK/CABCICwALIAkhBSAEIApPDQEgBiAEQfADbGoiBygCkANFDQEgBygCmAMgCEcNAQsgCSEFIAYgBEHwA2xqLQDMAg0ACyAAIA02AgggACAMNgIEIABBATYCAAuVBQIJfwF+IwBBQGoiBiQAAkACQAJAAkAgAEUNACAAQQhrIgsoAgBBAWohCSALIAk2AgAgCUUNASAAKAIADQIgAEF/NgIAIAYgCzYCDCAGIAA2AgggBiAAQQRqIg02AgQgAkUNACACQRBrIgkoAgBBAWohByAJIAc2AgAgB0UNASACKAIAIgdBf0YNAiACIAdBAWo2AgAgBiAJNgIYIAYgAjYCFCAGIAJBEGoiDDYCECAERQ0AIARBCGsiBygCAEEBaiEIIAcgCDYCACAIRQ0BIAQoAgAiCEF/Rg0CIAQgCEEBajYCACAGIAc2AiQgBiAENgIgIAYgBEEEaiIONgIcIAVFDQAgBUEIayIIKAIAQQFqIQogCCAKNgIAIApFDQEgBSgCACIKQX9GDQIgBSAKQQFqNgIAIAYgCDYCMCAGIAU2AiwgBiAFQQRqIgo2AigCQCAMIAO9Ig+nIA9CIIinELcMIgwEQCAGQTRqIA0gASAMIA4gChCiBgwBCyAGQQA2AjwgBkIANwI0CyAFIAUoAgBBAWs2AgAgCCAIKAIAQQFrIgU2AgAgBUUEQCAGQTBqEKgNCyAEIAQoAgBBAWs2AgAgByAHKAIAQQFrIgQ2AgAgBEUEQCAGQSRqEKgNCyACIAIoAgBBAWs2AgAgCSAJKAIAQQFrIgI2AgAgAkUEQCAGQRhqEOsMCyAAQQA2AgAgCyALKAIAQQFrIgA2AgAgAEUEQCAGQQxqEKkNC0EYQQQQsw4iAEUNAyAAQQA2AgggAEKBgICAEDcCACAAIAYpAjQ3AgwgAEEUaiAGQTxqKAIANgIAIAZBQGskACAAQQhqDwsQmw8LAAsQnA8AC0EEQRhBkMTEACgCACIAQcwIIAAbEQAAAAuVBQIJfwF+IwBBQGoiBiQAAkACQAJAAkAgAEUNACAAQQhrIgsoAgBBAWohCSALIAk2AgAgCUUNASAAKAIADQIgAEF/NgIAIAYgCzYCDCAGIAA2AgggBiAAQQRqIg02AgQgAkUNACACQRBrIgkoAgBBAWohByAJIAc2AgAgB0UNASACKAIAIgdBf0YNAiACIAdBAWo2AgAgBiAJNgIYIAYgAjYCFCAGIAJBEGoiDDYCECAERQ0AIARBCGsiBygCAEEBaiEIIAcgCDYCACAIRQ0BIAQoAgAiCEF/Rg0CIAQgCEEBajYCACAGIAc2AiQgBiAENgIgIAYgBEEEaiIONgIcIAVFDQAgBUEIayIIKAIAQQFqIQogCCAKNgIAIApFDQEgBSgCACIKQX9GDQIgBSAKQQFqNgIAIAYgCDYCMCAGIAU2AiwgBiAFQQRqIgo2AigCQCAMIAO9Ig+nIA9CIIinELcMIgwEQCAGQTRqIA0gASAMIA4gChCsBgwBCyAGQQA2AjwgBkIANwI0CyAFIAUoAgBBAWs2AgAgCCAIKAIAQQFrIgU2AgAgBUUEQCAGQTBqEKgNCyAEIAQoAgBBAWs2AgAgByAHKAIAQQFrIgQ2AgAgBEUEQCAGQSRqEKsNCyACIAIoAgBBAWs2AgAgCSAJKAIAQQFrIgI2AgAgAkUEQCAGQRhqEOsMCyAAQQA2AgAgCyALKAIAQQFrIgA2AgAgAEUEQCAGQQxqEKkNC0EYQQQQsw4iAEUNAyAAQQA2AgggAEKBgICAEDcCACAAIAYpAjQ3AgwgAEEUaiAGQTxqKAIANgIAIAZBQGskACAAQQhqDwsQmw8LAAsQnA8AC0EEQRhBkMTEACgCACIAQcwIIAAbEQAAAAufBQIMfQF/IwBBEGshECABKgIIIAIqAggiDJMiBUMAAAAAIAVDAAAAAGAbIAwgASoCFJMiBkMAAAAAIAZDAAAAAGAbkyEHIAEqAgQgAioCBCINkyIIQwAAAAAgCEMAAAAAYBsgDSABKgIQkyIJQwAAAAAgCUMAAAAAYBuTIQoCQAJAIAEqAgAgAioCACIOkyILQwAAAAAgC0MAAAAAYBsgDiABKgIMkyIEQwAAAAAgBEMAAAAAYBuTIg9DAAAAAFwNACAKQwAAAABcDQAgB0MAAAAAWw0BCyAAIAc4AhggACAKOAIUIAAgDzgCECAAQQA6AAwgACAMIAeSOAIIIAAgDSAKkjgCBCAAIA4gD5I4AgAPCwJAAkAgA0UEQCAEIAteDQFD//9//yEEQQAhAiALQ///f/9eRQ0CQQEhAiALIQQMAgsgAEEBOgAMIAAgBzgCGCAAIAo4AhQgACAPOAIQIAAgAikCADcCACAAQQhqIAJBCGooAgA2AgAPC0EAIQIgBEP//3//Xg0AQ///f/8hBAsCfyAIIAldRQRAQQAgBCAIXUUNARpBASECIAghBEEBDAELQQAgBCAJXUUNABpBACECIAkhBEEBCyEBAkACQAJAAkAgBSAGXUUEQCAEIAVdRQ0BIBBBADYCDCAQQgA3AgRBAiEBIAUhBAwDCyAEIAZdRQ0AIBBBADYCDCAQQgA3AgRBAiEBIAYhBAwBCyAQQQA2AgwgEEIANwIEIAINAQsgEEEEaiABQQJ0aiAEjDgCAAwBCyAQQQRqIAFBAnRqIAQ4AgALIABBAToADCAAIBApAgQ3AhAgACANIBAqAgiSOAIEIAAgDiAQKgIEkjgCACAAQRhqIBBBDGoiASgCADYCACAAIAwgASoCAJI4AggLpgQBEX0gACABKQIoNwIoIABBMGogAUEwaikCADcCACAAQThqIAFBOGopAgA3AgAgASoCICEKIAEqAhwhCyABKgIkIQQgASoCECEPIAEqAhQhECABKgIYIREgAioCACEFIAIqAgghAyACKgIEIQwgASoCACEGIAEqAgQhByABKgIIIQggACABKgIMIgk4AgwgACAIOAIIIAAgBzgCBCAAIAY4AgAgACARIAMgCSAGIAyUIAcgBZSTIg0gDZIiDZQgBiAIIAWUIAYgA5STIg4gDpIiDpQgByAHIAOUIAggDJSTIgMgA5IiA5STkpKSIhI4AhggACAQIAwgCSAOlCAIIAOUIAYgDZSTkpKSIhM4AhQgACAPIAUgCSADlCAHIA2UIAggDpSTkpKSIg04AhAgACARIAQgCSAGIAqUIAcgC5STIgUgBZIiBZQgBiAIIAuUIAYgBJSTIgMgA5IiA5QgByAHIASUIAggCpSTIgQgBJIiBJSTkpKSIBKTIgwgCSAHIA8gCyAJIASUIAcgBZQgCCADlJOSkpIgDZMiC5QgBiAQIAogCSADlCAIIASUIAYgBZSTkpKSIBOTIgqUkyIEIASSIgSUIAcgCCAKlCAHIAyUkyIFIAWSIgWUIAYgBiAMlCAIIAuUkyIDIAOSIgOUk5KSOAIkIAAgCiAJIAOUIAYgBJQgCCAFlJOSkjgCICAAIAsgCSAFlCAIIAOUIAcgBJSTkpI4AhwL7E0CJX8YfSMAQUBqIhUkAAJAAkACQCAARQ0AIABBCGsiJigCAEEBaiEKICYgCjYCACAKRQ0BIAAoAgANAiAAQX82AgAgFSAmNgIIIBUgADYCBCAVIABBBGoiDjYCACACRQ0AIAJBCGsiJygCAEEBaiEKICcgCjYCACAKRQ0BIAIoAgAiCkF/Rg0CIAIgCkEBajYCACAVICc2AhQgFSACNgIQIBUgAkEIaiIMNgIMIANFDQAgA0EIayIoKAIAQQFqIQogKCAKNgIAIApFDQEgAygCACIKQX9GDQIgAyAKQQFqNgIAIBUgKDYCICAVIAM2AhwgFSADQQRqIgo2AhggBEUNACAEQRBrIikoAgBBAWohCSApIAk2AgAgCUUNASAEKAIADQIgBEF/NgIAIBUgKTYCLCAVIAQ2AiggFSAEQRBqIhM2AiQgBUUNACAFQQhrIiooAgBBAWohCSAqIAk2AgAgCUUNASAFKAIADQIgBUF/NgIAIBUgKjYCOCAVIAU2AjQgFSAFQQRqIhQ2AjAgFSAINgI8IAdEAAAQAAAA8EFiIQkgB/wDIRYjAEHQAGsiESQAAkAgFUE8aiIIKAIAEARBAUYEQCARIAg2AgggESAUNgJMIBEgEzYCSCARIAw2AkQgEUGQ0MEANgI4IBFBATYCJCARIBZB//8DcTYCFCARIBZBEHY2AhAgESAJNgIMIBEgCigCQCIINgJAIBEgDikCKDcCKCARQQA2AhggESAGQQAgBkEgSRs2AjAgESAKKAI8IAgoAghBAWtBeHFqQQhqNgI8IBEgEUEIajYCNAwBCyARIBQ2AkwgESATNgJIIBEgDDYCRCARQZDQwQA2AjggEUEANgI0IBFBATYCJCARQQA2AhggESAJNgIMIBEgCigCQCIINgJAIBEgDikCKDcCKCARIBZB//8DcTYCFCARIBZBEHY2AhAgESAGQQAgBkEgSRs2AjAgESAKKAI8IAgoAghBAWtBeHFqQQhqNgI8CyABIURBACEGIwBBwAFrIgskAAJAAkACfwJAAn0CQAJAIA4oAigiCCARQQxqIhgoAjwiFygCjANPDQAgFygCiAMgCEGAA2xqIhIoAgBBAUcNACASKAIEIA4oAixHDQAgDigCCCIJBEAgEioCWCExIBIqAlQhNiASKgJQITQgEioCTCFAIBIqAkAhPCASKgJIIT4gEioCRCE/IA4oAgQhCiAJIQgDQCAKQTRqQQA6AAAgPCAKQewAaioCACIvlCA/IApB6ABqKgIAIjCUkyIBIAGSITMgPiAwlCA8IApB8ABqKgIAIi6UkyIBIAGSITIgCkHMAGogLiBAIDOUIDwgMpQgPyA/IC6UID4gL5STIgEgAZIiAZSTkpIiOjgCACAKQcgAaiAvIEAgMpQgPiABlCA8IDOUk5KSIjc4AgAgCkHEAGogMCBAIAGUID8gM5QgPiAylJOSkiI4OAIAIApB4ABqKgIAIjAgPJQgCkHcAGoqAgAiMiA/lJMiASABkiE1IDIgPpQgCkHkAGoqAgAiLiA8lJMiASABkiEzIApBMGogMSAuIEAgNZQgPCAzlCA/IC4gP5QgMCA+lJMiASABkiIBlJOSkpIiLzgCACAKQSxqIDYgMCBAIDOUID4gAZQgPCA1lJOSkpIiMDgCACAKQShqIDQgMiBAIAGUID8gNZQgPiAzlJOSkpIiLjgCACAKQfwAaioCACE7IApB+ABqKgIAIUEgCkH0AGoqAgAhOQJ9IApBuAFqKgIAIgEgOoyUQwAAAD+UIjIgMpQgASA4jJRDAAAAP5QiNSA1lCABIDeMlEMAAAA/lCIzIDOUkpIiAUMAAIAoXwRAQwAAAAAhPUMAAAAAIUNDAAAAACFCQwAAgD8MAQsgMiABkSIyEPEBIDKVIgGUIUIgMyABlCFDIDUgAZQhPSAyEPQBCyEBIApBQGsgLyA6IApBJGoqAgAiL5SSOAIAIApBPGogMCA3IC+UkjgCACAKQThqIC4gOCAvlJI4AgAgCkHYAGogOyBAIDwgQZQgPyA5lJMiLiAukiIvlCA8ID4gOZQgPCA7lJMiLiAukiIwlCA/ID8gO5QgPiBBlJMiLiAukiIulJOSkiI1IAEgQSBAIDCUID4gLpQgPCAvlJOSkiIzID2UIDkgQCAulCA/IC+UID4gMJSTkpIiMiBDlJMiLiAukiIvlCA9IDIgQpQgNSA9lJMiLiAukiIwlCBDIDUgQ5QgMyBClJMiLiAukiIulJOSkjgCACAKQdQAaiAzIAEgMJQgQiAulCA9IC+Uk5KSOAIAIApB0ABqIDIgASAulCBDIC+UIEIgMJSTkpI4AgAgCkHUAWohCiAIQQFrIggNAAsLIA4gEioCgAEiMSAxlCASKgKEASI5IDmUkiASKgKIASI6IDqUkpEiLjgCJCAOKAI0IQggC0EANgJ4IAtCADcCcCAIQQNJBEAgC0HwAGogCEECdGpBgICA/AM2AgAgCyoCdCI2IBIqAkAiN5QgCyoCcCI0IBIqAkQiOJSTIgEgAZIhNSA0IBIqAkgiM5QgCyoCeCIvIDeUkyIBIAGSITIgOiAvIBIqAkwiMCA1lCA3IDKUIDggLyA4lCA2IDOUkyIBIAGSIgGUk5KSlCAxIDQgMCABlCA4IDWUIDMgMpSTkpKUIDkgNiAwIDKUIDMgAZQgNyA1lJOSkpSSkkMAAAAAXQRAIA4gLow4AiQLIAlFDQIgDigCCCEUIA4oAgQhCCAYKAJAIR4gGCgCOCErIBgoAjQhLCAYKAIwIS1BACEKA0AgC0EIaiITQQhqIBhBCGopAgA3AwAgE0EQaiAYQRBqKQIANwMAIBNBGGogGEEYaikCADcDACATQSBqIBhBIGopAgA3AwAgE0EoaiAYQShqKQIANwMAIAsgHjYCSCALIBc2AkQgCyArNgJAIAsgLDYCPCALIC02AjggCyAYKQIANwMIAkACQAJAAkAgCiAUSQRAIAYgCGoiEEEgaiIbIBBBgAFqIiQqAgAgEEGIAWoiDyoCAJIiLyAQQcwAaiIfKgIAlCI3IBBBMGoqAgAiMpIiMDgCACAQQRxqIhYgLyAQQcgAaiIZKgIAlCI4IBBBLGoqAgAiMZIiLjgCACAQQRhqIgwgLyAQQcQAaiIhKgIAlCI2IBBBKGoqAgAiNJIiATgCACALIDc4AmwgCyA4OAJoIAsgNjgCZCALIDI4AmAgCyAxOAJcIAsgNDgCWCALQfAAaiATIAtB2ABqQwAAgD9BARCYASAQQQA2AgAgCygCeEEERg0BIAsqAowBIUIgCyoCiAEhPSALKgKEASE7IAsoAnQhJSALKAJwISICQCALKgKAASJBQwAAAABcDQAgIiAeKAIQTw0DIB4oAgwgIkGwAWxqIh0oAgBBAUcNAyAdKAIEICVHDQMgCyAwOAKYASALIC44ApQBIAsgATgCkAEgCyA3jDgCpAEgCyA4jDgCoAEgCyA2jDgCnAEgC0GoAWogHSgCUCAdKAJUIhMoAghBAWtBeHFqQQhqIB1BhAFqIAtBkAFqQwAAgD9BACATKAIcEQkAIAsoAqgBQQRHBEAgCyoCuAGMIT0gCyoCvAGMIUIgCyoCtAGMITsLIDtDAAAAAFwNACA9QwAAAABcDQAgQkMAAAAAXA0AIB8qAgCMIUIgGSoCAIwhPSAhKgIAjCE7CyAQQQE2AgAgEEEEaiAiNgIAIBBBNGpBAToAACAQQRRqIEI4AgAgEEEQaiA9OAIAIBBBDGogOzgCACAQQQhqICU2AgAgEEEkaiITIC8gQZQgDyoCAJMiLzgCACAkKgIAIi4gEEGEAWoqAgAiAZMiNSAuIAGSIjNfRQ0DIAwgNCA2IEGUkiI2OAIAIBYgMSA4IEGUkiIwOAIAIBsgMiA3IEGUkiIuOAIAIBMgMyA1IC8gLyA1XRsiASABIDNeGzgCACA7ICEqAgCUID0gGSoCAJSSIEIgHyoCAJSSIgFDzczMvWBFBEAgEEHIAWpDAACAvyABlSIxIEIgOiAwIBIqAoQCkyI0IBIqAowBIi+UIBIqApABIgEgNiASKgKAApMiMJSTkpQgOyASKgKAASAuIBIqAogCkyIuIAGUIDQgEioClAEiAZSTkpQgPSA5IAEgMJQgLiAvlJOSlJKSlDgCAAwFCyAQQcgBakEANgIAQwAAIEEhMQwECyAKIBRBoLTCABCICwALIBBByAFqQQA2AgAgEEEkaiAkKgIAOAIAIBBBFGogHyoCAIw4AgAgEEEQaiAZKgIAjDgCACAQQQxqICEqAgCMOAIAQwAAgD8hMQwCC0GwicIAQRNBsLTCABDXCwALIDUgMxCJCwALIBBBxAFqIDE4AgAgBkHUAWohBiAJIApBAWoiCkcNAAtDAAAAAEMAAIA/IBIqArQCIgGVIAFDAAAAAFsbDAMLDAULQbCJwgBBE0HAtMIAENcLAAsgDigCBCEIIA4oAggiFEUNAUMAAAAAQwAAgD8gEioCtAIiAZUgAUMAAAAAWxsLIQFBACEKIBQhBgNAQwAAAAAhMSAIIApqIglBNGotAABBAUYEQEMAAAAAQwAAAAAgASAJQYwBaioCACAJQYABaioCACAJQSRqKgIAk5QgCUHEAWoqAgCUIAlByAFqKgIAIi4gCEGQAUGUASAuQwAAAABdGyAKamoqAgCUk5QiLiAuQwAAAABdGyAuIC5cGyExCyAJQcwBaiAxOAIAIApB1AFqIQogBkEBayIGDQALQQAMAQtBACEUQQELIQkCQAJAIA4oAigiDyAXKAKMA08NACAXKAKIAyAPQYADbGoiGygCAEEBRw0AIA4oAiwiGSAbKAIERw0AIBdB8AJqIR4gGygCzAIiBkEBcUUEQCAbIAZBAXI2AswCIBcoAvgCIgYgFygC8AJGBEAgHkHoi8IAELgICyAXIAZBAWo2AvgCIBcoAvQCIAZBA3RqIgYgGTYCBCAGIA82AgALIAkgCEVyDQEgG0EQaiEWIAggFEHUAWxqIQwgCEHUAWohBiALQRBqIRMDQCAGIQogCCoCvAFDAAAAAF4EQCAbLQDkAgRAIBsgGygCzAJBBHI2AswCCyAbQQA2AuACIBtBADoA5AILIAsgRCAIKgKsASIuIAgqAswBIgEgASAuXhsiASAIKgIUlJQ4AlQgCyBEIAEgCCoCEJSUOAJQIAsgRCAIKgIMIAGUlDgCTCATIAhBIGooAgA2AgAgCyAIKQIYNwMIIBYgC0HMAGogC0EIakEAENYEIAogDEYiBg0CIApBAEHUASAGG2ohBiAKIggNAAsMAQtB0LTCABCRDwALAkACQAJAAkACQCAJRQRAIBgoAkAiBkEQaigCACEhIAZBDGooAgAhIiAOIA4oAhQiBiAUSQR/IBQgBiIIayEMIAwgDigCDCAIa0sEQCAOQQxqIAggDEEEQQwQ9gYgDigCFCEICyAOKAIQIhMgCEEMbGohCSAMQQJPBEAgFCAGQX9zakEMbCIKBEAgCUEAIAr8CwALIBMgBkF0bGogCCAUakEMbGpBDGshCSAIIAxqQQFrIQgLIAlBADYCCCAJQgA3AgAgCEEBagUgFAs2AhQgFCETIA4oAiAiBiAUSQRAIBQgBiIIayEMIAwgDigCGCAIa0sEQCAOQRhqIAggDEEEQQwQ9gYgDigCICEICyAOKAIcIhMgCEEMbGohCSAMQQJPBEAgFCAGQX9zakEMbCIKBEAgCUEAIAr8CwALIBMgBkF0bGogCCAUakEMbGpBDGshCSAIIAxqQQFrIQgLIAlBADYCCCAJQgA3AgAgCEEBaiETCyAOIBM2AiAgDigCCCIcQdQBbCEWIA4oAgQhCEEAIQYCQCAcRQ0AIBZB1AFrIglB1AFuQQFqIgpBA3EhDAJAIAlB/ARJBEAgCCEKDAELIApB/P//H3EhCSAIIQoDQCAKQbABakIANwIAIApBhANqQgA3AgAgCkHYBGpCADcCACAKQawGakIANwIAICAgCigCAEEBRmogCkHUAWooAgBBAUZqIApBqANqKAIAQQFGaiAKQfwEaigCAEEBRmohICAKQdAGaiEKIAlBBGsiCQ0ACwsgDEUNACAMQdQBbCEJA0AgCkGwAWpCADcCACAgIAooAgBBAUZqISAgCkHUAWohCiAJQdQBayIJDQALCyAIIBZqISQgHEEBaiElIA4oAigiKyAXKAKMAyIsSSEYIBcoAogDIi0gK0GAA2xqIQ0gDigCLCESIA4oAhAhHyAOKAIUISMgDigCHCEbQQAhCUEAIQoDQAJAAkAgCiAcRwRAIAYgCGoiGigCAEEBRw0CIAogE0kNASAKIBNBhLfCABCICwALIBwgHEH0tsIAEIgLAAsgGkEIaigCACEWIBpBBGooAgAhDyAaQdgAaigCACEMIAkgG2oiECAaQdAAaikCADcCACAQQQhqIh0gDDYCAEMAAAAAIUJDAAAAACE9QwAAAAAhPAJ9IBpBDGoqAgAiMyAQKgIAIi+UIBpBEGoqAgAiMiAQQQRqIhkqAgAiMJSSIBpBFGoqAgAiMSAdKgIAIi6UkiE2QwAAAAAgLiAxIDaUkyI0IDSUIC8gMyA2lJMiLyAvlCAwIDIgNpSTIi4gLpSSkpEiMEOsxSc3Xw0AGiAuIDCVIT0gLyAwlSE8IDQgMJULIQEgECA8OAIAIBkgPTgCACAdIAE4AgBDAAAAACEvQwAAAAAhOyAzID2UIDIgPJSTIjAgMJQgMiABlCAxID2UkyIuIC6UIDEgPJQgMyABlJMiASABlJKSkSI0Q6zFJzdfRQRAIDAgNJUhOyABIDSVIUIgLiA0lSEvCwJAAkAgCiAjSQRAIAkgH2oiDCAvOAIAIAxBCGogOzgCACAMQQRqIEI4AgACQCAPICFPDQAgIiAPQbABbGoiDygCAEEBRw0AIA8oAgQgFkcNAAJAAkACQCAPKAIgQQFxRQ0AIA8oAiQiDCAsTw0FIC0gDEGAA2xqIgwoAgBBAUcNBSAMKAIEIA8oAihHDQUgDC0A9QINAAJAIBhFDQAgDSgCAEEBRw0AIA0oAgQgEkYNAgtBsInCAEETQcS3wgAQ1wsACwJAIBhFDQAgDSgCAEEBRw0AIA0oAgQgEkYNAgtBsInCAEETQdS3wgAQ1wsAC0MAAAAAQwAAgD8gDSoC6AEgGkEcaioCACI2IA0qAoQCkyI3IB0qAgAiQZQgGkEgaioCACI0IA0qAogCkyI4IBkqAgAiOZSTIjOUIA0qAuwBIi4gOCAQKgIAIjqUIBpBGGoqAgAiLyANKgKAApMiNSBBlJMiMpSSIDUgOZQgNyA6lJMiMSANKgLwASIwlJIiASABlCAzIC6UIDIgDSoC9AGUkiAxIA0qAvgBIi6UkiIBIAGUkiAzIDCUIDIgLpSSIDEgDSoC/AGUkiIBIAGUkiANKgK0AiAMKgK0ApKSIDQgDCoCiAKTIjMgOZQgNiAMKgKEApMiMiBBlJMiNiAMKgLoAZQgLyAMKgKAApMiMSBBlCAzIDqUkyI0IAwqAuwBIi6UkiAyIDqUIDEgOZSTIi8gDCoC8AEiMJSSIgEgAZQgNiAulCA0IAwqAvQBlJIgLyAMKgL4ASIulJIiASABlJIgNiAwlCA0IC6UkiAvIAwqAvwBlJIiASABlJKSIgGVIAGLQwjlPB5fGyFDIEEgDSoCiAEgNyANKgKMASIvlCA1IA0qApABIi6Uk5IgDCoCiAEgMiAMKgKMASIwlCAxIAwqApABIgGUk5KTlCANKgKAASA4IC6UIDcgDSoClAEiLpSTkiAMKgKAASAzIAGUIDIgDCoClAEiAZSTkpMgOpQgOSANKgKEASA1IC6UIDggL5STkiAMKgKEASAxIAGUIDMgMJSTkpOUkpIhMQwEC0MAAAAAQwAAgD8gDSoCtAIgDSoC6AEgGkEcaioCACANKgKEApMiNyAdKgIAIjOUIBpBIGoqAgAgDSoCiAKTIjggGSoCACIylJMiMZQgDSoC7AEiLiA4IBAqAgAiNpQgGkEYaioCACANKgKAApMiNSAzlJMiNJSSIDUgMpQgNyA2lJMiLyANKgLwASIwlJIiASABlCAxIC6UIDQgDSoC9AGUkiAvIA0qAvgBIi6UkiIBIAGUkiAxIDCUIDQgLpSSIC8gDSoC/AGUkiIBIAGUkpIiAZUgAYtDCOU8Hl8bIUMgMyANKgKIASA3IA0qAowBIjCUIDUgDSoCkAEiLpSTkpQgMiANKgKEASA1IA0qApQBIgGUIDggMJSTkpQgDSoCgAEgOCAulCA3IAGUk5IgNpSSkiExDAMLQbCJwgBBE0Gkt8IAENcLAAsgCiAjQZS3wgAQiAsAC0GwicIAQRNBtLfCABDXCwALIBpBtAFqIBpBnAFqKgIAIDFDzcxMvpQgQ5SUOAIACyAGQdQBaiEGIAlBDGohCSAUIApBAWoiCkcNAAsgFEEBaiEWICCzITZBASEJQQAhCkEBIRkCQAJAAkACQAJAA0ACQAJAAkAgGEUEQANAICUgCSIGRg0GAkACQCAIIApB1AFsaiIJKAIAQQFHBEAgCUGAgID8AzYC0AEgCUEANgKwAQwBCyAJKgK8ASIBQwAAAABbDQYgCUGAgID8AzYC0AEgCUEANgKwASBEIAkqAswBlCAJKgKYAZQiMSAxlCIuQwAAAABgRQ0EIAkgRCABlCIBOAKwASAuIAFDAAAAP5QiASABlCAJKgK0ASIBIAGUkiI9XQ0BCyAWIAYiCkEBaiIJRg0JDAELCwwCCwNAIAkgJUYNBSAJIQYCQCAIIApB1AFsaiIPKAIAQQFHBEAgD0GAgID8AzYC0AEgD0EANgKwAQwBCwJAAkACQAJAAkACfSAPKgK8ASIBQwAAAABbBEAgDSgCAEEBRw0LIA0oAgQgEkcNCyAPKAIEIgkgIU8NAiAiIAlBsAFsaiIMKAIAQQFHDQIgDCgCBCAPKAIIRw0CIA8qAsABITNBACEJIAwoAiBBAXEEQCAMKAIkIgkgLE8NBCAtIAlBgANsaiIJKAIAQQFHDQQgCSgCBCAMKAIoRw0EIAlBEGohCQsgCiAjTw0EIA8qAiAhQSAPKgIcITkgDyoCGCE6IB8gCkEMbGoiDCoCCCE+IAwqAgQhPyAMKgIAIUAgCQR9ID8gOiAJKgLwAZMiN5QgQCA5IAkqAvQBkyI4lJMiMiAJKgLgASIwlCAJKgLYASA+IDiUID8gQSAJKgL4AZMiNZSTIjGUIAkqAtwBIgEgQCA1lCA+IDeUkyI0lJKSIS8gCSoCpAIgPiA4IC+UIDcgASAxlCA0IAkqAuQBlJIgMiAJKgLoASIulJIiAZSTlCBAIDUgAZQgOCAxIDCUIDQgLpSSIDIgCSoC7AGUkiIBlJOUID8gNyABlCA1IC+Uk5SSkpIFQwAAAAALITggIEUNBUMAAAAAIDMgM0MAAAAAWxshQwJ9IAlFBEBDAAAAACE1QwAAAAAhPEMAAAAADAELIAkqAnggOSAJKgL0AZMiNCAJKgJ8Ii+UIDogCSoC8AGTIgEgCSoCgAEiMJSTkiE8IAkqAnQgASAJKgKEASIulCBBIAkqAvgBkyIBIC+Uk5IhNSAJKgJwIAEgMJQgNCAulJOSCyEzIEOMITcgQ0MAAAAAYEUNBiA/IDogDSoCgAKTIjuUIEAgOSANKgKEApMiOZSTIjIgDSoC8AEiMJQgDSoC6AEgPiA5lCA/IEEgDSoCiAKTIjqUkyIxlCANKgLsASIBIEAgOpQgPiA7lJMiNJSSkiEvIEMgN0MAAIA/IA0qArQCID4gOSAvlCA7IAEgMZQgNCANKgL0AZSSIDIgDSoC+AEiLpSSIgGUk5QgQCA6IAGUIDkgMSAwlCA0IC6UkiAyIA0qAvwBlJIiAZSTlCA/IDsgAZQgOiAvlJOUkpKSIDiSlSBAIA0qAoABIDogDSoCkAEiLpQgOSANKgKUASIBlJOSIDOTlCA/IA0qAoQBIDsgAZQgOiANKgKMASIBlJOSIDWTlJIgPiANKgKIASA5IAGUIDsgLpSTkiA8k5SSjJQgNpUiASABIDddGyIBIAEgQ14bDAELIEQgAZQLIQEgD0GAgID8AzYC0AEgD0EANgKwASBEIA8qAswBlCAPKgKYAZQiMSAxlCIuQwAAAABgRQ0HIA8gATgCsAEgLiABQwAAAD+UIgEgAZQgDyoCtAEiASABlJIiPV1FDQUMCAtBsInCAEETQdC1wgAQ1wsAC0GwicIAQRNB4LXCABDXCwALIAogI0HwtcIAEIgLAAtBgLbCAEEqQay2wgAQ1gwACyA3IEMQiQsACyAWIAYiCkEBaiIJRw0ACwwGC0G8tsIAQShB5LbCABDWDAALIAggCkHUAWxqIDFDAAAAAEMAAIA/ID2RIgGVIAGLQwjlPB5fG5Q4AtABIAYiCkEBaiEJQQAhGSAKIBRHDQEMAwsLQbCJwgBBE0HAtcIAENcLAAsgHCAcQbC1wgAQiAsACyAcRQ0CDAELIBlBAXMgHEEAR3FFDQELIAhB1AFqIQkCQCAcQdQBbEHUAWsiBkHUAW5BAXEEQCAJIQogCCEJDAELAkAgCCoCtAEiAUMAAAAAWw0AIAgqAtABIi5DAACAP11FDQAgCCABIC6UOAK0ASAIIC4gCCoCsAGUOAKwAQsgCUHUAUEAIBxBAUcbaiEKCyAGQdQBSQ0AA0ACQCAJKgK0ASIBQwAAAABbDQAgCSoC0AEiLkMAAIA/XUUNACAJIAEgLpQ4ArQBIAkgLiAJKgKwAZQ4ArABCyAKQdQBQQAgCiAkRxtqIQkCQCAKKgK0ASIBQwAAAABbDQAgCioC0AEiLkMAAIA/XUUNACAKIAEgLpQ4ArQBIAogLiAKKgKwAZQ4ArABCyAJQQBB1AEgCSAkRiIGG2ohCiAGRQ0ACwsgGEUNBSANKAIAQQFHDQUgDSgCBCASRw0FIA0oAswCIgZBAXFFBEAgDSAGQQFyNgLMAiAXKAL4AiIGIBcoAvACRgRAIB5B6IvCABC4CAsgFyAGQQFqNgL4AiAXKAL0AiAGQQN0aiIGIBI2AgQgBiArNgIACyANQRBqIQ8gC0HwAGogDigCMCIGQQJ0aiEMIAZBA0khBkEAIQpBACEJA0AgCSAcRg0CIAhBIGoqAgAhOCAIQRxqKgIAITUgCEEYaioCACEzIAhBsAFqKgIAIgFDAAAAAFwEQCAJICNPDQQgCyABIAogH2oiFioCAJQ4AnAgCyABIBZBCGoqAgCUOAJ4IAsgASAWQQRqKgIAlDgCdCALIDg4AhAgCyA1OAIMIAsgMzgCCCAPIAtB8ABqIAtBCGpBABDWBAsgCEG0AWoqAgAiAUMAAAAAXARAIAkgE08NBiALIAEgCiAbaiIWKgIAlDgCqAEgCyABIBZBCGoqAgCUOAKwASALIAEgFkEEaioCAJQ4AqwBIA0qAkAhOSANKgJEITogDSoCSCE3IA0qAkwhMiALQQA2AnggC0IANwJwIAZFDQggDEGAgID8AzYCACA5IAsqAnQiNJQgOiALKgJwIi+UkyIBIAGSITEgNyAvlCA5IAsqAngiLpSTIgEgAZIhNiALIDggLiAyIDGUIDkgNpQgOiA6IC6UIDcgNJSTIgEgAZIiMJSTkpIiAUMAAIA/IAhBqAFqKgIAkyABIDggDSoCiAKTlCAzIA0qAoACkyAvIDIgMJQgOiAxlCA3IDaUk5KSIi6UIDUgDSoChAKTIDQgMiA2lCA3IDCUIDkgMZSTkpIiAZSSkpQiMJSTOAIQIAsgNSABIDCUkzgCDCALIDMgLiAwlJM4AgggDyALQagBaiALQQhqQQAQ1gQLIAhB1AFqIQggCkEMaiEKIBQgCUEBaiIJRw0ACyAOKAIsIRkgDigCKCEPCyAPIBcoAowDTw0CIBcoAogDIA9BgANsaiIMKAIAQQFHDQIgDCgCBCAZRw0CIAwoAswCIgZBAXFFBEAgDCAGQQFyNgLMAiAXKAL4AiIGIBcoAvACRgRAIB5B6IvCABC4CAsgFyAGQQFqNgL4AiAXKAL0AiAGQQN0aiIGIBk2AgQgBiAPNgIACyAOKAIIIgYEQCAOKAIEIRMgBkHUAWwhFCALQfAAaiAOKAI0IgZBAnRqIQogBkEDSSEIQQAhCQNAAkAgCSATaiIOQTRqLQAARQRAIA5BoAFqIgYgDkGkAWoqAgAiMSAGKgIAkjgCAAwBCyAOQShqKgIAIUEgDCoCgAIhOSAMKgKQASE+IA5BLGoqAgAhOiAMKgKEAiEwIAwqAowBIT8gDCoCiAEhLiAOQTBqKgIAITcgDCoCiAIhOCAMKgKUASFAIAwqAoQBITUgDCoCgAEhMyALQQA2AnggC0IANwJwIAhFDQggCkGAgID8AzYCACALKgJ0IkMgDCoCQCJFlCALKgJwIjQgDCoCRCI2lJMiASABkiE9IDQgDCoCSCJClCALKgJ4Ii8gRZSTIgEgAZIhPCAOQRRqKgIAIjIgLyAMKgJMIjsgPZQgRSA8lCA2IC8gNpQgQyBClJMiASABkiIvlJOSkiIBlCAOQQxqKgIAIjEgNCA7IC+UIDYgPZQgQiA8lJOSkiI2lCAOQRBqKgIAIjQgQyA7IDyUIEIgL5QgRSA9lJOSkiIvlJKSITsgDkGgAWoiBiAGKgIAIEQgLiA6IDCTIjAgP5QgQSA5kyIuID6Uk5IgASAyIDuUk5QgMyA3IDiTIgEgPpQgMCBAlJOSIDYgMSA7lJOUIDUgLiBAlCABID+Uk5IgLyA0IDuUk5SSkpQgDkGIAWoqAgCVIjGSOAIACyAOQaQBaiAxQ6RwfT+UOAIAIBQgCUHUAWoiCUcNAAsLIAtBwAFqJAAMBgsgHCAcQYC1wgAQiAsACyAJICNBkLXCABCICwALQeC0wgAQkQ8ACyAJIBNBoLXCABCICwALQfC0wgAQkQ8ACyALQQA2AhggC0EBNgIMIAtBzP7BADYCCCALQgQ3AhAgC0EIakGQ/cEAELgNAAsgEUHQAGokACAFQQA2AgAgKiAqKAIAQQFrIgU2AgAgBUUEQCAVQThqEO8MCyAEQQA2AgAgKSApKAIAQQFrIgQ2AgAgBEUEQCAVQSxqEOsMCyADIAMoAgBBAWs2AgAgKCAoKAIAQQFrIgM2AgAgA0UEQCAVQSBqEOwMCyACIAIoAgBBAWs2AgAgJyAnKAIAQQFrIgI2AgAgAkUEQCAVQRRqEPEMCyAAQQA2AgAgJiAmKAIAQQFrIgA2AgAgAEUEQCAVQQhqENMKCyAVQUBrJAAPCxCbDwsACxCcDwALpAYBA38gAEEIayIAKAIEQXhxIQEgACABaiECAkACQAJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohASAAIANrIgBB4MfEACgCAEYEQCACKAIEQQNxQQNHDQFB2MfEACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgACABaiABNgIADwsgACADEKsFCwJAAkAgAigCBCIDQQJxRQRAIAJB5MfEACgCAEYNAiACQeDHxAAoAgBGDQUgAiADQXhxIgIQqwUgACABIAJqIgFBAXI2AgQgACABaiABNgIAIABB4MfEACgCAEcNAUHYx8QAIAE2AgAPCyACIAIoAgRBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAsgAUGAAkkNAiAAIAEQ+wVBACEAQfjHxABB+MfEACgCAEEBayIBNgIAIAENAUHAxcQAKAIAIgEEQANAIABBAWohACABKAIIIgENAAsLQfjHxABB/x8gACAAQf8fTRs2AgAPC0Hkx8QAIAA2AgBB3MfEAEHcx8QAKAIAIAFqIgE2AgAgACABQQFyNgIEQeDHxAAoAgAgAEYEQEHYx8QAQQA2AgBB4MfEAEEANgIACyABQfDHxAAoAgBNDQBB5MfEACgCACICRQ0AQQAhAAJAQdzHxAAoAgBBKUkNAEG4xcQAIQEDQCACIAEoAgAiA08EQCABKAIEIANqIAJLDQILIAEoAggiAQ0ACwtBwMXEACgCACIBBEADQCAAQQFqIQAgASgCCCIBDQALC0H4x8QAQf8fIAAgAEH/H00bNgIAQdzHxAAoAgBB8MfEACgCAE0NAEHwx8QAQX82AgALDwsCf0HQx8QAKAIAIgJBASABQQN2dCIDcUUEQEHQx8QAIAIgA3I2AgAgAUH4AXFByMXEAGoiAQwBCyABQfgBcSICQcjFxABqIQEgAkHQxcQAaigCAAshAiABIAA2AgggAiAANgIMIAAgATYCDCAAIAI2AggPC0Hgx8QAIAA2AgBB2MfEAEHYx8QAKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAAuCBQEHfwJAAkACQAJAAkACQAJAAkACQAJAIAEoAgBBAWsOBQMDAQIHAAsgASgCDCIBQeACaigCACIDRQ0IIAFB3AJqKAIAIgEgA0EDdGohAyAAKAIwIQIgACgCNCEEA0AgBCABKAIAIgUgAUEEaigCACIGELgMIgdFDQggACACIAUgBiAHENEFRQ0IIAMgAUEIaiIBRw0ACwwICyAAKAIwIgMgASgCDCIBKALAAiABKALEAhC3DCICRQ0GIAMgASgCyAIgASgCzAIQtwwiBEUNBiACQeACaigCACIBRQ0DIAFBA3QgAkHcAmooAgAiAWohAiAAKAI0IQUMAgsgACgCMCIDIAEoAhAiASgC8AIgASgC9AIQtwwiAUUNBSABQeACaigCACICDQMMBgsgACAAKAIwIAEoAgQgASgCCCABKAIMENEFDwsDQCAFIAEoAgAiBiABQQRqKAIAIgcQuAwiCEUNBCAAIAMgBiAHIAgQ0QVFDQQgAiABQQhqIgFHDQALCyAEQeACaigCACIBRQ0DIAFBA3QgBEHcAmooAgAiAWohAiAAKAI0IQQDQCAEIAEoAgAiBSABQQRqKAIAIgYQuAwiB0UNAyAAIAMgBSAGIAcQ0QVFDQMgAiABQQhqIgFHDQALDAMLIAFB3AJqKAIAIgEgAkEDdGohAiAAKAI0IQQDQCAEIAEoAgAiBSABQQRqKAIAIgYQuAwiB0UNAiAAIAMgBSAGIAcQ0QVFDQIgAiABQQhqIgFHDQALDAILIAEoAgwhAiAAIAAoAjAiBCABKAIEIgMoAgwgAygCECABKAIIENEFRQ0AIAAgBCADKAIUIAMoAhggAhDRBQ8LQQAPC0EBC/QEAg5/BH4jAEEwayIGJAAgASkDECERIAEtABghDQJ/IAEoAgQiB0UEQEGw1cIAIQNBACEHQQAMAQsCfwJAIAdBAWqtQhx+IhBCIIinDQAgEKciAkF4Sw0AIAdBCWoiBCACQQdqQXhxIgNqIQIgAiADSQ0AIAJB+P///wdLDQAgAkEIELMOIghFBEBBCCACQZDExAAoAgAiAEHMCCAAGxEAAAALIAMgCGoMAQsQpgwgBigCACIHQQlqIQRBAAshAyABKAIAIQIgBARAIAMgAiAE/AoAAAsgASgCDCILBEAgA0EcayEOIAJBCGohBCACKQMAQn+FQoCBgoSIkKDAgH+DIRAgBkEgaiEJIAshDCACIQgDQCAQUARAA0AgCEHgAWshCCAEKQMAIRAgBEEIaiEEIBBCgIGChIiQoMCAf4MiEEKAgYKEiJCgwIB/UQ0ACyAQQoCBgoSIkKDAgH+FIRALIAZBEGoiD0EIaiAIIBB6p0EDdkFkbGoiBUEcayIKQQhqKQIAIhI3AwAgBiAKKQIAIhM3AxAgCSAFQQxrIgopAgA3AgAgCUEIaiAKQQhqKAIANgIAIA4gAiAFa0FkbUEcbGoiBSATNwIAIAVBCGogEjcCACAFQRBqIAkpAwA3AgAgBUEYaiAPQRhqKAIANgIAIBBCAX0gEIMhECAMQQFrIgwNAAsLIAEoAggLIQJBIEEIELMOIgEEQCABIA06ABggASARNwMQIAEgCzYCDCABIAI2AgggASAHNgIEIAEgAzYCACAAQbD/wgA2AgQgACABNgIAIAZBMGokAA8LQQhBIEGQxMQAKAIAIgBBzAggABsRAAAAC+sUAhV/C30jAEHQAWsiCSQAIAkgASgCACIBNgJcAkACQAJAAkACQCACKgIAIhogAioCBCIbXA0AIAIqAggiGSAaXA0AIBkgG1wNACAaiyABvpQhGUGAgICAeCEDDAELIAlB8ABqIQ8gAyEGIwBBQGoiBCQAIAlB3ABqKgIAIR0gBEEANgIwIARCgICAgMAANwIoIARBKGpBkPfDABCTCCAEKAIsIgNBADYCCCADQoCAgICAgIDAv383AgBBASELIARBATYCMCAGQQJPBEBD2w/JQCAGsyIZlSEfQ9sPSUAgGZUiIEPbD8m/kiEZQQEhDANAIBkQ8QEhISAZEPQBIR4gBgRAIAtBDGwhAUMAAAAAIRwgBiENA0AgHiAcEPEBlCEiIB4gHBD0AZQhIyAEKAIoIAtGBEAgBEEoakGQ+MMAEJMIIAQoAiwhAwsgASADaiIFICM4AgAgBUEIaiAiOAIAIAVBBGogITgCACAEIAtBAWoiCzYCMCABQQxqIQEgHyAckiEcIA1BAWsiDQ0ACwsgICAZkiEZIAYgDEEBaiIMRw0ACwsgBCgCKCALRgRAIARBKGpBoPfDABCTCAsgBCgCLCINIAtBDGxqIgFBADYCCCABQoCAgICAgIDAPzcCACAEIAtBAWoiEzYCMCAEQQA2AjwgBEKAgICAwAA3AjQCQAJAIAYEQAJAIAZBAWsiEARAQQQhA0EIIQdBACEBA0AgBCgCNCABRgRAIARBNGpB8PjDABCTCCAEKAI4IQMLIAMgB2oiBSABQQJqNgIAIAVBBGtBADYCACAFQQhrIAFBAWoiATYCACAEIAE2AjwgB0EMaiEHIAEgEEcNAAsgECAEKAI0Rw0BCyAEQTRqQdD4wwAQkwggBCgCOCEDCyADIBBBDGxqIgFCgICAgBA3AgQgASAGNgIAIAQgBjYCPCADIQEgBkEMbCIFQQxrIgpBDG4iCEEDcUEDRwRAQQAgCEEBakEDcWshBwNAIAEgASkCAEIgiTcCACABQQxqIQEgB0EBaiIHDQALCyAKQSRPBEAgAyAFaiEDA0AgASABKQIAQiCJNwIAIAFBDGoiBSAFKQIAQiCJNwIAIAFBGGoiBSAFKQIAQiCJNwIAIAFBJGoiBSAFKQIAQiCJNwIAIAMgAUEwaiIBRw0ACwsgBCgCPCEDIAZBAmsiFgRAQQAhBUEAIQoDQCAKQQFqIhQgBmwhESAQBEAgA0EMbCEHQQEhEiAFIQEDQCABIAZqIg5BAmohFSADIgggBCgCNCIMRgRAIARBNGpBkPnDABCTCCAEKAI0IQwLIAFBAmohFyAOQQFqIRggBCgCOCIDIAdqIg4gFTYCACAOQQhqIAFBAWoiATYCACAOQQRqIBc2AgAgBCAIQQFqIg42AjwgDCAORgRAIARBNGpBoPnDABCTCCAEKAI4IQMLIAMgB2oiA0EUaiAVNgIAIANBEGogGDYCACADQQxqIAE2AgAgBCAOQQFqIgM2AjwgB0EYaiEHIAYgEkEBaiISRw0ACyAIQQJqIQMLIAYgCmwiAUEBaiESIBFBAWohCiABIAZqIQggBCgCNCIMIANGBEAgBEE0akGQ+cMAEJMIIAQoAjQhDAsgBiARaiERIAQoAjgiASADQQxsaiIHIAg2AgggByASNgIEIAcgCjYCACAEIANBAWoiBzYCPCAHIAxGBEAgBEE0akGg+cMAEJMIIAQoAjghAQsgASAHQQxsaiIBIAo2AgggASARNgIEIAEgCDYCACAEIANBAmoiAzYCPCAFIAZqIQUgFiAUIgpHDQALCyALIAZrIQYgEARAIANBDGwhB0EAIQEDQCABIAZqIgpBAWohCCABIANqIhQgBCgCNEYEQCAEQTRqQfD4wwAQkwgLIAQoAjggB2oiBSAKNgIAIAVBCGogCDYCACAFQQRqIAs2AgAgBCAUQQFqNgI8IAdBDGohByAQIAFBAWoiAUcNAAsgASADaiEDCyAEKAI0IANGBEAgBEE0akHQ+MMAEJMICyAEKAI4IANBDGxqIgEgBjYCCCABIAs2AgQgASALQQFrNgIAIAQgA0EBajYCPCAEKAIoIQUgE0UNASATQQxsIQYgDSEBIAtBDGwiA0EMbiIKQQFxRQRAIAEgASoCAEMAAAA/lDgCACABIAEqAgRDAAAAP5Q4AgQgASABKgIIQwAAAD+UOAIIIAFBDGohAQsgBiANaiEGIANBDE8EQANAIAEgASoCAEMAAAA/lDgCACABQQRqIgggCCoCAEMAAAA/lDgCACABQQhqIgggCCoCAEMAAAA/lDgCACABQQxqIgggCCoCAEMAAAA/lDgCACABQRBqIgggCCoCAEMAAAA/lDgCACABQRRqIgggCCoCAEMAAAA/lDgCACAGIAFBGGoiAUcNAAsLIB0gHZIhGSAEQRBqIARBPGooAgA2AgAgBCAEKQI0NwMIIA0hASAKQQFxRQRAIAEgGSABKgIAlDgCACABIBkgASoCBJQ4AgQgASAZIAEqAgiUOAIIIAFBDGohAQsgA0EMSQ0CA0AgASAZIAEqAgCUOAIAIAFBBGoiAyAZIAMqAgCUOAIAIAFBCGoiAyAZIAMqAgCUOAIAIAFBDGoiAyAZIAMqAgCUOAIAIAFBEGoiAyAZIAMqAgCUOAIAIAFBFGoiAyAZIAMqAgCUOAIAIAYgAUEYaiIBRw0ACwwCC0Gg+MMAQR1B4PjDABDWDAALIARBEGogBEE8aigCADYCACAEIAQpAjQ3AwgLIA8gEzYCCCAPIA02AgQgDyAFNgIAIA8gBCkDCDcCDCAPQRRqIARBEGooAgA2AgAgBEFAayQAIAlB6ABqIA9BCGooAgAiAzYCACAJIAkpAnA3A2AgCSgCfCEBIAkoAoABIQYgCSgChAEhDQJAIANFDQAgAioCCCEZIAkoAmQiBSECIANBDGwiA0EMayIKQQxuQQFxRQRAIAIgGSACKgIIlDgCCCACIBsgAioCBJQ4AgQgAiAaIAIqAgCUOAIAIAJBDGohAgsgCkEMSQ0AIAMgBWohAwNAIAIgGiACKgIAlDgCACACQQhqIgUgGSAFKgIAlDgCACACQQRqIgUgGyAFKgIAlDgCACACQQxqIgUgGiAFKgIAlDgCACACQRBqIgUgGyAFKgIAlDgCACACQRRqIgUgGSAFKgIAlDgCACADIAJBGGoiAkcNAAsLIAlB8ABqIAlB4ABqIAYgDRA+IAkoAnAiA0GAgICAeEcEQCAJKgJ0IRkgCUEEaiAJQfgAakHYAPwKAAAgAUUNASAGIAFBDGxBBBCIDwwBCyABBEAgBiABQQxsQQQQiA8LQQAhAgwBCyADQYCAgIB4RwRAQeAAQQQQsw4iAkUNAiACIBk4AgQgAiADNgIAIAJBCGogCUEEakHYAPwKAABBsJvDACEDDAELQQRBBBCzDiICRQ0CIAIgGTgCAEGUj8MAIQMLIAAgAzYCBCAAIAI2AgAgCUHQAWokAA8LQQRB4ABBkMTEACgCACIAQcwIIAAbEQAAAAtBBEEEQZDExAAoAgAiAEHMCCAAGxEAAAALhQUCB38DfSABQQRqIQUgAUGEAWohBiACKAIAIQcCQAJAA0AgASgCjAEiAkUEQCAFIQQgBiIDKAIAIgJBIU8EQCABKAIIIQQgBSEDIAEoAgQhAgsgAkUNAyADIAJBAWsiAjYCACAEIAJBAnRqKAIAIQILIAFBADYCjAEgAigCHEH/////A3FBAUcEQCACKAIMIgIgASgCiAEiBCgCCCIDTw0CIAEqAqQBIQogASoCoAEhC0EBIQMCQCABKgKcASIMIAQoAgQgAkEGdGoiAioCAGBFDQAgAioCBCALX0UNACACKgIIIApfRQ0AIAIqAhAgASoCkAFgRQ0AIAIqAhQgASoClAFgRQ0AIAIqAhggASoCmAFgRQ0AIAEgAjYCjAFBACEDCyACKgIgIAxfRQ0BIAIqAiQgC19FDQEgAioCKCAKX0UNASACKgIwIAEqApABYEUNASACKgI0IAEqApQBYEUNASACKgI4IAEqApgBYEUNASACQSBqIQkgA0UEQAJ/IAYoAgAiAkEhSQRAIAIhBCAFIQhBICECIAYMAQsgASgCBCEEIAEoAgghCCAFCyEDIAIgBEYEQCABEKwEIAEoAgQhBCABKAIIIQggBSEDCyAIIARBAnRqIAk2AgAgAyADKAIAQQFqNgIADAILIAEgCTYCjAEMAQsgAigCDCICIAcoAkAiAygCEE8NACADKAIMIAJBsAFsaiIDKAIAQQFHDQAgByAHKAI8IgRBiANqKAIAIARBjANqKAIAIAIgAygCBCIEIANBEGoiAxCsBUUNAAsgACACrSAErUIghoQ3AgAgACADNgIIDwsgAiADQazXwQAQiAsACyABQQA2AowBIABBADYCCAuVBQELfyMAQdACayIEJAAgASgCECIFQQF0IQkgASgCBCELIAEoAgAhDCAFIQcgBSABKAIIIgMgBWsiBksEfwJAIAVBxa70AksEf0EABSAFQeACbCEGIAQgAwR/IAQgA0GwAWw2AqgBIAQgASgCDDYCoAFBEAVBAAs2AqQBIARBECAGIARBoAFqEPQJIAQoAgBBAUcNASAEKAIIIQMgBCgCBAsgA0GQv8EAENMNAAsgBCgCBCEDIAEgCTYCCCABIAM2AgwgBQUgBgsgCSAFayIDQQAgAyAJTRsiA0kEQCABQQhqIAUgA0EQQbABEOIGIAEoAhAhBwsCQCAFRQ0AIAEoAgwhBiAJQQFrIQ0CQCAFQQFxRQRAIAUhAwwBCyAGIAdBsAFsaiIIIAsgBUEBaiIDIAUgDUYiChs2AgggCCAMQQEgChs2AgQgCEEANgIAIAdBAWohBwsgBUEBRg0AIAMgCWtBAWohCCAGIAdBsAFsaiEGA0AgBkEANgIAIAZBsAFqQQA2AgAgBkEEakEBIAwgCBs2AgAgBkEIaiADQQFqIgogCyAIGzYCACAGQbgBaiALIANBAmoiAyAKIA1GIgobNgIAIAZBtAFqIAxBASAKGzYCACAIQQJqIQggBkHgAmohBiAHQQJqIQcgAyAJRw0ACwsgASAFNgIEIAFBATYCACABIAc2AhAgBCABIAIQggYgBCgCEEECRwRAIARBoAFqIgAgBEGgAfwKAAAgACgCQCICKAIAIQEgAiABQQFrNgIAIAFBAUYEQCAAQUBrEJoKCyAAKAI4QQJPBEAgACgCPEEsQQQQiA8LQYS+wQBBPiAEQc8CakH0vcEAQcS+wQAQ2goACyAAIAQpAwA3AwAgBEHQAmokAAvWBAIRfQR/AkACQCABBEAgACABQQN0aiEYIAUqAhghDyAFKgIUIRAgBSoCECERIAUqAgwhDCAFKgIAIQkgBSoCCCEKIAUqAgQhCwNAIAAoAgAiFyADTw0DIAIgF0GwAWxqIgUoAgBBAUcNAyAAQQRqKAIAIhkgBSgCBEcNAyAFKAIgRQ0CIAUqAkAiDSAJlCAFKgI8Ig4gC5STIgYgBpIhBiAOIAqUIAUqAkQiByAJlJMiCCAIkiEIIA8gByAMIAaUIAkgCJQgCyAHIAuUIA0gCpSTIgcgB5IiB5STkpKSIRIgECANIAwgCJQgCiAHlCAJIAaUk5KSkiETIBEgDiAMIAeUIAsgBpQgCiAIlJOSkpIhByAFKgI4IgYgCpQgBSoCMCIIIAmUIAUqAjQiDSAMlJIgBSoCLCIOIAuUk5IhFCAOIAqUIAYgC5QgCCAMlCANIAmUk5KSIRUgDSALlCAGIAmUIA4gDJSSkiAIIAqUkyEWIAYgDJQgDiAJlJMgCCALlJMgDSAKlJMhBiAFKAKAASIBQQFxRQRAIAUgAUEBcjYCgAEgBCgCCCIBIAQoAgBGBEAgBEHoi8IAELgICyAEKAIEIAFBA3RqIhogGTYCBCAaIBc2AgAgBCABQQFqNgIIIAUoAoABIQELIAUgEjgCnAEgBSATOAKYASAFIAc4ApQBIAUgBjgCkAEgBSAUOAKMASAFIBU4AogBIAUgFjgChAEgBSABQQhyNgKAASAYIABBCGoiAEcNAAsLDwtBiJ3CABCRDwALQbCJwgBBE0HYscIAENcLAAu7CgITfwF+IwBB8ABrIgkkAAJAAkACQAJAIABFDQAgAEEIayINKAIAQQFqIQggDSAINgIAIAhFDQEgACgCACIIQX9GDQIgACAIQQFqNgIAIAkgDTYCFCAJIAA2AhAgCSAAQQRqIgo2AgwgAkUNACACQQhrIg4oAgBBAWohCCAOIAg2AgAgCEUNASACKAIAIghBf0YNAiACIAhBAWo2AgAgCSAONgIgIAkgAjYCHCAJIAJBBGoiEDYCGCAERQ0AIARBCGsiDygCAEEBaiEIIA8gCDYCACAIRQ0BIAQoAgAiCEF/Rg0CIAQgCEEBajYCACAJIA82AiwgCSAENgIoIAkgBEEEaiIRNgIkIAlBMGohCCAHQQBHIRIjAEGAAWsiByQAAkAgCiADvSIbpyIVIBtCIIinIhYQuAwiCwRAAkACQCAKIAG9IhunIBtCIIinELgMIgwEQCAMKAJAIRMgDCgCRCIUKAIIIRcgCygCQCEYIAsoAkQiGSgCCCEaIAdBAToAESAHIBI6ABAgByAFOAIMIAcgBjgCCCAHQcQAaiIKIAxB9ABqIBAgEyAXQQFrQXhxakEIaiAUIAtB9ABqIBEgGCAaQQFrQXhxakEIaiAZIAdBCGoiCxCyAyAHLQB4IgxBBUYNASALQTBqIhAgCkEwaigCADYCACALQShqIhEgCkEoaikCADcDACALQSBqIhIgCkEgaikCADcDACALQRhqIhMgCkEYaikCADcDACALQRBqIhQgCkEQaikCADcDACALQQhqIApBCGopAgA3AwAgB0EGaiIKIAdB+wBqLQAAOgAAIAcgBykCRDcDCCAHIAcvAHk7AQQgDEEERg0BIAggBykDCDcCCCAIIAcvAQQ7AD0gCEE4aiAQKAIANgIAIAhBMGogESkDADcCACAIQShqIBIpAwA3AgAgCEEgaiATKQMANwIAIAhBGGogFCkDADcCACAIQRBqIAdBEGopAwA3AgAgCEE/aiAKLQAAOgAAIAggDDoAPCAIIBY2AgQgCCAVNgIADAILQczOwQBBzABBmM/BABDXCwALIAggBykCRDcCACAIQQQ6ADwgCCAHLwBBOwA9IAhBOGogB0HEAGoiCkE4aigCADYCACAIQTBqIApBMGopAgA3AgAgCEEoaiAKQShqKQIANwIAIAhBIGogCkEgaikCADcCACAIQRhqIApBGGopAgA3AgAgCEEQaiAKQRBqKQIANwIAIAhBCGogCkEIaikCADcCACAIQT9qIAdBwwBqLQAAOgAACyAHQYABaiQADAELQczOwQBBzABBoNPBABDXCwALIAQgBCgCAEEBazYCACAPIA8oAgBBAWsiBDYCACAERQRAIAlBLGoQqA0LIAIgAigCAEEBazYCACAOIA4oAgBBAWsiAjYCACACRQRAIAlBIGoQqA0LIAAgACgCAEEBazYCACANIA0oAgBBAWsiADYCACAARQRAIAlBFGoQ7wwLQQAhACAJLQBsQQRHBEBBzABBBBCzDiIARQ0EIABBADYCCCAAQoGAgIAQNwIAIAAgCSkCMDcCDCAAQRRqIAlBOGopAgA3AgAgAEEcaiAJQUBrKQIANwIAIABBJGogCUHIAGopAgA3AgAgAEEsaiAJQdAAaikCADcCACAAQTRqIAlB2ABqKQIANwIAIABBPGogCUHgAGopAgA3AgAgAEHEAGogCUHoAGopAgA3AgAgAEEIaiEACyAJQfAAaiQAIAAPCxCbDwsACxCcDwALQQRBzABBkMTEACgCACIAQcwIIAAbEQAAAAupBAINfQF/IABBDGpBAiABKgIA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IANBAXFrNgIIIAAgACgCDEEBajYCDCAEIAtBA3RrIgBBCGsgATYCACAAQQRrIAI2AgALIBBBEGokAA8LQQALIQ8gGEEIaiIYIANqIAdxIQMMAAsAC64EAQl/IwBBIGsiAiQAAkAgASgCBCIDRQRAIABBgICAgHg2AgAMAQsgASADQQFrNgIEAn8gASgCACIBKAIEIgVBB00EQCACQoHKADcDCEEBIQQgAkEIahCiDQwBCyABIAVBCGsiBTYCBCABIAEoAgAiA0EIajYCACACIAMpAAAQpwggAigCACEEIAIoAgQLIQMCQAJAIARBAXENACADRQRAQQQhA0EAIQRBACEBDAILAn8CQEGAgAggAyADQYCACE8bIgRBA3QiBkEEELMOIgcEQCACIAc2AgwgAiAENgIIQQAhBiACQQA2AhAgASgCACEJQQAhBANAIAVBBEkNAiABIAVBBGsiBTYCBCABIAYgCWoiCEEEaiIHNgIAIAVBBEkEQCACQoHKADcDGCACQRhqEKINDAQLIAgoAAAhCCABIAVBBGsiBTYCBCABIAdBBGo2AgAgBygAACEHIAIoAgggBEYEQCACQQhqQcirwQAQuAgLIAIoAgwgBmoiCiAINgIAIApBBGogBzYCACACIARBAWoiBDYCECAGQQhqIQYgAyAERw0ACyACKAIMIQMgAigCCCIBQYCAgIB4Rw0EDAMLQQQgBkG4q8EAENMNAAsgAkKBygA3AxggAkEYahCiDQshAyACKAIIIgFFDQAgAigCDCABQQN0QQQQiA8LIABBgYCAgHg2AgAgACADNgIEDAELIAAgBDYCCCAAIAM2AgQgACABNgIACyACQSBqJAALnQQBBX8jAEHgAGsiAiQAAkACQAJAIAAEQCAAQRBrIgEoAgAiBEEBaiEDIAEgAzYCACADRQ0BIAAoAgANAiAAKALcBSEDIABBAjYC3AUgASAENgIAQQAhASADQQJHBEAgAkEIaiIBQRBqIgQgAEHwBWopAwA3AwAgAUEIaiIFIABB6AVqKQMANwMAIAIgACkD4AU3AwggAkEgaiIBQTxqIABB2AVqKAIANgIAIAFBNGogAEHQBWopAgA3AgAgAUEsaiAAQcgFaikCADcCACABQSRqIABBwAVqKQIANwIAIAFBHGogAEG4BWopAgA3AgAgAUEUaiAAQbAFaikCADcC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AEIANwO4BCAAQYCU69wDNgKwBCAAQQA2AqAEIABCADcDmAQgAEGAlOvcAzYCkAQgAEEANgKABCAAQgA3A/gDIABBgJTr3AM2AvADIABBADYC4AMgAEIANwPYAyAAQYCU69wDNgLQAyAAQQA2AsADIABCADcDuAMgAEGAlOvcAzYCsAMgAEEANgKgAyAAQgA3A5gDIABBgJTr3AM2ApADIABBADYCgAMgAEIANwP4AiAAQYCU69wDNgLwAiAAQQA2AuACIABBADYC2AIgAEIANwPQAiAAQYCU69wDNgLIAiAAQQA2ArgCIABCADcDsAIgAEGAlOvcAzYCqAIgAEEANgKYAiAAQgA3A5ACIABBgJTr3AM2AogCIABBADYC+AEgAEIANwPwASAAQYCU69wDNgLoASAAQgA3A9gBIABBADYC0AEgAEIANwPIASAAQYCU69wDNgLAASAAQQA2ArABIABCADcDqAEgAEGAlOvcAzYCoAEgAEEANgKQASAAQgA3A4gBIABBgJTr3AM2AoABIABBADYCcCAAQgA3A2ggAEGAlOvcAzYCYCAAQQA2AlAgAEEANgJIIABCADcDQCAAQYCU69wDNgI4IABBADYCKCAAQgA3AyAgAEGAlOvcAzYCGCAAQQA2AgggAEKBgICAEDcDACAAQQhqC+kDAQp/IwBB0ABrIgEkAAJAAkACQCAABEAgAEEQayICKAIAIgRBAWohAyACIAM2AgAgA0UNASAAKAIADQIgAC0AiAghAyAAQQI6AIgIIAIgBDYCAEEAIQIgA0ECRwRAIAFByABqIgIgAEGACGopAgA3AwAgAUFAayIEIABB+AdqKQIANwMAIAFBOGoiBSAAQfAHaikCADcDACABQTBqIgYgAEHoB2opAgA3AwAgAUEoaiIHIABB4AdqKQIANwMAIAFBIGoiCCAAQdgHaikCADcDACABQRhqIgkgAEHQB2opAgA3AwAgAUEOaiIKIABBiwhqLQAAOgAAIAEgACkCyAc3AxAgASAALwCJCDsBDEHQAEEEELMOIgBFDQQgAEEANgIIIABCgYCAgBA3AgAgACABKQMQNwIMIABBFGogCSkDADcCACAAQRxqIAgpAwA3AgAgAEEkaiAHKQMANwIAIABBLGogBikDADcCACAAQTRqIAUpAwA3AgAgAEE8aiAEKQMANwIAIABBxABqIAIpAwA3AgAgACADOgBMIAAgAS8BDDsATSAAQc8AaiAKLQAAOgAAIABBCGohAgsgAUHQAGokACACDwsQmw8LAAsQnA8AC0EEQdAAQZDExAAoAgAiAEHMCCAAGxEAAAALqgMCB38CfSABKAIIIgZFBEAgAEEANgIADwsgASAGQQFrIgQ2AgggASgCBCIDIARBA3RqIgEqAgQhCSABKAIAIQUCQCAERQRAIAkhCiAFIQgMAQsgAyoCBCEKIAMgCTgCBCADKAIAIQggAyAFNgIAQQAhAUEBIQIgBkEETwRAIARBAmsiAUEAIAEgBE0bIQdBACEBA0AgAyABQQN0aiADIAIgAyACQQN0aiIBQQRqKgIAIAFBDGoqAgBeRWoiAUEDdGopAgA3AgAgAUEBdCIEQQFyIQIgBCAHSQ0ACwsCQAJAIAZBAmsgAkYEQCADIAFBA3RqIAMgAkEDdGoiASkCADcCACABIAk4AgQgASAFNgIAIAIhAQwBCyADIAFBA3RqIgIgCTgCBCACIAU2AgAgAQ0AQQAhAgwBCwNAIAMgAUEBayIHQQF2IgJBA3RqIgRBBGoqAgAgCV1FBEAgASECDAILIAMgAUEDdGogBCkCADcCACACIQEgB0EBSw0ACwsgAyACQQN0aiIBIAk4AgQgASAFNgIACyAAIAo4AgggACAINgIEIABBATYCAAusAwIBfwh9IwBBMGsiBiQAAkAgBUMAAAAAYARAIAYgAioCCCIKjDgCFCAGIAIqAgQiCIw4AhAgBiACKgIAIguMOAIMIAZBJGogAyABIAZBDGogBBECACAFjCAIIAYqAigiCYyUIAsgBioCJCIMlJMgCiAGKgIsIgeUkyIFX0UEQEECIQIMAgsgBUMAAAAAYARAQQAhAgwCCyAAIAcgCiAFlJI4AgwgACAJIAggBZSSOAIIIAAgDCALIAWUkjgCBCAMIAEqAhCTIgwgASoCBCIFlCAJIAEqAhSTIg0gASoCACIKlJMiCCAIkiEIIA0gASoCCCILlCAHIAEqAhiTIgcgBZSTIgkgCZIhCSAAIAcgASoCDCIOIAiUIAUgCZQgCiAHIAqUIAwgC5STIgcgB5IiB5STkpI4AhggACANIA4gB5QgCiAIlCALIAmUk5KSOAIUIAAgDCAOIAmUIAsgB5QgBSAIlJOSkjgCEEEBIQIMAQsgBkEANgIcIAZBATYCECAGQZjvwgA2AgwgBkIENwIUIAZBDGpB0O/CABC4DQALIAAgAjYCACAGQTBqJAALgQMBDX0CfSACKgIIIgkgAyoCBCIPlCACKgIEIgogAyoCCCIElJMiBiAGkiEHIAIqAgAiBiAElCAJIAMqAgAiBZSTIgsgC5IhDEMAAAAAIAUgAioCDCILIAeUIAkgDJQgCiAKIAWUIAYgD5STIgUgBZIiEJSTkpIiBSAFlCAEIAsgEJQgCiAHlCAGIAyUk5KSIgQgBJSSIg5DAAAAAFsNABogBCAOkSIIlSABKgIEIg6UIQ0gBSAIlSAOlAshCCAAIAIqAhggDSAEIAEqAggiBJSSIg0gCyAGIAEqAgAgDyALIAyUIAYgEJQgCSAHlJOSkiIHmCAHIASUkiIHlCAKIAggBSAElJIiDJSTIgUgBZIiBZQgBiAJIAyUIAYgDZSTIgQgBJIiBJQgCiAKIA2UIAkgB5STIgggCJIiCJSTkpKSOAIIIAAgAioCFCAHIAsgBJQgCSAIlCAGIAWUk5KSkjgCBCAAIAIqAhAgDCALIAiUIAogBZQgCSAElJOSkpI4AgALqgkCC38CfiMAQaAFayIGJAACQAJAAkACQCADRQ0AIANBCGsiCCgCAEEBaiEFIAggBTYCACAFRQ0BIAMoAgAiBUF/Rg0CIAMgBUEBajYCACAGIAg2AgwgBiADNgIIIAYgA0EEaiIKNgIEIARFDQAgBEEIayIJKAIAQQFqIQUgCSAFNgIAIAVFDQEgBCgCACIFQX9GDQIgBCAFQQFqNgIAIAYgCTYC3AIgBiAENgLYAiAGIARBBGo2AtQCIAZBEGoiBUIANwNoIAVCADcCVCAFQgA3AoQBIAVB+ABqQgA3AwAgBUHwAGpCADcDACMAQeAAayIHQc0AaiILQQtqQgA3AAAgB0E6aiIMQQtqQgA3AAAgB0EnaiINQQtqQgA3AAAgB0EUaiIOQQtqQgA3AAAgB0EBaiIPQQtqQgA3AAAgBUHcAGpCADcCACAFQYwBakIANwIAIAdCADcAUCAHQgA3AD0gB0IANwAqIAdCADcAFyAHQgA3AAQgBUIANwMIIAVCADcDACAFQQE6AKgBIAVC////+wc3A6ABIAUgAjgCnAEgBSABOAKYASAFIAA4ApQBIAVBgICA/AM2AoABIAVBgICA/AM2AmQgBUH////7BzYCUCAFQoCAgIDw//+/fzcDSCAFQv////v///+//wA3A0AgBUL////7BzcDOCAFQoCAgIDw//+/fzcDMCAFQv////v///+//wA3AyggBUL////7BzcDICAFQoCAgIDw//+/fzcDGCAFQv////v///+//wA3AxAgBUL////7BzcCvAEgBUEAOgDEASAFQv////sHNwPYASAFQQA6AOABIAVBuAFqIAtBD2ooAAA2AAAgBUGxAWogC0EIaikAADcAACAFIAcpAE03AKkBIAUgBykAOjcAxQEgBUHNAWogDEEIaikAADcAACAFQdQBaiAMQQ9qKAAANgAAIAUgBykAJzcA4QEgBUHpAWogDUEIaikAADcAACAFQfABaiANQQ9qKAAANgAAIAVBADoA/AEgBUL////7BzcC9AEgBUEAOgCYAiAFQv////sHNwOQAiAFQQA7AbgCIAVBADoAtAIgBUL////7BzcCrAIgBUGBjoAINgG6AiAFQYwCaiAOQQ9qKAAANgAAIAVBhQJqIA5BCGopAAA3AAAgBSAHKQAUNwD9ASAFQagCaiAPQQ9qKAAANgAAIAVBoQJqIA9BCGopAAA3AAAgBSAHKQABNwCZAiAKQQhqKAIAIQUgCikCACEQIAQgBCgCAEEBazYCACAGQYABaiAFNgIAIAZBnAFqIARBDGooAgA2AgAgBCkCBCERIAkgCSgCAEEBayIENgIAIAYgEDcDeCAGIBE3ApQBIARFBEAgBkHcAmoQqA0LIAMgAygCAEEBazYCACAIIAgoAgBBAWsiAzYCACADRQRAIAZBDGoQqA0LIAZB4AJqIAZBEGpBwAL8CgAAQeACQRAQsw4iA0UNAyADQQA2AhAgA0KBgICAEDcDACADQRRqIAZB1AJqQcwC/AoAACAGQaAFaiQAIANBEGoPCxCbDwsACxCcDwALQRBB4AJBkMTEACgCACIDQcwIIAMbEQAAAAuaAwEJfUMAAIA/IAEqAggiBZgiBCABKgIEIgMgA5RDAACAvyAFIASSlSIIlJIhBiABKgIAIgIgAiAElJQgCJRDAACAP5IhCSACIASMlCEKAkACQCACIAQgAiADlCAIlCIIlCIEkiADkyIHQwAAAABeRQRAIAIgA4wiB14gAiAEXnENASAEIAdeRQRAIAogBpJDAACAPyADkyACkyAEk5EiAiAC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DiACKgIMIgYgBpQiEiACKgIAIgQgBJQiE5MiFCACKgIEIgggCJQiD5OSi5QgASoCBCIQIAggA5QiByAHkiIVIAQgBpQiByAHkiIWkouUIAEqAgAiByAEIAOUIgkgCZIiCSAIIAaUIgogCpIiCpOLlJKSIheSkjgCFCAAIBEgF5MgBZM4AgggACAFIAsgDSAVIBaTi5QgByAEIAiUIgQgBJIiBCADIAaUIgMgA5IiA5KLlCAQIA8gFJIgDpOLlJKSIgaSkjgCECAAIAUgDCANIAkgCpKLlCAQIAQgA5OLlCAHIBMgEpIgD5MgDpOLlJKSIgOSkjgCDCAAIAsgBpMgBZM4AgQgACAMIAOTIAWTOAIAIBhBIGokAAufCQILfwJ+IwBBoAVrIgQkAAJAAkACQAJAIAFFDQAgAUEIayIGKAIAQQFqIQMgBiADNgIAIANFDQEgASgCACIDQX9GDQIgASADQQFqNgIAIAQgBjYCDCAEIAE2AgggBCABQQRqIgg2AgQgAkUNACACQQhrIgcoAgBBAWohAyAHIAM2AgAgA0UNASACKAIAIgNBf0YNAiACIANBAWo2AgAgBCAHNgLcAiAEIAI2AtgCIAQgAkEEajYC1AIgBEEQaiIDQgA3A2ggA0IANwOQASADQgA3AlQgA0H4AGpCADcDACADQfAAakIANwMAIANBmAFqQgA3AwAjAEHgAGsiBUHNAGoiCUELakIANwAAIAVBOmoiCkELakIANwAAIAVBJ2oiC0ELakIANwAAIAVBFGoiDEELakIANwAAIAVBAWoiDUELakIANwAAIANB3ABqQgA3AgAgBUIANwBQIAVCADcAPSAFQgA3ACogBUIANwAXIAVCADcABCADQRBqQQA2AgAgA0EIakIANwMAIANCADcDACADIAA4AhQgA0KAgICA8P//v383AxggA0L////7BzcDICADQv////v///+//wA3AyggA0KAgICA8P//v383AzAgA0L////7BzcDOCADQv////v///+//wA3A0AgA0KAgICA8P//v383A0ggA0KAgID8AzcDgAEgA0IANwOIASADQv////sHNwOgASADQQA6AKgBIANBgICA/AM2AmQgA0H////7BzYCUCADIAUpAE03AKkBIANBsQFqIAlBCGopAAA3AAAgA0G4AWogCUEPaigAADYAACADQQA6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QQFqNgIAIAMgBTYCDCADIAA2AgggAyAAQQRqIgc2AgQgAUUNACABQQhrIgYoAgBBAWohAiAGIAI2AgAgAkUNASABKAIAIgJBf0YNAiABIAJBAWo2AgAgAyAGNgLcAiADIAE2AtgCIAMgAUEEajYC1AIgA0EQaiICQgA3A2ggAkIANwOQASACQgA3AlQgAkH4AGpCADcDACACQfAAakIANwMAIAJBmAFqQgA3AwAjAEHgAGsiBEHNAGoiCEELakIANwAAIARBOmoiCUELakIANwAAIARBJ2oiCkELakIANwAAIARBFGoiC0ELakIANwAAIARBAWoiDEELakIANwAAIAJB3ABqQgA3AgAgBEIANwBQIARCADcAPSAEQgA3ACogBEIANwAXIARCADcABCACQgA3AwggAkIANwMAIAJBADoAqAEgAkL////7BzcDoAEgAkIANwOIASACQoCAgPwDNwOAASACQYCAgPwDNgJkIAJB////+wc2AlAgAkKAgICA8P//v383A0ggAkL////7////v/8ANwNAIAJC////+wc3AzggAkKAgICA8P//v383AzAgAkL////7////v/8ANwMoIAJC////+wc3AyAgAkKAgICA8P//v383AxggAkL////7////v/8ANwMQIAIgBCkATTcAqQEgAkGxAWogCEEIaikAADcAACACQbgBaiAIQQ9qKAAANgAAIAJBADoAxAEgAkL////7BzcCvAEgAkEAOgDgASACQv////sHNwPYASACQQA6APwBIAJC////+wc3AvQBIAJB1AFqIAlBD2ooAAA2AAAgAkHNAWogCUEIaikAADcAACACIAQpADo3AMUBIAJB8AFqIApBD2ooAAA2AAAgAkHpAWogCkEIaikAADcAACACIAQpACc3AOEBIAJBjAJqIAtBD2ooAAA2AAAgAkGFAmogC0EIaikAADcAACACIAQpABQ3AP0BIAJBADoAmAIgAkL////7BzcDkAIgAkGoAmogDEEPaigAADYAACACQaECaiAMQQhqKQAANwAAIAIgBCkAATcAmQIgAkGAAjsBvAIgAkEHNgK4AiACQQA6ALQCIAJC////+wc3AqwCIAdBCGooAgAhAiAHKQIAIQ0gASABKAIAQQFrNgIAIANBgAFqIAI2AgAgA0GcAWogAUEMaigCADYCACABKQIEIQ4g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DWoQog0MAgsgAygABCEGIAEgBUEMayIKNgIEIAEgA0EMajYCACAKQQNLDQIgAkEAOgCTDSACQSU7AJENIAJBADYClA0gAkEBOgCQDSACQZANahCiDQwBCyACQQA6AJMNIAJBJTsAkQ0gAkEANgKUDSACQQE6AJANIAJBkA1qEKINCyEBIARBFDYCACAEIAE2AgQMEAsgAyoACCE3IAEgBUEQazYCBCABIANBEGo2AgAgBCADKgAMOAIMIAQgNzgCCCAEIAY2AgQgBEERNgIADA8LAkACfyAHQQRPBEAgASAFQQhrIgY2AgQgASADQQhqNgIAIAZBBEkEQCACQQA6AJMNIAJBJTsAkQ0gAkEANgKUDSACQQE6AJANIAJBkA1qEKINDAILIAMoAAQhBiABIAVBDGsiCjYCBCABIANBDGo2AgAgCkEDSw0CIAJBADoAkw0gAkElOwCRDSACQQA2ApQNIAJBAToAkA0gAkGQDWoQog0MAQsgAkEAOgCTDSACQSU7AJENIAJBADYClA0gAkEBOgCQDSACQZANahCiDQshASAEQRQ2AgAgBCABNgIEDA8LIAMqAAghNyABIAVBEGs2AgQgASADQRBqNgIAIAQgAyoADDgCDCAEIDc4AgggBCAGNgIEIARBEDYCAAwOCyACQZANaiIDIAEQyQMgAigClA0hCgJAIAIoApANRQRAIAJBkAlqIgZBGGoiBSADQSBqKQIANwMAIAZBEGoiBiADQRhqKQIANwMAIAJBmAlqIgcgA0EQaikCADcDACACIAIpApgNNwOQCSABKAIEIghBBE8NASACQQA6AJMNIAJBJTsAkQ0gAkEANgKUDSACQQE6AJANIAMQog0hCgsgBEEUNgIAIAQgCjYCBAwOCyABIAhBBGs2AgQgASABKAIAIgFBBGo2AgAgASoAACE3IAQgAikDkAk3AgggBEEQaiAHKQMANwIAIARBGGogBikDADcCACAEQSBqIAUpAwA3AgAgBCA3OAIoIAQgCjYCBCAEQQ82AgAMDQsCQAJ/AkACQCAHQQRJDQAgASAFQQhrIgY2AgQgASADQQhqNgIAIAZBBEkNACADKAAEIQYgASAFQQxrIgo2AgQgASADQQxqNgIAIApBA0sNAQsgAkEAOgCTDSACQSU7AJENIAJBADYClA0gAkEBOgCQDSACQZANahCiDQwBCyADNQAIIS4gASAFQRBrIgo2AgQgASADQRBqNgIAIApBA0sNASACQQA6AJMNIAJBJTsAkQ0gAkEANgKUDSACQQE6AJANIAJBkA1qEKINCyEBIARBFDYCACAEIAE2AgQMDQsgAzUADCEvIAEgBUEUazYCBCABIANBFGo2AgAgBCADKgAQOAIQIAQgBjYCBCAEQQ42AgAgBCAvQiCGIC6ENwMIDAwLAkACfyAHQQRPBEAgASAFQQhrIgY2AgQgASADQQhqNgIAIAZBBE8NAiACQQA6AJMNIAJBJTsAkQ0gAkEANgKUDSACQQE6AJANIAJBkA1qEKINDAELIAJBADoAkw0gAkElOwCRDSACQQA2ApQNIAJBAToAkA0gAkGQDWoQog0LIQEgBEEUNgIAIAQgATYCBAwMCyADKgAEITcgASAFQQxrNgIEIAEgA0EMajYCACAEIAMqAAg4AgggBCA3OAIEIARBDTYCAAwLCwJAAn8gB0EETwRAIAEgBUEIayIGNgIEIAEgA0EIajYCACAGQQRPDQIgAkEAOgCTDSACQSU7AJENIAJBADYClA0gAkEBOgCQDSACQZANahCiDQwBCyACQQA6AJMNIAJBJTsAkQ0gAkEANgKUDSACQQE6AJANIAJBkA1qEKINCyEBIARBFDYCACAEIAE2AgQMCwsgAyoABCE3IAEgBUEMazYCBCABIANBDGo2AgAgBCADKgAIOAIIIAQgNzgCBCAEQQw2AgAMCgsgAiABNgKUESACQQM2ApgRAkACfyAHQQdNBEAgAkKBygA3A5ANIAJBkA1qEKINIQdBAQwBCyABIAVBDGs2AgQgASADQQxqNgIAIAJB8ABqIAMpAAQQpwggAigCdCEHIAIoAnALQQFxBEAgByEGDAELAkAgB0UEQEEEIQZBACEDDAELQcfjASAHIAdBx+MBTxsiA0EkbCIGQQQQsw4iBUUNDCACQQA2AoABIAIgBTYCfCACIAM2AnggAkGYDWohBQNAIAIgATYCwBEgAkEBNgLEESACQZANaiIDIAEQ4wQCQAJ/IAIoApQNIgggAigCkA0NABogAkGQCWoiBkEQaiIKIAVBEGopAgA3AwAgBkEIaiIMIAVBCGopAgA3AwAgAiAFKQIANwOQCSADIAJBwBFqEOsFIAIoApQNIgYgAigCkA0NABogBg0BQQEgAkHPEWpBqKvBABC+CgshBiACKAJ8IQEgAigCgAEiCgRAIAFBHGohAwNAIAMoAgAiBygCACEFIAcgBUEBazYCACAFQQFGBEAgAxCaCgsgA0EkaiEDIApBAWsiCg0ACwsgAigCeCIDRQ0DIAEgA0EkbEEEEIgPDAMLIAJBqBFqIgNBCGoiCyAMKQMANwMAIANBEGoiDCAKKQMANwMAIAIgAikDkAk3A6gRIAIoApgNIQ8gAigCgAEiCiACKAJ4RgRAIAJB+ABqQcirwQAQkQgLIAIoAnwgCkEkbGoiAyACKQOoETcCBCADIAg2AgAgAyAPNgIgIAMgBjYCHCADQQxqIAspAwA3AgAgA0EUaiAMKQMANwIAIAIgCkEBaiIKNgKAASAHQQFrIgcNAAsgAigCfCEGIAIoAngiA0GCgICAeEgNAQsgAiAKNgKkESACIAY2AqARIAIgAzYCnBEgAkGQDWogAkGUEWoQfyACKAKUDSEBAkAgAigCkA0iBUGBgICAeEYEQCABIQYMAQsgAkGQBWoiB0EYaiIMIAJBkA1qIghBIGopAgA3AwAgB0EQaiILIAhBGGopAgA3AwAgAkGYBWoiDyAIQRBqKQIANwMAIAIgAikCmA03A5AFAkACQCAFQYCAgIB4RwRAIAJBkAlqIgdBIGogDCkDADcCACAHQRhqIAspAwA3AgAgB0EQaiAPKQMANwIAIAIgAikDkAU3ApgJIAIgATYClAkgAiAFNgKQCSMAQSBrIgUkAAJAIAJBlBFqIgEoAgQiB0UEQCAIQYCAgIB4NgIADAELIAEgB0EBazYCBAJ/IAEoAgAiBygCBCIPQQdNBEAgBUKBygA3AwhBASEUIAVBCGoQog0MAQsgByAPQQhrIg82AgQgByAHKAIAIgFBCGo2AgAgBSABKQAAEKcIIAUoAgAhFCAFKAIECyEBAkACQCAUQQFxDQAgAUUEQEEEIQFBACEUQQAhBwwCCwJ/AkBBqtUCIAEgAUGq1QJPGyIMQRhsIgtBBBCzDiITBEAgBSATNgIMIAUgDDYCCCAFQQA2AhAgBygCACETQQAhFANAIA9BBEkNAiAHIA9BBGsiDDYCBCAHIBAgE2oiD0EEaiILNgIAIAxBBEkNAiAPKAAAIQ0gByAMQQRrIgw2AgQgByALQQRqIg82AgAgDEEESQ0CIAs1AAAhLiAHIAxBBGsiDDYCBCAHIA9BBGoiCzYCAAJAAkAgDEEESQ0AIA81AAAhLyAHIAxBBGsiDDYCBCAHIAtBBGoiDzYCACAMQQRJDQAgCygAACEJIAcgDEEEayIMNgIEIAcgD0EEaiILNgIAIAxBBE8NAQsgBUEAOgAbIAVBJTsAGSAFQQA2AhwgBUEBOgAYIAVBGGoQog0MBAsgL0IghiAuhCEuIA81AAAhLyAHIAxBBGsiDzYCBCAHIAtBBGo2AgAgLyALNQAAQiCGhCEvIAUoAgggFEYEQCAFQQhqQcirwQAQkggLIAUoAgwgEGoiDCANNgIAIAxBEGogLzcCACAMQQxqIAk2AgAgDEEEaiAuNwIAIAUgFEEBaiIUNgIQIBBBGGohECABIBRHDQALIAUoAgwhASAFKAIIIgdBgICAgHhHDQQMAwtBBCALQbirwQAQ0w0ACyAFQQA6ABsgBUElOwAZIAVBADYCHCAFQQE6ABggBUEYahCiDQshASAFKAIIIgdFDQAgBSgCDCAHQRhsQQQQiA8LIAhBgYCAgHg2AgAgCCABNgIEDAELIAggFDYCCCAIIAE2AgQgCCAHNgIACyAFQSBqJAAgAigClA0iDyEFIAIoApANIgtBgYCAgHhGDQIgC0GAgICAeEYNASACKAKYDSEQIAJBkA1qIQgjAEEQayIHJAACQCACQZQRaiIBKAIEIgVFBEAgCEEANgIADAELIAEgBUEBazYCBAJ/AkAgASgCACIBKAIEIgxBBEkNACABKAIAIQUgASAMQQRrIhM2AgQgASAFQQRqNgIAIBNBBEkNACAFKAAAIRMgASAMQQhrIg02AgQgASAFQQhqNgIAIA1BBEkNACAFNQAEIS4gASAMQQxrIg02AgQgASAFQQxqNgIAAkACQCANQQRJDQAgBTUACCEvIAEgDEEQayINNgIEIAEgBUEQajYCACANQQRJDQAgBSgADCENIAEgDEEUayIJNgIEIAEgBUEUajYCACAJQQRPDQELIAdBADoACyAHQSU7AAkgB0EANgIMIAdBAToACCAHQQhqEKINDAILIAU1ABAhMCAIIA02AhAgCCAvQiCGIC6ENwIIIAggEzYCBCAIQQE2AgAgASAMQRhrNgIEIAEgBUEYajYCACAIIDAgBTUAFEIghoQ3AhQMAgsgB0EAOgALIAdBJTsACSAHQQA2AgwgB0EBOgAIIAdBCGoQog0LIQEgCEECNgIAIAggATYCBAsgB0EQaiQAIAIoApQNIQUCQCACKAKQDSIBQQJHBEAgAkGIAWoiB0EQaiIMIAhBGGooAgA2AgAgB0EIaiIHIAhBEGopAgA3AwAgAiACKQKYDTcDiAEgAUEBcQ0BQQNB9KzBAEGEq8EAEL4KIQULIAsEQCAPIAtBGGxBBBCIDwsMAwsgBCACKQOIATcCSCAEIAIpApAJNwIQIARB2ABqIAwoAgA2AgAgBEHQAGogBykDADcCACAEQRhqIAJBkAlqIgFBCGopAgA3AgAgBEEgaiABQRBqKQIANwIAIARBKGogAUEYaikCADcCACAEQTBqIAFBIGopAgA3AgAgBCAFNgJEIAQgEDYCQCAEIA82AjwgBCALNgI4IAQgCjYCDCAEIAY2AgggBCADNgIEIARBCjYCAAwOC0EBQfSswQBBhKvBABC+CiEGDAILQQJB9KzBAEGEq8EAEL4KIQULIAUhBiACQZAJaiIBKAIAIgMEQCABKAIEIANBBnRBwAAQiA8LIAEoAgwiAwRAIAEoAhAgA0ECdEEEEIgPCyABKAIYIgMEQCABKAIcIANBA3RBBBCIDwsLIAJBnBFqIgEoAgQhAyABKAIIIgUEQCADQRxqIQoDQCAKKAIAIggoAgAhByAIIAdBAWs2AgAgB0EBRgRAIAoQmgoLIApBJGohCiAFQQFrIgUNAAsLIAEoAgAiAQRAIAMgAUEkbEEEEIgPCwsgBEEUNgIAIAQgBjYCBAwJCyACQQY2AqARIAIgATYCnBEgAkGQDWoiAyACQZwRahDmAiACKAKUDSIPIQcCQCACKAKQDSIMQYGAgIB4Rg0AIAJBkAFqIgEgAkGgDWooAgA2AgAgAiACKQKYDTcDiAECQAJ/AkACQAJAIAxBgICAgHhHBEAgAkGAAWogASgCADYCACACIAIpA4gBNwN4IAIoAqARIgFFDQEgAiABQQFrNgKgEQJ/IAIoApwRIggoAgQiAUEHTQRAIAJCgcoANwOQDSADEKINIQdBAQwBCyAIIAFBCGsiATYCBCAIIAgoAgAiA0EIajYCACACQegAaiADKQAAEKcIIAIoAmwhByACKAJoC0EBcQ0FAkACQAJAIAdFBEBBASEFQQAhAwwBC0GAgMAAIAcgB0GAgMAATxsiA0EBELMOIgZFDQEgAiAGNgKUDSACIAM2ApANQQAhAyACQQA2ApgNIAgoAgAhDUF/IQoDQCABIANGBEAgAkKBygA3A5AJIAJBkAlqEKINIQcgAigCkA0iAUUNCiACKAKUDSABQQEQiA8MCgsgCCABIApqNgIEIAggAyANaiIFQQFqNgIAIAUtAAAhCSACKAKQDSADRgRAIwBBIGsiBiQAAkBBCCACQZANaiIFKAIAIhBBAXQiEyATQQhNGyITQQBOBH8gBiAQBH8gBiAQNgIcIAYgBSgCBDYCFEEBBUEACzYCGCAGQQhqQQEgEyAGQRRqEPQJIAYoAghBAUcNASAGKAIQIQsgBigCDAVBAAsgC0HIq8EAENMNAAsgBigCDCEQIAUgEzYCACAFIBA2AgQgBkEgaiQAIAIoApQNIQYLIAMgBmogCToAACACIANBAWoiAzYCmA0gCkEBayEKIAMgB0cNAAsgAigClA0hBSACKAKQDSIKQYKAgIB4SARAIAUhBwwJCyABIANrIQELAkACfyABQQdNBEAgAkKBygA3A5ANIAJBkA1qEKINDAELIAggAUEIayIHNgIEIAggCCgCACIGQQhqNgIAIAYpAAAiLkKAgICAEFoEQCACQQE6AJANIAIgLjcDmA0gAkGQDWogAkHPEWpBgKrBABDvCgwBCyAHQQdNBEAgAkKBygA3A5ANIAJBkA1qEKINDAELIAggAUEQazYCBCAIIAZBEGo2AgAgBikACCIvQoCAgIAQVA0BIAJBAToAkA0gAiAvNwOYDSACQZANaiACQc8RakGAqsEAEO8KCyEHIApFDQggBSAKQQEQiA8MCAsgL6ciCyAupyIQbCIBIANHBEAgAiABNgKUESACIAM2AsARIAJBAjYClA0gAkGUy8EANgKQDSACQgI3ApwNIAIgAkHAEWqtQoCAgIAwhDcDmAkgAiACQZQRaq1CgICAgDCENwOQCSACIAJBkAlqNgKYDSACQZAFaiIDIAJBkA1qIgEQjAUgASADEP0KQQxBBBCzDiIHRQ0CIAcgAikCkA03AgAgB0EIaiABQQhqKAIANgIAIAIoApAFIgEEQCACKAKUBSABQQEQiA8LIApFDQggBSAKQQEQiA8MCAsCQAJAAkAgAigCoBEiCARAAkACQCACKAKcESIBKAIEIgdBBEkNACABKAIAIQYgASAHQQRrIhM2AgQgASAGQQRqNgIAIBNBBEkNACAGKAAAIRMgASAHQQhrIg02AgQgASAGQQhqNgIAIA1BBE8NAQsgAkEAOgCTDSACQSU7AJENIAJBADYClA0gAkEBOgCQDSACQZANahCiDQwLCyAGNQAEIS8gASAHQQxrIg02AgQgASAGQQxqNgIAIAhBAUYNAiANQQRJDQggBjUACCEwIAEgB0EQayINNgIEIAEgBkEQajYCACANQQRJDQggBigADCENIAEgB0EUayIJNgIEIAEgBkEUajYCACAJQQRJDQggBjUAECExIAEgB0EYayIJNgIEIAEgBkEYajYCAAJAIAlBBEkNACAGNQAUITMgASAHQRxrIgk2AgQgASAGQRxqNgIAIAlBBEkNACAGKAAYIQkgASAHQSBrIg42AgQgASAGQSBqNgIAIA5BBE8NAgsgAkEAOgCTDSACQSU7AJENIAJBADYClA0gAkEBOgCQDSACQZANahCiDQwKC0ECQbiuwQBBhKvBABC+CgwJCyAGNQAcITQgASAHQSRrIg42AgQgASAGQSRqNgIAIAhBAkYNByAOQQdNBEAgAkKBygA3A5ANIAJBkA1qEKINDAkLIAY1ACAhMiABIAdBLGsiDjYCBCABIAZBLGo2AgAgBikAJCIuQoCAgIAQVA0BIAJBAToAkA0gAiAuNwOYDSACQZANaiACQc8RakGAqsEAEO8KDAgLQQNBuK7BAEGEq8EAEL4KDAcLAkAgCEEDRwRAIA4NASACQoHKADcDkA0gAkGQDWoQog0MCAtBBUG4rsEAQYSrwQAQvgoMBwsgASAHQS1rNgIEIAEgBkEtajYCACAGLQAsIQEgBEEUaiACQYABaigCADYCACAEIAIpA3g3AgwgBCABOgBUIAQgLj4CUCAEIDJCIIYgNIQ3A0ggBCAJNgJEIAQgM0IghiAxhDcCPCAEIA02AjggBCAwQiCGIC+ENwMwIAQgEzYCLCAEIAs2AiggBCAQNgIkIAQgAzYCICAEIAU2AhwgBCAKNgIYIAQgDzYCCCAEIAw2AgQgBEEJNgIADBELQQEgA0G4q8EAENMNAAsMFQtBAEG4rsEAQYSrwQAQvgohBwwFC0EBQbiuwQBBhKvBABC+CiEHDAMLIAJBADoAkw0gAkElOwCRDSACQQA2ApQNIAJBAToAkA0gAkGQDWoQog0MAQtBBEG4rsEAQYSrwQAQvgoLIQcgCkUNACAFIApBARCIDwsgDARAIA8gDEECdEEEEIgPCwsgBEEUNgIAIAQgBzYCBAwICwJAAkAgB0EESQ0AIAEgBUEIayIGNgIEIAEgA0EIajYCACAGQQRJDQAgAygABCEGIAEgBUEMayIKNgIEIAEgA0EMajYCACAKQQRPDQELIAJBADoAkw0gAkElOwCRDSACQQA2ApQNIAJBAToAkA0gAkGQDWoQog0hASAEQRQ2AgAgBCABNgIEDAgLIAM1AAghLiABIAVBEGs2AgQgASADQRBqNgIAIAM1AAwhLyAEIAY2AgQgBEEINgIAIAQgLiAvQiCGhDcDCAwHCyACQQM2ApQFIAIgATYCkAUgAkGQDWoiBiACQZAFaiIBEH8gAigClA0hBQJAIAIoApANIgdBgYCAgHhGDQACQCAHQYCAgIB4RwRAIAIpArANIS4gAigCrA0hECACKAKoDSELIAIoAqQNIQ4gAigCoA0hEyACKAKcDSEPIAIoApgNIRUgBiABELoDIAIoApQNIgkhCAJAAkACQCACKAKQDSIMQYGAgIB4Rg0AAkACQCAMQYCAgIB4RwRAIAIoApQFRQ0BIAIoApgNIRQCfyACKAKQBSIDKAIEIgFBB00EQCACQoHKADcDkA0gBhCiDSEIQQEMAQsgAyABQQhrIgE2AgQgAyADKAIAIgZBCGo2AgAgAkHgAGogBikAABCnCCACKAJkIQggAigCYAtBAXENAiAIRQ0EQYCACCAIIAhBgIAITxsiEUEDdCIGQQQQsw4iEkUNByACIBI2ApQNIAIgETYCkA0gAkEANgKYDSADKAIAIREDQAJAAn8gAUEDTQRAIAJCgcoANwOQCSACQZAJahCiDQwBCyADIAFBBGsiATYCBCADIA0gEWoiEkEEaiIGNgIAIAFBA0sNASACQoHKADcDkAkgAkGQCWoQog0LIQggAigCkA0iAUUNBCACKAKUDSABQQN0QQQQiA8MBAsgEigAACESIAMgAUEEayIBNgIEIAMgBkEEajYCACAGKAAAIQYgAigCkA0gCkYEQCACQZANakHIq8EAELgICyACKAKUDSANaiIYIBI2AgAgGEEEaiAGNgIAIAIgCkEBaiIKNgKYDSANQQhqIQ0gCCAKRw0ACyACKAKUDSEIIAIoApANIgNBgoCAgHhIDQIMBQtBAUGcrcEAQYSrwQAQvgohCAwCC0ECQZytwQBBhKvBABC+CiEICyAMBEAgCSAMQQxsQQQQiA8LCyAHBEAgBSAHQQZ0QcAAEIgPCyAPBEAgEyAPQQJ0QQQQiA8LIAsEQCAQIAtBA3RBBBCIDwsgCCEFDAQLQQQhCEEAIQMLIAQgCjYCQCAEIAg2AjwgBCADNgI4IAQgFDYCNCAEIAk2AjAgBCAMNgIsIAQgLjcCJCAEIBA2AiAgBCALNgIcIAQgDjYCGCAEIBM2AhQgBCAPNgIQIAQgFTYCDCAEIAU2AgggBCAHNgIEIARBBzYCAAwJC0EAQZytwQBBhKvBABC+CiEFDAELDAgLIARBFDYCACAEIAU2AgQMBgsgAkEHNgKMASACIAE2AogBIAJBkA1qIgEgAkGIAWoiBRB/IAIoApQNIiYhAwJAIAIoApANIh9BgYCAgHhGDQACQAJAAkACQAJAAkAgH0GAgICAeEcEQCACKQKwDSEuIAIoAqwNIScgAigCqA0hIiACKAKkDSEqIAIoAqANISggAigCnA0hIyACKAKYDSErIAEgBRC6AyACKAKUDSIpIQMgAigCkA0iIEGBgICAeEYNBgJAAkACfwJAICBBgICAgHhHBEAgAigCjAEiBUUNAyACKAKYDSEsAn8gAigCiAEiCSgCBCIHQQdNBEAgAkKBygA3A5ANQQEhDSABEKINDAELIAkgB0EIayIHNgIEIAkgCSgCACIBQQhqNgIAIAJB2ABqIAEpAAAQpwggAigCWCENIAIoAlwLIQMgDUEBcQ0KIANFDQFB1aoFIAMgA0HVqgVPGyIBQQxsIgZBBBCzDiIIRQ0TIAIgCDYClA0gAiABNgKQDUEAIQEgAkEANgKYDSAJKAIAIRNBACENA0ACQAJ/IAdBA00EQCACQoHKADcDkAkgAkGQCWoQog0MAQsgCSAHQQRrIgY2AgQgCSABIBNqIghBBGoiBzYCACAGQQNNBEAgAkKBygA3A5AJIAJBkAlqEKINDAELIAgoAAAhDiAJIAZBBGsiBjYCBCAJIAdBBGoiCDYCACAGQQNLDQEgAkKBygA3A5AJIAJBkAlqEKINCyEDIAIoApANIgFFDQwgAigClA0gAUEMbEEEEIgPDAwLIAc1AAAhLyAJIAZBBGsiBzYCBCAJIAhBBGo2AgAgLyAINQAAQiCGhCEvIAIoApANIA1GBEAgAkGQDWpByKvBABCTCAsgAigClA0gAWoiBiAONgIAIAZBBGogLzcCACACIA1BAWoiDTYCmA0gAUEMaiEBIAMgDUcNAAsgAigClA0iAyACKAKQDSIHQYKAgIB4Tg0CGgwKC0EBQfirwQBBhKvBABC+CiEDDAoLQQAhB0EAIQ1BBAshEyAFQQFGDQEgAiAFQQJrIg42AowBIAkoAgQiAUUEQCACQoHKADcDkA0gAkGQDWoQog0hAQwHCyAJIAFBAWsiAzYCBCAJIAkoAgAiCEEBaiIRNgIAQYCAgIB4IRUCQAJAIAgtAAAiBQ4CBwABCwJ/IAFBCE0EQCACQoHKADcDkA1BASEGIAJBkA1qEKINDAELIAkgAUEJayIDNgIEIAkgCEEJaiIRNgIAIAJB0ABqIAgpAAEQpwggAigCUCEGIAIoAlQLIQEgBkEBcQ0HAkAgAUUEQEEEIQpBACEGQQAhFQwBC0HVqgUgASABQdWqBU8bIgVBDGwiBkEEELMOIhJFDRJBACEIIAJBADYCmA0gAiASNgKUDSACIAU2ApANQQAhBgNAAkACQCADIgVBBEkNACAJIANBBGsiAzYCBCAJIAggEWoiD0EEaiIKNgIAIANBBEkNACAPKAAAIQ4gCSADQQRrIgM2AgQgCSAKQQRqIg82AgAgA0EDSw0BCyACQQA6AJMJIAJBJTsAkQkgAkEANgKUCSACQQE6AJAJIAJBkAlqEKINIQEgAigCkA0iA0UNCiACKAKUDSADQQxsQQQQiA8MCgsgCigAACEVIAkgA0EEayIDNgIEIAkgD0EEajYCACAPKAAAIQ8gAigCkA0gBkYEQCACQZANakHIq8EAEJMIIAIoApQNIRILIAggEmoiCiAONgIAIApBCGogDzYCACAKQQRqIBU2AgAgAiAGQQFqIgY2ApgNIAhBDGohCCABIAZHDQALIAIoApQNIQogAigCkA0iFUGCgICAeEgEQCAKIQEMCQsgBUEMayEDCwJ/IANBB00EQCACQoHKADcDkA1BASEIIAJBkA1qEKINDAELIAkgA0EIayIDNgIEIAkgCSgCACIBQQhqNgIAIAJByABqIAEpAAAQpwggAigCSCEIIAIoAkwLIQECQAJAIAhBAXENACABRQRAQQQhDwwIC0HH4wEgASABQcfjAU8bIgVBJGwiCEEEELMOIhJFDQYgAiASNgKUDSACIAU2ApANQQAhDiACQQA2ApgNIAkoAgAhDwNAAkACfwJAAkAgA0EESQ0AIAkgA0EEayIDNgIEIAkgDiAPaiIIQQRqIgU2AgAgA0EESQ0AIAgoAAAhGSAJIANBBGsiAzYCBCAJIAVBBGoiCDYCACADQQNLDQELIAJBADoAkwkgAkElOwCRCSACQQA2ApQJIAJBAToAkAkgAkGQCWoQog0MAQsgBSgAACEWIAkgA0EEayIDNgIEIAkgCEEEaiIFNgIAAkACQCADQQRJDQAgCCgAACEcIAkgA0EEayIDNgIEIAkgBUEEaiIINgIAIANBBEkNACAFKAAAIR4gCSADQQRrIgM2AgQgCSAIQQRqIgU2AgAgA0EDSw0BCyACQQA6AJMJIAJBJTsAkQkgAkEANgKUCSACQQE6AJAJIAJBkAlqEKINDAELIAgoAAAhLSAJIANBBGsiAzYCBCAJIAVBBGoiCDYCAAJAIANBBEkNACAFKAAAIRggCSADQQRrIgM2AgQgCSAIQQRqIgU2AgAgA0EESQ0AIAgoAAAhGiAJIANBBGsiAzYCBCAJIAVBBGoiCDYCACADQQNLDQILIAJBADoAkwkgAkElOwCRCSACQQA2ApQJIAJBAToAkAkgAkGQCWoQog0LIQEgAigCkA0iA0UNAiACKAKUDSADQSRsQQQQiA8MAgsgBSgAACEMIAkgA0EEayIDNgIEIAkgCEEEajYCACAIKAAAIREgAigCkA0gF0YEQCACQZANakHIq8EAEJEIIAIoApQNIRILIA4gEmoiCCAZNgIAIAhBIGogETYCACAIQRxqIAw2AgAgCEEYaiAaNgIAIAhBFGogGDYCACAIQRBqIC02AgAgCEEMaiAeNgIAIAhBCGogHDYCACAIQQRqIBY2AgAgAiAXQQFqIhc2ApgNIA5BJGohDiABIBdHDQALIAIoApQNIQ8gAigCkA0iHkGBgICAeEoNASAPIQELIBVFDQggCiAVQQxsQQQQiA8MCAsgFUGCgICAeE4NBSAKIQEMBwtBDEEEELMOIgFFDRUgASAFNgIEIAFBhICAgHg2AgAMBgtBAkH4q8EAQYSrwQAQvgohAwwGC0EDQfirwQBBhKvBABC+CiEBDAQLQQBB+KvBAEGEq8EAEL4KIQMMBgtBBCAIQbirwQAQ0w0ACyAVQYKAgIB4RgRAIAohAQwCCyACKAKMASEOCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIA4EQCACIA5BAWsiFjYCjAEgAigCiAEiCSgCBCIORQRAIAJCgcoANwOQDSACQZANahCiDSEBDA4LIAkgDkEBayIDNgIEIAkgCSgCACIFQQFqIhI2AgBBgICAgHghGQJAAkAgBS0AACIcDgIFAAELAn8gDkEITQRAIAJCgcoANwOQDUEBIQggAkGQDWoQog0MAQsgCSAOQQlrIgM2AgQgCSAFQQlqIhI2AgAgAkFAayAFKQABEKcIIAIoAkAhCCACKAJECyEBIAhBAXENDiABRQRAQQQhDEEAIRlBACEIDAQLQYCAECABIAFBgIAQTxsiCEECdCIMQQQQsw4iBUUNAkEAIQ4gAkEANgKYDSACIAU2ApQNIAIgCDYCkA1BACEIA0AgA0EDTQRAIAJCgcoANwOQCSACQZAJahCiDSEBIAIoApANIgNFDRAgAigClA0gA0ECdEEEEIgPDBALIAkgA0EEayIDNgIEIAkgDiASaiIMQQRqNgIAIAwoAAAhDCACKAKQDSAIRgRAIAJBkA1qQcirwQAQuQggAigClA0hBQsgBSAOaiAMNgIAIAIgCEEBaiIINgKYDSAOQQRqIQ4gASAIRw0ACyACKAKUDSEMIAIoApANIhlBgoCAgHhODQMgDCEBDA4LQQxBBBCzDiIBRQ0dIAEgHDYCBCABQYSAgIB4NgIADA0LQQRB+KvBAEGEq8EAEL4KIQEMDAtBBCAMQbirwQAQ0w0ACwJ/IANBB00EQCACQoHKADcDkA1BASEOIAJBkA1qEKINDAELIAkgA0EIayIDNgIEIAkgCSgCACIBQQhqNgIAIAJBOGogASkAABCnCCACKAI4IQ4gAigCPAshASAOQQFxDQkCQCABRQRAQQQhEEEAIRhBACERDAELQYCAECABIAFBgIAQTxsiBUECdCIQQQQQsw4iDgRAIAIgDjYClA0gAiAFNgKQDUEAIQ4gAkEANgKYDSAJKAIAIQVBACERA0AgA0EDTQRAIAJCgcoANwOQCSACQZAJahCiDSEBIAIoApANIgNFDQ0gAigClA0gA0ECdEEEEIgPDA0LIAkgA0EEayIDNgIEIAkgBSAOaiIQQQRqNgIAIBAoAAAhECACKAKQDSARRgRAIAJBkA1qQcirwQAQuQgLIAIoApQNIA5qIBA2AgAgAiARQQFqIhE2ApgNIA5BBGohDiABIBFHDQALIAIoApQNIRAgAigCkA0iGEGCgICAeE4NASAQIQEMCwtBBCAQQbirwQAQ0w0ACwJ/IANBB00EQCACQoHKADcDkA0gAkGQDWoQog0hBUEBDAELIAkgA0EIayIDNgIEIAkgCSgCACIBQQhqNgIAIAJBMGogASkAABCnCCACKAI0IQUgAigCMAtBAXEEQCAFIQEMCQtBBCEBAkAgBQRAQYCABCAFIAVBgIAETxsiAUEEdCILQQQQsw4iDkUNAyACIA42ApQNIAIgATYCkA1BACEBIAJBADYCmA0gCSgCACELA0AgA0EESQ0KIAkgA0EEayIDNgIEIAkgASALaiISQQRqIg42AgAgA0EESQ0KIBIoAAAhFiAJIANBBGsiAzYCBCAJIA5BBGoiEjYCACADQQRJDQogDigAACEaIAkgA0EEayIDNgIEIAkgEkEEaiIONgIAIANBBEkNCiASKAAAIRIgCSADQQRrIgM2AgQgCSAOQQRqNgIAIA4oAAAhHCACKAKQDSAdRgRAIAJBkA1qQcirwQAQuggLIAIoApQNIAFqIg4gFjYCACAOQQxqIBw2AgAgDkEIaiASNgIAIA5BBGogGjYCACACIB1BAWoiHTYCmA0gAUEQaiEBIAUgHUcNAAsgAigClA0hASACKAKQDSIaQYKAgIB4Tg0BDAoLQQAhGgsgGUGDgICAeEgEQCAMIQEMCwsgAigCjAEhFgsgFkUNAyACIBZBAWs2AowBIAIoAogBIgkoAgQiA0UEQCACQoHKADcDkAkgAkGQCWoQog0hAwwGCyAJIANBAWs2AgQgCSAJKAIAIhJBAWo2AgBBgICAgHghDgJAAkACQAJAIBItAAAiEg4CAwABCyACQQM2ApQFIAIgCTYCkAUgAkGQCWoiCyACQZAFaiIJEK8EIAIoApQJIQMgAigCkAkiDkGBgICAeEYNCCAOQYCAgIB4Rg0EIAIoApgJIRwgCyAJEK8EIAIoApQJIQUgAigCkAkiFkGBgICAeEYNByAWQYCAgIB4Rg0FIAIoApgJISUgCyAJEIIEIAIoApQJIQsgAigCkAkiIUGBgICAeEcEQCAhQYCAgIB4Rw0CQQJBmK/BAEGEq8EAEL4KIQsLIBYEQCAFIBZBAnRBBBCIDwsgCyEFDAcLQQxBBBCzDiIDRQ0bIAMgEjYCBCADQYSAgIB4NgIADAcLIAIoApgJIRQLIAIgFDYCsA0gAiALNgKsDSACICE2AqgNIAIgJTYCpA0gAiAFNgKgDSACIBY2ApwNIAIgHDYCmA0gAiADNgKUDSACIA42ApANIAJBkAlqIQMjAEEQayIFJAACQCACQYgBaiIJKAIEIgtFBEBBACELIANBADsBAgwBCyAJIAtBAWs2AgRBASELIAkoAgAiCSgCBCIOQQFNBEAgBUKBygA3AwggAyAFQQhqEKINNgIEDAELIAkgDkECazYCBCAJIAkoAgAiC0ECajYCACADIAsvAAA7AQQgA0EBOwECQQAhCwsgAyALOwEAIAVBEGokACACKAKUCSEDAkAgAi8BkAlFBEAgAi8BkglBAXENAUEGQfirwQBBhKvBABC+CiEDCwJAIAJBkA1qIgYoAgAiBUGAgICAeEYNACAFBEAgBigCBCAFQQJ0QQQQiA8LIAYoAgwiBQRAIAYoAhAgBUECdEEEEIgPCyAGKAIYIgVFDQAgBigCHCAFQQJ0QQQQiA8LDAYLIAQgAikCkA03AoABIARBoAFqIAJBsA1qKAIANgIAIARBmAFqIAJBqA1qKQIANwIAIARBkAFqIAJBoA1qKQIANwIAIARBiAFqIAJBmA1qKQIANwIAIAQgAzsBpAEgBCAdNgJ8IAQgATYCeCAEIBo2AnQgBCARNgJwIAQgEDYCbCAEIBg2AmggBCAINgJkIAQgDDYCYCAEIBk2AlwgBCAXNgJYIAQgDzYCVCAEIB42AlAgBCAGNgJMIAQgCjYCSCAEIBU2AkQgBCANNgJAIAQgEzYCPCAEIAc2AjggBCAsNgI0IAQgKTYCMCAEICA2AiwgBCAuNwIkIAQgJzYCICAEICI2AhwgBCAqNgIYIAQgKDYCFCAEICM2AhAgBCArNgIMIAQgJjYCCCAEIB82AgQgBEEGNgIADBMLQQQgC0G4q8EAENMNAAtBAEGYr8EAQYSrwQAQvgohAwwDC0EBQZivwQBBhKvBABC+CiEFDAELQQVB+KvBAEGEq8EAEL4KIQMMAQsgDgRAIAMgDkECdEEEEIgPCyAFIQMLAkAgGUGAgICAeEYNACAZBEAgDCAZQQJ0QQQQiA8LIBgEQCAQIBhBAnRBBBCIDwsgGkUNACABIBpBBHRBBBCIDwsgAyEBDAMLIAJCgcoANwOQCSACQZAJahCiDSEBIAIoApANIgNFDQAgAigClA0gA0EEdEEEEIgPCyAYRQ0AIBAgGEECdEEEEIgPCyAZRQ0AIAwgGUECdEEEEIgPCyAVQYCAgIB4Rg0AIBUEQCAKIBVBDGxBBBCIDwsgHkUNACAPIB5BJGxBBBCIDwsgBwRAIBMgB0EMbEEEEIgPCyABIQMLICAEQCApICBBDGxBBBCIDwsLIB8EQCAmIB9BBnRBwAAQiA8LICMEQCAoICNBAnRBBBCIDwsgIgRAICcgIkEDdEEEEIgPCwsgBEEUNgIAIAQgAzYCBAwFC0EBQYyuwQBBhKvBABC+CiEBDAILIAJBmAVqQonZueKO076XCDcDACACQgA3A5AFQcjLwQAhDkEACyEFIAJBgAFqIAJBmAVqKQMANwMAIAIgAikDkAU3A3gCQAJAAn8CQCAfBEAgAiAJQQJrIgw2ApgRAn8gCygCBCIHQQdNBEAgAkKBygA3A5ANIAJBkA1qEKINIQNBAQwBCyALIAdBCGsiBzYCBCALIAsoAgAiAUEIajYCACACQRBqIAEpAAAQpwggAigCFCEDIAIoAhALQQFxDQQCfwJ/IAMEQEHVqgUgAyADQdWqBU8bIgFBDGwiBkEEELMOIgpFDQsgAiAKNgKUDSACIAE2ApANQQAhDSACQQA2ApgNIAsoAgAhFEEAIQoDQAJAAkAgB0EESQ0AIAsgB0EEayIBNgIEIAsgDSAUaiIHQQRqIgY2AgAgAUEESQ0AIAcoAAAhESALIAFBBGsiATYCBCALIAZBBGoiCDYCACABQQNLDQELIAJCgcoANwOQCSACQZAJahCiDSEDIAIoApANIgFFDQkgAigClA0gAUEMbEEEEIgPDAkLIAY1AAAhLiALIAFBBGsiBzYCBCALIAhBBGo2AgAgLiAINQAAQiCGhCEuIAIoApANIApGBEAgAkGQDWpByKvBABCTCAsgAigClA0gDWoiASARNgIAIAFBBGogLjcCACACIApBAWoiCjYCmA0gDUEMaiENIAMgCkcNAAsgAigClA0iAyACKAKQDSIIQYKAgIB4Tg0BGgwHC0EAIQhBACEKQQQLIQECQAJAIAwEQCACIAlBA2s2ApgRAn8gCygCBCIDQQdNBEAgAkKBygA3A5ANQQEhDSACQZANahCiDQwBCyALIANBCGsiAzYCBCALIAsoAgAiBkEIajYCACACQQhqIAYpAAAQpwggAigCCCENIAIoAgwLIQYgDUEBcQ0HIAZFDQJBgBAgBiAGQYAQTxsiB0EJdCIMQcAAELMOIg1FDQEgAkEANgKkESACIA02AqARIAIgBzYCnBEgAkGXDWohFCALKAIAIQwDQCAGQQFrIQZBACENIAMhBwNAIAMgDUYNByALIAdBAWsiETYCBCALIAwgDWoiF0EBaiIJNgIAIAJBkA1qIA1qIhYgFy0AADoAACARRQ0HIAsgB0ECayIHNgIEIAsgCUEBajYCACAWQQFqIAktAAA6AAAgDUECaiINQYAERyIJDQALIAkEQCANIAJBzxFqQdi6wQAQvgoMCAsgAiACLQCSDToAiAUgAi8BkA0hCSACKACTDSEHIAJBkAlqIhEgFEH5A/wKAAAgAkGQBWoiFyARQfkD/AoAACACQYgBaiAXQfkD/AoAACACIAc2AIkFIAdBGHYhESACKAKIBSEXIAIoApwRIBVGBEAgAkGcEWpByKvBABDGCAsgAigCoBEgFUEJdGoiByAROgAGIAcgFzYBAiAHIAk7AQAgB0EHaiACQYgBakH5A/wKAAAgAyANayEDIAwgDWohDCACIBVBAWoiFTYCpBEgBg0ACyACKAKgESIGIAIoApwRIg1BgoCAgHhODQMaDAcLQQNBjK7BAEGEq8EAEL4KIQYMBgtBwAAgDEG4q8EAENMNAAtBACENQcAACyEHIAJBkA1qIAJBlBFqEIIEIAIoApQNIgkhAwJAIAIoApANIgxBgYCAgHhGDQAgDEGAgICAeEcEQAJAAn8gAigCmBEiAwRAIAIoApgNIRQgAiADQQFrNgKYEQJAIAIoApQRIgMoAgQiC0EESQ0AIAMoAgAhBiADIAtBBGsiETYCBCADIAZBBGo2AgAgEUEESQ0AIAYoAAAhESADIAtBCGsiFzYCBCADIAZBCGo2AgAgF0EETw0DCyACQQA6AJMNIAJBJTsAkQ0gAkEANgKUDSACQQE6AJANIAJBkA1qEKINDAELQQVBjK7BAEGEq8EAEL4KCyEDIAwEQCAJIAxBAnRBBBCIDwsMAgsgBjUABCEuIAMgC0EMazYCBCADIAZBDGo2AgAgBjUACCEvIARBQGsgAkGAAWopAwA3AwAgBCACKQN4NwM4IAQgLiAvQiCGhDcDcCAEIBE2AmwgBCAUNgJoIAQgCTYCZCAEIAw2AmAgBCAVNgJcIAQgBzYCWCAEIA02AlQgBCAKNgJQIAQgATYCTCAEIAg2AkggBCAFNgI0IAQgDjYCMCAEIDE3AyggBCAYNgIkIAQgEDYCICAEIBw2AhwgBCAZNgIYIAQgEzYCFCAEIB42AhAgBCASNgIMIAQgDzYCCCAEQQU2AgAMCQtBBEGMrsEAQYSrwQAQvgohAwsgAyEGIA0EQCAHIA1BCXRBwAAQiA8LDAMLQQJBjK7BAEGEq8EAEL4KIQMMAwsgAkKBygA3A8ARIAJBwBFqEKINCyEGIAIoApwRIgNFDQAgAigCoBEgA0EJdEHAABCIDwsgCARAIAEgCEEMbEEEEIgPCyAGIQMLIAUEQCAOIAVBFGxBG2pBeHEiAWsgASAFakEJakEIEIgPCyADIQELIA8EQCASIA9BBnRBwAAQiA8LIBMEQCAZIBNBAnRBBBCIDwsgEARAIBggEEEDdEEEEIgPCwsgBEEUNgIAIAQgATYCBAsgAkHQEWokAAwBC0EEIAZBuKvBABDTDQALIBsoAhQhAQJAIBsoAhAiA0EURwRAIBtBwAFqIARBCGpBoAH8CgAAIBsgATYCvAEgGyADNgK4ASAbQQhqIQVBACEBQQAhBgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBtBuAFqIgMoAgBBAWsOEwECAwQFBgcICQoLDA0ODxAREhMACyADKAIEIQNBDEEEELMOIgFFDSYgASADNgIIIAFCgYCAgBA3AgBBlI/DACEGDBILQRRBBBCzDiIBRQ0eIAFCgYCAgBA3AgAgASADKQIENwIIIAFBEGogA0EMaigCADYCAEG8/cIAIQYMEQtBJEEEELMOIgFFDREgAUKBgICAEDcCACABIAMpAgQ3AgggAUEQaiADQQxqKQIANwIAIAFBGGogA0EUaikCADcCACABQSBqIANBHGooAgA2AgBB+J7DACEGDBALQSBBBBCzDiIBRQ0RIAFCgYCAgBA3AgAgASADKQIENwIIIAFBEGogA0EMaikCADcCACABQRhqIANBFGopAgA3AgBBpJjDACEGDA8LQSxBBBCzDiIBRQ0RIAFCgYCAgBA3AgAgASADKQIENwIIIAFBEGogA0EMaikCADcCACABQRhqIANBFGopAgA3AgAgAUEgaiADQRxqKQIANwIAIAFBKGogA0EkaigCADYCAEGw9sIAIQYMDgtB+ABBCBCzDiIBRQ0RIAFCgYCAgBA3AwAgAUEIaiADQQhqQfAA/AoAAEGoucMAIQYMDQtBrAFBBBCzDiIBRQ0RIAFCgYCAgBA3AgAgAUEIaiADQQRqQaQB/AoAAEGAqcMAIQYMDAtByABBBBCzDiIBRQ0RIAFCgYCAgBA3AgAgASADKQIENwIIIAFBEGogA0EMaikCADcCACABQRhqIANBFGopAgA3AgAgAUEgaiADQRxqKQIANwIAIAFBKGogA0EkaikCADcCACABQTBqIANBLGopAgA3AgAgAUE4aiADQTRqKQIANwIAIAFBQGsgA0E8aikCADcCAEGApsMAIQYMCwtBFEEEELMOIgFFDRcgAUKBgICAEDcCACABIAMpAgQ3AgggAUEQaiADQQxqKAIANgIAQby2wwAhBgwKC0HcAEEEELMOIgFFDRAgAUKBgICAEDcCACABQQhqIANBBGpB1AD8CgAAQYCswwAhBgwJC0HgAEEEELMOIgFFDRAgAUKBgICAEDcCACABQQhqIANBBGpB2AD8CgAAQYCjwwAhBgwIC0HoAEEEELMOIgFFDRAgAUKBgICAEDcCACABQQhqIANBBGpB4AD8CgAAQbCbwwAhBgwHCyADKgIIITcgAyoCBCE4QRBBBBCzDiIBRQ0ZIAEgNzgCDCABIDg4AgggAUKBgICAEDcCAEGsr8MAIQYMBgsgAyoCCCE3IAMqAgQhOEEQQQQQsw4iAUUNGCABIDc4AgwgASA4OAIIIAFCgYCAgBA3AgBB2LLDACEGDAULQRhBBBCzDiIBRQ0OIAFCgYCAgBA3AgAgASADKQIENwIIIAFBEGogA0EMaikCADcCAEGQ2sMAIQYMBAtBMEEEELMOIgFFDQ4gAUKBgICAEDcCACABIAMpAgQ3AgggAUEQaiADQQxqKQIANwIAIAFBGGogA0EUaikCADcCACABQSBqIANBHGopAgA3AgAgAUEoaiADQSRqKQIANwIAQeDOwwAhBgwDC0EUQQQQsw4iAUUNDyABQoGAgIAQNwIAIAEgAykCBDcCCCABQRBqIANBDGooAgA2AgBBuNTDACEGDAILQRRBBBCzDiIBRQ0OIAFCgYCAgBA3AgAgASADKQIENwIIIAFBEGogA0EMaigCADYCAEHM0cMAIQYMAQtB7ABBBBCzDiIBRQ0MIAFCgYCAgBA3AgAgAUEIaiADQQRqQeQA/AoAAEGk18MAIQYLIAUgBjYCBCAFIAE2AgAMDQtBBEEkQZDExAAoAgAiAEHMCCAAGxEAAAALQQRBIEGQxMQAKAIAIgBBzAggABsRAAAAC0EEQSxBkMTEACgCACIAQcwIIAAbEQAAAAtBCEH4AEGQxMQAKAIAIgBBzAggABsRAAAAC0EEQawBQZDExAAoAgAiAEHMCCAAGxEAAAALQQRByABBkMTEACgCACIAQcwIIAAbEQAAAAtBBEHcAEGQxMQAKAIAIgBBzAggABsRAAAAC0EEQeAAQZDExAAoAgAiAEHMCCAAGxEAAAALQQRB6ABBkMTEACgCACIAQcwIIAAbEQAAAAtBBEEYQZDExAAoAgAiAEHMCCAAGxEAAAALQQRBMEGQxMQAKAIAIgBBzAggABsRAAAAC0EEQewAQZDExAAoAgAiAEHMCCAAGxEAAAALQQRBFEGQxMQAKAIAIgBBzAggABsRAAAACyAbKAIMIQEgGygCCCEFQSBBARCzDiIGRQ0DIAZBGGpB+KnBACkAADcAACAGQRBqQfCpwQApAAA3AAAgBkEIakHoqcEAKQAANwAAIAZB4KnBACkAADcAAEEMQQQQsw4iA0UNBSADQSA2AgggAyAGNgIEIANBIDYCACAFDQEgAyEBC0EBDAELIAMQ3QkgACAFNgIEQQghJEEACyEDIAAgJGogATYCACAAIAM2AgAgG0HgAmokAA8LQQFBIEHwvMEAENMNAAtBBEEQQZDExAAoAgAiAEHMCCAAGxEAAAALQQRBDEGQxMQAKAIAIgBBzAggABsRAAAAC6oCAgp9AX8jAEEwayIOJAAgAioCACABKgIQkyIKIAEqAgQiBJQgAioCBCABKgIUkyILIAEqAgAiCJSTIgUgBZIhBSALIAEqAggiCZQgAioCCCABKgIYkyIGIASUkyIHIAeSIQcgDiAGIAEqAgwiDCAFlCAEIAeUIAggBiAIlCAKIAmUkyIGIAaSIgaUk5KSIg04AgggDiAKIAwgB5QgCSAGlCAEIAWUk5KSIgQ4AgAgDiALIAwgBpQgCCAFlCAJIAeUk5KSIgg4AgQgDkEMaiAAIA4gAxBSIA4qAhAhBSAOKgIMIQkgDioCFCEHIA4tABghACAOQTBqJAAgCSAEkyIEIASUIAUgCJMiBCAElJIgByANkyIEIASUkpEiBCAEjCAEIABBAXEbIAMbC6sCAgp9AX8jAEEgayIOJAAgAioCACABKgIQkyIKIAEqAgQiBJQgAioCBCABKgIUkyILIAEqAgAiCJSTIgUgBZIhBSALIAEqAggiCZQgAioCCCABKgIYkyIGIASUkyIHIAeSIQcgDiAGIAEqAgwiDCAFlCAEIAeUIAggBiAIlCAKIAmUkyIGIAaSIgaUk5KSIg04AgggDiAKIAwgB5QgCSAGlCAEIAWUk5KSIgQ4AgAgDiALIAwgBpQgCCAFlCAJIAeUk5KSIgg4AgQgDkEMaiAAIA4gAxCSASAOKgIUIQUgDioCECEJIA4qAhghByAOLQAcIQAgDkEgaiQAIAkgBJMiBCAElCAFIAiTIgQgBJSSIAcgDZMiBCAElJKRIgQgBIwgBCAAQQFxGyADGwuqAgIKfQF/IwBBMGsiDiQAIAIqAgAgASoCEJMiCiABKgIEIgSUIAIqAgQgASoCFJMiCyABKgIAIgiUkyIFIAWSIQUgCyABKgIIIgmUIAIqAgggASoCGJMiBiAElJMiByAHkiEHIA4gBiABKgIMIgwgBZQgBCAHlCAIIAYgCJQgCiAJlJMiBiAGkiIGlJOSkiINOAIIIA4gCiAMIAeUIAkgBpQgBCAFlJOSkiIEOAIAIA4gCyAMIAaUIAggBZQgCSAHlJOSkiIIOAIEIA5BDGogACAOIAMQViAOKgIQIQUgDioCDCEJIA4qAhQhByAOLQAYIQAgDkEwaiQAIAkgBJMiBCAElCAFIAiTIgQgBJSSIAcgDZMiBCAElJKRIgQgBIwgBCAAQQFxGyADGwvGAgMEfwF+AX0gASgCBCEFIAEoAggiBK0hBiAAKAIAIgIoAgghAyACKAIAIANrQQdNBEAgAiADQQhBAUEBEOIGIAIoAgghAwsgAiADQQhqIgA2AgggAigCBCADaiAGNwAAIAQEQCAEQQJ0IQQDQCAFKgIAIQcgBUEEaiEFIAIgAigCACAAa0EDSwR/IAAFIAIgAEEEQQFBARDiBiACKAIICyIDQQRqIgA2AgggAigCBCADaiAHOAAAIARBBGsiBA0ACwsgATUCDCEGIAIoAgAgAGtBB00EQCACIABBCEEBQQEQ4gYgAigCCCEACyACKAIEIABqIAY3AAAgAiAAQQhqIgA2AgggATUCECEGIAIoAgAgAGtBB00EQCACIABBCEEBQQEQ4gYgAigCCCEACyACIABBCGo2AgggAigCBCAAaiAGNwAAQQALtAICBX8BfiMAQaABayIBJAAgAUGMAWogAEEUaigCACIENgIAIAFB4ABqIgNBCGoiBSAAQQhqKAIANgIAIANBFGogBDYCACADQRhqIgYgACkCDCIINwMAIANBIGoiByAENgIAIAEgCDcChAEgASAAKQIANwNgIAEgCDcCbCABQoGAgIAQNwKYASABQoCAgIAQNwKQASABQThqIAFBkAFqIgAQ5AYgAEEIakIANwMAIAFCADcDkAEgAUHIAGogABDlBiABQQhqIgBBCGogBSkDADcDACAAQRBqIANBEGopAwA3AwAgAEEYaiAGKQMANwMAIABBIGogBykDADcDACAAQShqIANBKGopAwA3AwAgAUKAgICALDcDWCABIAEpA2A3AwggAiAAQdgA/AoAACABQaABaiQAC68CAQN/IwBBkAFrIgMkAAJ/AkAgASgCCCICQYCAgBBxRQRAIAJBgICAIHENASADQQhqIAAoAgAgA0EQahDUBSABQQFBAUEAIAMoAgggAygCDBDfAgwCCyAAKAIAIQBBACECA0AgAiADakGPAWogAEEPcSIEQTByIARB1wBqIARBCkkbOgAAIAJBAWshAiAAQQ9LIQQgAEEEdiEAIAQNAAsgAUEBQeuqxABBAiACIANqQZABakEAIAJrEN8CDAELIAAoAgAhAEEAIQIDQCACIANqQY8BaiAAQQ9xIgRBMHIgBEE3aiAEQQpJGzoAACACQQFrIQIgAEEPSyEEIABBBHYhACAEDQALIAFBAUHrqsQAQQIgAiADakGQAWpBACACaxDfAgshACADQZABaiQAIAAL5wICAn0CfwJAIAC8IgRB/////wdxIgNB////+wNNBEAgA0GAgID4A08EQCAEQQBOBEBDAACAPyAAk0MAAAA/lCIAkSICvEGAYHG+IQEgAiAAIAAgAENr0w28lEO6Ey+9kpRDdaoqPpKUIABDruU0v5RDAACAP5KVlCAAIAEgAZSTIAIgAZKVkiABkiIAIACSDwtD2g/JPyAAQwAAgD+SQwAAAD+UIgCRIgEgASAAIAAgAENr0w28lEO6Ey+9kpRDdaoqPpKUIABDruU0v5RDAACAP5KVlENoIaKzkpKTIgAgAJIhAQwCC0PaD8k/IQEgA0GBgICUA0kNAUNoIaIzIAAgACAAlCIBIAEgAUNr0w28lEO6Ey+9kpRDdaoqPpKUIAFDruU0v5RDAACAP5KVlJMgAJND2g/JP5IPCyADQYCAgPwDRwRAQwAAAAAgACAAk5UPC0MAAAAAQ9oPSUAgBEEAThsPCyABC8ICAgJ+B38gACgCBCIIBEAgACgCACEDIAAoAgwiCQRAIANBCGohBCADKQMAQn+FQoCBgoSIkKDAgH+DIQEgAyEFA0AgAVAEQANAIAVBwAJrIQUgBCkDACEBIARBCGohBCABQoCBgoSIkKDAgH+DIgFCgIGChIiQoMCAf1ENAAsgAUKAgYKEiJCgwIB/hSEBCyAFIAF6p0EDdkFYbGoiBkEYaygCACIHBEAgBkEUaygCACAHQQxsQQQQiA8LIAFCAX0hAiAGQQxrKAIAIgcEQCAGQQhrKAIAIAdBA3RBBBCIDwsgASACgyEBIAlBAWsiCQ0ACwsgAyAIQVhsakEoayAIQSlsQTFqQQgQiA8LIAAoAogCIgMEQCAAKAKMAiADQQJ0QQQQiA8LIAAoApQCIgMEQCAAKAKYAiADQQJ0QQQQiA8LC8sCAgR/BH0jAEEgayICJAACQAJAAkAgAEUNACAAQQhrIgUoAgBBAWohAyAFIAM2AgAgA0UNASAAKAIADQIgAEF/NgIAIAIgBTYCECACIAA2AgwgAiAAQQRqNgIIIAFFDQAgAUEIayIDKAIAQQFqIQQgAyAENgIAIARFDQEgASgCACIEQX9GDQIgASAEQQFqNgIAIAEqAgQiByAHlCABKgIIIgggCJSSIAEqAgwiCSAJlJKRIQYgACAJIAaVOAIwIAAgCCAGlTgCLCAAIAcgBpU4AiggASABKAIAQQFrNgIAIAMgAygCAEEBayIENgIAIAIgAzYCHCACIAE2AhggAiABQQRqNgIUIARFBEAgAkEcahCoDQsgAEEANgIAIAUgBSgCAEEBayIANgIAIABFBEAgAkEQahDnCwsgAkEgaiQADwsQmw8LAAsQnA8AC9MCAQN/IABBDGogACgCGCABaiIBEM0CIABBHGogARDNAiAAQSxqIAEQzQICQAJAIAAoAjwgACgCRCIDayACSQRAIABBPGogAyACQQRBEBD2BiAAKAJEIQMMAQsgAkUNAQsgAkEDcSEBIAAoAkAhBSACQQFrQQNPBEAgAkH8//8DcSEEIAUgA0EEdGohAgNAIAJCgICAgMAANwIAIAJBOGpCADcCACACQTBqQoCAgIDAADcCACACQShqQgA3AgAgAkEgakKAgICAwAA3AgAgAkEYakIANwIAIAJBEGpCgICAgMAANwIAIAJBCGpCADcCACACQUBrIQIgA0EEaiEDIARBBGsiBA0ACwsgAUUNACABIANqIQQgBSADQQR0aiECA0AgAkKAgICAwAA3AgAgAkEIakIANwIAIAJBEGohAiABQQFrIgENAAsgBCEDCyAAIAM2AkQLqwICCn0BfyMAQTBrIg0kACACKgIAIAEqAhCTIgkgASoCBCIDlCACKgIEIAEqAhSTIgogASoCACIFlJMiBiAGkiEGIAogASoCCCIIlCACKgIIIAEqAhiTIgQgA5STIgcgB5IhByANIAQgASoCDCILIAaUIAMgB5QgBSAEIAWUIAkgCJSTIgQgBJIiBJSTkpIiDDgCECANIAkgCyAHlCAIIASUIAMgBpSTkpIiAzgCCCANIAogCyAElCAFIAaUIAggB5STkpIiBTgCDCANQRRqIAAgDUEIahDjA0EBIQECQCADIA0qAhSTIgMgA5QgBSANKgIYkyIDIAOUkiAMIA0qAhyTIgMgA5SSIgNDAACAKF5FDQAgACoCGCADkWANAEEAIQELIA1BMGokACABC9UCAgR/AX4jAEEgayIDJAACQAJAAkACQCAABEAgAEEIayIEKAIAQQFqIQIgBCACNgIAIAJFDQEgACgCACICQX9GDQIgACACQQFqNgIAIAMgBDYCDCADIAA2AgggAyAAQQRqIgI2AgQgAiABvSIGpyAGQiCIpxC4DCICRQ0DIAIoAhAiBUEBRgRAIANBGGogAkE0aigCADYCACADIAIpAiw3AxALIAAgACgCAEEBazYCACAEIAQoAgBBAWsiADYCACAARQRAIANBDGoQ7wwLQQAhACAFBEBBGEEEELMOIgBFDQUgAEEANgIIIABCgYCAgBA3AgAgACADKQMQNwIMIABBFGogA0EYaigCADYCACAAQQhqIQALIANBIGok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DSECDAELIAEgBUEIayIENgIEIAEgASgCACICQQhqNgIAIAIpAAAiBkKAgICAEFoEQCADQQE6AAggAyAGNwMQIANBCGogA0EfakGAqsEAEO8KIQIMAQsgBEEDTQRAIANCgcoANwMIIANBCGoQog0hAgwBCyABIAVBDGsiBDYCBCABIAJBDGo2AgAgBEUEQCADQoHKADcDCCADQQhqEKINIQIMAQsgAigACCEEIAEgBUENazYCBCABIAJBDWo2AgAgAi0ADCIBQQJJDQFBDEEEELMOIgJFDQMgAiABOgAEIAJBgoCAgHg2AgALIAAgAjYCAEECIQEMAQsgACAENgIEIAAgBj4CAAsgACABOgAIIANBIGokAA8LQQRBDEGQxMQAKAIAIgBBzAggABsRAAAAC7QCAQJ/IwBBIGsiAiQAQYEBIQMgAiABKAIAQQFxBH8gASsCBBAABUGBAQs2AgwgAiABKAIMQQFxBH8gASsCEBAABUGBAQs2AhAgAiABKwIgEAA2AhggAiABKwIoEAA2AhwgAiAAQQhqIAAgAkEYaiACQRxqEIQONgIUIAIgAkEUaiAAIAJBDGogAkEQahC0DCACKAIEIQECQCACKAIAQQFxRQRAIAEQASEAIAFBhAFPBEAgARACCyAAQQFGIQAMAQtBACEAIAFBhAFJDQAgARACCyACKAIQIgFBhAFPBEAgARACCyACKAIMIgFBhAFPBEAgARACCyACKAIUIgFBhAFPBEAgARACCyACKAIcIgFBhAFPBEAgARACCyACKAIYIgFBhAFPBEAgARACCyACQSBqJAAgAAvTAgEEfyMAQbADayIBJAACQAJAAkAgAARAIABBEGsiAigCACIEQQFqIQMgAiADNgIAIANFDQEgACgCAA0CIAAoApwDIQMgAEECNgKcAyACIAQ2AgBBACECIANBAkcEQCABQRhqIgIgAEG4A2opAwA3AwAgAUEQaiIEIABBsANqKQMANwMAIAEgACkDoAM3AwAgASAAQagDaikDADcDCCABQTRqIABBIGpB/AL8CgAAQcADQRAQsw4iAEUNBCAAQQA2AhAgAEKBgICAEDcDACAAQRRqIAFBKGpBiAP8CgAAIAAgAzYCnAMgACABKQMANwOgAyAAQagDaiABKQMINwMAIABBsANqIAQpAwA3AwAgAEG4A2ogAikDADcDACAA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IAxrQXhNBEAgE0F4cSEIA0AgBEL/////DzcCACAEQThqQv////8PNwIAIARBMGpC/////w83AgAgBEEoakL/////DzcCACAEQSBqQv////8PNwIAIARBGGpC/////w83AgAgBEEQakL/////DzcCACAEQQhqQv////8PNwIAIARBQGshBCAIQQhrIggNAAsLIAsEQANAIARC/////w83AgAgBEEIaiEEIAtBAWsiCw0ACwsgBSAQakEBayEFCyAEQv////8PNwIAIAYgBUEBaiIINgI4CyAIIAxNDQQgBigCNCAMQQN0aiIEIAc2AgQgBCASNgIACyAJQX9GBEAgBigCICIJIAYoAhhGBEAgBkEYakH0v8EAELoICyAGIAlBAWo2AiAgBigCHCAJQQR0aiIEQn83AgggBCAPNgIEIAQgCjYCAAJAIAYoAjgiCCAKSwRAIAghBAwBCyAIIApBAWoiBEkEQCAEIAgiBWshECAQIAYoAjAgBWtLBEAgBkEwaiAFIBBBBEEIEOIGIAYoAjghBQsgBigCNCAFQQN0aiEEIBBBAk8EQCAKIAhrIhNBB3EhCyAIIAprQXhNBEAgE0F4cSEIA0AgBEL/////DzcCACAEQThqQv////8PNwIAIARBMGpC/////w83AgAgBEEoakL/////DzcCACAEQSBqQv////8PNwIAIARBGGpC/////w83AgAgBEEQakL/////DzcCACAEQQhqQv////8PNwIAIARBQGshBCAIQQhrIggNAAsLIAsEQANAIARC/////w83AgAgBEEIaiEEIAtBAWsiCw0ACwsgBSAQakEBayEFCyAEQv////8PNwIAIAVBAWohBAsgBiAENgI4CyAEIApNDQUgBigCNCAKQQN0aiIEIAk2AgQgBCAPNgIACyAGKAIgIQUgBigCHCEEIAYoAiwhCwJAAkAgByAJTQRAIAUgCU0NASAHIAlGDQIMCAsgBSAHSw0HCyANQQA2AjggDUEBNgIsIA1B3L/BADYCKCANQgQ3AjAgDUEoakHkv8EAELgNAAsgBCAHQQR0aiIEKAIMIQUgBCALNgIMIAQoAgghCCAEIAs2AggMBgsgDiAEQdS+wQAQiAsACyAMIARBhMDBABCICwALIAogCUGEwMEAEIgLAAsgDCAIQZTAwQAQiAsACyAKIARBlMDBABCICwAL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ACAEQRBqIgQgDCkDADcDACACQSBqIgkgDSkDADcDACACIAIpA+gPNwMYIANBDGogAkGIB2ooAgA2AgAgAyACKQOABzcCBCADQbgHaiACQYwHakHEAPwKAAAgA0HoA2ogAkGIAWopAwA3AwAgA0HgA2ogAUEwaikDADcDACADQdgDaiABQShqKQMANwMAIANB0ANqIAFBIGopAwA3AwAgA0HIA2ogAUEYaikDADcDACADQcADaiABQRBqKQMANwMAIANBuANqIAIpA1g3AwAgAyACKQNQNwOwAyADQfADaiACQZABakGgAfwKAAAgA0H0BmogAkHQB2pBxAD8CgAAIANBEGogAkGwAmpBoAP8CgAAIANB7AZqIAYpAwA3AgAgA0HkBmogBykDADcCACADQdwGaiAIKQMANwIAIANB1AZqIAQpAwA3AgAgA0HMBmogCSkDADcCACADIAIpAxg3AsQGIANBkAVqIAJB0AVqQdgA/AoAACADQegFaiACQagGakHYAPwKAAAgAyAFNgLABiADQQE2AgAgAigCDCIBBEAgAigCECABQQEQiA8LIAIoAggiAUGDAUsNAQwCCyACQQI2AuQPIAIgBjYCoAgCQCACQaAIaiIBKALEB0ECRwRAIAEQkwogAUFAaxCACiABQYAHahDSByABQeABahDrByABQcQHahCiCCABQYAFahDZCSABQdgFahC3CAwBCyABKAIAEN0JCyADQQI2AgAgAigCDCIBBEAgBCABQQEQiA8LIAIoAggiAUGEAUkNAQsgARACCyACQbAYaiQAIAAgACgCAEEBazYCACAKIAooAgBBAWsiADYCACAARQRAIANBjAhqEKcNC0EAIQAgAygCAEECRwRAIANBkAhqIANBgAj8CgAAQaAIQRAQsw4iAEUNBCAAQQA2AhAgAEKBgICAEDcDACAAQRRqIANBhAhqQYwI/AoAACAAQRBqIQALIANBkBBqJAAgAA8LEJsPCwALEJwPAAtBEEGgCEGQxMQAKAIAIgBBzAggABsRAAAAC7YCAgJ9Bn8gACgCCCIDRQRAQ///f38PCyAAKAIEIQUgA0EBcSEGAkAgA0EBRgRAQQAhA0P//39/IQEMAQsgBUHEAGohACADQX5xIQdBACEDQ///f38hAQNAIABBKGsoAgAgAEEkaygCACIEKAIIQQFrQXhxakEI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IAUoAgwiA00NAQNAIAYgA0E4bGoiBSgCMCAKRg0BIAQgBSgCLCIDSw0ACwwBCyADIARPDQAgBiADQThsaiIDQQAgAygCNCAJSRtBACADKAIwIAlJGyELCyAAIAAoAgBBAWs2AgAgCCAIKAIAQQFrIgA2AgAgAEUEQCAHQQxqEOwMCyALBH9BEEEEELMOIgBFDQQgACALNgIMIABBADYCCCAAQoGAgIAQNwIAIABBCGoFQQALIQAgB0EQaiQAIAAPCxCbDwsACxCcDwALQQRBEEGQxMQAKAIAIgBBzAggABsRAAAAC4QCAwR/AX4BfSABKAIEIQUgASgCCCIErSEGIAAoAgAiAigCCCEAIAIoAgAgAGtBB00EQCACIABBCEEBQQEQ4gYgAigCCCEACyACIABBCGoiAzYCCCACKAIEIABqIAY3AAAgBARAIARBAnQhBANAIAUqAgAhByAFQQRqIQUgAiACKAIAIANrQQNLBH8gAwUgAiADQQRBAUEBEOIGIAIoAggLIgBBBGoiAzYCCCACKAIEIABqIAc4AAAgBEEEayIEDQALCyABNQIMIQYgAigCACADa0EHTQRAIAIgA0EIQQFBARDiBiACKAIIIQMLIAIgA0EIajYCCCACKAIEIANqIAY3AABBAAuLAgEIfyMAQRBrIgIkAAJAAkACQCABRQRAIABFDQEgAEEIayIBKAIAQQFHDQIgACgCICEGIAAoAhwhAyAAKAIUIQcgACgCECEEIAAoAgghCCAAKAIEIQUgAUEANgIAAkAgAUF/Rg0AIABBBGsiCSgCAEEBayEAIAkgADYCACAADQAgAUHEAEEEEIgPCyAFBEAgCCAFQdQBbEEEEIgPCyAEBEAgByAEQQxsQQQQiA8LIANFDQMgBiADQQxsQQQQiA8MAwsgAEUNACAAQQhrIgAoAgBBAWshASAAIAE2AgAgAiAANgIMIAENAiACQQxqENMKDAILEJsPAAtBgNLBAEE/EJoPAAsgAkEQaiQAC7ICAQJ9AkACQAJAIAEoAghFDQAgASgCBCIBKAI8Qf////8DcSABKAIcQf////8DcWoOAgABAgsgAEL////7////v383AhAgAEL////79///v383AgggAEL////79///v/8ANwIADwsgACABKQIANwIAIAAgASkCEDcCDCAAQQhqIAFBCGooAgA2AgAg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AyABNgIAIAFFDQEgACgCACIBQX9GDQIgACABQQFqNgIAIAAoAgQiBUHwAGooAgAhBiAFKQJoIQcgACABNgIAIAJBCGoiASAGNgIAIAMgBDYCACACIAc3AwBBGEEEELMOIgBFDQMgAEEANgIIIABCgYCAgBA3AgAgACACKQMANwIMIABBFGogASgCADYCACACQRBqJAAgAEEIag8LEJsPCwALEJwPAAtBBEEYQZDExAAoAgAiAEHMCCAAGxEAAAAL6wECBn8BfiMAQRBrIgIkAAJAAkACQCAABEAgAEEIayIDKAIAIgRBAWohASADIAE2AgAgAUUNASAAKAIAIgFBf0YNAiAAIAFBAWo2AgAgACgCBCIFQZABaigCACEGIAUpAogBIQcgACABNgIAIAJBCGoiASAGNgIAIAMgBDYCACACIAc3AwBBGEEEELMOIgBFDQMgAEEANgIIIABCgYCAgBA3AgAgACACKQMANwIMIABBFGogASgCADYCACACQRBqJAAgAEEIag8LEJsPCwALEJwPAAtBBEEYQZDExAAoAgAiAEHMCCAAGxEAAAAL6wECBn8BfiMAQRBrIgIkAAJAAkACQCAABEAgAEEIayIDKAIAIgRBAWohASADIAE2AgAgAUUNASAAKAIAIgFBf0YNAiAAIAFBAWo2AgAgACgCBCIFQZwBaigCACEGIAUpApQBIQcgACABNgIAIAJBCGoiASAGNgIAIAMgBDYCACACIAc3AwBBGEEEELMOIgBFDQMgAEEANgIIIABCgYCAgBA3AgAgACACKQMANwIMIABBFGogASgCADYCACACQRBqJAAgAEEIag8LEJsPCwALEJwPAAtBBEEYQZDExAAoAgAiAEHMCCAAGxEAAAAL2AECAX8BfSAAKgIAIQMgASgCACICKAIIIQEgAigCACABa0EDTQRAIAIgAUEEQQFBARDiBiACKAIIIQELIAIoAgQgAWogAzgAACACIAFBBGoiATYCCCAAKgIEIQMgAigCACABa0EDTQRAIAIgAUEEQQFBARDiBiACKAIIIQELIAIoAgQgAWogAzgAACACIAFBBGoiATYCCCAAKgIIIQMgAigCACABa0EDTQRAIAIgAUEEQQFBARDiBiACKAIIIQELIAIgAUEEajYCCCACKAIEIAFqIAM4AABBAAvBAQIFfwF+IwBBIGsiAiQA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AAAAlCIrkiInICGTXhshLCAgICEgICAmkiAhICeSXhshJiAiICMgIEMAAAAAlCIgICkgIpOSICogI5MgIUMAAAAAlCIhkl4bIScgIiAjICAgIiApkpIgKiAjkiAhkl4bISIgJCAlICAgKCAkk5IgKyAlkyAhkl4bISMgJCAlICAgJCAokpIgJSArkiAhkl4bISAgAygCQCITIAMoAjhGBEAgGUHo7MIAEMcICyALQQFqIRUgAygCPCIIIBNBBXRqIgFBgYCAgHw2AhwgASAmOAIYIAEgIjgCFCABICA4AhAgASALNgIMIAEgLDgCCCABICc4AgQgASAjOAIAIAMgE0EBaiIbNgJAAkAgAygCJCIFIAtLBEAgBSEBDAELIAsgBSIBayEEIAQgAygCHCABa08EQCAaIAEgBEEBakEEQQgQ4wYgAygCJCEBCyAVIAVrQQNxIQ8gAygCICEWIARBA08EQCASIAVrQXxxIQkgFiABQQN0aiEEA0AgBEEANgIAIARBGGpBADYCACAEQRBqQQA2AgAgBEEIakEANgIAIARBIGohBCABQQRqIQEgCUEEayIJDQALCyAPBEAgASAPaiEPIBEgBWtBA3EhCSAWIAFBA3RqIQQDQCAEQQA2AgAgBEEIaiEEIAlBAWsiCQ0ACyAPIQELIAMgATYCJAsgASALTQ0EIAMoAiAgC0EDdGoiASgCACEFIAFCATcCACAFRQRAIAMgAygCKEEBajYCKAsgEUEBaiERIBJBAWohEiAVIQsgGCAOQQhqIg5HDQALIBNBAWoOAwcFBAYLIAogAUGsycIAENMNAAsgASANQbCWwwAQiAsACyAFIA1BwJbDABCICwALIAsgAUGo/cMAEIgLAAsgAyAIKQMANwOAASADIAgpAyA3A6ABIAMgCEEYaikDADcDmAEgAyAIQRBqKQMANwOQASADIAhBCGopAwA3A4gBIAMgCEEoaikDADcDqAEgAyAIQTBqKQMANwOwASADIAhBOGopAwA3A7gBIAMoAgwiBSADKAIERgRAIANBBGpBiOzCABDICAsgAygCCCAFQQZ0aiIBIAMpA4ABNwMAIAFBIGogAykDoAE3AwAgAUEYaiADKQOYATcDACABQRBqIAMpA5ABNwMAIAFBCGogAykDiAE3AwAgAUEoaiADKQOoATcDACABQTBqIAMpA7ABNwMA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KAIAIgBBzAggABsRAAAACyAAQgA3AzAgAEKAgICAwAA3AyggAEIENwMgIABCADcDGCAAQoCAgICACDcDECAAQQA2AgggAEKBgICAEDcDACAAQoCAgIDAADcDkAEgAEIANwOIASAAQoCAgIDAADcDgAEgAEIENwN4IABCADcDcCAAQoCAgIDAADcDaCAAQhA3A2AgAEIANwNYIABCgICAgIAINwNQIABCidm54o7TvpcINwNIIABB0MvBACkDADcDOCAAQUBrQdjLwQApAwA3AwAgAEGoAWpBADoAACAAQaABakIANwMAIABCADcDmAEgAEEIagvJAQEBfyMAQRBrIggkACAAKAIAIAFBBiAAKAIEKAIMEQUAIQEgCEEAOgANIAggAToADCAIIAA2AgggCEEIaiACQQQgAyAEELEGIAVBBSAGIAcQsQYhASAILQANIgIgCC0ADCIDciEAAkAgAkEBRw0AIANBAXENACABKAIAIgAtAApBgAFxRQRAIAAoAgBB46rEAEECIAAoAgQoAgwRBQAhAAwBCyAAKAIAQeKqxABBASAAKAIEKAIMEQUAIQALIAhBEGokACAAQQFxC7wDAQl/IwBBQGoiASQAIAFBDGohACMAQSBrIgIkACACQQA2AhggAkEIakEQQcAFIAJBFGoQ9AkgAigCCEEBRgRAIAIoAgwgAigCEEGgicIAENMNAAsgAigCDCIFIQMDQCADQQA2AgAgA0GwAWpBADYCACADQQRqIARBA0ciBjYCACADQbQBaiAEQQFqIgdBA0ciCDYCACADQQhqIAdBACAGGzYCACADQbgBaiAEQQJqIgRBACAIGzYCACADQeACaiEDIARBBEcNAAsgAEIANwIUIABBBDYCECAAIAU2AgwgAEEENgIIIABCATcCACACQSBqJAAgAEIENwIsIABCADcCJCAAQoCAgIDAADcCHEHAAEEEELMOIgBFBEBBBEHAAEGQxMQAKAIAIgBBzAggABsRAAAACyAAQQA2AgggAEKBgICAEDcCACAAIAEpAgw3AgwgAEEUaiABQRRqKQIANwIAIABBHGogAUEcaikCADcCACAAQSRqIAFBJGopAgA3AgAgAEEsaiABQSxqKQIANwIAIABBNGogAUE0aikCADcCACAAQTxqIAFBPGooAgA2AgAgAUFAayQAIABBCGoLtAEBBn8j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QQxqIAL8CgAACyAEIAVBAWs2AgwgA0UNAiABIAM2AkggASASNwJMIARBADoAACASQoCAgIAQVCIGDQUgEkIgiKciAi0ANUUEQANAIAItADRFDQALIAIoAgAhAyACQQA2AgAgA0EBcQRAIAFB4ABqIgNBKGogAkEsaikCADcDACADQSBqIAJBJGopAgA3AwAgA0EYaiACQRxqKQIANwMAIANBEGogAkEUaikCADcDACADQQhqIAJBDGopAgA3AwAgASACKQIENwNgIAJBOEEEEIgPIAEoAkghAwwGC0HQt8EAEJEPAAsgAigCACEFIAJBADYCACAFQQFxDQNB4LfBABCRDwALIAJBAWohAiAKIANBDGoiA0cNAAsLIARBADoAAAwDCyACQQE6ADQgAUHgAGoiBUEoaiACQSxqKQIANwMAIAVBIGogAkEkaikCADcDACAFQRhqIAJBHGopAgA3AwAgBUEQaiACQRRqKQIANwMAIAVBCGogAkEMaikCADcDACABIAIpAgQ3A2ALIAcgASkDYDcBACAHQShqIAFB4ABqIgJBKGopAwA3AQAgB0EgaiACQSBqKQMANwEAIAdBGGogAkEYaikDADcBACAHQRBqIAJBEGopAwA3AQAgB0EIaiACQQhqKQMANwEACyADIAMoAgAiAkEBazYCACACQQFGBEAgAUHIAGoQ2gsLIAZFDQMLIAEoAhAiBEGEAU8EQCAEEAILIAFBkAFqJAAMBAsgAUIANwJUIAFCgYCAgMAANwJMIAFBoLjBADYCSCABQccAaiABQcgAakGouMEAEP8MAAsgAiAFQfC3wQAQhwsAC0E8QQQQsw4iAgRAIAJBADYCCCACQoGAgIAQNwIAIAIgBykBADcBDCACQRRqIAdBCGopAQA3AQAgAkEcaiAHQRBqKQEANwEAIAJBJGogB0EYaikBADcBACACQSxqIAdBIGopAQA3AQAgAkE0aiAHQShqKQEANwEAIAEgAkEIahAGNgJgIAFBCGogDSABQRBqIAFB4ABqEL8MIAEoAgwiAkGEAU8EQCACEAILIAEoAmAiAkGEAUkNASACEAIMAQsLQQRBPEGQxMQAKAIAIgBBzAggABsRAAAACyAAQQA2AgAgDCAMKAIAQQFrIgA2AgAgAEUEQCAJQQhqEOkMCyAJQRBqJAAPCxCbDwsACxCcDwALpAEB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AkGA2sIANgIIIAJCBDcCECACQQhqQYjawgAQuA0ACyABKgIEIQQgASoCACEFIAAgASoCCCIGIAOSOAIUIAAgBCADkjgCECAAIAUgA5I4AgwgACAGjCADkzgCCCAAIASMIAOTOAIEIAAgBYwgA5M4AgAgAkEgaiQAC6YBAgF/AX0jAEHAAWsiAyQAIAEqAmAhBSADQeAAaiIEIAEQ9wEgAyAEIAIQ/QICQAJAIAMoAgBBgICAgHhHBEAgBCADQeAA/AoAAEHkAEEEELMOIgFFDQEgASAEQeAA/AoAACABIAU4AmAMAgtBACEBDAELQQRB5ABBkMTEACgCACIAQcwIIAAbEQAAAAsgAEGk18MANgIEIAAgATYCACADQcABaiQAC+MCAgV/AX0jAEEgayICJAAgAiAAOAIMIAIgAEMAAAAAlCIHOAIQIAIgBzgCCCACIACMOAIYIAIgB4wiADgCHCACIAA4AhQjAEEgayIDJAAgA0EQaiIFIAJBFGoiBEEIaigCADYCACADQRxqIAJBCGoiBkEIaigCADYCACADIAQpAgA3AwggAyAGKQIANwIUQSRBBBCzDiIERQRAQQRBJEGQxMQAKAIAIgJBzAggAhsRAAAACyAEQoGAgIAQNwIAIAQgAykDCDcCCCAEIAE4AiAgBEEQaiAFKQMANwIAIARBGGogA0EYaikDADcCACACQfiewwA2AgQgAiAENgIAIANBIGokACACKAIEIQQgAigCACEFQRRBBBCzDiIDRQRAQQRBFEGQxMQAKAIAIgJBzAggAhsRAAAACyADIAU2AgwgA0EANgIIIANCgYCAgBA3AgAgAyAENgIQIAJBIGokACADQQhqC8YDAQR/IwBBMGsiAyQAIANBDGohAiAAQQBHIQQCQAJAQYACQcAAELMOIgAEQCAAQQA6AMgBIABCgYCAgBA3A8ABIABBAToAnAEgAEIENwKUASAAQgA3AowBIABCgICAgMAANwKEASAAQQA6AIABIABCADcDQCAAQgA3AwBBgAJBwAAQsw4iAUUNAiABQQA6AMgBIAFCgYCAgBA3A8ABIAFBAToAnAEgAUIENwKUASABQgA3AowBIAFCgICAgMAANwKEASABQQA6AIABIAFCADcDQCABQgA3AwAgAiAEOgAgIAIgATYCHCACQQE2AhggAiAANgIUIAJBATYCECAC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IAEgATYCECAHIAFBEGpB+IHEACgCABEDAA0BIAEoAhBB4KrEAEECIAEoAhQoAgwRBQAhBgwBCyAHIAJB+IHEACgCABEDACEGCyAEQQE6AAUgBCAGOgAEIAFBIGokACAAQQFqIQAgBUEBayIFDQALC0EBIQAgA0EEaiIBLQAERQRAIAEoAgAiACgCAEHqqsQAQQEgACgCBCgCDBEFACEACyABIAA6AAQgA0EQaiQAIAALbwECfyMAQRBrIgQkAEGAgICAeEEEIAEgAUEETRsiA2sgAUEHakEAIAFrcSACaiIBSQRAQcyKxABBKyAEQQ9qQbyKxABBiIvEABDaCgALIAAgAzYCACAAIAEgA2pBAWtBACADa3E2AgQgBEEQaiQAC24BAX8jAEEwayIDJAAgAyACNgIEIAMgATYCACADQQI2AgwgA0GYucEANgIIIANCAjcCFCADIAOtQoCAgIAQhDcDKCADIACtQoCAgIAghDcDICADIANBIGo2AhAgA0EIahCGByEAIANBMGokACAAC5gBAQF/QYABQQQQsw4iAARAIABCgICAgICAgMA/NwIcIABCADcCFCAAQX82AhAgAEKAgICAcDcCCCAAQoGAgIAQNwIAIABBJGpBAEHEAPwLACAAQQI6AHwgAEEANgJ4IABCgICAgICAgMA/NwJwIABCgICA/AM3AmggAEEIag8LQQRBgAFBkMTEACgCACIAQcwIIAAbEQAAAAttAgR9AX9BASEHIAAqAgQiAyABKgIEjJQgASoCACAAKgIAIgSUkyABKgIIIAAqAggiBZSTIgZDAAAAAF4Ef0EBBSAGIAQgASoCDJQgAyABKgIQlJIgBSABKgIUlJKVIgNDAAAAAGAgAiADYHELC4QBAQF/QSRBBBCzDiICRQRAQQRBJEGQxMQAKAIAIgBBzAggABsRAAAACyACIAEpAgA3AgAgAkEgaiABQSBqKAIANgIAIAJBGGogAUEYaikCADcCACACQRBqIAFBEGopAgA3AgAgAkEIaiABQQhqKQIANwIAIABBsPbCADYCBCAAIAI2AgALhAEBAX9BKEEEELMOIgJFBEBBBEEoQZDExAAoAgAiAEHMCCAAGxEAAAALIAIgASkCADcCACACQSBqIAFBIGopAgA3AgAgAkEYaiABQRhqKQIANwIAIAJBEGogAUEQaikCADcCACAC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t9OwhQyFIgV+IAFBDGs1AgBC3aHxywyFIgYgA0L/////D4MiA36FIAMgBX4gBCAGfoVCIImFC28BBH4gASgCACACQQR0ayIBQQxrKQAAQpeSnKrbtrXCP4UiA0IgiCIFIAFBEGspAAAgACgCACgCACkDAEI0iYUiBEIgiCIGfiADQv////8PgyIDIARC/////w+DIgR+hSADIAZ+IAQgBX6FQiCJhQtuAQd9IABCAjcCECAAIAEqAgAiBCACKgIAIgWUIAEqAgQiBiACKgIEIgeUkiABKgIIIgggAioCCCIJlJIiA0MAAAAAXzoADCAAIAkgCCADlJM4AgggACAHIAYgA5STOAIEIAAgBSAEIAOUkzgCAAtqAQN9IAAgASABQQxqIAEqAgAgAioCACIDlCABKgIEIAIqAgQiBJSSIAEqAgggAioCCCIFlJIgAyABKgIMlCAEIAEqAhCUkiAFIAEqAhSUkl4bIgEpAgA3AgAgAEEIaiABQQhqKAIANgIAC4YBAQJ/IwBBIGsiAiQAIAAoAgAhAyACQQxqIgAgASgCAEEBQQAgASgCBCgCDBEFADoACCAAIAE2AgQgAEEBOgAJIABBADYCACACIAM2AhggAiADQQRqNgIcIAAgAkEYakGM08IAELAHIAAgAkEcakGM08IAELAHIAAQhgohACACQSBqJAAgAAtrACAAQgA3AhwgACABKQIANwIAIABBJGpCADcCACAAQSxqQgA3AgAgAEE0akIANwIAIABBPGpBADYCACAAQRhqIAFBGGooAgA2AgAgAEEQaiABQRBqKQIANwIAIABBCGogAUEIaikCADcCAAvLDQINfQ5/IwBB0AJrIhYkACAWQawBaiIDIAEQqAEgFkEIaiERIwBBMGsiFSQAAkAgAygCMCITRQ0AIAIqAgghBCACKgIEIQUgAioCACEGIAMoAiwiEiEBIBNBDGwiE0EMayIUQQxuQQFxRQRAIAEgBiABKgIAlDgCACABIAUgASoCBJQ4AgQgASAEIAEqAgiUOAIIIAFBDGohAQsgFEEMSQ0AIBIgE2ohEwNAIAEgBiABKgIAlDgCACABQQRqIhIgBSASKgIAlDgCACABQQhqIhIgBCASKgIAlDgCACABQQxqIhIgBiASKgIAlDgCACABQRBqIhIgBSASKgIAlDgCACABQRRqIhIgBCASKgIAlDgCACATIAFBGGoiAUcNAAsLAkAgAygCQEGAgICAeEYNACADKAJIIhMEQCADKAJEIQEgE0EMbCETIAIqAgghByACKgIEIQggAioCACEJA0AgASAJIAEqAgCUIgY4AgAgCCABQQRqIhIqAgCUIQQgEiAEOAIAIAcgAUEIaiIUKgIAlCEFIBQgBTgCACAGIAaUIAQgBJSSIAUgBZSSIgpDAAAAAFwEQCAUIAUgCpEiBZU4AgAgEiAEIAWVOAIAIAEgBiAFlTgCAAsgAUEMaiEBIBNBDGsiEw0ACwsgAygCVCIBRQ0AIAMoAlAhHSABQSRsIR4gAioCCCENIAIqAgQhDiACKgIAIQ9BACETA0AgDyATIB1qIgEqAgCUIQQgASAEOAIAIA4gAUEEaiISKgIAlCEFIBIgBTgCACANIAFBCGoiFCoCAJQhBiAUIAY4AgAgDyABQQxqIhcqAgCUIQcgFyAHOAIAIA4gAUEQaiIYKgIAlCEIIBggCDgCACANIAFBFGoiGSoCAJQhCSAZIAk4AgAgDyABQRhqIhoqAgCUIQogGiAKOAIAIA4gAUEcaiIbKgIAlCELIBsgCzgCACANIAFBIGoiHCoCAJQhDCAcIAw4AgAgBCAElCAFIAWUkiAGIAaUkiIQQwAAAABcBEAgEiAFIBCRIgWVOAIAIAEgBCAFlTgCACAUIAYgBZU4AgALIAcgB5QgCCAIlJIgCSAJlJIiBEMAAAAAXARAIBggCCAEkSIElTgCACAXIAcgBJU4AgAgGSAJIASVOAIACyAKIAqUIAsgC5SSIAwgDJSSIgRDAAAAAFwEQCAbIAsgBJEiBJU4AgAgGiAKIASVOAIAIBwgDCAElTgCAAsgHiATQSRqIhNHDQALCyADQUBrIRMgFUEIaiADEJkFIANBKGohEiAVKAIQIgEEQCABQQZ0IBUoAgwiAWohFCACKgIIIQQgAioCBCEFIAIqAgAhBgNAIAEgBiABKgIAlDgCACABQQRqIgIgBSACKgIAlDgCACABQQhqIgIgBCACKgIAlDgCACABQRBqIgIgBiACKgIAlDgCACABQRRqIgIgBSACKgIAlDgCACABQRhqIgIgBCACKgIAlDgCACABQSBqIgIgBiACKgIAlDgCACABQSRqIgIgBSACKgIAlDgCACABQShqIgIgBCACKgIAlDgCACABQTBqIgIgBiACKgIAlDgCACABQTRqIgIgBSACKgIAlDgCACABQThqIgIgBCACKgIAlDgCACAUIAFBQGsiAUcNAAsLIBEgEikCADcCKCARIAMpAjQ3AjQgESATKQIANwJAIBEgAykCWDcCWCARQTBqIBJBCGooAgA2AgAgEUE8aiADQTxqKAIANgIAIBFByABqIBNBCGopAgA3AgAgEUHQAGogE0EQaikCADcCACARQeAAaiADQeAAaikCADcCACARQegAaiADQegAaikCADcCACARQfAAaiADQfAAaikCADcCACARQfgAaiADQfgAaigCADYCACARQZwBaiADQZwBaigCADYCACARQZQBaiADQZQBaikCADcCACARQYwBaiADQYwBaikCADcCACARQYQBaiADQYQBaikCADcCACARIAMpAnw3AnwgESAVKQIINwIAIBFBCGogFUEIaiIBQQhqKQIANwIAIBFBEGogAUEQaikCADcCACARQRhqIAFBGGopAgA3AgAgEUEgaiABQSBqKQIANwIAIBEgAy8BoAE7AaABIAMoAgAiAQRAIAMoAgQgAUEGdEHAABCIDwsgAygCDCIBBEAgAygCECABQQJ0QQQQiA8LIAMoAhgiAQRAIAMoAhwgAUEDdEEEEIgPCyAVQTBqJABBpAFBBBCzDiIBBEAgASARQaQB/AoAACAAQYCpwwA2AgQgACABNgIAIBZB0AJqJAAPC0EEQaQBQZDExAAoAgAiAEHMCCAAGxEAAAALawEDfwJAIAEoAggiAkEASA0AIAEoAgQhAwJAIAJFBEBBASEBDAELQQEhBCACQQEQsw4iAUUNAQsgAgRAIAEgAyAC/AoAAAsgACACNgIIIAAgATYCBCAAIAI2AgAPCyAEIAJB+IrEABDTDQALZQEFfSADKgIAIgUgBZQgAyoCBCIGIAaUkiADKgIIIgcgB5SSkSEEIAAgAioCGCABKgIAIgggByAElZSSOAIIIAAgAioCFCAIIAYgBJWUkjgCBCAAIAIqAhAgCCAFIASVlJI4AgALcAEBfyMAQRBrIgIkACACQgA3AwgCQAJAIAEoAgBBAUYEQCACIAEpAgQ3AwgMAQsgASgCBCIBQQFLDQEgAkEIaiABQQJ0akGAgID8AzYCAAsgACACKQMINwIAIAJBEGokAA8LIAFBAkHsmcMAEIgLAAuCAQEGfSAC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ACACQQhqIAAgASgCZBEAACACQRBqIAIoAggiACACKAIMKAIMEQAAIAIpAxghAyACKQMQIQQgAkEgaiQAIABBACAEQsfcruTatM3aKYUgA0Ll+vT7jbn+nYt/hYRQGwttAgF/An4jAEEgayICJAAgAkEIaiAAIAEoAmARAAAgAkEQaiACKAIIIgAgAigCDCgCDBEAACACKQMYIQMgAikDECEEIAJBIGokACAAQQAgBEKMlPHKpOu5zMkAhSADQuSXjKHS7Pqeq3+FhFAbC2wCAX8CfiMAQSBrIgIkACACQQhqIAAgASgCYBEAACACQRBqIAIoAggiACACKAIMKAIMEQAAIAIpAxghAyACKQMQIQQgAkEgaiQAIABBACAEQoHP7fuqjuWV5wCFIANCqMee2eG4w5NHhYRQGwtsAgF/An4jAEEgayICJAAgAkEIaiAAIAEoAmQRAAAgAkEQaiACKAIIIgAgAigCDCgCDBEAACACKQMYIQMgAikDECEEIAJBIGokACAAQQAgBEKBz+37qo7llecAhSADQqjHntnhuMOTR4WEUBsLbAIBfwJ+IwBBIGsiAiQAIAJBCGogACABKAJgEQAAIAJBEGogAigCCCIAIAIoAgwoAgwRAAAgAikDGCEDIAIpAxAhBCACQSBqJAAgAEEAIARC+rmPrJLGqMeJf4UgA0L/xf6P7pysu1SFhFAbC2sCAX8CfiMAQSBrIgIkACACQQhqIAAgASgCYBEAACACQRBqIAIoAggiACACKAIMKAIMEQAAIAIpAxghAyACKQMQIQQgAkEgaiQAIABBACAEQq2MgIugq4+YHoUgA0LLzsCampvowT+FhFAbC2wCAX8CfiMAQSBrIgIkACACQQhqIAAgASgCYBEAACACQRBqIAIoAggiACACKAIMKAIMEQAAIAIpAxghAyACKQMQIQQgAkEgaiQAIABBACAEQtCZq8uN9PaE+ACFIANC576imeai38c2hYRQGwtsAgF/An4jAEEgayICJAAgAkEIaiAAIAEoAmQRAAAgAkEQaiACKAIIIgAgAigCDCgCDBEAACACKQMYIQMgAikDECEEIAJBIGokACAAQQAgBELQmavLjfT2hPgAhSADQue+opnmot/HNoWEUBsLawIBfwJ+IwBBIGsiAiQAIAJBCGogACABKAJgEQAAIAJBEGogAigCCCIA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DQAaQQIgCkKAgICAgICA+P8AgyILQoCAgICAgID4/wBRDQAaIApC/////////weDIg5CgICAgICAgAiEIApCAYZC/v///////w+DIApCNIinQf8PcSIGGyIMQgGDIQ0gC1AEQEEEIA5QDQEaIAZBswhrIQZCASELIA1QDAELQoCAgICAgIAgIAxCAYYgDEKAgICAgICACFEiABshDEICQgEgABshC0HLd0HMdyAAGyAGaiEGIA1QCyEAIAMgBjsBeCADIAs3A3AgA0IBNwNoIAMgDDcDYCADIAA6AHoCfwJAAkACQAJAAkAgAEEBTQRAIANBIGoiBiADQeAAaiADQQ9qEJMBQe6mxABBASAKQgBTIgAbIQVB7qbEAEHvpsQAIAAbIQcgCkI/iKchACADKAIgRQ0BIANB2ABqIAZBCGooAgA2AgAgAyADKQIgNwNQDAILIABBAkYNA0EBIQZB7qbEAEHvpsQAIApCAFMiBxtB7qbEAEEBIAcbIAQbIQUgCkI/iKcgBHIhByAAQf8BcUEERg0CIANBAzYCKCADQfOmxAA2AiQgA0ECOwEgIANBIGoMBQsgA0HQAGogA0HgAGogA0EPahAyCyAHIAUgBBshBSAAIARyIQcgAyADKAJQIAMoAlQgAy8BWEEAIANBIGoQvAUgAygCBCEGIAMoAgAMAwsgA0ECOwEgDAELIANBAzYCKCADQfCmxAA2AiQgA0ECOwEgQQEhBUEAIQdBASEGIANBIGoMAQsgA0EBNgIoIANB9qbEADYCJCADQSBqCyEAIAMgBjYCXCADIAA2AlggAyAHNgJUIAMgBTYCUCABIANB0ABqELMDIQAgA0GAAWokACAADwsgBUEARyEIIAEvAQ4hByMAQfAIayICJAAgD70hCgJ/QQMgD5lEAAAAAAAA8H9hDQAaQQIgCkKAgICAgICA+P8AgyILQoCAgICAgID4/wBRDQAaIApC/////////weDIg5CgICAgICAgAiEIApCAYZC/v///////w+DIApCNIinQf8PcSIEGyIMQgGDIQ0gC1AEQEEEIA5QDQEaIARBswhrIQRCASELIA1QDAELQoCAgICAgIAgIAxCAYYgDEKAgICAgICACFEiABshDEICQgEgABshC0HLd0HMdyAAGyAEaiEEIA1QCyEAIAIgBDsB6AggAiALNwPgCCACQgE3A9gIIAIgDDcD0AggAiAAOgDqCAJ/AkACQCAAQQFNBEBBdEEFIATBIgBBAEgbIABsIgVBwP0ASQ0BQf2mxABBJUGkp8QAENYMAAsgAEECRg0BQQEhBEHupsQAQe+mxAAgCkIAUyIFG0HupsQAQQEgBRsgCBshBiAKQj+IpyAIciEFIABB/wFxQQRHBEAgAkEDNgKYCCACQfOmxAA2ApQIIAJBAjsBkAggAkGQCGoMAwtBAiEEIAJBAjsBkAggB0UEQEEBIQQgAkEBNgKYCCACQfamxAA2ApQIIAJBkAhqDAMLIAIgBzYCoAggAkEAOwGcCCACQQI2ApgIIAJBxabEADYClAggAkGQCGoMAgtB7qbEAEEBIApCAFMiABshCUHupsQAQe+mxAAgABshAyAKQj+IpyEEIAJBkAhqIgYgAkHQCGogAkEQaiAFQQR2QRVqIgVBgIB+QQAgB2sgB8FBAEgbIgAQpwIgAMEhAAJAIAIoApAIBEAgAkHICGogBkEIaigCADYCACACIAIpApAINwPACAwBCyACQcAIaiACQdAIaiACQRBqIAUgABA4CyADIAkgCBshBiAEIAhyIQUgACACLgHICCIASARAIAJBCGogAigCwAggAigCxAggACAHIAJBkAhqELwFIAIoAgwhBCACKAIIDAILQQIhBCACQQI7AZAIIAdFBEBBASEEIAJBATYCmAggAkH2psQANgKUCCACQZAIagwCCyACIAc2AqAIIAJBADsBnAggAkECNgKYCCACQcWmxAA2ApQIIAJBkAhqDAELIAJBAzYCmAggAkHwpsQANgKUCCACQQI7AZAIQQEhBkEAIQVBASEEIAJBkAhqCyEAIAIgBDYCzAggAiAANgLICCACIAU2AsQIIAIgBjYCwAggASACQcAIahCzAyEAIAJB8AhqJAAgAAtVAQF/QRhBBBCzDiIDRQRAQQRBGEGQxMQAKAIAIgNBzAggAxsRAAAACyADIAI4AhQgAyABOAIQIAMgADgCDCADQQA2AgggA0KBgICAEDcCACADQQhqC0QBAX8gACABQf8BcSIGQRxsaiIBIAU4ApwBIAEgBDgCmAEgASACOAKUASABIAM4ApABIAAgAC0AugJBASAGdHI6ALoCC0sAIAEoAgAgAigCACADKAIAEA0hAUGExMQAKAIAIQJBgMTEACgCACEDQYDExABCADcCACAAIAIgASADQQFGIgEbNgIEIAAgATYCAAs8AQF/IwBBIGsiAyQAIANBBGoiBCABIAIQ4wMgAEEIaiAEQQhqKQIANwIAIAAgAykCBDcCACADQSBqJAALPwEBfyMAQSBrIgUkACAFQQhqIAEgAiADIAQQsQIgBSgCCCEBIAAgBSoCEDgCBCAAIAFBBEc2AgAgBUEgaiQACz8BAX8jAEEgayIFJAAgBUEIaiABIAIgAyAEELICIAUoAgghASAAIAUqAhA4AgQgACABQQRHNgIAIAVBIGokAAs/AQF/IwBBIGsiBSQAIAVBCGogASACIAMgBBCQAiAFKAIIIQEgACAFKgIQOAIEIAAgAUEERzYCACAFQSBqJAALPwEBfyMAQSBrIgUkACAFQQhqIAEgAiADIAQQ8AEgBSgCCCEBIAAgBSoCEDgCBCAAIAFBBEc2AgAgBUEgaiQACz8BAX8jAEEgayIFJAAgBUEIaiABIAIgAyAEEJ4CIAUoAgghASAAIAUqAhA4AgQgACABQQRHNgIAIAVBIGokAAs9ACMAQSBrIgQkACAEQQhqIAEgAiADQQAQmQEgBCgCCCEBIAAgBCoCEDgCBCAAIAFBBEc2AgAgBEEgaiQACz8BAX8jAEEgayIFJAAgBUEIaiABIAIgAyAEEK0CIAUoAgghASAAIAUqAhA4AgQgACABQQRHNgIAIAVBIGokAAs/AQF/IwBBIGsiBSQAIAVBCGogASACIAMgBBCeASAFKAIIIQEgACAFKgIQOAIEIAAgAUEERzYCACAFQSBqJAALPwEBfyMAQSBrIgUkACAFQQhqIAEgAiADIAQQvgEgBSgCCCEBIAAgBSoCEDgCBCAAIAFBBEc2AgAgBUEgaiQACz8BAX8jAEEgayIFJAAgBUEIaiABIAIgAyAEEN4BIAUoAgghASAAIAUqAhA4AgQgACABQQRHNgIAIAVBIGokAAs/AQF/IwBBIGsiBSQAIAVBCGogASACIAMgBBCRAiAFKAIIIQEgACAFKgIQOAIEIAAgAUEERzYCACAFQSBqJAALPwEBfyMAQSBrIgUkACAFQQhqIAEgAiADIAQQ+QEgBSgCCCEBIAAgBSoCEDgCBCAAIAFBBEc2AgAgBUEgaiQAC0IBAX0gACACKgIYIAMqAgggASoCACIElJI4AgggACACKgIUIAQgAyoCBJSSOAIEIAAgAioCECAEIAMqAgCUkjgCAAtUAQF/QQxBBBCzDiICRQRAQQRBDEGQxMQAKAIAIgBBzAggABsRAAAACyACIAEpAgA3AgAgAkEIaiABQQhqKAIANgIAIABBzNHDADYCBCAAIAI2AgALVAEBf0EMQQQQsw4iAkUEQEEEQQxBkMTEACgCACIAQcwIIAAbEQAAAAsgAiABKQIANwIAIAJBCGogAUEIaigCADYCACAAQbz9wgA2AgQgACACNgIAC1QBAX9BEEEEELMOIgJFBEBBBEEQQZDExAAoAgAiAEHMCCAAGxEAAAALIAIgASkCADcCACACQQhqIAFBCGopAgA3AgAgAEGQ2sMANgIEIAAgAjYCAAtWAQJ9IAEqAgQhAiABKgIAIQNBCEEEELMOIgFFBEBBBEEIQZDExAAoAgAiAEHMCCAAGxEAAAALIAEgAjgCBCABIAM4AgAgAEGsr8MANgIEIAAgATYCAAtWAQJ9IAEqAgQhAiABKgIAIQNBCEEEELMOIgFFBEBBBEEIQZDExAAoAgAiAEHMCCAAGxEAAAALIAEgAjgCBCABIAM4AgAgAEHYssMANgIEIAAgATYCAAtUAQF/QQxBBBCzDiICRQRAQQRBDEGQxMQAKAIAIgBBzAggABsRAAAACyACIAEpAgA3AgAgAkEIaiABQQhqKAIANgIAIABBvLbDADYCBCAAIAI2AgALVAEBf0EMQQQQsw4iAkUEQEEEQQxBkMTEACgCACIAQcwIIAAbEQAAAAsgAiABKQIANwIAIAJBCGogAUEIaigCADYCACAAQbjUwwA2AgQgACACNgIAC1YBAn8gASgCBCECIAEoAgAhA0EIQQQQsw4iAUUEQEEEQQhBkMTEACgCACIAQcwIIAAbEQAAAAsgASACNgIEIAEgAzYCACAAQfSGxAA2AgQgACABNgIAC0IBAX8jAEEgayIDJAAgA0EANgIQIANBATYCBCADQgQ3AgggAyABNgIcIAMgADYCGCADIANBGGo2AgAgAyACELgNAAtJAQF/QQZBARCzDiIBRQRAQQFBBkHwvMEAENMNAAsgAEEGNgIEIAAgATYCACABQQRqQezRwQAvAAA7AAAgAUHo0cEAKAAANgAAC1UBAX9BHEEEELMOIgBFBEBBBEEcQZDExAAoAgAiAEHMCCAAGxEAAAALIABCADcCCCAAQoGAgIAQNwIAIABBgICA/AM2AhggAEEQakIANwIAIABBCGoLPAEBfyMAQSBrIgQkACAEQQxqIAEgAiADEJIBIABBCGogBEEYaikCADcCACAAIAQpAhA3AgAgBEEgaiQACzcBA30gASoCBCIDIAAqAgAiBF8gACoCBCABKgIAIgIgApQgASoCCCICIAKUkpFgcSADIASMYHELPwAgACABKQIANwIMIAAgASoCBIw4AgQgACABKgIAjDgCACAAQRRqIAFBCGoiASgCADYCACAAIAEqAgCMOAIICzoBAX8gACgCACIBQYQBTwRAIAEQAgsgACgCBCIBQYQBTwRAIAEQAgsgACgCCCIAQYQBTwRAIAAQAgsLNgEBfyAAKAIAIgEEQCAAKAIEIAFBAnRBBBCIDwsgACgCFCIBBEAgACgCGCABQQN0QQQQiA8LCz8BAX8gACgCACEAIAEoAggiAkGAgIAQcUUEQCACQYCAgCBxRQRAIAAgARC7DA8LIAAgARCkCg8LIAAgARCjCgs2AQF/IAAoAgAiAQRAIAAoAgQgAUECdEEEEIgPCyAAKAIMIgEEQCAAKAIQIAFBAnRBBBCIDwsLPAEBfUMAAAAAIAAqAgAgASoCAJQgACoCBCABKgIElJIgACoCCCABKgIIlJIiAyADQwAAAABdGyADIAIbCzgBAX0gAEEANgIIIABCADcCACAAIAEqAgAiAiAClCABKgIEIgIgApSSIAEqAggiAiAClJKROAIMCz0BAn0gACABKgIEIgI4AhQgACACOAIMIAAgASoCAIsiAzgCECAAIAKMIgI4AgggACACOAIAIAAgA4w4AgQLxQMBA38gACgCACECIAEoAggiAEGAgIAQcUUEQCAAQYCAgCBxRQRAIwBBEGsiACQAQQMhAyACLQAAIgIhBCACQQpPBEAgACACIAJB5ABuIgRB5ABsa0H/AXFBAXQiA0HuqsQAai0AADoADyAAIANB7arEAGotAAA6AA5BASEDCyAERSACQQBHcUUEQCADQQFrIgMgAEENamogBEEBdEH+AXFB7qrEAGotAAA6AAALIAFBAUEBQQAgAEENaiADakEDIANrEN8CIQEgAEEQaiQAIAEPCyMAQYABayIEJAAgAi0AACEAQQAhAgNAIAIgBGpB/wBqIABBD3EiA0EwciADQTdqIANBCkkbOgAAIAJBAWshAiAAIgNBBHYhACADQQ9LDQALIAFBAUHrqsQAQQIgAiAEakGAAWpBACACaxDfAiEAIARBgAFqJAAgAA8LIwBBgAFrIgQkACACLQAAIQBBACECA0AgAiAEakH/AGogAEEPcSIDQTByIANB1wBqIANBCkkbOgAAIAJBAWshAiAAIgNBBHYhACADQQ9LDQALIAFBAUHrqsQAQQIgAiAEakGAAWpBACACaxDfAiEAIARBgAFqJAAgAAvRAwEGfyMAQRBrIgMkACADIAA2AgwgAEEMaiEEIANBDGohBSMAQSBrIgAkAAJAIAEoAgAiBkHogsQAQQggASgCBCgCDCIHEQUABEBBASECDAELAkAgAS0ACkGAAXFFBEBBASECIAZB5arEAEEBIAcRBQANAiAEIAFB1ILEACgCABEDAEUNAQwCCyAGQeaqxABBAiAHEQUABEBBASECDAILQQEhAiAAQQE6AA8gAEG8qsQANgIUIAAgASkCADcCACAAIAEpAgg3AhggACAAQQ9qNgIIIAAgADYCECAEIABBEGpB1ILEACgCABEDAA0BIAAoAhBB4KrEAEECIAAoAhQoAgwRBQANAQsCQCABLQAKQYABcUUEQCABKAIAQduqxABBAiABKAIEKAIMEQUADQIgBSABQeSCxAAoAgARAwBFDQEMAgsgAEEBOgAPIABBvKrEADYCFCAAIAEpAgA3AgAgACABKQIINwIYIAAgAEEPajYCCCAAIAA2AhAgBSAAQRBqQeSCxAAoAgARAwANASAAKAIQQeCqxABBAiAAKAIUKAIMEQUADQELIAEoAgBBu6fEAEEBIAEoAgQoAgwRBQAhAgsgAEEgaiQAIANBEGokACACC0oBAX9BGEEEELMOIgBFBEBBBEEYQZDExAAoAgAiAEHMCCAAGxEAAAALIABCADcCCCAAQoGAgIAQNwIAIABBEGpCADcCACAAQQhqCzIBAX8gACABIAIQlgMEfyAAIAIpAgA3AgQgAEEMaiACQQhqKAIANgIAQQEFQQALNgIACy8BAn8jAEHgAGsiAyQAIANBCGoiBCAAIAEQmgIgAiAEQdgA/AoAACADQeAAaiQACzgAAkAgAkGAgMQARg0AIAAgAiABKAIQEQMARQ0AQQEPCyADRQRAQQAPCyAAIAMgBCABKAIMEQUACzYBAX8gACgCACIAQQxqEGUCQCAAQX9GDQAgACAAKAIEQQFrIgE2AgQgAQ0AIABBMEEEEIgPCws4AQF/IAAoAgAiAEEQahC3CAJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEHoAEEIEIgPCws4AQF/IAAoAgAiAEEgahDrBwJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEHAA0EQEIgPCws4AQF/IAAoAgAiAEEMahDSBwJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEHQAEEEEIgPCws4AQF/IAAoAgAiAEEQahDPAQJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEG4BUEIEIgPCws4AQF/IAAoAgAiAEEMahCTCgJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEHMAEEEEIgPCws4AQF/IAAoAgAiAEEMahCiCAJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEHAAEEEEIgPCws4AQF/IAAoAgAiAEEQahDZCQJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEHoAEEIEIgPCws4AQF/IAAoAgAiAEEQahCACgJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEGwAUEIEIgPCws4AQF/IAAoAgAiAEEQahDzBQJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEGwAkEIEIgPCws2AQF/IwBBEGsiAiQAIAJBCGogARDyCiACKAIMIQEgACACKAIINgIAIAAgATYCBCACQRBqJAALNgEBfyMAQRBrIgIkACACQQhqIAEQzwwgAigCDCEBIAAgAigCCDYCACAAIAE2AgQgAkEQaiQACy4BAX8gACgCBCIBBEAgACgCACABQRRsQRtqQXhxIgBrIAAgAWpBCWpBCBCIDwsLLgEBfyAAKAIEIgEEQCAAKAIAIAFBHGxBI2pBeHEiAGsgACABakEJakEIEIgPCwsuAQF/IAAoAgQiAQRAIAAoAgAgAUEMbEETakF4cSIAayAAIAFqQQlqQQgQiA8LCzMBAX8gACgCACIBBEAgACgCBCABQQJ0QQQQiA8LIAAoAhQiAQRAIAAoAhggAUEBEIgPCws5AQF/IwBBEGsiBCQAIAQgATYCDCAEIAA2AghBACAEQQhqQbDTwgAgBEEMakGw08IAIAIgAxC6BQALOQEBfyMAQRBrIgUkACAFIAI2AgwgBSABNgIIIAAgBUEIakH80sIAIAVBDGpB/NLCACADIAQQugUACz0AIABCADcCECAAQgA3AgAgAEKAgICAgICAwD83AgggAEEYakIANwIAIABBIGpCADcCACAAQShqQQA2AgALNgEBfyMAQRBrIgIkACACQQhqIAEQ1wIgAigCDCEBIAAgAigCCDYCACAAIAE2AgQgAkEQaiQACzYBAX8jAEEQayICJAAgAkEIaiABEJIEIAIoAgwhASAAIAIoAgg2AgAgACABNgIEIAJBEGokAAs9ACAAQgA3AhAgAEIANwIAIABCgICAgICAgMA/NwIIIABBGGpCADcCACAAQSBqQgA3AgAgAEEoakEANgIACzwBAX8jAEEQayIDJAAgA0HMqcEANgIMIAMgADYCCEEAIANBCGpBqILEACADQQxqQaiCxAAgASACELoFAAs5AQF/IwBBEGsiBCQAIAQgATYCDCAEIAA2AghBACAEQQhqQYipxAAgBEEMakGIqcQAIAIgAxC6BQALOAEBfyABKAIIIgJBgICAEHFFBEAgAkGAgIAgcUUEQCAAIAEQuwwPCyAAIAEQpAoPCyAAIAEQowoLLwEBfSABKgIAIgIgApQgASoCBCICIAKUkiABKgIIIgIgApSSIAAqAgAiAiAClF8LMAEBfyMAQSBrIgMkACADQQhqIAAgASACQQEQngEgAygCCCEAIANBIGokACAAQQRHCzABAX8jAEEgayIDJAAgA0EIaiAAIAEgAkEBEL4BIAMoAgghACADQSBqJAAgAEEERwswAQF/IwBBEGsiAyQAIANBCGogACABIAJBARCbASADKAIIIQAgA0EQaiQAIABBAUYLMAEBfyMAQSBrIgMkACADQQhqIAAgASACQQEQ8AEgAygCCCEAIANBIGokACAAQQRHCzABAX8jAEEQayIDJAAgA0EIaiAAIAEgAkEBENsBIAMoAgghACADQRBqJAAgAEEBRgswAQF/IwBBIGsiAyQAIANBCGogACABIAJBARCQAiADKAIIIQAgA0EgaiQAIABBBEcLMAEBfyMAQSBrIgMkACADQQhqIAAgASACQQEQ+QEgAygCCCEAIANBIGokACAAQQRHCzABAX8jAEEQayIDJAAgA0EIaiAAIAEgAkEBELkBIAMoAgghACADQRBqJAAgAEEBRgswAQF/IwBBIGsiAyQAIANBCGogACABIAJBARCyAiADKAIIIQAgA0EgaiQAIABBBEcLMAEBfyMAQSBrIgMkACADQQhqIAAgASACQQEQsQIgAygCCCEAIANBIGokACAAQQRHCzABAX8jAEEgayIDJAAgA0EIaiAAIAEgAkEBEJ4CIAMoAgghACADQSBqJAAgAEEERwswAQF/IwBBIGsiAyQAIANBCGogACABIAJBARCRAiADKAIIIQAgA0EgaiQAIABBBEcLMAEBfyMAQSBrIgMkACADQQhqIAAgASACQQEQrQIgAygCCCEAIANBIGokACAAQQRHCzABAX8jAEEgayIDJAAgA0EIaiAAIAEgAkEBEN4BIAMoAgghACADQSBqJAAgAEEERwswAQF/IwBBIGsiAyQAIANBCGogACABIAJBABCZASADKAIIIQAgA0EgaiQAIABBBEcLSAEBfyABKAIAIQJBBEEEELMOIgFFBEBBBEEEQZDExAAoAgAiAEHMCCAAGxEAAAALIAEgAjYCACAAQZSPwwA2AgQgACABNgIACzoBAX8jAEEgayIAJAAgAEEANgIYIABBATYCDCAAQbiFxAA2AgggAEIENwIQIABBCGpBwIXEABC4DQALOgEBfyMAQSBrIgAkACAAQQA2AhggAEEBNgIMIABBgIjEADYCCCAAQgQ3AhAgAEEIakGIiMQAELgNAAs3AQF/IwBBIGsiASQAIAFBADYCGCABQQE2AgwgAUH8vMQANgIIIAFCBDcCECABQQhqIAAQuA0ACzsBAX9BASECAkAgACABEPEFDQAgASgCAEHUp8QAQQIgASgCBCgCDBEFAA0AIABBBGogARDxBSECCyACCzoBAX8jAEEgayIAJAAgAEEANgIYIABBATYCDCAAQYCuxAA2AgggAEIENwIQIABBCGpBiK7EABC4DQALngIBBn8jAEEQayICJAAgAiAANgIMIAJBDGohBCMAQSBrIgAkAEEBIQUCQCABKAIAIgNBlMzDAEEGIAEoAgQiBygCDCIGEQUADQACQCABLQAKQYABcUUEQCADQeWqxABBASAGEQUADQIgBCABQYjTwgAoAgARAwBFDQEMAgsgA0HmqsQAQQIgBhEFAA0BIABBAToADyAAIAc2AgQgACADNgIAIABBvKrEADYCFCAAIAEpAgg3AhggACAAQQ9qNgIIIAAgADYCECAEIABBEGpBiNPCACgCABEDAA0BIAAoAhBB4KrEAEECIAAoAhQoAgwRBQANAQsgASgCAEG7p8QAQQEgASgCBCgCDBEFACEFCyAAQSBqJAAgAkEQaiQAIAULLgAjAEEQayIEJAAgBCAAKQIANwIIIARBCGogASACIAMgBCAEEOgDIARBEGokAAsuACMAQRBrIgQkACAEIAApAgA3AgggBEEIaiABIAIgAyAEIAQQ4AEgBEEQaiQACy4AIwBBEGsiBCQAIAQgACkCADcCCCAEQQhqIAEgAiADIAQgBBCmASAEQRBqJAALLgAjAEEQayIEJAAgBCAAKQIANwIIIARBCGogASACIAMgBCAEEJQCIARBEGokAAsuACMAQRBrIgQkACAEIAApAgA3AgggBEEIaiABIAIgAyAEIAQQiAQgBEEQaiQACzYBAX0gACABKgIAIgI4AhQgACACOAIQIAAgAjgCDCAAIAKMIgI4AgggACACOAIEIAAgAjgCAAtMAQJ9IAAqAgQgACoCABCyDyIBQwAAAABgRQRAQaC0wwBBKEHItMMAENYMAAtD2w/JPyABkyICIAIgASABkiIBIAEgAl4bIAEgAVwbCysAIABDAAAAP5IgAZWOIgAgAkEBa7MiASAAIAFdG/wBQQAgAEMAAAAAXhsLMgAgACABKgIIIAIqAgiYOAIIIAAgASoCBCACKgIEmDgCBCAAIAEqAgAgAioCAJg4AgALRAEBfiAAKQIAIQFBDEEEELMOIgBFBEBBBEEMQZDExAAoAgAiAEHMCCAAGxEAAAALIAAgATcCBCAAQYCAgIB4NgIAIAALKQEBfyAAKAIEIgEEQCAAKAIAIAFBaGxqQRhrIAFBGWxBIWpBCBCIDwsLMAACQCABaUEBRiAAQYCAgIB4IAFrTXFFDQAgAARAIAAgARCzDiIBRQ0BCyABDwsACykBAX8gACgCBCIBBEAgACgCACABQQR0a0EQayABQRFsQRlqQQgQiA8LCy0BAn0gACoCDCAAKgIAIgEgACoCBCICIAEgAl8bIgEgACoCCCICIAEgAl8bkgsvAQF/AkAgACgCACIAQX9GDQAgACAAKAIEQQFrIgE2AgQgAQ0AIABBDEEEEIgPCwsvAQF/AkAgACgCACIAQX9GDQAgACAAKAIEQQFrIgE2AgQgAQ0AIABBGEEEEIgPCwswAQF/AkAgACgCACIAQX9GDQAgACAAKAIEQQFrIgE2AgQgAQ0AIABB8ABBBBCIDwsLLwEBfwJAIAAoAgAiAEF/Rg0AIAAgACgCBEEBayIBNgIEIAENACAAQSRBBBCIDwsLLwEBfwJAIAAoAgAiAEF/Rg0AIAAgACgCBEEBayIBNgIEIAENACAAQRxBBBCIDwsLMAEBfwJAIAAoAgAiAEF/Rg0AIAAgACgCBEEBayIBNgIEIAENACAAQeACQRAQiA8LCzABAX8CQCAAKAIAIgBBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEHQAEEEEIgPCwsqAQF/IwBBMGsiAiQAIAJBDGogACABQQEQUiACLQAYIQAgAkEwaiQAIAALQAEBf0EMQQQQsw4iAEUEQEEEQQxBkMTEACgCACIAQcwIIAAbEQAAAAsgAEEANgIIIABCgYCAgBA3AgAgAEEIagsqAQF/IwBBMGsiAiQAIAJBDGogACABQQEQViACLQAYIQAgAkEwaiQAIAALMAEBfSAAIAIqAgggASoCACIDlDgCCCAAIAMgAioCBJQ4AgQgACADIAIqAgCUOAIACy4AIAAgASkCQDcCACAAQRBqIAFB0ABqKQIANwIAIABBCGogAUHIAGopAgA3AgALLQAgACABKQI0NwIAIABBEGogAUHEAGopAgA3AgAgAEEIaiABQTxqKQIANwIACy0BAX0gAEEANgIIIABCADcCACAAIAEqAgQiAiAClCABKgIAIgIgApSSkTgCDAssAQF/IwBBEGsiAiQAIAIgACgCADYCDCACQQxqIAEQ8QUhACACQRBqJAAgAAsrACAAKgIAIAEqAgCUIAAqAgQgASoCBJSSIAAqAgggASoCCJSSQwAAAABfCykBAX8jAEEgayICJAAgAkEEaiAAIAEQ4wMgAi0AECEAIAJBIGokACAAC/wBAgJ/AX4jAEEQayICJAAgAkEBOwEMIAIgATYCCCACIAA2AgQjAEEQayIBJAAgAkEEaiIAKQIAIQQgASAANgIMIAEgBDcCBCMAQRBrIgAkACABQQRqIgEoAgAiAigCDCEDAkACQAJAAkAgAigCBA4CAAECCyADDQFBASECQQAhAwwCCyADDQAgAigCACICKAIEIQMgAigCACECDAELIABBgICAgHg2AgAgACABNgIMIABBoIfEACABKAIEIAEoAggiAC0ACCAALQAJEIQJAAsgACADNgIEIAAgAjYCACAAQYSHxAAgASgCBCABKAIIIgAtAAggAC0ACRCECQALKAEBfyMAQRBrIgIkACACIAAgAUEBEIQBIAItAAwhACACQRBqJAAgAAsnAQF/IwBBEGsiAiQAIAIgACABQQEQKCACLQAMIQAgAkEQaiQAIAALKAEBfyMAQRBrIgIkACACIAAgAUEBEPsCIAItAAwhACACQRBqJAAgAAsnAQF/IwBBEGsiAiQAIAIgACABQQEQKyACLQAMIQAgAkEQaiQAIAALJwEBfyMAQRBrIgIkACACIAAgAUEBECkgAi0ADCEAIAJBEGokACAACycBAX8jAEEQayICJAAgAiAAIAFBARAnIAItAAwhACACQRBqJAAgAAsnAQF/IwBBEGsiAiQAIAIgACABQQEQJiACLQAMIQAgAkEQaiQAIAALJwECfSAAKgIAIgEgACoCBCICIAEgAl8bIgEgACoCCCICIAEgAl8bCycBAn0gACoCZCIBIAAqAmgiAiABIAJfGyIBIAAqAmwiAiABIAJfGwsrACAAQf8BcSIAQcAATQRAIABBjKnBAGotAAAPCyAAQcEAQejbwwAQiAsACzMAIAEoAgAgACgCAC0AAEECdCIAQejEwgBqKAIAIABB2MTCAGooAgAgASgCBCgCDBEFAAslACAARQRAQfjFwgBBMhCaDwALIAAgAiADIAQgBSABKAIQESAACyMAIABFBEBB+MXCAEEyEJoPAAsgACACIAMgBCABKAIQEQIACyMAIABFBEBB+MXCAEEyEJoPAAsgACACIAMgBCABKAIQEREACyMAIABFBEBB+MXCAEEyEJoPAAsgACACIAMgBCABKAIQER8ACyQAIABFBEBB+MXCAEEyEJoPAAsgACACIAMgBCABKAIQEaIBAAsjACAARQRAQfjFwgBBMhCaDwALIAAgAiADIAQgASgCEBE8AAsoAQF/IAAoAgAiAUGAgICAeHJBgICAgHhHBEAgACgCBCABQQEQiA8LCyEAIABFBEBB+MXCAEEyEJoPAAsgACACIAMgASgCEBEBAAsdACABKAIABEAgAEH0hsQANgIEIAAgATYCAA8LAAsnAQF/IAAoAgAiAgRAIAEoAgAgAiAAKAIEIAEoAgQoAgwRBQAPCwALJAAgAC0AAEUEQCABQYitxABBBRCBAw8LIAFBja3EAEEEEIEDCx8AIABFBEBB+MXCAEEyEJoPAAsgACACIAEoAhARAwALKQAgACAALQAEIAFBLkZyOgAEIAAoAgAiACgCACABIAAoAgQoAhARAwALHQAgACACIAEoAiwgASgCMCABKAI4IAEoAjwQpgILGgEBfyAAKAIAIgEEQCAAKAIEIAFBARCIDwsLUgAgAARAIAAgAUGQxMQAKAIAIgBBzAggABsRAAAACyMAQSBrIgAkACAAQQA2AhggAEEBNgIMIABBjInEADYCCCAAQgQ3AhAgAEEIaiACELgNAAsfACAAQQhqQbi3wQApAgA3AgAgAEGwt8EAKQIANwIACx8AIABBCGpByLfBACkCADcCACAAQcC3wQApAgA3AgALHwAgAEEIakGE2sEAKQIANwIAIABB/NnBACkCADcCAAsfACAAQQhqQZTawQApAgA3AgAgAEGM2sEAKQIANwIACx8AIABBCGpBtNrBACkCADcCACAAQazawQApAgA3AgALHwAgAEEIakHE2sEAKQIANwIAIABBvNrBACkCADcCAAsfACAAQQhqQdTawQApAgA3AgAgAEHM2sEAKQIANwIACx8AIABBCGpB1MnCACkCADcCACAAQczJwgApAgA3AgALHwAgAEEIakHkycIAKQIANwIAIABB3MnCACkCADcCAAsfACAAQQhqQfTJwgApAgA3AgAgAEHsycIAKQIANwIACx8AIABBCGpBhMrCACkCADcCACAAQfzJwgApAgA3AgALHwAgAEEIakGUysIAKQIANwIAIABBjMrCACkCADcCAAsfACAAQQhqQaTKwgApAgA3AgAgAEGcysIAKQIANwIACx8AIABBCGpBtMrCACkCADcCACAAQazKwgApAgA3AgALHwAgAEEIakHEysIAKQIANwIAIABBvMrCACkCADcCAAsfACAAQQhqQdTKwgApAgA3AgAgAEHMysIAKQIANwIACx8AIABBCGpB5MrCACkCADcCACAAQdzKwgApAgA3AgALHwAgAEEIakH0ysIAKQIANwIAIABB7MrCACkCADcCAAsfACAAQQhqQYTLwgApAgA3AgAgAEH8ysIAKQIANwIACx8AIABBCGpBlMvCACkCADcCACAAQYzLwgApAgA3AgALHwAgAEEIakGky8IAKQIANwIAIABBnMvCACkCADcCAAsfACAAQQhqQbTLwgApAgA3AgAgAEGsy8IAKQIANwIACx8AIABBCGpBxMvCACkCADcCACAAQbzLwgApAgA3AgALHwAgAEEIakHUy8IAKQIANwIAIABBzMvCACkCADcCAAsfACAAQQhqQeTLwgApAgA3AgAgAEHcy8IAKQIANwIACx8AIABBCGpB9MvCACkCADcCACAAQezLwgApAgA3AgALHwAgAEEIakGEzMIAKQIANwIAIABB/MvCACkCADcCAAsfACAAQQhqQZTMwgApAgA3AgAgAEGMzMIAKQIANwIACx8AIABBCGpBpMzCACkCADcCACAAQZzMwgApAgA3AgALHwAgAEEIakG0zMIAKQIANwIAIABBrMzCACkCADcCAAsfACAAQQhqQcTMwgApAgA3AgAgAEG8zMIAKQIANwIACx8AIABBCGpB1MzCACkCADcCACAAQczMwgApAgA3AgALHwAgAEEIakHkzMIAKQIANwIAIABB3MzCACkCADcCAAsfACAAQQhqQfTMwgApAgA3AgAgAEHszMIAKQIANwIACxoAIABBADYCCCAAQgA3AgAgACABKgIAOAIMCx0AIABB3KDDADYCBCAAIAE2AgAgACABKgIYOAIICx0AIABBsJ3DADYCBCAAIAE2AgAgACABKgIMOAIICx0AIABBnKHDADYCBCAAIAE2AgAgACABKgIkOAIICx0AIABBkLHDADYCBCAAIAE2AgAgACABKgIIOAIICx0AIABB9LTDADYCBCAAIAE2AgAgACABKgIIOAIICx0AIABB5K3DADYCBCAAIAE2AgAgACABKgJgOAIICx8AIABBCGpB1IHEACkCADcCACAAQcyBxAApAgA3AgALHwAgAEEIakHkgcQAKQIANwIAIABB3IHEACkCADcCAAsaACAAQQA2AgggAEGEu8EANgIEIAAgATYCAAsaACAAQQA2AgggAEHMvMEANgIEIAAgATYCAAsaACAAQQA2AgggAEHQ38EANgIEIAAgATYCAAsaACAAQQA2AgggAEG8+cEANgIEIAAgATYCAAsWACAAQdgBaiAALQDlAiAAQTBqEIAGCxgAIAAoAgAgASgCACACKAIAIAMoAgAQEAsXAQF/IAAQEiIBNgIEIAAgAUEARzYCAAsXAQF/IAAQEyIBNgIEIAAgAUEARzYCAAsXAQF/IAAQFCIBNgIEIAAgAUEARzYCAAsXAQF/IAAQFSIBNgIEIAAgAUEARzYCAAscACAAQQA2AhAgAEIANwIIIABCgICAgMAANwIACzEAIABC////9/f////+ADcCECAAQv////f//////gA3AgggAEL////3/////343AgALGgAgAEEANgIIIABBsJ3DADYCBCAAIAE2AgALrQUCFH0CfyABKgIYIQYgAAJ9QwAAgD8gAUEMaiIXKgIIIg8gASoCCCIQkyIKjCAKIBcqAgQiESABKgIEIhKTIgdDAAAAAF0iGBsiCyALlCAXKgIAIhMgASoCACIUkyIMjCAMIBgbIgggCJQgB4wgByAYGyINIA2UkpIiDkMAAAAAXkUNABogDSAOkSIDlSIOQwAAAACUIgQgCCADlSIFkyIIIAiUIAsgA5UiAyAEkyILIAuUIAVDAAAAAJQiBSADQwAAAACUIhWTIg0gDZSSkiIWQwAAgCheRQRAQwAAAAAhA0MAAAAAIQRDAACAPwwBC0MAAAAAIQNDAAAAACEEQwAAgD8gFSAOIAWSkiIOi0MAAIA/YA0AGiAIIBaRIgWVIA4Q8gVDAAAAP5QiCBDxASIJlCEEIA0gBZUgCZQhAyALIAWVIAmUIQkgCBD0AQs4AgwgACAEOAIIIAAgAzgCBCAAIAk4AgAgACAPIBCSQwAAAD+UOAIYIAAgESASkkMAAAA/lDgCFCAAIBMgFJJDAAAAP5Q4AhAgAEMAAAAAQwAAgD8gAiAGIAYgBkPbD0lAlJSUQwAAgECUQwAAQECVIgUgBiAGIAwgDJQgByAHlJIgCiAKlJKRQwAAAD+UIgOUlEPbD0lAlCIEIASSIgeSlCIElSAEQwAAAABbGzgCHCAAQwAAAABDAACAPyACIAYgBpQiBCAEkkMAAKBAlSAFlCIKIARDAAAAP5QgB5SSlCIMlSAMQwAAAABbGzgCJCAAQwAAAABDAACAPyACIAogByAEQwAAQECUIAMgA5RDAACAQJSSQwAAQEGVlJKUIAIgBSADIAOSIgIgApRDAACAPpQgBiAClEMAAEBAlEMAAAA+lJKUlJIiApUgAkMAAAAAWxsiAjgCKCAAIAI4AiALGgAgAEEANgIIIABBnKHDADYCBCAAIAE2AgALGgAgAEEANgIIIABB3KDDADYCBCAAIAE2AgALGgAgAEEANgIIIABB5K3DADYCBCAAIAE2AgALGgAgAEEANgIIIABBkLHDADYCBCAAIAE2AgALGgAgAEEANgIIIABB9LTDADYCBCAAIAE2AgALMQAgAEL////39/////4ANwIQIABC////9//////+ADcCCCAAQv////f/////fjcCAAsxACAAQv////f3/////gA3AhAgAEL////3//////4ANwIIIABC////9/////9+NwIAC58HAQR/An8gAEEIaygCBCIEQXhxIQUCQAJAAkACQAJAAkAgBUEEQQggBEEDcSIEGyABak8EQCAEQQBHIAUgAUEnaiIFS3ENAQJAAkAgAkEJTwRAIAIgAxC9BiICDQFBAAwKC0EAIQIgA0HM/3tLDQFBECADQQtqQXhxIANBC0kbIQEgAEEIayIFKAIEIgZBeHEhBCAEIAVqIQcCQAJAAkAgBkEDcUUEQCABQYACSQ0BIAZBeHEiBCABQQRySQ0BIAQgAWtBgYAITw0BDAMLIAEgBE0NAUHkx8QAKAIAIAdHBEBB4MfEACgCACAHRwRAIAcoAgQiBkECcQ0CIAZBeHEiBiAEaiIEIAFJDQIgByAGEKsFIAQgAWsiAEEQTw0MIAUgBCAFKAIEQQFxckECcjYCBCAEIAVqIgAgACgCBEEBcjYCBAwNC0HYx8QAKAIAIARqIgQgAUkNAQJAIAQgAWsiAkEPTQRAIAUgBCAFKAIEQQFxckECcjYCBCAEIAVqIgAgACgCBEEBcjYCBEEAIQJBACEADAELIAIgASAFaiIAaiEDIAUgASAFKAIEQQFxckECcjYCBCAAIAAoAgRBAXI2AgQgACACQQFyNgIEIAAgAmogAjYCACADIAMoAgRBfnE2AgQLQeDHxAAgADYCAEHYx8QAIAI2AgAMDAtB3MfEACgCACAEaiIEIAFLDQkLIAMQRSIBRQ0DIAMgBSgCBCICQXhxQXxBeCACQQNxG2oiAiACIANLGyICBEAgASAAIAL8CgAACyAAEI4DIAEMCwsgBCABayIAQQ9LDQgLDAgLIAMgASABIANLGyIDBEAgAiAAIAP8CgAACyAAQQhrKAIEIgRBeHEhAyADIAFBBEEIIARBA3EiBBtqSQ0DIARBAEcgAyAFS3ENBCAAEI4DCyACDAcLQYiD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AkEGdCABciEFDAILIAAgB0H/AXE2AiRBAQwECyADLQACQT9xIAFBBnRyIQEgB0FwSQRAIAEgAkEMdHIhBQwBCyACQRJ0QYCA8ABxIAMtAANBP3EgAUEGdHJyIgVBgIDEAEYNAQsgACAFNgIkIAVBgAFPDQFBAQwCCyAEEJEPAAtBAiAFQYAQSQ0AGkEDQQQgBUGAgARJGwshASAAIAY2AiggACABIAZqNgIsIABBBTYCNCAAQaCvxAA2AjAgAEIFNwI8IAAgAEEYaq1CgICAgOCNAYQ3A2ggACAAQRBqrUKAgICA4I0BhDcDYCAAIABBKGqtQoCAgICAjgGENwNYIAAgAEEkaq1CgICAgJCOAYQ3A1AgACAAQSBqrUKAgICAMIQ3A0gMAQsgAEEENgI0IABBwK7EADYCMCAAQgQ3AjwgACAAQRhqrUKAgICA4I0BhDcDYCAAIABBEGqtQoCAgIDgjQGENwNYIAAgAEEMaq1CgICAgDCENwNQIAAgAEEIaq1CgICAgDCENwNICyAAIABByABqNgI4IABBMGogBBC4DQALEwAgAEG4uMEANgIEIAAgATYCAAsTACAAQci4wQA2AgQgACABNgIACxMAIABB6LrBADYCBCAAIAE2AgALEAAgAEEBNgIAIAAgATYCBAsTACAAQbC8wQA2AgQgACABNgIACxAAIABBBDYCACAAIAE2AgQLGgACfyABQQlPBEAgASAAEL0GDAELIAAQRQsLEAAgACABNgIEIABBBTYCAAsTACAAQZzdwQA2AgQgACABNgIACxMAIABBrN3BADYCBCAAIAE2AgALEwAgAEG83cEANgIEIAAgATYCAAsTACAAQczdwQA2AgQgACABNgIACxMAIABB3N3BADYCBCAAIAE2AgALEwAgAEG038EANgIEIAAgATYCAAsQACAAIAE2AgQgAEEHNgIACxAAIAAgATYCBCAAQQY2AgALEwAgAEGg+cEANgIEIAAgATYCAAsWAEGExMQAIAA2AgBBgMTEAEEBNgIACxMAIABBjM/CADYCBCAAIAE2AgALEwAgAEGcz8IANgIEIAAgATYCAAsTACAAQazPwgA2AgQgACABNgIACxMAIABBvM/CADYCBCAAIAE2AgALEwAgAEHMz8IANgIEIAAgATYCAAsTACAAQdzPwgA2AgQgACABNgIACxMAIABB7M/CADYCBCAAIAE2AgALEwAgAEH8z8IANgIEIAAgATYCAAsTACAAQYzQwgA2AgQgACABNgIACxMAIABBnNDCADYCBCAAIAE2AgALEwAgAEGs0MIANgIEIAAgATYCAAsTACAAQbzQwgA2AgQgACABNgIACxMAIABBzNDCADYCBCAAIAE2AgALEwAgAEHc0MIANgIEIAAgATYCAAsTACAAQezQwgA2AgQgACABNgIACxMAIABB/NDCADYCBCAAIAE2AgALEwAgAEGM0cIANgIEIAAgATYCAAsTACAAQZzRwgA2AgQgACABNgIACxMAIABBrNHCADYCBCAAIAE2AgALEwAgAEG80cIANgIEIAAgATYCAAsTACAAQczRwgA2AgQgACABNgIACxMAIABB3NHCADYCBCAAIAE2AgALEwAgAEHs0cIANgIEIAAgATYCAAsTACAAQfzRwgA2AgQgACABNgIACxMAIABBjNLCADYCBCAAIAE2AgALEwAgAEGc0sIANgIEIAAgATYCAAsTACAAQazSwgA2AgQgACABNgIACxEAIAEgACgCACAAKAIEEIEDCxAAIAAgATYCBCAAQQM2AgALEAAgACABNgIEIABBBDYCAAsQACAAIAE2AgQgAEECNgIACxAAIAAgATYCBCAAQQE2AgALEAAgACABNgIEIABBADYCAAsQACAAQQA2AgAgACABNgIECxMAIABB+JzDADYCBCAAIAE2AgALEwAgAEGUncMANgIEIAAgATYCAAsQACAAQQI2AgAgACABNgIECxMAIABBwKDDADYCBCAAIAE2AgALEwAgAEGAocMANgIEIAAgATYCAAsQACAAQQM2AgAgACABNgIECxMAIABBwKHDADYCBCAAIAE2AgALDgAgACABQUBrIAIQwgMLEAAgAEEKNgIAIAAgATYCBAsTACAAQcikwwA2AgQgACABNgIACxAAIABBBzYCACAAIAE2AgQLEwAgAEHIp8MANgIEIAAgATYCAAsQACAAQQY2AgAgACABNgIECxMAIABByKrDADYCBCAAIAE2AgALDgAgACABQTRqIAIQwgMLEAAgAEEJNgIAIAAgATYCBAsQACAAQQs2AgAgACABNgIECxMAIABByK3DADYCBCAAIAE2AgALEAAgAEEMNgIAIAAgATYCBAsTACAAQfSwwwA2AgQgACABNgIA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eW5hbWljcy9yaWdpZF9ib2R5LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L3N0ZC9zcmMvc3luYy9tcG1jL2FycmF5LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9uYWxnZWJyYS0wLjM0LjEvc3JjL2Jhc2UvbWF0cml4LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9uYWxnZWJyYS0wLjM0LjEvc3JjL2Jhc2UvbWluX21heC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvYm9ycm93LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9uYWxnZWJyYS0wLjM0LjEvc3JjL2Jhc2UvbWF0cml4X3ZpZXcucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL25hbGdlYnJhLTAuMzQuMS9zcmMvYmFzZS9jb25zdHJ1Y3Rpb25fdmlldy5ycwBsaWJyYXJ5L2NvcmUvc3JjL251bS9mbHQyZGVjL3N0cmF0ZWd5L2dyaXN1LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9uYWxnZWJyYS0wLjM0LjEvc3JjL2xpbmFsZy9sdS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL3N5bmMvbXBtYy9jb250ZXh0LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcGFydGl0aW9uaW5nL2J2aC9idmhfdHJhdmVyc2VfYnZ0dC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL3N5bmMvbXBtYy9saXN0LnJzAGxpYnJhcnkvY29yZS9zcmMvc2xpY2Uvc29ydC9zaGFyZWQvc21hbGxzb3J0LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcGFydGl0aW9uaW5nL2J2aC9idmhfaW5zZXJ0LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvdXRpbHMvcG9pbnRfY2xvdWRfc3VwcG9ydF9wb2ludC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9keW5hbWljcy9qb2ludC9tdWx0aWJvZHlfam9pbnQvdW5pdF9tdWx0aWJvZHlfam9pbnQucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvZHluYW1pY3Mvam9pbnQvbXVsdGlib2R5X2pvaW50L211bHRpYm9keV9qb2ludC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9keW5hbWljcy9zb2x2ZXIvam9pbnRfY29uc3RyYWludC9qb2ludF92ZWxvY2l0eV9jb25zdHJhaW50LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yYXBpZXIzZC0wLjMwLjEvc3JjL2R5bmFtaWNzL3NvbHZlci9qb2ludF9jb25zdHJhaW50L2dlbmVyaWNfam9pbnRfY29uc3RyYWludC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9keW5hbWljcy9zb2x2ZXIvY29udGFjdF9jb25zdHJhaW50L2dlbmVyaWNfY29udGFjdF9jb25zdHJhaW50LnJzAGxpYnJhcnkvc3RkL3NyYy90aHJlYWQvY3VycmVudC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3F1ZXJ5L3BvaW50L3BvaW50X3NlZ21lbnQucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9zaGFwZS9zZWdtZW50LnJzAGxpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3BhcnRpdGlvbmluZy9idmgvYnZoX3JlZml0LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yYXBpZXIzZC0wLjMwLjEvc3JjL2R5bmFtaWNzL3JpZ2lkX2JvZHlfc2V0LnJzAGJ1aWxkcy9yYXBpZXIzZC8uLi8uLi9zcmMvZHluYW1pY3MvcmlnaWRfYm9keV9zZXQucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvZHluYW1pY3Mvam9pbnQvbXVsdGlib2R5X2pvaW50L211bHRpYm9keV9qb2ludF9zZXQucnMAYnVpbGRzL3JhcGllcjNkLy4uLy4uL3NyYy9keW5hbWljcy9tdWx0aWJvZHlfam9pbnRfc2V0LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yYXBpZXIzZC0wLjMwLjEvc3JjL2R5bmFtaWNzL2pvaW50L2ltcHVsc2Vfam9pbnQvaW1wdWxzZV9qb2ludF9zZXQucnMAYnVpbGRzL3JhcGllcjNkLy4uLy4uL3NyYy9keW5hbWljcy9pbXB1bHNlX2pvaW50X3NldC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9keW5hbWljcy9zb2x2ZXIvam9pbnRfY29uc3RyYWludC9qb2ludF9jb25zdHJhaW50c19zZXQucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvZHluYW1pY3Mvc29sdmVyL2NvbnRhY3RfY29uc3RyYWludC9jb250YWN0X2NvbnN0cmFpbnRzX3NldC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9nZW9tZXRyeS9jb2xsaWRlcl9zZXQucnMAYnVpbGRzL3JhcGllcjNkLy4uLy4uL3NyYy9nZW9tZXRyeS9jb2xsaWRlcl9zZXQucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy90cmFuc2Zvcm1hdGlvbi9jb252ZXhfaHVsbDMvdHJpYW5nbGVfZmFjZXQucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vZGl5X2Zsb2F0LnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yYXBpZXIzZC0wLjMwLjEvc3JjL2R5bmFtaWNzL3JpZ2lkX2JvZHlfY29tcG9uZW50cy5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9kYXRhL21vZGlmaWVkX29iamVjdHMucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL25hbGdlYnJhLTAuMzQuMS9zcmMvYmFzZS9vcHMucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3NlcmRlLTEuMC4yMTkvc3JjL2RlL2ltcGxzLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvdHJhbnNmb3JtYXRpb24vY29udmV4X2h1bGxfdXRpbHMucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9ib3VuZGluZ192b2x1bWUvYWFiYl91dGlscy5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3RyYW5zZm9ybWF0aW9uL3V0aWxzLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yYXBpZXIzZC0wLjMwLjEvc3JjL3V0aWxzLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY29udGFjdF9tYW5pZm9sZHMvY29udGFjdF9tYW5pZm9sZHNfdm94ZWxzX3ZveGVscy5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3NoYXBlL3ZveGVscy92b3hlbHMucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dlYi10aW1lLTEuMS4wL3NyYy90aW1lL2pzLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvbWFzc19wcm9wZXJ0aWVzL21hc3NfcHJvcGVydGllcy5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9waXBlbGluZS91c2VyX2NoYW5nZXMucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuMTAwL3NyYy9jb252ZXJ0L3NsaWNlcy5ycwAvVXNlcnMvc2ViY3JvemV0Ly5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL25hbGdlYnJhLTAuMzQuMS9zcmMvYmFzZS9ibGFzLnJzAGxpYnJhcnkvYWxsb2Mvc3JjL2ZmaS9jX3N0ci5ycwAvVXNlcnMvc2ViY3JvemV0Ly5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9jb3JlL3NyYy9pdGVyL3RyYWl0cy9pdGVyYXRvci5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbmFsZ2VicmEtMC4zNC4xL3NyYy9iYXNlL2RlZmF1bHRfYWxsb2NhdG9yLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yYXBpZXIzZC0wLjMwLjEvc3JjL2R5bmFtaWNzL3NvbHZlci92ZWxvY2l0eV9zb2x2ZXIucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvZHluYW1pY3MvY2NkL2NjZF9zb2x2ZXIucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy91dGlscy9jZW50ZXIucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvY29udHJvbC9jaGFyYWN0ZXJfY29udHJvbGxlci5ycwBidWlsZHMvcmFwaWVyM2QvLi4vLi4vc3JjL2NvbnRyb2wvY2hhcmFjdGVyX2NvbnRyb2xsZXIucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvY29udHJvbC9yYXlfY2FzdF92ZWhpY2xlX2NvbnRyb2xsZXIucnMAL1VzZXJzL3NlYmNyb3pldC8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvc3RkL3NyYy9zeW5jL21wbWMvd2FrZXIucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9xdWVyeS9kZWZhdWx0X3F1ZXJ5X2Rpc3BhdGNoZXIucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvZHluYW1pY3MvaXNsYW5kX21hbmFnZXIucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9zaGFwZS9jeWxpbmRlci5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9keW5hbWljcy9zb2x2ZXIvam9pbnRfY29uc3RyYWludC9nZW5lcmljX2pvaW50X2NvbnN0cmFpbnRfYnVpbGRlci5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9keW5hbWljcy9zb2x2ZXIvam9pbnRfY29uc3RyYWludC9qb2ludF9jb25zdHJhaW50X2J1aWxkZXIucnMAYnVpbGRzL3JhcGllcjNkLy4uLy4uL3NyYy9nZW9tZXRyeS9jb2xsaWRlci5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3V0aWxzL2NsZWFudXAucnMAL1VzZXJzL3NlYmNyb3pldC8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvY21wLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvaW50ZXJzZWN0aW9uX3Rlc3QvaW50ZXJzZWN0aW9uX3Rlc3Rfc3VwcG9ydF9tYXBfc3VwcG9ydF9tYXAucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9xdWVyeS9ub25saW5lYXJfc2hhcGVfY2FzdC9ub25saW5lYXJfc2hhcGVfY2FzdF9zdXBwb3J0X21hcF9zdXBwb3J0X21hcC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3F1ZXJ5L2NvbnRhY3QvY29udGFjdF9zdXBwb3J0X21hcF9zdXBwb3J0X21hcC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3F1ZXJ5L2Nsb3Nlc3RfcG9pbnRzL2Nsb3Nlc3RfcG9pbnRzX3N1cHBvcnRfbWFwX3N1cHBvcnRfbWFwLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvZGlzdGFuY2UvZGlzdGFuY2Vfc3VwcG9ydF9tYXBfc3VwcG9ydF9tYXAucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9xdWVyeS9jbG9zZXN0X3BvaW50cy9jbG9zZXN0X3BvaW50c19oYWxmc3BhY2Vfc3VwcG9ydF9tYXAucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy91dGlscy92ZWNfbWFwLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L3N0ZC9zcmMvc3luYy9tcG1jL3plcm8ucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9zaGFwZS9jb252ZXhfcG9seWhlZHJvbi5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3F1ZXJ5L3BvaW50L3BvaW50X3RldHJhaGVkcm9uLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvc2hhcGUvdm94ZWxzL3ZveGVsc19lZGl0aW9uLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9uYWxnZWJyYS0wLjM0LjEvc3JjL2Jhc2UvZWRpdGlvbi5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbmFsZ2VicmEtMC4zNC4xL3NyYy9iYXNlL2NvbnN0cnVjdGlvbi5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9keW5hbWljcy9zb2x2ZXIvY29udGFjdF9jb25zdHJhaW50L2NvbnRhY3Rfd2l0aF90d2lzdF9mcmljdGlvbi5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9keW5hbWljcy9zb2x2ZXIvY29udGFjdF9jb25zdHJhaW50L2NvbnRhY3Rfd2l0aF9jb3Vsb21iX2ZyaWN0aW9uLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yYXBpZXIzZC0wLjMwLjEvc3JjL2R5bmFtaWNzL3NvbHZlci9jYXRlZ29yaXphdGlvbi5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3RyYW5zZm9ybWF0aW9uL2NvbnZleF9odWxsMy92YWxpZGF0aW9uLnJzAGxpYnJhcnkvY29yZS9zcmMvbnVtL2ZsdDJkZWMvc3RyYXRlZ3kvZHJhZ29uLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9uYWxnZWJyYS0wLjM0LjEvc3JjL2xpbmFsZy9zeW1tZXRyaWNfZWlnZW4ucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vYmlnbnVtLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY29udGFjdF9tYW5pZm9sZHMvY29udGFjdF9tYW5pZm9sZHNfcGZtX3BmbS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3F1ZXJ5L2NvbnRhY3RfbWFuaWZvbGRzL2NvbnRhY3RfbWFuaWZvbGRzX2hhbGZzcGFjZV9wZm0ucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy90cmFuc2Zvcm1hdGlvbi9jb252ZXhfaHVsbDMvY29udmV4X2h1bGwucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9xdWVyeS9jb250YWN0X21hbmlmb2xkcy9jb250YWN0X21hbmlmb2xkc19jb252ZXhfYmFsbC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3F1ZXJ5L2NvbnRhY3RfbWFuaWZvbGRzL2NvbnRhY3RfbWFuaWZvbGRzX3ZveGVsc19iYWxsLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY2xvc2VzdF9wb2ludHMvY2xvc2VzdF9wb2ludHNfYmFsbF9iYWxsLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY29udGFjdF9tYW5pZm9sZHMvY29udGFjdF9tYW5pZm9sZHNfYmFsbF9iYWxsLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9iaW5jb2RlLTEuMy4zL3NyYy9pbnRlcm5hbC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3NoYXBlL3ZveGVscy92b3hlbHNfY2h1bmsucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvZHluYW1pY3Mvam9pbnQvbXVsdGlib2R5X2pvaW50L211bHRpYm9keV9saW5rLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvZ2prL2dqay5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9nZW9tZXRyeS9icm9hZF9waGFzZV9idmgucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy90cmFuc2Zvcm1hdGlvbi90b190cmltZXNoL2N5bGluZGVyX3RvX3RyaW1lc2gucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy90cmFuc2Zvcm1hdGlvbi90b190cmltZXNoL2NvbnZleF9wb2x5aGVkcm9uX3RvX3RyaW1lc2gucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy90cmFuc2Zvcm1hdGlvbi90b190cmltZXNoL2JhbGxfdG9fdHJpbWVzaC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3RyYW5zZm9ybWF0aW9uL3RvX3RyaW1lc2gvY29uZV90b190cmltZXNoLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvc2hhcGUvdHJpbWVzaC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3RyYW5zZm9ybWF0aW9uL2NvbnZleF9odWxsMy9pbml0aWFsX21lc2gucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvZ2VvbWV0cnkvaW50ZXJhY3Rpb25fZ3JhcGgucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvZGF0YS9ncmFwaC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvZW5hLTAuMTQuMy9zcmMvdW5kb19sb2cucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL25hbGdlYnJhLTAuMzQuMS9zcmMvYmFzZS9pbmRleGluZy5ycwBsaWJyYXJ5L2FsbG9jL3NyYy9zdHJpbmcucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9wYXJ0aXRpb25pbmcvYnZoL2J2aF9vcHRpbWl6ZS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3BhcnRpdGlvbmluZy9idmgvYnZoX3RyYXZlcnNlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9uYWxnZWJyYS0wLjM0LjEvc3JjL2Jhc2UvY29tcG9uZW50d2lzZS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9nZW9tZXRyeS9uYXJyb3dfcGhhc2UucnMAYnVpbGRzL3JhcGllcjNkLy4uLy4uL3NyYy9nZW9tZXRyeS9uYXJyb3dfcGhhc2UucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9ib3VuZGluZ192b2x1bWUvYm91bmRpbmdfc3BoZXJlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY29udGFjdF9tYW5pZm9sZHMvY29udGFjdF9tYW5pZm9sZHNfdm94ZWxzX3NoYXBlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY29udGFjdF9tYW5pZm9sZHMvY29udGFjdF9tYW5pZm9sZHNfdHJpbWVzaF9zaGFwZS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3F1ZXJ5L3BvaW50L3BvaW50X2NvbXBvc2l0ZV9zaGFwZS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3F1ZXJ5L2NvbnRhY3RfbWFuaWZvbGRzL2NvbnRhY3RfbWFuaWZvbGRzX3ZveGVsc19jb21wb3NpdGVfc2hhcGUucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9xdWVyeS9jb250YWN0X21hbmlmb2xkcy9jb250YWN0X21hbmlmb2xkc19jb21wb3NpdGVfc2hhcGVfY29tcG9zaXRlX3NoYXBlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY29udGFjdF9tYW5pZm9sZHMvY29udGFjdF9tYW5pZm9sZHNfaGVpZ2h0ZmllbGRfY29tcG9zaXRlX3NoYXBlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY29udGFjdF9tYW5pZm9sZHMvY29udGFjdF9tYW5pZm9sZHNfY29tcG9zaXRlX3NoYXBlX3NoYXBlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY29udGFjdF9tYW5pZm9sZHMvY29udGFjdF9tYW5pZm9sZHNfaGVpZ2h0ZmllbGRfc2hhcGUucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9zaGFwZS9zaGFyZWRfc2hhcGUucnMAYnVpbGRzL3JhcGllcjNkLy4uLy4uL3NyYy9nZW9tZXRyeS9zaGFwZS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3NoYXBlL3NoYXBlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvc2hhcGUvcG9seWxpbmUucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy90cmFuc2Zvcm1hdGlvbi90b19vdXRsaW5lL3ZveGVsc190b19vdXRsaW5lLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvdHJhbnNmb3JtYXRpb24vdG9fb3V0bGluZS9yb3VuZF9jeWxpbmRlcl90b19vdXRsaW5lLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvdHJhbnNmb3JtYXRpb24vdG9fb3V0bGluZS9yb3VuZF9jb252ZXhfcG9seWhlZHJvbl90b19vdXRsaW5lLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvdHJhbnNmb3JtYXRpb24vdG9fb3V0bGluZS9iYWxsX3RvX291dGxpbmUucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy90cmFuc2Zvcm1hdGlvbi90b19vdXRsaW5lL3JvdW5kX2NvbmVfdG9fb3V0bGluZS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3RyYW5zZm9ybWF0aW9uL3RvX291dGxpbmUvY2Fwc3VsZV90b19vdXRsaW5lLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvdHJhbnNmb3JtYXRpb24vdG9fb3V0bGluZS9yb3VuZF9jdWJvaWRfdG9fb3V0bGluZS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcmFwaWVyM2QtMC4zMC4xL3NyYy9waXBlbGluZS9waHlzaWNzX3BpcGVsaW5lLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yYXBpZXIzZC0wLjMwLjEvc3JjL3BpcGVsaW5lL2RlYnVnX3JlbmRlcl9waXBlbGluZS9kZWJ1Z19yZW5kZXJfcGlwZWxpbmUucnMAbGlicmFyeS9zdGQvc3JjL3N5cy9wYWwvd2FzbS8uLi91bnN1cHBvcnRlZC90aW1lLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL3RpbWUucnMAL3J1c3RjLzExNTllNzhjNDc0N2IwMmVmOTk2ZTU1MDgyYjcwNGMwOWI5NzA1ODgvbGlicmFyeS9jb3JlL3NyYy90aW1lLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY29udGFjdF9tYW5pZm9sZHMvY29udGFjdF9tYW5pZm9sZHNfY2Fwc3VsZV9jYXBzdWxlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcXVlcnkvY2xvc2VzdF9wb2ludHMvY2xvc2VzdF9wb2ludHNfY3Vib2lkX3RyaWFuZ2xlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvc2hhcGUvdHJpYW5nbGUucnMAbGlicmFyeS9jb3JlL3NyYy91bmljb2RlL3ByaW50YWJsZS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbmFsZ2VicmEtMC4zNC4xL3NyYy9iYXNlL3ZlY19zdG9yYWdlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvcGFydGl0aW9uaW5nL2J2aC9idmhfdHJlZS5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbmFsZ2VicmEtMC4zNC4xL3NyYy9saW5hbGcvcGVybXV0YXRpb25fc2VxdWVuY2UucnMAL1VzZXJzL3NlYmNyb3pldC8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvc2hhcGUvdm94ZWxzL3ZveGVsc19uZWlnaGJvcmhvb2QucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2VuYS0wLjE0LjMvc3JjL3VuaWZ5L21vZC5ycwAvcnVzdC9kZXBzL2hhc2hicm93bi0wLjE1LjQvc3JjL3Jhdy9tb2QucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2hhc2hicm93bi0wLjE2LjAvc3JjL3Jhdy9tb2QucnMAbGlicmFyeS9jb3JlL3NyYy9mbXQvbW9kLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9jb2xsZWN0aW9ucy9iaW5hcnlfaGVhcC9tb2QucnMAbGlicmFyeS9zdGQvc3JjL3RocmVhZC9tb2QucnMAL1VzZXJzL3NlYmNyb3pldC8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvc3RkL3NyYy9zeW5jL21wbWMvbW9kLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdGMvMTE1OWU3OGM0NzQ3YjAyZWY5OTZlNTUwODJiNzA0YzA5Yjk3MDU4OC9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvdmVjL21vZC5ycwBsaWJyYXJ5L2NvcmUvc3JjL251bS9mbHQyZGVjL21vZC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3NoYXBlL2NvbXBvdW5kLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yYXBpZXIzZC0wLjMwLjEvc3JjL3BpcGVsaW5lL2RlYnVnX3JlbmRlcl9waXBlbGluZS9kZWJ1Z19yZW5kZXJfYmFja2VuZC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3BhcnRpdGlvbmluZy9idmgvYnZoX2Jpbm5lZF9idWlsZC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3BhcnRpdGlvbmluZy9idmgvYnZoX3Bsb2NfYnVpbGQucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9xdWVyeS9jbG9zZXN0X3BvaW50cy9jbG9zZXN0X3BvaW50c19jdWJvaWRfY3Vib2lkLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvc2hhcGUvY3Vib2lkLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvc2hhcGUvZmVhdHVyZV9pZC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvdmVjL3NwZWNfZnJvbV9pdGVyX25lc3RlZC5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL21hc3NfcHJvcGVydGllcy9tYXNzX3Byb3BlcnRpZXNfdHJpbWVzaDNkLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvc2hhcGUvcG9seWdvbmFsX2ZlYXR1cmUzZC5ycwAvcnVzdC9kZXBzL2RsbWFsbG9jLTAuMi4xMC9zcmMvZGxtYWxsb2MucnMAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJzAGxpYnJhcnkvYWxsb2Mvc3JjL3N5bmMucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2VuYS0wLjE0LjMvc3JjL3NuYXBzaG90X3ZlYy5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9vbmNlX2NlbGwtMS4yMS4zL3NyYy9saWIucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3NtYWxsdmVjLTEuMTUuMS9zcmMvbGliLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvYm91bmRpbmdfdm9sdW1lL2FhYmIucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3JhcGllcjNkLTAuMzAuMS9zcmMvZGF0YS9jb2FyZW5hLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9yYXBpZXIzZC0wLjMwLjEvc3JjL2RhdGEvYXJlbmEucnMAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3BhcnJ5M2QtMC4yNS4zL3NyYy9xdWVyeS9namsvdm9yb25vaV9zaW1wbGV4My5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3NoYXBlL2hlaWdodGZpZWxkMy5ycwAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcGFycnkzZC0wLjI1LjMvc3JjL3F1ZXJ5L2VwYS9lcGEzLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9wYXJyeTNkLTAuMjUuMy9zcmMvdHJhbnNmb3JtYXRpb24vY29udmV4X2h1bGwyLnJzAC9Vc2Vycy9zZWJjcm96ZXQvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL251bS9mMzIucnMAAQEBAgEBAQIBAQECAgICAwEBAQIBAQECAQEBAgICAgMBAQECAQEBAgEBAQICAgIDAgICAwICAgMCAgIDAwMDBAAAAADDNBAAeQAAADUAAAAsAAAAQ2Fubm90IGRlc2VyaWFsaXplIGN1c3RvbSBzaGFwZS4AAAAAAAAAAAEAAAAEAAAAQWxsb2NhdGlvbiBmcm9tIGl0ZXJhdG9yIGVycm9yOiB0aGUgaXRlcmF0b3IgZGlkIG5vdCB5aWVsZCB0aGUgY29ycmVjdCBudW1iZXIgb2YgZWxlbWVudHMuAAAQVRAAWgAAAIsYEABzAAAAhAAAAAkAAAAAAAAACAAAAAQAAAAFAAAAYSB0dXBsZSBvZiBzaXplIDIAQbCrwQALYQEAAAAGAAAAERIQAGMAAACVBAAAIgAAABESEABjAAAAmAQAABwAAABzdHJ1Y3QgVHJpTWVzaCB3aXRoIDcgZWxlbWVudHMAANhVEAAeAAAAYSB0dXBsZSBvZiBzaXplIDMAQZyswQALBQEAAAAHAEGsrMEACwUBAAAABwBBvKzBAAsFAQAAAAcAQcyswQALiQ4BAAAABwAAAHN0cnVjdCBDb21wb3VuZCB3aXRoIDQgZWxlbWVudHMAVFYQAB8AAABzdHJ1Y3QgUG9seWxpbmUgd2l0aCAzIGVsZW1lbnRzAHxWEAAfAAAAdmFyaWFudCBpbmRleCAwIDw9IGkgPCAypFYQABgAAABzdHJ1Y3QgQ29sbGlkZXIgd2l0aCAxMSBlbGVtZW50c8RWEAAgAAAAc3RydWN0IFZveGVscyB3aXRoIDYgZWxlbWVudHMAAADsVhAAHQAAAHN0cnVjdCBIZWlnaHRGaWVsZCB3aXRoIDYgZWxlbWVudHMAABRXEAAiAAAAdmFyaWFudCBpbmRleCAwIDw9IGkgPCAyMAAAAEBXEAAZAAAAc3RydWN0IFRyaU1lc2hDb25uZWN0ZWRDb21wb25lbnRzIHdpdGggMyBlbGVtZW50cwAAAGRXEAAxAAAAc3RydWN0IEdyYXBoIHdpdGggMiBlbGVtZW50c6BXEAAcAAAAc3RydWN0IExVIHdpdGggMiBlbGVtZW50cwAAAMRXEAAZAAAAc3RydWN0IElzbGFuZE1hbmFnZXIgd2l0aCA0IGVsZW1lbnRz6FcQACQAAABzdHJ1Y3QgQ29udmV4UG9seWhlZHJvbiB3aXRoIDggZWxlbWVudHMAFFgQACcAAABzdHJ1Y3QgQnZoTm9kZVdpZGUgd2l0aCAyIGVsZW1lbnRzAABEWBAAIgAAAHN0cnVjdCBCcm9hZFBoYXNlQnZoIHdpdGggNCBlbGVtZW50c3BYEAAkAAAAc3RydWN0IENvbnRhY3RNYW5pZm9sZERhdGEgd2l0aCA3IGVsZW1lbnRzAACcWBAAKgAAAHN0cnVjdCBKb2ludE1vdG9yIHdpdGggNyBlbGVtZW50cwAAANBYEAAhAAAAc3RydWN0IEdlbmVyaWNKb2ludCB3aXRoIDExIGVsZW1lbnRz/FgQACQAAAB2YXJpYW50IGluZGV4IDAgPD0gaSA8IDMoWRAAGAAAAHZhcmlhbnQgaW5kZXggMCA8PSBpIDwgNEhZEAAYAAAAc3RydWN0IEludGVncmF0aW9uUGFyYW1ldGVycyB3aXRoIDE3IGVsZW1lbnRzAAAAaFkQAC0AAABzdHJ1Y3QgTXVsdGlib2R5IHdpdGggMTggZWxlbWVudHMAAACgWRAAIQAAAHN0cnVjdCBJbnRlcmFjdGlvbkdyYXBoIHdpdGggMSBlbGVtZW50AADMWRAAJgAAAHN0cnVjdCBJbmRleFNlcXVlbmNlIHdpdGggMiBlbGVtZW50c/xZEAAkAAAAc3RydWN0IEltcHVsc2VKb2ludCB3aXRoIDUgZWxlbWVudHMAKFoQACMAAAB0dXBsZSBzdHJ1Y3QgTW9kaWZpZWRPYmplY3RzIHdpdGggMiBlbGVtZW50c1RaEAAsAAAAc3RydWN0IE11bHRpYm9keUpvaW50IHdpdGggNCBlbGVtZW50cwAAAIhaEAAlAAAAc3RydWN0IEltcHVsc2VKb2ludFNldCB3aXRoIDQgZWxlbWVudHMAALhaEAAmAAAAc3RydWN0IE11bHRpYm9keUpvaW50U2V0IHdpdGggNCBlbGVtZW50c+haEAAoAAAAc3RydWN0IE11bHRpYm9keVdvcmtzcGFjZSB3aXRoIDIgZWxlbWVudHMAAAAYWxAAKQAAAHZhcmlhbnQgaW5kZXggMCA8PSBpIDwgOUxbEAAYAAAAc3RydWN0IFRyaU1lc2hTaGFwZUNvbnRhY3RNYW5pZm9sZHNXb3Jrc3BhY2Ugd2l0aCAzIGVsZW1lbnRzbFsQADwAAAAxp32Kc1AoS7ksgtHwpWLmDEpcSVrnmEnkCyMkZes9q44jEAB2AAAAhgAAADoAAACOIxAAdgAAAH4AAABBAAAAjxsQAHcAAABcAAAAKwAAAGNhbm5vdCByZWN1cnNpdmVseSBhY3F1aXJlIG11dGV4AFwQACAAAAAFFxAAgQAAABMAAAAJAAAAAAAAACQAAAAEAAAACAAAAAAAAAAMAAAABAAAAAkAAAAoKQAADRgQAH0AAADrBwAACQAAAPNIEAB1AAAALgIAABEAAABpbnZhbGlkIHZhbHVlOiAsIGV4cGVjdGVkIAAAfFwQAA8AAACLXBAACwAAAGludmFsaWQgbGVuZ3RoIACoXBAADwAAAItcEAALAAAAAAAAAAQAAAAEAAAACgAAAAAAAAAEAAAABAAAAAsAAABMYXlvdXRzaXplYWxpZ25DYXBhY2l0eU92ZXJmbG93AAAAAAAEAAAABAAAAAwAAABBbGxvY0VycmxheW91dAAA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cGxpY2l0IHBhbmljAAAcFBEADgAAAGluZGV4IG91dCBvZiBib3VuZHM6IHRoZSBsZW4gaXMgIGJ1dCB0aGUgaW5kZXggaXMgAAA0FBEAIAAAAFQUEQASAAAAAAAAAAQAAAAEAAAAcwQAAAAAAAAEAAAABAAAAHQEAAA9PSE9bWF0Y2hlc2Fzc2VydGlvbiBgbGVmdCAgcmlnaHRgIGZhaWxlZAogIGxlZnQ6IAogcmlnaHQ6IACjFBEAEAAAALMUEQAXAAAAyhQRAAkAAAAgcmlnaHRgIGZhaWxlZDogCiAgbGVmdDogAAAAoxQRABAAAADsFBEAEAAAAPwUEQAJAAAAyhQRAAkAAAA6IAAAAQAAAAAAAAAoFREAAgAAAAAAAAAMAAAABAAAAHUEAAB2BAAAdwQAACAgICAgeyAsICB7CiwKfSB9KCgKLApdMHgwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAC9RxAAGwAAADUHAAAfAAAAZmFsc2V0cnVlAAAAvUcQABsAAACvCgAAJgAAAL1HEAAbAAAAuAoAABoAAAB1c2VyLXByb3ZpZGVkIGNvbXBhcmlzb24gZnVuY3Rpb24gZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBhIHRvdGFsIG9yZGVytBYRAEwAAABsBhAALwAAAFwDAAAFAAAAWy4uLl1iZWdpbiA8PSBlbmQgKCA8PSApIHdoZW4gc2xpY2luZyBgYB0XEQAOAAAAKxcRAAQAAAAvFxEAEAAAAD8XEQABAAAAYnl0ZSBpbmRleCAgaXMgbm90IGEgY2hhciBib3VuZGFyeTsgaXQgaXMgaW5zaWRlICAoYnl0ZXMgKSBvZiBgAGAX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`).buffer)}))}function Hn(){return function(){let e,t;try{let a=n.__wbindgen_add_to_stack_pointer(-16);n.version(a);var r=p().getInt32(a+0,!0),i=p().getInt32(a+4,!0);return e=r,t=i,u(r,i)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export_1(e,t,1)}}()}function Un(e){var t=e;n.reserve_memory(t)}Q[45]=62,Q[95]=63;var Wn=Object.freeze({__proto__:null,version:Hn,reserveMemory:Un,Vector3:ot,VectorOps:B,Quaternion:st,RotationOps:V,SdpMatrix3:ct,SdpMatrix3Ops:lt,get RigidBodyType(){return H},RigidBody:bt,RigidBodyDesc:xt,RigidBodySet:Ct,IntegrationParameters:wt,get JointType(){return U},get MotorModel(){return ut},get JointAxesMask(){return dt},ImpulseJoint:J,UnitImpulseJoint:Tt,FixedImpulseJoint:Et,RopeImpulseJoint:Dt,SpringImpulseJoint:Ot,PrismaticImpulseJoint:kt,RevoluteImpulseJoint:At,GenericImpulseJoint:jt,SphericalImpulseJoint:Mt,JointData:Nt,ImpulseJointSet:Pt,MultibodyJoint:Y,UnitMultibodyJoint:Ft,FixedMultibodyJoint:It,PrismaticMultibodyJoint:Lt,RevoluteMultibodyJoint:Rt,SphericalMultibodyJoint:zt,MultibodyJointSet:Bt,get CoefficientCombineRule(){return W},CCDSolver:Vt,IslandManager:Ht,BroadPhase:Zt,NarrowPhase:Qt,TempContactManifold:$t,Shape:X,get ShapeType(){return K},get HeightFieldFlags(){return ft},get TriMeshFlags(){return pt},Ball:tn,HalfSpace:nn,Cuboid:rn,RoundCuboid:an,Capsule:on,Segment:sn,Triangle:cn,RoundTriangle:ln,Polyline:un,Voxels:dn,TriMesh:fn,ConvexPolyhedron:pn,RoundConvexPolyhedron:mn,Heightfield:hn,Cylinder:gn,RoundCylinder:_n,Cone:vn,RoundCone:yn,get ActiveCollisionTypes(){return yt},Collider:jn,get MassPropsMode(){return q},ColliderDesc:Mn,ColliderSet:Nn,get FeatureType(){return G},Ray:Ut,RayIntersection:Wt,RayColliderIntersection:Gt,RayColliderHit:Kt,PointProjection:qt,PointColliderProjection:Jt,ShapeCastHit:Yt,ColliderShapeCastHit:Xt,ShapeContact:en,World:On,PhysicsPipeline:bn,SerializationPipeline:xn,get ActiveEvents(){return ht},TempContactForceEvent:kn,EventQueue:An,get ActiveHooks(){return gt},get SolverFlags(){return _t},DebugRenderBuffers:Sn,DebugRenderPipeline:Cn,get QueryFilterFlags(){return vt},init:Vn,CharacterCollision:wn,KinematicCharacterController:Tn,get PidAxesMask(){return mt},PidController:En,DynamicRayCastVehicleController:Dn});export{t}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/rapier3d.DBFmcAzL.js.gz b/Needle/MenuScene/dist/assets/rapier3d.DBFmcAzL.js.gz deleted file mode 100644 index 4af13c9..0000000 Binary files a/Needle/MenuScene/dist/assets/rapier3d.DBFmcAzL.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/register_types.C6IEiUJa.js b/Needle/MenuScene/dist/assets/register_types.C6IEiUJa.js deleted file mode 100644 index 4a5d5d3..0000000 --- a/Needle/MenuScene/dist/assets/register_types.C6IEiUJa.js +++ /dev/null @@ -1,41 +0,0 @@ -import{Ar as e,Kn as t,_n as n,fn as r,kr as i}from"./three@0.169.19.js";import{$i as a,Xi as o,ct as s,eo as c,ot as l}from"./needle-engine-ui.D3ZoIJG5.js";import"./needle-engine@5.0.3.js";import{m as u}from"./needle-engine-webxr.DiiWSXeh.js";import{m as d,t as f}from"./needle-engine.extras.dI9yZHT7.js";var p=class extends l{raycaster=new t;touchPos=new i;plane=new n(new e(0,1,0),0);initialPinchDistance=0;initialScale=new e;isScaling=!1;onEnable(){let e=this.context.renderer.domElement;e.addEventListener(`touchstart`,this.onTouchStart),e.addEventListener(`touchmove`,this.onTouchMove),e.addEventListener(`touchend`,this.onTouchEnd)}onDisable(){let e=this.context.renderer.domElement;e.removeEventListener(`touchstart`,this.onTouchStart),e.removeEventListener(`touchmove`,this.onTouchMove),e.removeEventListener(`touchend`,this.onTouchEnd)}onTouchStart=e=>{if(e.touches.length===2){this.isScaling=!0;let t=e.touches[0],n=e.touches[1];this.initialPinchDistance=Math.hypot(n.clientX-t.clientX,n.clientY-t.clientY),this.initialScale.copy(this.gameObject.scale)}};onTouchMove=t=>{if(t.preventDefault(),this.isScaling&&t.touches.length===2){let e=t.touches[0],n=t.touches[1],r=Math.hypot(n.clientX-e.clientX,n.clientY-e.clientY)/this.initialPinchDistance,i=this.initialScale.clone().multiplyScalar(r);this.gameObject.scale.copy(i)}else if(t.touches.length===1&&!this.isScaling){let n=t.touches[0],r=this.context.renderer.domElement.getBoundingClientRect();this.touchPos.set((n.clientX-r.left)/r.width*2-1,-((n.clientY-r.top)/r.height)*2+1),this.raycaster.setFromCamera(this.touchPos,this.context.mainCamera);let i=new e;this.raycaster.ray.intersectPlane(this.plane,i)&&this.gameObject.position.copy(i)}};onTouchEnd=e=>{e.touches.length<2&&(this.isScaling=!1)}};function m(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var h=new WeakMap,g=class extends l{isMobile=!1;isDesktop=!1;isXR=!1;dishName=``;dishes=[];webXROrigin;dishBobAmplitude=.05;dishBobSpeed=2.5;usdzExporter;arSessionBobPaused=!1;selectedDishIndex=0;onEnable(){if(this.dishName=new URLSearchParams(window.location.search).get(`dishName`)??``,this.webXROrigin&&(this.usdzExporter=this.webXROrigin.getComponent(u)??void 0),this.dishName){let e=!1;this.dishes.forEach((t,n)=>{t&&t.name===this.dishName&&(this.selectedDishIndex=n,e=!0)}),this.dishes.forEach(t=>{if(!t)return;let n=e&&t.name===this.dishName;n||this.restoreDishBaseY(t),s.setActive(t,n)}),e||this.ensureOnlySelectedDishVisible()}else this.ensureOnlySelectedDishVisible();this.updateUSDZExporterTarget(),this.checkForDeviceType().then(()=>{this.isMobile?console.log(`[MenuController] isMobile`):this.isDesktop?this.setupDesktopControls():this.isXR}),this.setupMobileControls(),this.disableDoubleTapZoom()}onEnterXR(e){e.xr.mode===`immersive-ar`&&(this.arSessionBobPaused=!0,this.snapActiveDishToBaseY())}onLeaveXR(e){this.arSessionBobPaused=!1}update(){if(this.arSessionBobPaused||this.dishBobAmplitude<=0||this.getValidDishIndices().length===0)return;let e=this.dishes[this.selectedDishIndex];if(!e)return;let t=h.get(e);t===void 0&&(t=e.position.y,h.set(e,t));let n=this.context.time.time;e.position.y=t+Math.sin(n*this.dishBobSpeed)*this.dishBobAmplitude}async checkForDeviceType(){await this.isXRDevice()?this.isXR=!0:(console.log(`DeviceUtilities.isMobileDevice()`,c.isMobileDevice()),this.isMobile=c.isMobileDevice(),this.isMobile||(this.isDesktop=c.isDesktop()))}async isXRDevice(){if(navigator.xr)try{return await navigator.xr.isSessionSupported(`immersive-vr`)}catch{return console.log(`XR check error!`),!1}return!1}setupMobileControls(){typeof document<`u`&&document.querySelector(`#asset-picker`)||this.createMenuMobileControls()}setupDesktopControls(){}createMenuMobileControls(){let e=document.createElement(`div`);e.id=`menuControlsZone`,e.style.cssText=` - position: absolute; - display: flex; - justify-content: space-between; - bottom: 10%; - left: 10%; - right: 10%; - height: 150px; - `,document.body.appendChild(e);let t=document.createElement(`button`);t.id=`previousButton`,t.style.cssText=` - height: 100px; - width: 100px; - background-color: #ffffff; - color: #111111; - border: none; - border-radius: 50px; - box-shadow: 0 8px 24px rgba(0,0,0,0.25); - display: flex; - align-items: center; - justify-content: center; - touch-action: manipulation; - `,t.setAttribute(`aria-label`,`Previous`),t.innerHTML=` - - - - `,t.onclick=this.selectPreviousDish.bind(this);let n=document.createElement(`button`);n.id=`nextButton`,n.style.cssText=` - height: 100px; - width: 100px; - background-color: #ffffff; - color: #111111; - border: none; - border-radius: 50px; - box-shadow: 0 8px 24px rgba(0,0,0,0.25); - display: flex; - align-items: center; - justify-content: center; - touch-action: manipulation; - `,n.setAttribute(`aria-label`,`Next`),n.innerHTML=` - - - - `,n.onclick=this.selectNextDish.bind(this),this.dishName&&(t.disabled=!0,t.style.display=`none`,n.disabled=!0,n.style.display=`none`),e.appendChild(t),e.appendChild(n)}disableDoubleTapZoom(){let e=0;document.addEventListener(`touchend`,t=>{let n=Date.now();n-e<=300&&t.preventDefault(),e=n},{passive:!1})}getValidDishIndices(){return this.dishes.map((e,t)=>e==null?-1:t).filter(e=>e>=0)}ensureOnlySelectedDishVisible(){let e=this.getValidDishIndices();if(e.length===0)return;let t=this.selectedDishIndex;e.indexOf(t)<0&&(t=e[0],this.selectedDishIndex=t),e.forEach(e=>{let t=e===this.selectedDishIndex,n=this.dishes[e];t||this.restoreDishBaseY(n),s.setActive(this.dishes[e],t)})}restoreDishBaseY(e){if(!e)return;let t=h.get(e);t!==void 0&&(e.position.y=t)}snapActiveDishToBaseY(){this.restoreDishBaseY(this.dishes[this.selectedDishIndex])}getDishSlotCount(){return this.getValidDishIndices().length}getPickerLabel(){let e=this.getValidDishIndices();if(e.length===0)return`Menu`;let t=Math.max(0,e.indexOf(this.selectedDishIndex)),n=this.dishes[this.selectedDishIndex]?.name?.trim();return n?`${n} (${t+1}/${e.length})`:`Dish ${t+1} / ${e.length}`}selectPreviousDish(){let e=this.getValidDishIndices();if(e.length===0)return;let t=e.indexOf(this.selectedDishIndex);t<0&&(t=0),this.restoreDishBaseY(this.dishes[e[t]]),s.setActive(this.dishes[e[t]],!1),t=(t-1+e.length)%e.length,this.selectedDishIndex=e[t],s.setActive(this.dishes[this.selectedDishIndex],!0),this.updateUSDZExporterTarget()}selectNextDish(){let e=this.getValidDishIndices();if(e.length===0)return;let t=e.indexOf(this.selectedDishIndex);t<0&&(t=0),this.restoreDishBaseY(this.dishes[e[t]]),s.setActive(this.dishes[e[t]],!1),t=(t+1)%e.length,this.selectedDishIndex=e[t],s.setActive(this.dishes[this.selectedDishIndex],!0),this.updateUSDZExporterTarget()}updateUSDZExporterTarget(){let e=this.dishes[this.selectedDishIndex];this.usdzExporter&&e&&(this.usdzExporter.objectToExport=e)}getUrlParameter(e){return new URLSearchParams(window.location.search).get(e)}};m([o(r)],g.prototype,`dishes`,void 0),m([o(r)],g.prototype,`webXROrigin`,void 0),m([o()],g.prototype,`dishBobAmplitude`,void 0),m([o()],g.prototype,`dishBobSpeed`,void 0);var _=class extends l{volume;start(){if(!this.volume){console.warn(`No PostProcessVolume assigned`);return}this.volume.addEffect(new d({intensity:3,luminanceThreshold:.2}))}};m([o(f)],_.prototype,`volume`,void 0);function v(){a.add(`ARObjectController`,p),a.add(`MenuController`,g),a.add(`PostProcessingVolumeController`,_)}v();export{v as registerTypes}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/register_types.C6IEiUJa.js.gz b/Needle/MenuScene/dist/assets/register_types.C6IEiUJa.js.gz deleted file mode 100644 index fbf1cd2..0000000 Binary files a/Needle/MenuScene/dist/assets/register_types.C6IEiUJa.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/rolldown-runtime.CYVBeYYp.js b/Needle/MenuScene/dist/assets/rolldown-runtime.CYVBeYYp.js deleted file mode 100644 index c7f3090..0000000 --- a/Needle/MenuScene/dist/assets/rolldown-runtime.CYVBeYYp.js +++ /dev/null @@ -1 +0,0 @@ -var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));export{s as n,l as r,o as t}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/rolldown-runtime.CYVBeYYp.js.gz b/Needle/MenuScene/dist/assets/rolldown-runtime.CYVBeYYp.js.gz deleted file mode 100644 index 6f64982..0000000 Binary files a/Needle/MenuScene/dist/assets/rolldown-runtime.CYVBeYYp.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/three-examples.extras@0.169.19.js b/Needle/MenuScene/dist/assets/three-examples.extras@0.169.19.js deleted file mode 100644 index 6e3b502..0000000 --- a/Needle/MenuScene/dist/assets/three-examples.extras@0.169.19.js +++ /dev/null @@ -1 +0,0 @@ -import{S as e,at as t,mn as n}from"./three@0.169.19.js";var r=class{constructor(){this.isPass=!0,this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error(`THREE.Pass: .render() must be implemented in derived pass.`)}dispose(){}};new n(-1,1,1,-1,0,1),new class extends e{constructor(){super(),this.setAttribute(`position`,new t([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute(`uv`,new t([0,2,0,0,2,0],2))}};export{r as t}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/three-examples.extras@0.169.19.js.gz b/Needle/MenuScene/dist/assets/three-examples.extras@0.169.19.js.gz deleted file mode 100644 index d0cd3ee..0000000 Binary files a/Needle/MenuScene/dist/assets/three-examples.extras@0.169.19.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/three-examples@0.169.19.js b/Needle/MenuScene/dist/assets/three-examples@0.169.19.js deleted file mode 100644 index b1fdf40..0000000 --- a/Needle/MenuScene/dist/assets/three-examples@0.169.19.js +++ /dev/null @@ -1,464 +0,0 @@ -import{A as e,An as t,Ar as n,B as r,Bn as i,Bt as a,Cn as o,Cr as s,Ct as c,Dr as l,E as u,En as d,F as f,Fn as p,Ft as m,Gn as h,H as g,Hn as _,Ht as v,I as y,In as b,Ir as x,It as S,Jn as C,Jt as w,Kn as T,Kt as E,Ln as D,Lr as O,M as k,Mn as ee,Mr as A,Mt as j,N as M,Nn as te,Nt as N,O as ne,On as re,P as ie,Pn as ae,Pt as oe,Qn as P,Qt as F,Rn as se,Rt as ce,S as le,Sr as ue,St as de,Tn as fe,Tr as pe,Tt as me,U as he,Un as ge,V as _e,Vn as ve,Vt as ye,W as be,Xt as I,Yt as xe,Z as L,Zn as R,Zt as z,_ as Se,_n as Ce,_r as we,_t as Te,an as Ee,ar as De,at as B,bn as Oe,br as ke,bt as Ae,cn as je,cr as Me,dn as Ne,dr as Pe,dt as Fe,en as Ie,er as Le,fn as Re,fr as ze,ft as Be,gn as Ve,gr as He,h as Ue,hr as We,i as Ge,in as Ke,ir as qe,it as Je,jn as Ye,jr as Xe,jt as Ze,kn as Qe,kr as V,ln as $e,lr as et,mn as tt,mt as nt,nn as rt,on as it,or as at,ot,pn as st,q as ct,qn as lt,qt as ut,r as dt,rn as ft,rt as pt,sr as mt,tr as ht,tt as gt,un as _t,ur as vt,vn as yt,vr as bt,vt as xt,wn as H,wr as St,wt as Ct,x as wt,xn as Tt,xr as Et,xt as Dt,y as Ot,yn as kt,yt as At,z as jt,zn as Mt,zt as Nt}from"./three@0.169.19.js";var Pt=class extends z{constructor(e,t,r,i=128){if(t<=0||r<=0||i<=0)throw Error(`GroundedSkybox height, radius, and resolution must be positive.`);let a=new vt(r,2*i,i);a.scale(1,1,-1);let o=a.getAttribute(`position`),s=new n;for(let e=0;e{let r=new e.array.constructor(e.count*e.itemSize);l[n][t]=new e.constructor(r,e.itemSize,e.normalized)}))}let p=t*.5,m=10**Math.log10(1/t),h=p*m;for(let t=0;t=2.0 are supported.`));return}this.json=i,this.jsonErrorData=a;let l=new Nn(i,{path:t||this.resourcePath||``,crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e=0&&s[t]===void 0&&console.warn(`THREE.GLTFLoader: Unknown extension "`+t+`".`)}}l.setExtensions(o),l.setPlugins(s),l.parse(n,r)}parseAsync(e,t){let n=this;return new Promise(function(r,i){n.parse(e,t,r,i)})}};function Rt(){let e={};return{get:function(t){return e[t]},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},removeAll:function(){e={}}}}var U={KHR_BINARY_GLTF:`KHR_binary_glTF`,KHR_DRACO_MESH_COMPRESSION:`KHR_draco_mesh_compression`,KHR_LIGHTS_PUNCTUAL:`KHR_lights_punctual`,KHR_MATERIALS_CLEARCOAT:`KHR_materials_clearcoat`,KHR_MATERIALS_DISPERSION:`KHR_materials_dispersion`,KHR_MATERIALS_IOR:`KHR_materials_ior`,KHR_MATERIALS_SHEEN:`KHR_materials_sheen`,KHR_MATERIALS_SPECULAR:`KHR_materials_specular`,KHR_MATERIALS_TRANSMISSION:`KHR_materials_transmission`,KHR_MATERIALS_IRIDESCENCE:`KHR_materials_iridescence`,KHR_MATERIALS_ANISOTROPY:`KHR_materials_anisotropy`,KHR_MATERIALS_UNLIT:`KHR_materials_unlit`,KHR_MATERIALS_VOLUME:`KHR_materials_volume`,KHR_TEXTURE_BASISU:`KHR_texture_basisu`,KHR_TEXTURE_TRANSFORM:`KHR_texture_transform`,KHR_MESH_QUANTIZATION:`KHR_mesh_quantization`,KHR_MATERIALS_EMISSIVE_STRENGTH:`KHR_materials_emissive_strength`,EXT_MATERIALS_BUMP:`EXT_materials_bump`,EXT_TEXTURE_WEBP:`EXT_texture_webp`,EXT_TEXTURE_AVIF:`EXT_texture_avif`,EXT_MESHOPT_COMPRESSION:`EXT_meshopt_compression`,EXT_MESH_GPU_INSTANCING:`EXT_mesh_gpu_instancing`},zt=class{constructor(e){this.parser=e,this.name=U.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let n=0,r=t.length;n=0)throw Error(`THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures`);return null}return t.loadTextureImage(e,i.source,a)}},$t=class{constructor(e){this.parser=e,this.name=U.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return this.detectSupport().then(function(i){if(i)return n.loadTextureImage(e,a.source,s);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw Error(`THREE.GLTFLoader: WebP required by asset but unsupported.`);return n.loadTexture(e)})}detectSupport(){return this.isSupported||=new Promise(function(e){let t=new Image;t.src=`data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA`,t.onload=t.onerror=function(){e(t.height===1)}}),this.isSupported}},en=class{constructor(e){this.parser=e,this.name=U.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return this.detectSupport().then(function(i){if(i)return n.loadTextureImage(e,a.source,s);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw Error(`THREE.GLTFLoader: AVIF required by asset but unsupported.`);return n.loadTexture(e)})}detectSupport(){return this.isSupported||=new Promise(function(e){let t=new Image;t.src=`data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=`,t.onload=t.onerror=function(){e(t.height===1)}}),this.isSupported}},tn=class{constructor(e){this.name=U.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){let t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){let e=n.extensions[this.name],r=this.parser.getDependency(`buffer`,e.buffer),i=this.parser.options.meshoptDecoder;if(!i||!i.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw Error(`THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files`);return null}return r.then(function(t){let n=e.byteOffset||0,r=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,n,r);return i.decodeGltfBufferAsync?i.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then(function(e){return e.buffer}):i.ready.then(function(){let t=new ArrayBuffer(a*o);return i.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t})})}else return null}},nn=class{constructor(e){this.name=U.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,r=t.nodes[e];if(!r.extensions||!r.extensions[this.name]||r.mesh===void 0)return null;let i=t.meshes[r.mesh];for(let e of i.primitives)if(e.mode!==mn.TRIANGLES&&e.mode!==mn.TRIANGLE_STRIP&&e.mode!==mn.TRIANGLE_FAN&&e.mode!==void 0)return null;let a=r.extensions[this.name].attributes,o=[],s={};for(let e in a)o.push(this.parser.getDependency(`accessor`,a[e]).then(t=>(s[e]=t,s[e])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(e=>{let t=e.pop(),r=t.isGroup?t.children:[t],i=e[0].count,a=[];for(let e of r){let t=new I,r=new n,o=new H,c=new n(1,1,1),l=new Ae(e.geometry,e.material,i);for(let e=0;e0||e.search(/^data\:image\/jpeg/)===0?`image/jpeg`:e.search(/\.webp($|\?)/i)>0||e.search(/^data\:image\/webp/)===0?`image/webp`:`image/png`}var Mn=new I,Nn=class{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new Rt,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,r=-1,i=!1,a=-1;if(typeof navigator<`u`){let e=navigator.userAgent;n=/^((?!chrome|android).)*safari/i.test(e)===!0;let t=e.match(/Version\/(\d+)/);r=n&&t?parseInt(t[1],10):-1,i=e.indexOf(`Firefox`)>-1,a=i?e.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>`u`||n&&r<17||i&&a<98?this.textureLoader=new we(this.options.manager):this.textureLoader=new nt(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Je(this.options.manager),this.fileLoader.setResponseType(`arraybuffer`),this.options.crossOrigin===`use-credentials`&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let n=this,r=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all(this._invokeAll(function(e){return e.beforeRoot&&e.beforeRoot()})).then(function(){return Promise.all([n.getDependencies(`scene`),n.getDependencies(`animation`),n.getDependencies(`camera`)])}).then(function(t){let a={scene:t[0][r.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:r.asset,parser:n,userData:{}};return wn(i,a,r),Tn(a,r),Promise.all(n._invokeAll(function(e){return e.afterRoot&&e.afterRoot(a)})).then(function(){for(let e of a.scenes)e.updateMatrixWorld();e(a)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n{let n=this.associations.get(e);n!=null&&this.associations.set(t,n);for(let[n,r]of e.children.entries())i(r,t.children[n])};return i(n,r),r.name+=`_instance_`+ e.uses[t]++,r}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let n=0;n=2&&p.setY(t,u[e*a+1]),a>=3&&p.setZ(t,u[e*a+2]),a>=4&&p.setW(t,u[e*a+3]),a>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}p.normalized=d}return p})}loadTexture(e){let t=this.json,n=this.options,r=t.textures[e].source,i=t.images[r],a=this.textureLoader;if(i.uri){let e=n.manager.getHandler(i.uri);e!==null&&(a=e)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,n){let r=this,i=this.json,a=i.textures[e],o=i.images[t],s=(o.uri||o.bufferView)+`:`+a.sampler;if(this.textureCache[s])return this.textureCache[s];let c=this.loadImageSource(t,n).then(function(t){t.flipY=!1,t.name=a.name||o.name||``,t.name===``&&typeof o.uri==`string`&&o.uri.startsWith(`data:image/`)===!1&&(t.name=o.uri);let n=(i.samplers||{})[a.sampler]||{};return t.magFilter=gn[n.magFilter]||1006,t.minFilter=gn[n.minFilter]||1008,t.wrapS=_n[n.wrapS]||1e3,t.wrapT=_n[n.wrapT]||1e3,t.anisotropy=4,r.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[s]=c,c}loadImageSource(e,t){let n=this,r=this.json,i=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(e=>e.clone());let a=r.images[e],o=self.URL||self.webkitURL,s=a.uri||``,c=!1;if(a.bufferView!==void 0)s=n.getDependency(`bufferView`,a.bufferView).then(function(e){c=!0;let t=new Blob([e],{type:a.mimeType});return s=o.createObjectURL(t),s});else if(a.uri===void 0)throw Error(`THREE.GLTFLoader: Image `+e+` is missing URI and bufferView`);let l=Promise.resolve(s).then(function(e){return new Promise(function(n,r){let a=n;t.isImageBitmapLoader===!0&&(a=function(e){let t=new He(e);t.needsUpdate=!0,n(t)}),t.load(v.resolveURL(e,i.path),a,void 0,r)})}).then(function(e){return c===!0&&o.revokeObjectURL(s),Tn(e,a),e.userData.mimeType=a.mimeType||jn(a.uri),e}).catch(function(e){throw console.error(`THREE.GLTFLoader: Couldn't load texture`,s),e});return this.sourceCache[e]=l,l}assignTexture(e,t,n,r){let i=this;return this.getDependency(`texture`,n.index).then(function(a){if(!a)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(a=a.clone(),a.channel=n.texCoord),i.extensions[U.KHR_TEXTURE_TRANSFORM]){let e=n.extensions===void 0?void 0:n.extensions[U.KHR_TEXTURE_TRANSFORM];if(e){let t=i.associations.get(a);a=i.extensions[U.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),i.associations.set(a,t)}}return r!==void 0&&(a.colorSpace=r),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,n=e.material,r=t.attributes.tangent===void 0,i=t.attributes.color!==void 0,a=t.attributes.normal===void 0;if(e.isPoints){let e=`PointsMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new Tt,ut.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,t.sizeAttenuation=!1,this.cache.add(e,t)),n=t}else if(e.isLine){let e=`LineBasicMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new N,ut.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,this.cache.add(e,t)),n=t}if(r||i||a){let e=`ClonedMaterial:`+n.uuid+`:`;r&&(e+=`derivative-tangents:`),i&&(e+=`vertex-colors:`),a&&(e+=`flat-shading:`);let t=this.cache.get(e);t||(t=n.clone(),i&&(t.vertexColors=!0),a&&(t.flatShading=!0),r&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(n))),n=t}e.material=n}getMaterialType(){return Ke}loadMaterial(t){let n=this,r=this.json,i=this.extensions,o=r.materials[t],s,c={},l=o.extensions||{},u=[];if(l[U.KHR_MATERIALS_UNLIT]){let e=i[U.KHR_MATERIALS_UNLIT];s=e.getMaterialType(),u.push(e.extendParams(c,o,n))}else{let r=o.pbrMetallicRoughness||{};if(c.color=new e(1,1,1),c.opacity=1,Array.isArray(r.baseColorFactor)){let e=r.baseColorFactor;c.color.setRGB(e[0],e[1],e[2],a),c.opacity=e[3]}r.baseColorTexture!==void 0&&u.push(n.assignTexture(c,`map`,r.baseColorTexture,R)),c.metalness=r.metallicFactor===void 0?1:r.metallicFactor,c.roughness=r.roughnessFactor===void 0?1:r.roughnessFactor,r.metallicRoughnessTexture!==void 0&&(u.push(n.assignTexture(c,`metalnessMap`,r.metallicRoughnessTexture)),u.push(n.assignTexture(c,`roughnessMap`,r.metallicRoughnessTexture))),s=this._invokeOne(function(e){return e.getMaterialType&&e.getMaterialType(t)}),u.push(Promise.all(this._invokeAll(function(e){return e.extendMaterialParams&&e.extendMaterialParams(t,c)})))}o.doubleSided===!0&&(c.side=2);let d=o.alphaMode||Sn.OPAQUE;if(d===Sn.BLEND?(c.transparent=!0,c.depthWrite=!1):(c.transparent=!1,d===Sn.MASK&&(c.alphaTest=o.alphaCutoff===void 0?.5:o.alphaCutoff)),o.normalTexture!==void 0&&s!==F&&(u.push(n.assignTexture(c,`normalMap`,o.normalTexture)),c.normalScale=new V(1,1),o.normalTexture.scale!==void 0)){let e=o.normalTexture.scale;c.normalScale.set(e,e)}if(o.occlusionTexture!==void 0&&s!==F&&(u.push(n.assignTexture(c,`aoMap`,o.occlusionTexture)),o.occlusionTexture.strength!==void 0&&(c.aoMapIntensity=o.occlusionTexture.strength)),o.emissiveFactor!==void 0&&s!==F){let t=o.emissiveFactor;c.emissive=new e().setRGB(t[0],t[1],t[2],a)}return o.emissiveTexture!==void 0&&s!==F&&u.push(n.assignTexture(c,`emissiveMap`,o.emissiveTexture,R)),Promise.all(u).then(function(){let e=new s(c);return o.name&&(e.name=o.name),Tn(e,o),n.associations.set(e,{materials:t}),o.extensions&&wn(i,e,o),e})}createUniqueName(e){let t=o.sanitizeNodeName(e||``);return t in this.nodeNamesUsed?t+`_`+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,n=this.extensions,r=this.primitiveCache;function i(e){return n[U.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then(function(n){return Fn(n,e,t)})}let a=[];for(let n=0,o=e.length;n0&&Dn(d,i),d.name=t.createUniqueName(i.name||`mesh_`+e),Tn(d,i),u.extensions&&wn(r,d,u),t.assignFinalMaterial(d),c.push(d)}for(let n=0,r=c.length;n1?new Fe:t.length===1?t[0]:new Re,o!==t[0])for(let e=0,n=t.length;e{let t=new Map;for(let[e,n]of r.associations)(e instanceof ut||e instanceof He)&&t.set(e,n);return e.traverse(e=>{let n=r.associations.get(e);n!=null&&t.set(e,n)}),t})(i),i})}_createAnimationTracks(e,t,n,r,i){let a=[],o=e.name?e.name:e.uuid,s=[];bn[i.path]===bn.weights?e.traverse(function(e){e.morphTargetInfluences&&s.push(e.name?e.name:e.uuid)}):s.push(o);let c;switch(bn[i.path]){case bn.weights:c=Ne;break;case bn.rotation:c=fe;break;case bn.position:case bn.scale:c=A;break;default:switch(n.itemSize){case 1:c=Ne;break;default:c=A;break}break}let l=r.interpolation===void 0?me:xn[r.interpolation],u=this._getArrayFromAccessor(n);for(let e=0,n=s.length;e96?i-97:i>64?i-39:i+4}for(var a=0,n=0;n0?h(e,t,n,u[r],l[i]):o.then(function(){var o=new Uint8Array(e*t);return c(a.exports[u[r]],o,e,t,n,a.exports[l[i]]),o})}}})(),Ln=new WeakMap,Rn=class extends ye{constructor(e){super(e),this.decoderPath=``,this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL=``,this.defaultAttributeIDs={position:`POSITION`,normal:`NORMAL`,color:`COLOR`,uv:`TEX_COORD`},this.defaultAttributeTypes={position:`Float32Array`,normal:`Float32Array`,color:`Float32Array`,uv:`Float32Array`}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,n,r){let i=new Je(this.manager);i.setPath(this.path),i.setResponseType(`arraybuffer`),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,e=>{this.parse(e,t,r)},n,r)}parse(e,t,n=()=>{}){this.decodeDracoFile(e,t,null,null,R,n).catch(n)}decodeDracoFile(e,t,n,r,i=a,o=()=>{}){let s={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!n,vertexColorSpace:i};return this.decodeGeometry(e,s).then(t).catch(o)}decodeGeometry(e,t){let n=JSON.stringify(t);if(Ln.has(e)){let t=Ln.get(e);if(t.key===n)return t.promise;if(e.byteLength===0)throw Error(`THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.`)}let r,i=this.workerNextTaskID++,a=e.byteLength,o=this._getWorker(i,a).then(n=>(r=n,new Promise((n,a)=>{r._callbacks[i]={resolve:n,reject:a},r.postMessage({type:`decode`,id:i,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&i&&this._releaseTask(r,i)}),Ln.set(e,{key:n,promise:o}),o}_createGeometry(e){let t=new le;e.index&&t.setIndex(new wt(e.index.array,1));for(let n=0;n{n.load(e,t,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e=typeof WebAssembly!=`object`||this.decoderConfig.type===`js`,t=[];return e?t.push(this._loadLibrary(`draco_decoder.js`,`text`)):(t.push(this._loadLibrary(`draco_wasm_wrapper.js`,`text`)),t.push(this._loadLibrary(`draco_decoder.wasm`,`arraybuffer`))),this.decoderPending=Promise.all(t).then(t=>{let n=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let r=zn.toString(),i=[`/* draco decoder */`,n,``,`/* worker */`,r.substring(r.indexOf(`{`)+1,r.lastIndexOf(`}`))].join(` -`);this.workerSourceURL=URL.createObjectURL(new Blob([i]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtht._taskLoad?-1:1});let n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log(`Task load: `,this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{let t=e.draco,o=new t.Decoder;try{let e=n(t,o,new Int8Array(r),a),s=e.attributes.map(e=>e.array.buffer);e.index&&s.push(e.index.array.buffer),self.postMessage({type:`decode`,id:i.id,geometry:e},s)}catch(e){console.error(e),self.postMessage({type:`error`,id:i.id,error:e.message})}finally{t.destroy(o)}});break}};function n(e,t,n,a){let o=a.attributeIDs,s=a.attributeTypes,c,l,u=t.GetEncodedGeometryType(n);if(u===e.TRIANGULAR_MESH)c=new e.Mesh,l=t.DecodeArrayToMesh(n,n.byteLength,c);else if(u===e.POINT_CLOUD)c=new e.PointCloud,l=t.DecodeArrayToPointCloud(n,n.byteLength,c);else throw Error(`THREE.DRACOLoader: Unexpected geometry type.`);if(!l.ok()||c.ptr===0)throw Error(`THREE.DRACOLoader: Decoding failed: `+l.error_msg());let d={index:null,attributes:[]};for(let n in o){let r=self[s[n]],l,u;if(a.useUniqueIDs)u=o[n],l=t.GetAttributeByUniqueId(c,u);else{if(u=t.GetAttributeId(c,e[o[n]]),u===-1)continue;l=t.GetAttribute(c,u)}let f=i(e,t,c,n,r,l);n===`color`&&(f.vertexColorSpace=a.vertexColorSpace),d.attributes.push(f)}return u===e.TRIANGULAR_MESH&&(d.index=r(e,t,c)),e.destroy(c),d}function r(e,t,n){let r=n.num_faces()*3,i=r*4,a=e._malloc(i);t.GetTrianglesUInt32Array(n,i,a);let o=new Uint32Array(e.HEAPF32.buffer,a,r).slice();return e._free(a),{array:o,itemSize:1}}function i(e,t,n,r,i,o){let s=o.num_components(),c=n.num_points()*s,l=c*i.BYTES_PER_ELEMENT,u=a(e,i),d=e._malloc(l);t.GetAttributeDataArrayForAllPoints(n,o,u,l,d);let f=new i(e.HEAPF32.buffer,d,c).slice();return e._free(d),{name:r,array:f,itemSize:s}}function a(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}}var Bn=class{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(e){if(!this.workers[e]){let t=this.workerCreator();t.addEventListener(`message`,this._onMessage.bind(this,e)),this.workers[e]=t}}_getIdleWorker(){for(let e=0;e{let r=this._getIdleWorker();r===-1?this.queue.push({resolve:n,msg:e,transfer:t}):(this._initWorker(r),this.workerStatus|=1<e.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}},Vn=1000066e3,Hn=class{constructor(e,t,n,r){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(e.buffer,e.byteOffset+t,n),this._littleEndian=r,this._offset=0}_nextUint8(){let e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){let e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){let e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){let e=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){let e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint8Array(e){let t=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,e);return this._offset+=e,t}_skip(e){return this._offset+=e,this}_scan(e,t=0){let n=this._offset,r=0;for(;this._dataView.getUint8(this._offset)!==t&&re.arrayBuffer()).then(e=>WebAssembly.instantiate(e,Yn)).then(this._init):WebAssembly.instantiate(Buffer.from(Zn,`base64`),Yn).then(this._init),Kn)}_init(e){qn=e.instance,Yn.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!qn)throw Error(`ZSTDDecoder: Await .init() before decoding.`);let n=e.byteLength,r=qn.exports.malloc(n);Jn.set(e,r),t||=Number(qn.exports.ZSTD_findDecompressedSize(r,n));let i=qn.exports.malloc(t),a=qn.exports.ZSTD_decompress(i,t,r,n),o=Jn.slice(i,i+a);return qn.exports.free(r),qn.exports.free(i),o}},Zn=`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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQhBSAGQQR2IQRBICAAdCIAQQFyIQkgASgCACEPQQAhAiADIQYCQANAIAlBAkggAiAPS3JFBEAgAiEHAkAgCARAA0AgBEH//wNxQf//A0YEQCAHQRhqIQcgBiAQSQR/IAZBAmoiBigAACAFdgUgBUEQaiEFIARBEHYLIQQMAQsLA0AgBEEDcSIIQQNGBEAgBUECaiEFIARBAnYhBCAHQQNqIQcMAQsLIAcgCGoiByAPSw0EIAVBAmohBQNAIAIgB0kEQCANIAJBAXRqQQA7AQAgAkEBaiECDAELCyAGIA5LQQAgBiAFQQN1aiIHIAxLG0UEQCAHKAAAIAVBB3EiBXYhBAwCCyAEQQJ2IQQLIAYhBwsCfyALQX9qIAQgAEF/anEiBiAAQQF0QX9qIgggCWsiEUkNABogBCAIcSIEQQAgESAEIABIG2shBiALCyEIIA0gAkEBdGogBkF/aiIEOwEAIAlBASAGayAEIAZBAUgbayEJA0AgCSAASARAIABBAXUhACALQX9qIQsMAQsLAn8gByAOS0EAIAcgBSAIaiIFQQN1aiIGIAxLG0UEQCAFQQdxDAELIAUgDCIGIAdrQQN0awshBSACQQFqIQIgBEUhCCAGKAAAIAVBH3F2IQQMAQsLQWwgCUEBRyAFQSBKcg0BGiABIAJBf2o2AgAgBiAFQQdqQQN1aiADawwBC0FQCyEAIApBEGokACAACwkAQQFBBSAAGwsMACAAIAEoAAA2AAALqgMBCn8jAEHwAGsiCiQAIAJBAWohDiAAQQhqIQtBgIAEIAVBf2p0QRB1IQxBACECQQEhBkEBIAV0IglBf2oiDyEIA0AgAiAORkUEQAJAIAEgAkEBdCINai8BACIHQf//A0YEQCALIAhBA3RqIAI2AgQgCEF/aiEIQQEhBwwBCyAGQQAgDCAHQRB0QRB1ShshBgsgCiANaiAHOwEAIAJBAWohAgwBCwsgACAFNgIEIAAgBjYCACAJQQN2IAlBAXZqQQNqIQxBACEAQQAhBkEAIQIDQCAGIA5GBEADQAJAIAAgCUYNACAKIAsgAEEDdGoiASgCBCIGQQF0aiICIAIvAQAiAkEBajsBACABIAUgAhAUayIIOgADIAEgAiAIQf8BcXQgCWs7AQAgASAEIAZBAnQiAmooAgA6AAIgASACIANqKAIANgIEIABBAWohAAwBCwsFIAEgBkEBdGouAQAhDUEAIQcDQCAHIA1ORQRAIAsgAkEDdGogBjYCBANAIAIgDGogD3EiAiAISw0ACyAHQQFqIQcMAQsLIAZBAWohBgwBCwsgCkHwAGokAAsjAEIAIAEQCSAAhUKHla+vmLbem55/fkLj3MqV/M7y9YV/fAsQACAAQn43AwggACABNgIACyQBAX8gAARAIAEoAgQiAgRAIAEoAgggACACEQEADwsgABAmCwsfACAAIAEgAi8BABAINgIAIAEQBBogACACQQRqNgIEC0oBAX9BoCAoAgAiASAAaiIAQX9MBEBBiCBBMDYCAEF/DwsCQCAAPwBBEHRNDQAgABBmDQBBiCBBMDYCAEF/DwtBoCAgADYCACABC9cBAQh/Qbp/IQoCQCACKAIEIgggAigCACIJaiIOIAEgAGtLDQBBbCEKIAkgBCADKAIAIgtrSw0AIAAgCWoiBCACKAIIIgxrIQ0gACABQWBqIg8gCyAJQQAQKSADIAkgC2o2AgACQAJAIAwgBCAFa00EQCANIQUMAQsgDCAEIAZrSw0CIAcgDSAFayIAaiIBIAhqIAdNBEAgBCABIAgQDxoMAgsgBCABQQAgAGsQDyEBIAIgACAIaiIINgIEIAEgAGshBAsgBCAPIAUgCEEBECkLIA4hCgsgCgubAgEBfyMAQYABayINJAAgDSADNgJ8AkAgAkEDSwRAQX8hCQwBCwJAAkACQAJAIAJBAWsOAwADAgELIAZFBEBBuH8hCQwEC0FsIQkgBS0AACICIANLDQMgACAHIAJBAnQiAmooAgAgAiAIaigCABA7IAEgADYCAEEBIQkMAwsgASAJNgIAQQAhCQwCCyAKRQRAQWwhCQwCC0EAIQkgC0UgDEEZSHINAUEIIAR0QQhqIQBBACECA0AgAiAATw0CIAJBQGshAgwAAAsAC0FsIQkgDSANQfwAaiANQfgAaiAFIAYQFSICEAMNACANKAJ4IgMgBEsNACAAIA0gDSgCfCAHIAggAxAYIAEgADYCACACIQkLIA1BgAFqJAAgCQsLACAAIAEgAhALGgsQACAALwAAIAAtAAJBEHRyCy8AAn9BuH8gAUEISQ0AGkFyIAAoAAQiAEF3Sw0AGkG4fyAAQQhqIgAgACABSxsLCwkAIAAgATsAAAsDAAELigYBBX8gACAAKAIAIgVBfnE2AgBBACAAIAVBAXZqQYQgKAIAIgQgAEYbIQECQAJAIAAoAgQiAkUNACACKAIAIgNBAXENACACQQhqIgUgA0EBdkF4aiIDQQggA0EISxtnQR9zQQJ0QYAfaiIDKAIARgRAIAMgAigCDDYCAAsgAigCCCIDBEAgAyACKAIMNgIECyACKAIMIgMEQCADIAIoAgg2AgALIAIgAigCACAAKAIAQX5xajYCAEGEICEAAkACQCABRQ0AIAEgAjYCBCABKAIAIgNBAXENASADQQF2QXhqIgNBCCADQQhLG2dBH3NBAnRBgB9qIgMoAgAgAUEIakYEQCADIAEoAgw2AgALIAEoAggiAwRAIAMgASgCDDYCBAsgASgCDCIDBEAgAyABKAIINgIAQYQgKAIAIQQLIAIgAigCACABKAIAQX5xajYCACABIARGDQAgASABKAIAQQF2akEEaiEACyAAIAI2AgALIAIoAgBBAXZBeGoiAEEIIABBCEsbZ0Efc0ECdEGAH2oiASgCACEAIAEgBTYCACACIAA2AgwgAkEANgIIIABFDQEgACAFNgIADwsCQCABRQ0AIAEoAgAiAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAigCACABQQhqRgRAIAIgASgCDDYCAAsgASgCCCICBEAgAiABKAIMNgIECyABKAIMIgIEQCACIAEoAgg2AgBBhCAoAgAhBAsgACAAKAIAIAEoAgBBfnFqIgI2AgACQCABIARHBEAgASABKAIAQQF2aiAANgIEIAAoAgAhAgwBC0GEICAANgIACyACQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgIoAgAhASACIABBCGoiAjYCACAAIAE2AgwgAEEANgIIIAFFDQEgASACNgIADwsgBUEBdkF4aiIBQQggAUEISxtnQR9zQQJ0QYAfaiICKAIAIQEgAiAAQQhqIgI2AgAgACABNgIMIABBADYCCCABRQ0AIAEgAjYCAAsLDgAgAARAIABBeGoQJQsLgAIBA38CQCAAQQ9qQXhxQYQgKAIAKAIAQQF2ayICEB1Bf0YNAAJAQYQgKAIAIgAoAgAiAUEBcQ0AIAFBAXZBeGoiAUEIIAFBCEsbZ0Efc0ECdEGAH2oiASgCACAAQQhqRgRAIAEgACgCDDYCAAsgACgCCCIBBEAgASAAKAIMNgIECyAAKAIMIgFFDQAgASAAKAIINgIAC0EBIQEgACAAKAIAIAJBAXRqIgI2AgAgAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAygCACECIAMgAEEIaiIDNgIAIAAgAjYCDCAAQQA2AgggAkUNACACIAM2AgALIAELtwIBA38CQAJAIABBASAAGyICEDgiAA0AAkACQEGEICgCACIARQ0AIAAoAgAiA0EBcQ0AIAAgA0EBcjYCACADQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgAgAEEIakYEQCABIAAoAgw2AgALIAAoAggiAQRAIAEgACgCDDYCBAsgACgCDCIBBEAgASAAKAIINgIACyACECchAkEAIQFBhCAoAgAhACACDQEgACAAKAIAQX5xNgIAQQAPCyACQQ9qQXhxIgMQHSICQX9GDQIgAkEHakF4cSIAIAJHBEAgACACaxAdQX9GDQMLAkBBhCAoAgAiAUUEQEGAICAANgIADAELIAAgATYCBAtBhCAgADYCACAAIANBAXRBAXI2AgAMAQsgAEUNAQsgAEEIaiEBCyABC7kDAQJ/IAAgA2ohBQJAIANBB0wEQANAIAAgBU8NAiAAIAItAAA6AAAgAEEBaiEAIAJBAWohAgwAAAsACyAEQQFGBEACQCAAIAJrIgZBB00EQCAAIAItAAA6AAAgACACLQABOgABIAAgAi0AAjoAAiAAIAItAAM6AAMgAEEEaiACIAZBAnQiBkHAHmooAgBqIgIQFyACIAZB4B5qKAIAayECDAELIAAgAhAMCyACQQhqIQIgAEEIaiEACwJAAkACQAJAIAUgAU0EQCAAIANqIQEgBEEBRyAAIAJrQQ9Kcg0BA0AgACACEAwgAkEIaiECIABBCGoiACABSQ0ACwwFCyAAIAFLBEAgACEBDAQLIARBAUcgACACa0EPSnINASAAIQMgAiEEA0AgAyAEEAwgBEEIaiEEIANBCGoiAyABSQ0ACwwCCwNAIAAgAhAHIAJBEGohAiAAQRBqIgAgAUkNAAsMAwsgACEDIAIhBANAIAMgBBAHIARBEGohBCADQRBqIgMgAUkNAAsLIAIgASAAa2ohAgsDQCABIAVPDQEgASACLQAAOgAAIAFBAWohASACQQFqIQIMAAALAAsLQQECfyAAIAAoArjgASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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`,Qn=`display-p3`,$n=`display-p3-linear`,er=new WeakMap,tr=0,nr,rr=class e extends ye{constructor(e){super(e),this.transcoderPath=``,this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new Bn,this.workerSourceURL=``,this.workerConfig=null,typeof MSC_TRANSCODER<`u`&&console.warn(`THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.`)}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}async detectSupportAsync(e){return this.workerConfig={astcSupported:await e.hasFeatureAsync(`texture-compression-astc`),astcHDRSupported:!1,etc1Supported:await e.hasFeatureAsync(`texture-compression-etc1`),etc2Supported:await e.hasFeatureAsync(`texture-compression-etc2`),dxtSupported:await e.hasFeatureAsync(`texture-compression-bc`),bptcSupported:await e.hasFeatureAsync(`texture-compression-bptc`),pvrtcSupported:await e.hasFeatureAsync(`texture-compression-pvrtc`)},this}detectSupport(e){return e.isWebGPURenderer===!0?this.workerConfig={astcSupported:e.hasFeature(`texture-compression-astc`),astcHDRSupported:!1,etc1Supported:e.hasFeature(`texture-compression-etc1`),etc2Supported:e.hasFeature(`texture-compression-etc2`),dxtSupported:e.hasFeature(`texture-compression-bc`),bptcSupported:e.hasFeature(`texture-compression-bptc`),pvrtcSupported:e.hasFeature(`texture-compression-pvrtc`)}:this.workerConfig={astcSupported:e.extensions.has(`WEBGL_compressed_texture_astc`),astcHDRSupported:e.extensions.has(`WEBGL_compressed_texture_astc`)&&e.extensions.get(`WEBGL_compressed_texture_astc`).getSupportedProfiles().includes(`hdr`),etc1Supported:e.extensions.has(`WEBGL_compressed_texture_etc1`),etc2Supported:e.extensions.has(`WEBGL_compressed_texture_etc`),dxtSupported:e.extensions.has(`WEBGL_compressed_texture_s3tc`),bptcSupported:e.extensions.has(`EXT_texture_compression_bptc`),pvrtcSupported:e.extensions.has(`WEBGL_compressed_texture_pvrtc`)||e.extensions.has(`WEBKIT_WEBGL_compressed_texture_pvrtc`)},this}init(){if(!this.transcoderPending){let t=new Je(this.manager);t.setPath(this.transcoderPath),t.setWithCredentials(this.withCredentials);let n=t.loadAsync(`basis_transcoder.js`),r=new Je(this.manager);r.setPath(this.transcoderPath),r.setResponseType(`arraybuffer`),r.setWithCredentials(this.withCredentials);let i=r.loadAsync(`basis_transcoder.wasm`);this.transcoderPending=Promise.all([n,i]).then(([t,n])=>{let r=e.BasisWorker.toString(),i=[`/* constants */`,`let _EngineFormat = `+JSON.stringify(e.EngineFormat),`let _EngineType = `+JSON.stringify(e.EngineType),`let _TranscoderFormat = `+JSON.stringify(e.TranscoderFormat),`let _BasisFormat = `+JSON.stringify(e.BasisFormat),`/* basis_transcoder.js */`,t,`/* worker */`,r.substring(r.indexOf(`{`)+1,r.lastIndexOf(`}`))].join(` -`);this.workerSourceURL=URL.createObjectURL(new Blob([i])),this.transcoderBinary=n,this.workerPool.setWorkerCreator(()=>{let e=new Worker(this.workerSourceURL),t=this.transcoderBinary.slice(0);return e.postMessage({type:`init`,config:this.workerConfig,transcoderBinary:t},[t]),e})}),tr>0&&console.warn(`THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances.`),tr++}return this.transcoderPending}load(e,t,n,r){if(this.workerConfig===null)throw Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");let i=new Je(this.manager);i.setPath(this.path),i.setCrossOrigin(this.crossOrigin),i.setWithCredentials(this.withCredentials),i.setResponseType(`arraybuffer`),i.load(e,e=>{this.parse(e,t,r)},n,r)}parse(e,t,n){if(this.workerConfig===null)throw Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(er.has(e))return er.get(e).promise.then(t).catch(n);this._createTexture(e).then(e=>t?t(e):null).catch(n)}_createTextureFrom(e,t){let{type:n,error:r,data:{faces:i,width:a,height:o,format:s,type:c,dfdFlags:l}}=e;if(n===`error`)return Promise.reject(r);let u;if(t.faceCount===6)u=new ie(i,s,c);else{let e=i[0].mipmaps;u=t.layerCount>1?new M(e,a,o,t.layerCount,s,c):new f(e,a,o,s,c)}return u.minFilter=i[0].mipmaps.length===1?S:ce,u.magFilter=S,u.generateMipmaps=!1,u.needsUpdate=!0,u.colorSpace=cr(t),u.premultiplyAlpha=!!(l&1),u}async _createTexture(e,t={}){let n=Gn(new Uint8Array(e)),r=n.vkFormat===1000066e3&&n.dataFormatDescriptor[0].colorModel===167;if(!(n.vkFormat===0||r&&!this.workerConfig.astcHDRSupported))return sr(n);let i=t,a=this.init().then(()=>this.workerPool.postMessage({type:`transcode`,buffer:e,taskConfig:i},[e])).then(e=>this._createTextureFrom(e.data,n));return er.set(e,{promise:a}),a}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),tr--}};rr.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2},rr.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16,BC6H:22,RGB_HALF:24,RGBA_HALF:25},rr.EngineFormat={RGBAFormat:re,RGBA_ASTC_4x4_Format:Qe,RGB_BPTC_UNSIGNED_Format:se,RGBA_BPTC_Format:Ye,RGBA_ETC2_EAC_Format:ee,RGBA_PVRTC_4BPPV1_Format:te,RGBA_S3TC_DXT5_Format:b,RGB_ETC1_Format:Mt,RGB_ETC2_Format:i,RGB_PVRTC_4BPPV1_Format:ve,RGBA_S3TC_DXT1_Format:ae},rr.EngineType={UnsignedByteType:St,HalfFloatType:Be,FloatType:ot},rr.BasisWorker=function(){let e,t,n,r=_EngineFormat,i=_EngineType,a=_TranscoderFormat,o=_BasisFormat;self.addEventListener(`message`,function(n){let r=n.data;switch(r.type){case`init`:e=r.config,s(r.transcoderBinary);break;case`transcode`:t.then(()=>{try{let{faces:e,buffers:t,width:n,height:i,hasAlpha:a,format:o,type:s,dfdFlags:l}=c(r.buffer);self.postMessage({type:`transcode`,id:r.id,data:{faces:e,width:n,height:i,hasAlpha:a,format:o,type:s,dfdFlags:l}},t)}catch(e){console.error(e),self.postMessage({type:`error`,id:r.id,error:e.message})}});break}});function s(e){t=new Promise(t=>{n={wasmBinary:e,onRuntimeInitialized:t},BASIS(n)}).then(()=>{n.initializeBasis(),n.KTX2File===void 0&&console.warn(`THREE.KTX2Loader: Please update Basis Universal transcoder.`)})}function c(e){let t=new n.KTX2File(new Uint8Array(e));function r(){t.close(),t.delete()}if(!t.isValid())throw r(),Error(`THREE.KTX2Loader: Invalid or unsupported .ktx2 file`);let a;if(t.isUASTC())a=o.UASTC;else if(t.isETC1S())a=o.ETC1S;else if(t.isHDR())a=o.UASTC_HDR;else throw Error(`THREE.KTX2Loader: Unknown Basis encoding`);let s=t.getWidth(),c=t.getHeight(),l=t.getLayers()||1,u=t.getLevels(),f=t.getFaces(),m=t.getHasAlpha(),h=t.getDFDFlags(),{transcoderFormat:g,engineFormat:_,engineType:v}=d(a,s,c,m);if(!s||!c||!u)throw r(),Error(`THREE.KTX2Loader: Invalid texture`);if(!t.startTranscoding())throw r(),Error(`THREE.KTX2Loader: .startTranscoding failed`);let y=[],b=[];for(let e=0;e1?(s=l.origWidth,c=l.origHeight):(s=l.width,c=l.height);let d=new Uint8Array(t.getImageTranscodedSizeInBytes(a,n,0,g)),f=t.transcodeImage(d,a,n,e,g,0,-1,-1);if(v===i.HalfFloatType&&(d=new Uint16Array(d.buffer,d.byteOffset,d.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!f)throw r(),Error(`THREE.KTX2Loader: .transcodeImage failed.`);o.push(d)}let d=p(o);n.push({data:d,width:s,height:c}),b.push(d.buffer)}y.push({mipmaps:n,width:s,height:c,format:_,type:v})}return r(),{faces:y,buffers:b,width:s,height:c,hasAlpha:m,dfdFlags:h,format:_,type:v}}let l=[{if:`astcSupported`,basisFormat:[o.UASTC],transcoderFormat:[a.ASTC_4x4,a.ASTC_4x4],engineFormat:[r.RGBA_ASTC_4x4_Format,r.RGBA_ASTC_4x4_Format],engineType:[i.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:`bptcSupported`,basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.BC7_M5,a.BC7_M5],engineFormat:[r.RGBA_BPTC_Format,r.RGBA_BPTC_Format],engineType:[i.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:`dxtSupported`,basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.BC1,a.BC3],engineFormat:[r.RGBA_S3TC_DXT1_Format,r.RGBA_S3TC_DXT5_Format],engineType:[i.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:`etc2Supported`,basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.ETC1,a.ETC2],engineFormat:[r.RGB_ETC2_Format,r.RGBA_ETC2_EAC_Format],engineType:[i.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:`etc1Supported`,basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.ETC1],engineFormat:[r.RGB_ETC1_Format],engineType:[i.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:`pvrtcSupported`,basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.PVRTC1_4_RGB,a.PVRTC1_4_RGBA],engineFormat:[r.RGB_PVRTC_4BPPV1_Format,r.RGBA_PVRTC_4BPPV1_Format],engineType:[i.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:`bptcSupported`,basisFormat:[o.UASTC_HDR],transcoderFormat:[a.BC6H],engineFormat:[r.RGB_BPTC_UNSIGNED_Format],engineType:[i.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[a.RGBA32,a.RGBA32],engineFormat:[r.RGBAFormat,r.RGBAFormat],engineType:[i.UnsignedByteType,i.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[o.UASTC_HDR],transcoderFormat:[a.RGBA_HALF],engineFormat:[r.RGBAFormat],engineType:[i.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],u={[o.ETC1S]:l.filter(e=>e.basisFormat.includes(o.ETC1S)).sort((e,t)=>e.priorityUASTC-t.priorityUASTC),[o.UASTC]:l.filter(e=>e.basisFormat.includes(o.UASTC)).sort((e,t)=>e.priorityUASTC-t.priorityUASTC),[o.UASTC_HDR]:l.filter(e=>e.basisFormat.includes(o.UASTC_HDR)).sort((e,t)=>e.priorityHDR-t.priorityHDR)};function d(t,n,r,i){let a=u[t];for(let o=0;o{let t=new Xn;await t.init(),e(t)}),n=await nr);let r=[];for(let i=0;i>i),o=Math.max(1,e.pixelHeight>>i),s=e.pixelDepth?Math.max(1,e.pixelDepth>>i):0,c=e.levels[i],l;if(e.supercompressionScheme===0)l=c.levelData;else if(e.supercompressionScheme===2)l=n.decode(c.levelData,c.uncompressedByteLength);else throw Error(`THREE.KTX2Loader: Unsupported supercompressionScheme.`);let u;u=or[t]===1015?new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):or[t]===1016?new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):or[t]===35902||or[t]===35899?new Uint32Array(l.buffer,l.byteOffset,l.byteLength/Uint32Array.BYTES_PER_ELEMENT):l,r.push({data:u,width:a,height:o,depth:s})}let i=e.levelCount===0||r.length>1,a;if(ir.has(ar[t]))a=e.pixelDepth===0?new g(r[0].data,e.pixelWidth,e.pixelHeight):new _e(r[0].data,e.pixelWidth,e.pixelHeight,e.pixelDepth),a.minFilter=i?$e:it,a.magFilter=it,a.generateMipmaps=e.levelCount===0;else{if(e.pixelDepth>0)throw Error(`THREE.KTX2Loader: Unsupported pixelDepth.`);a=new f(r,e.pixelWidth,e.pixelHeight),a.minFilter=i?ce:S,a.magFilter=S}return a.mipmaps=r,a.type=or[t],a.format=ar[t],a.colorSpace=cr(e),a.needsUpdate=!0,Promise.resolve(a)}function cr(e){let t=e.dataFormatDescriptor[0];return t.colorPrimaries===1?t.transferFunction===2?R:a:t.colorPrimaries===10?t.transferFunction===2?Qn:$n:(t.colorPrimaries===0||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${t.colorPrimaries}"`),``)}var lr=new _t;lr.camera=new Ve,Le.basic,Le.basic,Le.points,Le.standard,Le.physical,Le.phong;var ur=function(){var e=0,t=document.createElement(`div`);t.style.cssText=`position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000`,t.addEventListener(`click`,function(n){n.preventDefault(),r(++e%t.children.length)},!1);function n(e){return t.appendChild(e.dom),e}function r(n){for(var r=0;r=a+1e3&&(s.update(o*1e3/(e-a),100),a=e,o=0,l)){var t=performance.memory;l.update(t.usedJSHeapSize/1048576,t.jsHeapSizeLimit/1048576)}return e},update:function(){i=this.end()},domElement:t,setMode:r}};ur.Panel=function(e,t,n){var r=1/0,i=0,a=Math.round,o=a(window.devicePixelRatio||1),s=80*o,c=48*o,l=3*o,u=2*o,d=3*o,f=15*o,p=74*o,m=30*o,h=document.createElement(`canvas`);h.width=s,h.height=c,h.style.cssText=`width:80px;height:48px`;var g=h.getContext(`2d`);return g.font=`bold `+9*o+`px Helvetica,Arial,sans-serif`,g.textBaseline=`top`,g.fillStyle=n,g.fillRect(0,0,s,c),g.fillStyle=t,g.fillText(e,l,u),g.fillRect(d,f,p,m),g.fillStyle=n,g.globalAlpha=.9,g.fillRect(d,f,p,m),{dom:h,update:function(c,_){r=Math.min(r,c),i=Math.max(i,c),g.fillStyle=n,g.globalAlpha=1,g.fillRect(0,0,s,f),g.fillStyle=t,g.fillText(a(c)+` `+e+` (`+a(r)+`-`+a(i)+`)`,l,u),g.drawImage(h,d+o,f,p-o,m,d,f,p-o,m),g.fillRect(d+p-o,f,o,m),g.fillStyle=n,g.globalAlpha=.9,g.fillRect(d+p-o,f,o,a((1-c/_)*m))}}};var dr=class extends pt{constructor(e,t={}){let n=t.font;if(n===void 0)super();else{let r=n.generateShapes(e,t.size);t.depth===void 0&&t.height!==void 0&&console.warn(`THREE.TextGeometry: .height is now depreciated. Please use .depth instead`),t.depth=t.depth===void 0?t.height===void 0?50:t.height:t.depth,t.bevelThickness===void 0&&(t.bevelThickness=10),t.bevelSize===void 0&&(t.bevelSize=8),t.bevelEnabled===void 0&&(t.bevelEnabled=!1),super(r,t)}this.type=`TextGeometry`}},fr=class extends ye{constructor(e){super(e)}load(e,t,n,r){let i=this,a=new Je(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(e){let n=i.parse(JSON.parse(e));t&&t(n)},n,r)}parse(e){return new pr(e)}},pr=class{constructor(e){this.isFont=!0,this.type=`Font`,this.data=e}generateShapes(e,t=100){let n=[],r=mr(e,t,this.data);for(let e=0,t=r.length;e>1|(G&21845)<<1;kr=(kr&52428)>>2|(kr&13107)<<2,kr=(kr&61680)>>4|(kr&3855)<<4,Or[G]=((kr&65280)>>8|(kr&255)<<8)>>1}for(var Ar=(function(e,t,n){for(var r=e.length,i=0,a=new gr(t);i>c]=l}else for(s=new gr(r),i=0;i>15-e[i]);return s}),jr=new W(288),G=0;G<144;++G)jr[G]=8;for(var G=144;G<256;++G)jr[G]=9;for(var G=256;G<280;++G)jr[G]=7;for(var G=280;G<288;++G)jr[G]=8;for(var Mr=new W(32),G=0;G<32;++G)Mr[G]=5;var Nr=Ar(jr,9,0),Pr=Ar(jr,9,1),Fr=Ar(Mr,5,0),Ir=Ar(Mr,5,1),Lr=function(e){for(var t=e[0],n=1;nt&&(t=e[n]);return t},Rr=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},zr=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},Br=function(e){return(e+7)/8|0},Vr=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new W(e.subarray(t,n))},Hr=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],Ur=function(e,t,n){var r=Error(t||Hr[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,Ur),!n)throw r;return r},Wr=function(e,t,n,r){var i=e.length,a=r?r.length:0;if(!i||t.f&&!t.l)return n||new W(0);var o=!n,s=o||t.i!=2,c=t.i;o&&(n=new W(i*3));var l=function(e){var t=n.length;if(e>t){var r=new W(Math.max(t*2,e));r.set(n),n=r}},u=t.f||0,d=t.p||0,f=t.b||0,p=t.l,m=t.d,h=t.m,g=t.n,_=i*8;do{if(!p){u=Rr(e,d,1);var v=Rr(e,d+1,3);if(d+=3,!v){var y=Br(d)+4,b=e[y-4]|e[y-3]<<8,x=y+b;if(x>i){c&&Ur(0);break}s&&l(f+b),n.set(e.subarray(y,x),f),t.b=f+=b,t.p=d=x*8,t.f=u;continue}else if(v==1)p=Pr,m=Ir,h=9,g=5;else if(v==2){var S=Rr(e,d,31)+257,C=Rr(e,d+10,15)+4,w=S+Rr(e,d+5,31)+1;d+=14;for(var T=new W(w),E=new W(19),D=0;D>4;if(y<16)T[D++]=y;else{var j=0,M=0;for(y==16?(M=3+Rr(e,d,3),d+=2,j=T[D-1]):y==17?(M=3+Rr(e,d,7),d+=3):y==18&&(M=11+Rr(e,d,127),d+=7);M--;)T[D++]=j}}var te=T.subarray(0,S),N=T.subarray(S);h=Lr(te),g=Lr(N),p=Ar(te,h,1),m=Ar(N,g,1)}else Ur(1);if(d>_){c&&Ur(0);break}}s&&l(f+131072);for(var ne=(1<>4;if(d+=j&15,d>_){c&&Ur(0);break}if(j||Ur(2),ae<256)n[f++]=ae;else if(ae==256){ie=d,p=null;break}else{var oe=ae-254;if(ae>264){var D=ae-257,P=vr[D];oe=Rr(e,d,(1<>4;F||Ur(3),d+=F&15;var N=Er[se];if(se>3){var P=yr[se];N+=zr(e,d)&(1<_){c&&Ur(0);break}s&&l(f+131072);var ce=f+oe;if(f>8},Kr=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8,e[r+2]|=n>>16},qr=function(e,t){for(var n=[],r=0;rf&&(f=a[r].s);var p=new gr(f+1),m=Jr(n[u-1],p,0);if(m>t){var r=0,h=0,g=m-t,_=1<t)h+=_-(1<>=g;h>0;){var y=a[r].s;p[y]=0&&h;--r){var b=a[r].s;p[b]==t&&(--p[b],++h)}m=t}return{t:new W(p),l:m}},Jr=function(e,t,n){return e.s==-1?Math.max(Jr(e.l,t,n+1),Jr(e.r,t,n+1)):t[e.s]=n},Yr=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new gr(++t),r=0,i=e[0],a=1,o=function(e){n[r++]=e},s=1;s<=t;++s)if(e[s]==i&&s!=t)++a;else{if(!i&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(i),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(i);a=1,i=e[s]}return{c:n.subarray(0,r),n:t}},Xr=function(e,t){for(var n=0,r=0;r>8,e[i+2]=e[i]^255,e[i+3]=e[i+1]^255;for(var a=0;a4&&!E[br[O-1]];--O);var k=l+5<<3,ee=Xr(i,jr)+Xr(a,Mr)+o,A=Xr(i,f)+Xr(a,h)+o+14+3*O+Xr(C,E)+2*C[16]+3*C[17]+7*C[18];if(c>=0&&k<=ee&&k<=A)return Zr(t,u,e.subarray(c,c+l));var j,M,te,N;if(Gr(t,u,1+(A15&&(Gr(t,u,ae[w]>>5&127),u+=ae[w]>>12)}}else j=Nr,M=jr,te=Fr,N=Mr;for(var w=0;w255){var oe=P>>18&31;Kr(t,u,j[oe+257]),u+=M[oe+257],oe>7&&(Gr(t,u,P>>23&31),u+=vr[oe]);var F=P&31;Kr(t,u,te[F]),u+=N[F],F>3&&(Kr(t,u,P>>5&8191),u+=yr[F])}else Kr(t,u,j[P]),u+=M[P]}return Kr(t,u,j[256]),u+M[256]},$r=new _r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),ei=new W(0),ti=function(e,t,n,r,i,a){var o=a.z||e.length,s=new W(r+o+5*(1+Math.ceil(o/7e3))+i),c=s.subarray(r,s.length-i),l=a.l,u=(a.r||0)&7;if(t){u&&(c[0]=a.r>>3);for(var d=$r[t-1],f=d>>13,p=d&8191,m=(1<7e3||E>24576)&&(j>423||!l)){u=Qr(e,c,0,b,x,S,w,E,O,T-O,u),E=C=w=0,O=T;for(var M=0;M<286;++M)x[M]=0;for(var M=0;M<30;++M)S[M]=0}var te=2,N=0,ne=p,re=ee-A&32767;if(j>2&&k==y(T-re))for(var ie=Math.min(f,j)-1,ae=Math.min(32767,T),oe=Math.min(258,j);re<=ae&&--ne&&ee!=A;){if(e[T+te]==e[T+te-re]){for(var P=0;Pte){if(te=P,N=re,P>ie)break;for(var F=Math.min(re,P-2),se=0,M=0;Mse&&(se=le,A=ce)}}}ee=A,A=h[ee],re+=ee-A&32767}if(N){b[E++]=268435456|wr[te]<<18|Dr[N];var ue=wr[te]&31,de=Dr[N]&31;w+=vr[ue]+yr[de],++x[257+ue],++S[de],D=T+te,++C}else b[E++]=e[T],++x[e[T]]}}for(T=Math.max(T,D);T=o&&(c[u/8|0]=l,fe=o),u=Zr(c,u+1,e.subarray(T,fe))}a.i=o}return Vr(s,0,r+Br(u)+i)},ni=(function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var n=t,r=9;--r;)n=(n&1&&-306674912)^n>>>1;e[t]=n}return e})(),ri=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r>>8;e=n},d:function(){return~e}}},ii=function(e,t,n,r,i){if(!i&&(i={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),o=new W(a.length+e.length);o.set(a),o.set(e,a.length),e=o,i.w=a.length}return ti(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,r,i)},ai=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n},oi=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},si=function(e,t){return((e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31)&&Ur(6,`invalid zlib data`),(e[1]>>5&1)==+!t&&Ur(6,`invalid zlib data: `+(e[1]&32?`need`:`unexpected`)+` dictionary`),(e[1]>>3&4)+2};function ci(e,t){return ii(e,t||{},0,0)}function li(e,t){return Wr(e.subarray(si(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}var ui=function(e,t,n,r){for(var i in e){var a=e[i],o=t+i,s=r;Array.isArray(a)&&(s=ai(r,a[1]),a=a[0]),a instanceof W?n[o]=[a,s]:(n[o+=`/`]=[new W(0),s],ui(a,o,n,r))}},di=typeof TextEncoder<`u`&&new TextEncoder,fi=typeof TextDecoder<`u`&&new TextDecoder;try{fi.decode(ei,{stream:!0})}catch{}function pi(e,t){if(t){for(var n=new W(e.length),r=0;r>1)),o=0,s=function(e){a[o++]=e},r=0;ra.length){var c=new W(o+8+(i-r<<1));c.set(a),a=c}var l=e.charCodeAt(r);l<128||t?s(l):l<2048?(s(192|l>>6),s(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|e.charCodeAt(++r)&1023,s(240|l>>18),s(128|l>>12&63),s(128|l>>6&63),s(128|l&63)):(s(224|l>>12),s(128|l>>6&63),s(128|l&63))}return Vr(a,0,o)}var mi=function(e){var t=0;if(e)for(var n in e){var r=e[n].length;r>65535&&Ur(9),t+=r+4}return t},hi=function(e,t,n,r,i,a,o,s){var c=r.length,l=n.extra,u=s&&s.length,d=mi(l);oi(e,t,o==null?67324752:33639248),t+=4,o!=null&&(e[t++]=20,e[t++]=n.os),e[t]=20,t+=2,e[t++]=n.flag<<1|(a<0&&8),e[t++]=i&&8,e[t++]=n.compression&255,e[t++]=n.compression>>8;var f=new Date(n.mtime==null?Date.now():n.mtime),p=f.getFullYear()-1980;if((p<0||p>119)&&Ur(10),oi(e,t,p<<25|f.getMonth()+1<<21|f.getDate()<<16|f.getHours()<<11|f.getMinutes()<<5|f.getSeconds()>>1),t+=4,a!=-1&&(oi(e,t,n.crc),oi(e,t+4,a<0?-a-2:a),oi(e,t+8,n.size)),oi(e,t+12,c),oi(e,t+14,d),t+=16,o!=null&&(oi(e,t,u),oi(e,t+6,n.attrs),oi(e,t+10,o),t+=14),e.set(r,t),t+=c,d)for(var m in l){var h=l[m],g=h.length;oi(e,t,+m),oi(e,t+2,g),e.set(h,t+4),t+=4+g}return u&&(e.set(s,t),t+=u),t},gi=function(e,t,n,r,i){oi(e,t,101010256),oi(e,t+8,n),oi(e,t+10,n),oi(e,t+12,r),oi(e,t+16,i)};function _i(e,t){t||={};var n={},r=[];ui(e,``,n,t);var i=0,a=0;for(var o in n){var s=n[o],c=s[0],l=s[1],u=l.level==0?0:8,d=pi(o),f=d.length,p=l.comment,m=p&&pi(p),h=m&&m.length,g=mi(l.extra);f>65535&&Ur(11);var _=u?ci(c,l):c,v=_.length,y=ri();y.p(c),r.push(ai(l,{size:c.length,crc:y.d(),c:_,f:d,m,u:f!=o.length||m&&p.length!=h,o:i,compression:u})),i+=30+f+g+v,a+=76+2*(f+g)+(h||0)+v}for(var b=new W(a+22),x=i,S=a-i,C=0;C>3,r=65537,i=16384,o=i-1,s=65535,c=2.7182818**2.2;function l(e,n){let r=0;for(let i=0;i>3]&1<<(i&7))&&(n[r++]=i);let i=r-1;for(;r>n&(1<0;--e){let n=t+p[e]>>1;p[e]=t,t=n}for(let t=0;t0&&(e[t]=n|p[n]++<<6)}}function h(e,t,n,r,i,a){let o=t,s=0,c=0;for(;r<=i;r++){if(o.value-t.value>n)return!1;f(6,s,c,e,o);let l=d.l;if(s=d.c,c=d.lc,a[r]=l,l==63){if(o.value-t.value>n)throw Error(`Something wrong with hufUnpackEncTable`);f(8,s,c,e,o);let l=d.l+6;if(s=d.c,c=d.lc,r+l>i+1)throw Error(`Something wrong with hufUnpackEncTable`);for(;l--;)a[r++]=0;r--}else if(l>=59){let e=l-59+2;if(r+e>i+1)throw Error(`Something wrong with hufUnpackEncTable`);for(;e--;)a[r++]=0;r--}}m(a)}function g(e){return e&63}function _(e){return e>>6}function v(e,t,n,r){for(;t<=n;t++){let n=_(e[t]),i=g(e[t]);if(n>>i)throw Error(`Invalid table entry`);if(i>14){let e=r[n>>i-14];if(e.len)throw Error(`Invalid table entry`);if(e.lit++,e.p){let t=e.p;e.p=Array(e.lit);for(let n=0;n0;a--){let a=r[(n<<14-i)+e];if(a.len||a.p)throw Error(`Invalid table entry`);a.len=i,a.lit=t,e++}}}return!0}let y={c:0,lc:0};function b(e,t,n,r){e=e<<8|ye(n,r),t+=8,y.c=e,y.lc=t}let x={c:0,lc:0};function S(e,t,n,r,i,a,o,s,c){if(e==t){r<8&&(b(n,r,i,a),n=y.c,r=y.lc),r-=8;let e=n>>r;if(e=new Uint8Array([e])[0],s.value+e>c)return!1;let t=o[s.value-1];for(;e-- >0;)o[s.value++]=t}else if(s.value32767?t-65536:t}let T={a:0,b:0};function E(e,t){let n=w(e),r=w(t),i=n+(r&1)+(r>>1),a=i,o=i-r;T.a=a,T.b=o}function D(e,t){let n=C(e),r=C(t),i=n-(r>>1)&s;T.a=r+i-32768&s,T.b=i}function O(e,t,n,r,i,a,o){let s=o<16384,c=n>i?i:n,l=1,u,d;for(;l<=c;)l<<=1;for(l>>=1,u=l,l>>=1;l>=1;){d=0;let o=d+a*(i-u),c=a*l,f=a*u,p=r*l,m=r*u,h,g,_,v;for(;d<=o;d+=f){let i=d,a=d+r*(n-u);for(;i<=a;i+=m){let n=i+p,r=i+c,a=r+p;s?(E(e[i+t],e[r+t]),h=T.a,_=T.b,E(e[n+t],e[a+t]),g=T.a,v=T.b,E(h,g),e[i+t]=T.a,e[n+t]=T.b,E(_,v),e[r+t]=T.a,e[a+t]=T.b):(D(e[i+t],e[r+t]),h=T.a,_=T.b,D(e[n+t],e[a+t]),g=T.a,v=T.b,D(h,g),e[i+t]=T.a,e[n+t]=T.b,D(_,v),e[r+t]=T.a,e[a+t]=T.b)}if(n&l){let n=i+c;s?E(e[i+t],e[n+t]):D(e[i+t],e[n+t]),h=T.a,e[n+t]=T.b,e[i+t]=h}}if(i&l){let i=d,a=d+r*(n-u);for(;i<=a;i+=m){let n=i+p;s?E(e[i+t],e[n+t]):D(e[i+t],e[n+t]),h=T.a,e[n+t]=T.b,e[i+t]=h}}u=l,l>>=1}return d}function k(e,t,n,r,i,a,s,c,l){let u=0,d=0,f=s,p=Math.trunc(r.value+(i+7)/8);for(;r.value=14;){let i=t[u>>d-14&o];if(i.len)d-=i.len,S(i.lit,a,u,d,n,r,c,l,f),u=x.c,d=x.lc;else{if(!i.p)throw Error(`hufDecode issues`);let t;for(t=0;t=o&&_(e[i.p[t]])==(u>>d-o&(1<>=m,d-=m;d>0;){let e=t[u<<14-d&o];if(e.len)d-=e.len,S(e.lit,a,u,d,n,r,c,l,f),u=x.c,d=x.lc;else throw Error(`hufDecode issues`)}return!0}function ee(e,t,n,a,o,s){let c={value:0},l=n.value,d=ve(t,n),f=ve(t,n);n.value+=4;let p=ve(t,n);if(n.value+=4,d<0||d>=r||f<0||f>=r)throw Error(`Something wrong with HUF_ENCSIZE`);let m=Array(r),g=Array(i);if(u(g),h(e,n,a-(n.value-l),d,f,m),p>8*(a-(n.value-l)))throw Error(`Something wrong with hufUncompress`);v(m,d,f,g),k(m,g,e,n,p,f,s,o,c)}function A(e,t,n){for(let r=0;ra||(t[i++]=e[n++],i>a));)t[i++]=e[r++]}function te(e){let t=e.byteLength,n=[],r=0,i=new DataView(e);for(;t>0;){let e=i.getInt8(r++);if(e<0){let a=-e;t-=a+1;for(let e=0;e>8==255?i+=r&255:(n[i]=r,i++),e.value++}function ie(e,t){t[0]=z(e[0]),t[1]=z(e[1]),t[2]=z(e[5]),t[3]=z(e[6]),t[4]=z(e[14]),t[5]=z(e[15]),t[6]=z(e[27]),t[7]=z(e[28]),t[8]=z(e[2]),t[9]=z(e[4]),t[10]=z(e[7]),t[11]=z(e[13]),t[12]=z(e[16]),t[13]=z(e[26]),t[14]=z(e[29]),t[15]=z(e[42]),t[16]=z(e[3]),t[17]=z(e[8]),t[18]=z(e[12]),t[19]=z(e[17]),t[20]=z(e[25]),t[21]=z(e[30]),t[22]=z(e[41]),t[23]=z(e[43]),t[24]=z(e[9]),t[25]=z(e[11]),t[26]=z(e[18]),t[27]=z(e[24]),t[28]=z(e[31]),t[29]=z(e[40]),t[30]=z(e[44]),t[31]=z(e[53]),t[32]=z(e[10]),t[33]=z(e[19]),t[34]=z(e[23]),t[35]=z(e[32]),t[36]=z(e[39]),t[37]=z(e[45]),t[38]=z(e[52]),t[39]=z(e[54]),t[40]=z(e[20]),t[41]=z(e[22]),t[42]=z(e[33]),t[43]=z(e[38]),t[44]=z(e[46]),t[45]=z(e[51]),t[46]=z(e[55]),t[47]=z(e[60]),t[48]=z(e[21]),t[49]=z(e[34]),t[50]=z(e[37]),t[51]=z(e[47]),t[52]=z(e[50]),t[53]=z(e[56]),t[54]=z(e[59]),t[55]=z(e[61]),t[56]=z(e[35]),t[57]=z(e[36]),t[58]=z(e[48]),t[59]=z(e[49]),t[60]=z(e[57]),t[61]=z(e[58]),t[62]=z(e[62]),t[63]=z(e[63])}function ae(e){let t=.5*Math.cos(3.14159/4),n=.5*Math.cos(3.14159/16),r=.5*Math.cos(3.14159/8),i=.5*Math.cos(3*3.14159/16),a=.5*Math.cos(5*3.14159/16),o=.5*Math.cos(3*3.14159/8),s=.5*Math.cos(7*3.14159/16),c=[,,,,],l=[,,,,],u=[,,,,],d=[,,,,];for(let f=0;f<8;++f){let p=f*8;c[0]=r*e[p+2],c[1]=o*e[p+2],c[2]=r*e[p+6],c[3]=o*e[p+6],l[0]=n*e[p+1]+i*e[p+3]+a*e[p+5]+s*e[p+7],l[1]=i*e[p+1]-s*e[p+3]-n*e[p+5]-a*e[p+7],l[2]=a*e[p+1]-n*e[p+3]+s*e[p+5]+i*e[p+7],l[3]=s*e[p+1]-a*e[p+3]+i*e[p+5]-n*e[p+7],u[0]=t*(e[p+0]+e[p+4]),u[3]=t*(e[p+0]-e[p+4]),u[1]=c[0]+c[3],u[2]=c[1]-c[2],d[0]=u[0]+u[1],d[1]=u[3]+u[2],d[2]=u[3]-u[2],d[3]=u[0]-u[1],e[p+0]=d[0]+l[0],e[p+1]=d[1]+l[1],e[p+2]=d[2]+l[2],e[p+3]=d[3]+l[3],e[p+4]=d[3]-l[3],e[p+5]=d[2]-l[2],e[p+6]=d[1]-l[1],e[p+7]=d[0]-l[0]}for(let f=0;f<8;++f)c[0]=r*e[16+f],c[1]=o*e[16+f],c[2]=r*e[48+f],c[3]=o*e[48+f],l[0]=n*e[8+f]+i*e[24+f]+a*e[40+f]+s*e[56+f],l[1]=i*e[8+f]-s*e[24+f]-n*e[40+f]-a*e[56+f],l[2]=a*e[8+f]-n*e[24+f]+s*e[40+f]+i*e[56+f],l[3]=s*e[8+f]-a*e[24+f]+i*e[40+f]-n*e[56+f],u[0]=t*(e[f]+e[32+f]),u[3]=t*(e[f]-e[32+f]),u[1]=c[0]+c[3],u[2]=c[1]-c[2],d[0]=u[0]+u[1],d[1]=u[3]+u[2],d[2]=u[3]-u[2],d[3]=u[0]-u[1],e[0+f]=d[0]+l[0],e[8+f]=d[1]+l[1],e[16+f]=d[2]+l[2],e[24+f]=d[3]+l[3],e[32+f]=d[3]-l[3],e[40+f]=d[2]-l[2],e[48+f]=d[1]-l[1],e[56+f]=d[0]-l[0]}function oe(e){for(let t=0;t<64;++t){let n=e[0][t],r=e[1][t],i=e[2][t];e[0][t]=n+1.5747*i,e[1][t]=n-.1873*r-.4682*i,e[2][t]=n+1.8556*r}}function P(e,t,n){for(let r=0;r<64;++r)t[n+r]=be.toHalfFloat(F(e[r]))}function F(e){return e<=1?Math.sign(e)*Math.abs(e)**2.2:Math.sign(e)*c**(Math.abs(e)-1)}function se(e){return new DataView(e.array.buffer,e.offset.value,e.size)}function ce(e){let t=e.viewer.buffer.slice(e.offset.value,e.offset.value+e.size),n=new Uint8Array(te(t)),r=new Uint8Array(n.length);return j(n),M(n,r),new DataView(r.buffer)}function le(e){let t=li(e.array.slice(e.offset.value,e.offset.value+e.size)),n=new Uint8Array(t.length);return j(t),M(t,n),new DataView(n.buffer)}function ue(e){let r=e.viewer,i={value:e.offset.value},a=new Uint16Array(e.columns*e.lines*(e.inputChannels.length*e.type)),o=new Uint8Array(n),s=0,c=Array(e.inputChannels.length);for(let t=0,n=e.inputChannels.length;t=n)throw Error(`Something is wrong with PIZ_COMPRESSION BITMAP_SIZE`);if(u<=d)for(let e=0;e0;){let e=pe(t.buffer,n),r=I(t,n),i=r>>2&3,s=(r>>4)-1,c=new Int8Array([s])[0],l=I(t,n);a.push({name:e,index:c,type:l,compression:i}),o-=e.length+3}let s=We.channels,c=Array(e.inputChannels.length);for(let t=0;t=0&&(l.idx[r.index]=t),e.offset=t)}}let u,d,f;if(i.acCompressedSize>0)switch(i.acCompression){case 0:u=new Uint16Array(i.totalAcUncompressedCount),ee(e.array,t,n,i.acCompressedSize,u,i.totalAcUncompressedCount);break;case 1:let r=li(e.array.slice(n.value,n.value+i.totalAcUncompressedCount));u=new Uint16Array(r.buffer),n.value+=i.totalAcUncompressedCount;break}if(i.dcCompressedSize>0){let t={array:e.array,offset:n,size:i.dcCompressedSize};d=new Uint16Array(le(t).buffer),n.value+=i.dcCompressedSize}i.rleRawSize>0&&(f=te(li(e.array.slice(n.value,n.value+i.rleCompressedSize)).buffer),n.value+=i.rleCompressedSize);let p=0,m=Array(c.length);for(let e=0;e>10,n=e&1023;return(e>>15?-1:1)*(t?t===31?n?NaN:1/0:2**(t-15)*(1+n/1024):n/1024*6103515625e-14)}function Se(e,t){let n=e.getUint16(t.value,!0);return t.value+=2,n}function Ce(e,t){return z(Se(e,t))}function we(e,t,n,r){let i=n.value,a=[];for(;n.value>4]}}function Ae(e,t){return[L(e,t),L(e,t)]}function je(e,t){return[L(e,t),L(e,t),L(e,t)]}function Me(e,t,n,r,i){if(r===`string`||r===`stringvector`||r===`iccProfile`)return me(t,n,i);if(r===`chlist`)return we(e,t,n,i);if(r===`chromaticities`)return Te(e,n);if(r===`compression`)return Ee(e,n);if(r===`box2i`)return De(e,n);if(r===`envmap`)return Oe(e,n);if(r===`tiledesc`)return ke(e,n);if(r===`lineOrder`)return B(e,n);if(r===`float`)return L(e,n);if(r===`v2f`)return Ae(e,n);if(r===`v3f`)return je(e,n);if(r===`int`)return _e(e,n);if(r===`rational`)return he(e,n);if(r===`timecode`)return ge(e,n);if(r===`preview`)return n.value+=i,`skipped`;n.value+=i}function Ne(e,t){let n=Math.log2(e);return t==`ROUND_DOWN`?Math.floor(n):Math.ceil(n)}function Pe(e,t,n){let r=0;switch(e.levelMode){case`ONE_LEVEL`:r=1;break;case`MIPMAP_LEVELS`:r=Ne(Math.max(t,n),e.roundingMode)+1;break;case`RIPMAP_LEVELS`:throw Error(`THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.`)}return r}function Fe(e,t,n,r){let i=Array(e);for(let a=0;ae.width?e.width-a:e.blockWidth,e.lines=o+e.blockHeight>e.height?e.height-o:e.blockHeight;let s=e.columns*e.totalBytes,c=e.sizee.height?e.height-i:e.blockHeight;let a=e.columns*e.totalBytes,o=e.size=e.height)continue;let c=t*a,l=(e.height-1-s)*e.outLineWidth;for(let t=0;te:o.scanOrder=e=>o.height-1-e,o.outputChannels==4?(o.format=re,o.colorSpace=a):(o.format=lt,o.colorSpace=``),e.spec.singleTile){o.blockHeight=e.tiles.ySize,o.blockWidth=e.tiles.xSize;let n=Pe(e.tiles,o.width,o.height),i=Fe(n,o.width,e.tiles.xSize,e.tiles.roundingMode),a=Fe(n,o.height,e.tiles.ySize,e.tiles.roundingMode);o.tileCount=i[0]*a[0];for(let e=0;e(i=s.indexOf(` -`))&&a=e.byteLength||!(l=n(e)))&&t(1,`no header found`),(u=l.match(r))||t(3,`bad initial token`),c.valid|=1,c.programtype=u[1],c.string+=l+` -`;l=n(e),!1!==l;){if(c.string+=l+` -`,l.charAt(0)===`#`){c.comments+=l+` -`;continue}if((u=l.match(i))&&(c.gamma=parseFloat(u[1])),(u=l.match(a))&&(c.exposure=parseFloat(u[1])),(u=l.match(o))&&(c.valid|=2,c.format=u[1]),(u=l.match(s))&&(c.valid|=4,c.height=parseInt(u[1],10),c.width=parseInt(u[2],10)),c.valid&2&&c.valid&4)break}return c.valid&2||t(3,`missing format specifier`),c.valid&4||t(3,`missing image size specifier`),c},i=function(e,n,r){let i=n;if(i<8||i>32767||e[0]!==2||e[1]!==2||e[2]&128)return new Uint8Array(e);i!==(e[2]<<8|e[3])&&t(3,`wrong scanline width`);let a=new Uint8Array(4*n*r);a.length||t(4,`unable to allocate buffer space`);let o=0,s=0,c=4*i,l=new Uint8Array(4),u=new Uint8Array(c),d=r;for(;d>0&&se.byteLength&&t(1),l[0]=e[s++],l[1]=e[s++],l[2]=e[s++],l[3]=e[s++],(l[0]!=2||l[1]!=2||(l[2]<<8|l[3])!=i)&&t(3,`bad rgbe scanline format`);let n=0,r;for(;n128;if(i&&(r-=128),(r===0||n+r>c)&&t(3,`bad scanline data`),i){let t=e[s++];for(let e=0;e.9&&(r.visible=!1)),this.axis===`Y`&&(K.setFromEuler(Fi.set(0,0,Math.PI/2)),r.quaternion.copy(t).multiply(K),Math.abs(q.copy(Ui).applyQuaternion(t).dot(this.eye))>.9&&(r.visible=!1)),this.axis===`Z`&&(K.setFromEuler(Fi.set(0,Math.PI/2,0)),r.quaternion.copy(t).multiply(K),Math.abs(q.copy(Wi).applyQuaternion(t).dot(this.eye))>.9&&(r.visible=!1)),this.axis===`XYZE`&&(K.setFromEuler(Fi.set(0,Math.PI/2,0)),q.copy(this.rotationAxis),r.quaternion.setFromRotationMatrix(Li.lookAt(Ii,q,Ui)),r.quaternion.multiply(K),r.visible=this.dragging),this.axis===`E`&&(r.visible=!1)):r.name===`START`?(r.position.copy(this.worldPositionStart),r.visible=this.dragging):r.name===`END`?(r.position.copy(this.worldPosition),r.visible=this.dragging):r.name===`DELTA`?(r.position.copy(this.worldPositionStart),r.quaternion.copy(this.worldQuaternionStart),xi.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),xi.applyQuaternion(this.worldQuaternionStart.clone().invert()),r.scale.copy(xi),r.visible=this.dragging):(r.quaternion.copy(t),this.dragging?r.position.copy(this.worldPositionStart):r.position.copy(this.worldPosition),this.axis&&(r.visible=this.axis.search(r.name)!==-1));continue}if(r.quaternion.copy(t),this.mode===`translate`||this.mode===`scale`){let e=.99,n=.2;r.name===`X`&&Math.abs(q.copy(Hi).applyQuaternion(t).dot(this.eye))>e&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name===`Y`&&Math.abs(q.copy(Ui).applyQuaternion(t).dot(this.eye))>e&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name===`Z`&&Math.abs(q.copy(Wi).applyQuaternion(t).dot(this.eye))>e&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name===`XY`&&Math.abs(q.copy(Wi).applyQuaternion(t).dot(this.eye))Math.PI&&(r-=ia),i<-Math.PI?i+=ia:i>Math.PI&&(i-=ia),r<=i?this._spherical.theta=Math.max(r,Math.min(i,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(r+i)/2?Math.max(r,this._spherical.theta):Math.min(i,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let a=!1;if(this.enableDamping?this._currentScale=w.lerp(this._currentScale,this._scale,this.dampingFactor):this._currentScale=this._scale,this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let e=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._currentScale),a=Math.abs(e-this._spherical.radius)>aa*100}if(J.setFromSpherical(this._spherical),J.applyQuaternion(this._quatInverse),t.copy(this.target).add(J),this.object.parent?this.object.parent.worldToLocal(t):this.object.position.copy(t),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let e=null;if(this.object.isPerspectiveCamera){let t=J.length();e=this._clampDistance(t*this._currentScale);let n=t-e;this.object.position.addScaledVector(this._dollyDirection,n),this.object.updateMatrixWorld(),a=Math.abs(n)>aa}else if(this.object.isOrthographicCamera){let t=new n(this._mouse.x,this._mouse.y,0);t.unproject(this.object);let r=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._currentScale)),this.object.updateProjectionMatrix(),a=Math.abs(r-this.object.zoom)>aa;let i=new n(this._mouse.x,this._mouse.y,0);i.unproject(this.object),this.object.position.sub(i).add(t),this.object.updateMatrixWorld(),e=J.length()}else console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.`),this.zoomToCursor=!1;e!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(e).add(this.object.position):(ta.origin.copy(this.object.position),ta.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(ta.direction))aa&&(this.object.updateProjectionMatrix(),a=!0)}return this._scale=1,a||this._lastPosition.distanceToSquared(this.object.position)>aa||8*(1-this._lastQuaternion.dot(this.object.quaternion))>aa||this._lastTargetPosition.distanceToSquared(this.target)>aa?(this.dispatchEvent(Zi),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),this._lastIsDamping=!0,this._isDamping=!0,!0):(this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),this.state===Y.NONE&&(this._lastIsDamping=this._isDamping,this._isDamping=!1),this._lastIsDamping&&!this._isDamping&&this.state===Y.NONE&&(this._isDamping=!1,this._lastIsDamping=!1,this.dispatchEvent(ea)),this._performCursorZoom=!1,!1)}_getAutoRotationAngle(e){return e===null?ia/60/60*this.autoRotateSpeed:ia/60*this.autoRotateSpeed*e}_getZoomScale(e){let t=Math.abs(e*.01);return .95**(this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){J.setFromMatrixColumn(t,0),J.multiplyScalar(-e),this._panOffset.add(J)}_panUp(e,t){this.screenSpacePanning===!0?J.setFromMatrixColumn(t,1):(J.setFromMatrixColumn(t,0),J.crossVectors(this.object.up,J)),J.multiplyScalar(e),this._panOffset.add(J)}_pan(e,t){let n=this.domElement;if(this.object.isPerspectiveCamera){this.object.getWorldPosition(J).sub(this.target);let r=J.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*r/n.clientHeight,this.object.matrixWorld),this._panUp(2*t*r/n.clientHeight,this.object.matrixWorld)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrixWorld),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrixWorld)):(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.`),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let n=this.domElement.getBoundingClientRect(),r=e-n.left,i=t-n.top,a=n.width,o=n.height;this._mouse.x=r/a*2-1,this._mouse.y=-(i/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(ia*this._rotateDelta.x/t.clientHeight),this._rotateUp(ia*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateUp(ia*this.rotateSpeed/this.domElement.clientHeight):this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateUp(-ia*this.rotateSpeed/this.domElement.clientHeight):this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateLeft(ia*this.rotateSpeed/this.domElement.clientHeight):this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateLeft(-ia*this.rotateSpeed/this.domElement.clientHeight):this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateStart.set(n,r)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panStart.set(n,r)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyStart.set(0,i)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateEnd.set(n,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(ia*this._rotateDelta.x/t.clientHeight),this._rotateUp(ia*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panEnd.set(n,r)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyEnd.set(0,i),this._dollyDelta.set(0,(this._dollyEnd.y/this._dollyStart.y)**+this.zoomSpeed),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t4?n=e.array[i*e.itemSize+t]:(t===0?n=e.getX(i):t===1?n=e.getY(i):t===2?n=e.getZ(i):t===3&&(n=e.getW(i)),e.normalized===!0&&(n=w.normalize(n,e.array))),r.min[t]=Math.min(r.min[t],n),r.max[t]=Math.max(r.max[t],n)}return r}function Ua(e){return Math.ceil(e/4)*4}function Wa(e,t=0){let n=Ua(e.byteLength);if(n!==e.byteLength){let r=new Uint8Array(n);if(r.set(new Uint8Array(e)),t!==0)for(let i=e.byteLength;i`u`&&typeof OffscreenCanvas<`u`?new OffscreenCanvas(1,1):document.createElement(`canvas`)}function Ka(e,t){if(e.toBlob!==void 0)return new Promise(n=>e.toBlob(n,t));let n;return t===`image/jpeg`?n=.92:t===`image/webp`&&(n=.8),e.convertToBlob({type:t,quality:n})}var qa=class{constructor(){this.plugins=[],this.options={},this.pending=[],this.buffers=[],this.byteOffset=0,this.buffers=[],this.nodeMap=new Map,this.skins=[],this.extensionsUsed={},this.extensionsRequired={},this.uids=new Map,this.uid=0,this.json={asset:{version:`2.0`,generator:`THREE.GLTFExporter r`+d}},this.cache={meshes:new Map,attributes:new Map,attributesNormalized:new Map,materials:new Map,textures:new Map,images:new Map}}setPlugins(e){this.plugins=e}async write(e,t,n={}){this.options=Object.assign({binary:!1,trs:!1,onlyVisible:!0,maxTextureSize:1/0,animations:[],includeCustomExtensions:!1},n),this.options.animations.length>0&&(this.options.trs=!0),this.processInput(e),await Promise.all(this.pending);let r=this,i=r.buffers,a=r.json;n=r.options;let o=r.extensionsUsed,s=r.extensionsRequired,c=new Blob(i,{type:`application/octet-stream`}),l=Object.keys(o),u=Object.keys(s);if(l.length>0&&(a.extensionsUsed=l),u.length>0&&(a.extensionsRequired=u),a.buffers&&a.buffers.length>0&&(a.buffers[0].byteLength=c.size),n.binary===!0){let e=new FileReader;e.readAsArrayBuffer(c),e.onloadend=function(){let n=Wa(e.result),r=new DataView(new ArrayBuffer(Ia));r.setUint32(0,n.byteLength,!0),r.setUint32(4,Ra,!0);let i=Wa(Ba(JSON.stringify(a)),32),o=new DataView(new ArrayBuffer(Ia));o.setUint32(0,i.byteLength,!0),o.setUint32(4,La,!0);let s=new ArrayBuffer(Na),c=new DataView(s);c.setUint32(0,Pa,!0),c.setUint32(4,Fa,!0);let l=Na+o.byteLength+i.byteLength+r.byteLength+n.byteLength;c.setUint32(8,l,!0);let u=new Blob([s,o,i,r,n],{type:`application/octet-stream`}),d=new FileReader;d.readAsArrayBuffer(u),d.onloadend=function(){t(d.result)}}}else if(a.buffers&&a.buffers.length>0){let e=new FileReader;e.readAsDataURL(c),e.onloadend=function(){let n=e.result;a.buffers[0].uri=n,t(a)}}else t(a)}serializeUserData(e,t){if(Object.keys(e.userData).length===0)return;let n=this.options,r=this.extensionsUsed;try{let i=JSON.parse(JSON.stringify(e.userData));if(n.includeCustomExtensions&&i.gltfExtensions){t.extensions===void 0&&(t.extensions={});for(let e in i.gltfExtensions)t.extensions[e]=i.gltfExtensions[e],r[e]=!0;delete i.gltfExtensions}Object.keys(i).length>0&&(t.extras=i)}catch(t){console.warn(`THREE.GLTFExporter: userData of '`+e.name+`' won't be serialized because of JSON.stringify error - `+t.message)}}getUID(e,t=!1){if(this.uids.has(e)===!1){let t=new Map;t.set(!0,this.uid++),t.set(!1,this.uid++),this.uids.set(e,t)}return this.uids.get(e).get(t)}isNormalizedNormalAttribute(e){if(this.cache.attributesNormalized.has(e))return!1;let t=new n;for(let n=0,r=e.count;n5e-4)return!1;return!0}createNormalizedNormalAttribute(e){let t=this.cache;if(t.attributesNormalized.has(e))return t.attributesNormalized.get(e);let r=e.clone(),i=new n;for(let e=0,t=r.count;e4?r=e.array[i*e.itemSize+n]:(n===0?r=e.getX(i):n===1?r=e.getY(i):n===2?r=e.getZ(i):n===3&&(r=e.getW(i)),e.normalized===!0&&(r=w.normalize(r,e.array))),t===X.FLOAT?l.setFloat32(u,r,!0):t===X.INT?l.setInt32(u,r,!0):t===X.UNSIGNED_INT?l.setUint32(u,r,!0):t===X.SHORT?l.setInt16(u,r,!0):t===X.UNSIGNED_SHORT?l.setUint16(u,r,!0):t===X.BYTE?l.setInt8(u,r):t===X.UNSIGNED_BYTE&&l.setUint8(u,r),u+=o}u%s!==0&&(u+=s-u%s)}let d={buffer:this.processBuffer(l.buffer),byteOffset:this.byteOffset,byteLength:c};return i!==void 0&&(d.target=i),i===X.ARRAY_BUFFER&&(d.byteStride=s),this.byteOffset+=c,a.bufferViews.push(d),{id:a.bufferViews.length-1,byteLength:0}}processBufferViewImage(e){let t=this,n=t.json;return n.bufferViews||=[],new Promise(function(r){let i=new FileReader;i.readAsArrayBuffer(e),i.onloadend=function(){let e=Wa(i.result),a={buffer:t.processBuffer(e),byteOffset:t.byteOffset,byteLength:e.byteLength};t.byteOffset+=e.byteLength,r(n.bufferViews.push(a)-1)}})}processAccessor(e,t,n,r){let i=this.json,a={1:`SCALAR`,2:`VEC2`,3:`VEC3`,4:`VEC4`,9:`MAT3`,16:`MAT4`},o;if(e.array.constructor===Float32Array)o=X.FLOAT;else if(e.array.constructor===Int32Array)o=X.INT;else if(e.array.constructor===Uint32Array)o=X.UNSIGNED_INT;else if(e.array.constructor===Int16Array)o=X.SHORT;else if(e.array.constructor===Uint16Array)o=X.UNSIGNED_SHORT;else if(e.array.constructor===Int8Array)o=X.BYTE;else if(e.array.constructor===Uint8Array)o=X.UNSIGNED_BYTE;else throw Error(`THREE.GLTFExporter: Unsupported bufferAttribute component type: `+e.array.constructor.name);if(n===void 0&&(n=0),(r===void 0||r===1/0)&&(r=e.count),r===0)return null;let s=Ha(e,n,r),c;t!==void 0&&(c=e===t.index?X.ELEMENT_ARRAY_BUFFER:X.ARRAY_BUFFER);let l=this.processBufferView(e,o,n,r,c),u={bufferView:l.id,byteOffset:l.byteOffset,componentType:o,count:r,max:s.max,min:s.min,type:a[e.itemSize]};return e.normalized===!0&&(u.normalized=!0),i.accessors||=[],i.accessors.push(u)-1}processImage(e,t,n,r=`image/png`){if(e!==null){let i=this,a=i.cache,o=i.json,s=i.options,c=i.pending;a.images.has(e)||a.images.set(e,{});let l=a.images.get(e),u=r+`:flipY/`+n.toString();if(l[u]!==void 0)return l[u];o.images||=[];let d={mimeType:r},f=Ga();f.width=Math.min(e.width,s.maxTextureSize),f.height=Math.min(e.height,s.maxTextureSize);let p=f.getContext(`2d`,{willReadFrequently:!0});if(n===!0&&(p.translate(0,f.height),p.scale(1,-1)),e.data!==void 0){t!==1023&&console.error(`GLTFExporter: Only RGBAFormat is supported.`,t),(e.width>s.maxTextureSize||e.height>s.maxTextureSize)&&console.warn(`GLTFExporter: Image size is bigger than maxTextureSize`,e);let n=new Uint8ClampedArray(e.height*e.width*4);for(let t=0;ti.processBufferViewImage(e)).then(e=>{d.bufferView=e})):f.toDataURL===void 0?c.push(Ka(f,r).then(e=>new FileReader().readAsDataURL(e)).then(e=>{d.uri=e})):d.uri=f.toDataURL(r);let m=o.images.push(d)-1;return l[u]=m,m}else throw Error(`THREE.GLTFExporter: No valid image data found. Unable to process texture.`)}processSampler(e){let t=this.json;t.samplers||=[];let n={magFilter:Aa[e.magFilter],minFilter:Aa[e.minFilter],wrapS:Aa[e.wrapS],wrapT:Aa[e.wrapT]};return t.samplers.push(n)-1}processTexture(e){let t=this.options,n=this.cache,r=this.json;if(n.textures.has(e))return n.textures.get(e);let i={keep:!0,newTexture:null};if(this._invokeAll(function(t){t.beforeWriteTexture&&t.beforeWriteTexture(e,i)}),i.keep===!1)return null;i.newTexture!=null&&(e=i.newTexture),r.textures||=[],e instanceof f&&(e=Ea(e,t.maxTextureSize));let a=e.userData.mimeType;a===`image/webp`&&(a=`image/png`);let o={sampler:this.processSampler(e),source:this.processImage(e.image,e.format,e.flipY,a)};e.name&&(o.name=e.name),this._invokeAll(function(t){t.writeTexture&&t.writeTexture(e,o)});let s=r.textures.push(o)-1;return n.textures.set(e,s),s}processMaterial(e){let t=this.cache,n=this.json;if(t.materials.has(e))return t.materials.get(e);if(e.isShaderMaterial)return console.warn(`GLTFExporter: THREE.ShaderMaterial not supported.`),null;n.materials||=[];let r={pbrMetallicRoughness:{}};e.isMeshStandardMaterial!==!0&&e.isMeshBasicMaterial!==!0&&console.warn(`GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.`);let i=e.color.toArray().concat([e.opacity]);za(i,[1,1,1,1])||(r.pbrMetallicRoughness.baseColorFactor=i),e.isMeshStandardMaterial?(r.pbrMetallicRoughness.metallicFactor=e.metalness,r.pbrMetallicRoughness.roughnessFactor=e.roughness):(r.pbrMetallicRoughness.metallicFactor=.5,r.pbrMetallicRoughness.roughnessFactor=.5);let a=e.metalnessMap?.image?e.metalnessMap:void 0,o=e.roughnessMap?.image?e.roughnessMap:void 0;if(a||o){let e=this.buildMetalRoughTexture(a,o),t={index:this.processTexture(e),channel:e.channel};this.applyTextureTransform(t,e),r.pbrMetallicRoughness.metallicRoughnessTexture=t}if(e.map){let t={index:this.processTexture(e.map),texCoord:e.map.channel};this.applyTextureTransform(t,e.map),r.pbrMetallicRoughness.baseColorTexture=t}if(e.emissive){let t=e.emissive;if(Math.max(t.r,t.g,t.b)>0&&(r.emissiveFactor=e.emissive.toArray()),e.emissiveMap?.image){let t={index:this.processTexture(e.emissiveMap),texCoord:e.emissiveMap.channel};this.applyTextureTransform(t,e.emissiveMap),r.emissiveTexture=t}}if(e.normalMap?.image){let t={index:this.processTexture(e.normalMap),texCoord:e.normalMap.channel};e.normalScale&&e.normalScale.x!==1&&(t.scale=e.normalScale.x),this.applyTextureTransform(t,e.normalMap),r.normalTexture=t}if(e.aoMap?.image){let t={index:this.processTexture(e.aoMap),texCoord:e.aoMap.channel};e.aoMapIntensity!==1&&(t.strength=e.aoMapIntensity),this.applyTextureTransform(t,e.aoMap),r.occlusionTexture=t}e.transparent?r.alphaMode=`BLEND`:e.alphaTest>0&&(r.alphaMode=`MASK`,r.alphaCutoff=e.alphaTest),e.side===2&&(r.doubleSided=!0),e.name!==``&&(r.name=e.name),this.serializeUserData(e,r),this._invokeAll(function(t){t.writeMaterial&&t.writeMaterial(e,r)});let s=n.materials.push(r)-1;return t.materials.set(e,s),s}processMesh(e){let t={keep:!0};if(this._invokeAll(function(n){n.beforeWriteMesh&&n.beforeWriteMesh(e,t)}),t.keep!=1)return null;let n=this.cache,r=this.json,i=[e.geometry.uuid];if(Array.isArray(e.material))for(let t=0,n=e.material.length;t0){let t=[],r=[],i={};if(e.morphTargetDictionary!==void 0)for(let t in e.morphTargetDictionary)i[e.morphTargetDictionary[t]]=t;for(let a=0;a0&&(c.extras={},c.extras.targetNames=r)}let h=Array.isArray(e.material);if(h&&o.groups.length===0)return null;let g=!1;if(h&&o.index===null){let e=[];for(let t=0,n=o.attributes.position.count;t0&&(t.targets=d),o.index!==null){let r=this.getUID(o.index);(v[e].start!==void 0||v[e].count!==void 0)&&(r+=`:`+v[e].start+`:`+v[e].count),n.attributes.has(r)?t.indices=n.attributes.get(r):(t.indices=this.processAccessor(o.index,o,v[e].start,v[e].count),n.attributes.set(r,t.indices)),t.indices===null&&delete t.indices}let r=this.processMaterial(_[v[e].materialIndex]);r!==null&&(t.material=r),u.push(t)}g===!0&&o.setIndex(null),c.primitives=u,r.meshes||=[],this._invokeAll(function(t){t.writeMesh&&t.writeMesh(e,c)});let y=r.meshes.push(c)-1;return n.meshes.set(a,y),y}detectMeshQuantization(e,t){if(this.extensionsUsed[ka])return;let n;switch(t.array.constructor){case Int8Array:n=`byte`;break;case Uint8Array:n=`unsigned byte`;break;case Int16Array:n=`short`;break;case Uint16Array:n=`unsigned short`;break;default:return}t.normalized&&(n+=` normalized`);let r=e.split(`_`,1)[0];Da[r]&&Da[r].includes(n)&&(this.extensionsUsed[ka]=!0,this.extensionsRequired[ka]=!0)}processCamera(e){let t=this.json;t.cameras||=[];let n=e.isOrthographicCamera,r={type:n?`orthographic`:`perspective`};return n?r.orthographic={xmag:e.right*2,ymag:e.top*2,zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near}:r.perspective={aspectRatio:e.aspect,yfov:w.degToRad(e.fov),zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near},e.name!==``&&(r.name=e.type),t.cameras.push(r)-1}processAnimation(e,t){let n=this.json,r=this.nodeMap;n.animations||=[],e=Oa.Utils.mergeMorphTargetTracks(e.clone(),t);let i=e.tracks,a=[],s=[];for(let e=0;e0){let t=[];for(let n=0,i=e.children.length;n0&&(a.children=t)}this._invokeAll(function(t){t.writeNode&&t.writeNode(e,a)});let o=n.nodes.push(a)-1;return i.set(e,o),o}processScene(e){let t=this.json,n=this.options;t.scenes||(t.scenes=[],t.scene=0);let r={};e.name!==``&&(r.name=e.name),t.scenes.push(r);let i=[];for(let t=0,r=e.children.length;t0&&(r.nodes=i),this.serializeUserData(e,r)}processObjects(e){let t=new P;t.name=`AuxScene`;for(let n=0;n0&&this.processObjects(n);for(let e=0;e0&&(a.range=e.distance)):e.isSpotLight&&(a.type=`spot`,e.distance>0&&(a.range=e.distance),a.spot={},a.spot.innerConeAngle=(1-e.penumbra)*e.angle,a.spot.outerConeAngle=e.angle),e.decay!==void 0&&e.decay!==2&&console.warn(`THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2.`),e.target&&(e.target.parent!==e||e.target.position.x!==0||e.target.position.y!==0||e.target.position.z!==-1)&&console.warn(`THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1.`),i[this.name]||(r.extensions=r.extensions||{},r.extensions[this.name]={lights:[]},i[this.name]=!0);let o=r.extensions[this.name].lights;o.push(a),t.extensions=t.extensions||{},t.extensions[this.name]={light:o.length-1}}},Ya=class{constructor(e){this.writer=e,this.name=`KHR_materials_unlit`}writeMaterial(e,t){if(!e.isMeshBasicMaterial)return;let n=this.writer.extensionsUsed;t.extensions=t.extensions||{},t.extensions[this.name]={},n[this.name]=!0,t.pbrMetallicRoughness.metallicFactor=0,t.pbrMetallicRoughness.roughnessFactor=.9}},Xa=class{constructor(e){this.writer=e,this.name=`KHR_materials_clearcoat`}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||e.clearcoat===0)return;let n=this.writer,r=n.extensionsUsed,i={};if(i.clearcoatFactor=e.clearcoat,e.clearcoatMap){let t={index:n.processTexture(e.clearcoatMap),texCoord:e.clearcoatMap.channel};n.applyTextureTransform(t,e.clearcoatMap),i.clearcoatTexture=t}if(i.clearcoatRoughnessFactor=e.clearcoatRoughness,e.clearcoatRoughnessMap){let t={index:n.processTexture(e.clearcoatRoughnessMap),texCoord:e.clearcoatRoughnessMap.channel};n.applyTextureTransform(t,e.clearcoatRoughnessMap),i.clearcoatRoughnessTexture=t}if(e.clearcoatNormalMap){let t={index:n.processTexture(e.clearcoatNormalMap),texCoord:e.clearcoatNormalMap.channel};e.clearcoatNormalScale.x!==1&&(t.scale=e.clearcoatNormalScale.x),n.applyTextureTransform(t,e.clearcoatNormalMap),i.clearcoatNormalTexture=t}t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},Za=class{constructor(e){this.writer=e,this.name=`KHR_materials_dispersion`}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||e.dispersion===0)return;let n=this.writer.extensionsUsed,r={};r.dispersion=e.dispersion,t.extensions=t.extensions||{},t.extensions[this.name]=r,n[this.name]=!0}},Qa=class{constructor(e){this.writer=e,this.name=`KHR_materials_iridescence`}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||e.iridescence===0)return;let n=this.writer,r=n.extensionsUsed,i={};if(i.iridescenceFactor=e.iridescence,e.iridescenceMap){let t={index:n.processTexture(e.iridescenceMap),texCoord:e.iridescenceMap.channel};n.applyTextureTransform(t,e.iridescenceMap),i.iridescenceTexture=t}if(i.iridescenceIor=e.iridescenceIOR,i.iridescenceThicknessMinimum=e.iridescenceThicknessRange[0],i.iridescenceThicknessMaximum=e.iridescenceThicknessRange[1],e.iridescenceThicknessMap){let t={index:n.processTexture(e.iridescenceThicknessMap),texCoord:e.iridescenceThicknessMap.channel};n.applyTextureTransform(t,e.iridescenceThicknessMap),i.iridescenceThicknessTexture=t}t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},$a=class{constructor(e){this.writer=e,this.name=`KHR_materials_transmission`}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;let n=this.writer,r=n.extensionsUsed,i={};if(i.transmissionFactor=e.transmission,e.transmissionMap){let t={index:n.processTexture(e.transmissionMap),texCoord:e.transmissionMap.channel};n.applyTextureTransform(t,e.transmissionMap),i.transmissionTexture=t}t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},eo=class{constructor(e){this.writer=e,this.name=`KHR_materials_volume`}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;let n=this.writer,r=n.extensionsUsed,i={};if(i.thicknessFactor=e.thickness,e.thicknessMap){let t={index:n.processTexture(e.thicknessMap),texCoord:e.thicknessMap.channel};n.applyTextureTransform(t,e.thicknessMap),i.thicknessTexture=t}e.attenuationDistance!==1/0&&(i.attenuationDistance=e.attenuationDistance),i.attenuationColor=e.attenuationColor.toArray(),t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},to=class{constructor(e){this.writer=e,this.name=`KHR_materials_ior`}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||e.ior===1.5)return;let n=this.writer.extensionsUsed,r={};r.ior=e.ior,t.extensions=t.extensions||{},t.extensions[this.name]=r,n[this.name]=!0}},no=class{constructor(e){this.writer=e,this.name=`KHR_materials_specular`}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||e.specularIntensity===1&&e.specularColor.equals(Ma)&&!e.specularIntensityMap&&!e.specularColorMap)return;let n=this.writer,r=n.extensionsUsed,i={};if(e.specularIntensityMap){let t={index:n.processTexture(e.specularIntensityMap),texCoord:e.specularIntensityMap.channel};n.applyTextureTransform(t,e.specularIntensityMap),i.specularTexture=t}if(e.specularColorMap){let t={index:n.processTexture(e.specularColorMap),texCoord:e.specularColorMap.channel};n.applyTextureTransform(t,e.specularColorMap),i.specularColorTexture=t}i.specularFactor=e.specularIntensity,i.specularColorFactor=e.specularColor.toArray(),t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},ro=class{constructor(e){this.writer=e,this.name=`KHR_materials_sheen`}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||e.sheen==0)return;let n=this.writer,r=n.extensionsUsed,i={};if(e.sheenRoughnessMap){let t={index:n.processTexture(e.sheenRoughnessMap),texCoord:e.sheenRoughnessMap.channel};n.applyTextureTransform(t,e.sheenRoughnessMap),i.sheenRoughnessTexture=t}if(e.sheenColorMap){let t={index:n.processTexture(e.sheenColorMap),texCoord:e.sheenColorMap.channel};n.applyTextureTransform(t,e.sheenColorMap),i.sheenColorTexture=t}i.sheenRoughnessFactor=e.sheenRoughness,i.sheenColorFactor=e.sheenColor.toArray(),t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},io=class{constructor(e){this.writer=e,this.name=`KHR_materials_anisotropy`}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||e.anisotropy==0)return;let n=this.writer,r=n.extensionsUsed,i={};if(e.anisotropyMap){let t={index:n.processTexture(e.anisotropyMap)};n.applyTextureTransform(t,e.anisotropyMap),i.anisotropyTexture=t}i.anisotropyStrength=e.anisotropy,i.anisotropyRotation=e.anisotropyRotation,t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},ao=class{constructor(e){this.writer=e,this.name=`KHR_materials_emissive_strength`}writeMaterial(e,t){if(!e.isMeshStandardMaterial||e.emissiveIntensity===1)return;let n=this.writer.extensionsUsed,r={};r.emissiveStrength=e.emissiveIntensity,t.extensions=t.extensions||{},t.extensions[this.name]=r,n[this.name]=!0}},oo=class{constructor(e){this.writer=e,this.name=`EXT_materials_bump`}writeMaterial(e,t){if(!e.isMeshStandardMaterial||e.bumpScale===1&&!e.bumpMap)return;let n=this.writer,r=n.extensionsUsed,i={};if(e.bumpMap){let t={index:n.processTexture(e.bumpMap),texCoord:e.bumpMap.channel};n.applyTextureTransform(t,e.bumpMap),i.bumpTexture=t}i.bumpFactor=e.bumpScale,t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},so=class{constructor(e){this.writer=e,this.name=`EXT_mesh_gpu_instancing`}writeNode(e,t){if(!e.isInstancedMesh)return;let r=this.writer,i=e,a=new Float32Array(i.count*3),o=new Float32Array(i.count*4),s=new Float32Array(i.count*3),c=new I,l=new n,u=new H,d=new n;for(let e=0;ee.times[e.times.length-1]){if(Math.abs(e.times[e.times.length-1]-t)t){i.set(e.times.slice(0,c+1),0),i[c+1]=t,i.set(e.times.slice(c+1),c+2),a.set(e.values.slice(0,(c+1)*r),0),a.set(o.evaluate(t),(c+1)*r),a.set(e.values.slice((c+1)*r),(c+2)*r),s=c+1;break}}return e.times=i,e.values=a,s},mergeMorphTargetTracks:function(e,t){let n=[],r={},i=e.tracks;for(let e=0;e{let n=i[e];return n&&(a={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!a}),!a){if(!n)throw Error(`No matching profile name found`);let e=i[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);a={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let o=await co(a.profilePath),s;if(r){let t;if(t=e.handedness===`any`?o.layouts[Object.keys(o.layouts)[0]]:o.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${a.profileId}`);t.assetPath&&(s=a.profilePath.replace(`profile.json`,t.assetPath))}return{profile:o,assetPath:s}}var fo={xAxis:0,yAxis:0,button:0,state:Z.ComponentState.DEFAULT};function po(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let i=Math.atan2(t,e);n=Math.cos(i),r=Math.sin(i)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var mo=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===Z.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(fo)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:i,normalizedYAxis:a}=po(e,t);switch(this.componentProperty){case Z.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?i:.5;break;case Z.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?a:.5;break;case Z.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case Z.ComponentProperty.STATE:this.valueNodeProperty===Z.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=+!!this.states.includes(r);break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},ho=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new mo(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:Z.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(e){if(this.values.state=Z.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=Z.ComponentState.PRESSED:(t.touched||this.values.button>Z.ButtonTouchThreshold)&&(this.values.state=Z.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===Z.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>Z.AxisTouchThreshold&&(this.values.state=Z.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===Z.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>Z.AxisTouchThreshold&&(this.values.state=Z.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},go=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new ho(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},_o=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,vo=`generic-trigger`,yo=class extends Re{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:i,valueNodeProperty:a}=e;t&&(a===Z.VisualResponseProperty.VISIBILITY?t.visible=i:a===Z.VisualResponseProperty.TRANSFORM&&(t.quaternion.slerpQuaternions(n.quaternion,r.quaternion,i),t.position.lerpVectors(n.position,r.position,i)))})}))}};function bo(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:i}=e;if(n===Z.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new z(new vt(.001),new F({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(i).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:i,valueNodeProperty:a}=e;if(a===Z.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(i),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${i} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function xo(e,t){bo(e.motionController,t),e.envMap&&t.traverse(t=>{t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.layers.mask!=0&&t.traverse(t=>{t.layers.mask=e.layers.mask}),e.add(t)}var So=class{constructor(e=null,t=null){this.gltfLoader=e,this.path=_o,this._assetCache={},this.onLoad=t,this.gltfLoader||=new Lt}setPath(e){return this.path=e,this}createControllerModel(e){let t=new yo,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||r.hand||uo(r,this.path,vo).then(({profile:e,assetPath:i})=>{t.motionController=new go(r,e,i);let a=this._assetCache[t.motionController.assetUrl];if(a)n=a.scene.clone(),xo(t,n),this.onLoad&&this.onLoad(n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.setPath(``),this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),xo(t,n),this.onLoad&&this.onLoad(n)},null,()=>{throw Error(`Asset ${t.motionController.assetUrl} missing or malformed.`)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},Co=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/`,wo=class{constructor(e,t,n,r,i=null,a=null){this.controller=t,this.handModel=e,this.bones=[],i===null&&(i=new Lt,i.setPath(n||Co)),i.load(`${r}.glb`,e=>{let t=e.scene.children[0];this.handModel.add(t),t.layers.mask=this.handModel.layers.mask;let n=t.getObjectByProperty(`type`,`SkinnedMesh`);n.frustumCulled=!1,n.castShadow=!0,n.receiveShadow=!0,[`wrist`,`thumb-metacarpal`,`thumb-phalanx-proximal`,`thumb-phalanx-distal`,`thumb-tip`,`index-finger-metacarpal`,`index-finger-phalanx-proximal`,`index-finger-phalanx-intermediate`,`index-finger-phalanx-distal`,`index-finger-tip`,`middle-finger-metacarpal`,`middle-finger-phalanx-proximal`,`middle-finger-phalanx-intermediate`,`middle-finger-phalanx-distal`,`middle-finger-tip`,`ring-finger-metacarpal`,`ring-finger-phalanx-proximal`,`ring-finger-phalanx-intermediate`,`ring-finger-phalanx-distal`,`ring-finger-tip`,`pinky-finger-metacarpal`,`pinky-finger-phalanx-proximal`,`pinky-finger-phalanx-intermediate`,`pinky-finger-phalanx-distal`,`pinky-finger-tip`].forEach(e=>{let n=t.getObjectByName(e);n===void 0?console.warn(`Couldn't find ${e} in ${r} hand mesh`):n.jointName=e,this.bones.push(n)}),a&&a(t)})}updateMesh(){let e=this.controller.joints;for(let t=0;t - #include - #include - #include - #include - - uniform float linewidth; - uniform vec2 resolution; - - attribute vec3 instanceStart; - attribute vec3 instanceEnd; - - attribute vec3 instanceColorStart; - attribute vec3 instanceColorEnd; - - #ifdef WORLD_UNITS - - varying vec4 worldPos; - varying vec3 worldStart; - varying vec3 worldEnd; - - #ifdef USE_DASH - - varying vec2 vUv; - - #endif - - #else - - varying vec2 vUv; - - #endif - - #ifdef USE_DASH - - uniform float dashScale; - attribute float instanceDistanceStart; - attribute float instanceDistanceEnd; - varying float vLineDistance; - - #endif - - void trimSegment( const in vec4 start, inout vec4 end ) { - - // trim end segment so it terminates between the camera plane and the near plane - - // conservative estimate of the near plane - float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column - float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column - float nearEstimate = - 0.5 * b / a; - - float alpha = ( nearEstimate - start.z ) / ( end.z - start.z ); - - end.xyz = mix( start.xyz, end.xyz, alpha ); - - } - - void main() { - - #ifdef USE_COLOR - - vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd; - - #endif - - #ifdef USE_DASH - - vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd; - vUv = uv; - - #endif - - float aspect = resolution.x / resolution.y; - - // camera space - vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 ); - vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 ); - - #ifdef WORLD_UNITS - - worldStart = start.xyz; - worldEnd = end.xyz; - - #else - - vUv = uv; - - #endif - - // special case for perspective projection, and segments that terminate either in, or behind, the camera plane - // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space - // but we need to perform ndc-space calculations in the shader, so we must address this issue directly - // perhaps there is a more elegant solution -- WestLangley - - bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column - - if ( perspective ) { - - if ( start.z < 0.0 && end.z >= 0.0 ) { - - trimSegment( start, end ); - - } else if ( end.z < 0.0 && start.z >= 0.0 ) { - - trimSegment( end, start ); - - } - - } - - // clip space - vec4 clipStart = projectionMatrix * start; - vec4 clipEnd = projectionMatrix * end; - - // ndc space - vec3 ndcStart = clipStart.xyz / clipStart.w; - vec3 ndcEnd = clipEnd.xyz / clipEnd.w; - - // direction - vec2 dir = ndcEnd.xy - ndcStart.xy; - - // account for clip-space aspect ratio - dir.x *= aspect; - dir = normalize( dir ); - - #ifdef WORLD_UNITS - - vec3 worldDir = normalize( end.xyz - start.xyz ); - vec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) ); - vec3 worldUp = normalize( cross( worldDir, tmpFwd ) ); - vec3 worldFwd = cross( worldDir, worldUp ); - worldPos = position.y < 0.5 ? start: end; - - // height offset - float hw = linewidth * 0.5; - worldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp; - - // don't extend the line if we're rendering dashes because we - // won't be rendering the endcaps - #ifndef USE_DASH - - // cap extension - worldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir; - - // add width to the box - worldPos.xyz += worldFwd * hw; - - // endcaps - if ( position.y > 1.0 || position.y < 0.0 ) { - - worldPos.xyz -= worldFwd * 2.0 * hw; - - } - - #endif - - // project the worldpos - vec4 clip = projectionMatrix * worldPos; - - // shift the depth of the projected points so the line - // segments overlap neatly - vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd; - clip.z = clipPose.z * clip.w; - - #else - - vec2 offset = vec2( dir.y, - dir.x ); - // undo aspect ratio adjustment - dir.x /= aspect; - offset.x /= aspect; - - // sign flip - if ( position.x < 0.0 ) offset *= - 1.0; - - // endcaps - if ( position.y < 0.0 ) { - - offset += - dir; - - } else if ( position.y > 1.0 ) { - - offset += dir; - - } - - // adjust for linewidth - offset *= linewidth; - - // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ... - offset /= resolution.y; - - // select end - vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd; - - // back to clip space - offset *= clip.w; - - clip.xy += offset; - - #endif - - gl_Position = clip; - - vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation - - #include - #include - #include - - } - `,fragmentShader:` - uniform vec3 diffuse; - uniform float opacity; - uniform float linewidth; - - #ifdef USE_DASH - - uniform float dashOffset; - uniform float dashSize; - uniform float gapSize; - - #endif - - varying float vLineDistance; - - #ifdef WORLD_UNITS - - varying vec4 worldPos; - varying vec3 worldStart; - varying vec3 worldEnd; - - #ifdef USE_DASH - - varying vec2 vUv; - - #endif - - #else - - varying vec2 vUv; - - #endif - - #include - #include - #include - #include - #include - - vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) { - - float mua; - float mub; - - vec3 p13 = p1 - p3; - vec3 p43 = p4 - p3; - - vec3 p21 = p2 - p1; - - float d1343 = dot( p13, p43 ); - float d4321 = dot( p43, p21 ); - float d1321 = dot( p13, p21 ); - float d4343 = dot( p43, p43 ); - float d2121 = dot( p21, p21 ); - - float denom = d2121 * d4343 - d4321 * d4321; - - float numer = d1343 * d4321 - d1321 * d4343; - - mua = numer / denom; - mua = clamp( mua, 0.0, 1.0 ); - mub = ( d1343 + d4321 * ( mua ) ) / d4343; - mub = clamp( mub, 0.0, 1.0 ); - - return vec2( mua, mub ); - - } - - void main() { - - #include - - #ifdef USE_DASH - - if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps - - if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX - - #endif - - float alpha = opacity; - - #ifdef WORLD_UNITS - - // Find the closest points on the view ray and the line segment - vec3 rayEnd = normalize( worldPos.xyz ) * 1e5; - vec3 lineDir = worldEnd - worldStart; - vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd ); - - vec3 p1 = worldStart + lineDir * params.x; - vec3 p2 = rayEnd * params.y; - vec3 delta = p1 - p2; - float len = length( delta ); - float norm = len / linewidth; - - #ifndef USE_DASH - - #ifdef USE_ALPHA_TO_COVERAGE - - float dnorm = fwidth( norm ); - alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm ); - - #else - - if ( norm > 0.5 ) { - - discard; - - } - - #endif - - #endif - - #else - - #ifdef USE_ALPHA_TO_COVERAGE - - // artifacts appear on some hardware if a derivative is taken within a conditional - float a = vUv.x; - float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; - float len2 = a * a + b * b; - float dlen = fwidth( len2 ); - - if ( abs( vUv.y ) > 1.0 ) { - - alpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 ); - - } - - #else - - if ( abs( vUv.y ) > 1.0 ) { - - float a = vUv.x; - float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; - float len2 = a * a + b * b; - - if ( len2 > 1.0 ) discard; - - } - - #endif - - #endif - - vec4 diffuseColor = vec4( diffuse, alpha ); - - #include - #include - - gl_FragColor = vec4( diffuseColor.rgb, alpha ); - - #include - #include - #include - #include - - } - `};var Oo=class extends ht{constructor(e){super({type:`LineMaterial`,uniforms:s.clone(Le.line.uniforms),vertexShader:Le.line.vertexShader,fragmentShader:Le.line.fragmentShader,clipping:!0}),this.isLineMaterial=!0,this.setValues(e)}get color(){return this.uniforms.diffuse.value}set color(e){this.uniforms.diffuse.value=e}get worldUnits(){return`WORLD_UNITS`in this.defines}set worldUnits(e){e===!0?this.defines.WORLD_UNITS=``:delete this.defines.WORLD_UNITS}get linewidth(){return this.uniforms.linewidth.value}set linewidth(e){this.uniforms.linewidth&&(this.uniforms.linewidth.value=e)}get dashed(){return`USE_DASH`in this.defines}set dashed(e){e===!0!==this.dashed&&(this.needsUpdate=!0),e===!0?this.defines.USE_DASH=``:delete this.defines.USE_DASH}get dashScale(){return this.uniforms.dashScale.value}set dashScale(e){this.uniforms.dashScale.value=e}get dashSize(){return this.uniforms.dashSize.value}set dashSize(e){this.uniforms.dashSize.value=e}get dashOffset(){return this.uniforms.dashOffset.value}set dashOffset(e){this.uniforms.dashOffset.value=e}get gapSize(){return this.uniforms.gapSize.value}set gapSize(e){this.uniforms.gapSize.value=e}get opacity(){return this.uniforms.opacity.value}set opacity(e){this.uniforms&&(this.uniforms.opacity.value=e)}get resolution(){return this.uniforms.resolution.value}set resolution(e){this.uniforms.resolution.value.copy(e)}get alphaToCoverage(){return`USE_ALPHA_TO_COVERAGE`in this.defines}set alphaToCoverage(e){this.defines&&(e===!0!==this.alphaToCoverage&&(this.needsUpdate=!0),e===!0?this.defines.USE_ALPHA_TO_COVERAGE=``:delete this.defines.USE_ALPHA_TO_COVERAGE)}},ko=new Xe,Ao=new n,jo=new n,Mo=new Xe,No=new Xe,Po=new Xe,Fo=new n,Io=new I,Lo=new j,Ro=new n,zo=new Se,Bo=new et,Vo=new Xe,Ho,Uo;function Wo(e,t,n){return Vo.set(0,0,-t,1).applyMatrix4(e.projectionMatrix),Vo.multiplyScalar(1/Vo.w),Vo.x=Uo/n.width,Vo.y=Uo/n.height,Vo.applyMatrix4(e.projectionMatrixInverse),Vo.multiplyScalar(1/Vo.w),Math.abs(Math.max(Vo.x,Vo.y))}function Go(e,t){let r=e.matrixWorld,i=e.geometry,a=i.attributes.instanceStart,o=i.attributes.instanceEnd,s=Math.min(i.instanceCount,a.count);for(let i=0,c=s;id&&No.z>d)continue;if(Mo.z>d){let e=Mo.z-No.z,t=(Mo.z-d)/e;Mo.lerp(No,t)}else if(No.z>d){let e=No.z-Mo.z,t=(No.z-d)/e;No.lerp(Mo,t)}Mo.applyMatrix4(i),No.applyMatrix4(i),Mo.multiplyScalar(1/Mo.w),No.multiplyScalar(1/No.w),Mo.x*=a.x/2,Mo.y*=a.y/2,No.x*=a.x/2,No.y*=a.y/2,Lo.start.copy(Mo),Lo.start.z=0,Lo.end.copy(No),Lo.end.z=0;let s=Lo.closestPointToPointParameter(Fo,!0);Lo.at(s,Ro);let u=w.lerp(Mo.z,No.z,s),f=u>=-1&&u<=1,p=Fo.distanceTo(Ro){this.scheduleUpdate||=setTimeout(()=>this.update(),16)});t.observe(e,{attributes:!0,childList:!0,subtree:!0,characterData:!0}),this.observer=t}dispatchDOMEvent(e){e.data&&es(this.dom,e.type,e.data.x,e.data.y)}update(){this.image=$o(this.dom),this.needsUpdate=!0,this.scheduleUpdate=null}dispose(){this.observer&&this.observer.disconnect(),this.scheduleUpdate=clearTimeout(this.scheduleUpdate),super.dispose()}},Qo=new WeakMap;function $o(t){let n=document.createRange(),r=new e;function i(e){let t=[],n=!1;function r(){if(n&&(n=!1,e.restore()),t.length===0)return;let r=-1/0,i=-1/0,a=1/0,o=1/0;for(let e=0;eparseFloat(e[t])),c=(a-t)/(r-t)*(p-m);o(i,u+m/4,p,m/2,m/4),d.fillStyle=s,d.strokeStyle=n,d.lineWidth=1,d.fill(),d.stroke(),o(i,u+m/4,c+m/2,m/2,m/4),d.fillStyle=n,d.fill(),o(i+c,u,m,m,m/2),d.fillStyle=n,d.fill()}(e.type===`color`||e.type===`text`||e.type===`number`)&&(f.add({x:i,y:u,width:p,height:m}),a(t,i+parseInt(t.paddingLeft),u+parseInt(t.paddingTop),e.value),f.remove())}}let h=t.overflow===`auto`||t.overflow===`hidden`;h&&f.add({x:i,y:u,width:p,height:m});for(let n=0;na.left&&na.top&&rparseFloat(e[t])),i=a.width,o=(n-a.x)/i;e.value=t+(r-t)*o,e.dispatchEvent(new InputEvent(`input`,{bubbles:!0}))}for(let t=0;t0){let e=o[0],t=e.object,n=e.uv;ns.type=i.type,ns.data.set(n.x,1-n.y),t.dispatchEvent(ns)}}i.addEventListener(`pointerdown`,a),i.addEventListener(`pointerup`,a),i.addEventListener(`pointermove`,a),i.addEventListener(`mousedown`,a),i.addEventListener(`mouseup`,a),i.addEventListener(`mousemove`,a),i.addEventListener(`click`,a)}listenToXRControllerEvents(e){let t=this,n={move:`mousemove`,select:`click`,selectstart:`mousedown`,selectend:`mouseup`};function r(e){let r=e.target;rs.setFromXRController(r);let i=rs.intersectObjects(t.children,!1);if(i.length>0){let t=i[0],r=t.object,a=t.uv;ns.type=n[e.type],ns.data.set(a.x,1-a.y),r.dispatchEvent(ns)}}e.addEventListener(`move`,r),e.addEventListener(`select`,r),e.addEventListener(`selectstart`,r),e.addEventListener(`selectend`,r)}},as=new n,os=new n,ss=new xe,cs=class extends m{constructor(e,t=1,n=16711680){let r=new le,i=e.geometry.attributes.normal.count,a=new B(i*2*3,3);r.setAttribute(`position`,a),super(r,new N({color:n,toneMapped:!1})),this.object=e,this.size=t,this.type=`VertexNormalsHelper`,this.matrixAutoUpdate=!1,this.update()}update(){this.object.updateMatrixWorld(!0),ss.getNormalMatrix(this.object.matrixWorld);let e=this.object.matrixWorld,t=this.geometry.attributes.position,n=this.object.geometry;if(n){let r=n.attributes.position,i=n.attributes.normal,a=0;for(let n=0,o=r.count;n=n[r])return r-1;if(t<=n[e])return e;let i=e,a=r,o=Math.floor((i+a)/2);for(;t=n[o+1];)t=a&&(c[i][0]=c[t][0]/s[u+1][l],r=c[i][0]*s[l][u]);let d=l>=-1?1:-l,f=e-1<=u?a-1:n-e;for(let e=d;e<=f;++e)c[i][e]=(c[t][e]-c[t][e-1])/s[u+1][l+e],r+=c[i][e]*s[l+e][u];e<=u&&(c[i][a]=-c[t][a-1]/s[u+1][e],r+=c[i][a]*s[e][u]),o[a][e]=r;let p=t;t=i,i=p}}let u=n;for(let e=1;e<=r;++e){for(let t=0;t<=n;++t)o[e][t]*=u;u*=n-e}return o}function ps(e,t,n,r,i){let a=i0,a=typeof i.Content==`string`&&i.Content!==``;if(e||a){let e=this.parseImage(n[r]);t[i.RelativeFilename||i.Filename]=e}}}}for(let n in e){let r=e[n];t[r]===void 0?e[n]=e[n].split(`\\`).pop():e[n]=t[r]}return e}parseImage(e){let t=e.Content,n=e.RelativeFilename||e.Filename,r=n.slice(n.lastIndexOf(`.`)+1).toLowerCase(),i;switch(r){case`bmp`:i=`image/bmp`;break;case`jpg`:case`jpeg`:i=`image/jpeg`;break;case`png`:i=`image/png`;break;case`tif`:i=`image/tiff`;break;case`tga`:this.manager.getHandler(`.tga`)===null&&console.warn(`FBXLoader: TGA loader not found, skipping `,n),i=`image/tga`;break;default:console.warn(`FBXLoader: Image type "`+r+`" is not supported.`);return}if(typeof t==`string`)return`data:`+i+`;base64,`+t;{let e=new Uint8Array(t);return window.URL.createObjectURL(new Blob([e],{type:i}))}}parseTextures(e){let t=new Map;if(`Texture`in Q.Objects){let n=Q.Objects.Texture;for(let r in n){let i=this.parseTexture(n[r],e);t.set(parseInt(r),i)}}return t}parseTexture(e,t){let n=this.loadTexture(e,t);n.ID=e.id,n.name=e.attrName;let r=e.WrapModeU,i=e.WrapModeV,a=r===void 0?0:r.value,o=i===void 0?0:i.value;if(n.wrapS=a===0?C:ne,n.wrapT=o===0?C:ne,`Scaling`in e){let t=e.Scaling.value;n.repeat.x=t[0],n.repeat.y=t[1]}if(`Translation`in e){let t=e.Translation.value;n.offset.x=t[0],n.offset.y=t[1]}return n}loadTexture(e,t){let n=new Set([`tga`,`tif`,`tiff`,`exr`,`dds`,`hdr`,`ktx2`]),r=e.FileName.split(`.`).pop().toLowerCase(),i=n.has(r)?this.manager.getHandler(`.${r}`):this.textureLoader;if(!i)return console.warn(`FBXLoader: ${r.toUpperCase()} loader not found, creating placeholder texture for`,e.RelativeFilename),new He;let a=i.path;a||i.setPath(this.textureLoader.path);let o=$.get(e.id).children,s;o!==void 0&&o.length>0&&t[o[0].ID]!==void 0&&(s=t[o[0].ID],(s.indexOf(`blob:`)===0||s.indexOf(`data:`)===0)&&i.setPath(void 0));let c=i.load(s);return i.setPath(a),c}parseMaterials(e){let t=new Map;if(`Material`in Q.Objects){let n=Q.Objects.Material;for(let r in n){let i=this.parseMaterial(n[r],e);i!==null&&t.set(parseInt(r),i)}}return t}parseMaterial(e,t){let n=e.id,r=e.attrName,i=e.ShadingModel;if(typeof i==`object`&&(i=i.value),!$.has(n))return null;let a=this.parseParameters(e,t,n),o;switch(i.toLowerCase()){case`phong`:o=new rt;break;case`lambert`:o=new Ie;break;default:console.warn(`THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.`,i),o=new rt;break}return o.setValues(a),o.name=r,o}parseParameters(t,n,r){let i={};t.BumpFactor&&(i.bumpScale=t.BumpFactor.value),t.Diffuse?i.color=k.toWorkingColorSpace(new e().fromArray(t.Diffuse.value),R):t.DiffuseColor&&(t.DiffuseColor.type===`Color`||t.DiffuseColor.type===`ColorRGB`)&&(i.color=k.toWorkingColorSpace(new e().fromArray(t.DiffuseColor.value),R)),t.DisplacementFactor&&(i.displacementScale=t.DisplacementFactor.value),t.Emissive?i.emissive=k.toWorkingColorSpace(new e().fromArray(t.Emissive.value),R):t.EmissiveColor&&(t.EmissiveColor.type===`Color`||t.EmissiveColor.type===`ColorRGB`)&&(i.emissive=k.toWorkingColorSpace(new e().fromArray(t.EmissiveColor.value),R)),t.EmissiveFactor&&(i.emissiveIntensity=parseFloat(t.EmissiveFactor.value)),t.Opacity&&(i.opacity=parseFloat(t.Opacity.value)),i.opacity<1&&(i.transparent=!0),t.ReflectionFactor&&(i.reflectivity=t.ReflectionFactor.value),t.Shininess&&(i.shininess=t.Shininess.value),t.Specular?i.specular=k.toWorkingColorSpace(new e().fromArray(t.Specular.value),R):t.SpecularColor&&t.SpecularColor.type===`Color`&&(i.specular=k.toWorkingColorSpace(new e().fromArray(t.SpecularColor.value),R));let a=this;return $.get(r).children.forEach(function(e){let t=e.relationship;switch(t){case`Bump`:i.bumpMap=a.getTexture(n,e.ID);break;case`Maya|TEX_ao_map`:i.aoMap=a.getTexture(n,e.ID);break;case`DiffuseColor`:case`Maya|TEX_color_map`:i.map=a.getTexture(n,e.ID),i.map!==void 0&&(i.map.colorSpace=R);break;case`DisplacementColor`:i.displacementMap=a.getTexture(n,e.ID);break;case`EmissiveColor`:i.emissiveMap=a.getTexture(n,e.ID),i.emissiveMap!==void 0&&(i.emissiveMap.colorSpace=R);break;case`NormalMap`:case`Maya|TEX_normal_map`:i.normalMap=a.getTexture(n,e.ID);break;case`ReflectionColor`:i.envMap=a.getTexture(n,e.ID),i.envMap!==void 0&&(i.envMap.mapping=303,i.envMap.colorSpace=R);break;case`SpecularColor`:i.specularMap=a.getTexture(n,e.ID),i.specularMap!==void 0&&(i.specularMap.colorSpace=R);break;case`TransparentColor`:case`TransparencyFactor`:i.alphaMap=a.getTexture(n,e.ID),i.transparent=!0;break;default:console.warn(`THREE.FBXLoader: %s map is not supported in three.js, skipping texture.`,t);break}}),i}getTexture(e,t){return`LayeredTexture`in Q.Objects&&t in Q.Objects.LayeredTexture&&(console.warn(`THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.`),t=$.get(t).children[0].ID),e.get(t)}parseDeformers(){let e={},t={};if(`Deformer`in Q.Objects){let n=Q.Objects.Deformer;for(let r in n){let i=n[r],a=$.get(parseInt(r));if(i.attrType===`Skin`){let t=this.parseSkeleton(a,n);t.ID=r,a.parents.length>1&&console.warn(`THREE.FBXLoader: skeleton attached to more than one geometry is not supported.`),t.geometryID=a.parents[0].ID,e[r]=t}else if(i.attrType===`BlendShape`){let e={id:r};e.rawTargets=this.parseMorphTargets(a,n),e.id=r,a.parents.length>1&&console.warn(`THREE.FBXLoader: morph target attached to more than one geometry is not supported.`),t[r]=e}}}return{skeletons:e,morphTargets:t}}parseSkeleton(e,t){let n=[];return e.children.forEach(function(e){let r=t[e.ID];if(r.attrType!==`Cluster`)return;let i={ID:e.ID,indices:[],weights:[],transformLink:new I().fromArray(r.TransformLink.a)};`Indexes`in r&&(i.indices=r.Indexes.a,i.weights=r.Weights.a),n.push(i)}),{rawBones:n,bones:[]}}parseMorphTargets(e,t){let n=[];for(let r=0;r1?a=o:o.length>0?a=o[0]:(a=new rt({name:ye.DEFAULT_MATERIAL_NAME,color:13421772}),o.push(a)),`color`in i.attributes&&o.forEach(function(e){e.vertexColors=!0}),i.groups.length>0){let e=!1;for(let t=0,n=i.groups.length;t=o.length)&&(n.materialIndex=o.length,e=!0)}if(e){let e=new Ke;o.push(e)}}return i.FBX_Deformer?(r=new mt(i,a),r.normalizeSkinWeights()):r=new z(i,a),r}createCurve(e,t){return new Ze(e.children.reduce(function(e,n){return t.has(n.ID)&&(e=t.get(n.ID)),e},null),new N({name:ye.DEFAULT_MATERIAL_NAME,color:3342591,linewidth:1}))}getTransformData(e,t){let n={};`InheritType`in t&&(n.inheritType=parseInt(t.InheritType.value)),`RotationOrder`in t?n.eulerOrder=Is(t.RotationOrder.value):n.eulerOrder=Is(0),`Lcl_Translation`in t&&(n.translation=t.Lcl_Translation.value),`PreRotation`in t&&(n.preRotation=t.PreRotation.value),`Lcl_Rotation`in t&&(n.rotation=t.Lcl_Rotation.value),`PostRotation`in t&&(n.postRotation=t.PostRotation.value),`Lcl_Scaling`in t&&(n.scale=t.Lcl_Scaling.value),`ScalingOffset`in t&&(n.scalingOffset=t.ScalingOffset.value),`ScalingPivot`in t&&(n.scalingPivot=t.ScalingPivot.value),`RotationOffset`in t&&(n.rotationOffset=t.RotationOffset.value),`RotationPivot`in t&&(n.rotationPivot=t.RotationPivot.value),e.userData.transformData=n}setLookAtProperties(e,t){`LookAtProperty`in t&&$.get(e.ID).children.forEach(function(t){if(t.relationship===`LookAtProperty`){let r=Q.Objects.Model[t.ID];if(`Lcl_Translation`in r){let t=r.Lcl_Translation.value;e.target===void 0?e.lookAt(new n().fromArray(t)):(e.target.position.fromArray(t),vs.add(e.target))}}})}bindSkeleton(e,t,n){let r=this.parsePoseNodes();for(let i in e){let a=e[i];$.get(parseInt(a.ID)).parents.forEach(function(e){if(t.has(e.ID)){let t=e.ID;$.get(t).parents.forEach(function(e){n.has(e.ID)&&n.get(e.ID).bind(new at(a.bones),r[e.ID])})}})}}parsePoseNodes(){let e={};if(`Pose`in Q.Objects){let t=Q.Objects.Pose;for(let n in t)if(t[n].attrType===`BindPose`&&t[n].NbPoseNodes>0){let r=t[n].PoseNode;Array.isArray(r)?r.forEach(function(t){e[t.Node]=new I().fromArray(t.Matrix.a)}):e[r.Node]=new I().fromArray(r.Matrix.a)}}return e}addGlobalSceneSettings(){if(`GlobalSettings`in Q){if(`AmbientColor`in Q.GlobalSettings){let t=Q.GlobalSettings.AmbientColor.value,n=t[0],r=t[1],i=t[2];if(n!==0||r!==0||i!==0){let t=new e().setRGB(n,r,i,R);vs.add(new dt(t,1))}}`UnitScaleFactor`in Q.GlobalSettings&&(vs.userData.unitScaleFactor=Q.GlobalSettings.UnitScaleFactor.value)}}},xs=class{constructor(){this.negativeMaterialIndices=!1}parse(e){let t=new Map;if(`Geometry`in Q.Objects){let n=Q.Objects.Geometry;for(let r in n){let i=$.get(parseInt(r)),a=this.parseGeometry(i,n[r],e);t.set(parseInt(r),a)}}return this.negativeMaterialIndices===!0&&console.warn(`THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected.`),t}parseGeometry(e,t,n){switch(t.attrType){case`Mesh`:return this.parseMeshGeometry(e,t,n);case`NurbsCurve`:return this.parseNurbsGeometry(t)}}parseMeshGeometry(e,t,n){let r=n.skeletons,i=[],a=e.parents.map(function(e){return Q.Objects.Model[e.ID]});if(a.length===0)return;let o=e.children.reduce(function(e,t){return r[t.ID]!==void 0&&(e=r[t.ID]),e},null);e.children.forEach(function(e){n.morphTargets[e.ID]!==void 0&&i.push(n.morphTargets[e.ID])});let s=a[0],c={};`RotationOrder`in s&&(c.eulerOrder=Is(s.RotationOrder.value)),`InheritType`in s&&(c.inheritType=parseInt(s.InheritType.value)),`GeometricTranslation`in s&&(c.translation=s.GeometricTranslation.value),`GeometricRotation`in s&&(c.rotation=s.GeometricRotation.value),`GeometricScaling`in s&&(c.scale=s.GeometricScaling.value);let l=Fs(c);return this.genGeometry(t,o,i,l)}genGeometry(e,t,n,r){let i=new le;e.attrName&&(i.name=e.attrName);let a=this.parseGeoNode(e,t),o=this.genBuffers(a),s=new B(o.vertex,3);if(s.applyMatrix4(r),i.setAttribute(`position`,s),o.colors.length>0&&i.setAttribute(`color`,new B(o.colors,3)),t&&(i.setAttribute(`skinIndex`,new ke(o.weightsIndices,4)),i.setAttribute(`skinWeight`,new B(o.vertexWeights,4)),i.FBX_Deformer=t),o.normal.length>0){let e=new xe().getNormalMatrix(r),t=new B(o.normal,3);t.applyNormalMatrix(e),i.setAttribute(`normal`,t)}if(o.uvs.forEach(function(e,t){let n=t===0?`uv`:`uv${t}`;i.setAttribute(n,new B(o.uvs[t],2))}),a.material&&a.material.mappingType!==`AllSame`){let e=o.materialIndex[0],t=0;if(o.materialIndex.forEach(function(n,r){n!==e&&(i.addGroup(t,r-t,e),e=n,t=r)}),i.groups.length>0){let t=i.groups[i.groups.length-1],n=t.start+t.count;n!==o.materialIndex.length&&i.addGroup(n,o.materialIndex.length-n,e)}i.groups.length===0&&i.addGroup(0,o.materialIndex.length,o.materialIndex[0])}return this.addMorphTargets(i,e,n,r),i}parseGeoNode(e,t){let n={};if(n.vertexPositions=e.Vertices===void 0?[]:e.Vertices.a,n.vertexIndices=e.PolygonVertexIndex===void 0?[]:e.PolygonVertexIndex.a,e.LayerElementColor&&(n.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(n.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(n.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){n.uv=[];let t=0;for(;e.LayerElementUV[t];)e.LayerElementUV[t].UV&&n.uv.push(this.parseUVs(e.LayerElementUV[t])),t++}return n.weightTable={},t!==null&&(n.skeleton=t,t.rawBones.forEach(function(e,t){e.indices.forEach(function(r,i){n.weightTable[r]===void 0&&(n.weightTable[r]=[]),n.weightTable[r].push({id:t,weight:e.weights[i]})})})),n}genBuffers(e){let t={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]},n=0,r=0,i=!1,a=[],o=[],s=[],c=[],l=[],u=[],d=this;return e.vertexIndices.forEach(function(f,p){let m,h=!1;f<0&&(f^=-1,h=!0);let g=[],_=[];if(a.push(f*3,f*3+1,f*3+2),e.color){let t=Ms(p,n,f,e.color);s.push(t[0],t[1],t[2])}if(e.skeleton){if(e.weightTable[f]!==void 0&&e.weightTable[f].forEach(function(e){_.push(e.weight),g.push(e.id)}),_.length>4){i||=(console.warn(`THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.`),!0);let e=[0,0,0,0],t=[0,0,0,0];_.forEach(function(n,r){let i=n,a=g[r];t.forEach(function(t,n,r){if(i>t){r[n]=i,i=t;let o=e[n];e[n]=a,a=o}})}),g=e,_=t}for(;_.length<4;)_.push(0),g.push(0);for(let e=0;e<4;++e)l.push(_[e]),u.push(g[e])}if(e.normal){let t=Ms(p,n,f,e.normal);o.push(t[0],t[1],t[2])}e.material&&e.material.mappingType!==`AllSame`&&(m=Ms(p,n,f,e.material)[0],m<0&&(d.negativeMaterialIndices=!0,m=0)),e.uv&&e.uv.forEach(function(e,t){let r=Ms(p,n,f,e);c[t]===void 0&&(c[t]=[]),c[t].push(r[0]),c[t].push(r[1])}),r++,h&&(d.genFace(t,e,a,m,o,s,c,l,u,r),n++,r=0,a=[],o=[],s=[],c=[],l=[],u=[])}),t}getNormalNewell(e){let t=new n(0,0,0);for(let n=0;n.5?new n(0,1,0):new n(0,0,1)).cross(t).normalize();return{normal:t,tangent:r,bitangent:t.clone().cross(r).normalize()}}flattenVertex(e,t,n){return new V(e.dot(t),e.dot(n))}genFace(e,t,r,i,a,o,s,c,l,u){let d;if(u>3){let e=[],i=t.baseVertexPositions||t.vertexPositions;for(let t=0;t1&&console.warn(`THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.`);let a=e.get(i[0].ID);n[r]={name:t[r].attrName,layer:a}}return n}addClip(e){let t=[],n=this;return e.layer.forEach(function(e){t=t.concat(n.generateTracks(e))}),new Ge(e.name,-1,t)}generateTracks(e){let t=[],r=new n,i=new n;if(e.transform&&e.transform.decompose(r,new H,i),r=r.toArray(),i=i.toArray(),e.T!==void 0&&Object.keys(e.T.curves).length>0){let n=this.generateVectorTrack(e.modelName,e.T.curves,r,`position`);n!==void 0&&t.push(n)}if(e.R!==void 0&&Object.keys(e.R.curves).length>0){let n=this.generateRotationTrack(e.modelName,e.R.curves,e.preRotation,e.postRotation,e.eulerOrder);n!==void 0&&t.push(n)}if(e.S!==void 0&&Object.keys(e.S.curves).length>0){let n=this.generateVectorTrack(e.modelName,e.S.curves,i,`scale`);n!==void 0&&t.push(n)}if(e.DeformPercent!==void 0){let n=this.generateMorphTrack(e);n!==void 0&&t.push(n)}return t}generateVectorTrack(e,t,n,r){let i=this.getTimesForAllAxes(t),a=this.getKeyframeTrackValues(i,t,n);return new A(e+`.`+r,i,a)}generateRotationTrack(e,t,n,r,i){let a,o;if(t.x===void 0||t.y===void 0||t.z===void 0){console.warn(`THREE.FBXLoader: Missing rotation curves `+(t.x===void 0?`x `:``)+(t.y===void 0?`y `:``)+(t.z===void 0?`z `:``)+` for animation of `+e+`. This is currently not supported.`);return}if(t.x!==void 0&&t.y!==void 0&&t.z!==void 0){let e=this.interpolateRotations(t.x,t.y,t.z,i);a=e[0],o=e[1]}let s=Is(0);n!==void 0&&(n=n.map(w.degToRad),n.push(s),n=new gt().fromArray(n),n=new H().setFromEuler(n)),r!==void 0&&(r=r.map(w.degToRad),r.push(s),r=new gt().fromArray(r),r=new H().setFromEuler(r).invert());let c=new H,l=new gt,u=[];if(!(!o||!a)){for(let e=0;e2&&new H().fromArray(u,(e-3)/3*4).dot(c)<0&&c.set(-c.x,-c.y,-c.z,-c.w),c.toArray(u,e/3*4);return new fe(e+`.quaternion`,a,u)}}generateMorphTrack(e){let t=e.DeformPercent.curves.morph,n=t.values.map(function(e){return e/100}),r=vs.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new Ne(e.modelName+`.morphTargetInfluences[`+r+`]`,t.times,n)}getTimesForAllAxes(e){let t=[];if(e.x!==void 0&&(t=t.concat(e.x.times)),e.y!==void 0&&(t=t.concat(e.y.times)),e.z!==void 0&&(t=t.concat(e.z.times)),t=t.sort(function(e,t){return e-t}),t.length>1){let e=1,n=t[0];for(let r=1;r=180||f[1]>=180||f[2]>=180){let t=Math.max(...f)/180,n=new gt(...c,r),s=new gt(...u,r),l=new H().setFromEuler(n),d=new H().setFromEuler(s);l.dot(d)&&d.set(-d.x,-d.y,-d.z,-d.w);let p=e.times[o-1],m=e.times[o]-p,h=new H,g=new gt;for(let e=0;e<1;e+=1/t)h.copy(l.clone().slerp(d.clone(),e)),i.push(p+e*m),g.setFromQuaternion(h,r),a.push(g.x),a.push(g.y),a.push(g.z)}else i.push(e.times[o]),a.push(w.degToRad(e.values[o])),a.push(w.degToRad(t.values[o])),a.push(w.degToRad(n.values[o]))}return[i,a]}},Cs=class{getPrevNode(){return this.nodeStack[this.currentIndent-2]}getCurrentNode(){return this.nodeStack[this.currentIndent-1]}getCurrentProp(){return this.currentProp}pushStack(e){this.nodeStack.push(e),this.currentIndent+=1}popStack(){this.nodeStack.pop(),--this.currentIndent}setCurrentProp(e,t){this.currentProp=e,this.currentPropName=t}parse(e){this.currentIndent=0,this.allNodes=new Es,this.nodeStack=[],this.currentProp=[],this.currentPropName=``;let t=this,n=e.split(/[\r\n]+/);return n.forEach(function(e,r){let i=e.match(/^[\s\t]*;/),a=e.match(/^[\s\t]*$/);if(i||a)return;let o=e.match(`^\\t{`+t.currentIndent+`}(\\w+):(.*){`,``),s=e.match(`^\\t{`+t.currentIndent+`}(\\w+):[\\s\\t\\r\\n](.*)`),c=e.match(`^\\t{`+(t.currentIndent-1)+`}}`);o?t.parseNodeBegin(e,o):s?t.parseNodeProperty(e,s,n[++r]):c?t.popStack():e.match(/^[^\s\t}]/)&&t.parseNodePropertyContinued(e)}),this.allNodes}parseNodeBegin(e,t){let n=t[1].trim().replace(/^"/,``).replace(/"$/,``),r=t[2].split(`,`).map(function(e){return e.trim().replace(/^"/,``).replace(/"$/,``)}),i={name:n},a=this.parseNodeAttr(r),o=this.getCurrentNode();this.currentIndent===0?this.allNodes.add(n,i):n in o?(n===`PoseNode`?o.PoseNode.push(i):o[n].id!==void 0&&(o[n]={},o[n][o[n].id]=o[n]),a.id!==``&&(o[n][a.id]=i)):typeof a.id==`number`?(o[n]={},o[n][a.id]=i):n!==`Properties70`&&(n===`PoseNode`?o[n]=[i]:o[n]=i),typeof a.id==`number`&&(i.id=a.id),a.name!==``&&(i.attrName=a.name),a.type!==``&&(i.attrType=a.type),this.pushStack(i)}parseNodeAttr(e){let t=e[0];e[0]!==``&&(t=parseInt(e[0]),isNaN(t)&&(t=e[0]));let n=``,r=``;return e.length>1&&(n=e[1].replace(/^(\w+)::/,``),r=e[2]),{id:t,name:n,type:r}}parseNodeProperty(e,t,n){let r=t[1].replace(/^"/,``).replace(/"$/,``).trim(),i=t[2].replace(/^"/,``).replace(/"$/,``).trim();r===`Content`&&i===`,`&&(i=n.replace(/"/g,``).replace(/,$/,``).trim());let a=this.getCurrentNode();if(a.name===`Properties70`){this.parseNodeSpecialProperty(e,r,i);return}if(r===`C`){let e=i.split(`,`).slice(1),t=parseInt(e[0]),n=parseInt(e[1]),o=i.split(`,`).slice(3);o=o.map(function(e){return e.trim().replace(/^"/,``)}),r=`connections`,i=[t,n],zs(i,o),a[r]===void 0&&(a[r]=[])}r===`Node`&&(a.id=i),r in a&&Array.isArray(a[r])?a[r].push(i):r===`a`?a.a=i:a[r]=i,this.setCurrentProp(a,r),r===`a`&&i.slice(-1)!==`,`&&(a.a=Ls(i))}parseNodePropertyContinued(e){let t=this.getCurrentNode();t.a+=e,e.slice(-1)!==`,`&&(t.a=Ls(t.a))}parseNodeSpecialProperty(e,t,n){let r=n.split(`",`).map(function(e){return e.trim().replace(/^\"/,``).replace(/\s/,`_`)}),i=r[0],a=r[1],o=r[2],s=r[3],c=r[4];switch(a){case`int`:case`enum`:case`bool`:case`ULongLong`:case`double`:case`Number`:case`FieldOfView`:c=parseFloat(c);break;case`Color`:case`ColorRGB`:case`Vector3D`:case`Lcl_Translation`:case`Lcl_Rotation`:case`Lcl_Scaling`:c=Ls(c);break}this.getPrevNode()[i]={type:a,type2:o,flag:s,value:c},this.setCurrentProp(this.getPrevNode(),i)}},ws=class{parse(e){let t=new Ts(e);t.skip(23);let n=t.getUint32();if(n<6400)throw Error(`THREE.FBXLoader: FBX version not supported, FileVersion: `+n);let r=new Es;for(;!this.endOfContent(t);){let e=this.parseNode(t,n);e!==null&&r.add(e.name,e)}return r}endOfContent(e){return e.size()%16==0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()}parseNode(e,t){let n={},r=t>=7500?e.getUint64():e.getUint32(),i=t>=7500?e.getUint64():e.getUint32();t>=7500?e.getUint64():e.getUint32();let a=e.getUint8(),o=e.getString(a);if(r===0)return null;let s=[];for(let t=0;t0?s[0]:``,l=s.length>1?s[1]:``,u=s.length>2?s[2]:``;for(n.singleProperty=i===1&&e.getOffset()===r;r>e.getOffset();){let r=this.parseNode(e,t);r!==null&&this.parseSubNode(o,n,r)}return n.propertyList=s,typeof c==`number`&&(n.id=c),l!==``&&(n.attrName=l),u!==``&&(n.attrType=u),o!==``&&(n.name=o),n}parseSubNode(e,t,n){if(n.singleProperty===!0){let e=n.propertyList[0];Array.isArray(e)?(t[n.name]=n,n.a=e):t[n.name]=e}else if(e===`Connections`&&n.name===`C`){let e=[];n.propertyList.forEach(function(t,n){n!==0&&e.push(t)}),t.connections===void 0&&(t.connections=[]),t.connections.push(e)}else if(n.name===`Properties70`)Object.keys(n).forEach(function(e){t[e]=n[e]});else if(e===`Properties70`&&n.name===`P`){let e=n.propertyList[0],r=n.propertyList[1],i=n.propertyList[2],a=n.propertyList[3],o;e.indexOf(`Lcl `)===0&&(e=e.replace(`Lcl `,`Lcl_`)),r.indexOf(`Lcl `)===0&&(r=r.replace(`Lcl `,`Lcl_`)),o=r===`Color`||r===`ColorRGB`||r===`Vector`||r===`Vector3D`||r.indexOf(`Lcl_`)===0?[n.propertyList[4],n.propertyList[5],n.propertyList[6]]:n.propertyList[4],t[e]={type:r,type2:i,flag:a,value:o}}else t[n.name]===void 0?typeof n.id==`number`?(t[n.name]={},t[n.name][n.id]=n):t[n.name]=n:n.name===`PoseNode`?(Array.isArray(t[n.name])||(t[n.name]=[t[n.name]]),t[n.name].push(n)):t[n.name][n.id]===void 0&&(t[n.name][n.id]=n)}parseProperty(e){let t=e.getString(1),n;switch(t){case`C`:return e.getBoolean();case`D`:return e.getFloat64();case`F`:return e.getFloat32();case`I`:return e.getInt32();case`L`:return e.getInt64();case`R`:return n=e.getUint32(),e.getArrayBuffer(n);case`S`:return n=e.getUint32(),e.getString(n);case`Y`:return e.getInt16();case`b`:case`c`:case`d`:case`f`:case`i`:case`l`:let r=e.getUint32(),i=e.getUint32(),a=e.getUint32();if(i===0)switch(t){case`b`:case`c`:return e.getBooleanArray(r);case`d`:return e.getFloat64Array(r);case`f`:return e.getFloat32Array(r);case`i`:return e.getInt32Array(r);case`l`:return e.getInt64Array(r)}let o=new Ts(li(new Uint8Array(e.getArrayBuffer(a))).buffer);switch(t){case`b`:case`c`:return o.getBooleanArray(r);case`d`:return o.getFloat64Array(r);case`f`:return o.getFloat32Array(r);case`i`:return o.getInt32Array(r);case`l`:return o.getInt64Array(r)}break;default:throw Error(`THREE.FBXLoader: Unknown property type `+t)}}},Ts=class{constructor(e,t){this.dv=new DataView(e),this.offset=0,this.littleEndian=t===void 0?!0:t,this._textDecoder=new TextDecoder}getOffset(){return this.offset}size(){return this.dv.buffer.byteLength}skip(e){this.offset+=e}getBoolean(){return(this.getUint8()&1)==1}getBooleanArray(e){let t=[];for(let n=0;n=0&&(n=new Uint8Array(this.dv.buffer,t,r)),this._textDecoder.decode(n)}},Es=class{add(e,t){this[e]=t}};function Ds(e){return e.byteLength>=21&&Rs(e,0,21)===`Kaydara FBX Binary \0`}function Os(e){let t=[`K`,`a`,`y`,`d`,`a`,`r`,`a`,`\\`,`F`,`B`,`X`,`\\`,`B`,`i`,`n`,`a`,`r`,`y`,`\\`,`\\`],n=0;function r(t){let r=e[t-1];return e=e.slice(n+t),n++,r}for(let e=0;e=0?t.substring(0,o):t;s=s.toLowerCase();let c=o>=0?t.substring(o+1):``;if(c=c.trim(),s===`newmtl`)r={name:c},a[c]=r;else if(s===`ka`||s===`kd`||s===`ks`||s===`ke`){let e=c.split(i,3);r[s]=[parseFloat(e[0]),parseFloat(e[1]),parseFloat(e[2])]}else r[s]=c}let o=new Hs(this.resourcePath||t,this.materialOptions);return o.setCrossOrigin(this.crossOrigin),o.setManager(this.manager),o.setMaterials(a),o}},Hs=class{constructor(e=``,t={}){this.baseUrl=e,this.options=t,this.materialsInfo={},this.materials={},this.materialsArray=[],this.nameLookup={},this.crossOrigin=`anonymous`,this.side=this.options.side===void 0?0:this.options.side,this.wrap=this.options.wrap===void 0?C:this.options.wrap}setCrossOrigin(e){return this.crossOrigin=e,this}setManager(e){this.manager=e}setMaterials(e){this.materialsInfo=this.convert(e),this.materials={},this.materialsArray=[],this.nameLookup={}}convert(e){if(!this.options)return e;let t={};for(let n in e){let r=e[n],i={};t[n]=i;for(let e in r){let t=!0,n=r[e],a=e.toLowerCase();switch(a){case`kd`:case`ka`:case`ks`:this.options&&this.options.normalizeRGB&&(n=[n[0]/255,n[1]/255,n[2]/255]),this.options&&this.options.ignoreZeroRGBs&&n[0]===0&&n[1]===0&&n[2]===0&&(t=!1);break;default:break}t&&(i[a]=n)}}return t}preload(){for(let e in this.materialsInfo)this.create(e)}getIndex(e){return this.nameLookup[e]}getAsArray(){let e=0;for(let t in this.materialsInfo)this.materialsArray[e]=this.create(t),this.nameLookup[t]=e,e++;return this.materialsArray}create(e){return this.materials[e]===void 0&&this.createMaterial_(e),this.materials[e]}createMaterial_(t){let n=this,r=this.materialsInfo[t],i={name:t,side:this.side};function a(e,t){return typeof t!=`string`||t===``?``:/^https?:\/\//i.test(t)?t:e+t}function o(e,t){if(i[e])return;let r=n.getTextureParams(t,i),o=n.loadTexture(a(n.baseUrl,r.url));o.repeat.copy(r.scale),o.offset.copy(r.offset),o.wrapS=n.wrap,o.wrapT=n.wrap,(e===`map`||e===`emissiveMap`)&&(o.colorSpace=R),i[e]=o}for(let t in r){let n=r[t],a;if(n!==``)switch(t.toLowerCase()){case`kd`:i.color=k.toWorkingColorSpace(new e().fromArray(n),R);break;case`ks`:i.specular=k.toWorkingColorSpace(new e().fromArray(n),R);break;case`ke`:i.emissive=k.toWorkingColorSpace(new e().fromArray(n),R);break;case`map_kd`:o(`map`,n);break;case`map_ks`:o(`specularMap`,n);break;case`map_ke`:o(`emissiveMap`,n);break;case`norm`:o(`normalMap`,n);break;case`map_bump`:case`bump`:o(`bumpMap`,n);break;case`map_d`:o(`alphaMap`,n),i.transparent=!0;break;case`ns`:i.shininess=parseFloat(n);break;case`d`:a=parseFloat(n),a<1&&(i.opacity=a,i.transparent=!0);break;case`tr`:a=parseFloat(n),this.options&&this.options.invertTrProperty&&(a=1-a),a>0&&(i.opacity=1-a,i.transparent=!0);break;default:break}}return this.materials[t]=new rt(i),this.materials[t]}getTextureParams(e,t){let n={scale:new V(1,1),offset:new V(0,0)},r=e.split(/\s+/),i;return i=r.indexOf(`-bm`),i>=0&&(t.bumpScale=parseFloat(r[i+1]),r.splice(i,2)),i=r.indexOf(`-s`),i>=0&&(n.scale.set(parseFloat(r[i+1]),parseFloat(r[i+2])),r.splice(i,4)),i=r.indexOf(`-o`),i>=0&&(n.offset.set(parseFloat(r[i+1]),parseFloat(r[i+2])),r.splice(i,4)),n.url=r.join(` `).trim(),n}loadTexture(e,t,n,r,i){let a=this.manager===void 0?ct:this.manager,o=a.getHandler(e);o===null&&(o=new we(a)),o.setCrossOrigin&&o.setCrossOrigin(this.crossOrigin);let s=o.load(e,n,r,i);return t!==void 0&&(s.mapping=t),s}},Us=/^[og]\s*(.+)?/,Ws=/^mtllib /,Gs=/^usemtl /,Ks=/^usemap /,qs=/\s+/,Js=new n,Ys=new n,Xs=new n,Zs=new n,Qs=new n,$s=new e;function ec(){let e={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}let n=this.object&&typeof this.object.currentMaterial==`function`?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize==`function`&&this.object._finalize(!0),this.object={name:e||``,fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(e,t){let n=this._finalize(!1);n&&(n.inherited||n.groupCount<=0)&&this.materials.splice(n.index,1);let r={index:this.materials.length,name:e||``,mtllib:Array.isArray(t)&&t.length>0?t[t.length-1]:``,smooth:n===void 0?this.smooth:n.smooth,groupStart:n===void 0?0:n.groupEnd,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(e){let t={index:typeof e==`number`?e:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return t.clone=this.clone.bind(t),t}};return this.materials.push(r),r},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(e){let t=this.currentMaterial();if(t&&t.groupEnd===-1&&(t.groupEnd=this.geometry.vertices.length/3,t.groupCount=t.groupEnd-t.groupStart,t.inherited=!1),e&&this.materials.length>1)for(let e=this.materials.length-1;e>=0;e--)this.materials[e].groupCount<=0&&this.materials.splice(e,1);return e&&this.materials.length===0&&this.materials.push({name:``,smooth:this.smooth}),t}},n&&n.name&&typeof n.clone==`function`){let e=n.clone(0);e.inherited=!0,this.object.materials.push(e)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize==`function`&&this.object._finalize(!0)},parseVertexIndex:function(e,t){let n=parseInt(e,10);return(n>=0?n-1:n+t/3)*3},parseNormalIndex:function(e,t){let n=parseInt(e,10);return(n>=0?n-1:n+t/3)*3},parseUVIndex:function(e,t){let n=parseInt(e,10);return(n>=0?n-1:n+t/2)*2},addVertex:function(e,t,n){let r=this.vertices,i=this.object.geometry.vertices;i.push(r[e+0],r[e+1],r[e+2]),i.push(r[t+0],r[t+1],r[t+2]),i.push(r[n+0],r[n+1],r[n+2])},addVertexPoint:function(e){let t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){let t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,n){let r=this.normals,i=this.object.geometry.normals;i.push(r[e+0],r[e+1],r[e+2]),i.push(r[t+0],r[t+1],r[t+2]),i.push(r[n+0],r[n+1],r[n+2])},addFaceNormal:function(e,t,n){let r=this.vertices,i=this.object.geometry.normals;Js.fromArray(r,e),Ys.fromArray(r,t),Xs.fromArray(r,n),Qs.subVectors(Xs,Ys),Zs.subVectors(Js,Ys),Qs.cross(Zs),Qs.normalize(),i.push(Qs.x,Qs.y,Qs.z),i.push(Qs.x,Qs.y,Qs.z),i.push(Qs.x,Qs.y,Qs.z)},addColor:function(e,t,n){let r=this.colors,i=this.object.geometry.colors;r[e]!==void 0&&i.push(r[e+0],r[e+1],r[e+2]),r[t]!==void 0&&i.push(r[t+0],r[t+1],r[t+2]),r[n]!==void 0&&i.push(r[n+0],r[n+1],r[n+2])},addUV:function(e,t,n){let r=this.uvs,i=this.object.geometry.uvs;i.push(r[e+0],r[e+1]),i.push(r[t+0],r[t+1]),i.push(r[n+0],r[n+1])},addDefaultUV:function(){let e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){let t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,n,r,i,a,o,s,c){let l=this.vertices.length,u=this.parseVertexIndex(e,l),d=this.parseVertexIndex(t,l),f=this.parseVertexIndex(n,l);if(this.addVertex(u,d,f),this.addColor(u,d,f),o!==void 0&&o!==``){let e=this.normals.length;u=this.parseNormalIndex(o,e),d=this.parseNormalIndex(s,e),f=this.parseNormalIndex(c,e),this.addNormal(u,d,f)}else this.addFaceNormal(u,d,f);if(r!==void 0&&r!==``){let e=this.uvs.length;u=this.parseUVIndex(r,e),d=this.parseUVIndex(i,e),f=this.parseUVIndex(a,e),this.addUV(u,d,f),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type=`Points`;let t=this.vertices.length;for(let n=0,r=e.length;n{i.materialsLoader.load(a.toString(),t=>{i.setMaterials(t),e()},null,t)})}t(i.createObjects(r))}catch(t){r?r(t):console.error(t),i.manager.itemError(e)}},n,r)}setMTLLoader(e){return this.materialsLoader=e,this}setMaterials(e){return this.materials=e,this}parse(e,t=!1){let n=new ec;e.indexOf(`\r -`)!==-1&&(e=e.replace(/\r\n/g,` -`)),e.indexOf(`\\ -`)!==-1&&(e=e.replace(/\\\n/g,``));let r=e.split(` -`),i=[];for(let e=0,t=r.length;e=7?($s.setRGB(parseFloat(e[4]),parseFloat(e[5]),parseFloat(e[6]),R),n.colors.push($s.r,$s.g,$s.b)):n.colors.push(void 0,void 0,void 0);break;case`vn`:n.normals.push(parseFloat(e[1]),parseFloat(e[2]),parseFloat(e[3]));break;case`vt`:n.uvs.push(parseFloat(e[1]),parseFloat(e[2]));break}}else if(a===`f`){let e=t.slice(1).trim().split(qs),r=[];for(let t=0,n=e.length;t0){let e=n.split(`/`);r.push(e)}}let i=r[0];for(let e=1,t=r.length-1;e1){let e=i[1].trim().toLowerCase();n.object.smooth=e!==`0`&&e!==`off`}else n.object.smooth=!0;let e=n.object.currentMaterial();e&&(e.smooth=n.object.smooth)}else{if(t===`\0`)continue;console.warn(`THREE.OBJLoader: Unexpected line: "`+t+`"`)}}return n.finalize(),t?n:this.createObjects(n)}createObjects(e){let t=new Fe;if(t.materialLibraries=[].concat(e.materialLibraries),!(e.objects.length===1&&e.objects[0].geometry.vertices.length===0))for(let n=0,r=e.objects.length;n0&&l.setAttribute(`normal`,new B(i.normals,3)),i.colors.length>0&&(c=!0,l.setAttribute(`color`,new B(i.colors,3))),i.hasUVIndices===!0&&l.setAttribute(`uv`,new B(i.uvs,2));let u=[];for(let t=0,n=a.length;t1){for(let e=0,t=a.length;e0){let n=new Tt({size:1,sizeAttenuation:!1}),r=new le;r.setAttribute(`position`,new B(e.vertices,3)),e.colors.length>0&&e.colors[0]!==void 0&&(r.setAttribute(`color`,new B(e.colors,3)),n.vertexColors=!0);let i=new Oe(r,n);t.add(i)}return t}};export{Lt as A,fr as C,rr as D,lr as E,Pt as M,Rn as O,pr as S,ur as T,Yi as _,Xo as a,pi as b,Oo as c,Oa as d,xa as f,Oi as g,oa as h,is as i,Ft as j,In as k,wo as l,ya as m,ys as n,Yo as o,ba as p,cs as r,Jo as s,tc as t,So as u,yi as v,dr as w,_i as x,vi as y}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/three-examples@0.169.19.js.gz b/Needle/MenuScene/dist/assets/three-examples@0.169.19.js.gz deleted file mode 100644 index e14dea6..0000000 Binary files a/Needle/MenuScene/dist/assets/three-examples@0.169.19.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/three-mesh-bvh.B-oXEGo2.js b/Needle/MenuScene/dist/assets/three-mesh-bvh.B-oXEGo2.js deleted file mode 100644 index cc8e60f..0000000 --- a/Needle/MenuScene/dist/assets/three-mesh-bvh.B-oXEGo2.js +++ /dev/null @@ -1 +0,0 @@ -import{Ar as e,En as t,Ft as n,Gn as r,Mt as i,Pt as a,S as o,Xt as s,Yt as c,Zt as l,_ as u,_n as d,bn as f,jr as p,jt as m,kr as h,lr as g,m as _,x as v,yr as y}from"./three@0.169.19.js";var b=1.25,x=65535;x<<16;var S=2**-24,C=Symbol(`SKIP_GENERATION`),w={strategy:0,maxDepth:40,maxLeafSize:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0,range:null,[C]:!1};function T(e,t,n){return n.min.x=t[e],n.min.y=t[e+1],n.min.z=t[e+2],n.max.x=t[e+3],n.max.y=t[e+4],n.max.z=t[e+5],n}function ee(e){let t=-1,n=-1/0;for(let r=0;r<3;r++){let i=e[r+3]-e[r];i>n&&(n=i,t=r)}return t}function te(e,t){t.set(e)}function ne(e,t,n){let r,i;for(let a=0;a<3;a++){let o=a+3;r=e[a],i=t[a],n[a]=ri?r:i}}function E(e,t,n){for(let r=0;r<3;r++){let i=t[e+2*r],a=t[e+2*r+1],o=i-a,s=i+a;on[r+3]&&(n[r+3]=s)}}function D(e){let t=e[3]-e[0],n=e[4]-e[1],r=e[5]-e[2];return 2*(t*n+n*r+r*t)}function O(e,t){return t[e+15]===x}function k(e,t){return t[e+6]}function A(e,t){return t[e+14]}function j(e){return e+8}function M(e,t){return e+t[e+6]*8}function re(e,t){return t[e+7]}function N(e){return e}function ie(e,t,n,r,i){let a=1/0,o=1/0,s=1/0,c=-1/0,l=-1/0,u=-1/0,d=1/0,f=1/0,p=1/0,m=-1/0,h=-1/0,g=-1/0,_=e.offset||0;for(let r=(t-_)*6,i=(t+n-_)*6;rc&&(c=_),tm&&(m=t);let v=e[r+2],y=e[r+3],b=v-y,x=v+y;bl&&(l=x),vh&&(h=v);let S=e[r+4],C=e[r+5],w=S-C,T=S+C;wu&&(u=T),Sg&&(g=S)}r[0]=a,r[1]=o,r[2]=s,r[3]=c,r[4]=l,r[5]=u,i[0]=d,i[1]=f,i[2]=p,i[3]=m,i[4]=h,i[5]=g}var P=32,ae=(e,t)=>e.candidate-t.candidate,F=Array(P).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),oe=new Float32Array(6);function se(e,t,n,r,i,a){let o=-1,s=0;if(a===0)o=ee(t),o!==-1&&(s=(t[o]+t[o+3])/2);else if(a===1)o=ee(e),o!==-1&&(s=ce(n,r,i,o));else if(a===2){let a=D(e),c=b*i,l=n.offset||0,u=(r-l)*6,d=(r+i-l)*6;for(let e=0;e<3;e++){let r=t[e],l=(t[e+3]-r)/P;if(i

=a.candidate?E(r,n,a.rightCacheBounds):(E(r,n,a.leftCacheBounds),a.count++)}}for(let n=0;n=P&&(i=P-1);let a=F[i];a.count++,E(t,n,a.bounds)}let t=F[P-1];te(t.bounds,t.rightCacheBounds);for(let e=P-2;e>=0;e--){let t=F[e],n=F[e+1];ne(t.bounds,n.rightCacheBounds,t.rightCacheBounds)}let f=0;for(let t=0;t=c;)s--;if(ohe)throw Error(`MeshBVH: Cannot store relative child node offset greater than 32 bits.`);return fe[n+6]=c,fe[n+7]=a,ve(o,i)}}function ye(e,t,n,r,i){let{maxDepth:a,verbose:o,maxLeafSize:s,strategy:c,onProgress:l}=i,u=e.primitiveBuffer,d=e.primitiveBufferStride,f=new Float32Array(6),p=!1,m=new le;return ie(t,n,r,m.boundingData,f),g(m,n,r,f),m;function h(e){l&&l(e/r)}function g(e,n,r,i=null,l=0){if(!p&&l>=a&&(p=!0,o&&console.warn(`BVH: Max depth of ${a} reached when generating BVH. Consider increasing maxDepth.`)),r<=s||l>=a)return h(n+r),e.offset=n,e.count=r,e;let m=se(e.boundingData,i,t,n,r,c);if(m.axis===-1)return h(n+r),e.offset=n,e.count=r,e;let _=ue(u,d,t,n,r,m);if(_===n||_===n+r)h(n+r),e.offset=n,e.count=r;else{e.splitAxis=m.axis;let i=new le,a=n,o=_-n;e.left=i,ie(t,a,o,i.boundingData,f),g(i,a,o,f,l+1);let s=new le,c=_,u=r-o;e.right=s,ie(t,c,u,s.boundingData,f),g(s,c,u,f,l+1)}return e}}function be(e,t){let n=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,r=e.getRootRanges(t.range),i=r[0],a=r[r.length-1],o={offset:i.offset,count:a.offset+a.count-i.offset},s=new Float32Array(6*o.count);s.offset=o.offset,e.computePrimitiveBounds(o.offset,o.count,s),e._roots=r.map(r=>{let i=ye(e,s,r.offset,r.count,t),a=new n(32*ge(i));return _e(0,i,a),a})}var xe=class{constructor(e){this._getNewPrimitive=e,this._primitives=[]}getPrimitive(){let e=this._primitives;return e.length===0?this._getNewPrimitive():e.pop()}releasePrimitive(e){this._primitives.push(e)}},I=new class{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;let e=[],t=null;this.setBuffer=n=>{t&&e.push(t),t=n,this.float32Array=new Float32Array(n),this.uint16Array=new Uint16Array(n),this.uint32Array=new Uint32Array(n)},this.clearBuffer=()=>{t=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,e.length!==0&&this.setBuffer(e.pop())}}},L,Se,Ce=[],we=new xe(()=>new u);function Te(e,t,n,r,i,a){L=we.getPrimitive(),Se=we.getPrimitive(),Ce.push(L,Se),I.setBuffer(e._roots[t]);let o=Ee(0,e.geometry,n,r,i,a);I.clearBuffer(),we.releasePrimitive(L),we.releasePrimitive(Se),Ce.pop(),Ce.pop();let s=Ce.length;return s>0&&(Se=Ce[s-1],L=Ce[s-2]),o}function Ee(e,t,n,r,i=null,a=0,o=0){let{float32Array:s,uint16Array:c,uint32Array:l}=I,u=e*2;if(O(u,c)){let t=k(e,l),n=A(u,c);return T(N(e),s,L),r(t,n,!1,o,a+e/8,L)}else{let u=j(e),d=M(e,l),f=u,p=d,m,h,g,_;if(i&&(g=L,_=Se,T(N(f),s,g),T(N(p),s,_),m=i(g),h=i(_),hnew u),ke=new u,Ae=new u,je=new u,Me=new u,Ne=!1;function Pe(e,t,n,r){if(Ne)throw Error(`MeshBVH: Recursive calls to bvhcast not supported.`);Ne=!0;let i=e._roots,a=t._roots,o,c=0,l=0,u=new s().copy(n).invert();for(let e=0,t=i.length;es&&(s=u),tc&&(c=d),rl&&(l=f)}return n[r+0]=i,n[r+1]=a,n[r+2]=o,n[r+3]=s,n[r+4]=c,n[r+5]=l,n}computePrimitiveBounds(e,t,n){let r=n.offset||0;for(let i=e,a=e+t;i=0;e--){let t=e*8,n=t*2;if(O(n,i)){let e=k(t,r),o=A(n,i);this.writePrimitiveRangeBounds(e,o,Ie,0),a.set(Ie,t)}else{let e=j(t),n=M(t,r);for(let r=0;r<3;r++){let i=a[e+r],o=a[e+r+3],s=a[n+r],c=a[n+r+3];a[t+r]=ic?o:c}}}}}getBoundingBox(e){return e.makeEmpty(),this._roots.forEach(t=>{T(0,new Float32Array(t),Fe),e.union(Fe)}),e}shapecast(e){let{boundsTraverseOrder:t,intersectsBounds:n,intersectsRange:r,intersectsPrimitive:i,scratchPrimitive:a,iterate:o}=e;if(r&&i){let e=r;r=(t,n,r,s,c)=>e(t,n,r,s,c)?!0:o(t,n,this,i,r,s,a)}else r||=i?(e,t,n,r)=>o(e,t,this,i,n,r,a):(e,t,n)=>n;let s=!1,c=0,l=this._roots;for(let e=0,i=l.length;e65535?new Uint32Array(new t(4*e)):new Uint16Array(new t(2*e))}function He(e,t){if(!e.index){let n=e.attributes.position.count,r=Ve(n,t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer);e.setIndex(new v(r,1));for(let e=0;e({offset:e.start/t,count:e.count/t}))}function Ge(e,t,n){let r=Ue(e,t,n),i=We(e,n);if(!i.length)return[r];let a=[],o=r.offset,s=r.offset+r.count,c=ze(e)/n,l=[];for(let e of i){let{offset:t,count:n}=e,r=t,i=t+(isFinite(n)?n:c-t);ro&&(l.push({pos:Math.max(o,r),isStart:!0}),l.push({pos:Math.min(s,i),isStart:!1}))}l.sort((e,t)=>e.pos===t.pos?e.type===`end`?-1:1:e.pos-t.pos);let u=0,d=null;for(let e of l){let t=e.pos;u!==0&&t!==d&&a.push({offset:d,count:t-d}),u+=e.isStart?1:-1,d=t}return a}function Ke(e,t){let n=e[e.length-1],r=n.offset+n.count>2**16,i=e.reduce((e,t)=>e+t.count,0),a=r?4:2,o=t?new SharedArrayBuffer(i*a):new ArrayBuffer(i*a),s=r?new Uint32Array(o):new Uint16Array(o),c=0;for(let t=0;tthis._indirectBuffer[e]:e=>e,this.primitiveBuffer=null,this.primitiveBufferStride=null,this._indirectBuffer=null,t={...w,...t},t[C]||this.init(t)}init(e){let{geometry:t,primitiveStride:n}=this;e.indirect?this._indirectBuffer=Ke(Ge(t,e.range,n),e.useSharedArrayBuffer):He(t,e),super.init(e),!t.boundingBox&&e.setBoundingBox&&(t.boundingBox=this.getBoundingBox(new u))}getRootRanges(e){return this.indirect?[{offset:0,count:this._indirectBuffer.length}]:Ge(this.geometry,e,this.primitiveStride)}raycastObject3D(){throw Error(`BVH: raycastObject3D() not implemented`)}},B=class{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(e,t){let n=1/0,r=-1/0;for(let i=0,a=e.length;ir?a:r}this.min=n,this.max=r}setFromPoints(e,t){let n=1/0,r=-1/0;for(let i=0,a=t.length;ir?o:r}this.min=n,this.max=r}isSeparated(e){return this.min>e.max||e.min>this.max}};B.prototype.setFromBox=(function(){let t=new e;return function(e,n){let r=n.min,i=n.max,a=1/0,o=-1/0;for(let n=0;n<=1;n++)for(let s=0;s<=1;s++)for(let c=0;c<=1;c++){t.x=r.x*n+i.x*(1-n),t.y=r.y*s+i.y*(1-s),t.z=r.z*c+i.z*(1-c);let l=e.dot(t);a=Math.min(l,a),o=Math.max(l,o)}this.min=a,this.max=o}})(),(function(){let e=new B;return function(t,n){let r=t.points,i=t.satAxes,a=t.satBounds,o=n.points,s=n.satAxes,c=n.satBounds;for(let t=0;t<3;t++){let n=a[t],r=i[t];if(e.setFromPoints(r,o),n.isSeparated(e))return!1}for(let t=0;t<3;t++){let n=c[t],i=s[t];if(e.setFromPoints(i,r),n.isSeparated(e))return!1}}})();var Je=(function(){let t=new e,n=new e,r=new e;return function(e,i,a){let o=e.start,s=t,c=i.start,l=n;r.subVectors(o,c),t.subVectors(e.end,e.start),n.subVectors(i.end,i.start);let u=r.dot(l),d=l.dot(s),f=l.dot(l),p=r.dot(s),m=s.dot(s)*f-d*d,h,g;h=m===0?0:(u*d-p*f)/m,g=(u+h*d)/f,a.x=h,a.y=g}})(),Ye=(function(){let t=new h,n=new e,r=new e;return function(e,i,a,o){Je(e,i,t);let s=t.x,c=t.y;if(s>=0&&s<=1&&c>=0&&c<=1){e.at(s,a),i.at(c,o);return}else if(s>=0&&s<=1){c<0?i.at(0,o):i.at(1,o),e.closestPointToPoint(o,!0,a);return}else if(c>=0&&c<=1){s<0?e.at(0,a):e.at(1,a),i.closestPointToPoint(a,!0,o);return}else{let t;t=s<0?e.start:e.end;let l;l=c<0?i.start:i.end;let u=n,d=r;if(e.closestPointToPoint(l,!0,n),i.closestPointToPoint(t,!0,r),u.distanceToSquared(l)<=d.distanceToSquared(t)){a.copy(u),o.copy(l);return}else{a.copy(t),o.copy(d);return}}}})(),Xe=(function(){let t=new e,n=new e,r=new d,a=new i;return function(e,i){let{radius:o,center:s}=e,{a:c,b:l,c:u}=i;if(a.start=c,a.end=l,a.closestPointToPoint(s,!0,t).distanceTo(s)<=o||(a.start=c,a.end=u,a.closestPointToPoint(s,!0,t).distanceTo(s)<=o)||(a.start=l,a.end=u,a.closestPointToPoint(s,!0,t).distanceTo(s)<=o))return!0;let d=i.getPlane(r);if(Math.abs(d.distanceToPoint(s))<=o){let e=d.projectPoint(s,n);if(i.containsPoint(e))return!0}return!1}})(),Ze=[`x`,`y`,`z`],V=1e-15,Qe=V*V;function H(e){return Math.abs(e)new e),this.satBounds=[,,,,].fill().map(()=>new B),this.points=[this.a,this.b,this.c],this.plane=new d,this.isDegenerateIntoSegment=!1,this.isDegenerateIntoPoint=!1,this.degenerateSegment=new i,this.needsUpdate=!0}intersectsSphere(e){return Xe(e,this)}update(){let e=this.a,t=this.b,n=this.c,r=this.points,i=this.satAxes,a=this.satBounds,o=i[0],s=a[0];this.getNormal(o),s.setFromPoints(o,r);let c=i[1],l=a[1];c.subVectors(e,t),l.setFromPoints(c,r);let u=i[2],d=a[2];u.subVectors(t,n),d.setFromPoints(u,r);let f=i[3],p=a[3];f.subVectors(n,e),p.setFromPoints(f,r);let m=c.length(),h=u.length(),g=f.length();this.isDegenerateIntoPoint=!1,this.isDegenerateIntoSegment=!1,m0)g(e.c,e.a,e.b,r,t,n,c,o,s,l,u);else if(a>0)g(e.b,e.a,e.c,n,t,r,s,o,c,l,u);else if(s*c>0||o!=0)g(e.a,e.b,e.c,t,n,r,o,s,c,l,u);else if(s!=0)g(e.b,e.a,e.c,n,t,r,s,o,c,l,u);else if(c!=0)g(e.c,e.a,e.b,r,t,n,c,o,s,l,u);else return!0;return!1}function v(e,t,n,r){let i=t.degenerateSegment,o=e.plane.distanceToPoint(i.start),s=e.plane.distanceToPoint(i.end);return H(o)?H(s)?m(e,t,n,r):(n&&(n.start.copy(i.start),n.end.copy(i.start)),e.containsPoint(i.start)):H(s)?(n&&(n.start.copy(i.end),n.end.copy(i.end)),e.containsPoint(i.end)):e.plane.intersectLine(i,a)==null?!1:(n&&(n.start.copy(a),n.end.copy(a)),e.containsPoint(a))}function y(e,t,n){let r=t.a;return H(e.plane.distanceToPoint(r))&&e.containsPoint(r)?(n&&(n.start.copy(r),n.end.copy(r)),!0):!1}function b(e,t,n){let r=e.degenerateSegment,i=t.a;return r.closestPointToPoint(i,!0,a),i.distanceToSquared(a)1||p<0||p>1?!1:H(r.start.z+c.z*f-(i.start.z+l.z*p))?(n&&(n.start.copy(r.start).addScaledVector(c,f),n.end.copy(r.start).addScaledVector(c,f)),!0):!1}else if(t.isDegenerateIntoPoint)return b(e,t,n);else return v(t,e,n,r);else if(e.isDegenerateIntoPoint)return t.isDegenerateIntoPoint?t.a.distanceToSquared(e.a)0&&b>0)return!1;let S=a.distanceToPoint(e.a),C=a.distanceToPoint(e.b),w=a.distanceToPoint(e.c);H(S)&&(S=0),H(C)&&(C=0),H(w)&&(w=0);let T=S*C,ee=S*w;if(T>0&&ee>0)return!1;o.copy(a.normal),s.copy(c.normal);let te=o.cross(s),ne=0,E=Math.abs(te.x),D=Math.abs(te.y);D>E&&(E=D,ne=1),Math.abs(te.z)>E&&(ne=2);let O=Ze[ne],k=this.a[O],A=this.b[O],j=this.c[O],M=e.a[O],re=e.b[O],N=e.c[O];if(_(this,k,A,j,y,b,h,g,v,f,l)||_(e,M,re,N,T,ee,S,C,w,p,u))return m(this,e,n,r);if(f.yf.x?n.start.copy(u.start):n.start.copy(l.start),p.ynew e),this.satAxes=[,,,].fill().map(()=>new e),this.satBounds=[,,,].fill().map(()=>new B),this.alignedSatBounds=[,,,].fill().map(()=>new B),this.needsUpdate=!1,t&&this.min.copy(t),n&&this.max.copy(n),r&&this.matrix.copy(r)}set(e,t,n){this.min.copy(e),this.max.copy(t),this.matrix.copy(n),this.needsUpdate=!0}copy(e){this.min.copy(e.min),this.max.copy(e.max),this.matrix.copy(e.matrix),this.needsUpdate=!0}};W.prototype.update=(function(){return function(){let e=this.matrix,t=this.min,n=this.max,r=this.points;for(let i=0;i<=1;i++)for(let a=0;a<=1;a++)for(let o=0;o<=1;o++){let s=r[1*i|2*a|4*o];s.x=i?n.x:t.x,s.y=a?n.y:t.y,s.z=o?n.z:t.z,s.applyMatrix4(e)}let i=this.satBounds,a=this.satAxes,o=r[0];for(let e=0;e<3;e++){let t=a[e],n=i[e],s=r[1<new i),r=Array(12).fill().map(()=>new i),a=new e,o=new e;return function(e,i=0,s=null,c=null){if(this.needsUpdate&&this.update(),this.intersectsBox(e))return(s||c)&&(e.getCenter(o),this.closestPointToPoint(o,a),e.closestPointToPoint(a,o),s&&s.copy(a),c&&c.copy(o)),0;let l=i*i,u=e.min,d=e.max,f=this.points,p=1/0;for(let e=0;e<8;e++){let t=f[e];o.copy(t).clamp(u,d);let n=t.distanceToSquared(o);if(nnew U)}},$e=new e,et=new e;function tt(e,t,n={},r=0,i=1/0){let a=r*r,o=i*i,s=1/0,c=null;if(e.shapecast({boundsTraverseOrder:e=>($e.copy(t).clamp(e.min,e.max),$e.distanceToSquared(t)),intersectsBounds:(e,t,n)=>n{e.closestPointToPoint(t,$e);let r=t.distanceToSquared($e);return r=169,rt=parseInt(t)<=161,K=new e,q=new e,J=new e,it=new h,at=new h,ot=new h,st=new e,ct=new e,lt=new e,ut=new e;function dt(e,t,n,r,i,a,o,s){let c;if(c=a===1?e.intersectTriangle(r,n,t,!0,i):e.intersectTriangle(t,n,r,a!==2,i),c===null)return null;let l=e.origin.distanceTo(i);return ls?null:{distance:l,point:i.clone()}}function ft(t,n,r,i,a,o,s,c,l,u,d){K.fromBufferAttribute(n,o),q.fromBufferAttribute(n,s),J.fromBufferAttribute(n,c);let f=dt(t,K,q,J,ut,l,u,d);if(f){if(i){it.fromBufferAttribute(i,o),at.fromBufferAttribute(i,s),ot.fromBufferAttribute(i,c),f.uv=new h;let e=y.getInterpolation(ut,K,q,J,it,at,ot,f.uv);nt||(f.uv=e)}if(a){it.fromBufferAttribute(a,o),at.fromBufferAttribute(a,s),ot.fromBufferAttribute(a,c),f.uv1=new h;let e=y.getInterpolation(ut,K,q,J,it,at,ot,f.uv1);nt||(f.uv1=e),rt&&(f.uv2=f.uv1)}if(r){st.fromBufferAttribute(r,o),ct.fromBufferAttribute(r,s),lt.fromBufferAttribute(r,c),f.normal=new e;let n=y.getInterpolation(ut,K,q,J,st,ct,lt,f.normal);f.normal.dot(t.direction)>0&&f.normal.multiplyScalar(-1),nt||(f.normal=n)}let n={a:o,b:s,c,normal:new e,materialIndex:0};if(y.getNormal(K,q,J,n.normal),f.face=n,f.faceIndex=o,nt){let t=new e;y.getBarycoord(ut,K,q,J,t),f.barycoord=t}}return f}function pt(e){return e&&e.isMaterial?e.side:e}function mt(e,t,n,r,i,a,o){let s=r*3,c=s+0,l=s+1,u=s+2,{index:d,groups:f}=e;e.index&&(c=d.getX(c),l=d.getX(l),u=d.getX(u));let{position:p,normal:m,uv:h,uv1:g}=e.attributes;if(Array.isArray(t)){let e=r*3;for(let s=0,d=f.length;s=d&&ef&&(f=n),op&&(p=o),sm&&(m=s)}return c[e+0]!==a||c[e+1]!==u||c[e+2]!==d||c[e+3]!==f||c[e+4]!==p||c[e+5]!==m?(c[e+0]=a,c[e+1]=u,c[e+2]=d,c[e+3]=f,c[e+4]=p,c[e+5]=m,!0):!1}else{let r=j(e),i=M(e,o),s=a,l=!1,u=!1;if(t){if(!s){let e=r/8+n/32,a=i/8+n/32;l=t.has(e),u=t.has(a),s=!l&&!u}}else l=!0,u=!0;let f=s||l,p=s||u,m=!1;f&&(m=d(r,n,s));let h=!1;p&&(h=d(i,n,s));let g=m||h;if(g)for(let t=0;t<3;t++){let n=r+t,a=i+t,o=c[n],s=c[n+3],l=c[a],u=c[a+3];c[e+t]=ou?s:u}return g}}}function X(e,t,n,r,i){let a,o,s,c,l,u,d=1/n.direction.x,f=1/n.direction.y,p=1/n.direction.z,m=n.origin.x,h=n.origin.y,g=n.origin.z,_=t[e],v=t[e+3],y=t[e+1],b=t[e+3+1],x=t[e+2],S=t[e+3+2];return d>=0?(a=(_-m)*d,o=(v-m)*d):(a=(v-m)*d,o=(_-m)*d),f>=0?(s=(y-h)*f,c=(b-h)*f):(s=(b-h)*f,c=(y-h)*f),a>c||s>o||((s>a||isNaN(a))&&(a=s),(c=0?(l=(x-g)*p,u=(S-g)*p):(l=(S-g)*p,u=(x-g)*p),a>u||l>o)?!1:((l>a||a!==a)&&(a=l),(u=r)}function yt(e,t,n,r,i,a,o,s){let{geometry:c,_indirectBuffer:l}=e;for(let e=r,u=r+i;e=0,d,f;u?(d=j(e),f=M(e,c)):(d=M(e,c),f=j(e));let p=X(d,o,r,i,a)?Et(d,t,n,r,i,a):null;if(p){let e=p.point[l];if(u?e<=o[f+s]:e>=o[f+s+3])return p}let m=X(f,o,r,i,a)?Et(f,t,n,r,i,a):null;return p&&m?p.distance<=m.distance?p:m:p||m||null}}var Dt=new u,Ot=new U,kt=new U,At=new s,jt=new W,Mt=new W;function Nt(e,t,n,r){I.setBuffer(e._roots[t]);let i=Pt(0,e,n,r);return I.clearBuffer(),i}function Pt(e,t,n,r,i=null){let{float32Array:a,uint16Array:o,uint32Array:s}=I,c=e*2;if(i===null&&(n.boundingBox||n.computeBoundingBox(),jt.set(n.boundingBox.min,n.boundingBox.max,r),i=jt),O(c,o)){let i=t.geometry,l=i.index,u=i.attributes.position,d=n.index,f=n.attributes.position,p=k(e,s),m=A(c,o);if(At.copy(r).invert(),n.boundsTree)return T(N(e),a,Mt),Mt.matrix.copy(At),Mt.needsUpdate=!0,n.boundsTree.shapecast({intersectsBounds:e=>Mt.intersectsBox(e),intersectsTriangle:e=>{e.a.applyMatrix4(r),e.b.applyMatrix4(r),e.c.applyMatrix4(r),e.needsUpdate=!0;for(let t=p*3,n=(m+p)*3;tIt.distanceToBox(e),intersectsBounds:(e,t,n)=>n{if(t.boundsTree)return t.boundsTree.shapecast({boundsTraverseOrder:e=>Lt.distanceToBox(e),intersectsBounds:(e,t,n)=>n{for(let o=t,s=t+i;op&&(p=a),om&&(m=o),sh&&(h=s)}}return c[n+0]!==l||c[n+1]!==d||c[n+2]!==f||c[n+3]!==p||c[n+4]!==m||c[n+5]!==h?(c[n+0]=l,c[n+1]=d,c[n+2]=f,c[n+3]=p,c[n+4]=m,c[n+5]=h,!0):!1}else{let e=j(n),r=M(n,o),i=l,s=!1,u=!1;if(t){if(!i){let n=e/8+a/32,o=r/8+a/32;s=t.has(n),u=t.has(o),i=!s&&!u}}else s=!0,u=!0;let f=i||s,p=i||u,m=!1;f&&(m=d(e,a,i));let h=!1;p&&(h=d(r,a,i));let g=m||h;if(g)for(let t=0;t<3;t++){let i=e+t,a=r+t,o=c[i],s=c[i+3],l=c[a],u=c[a+3];c[n+t]=ou?s:u}return g}}}function Wt(e,t,n,r,i,a,o){I.setBuffer(e._roots[t]),Gt(0,e,n,r,i,a,o),I.clearBuffer()}function Gt(e,t,n,r,i,a,o){let{float32Array:s,uint16Array:c,uint32Array:l}=I,u=e*2;if(O(u,c))yt(t,n,r,k(e,l),A(u,c),i,a,o);else{let c=j(e);X(c,s,r,a,o)&&Gt(c,t,n,r,i,a,o);let u=M(e,l);X(u,s,r,a,o)&&Gt(u,t,n,r,i,a,o)}}var Kt=[`x`,`y`,`z`];function qt(e,t,n,r,i,a){I.setBuffer(e._roots[t]);let o=Jt(0,e,n,r,i,a);return I.clearBuffer(),o}function Jt(e,t,n,r,i,a){let{float32Array:o,uint16Array:s,uint32Array:c}=I,l=e*2;if(O(l,s))return bt(t,n,r,k(e,c),A(l,s),i,a);{let s=re(e,c),l=Kt[s],u=r.direction[l]>=0,d,f;u?(d=j(e),f=M(e,c)):(d=M(e,c),f=j(e));let p=X(d,o,r,i,a)?Jt(d,t,n,r,i,a):null;if(p){let e=p.point[l];if(u?e<=o[f+s]:e>=o[f+s+3])return p}let m=X(f,o,r,i,a)?Jt(f,t,n,r,i,a):null;return p&&m?p.distance<=m.distance?p:m:p||m||null}}var Yt=new u,Xt=new U,Zt=new U,Qt=new s,$t=new W,en=new W;function tn(e,t,n,r){I.setBuffer(e._roots[t]);let i=nn(0,e,n,r);return I.clearBuffer(),i}function nn(e,t,n,r,i=null){let{float32Array:a,uint16Array:o,uint32Array:s}=I,c=e*2;if(i===null&&(n.boundingBox||n.computeBoundingBox(),$t.set(n.boundingBox.min,n.boundingBox.max,r),i=$t),O(c,o)){let i=t.geometry,l=i.index,u=i.attributes.position,d=n.index,f=n.attributes.position,p=k(e,s),m=A(c,o);if(Qt.copy(r).invert(),n.boundsTree)return T(N(e),a,en),en.matrix.copy(Qt),en.needsUpdate=!0,n.boundsTree.shapecast({intersectsBounds:e=>en.intersectsBox(e),intersectsTriangle:e=>{e.a.applyMatrix4(r),e.b.applyMatrix4(r),e.c.applyMatrix4(r),e.needsUpdate=!0;for(let n=p,r=m+p;nan.distanceToBox(e),intersectsBounds:(e,t,n)=>n{if(t.boundsTree){let s=t.boundsTree;return s.shapecast({boundsTraverseOrder:e=>on.distanceToBox(e),intersectsBounds:(e,t,n)=>n{for(let x=t,S=t+o;xe.slice()),o.index=a?a.array.slice():null,o.indirectBuffer=i?i.slice():null):(o.roots=r,o.index=a?a.array:null,o.indirectBuffer=i),o}static deserialize(t,n,r={}){r={setIndex:!0,indirect:!!t.indirectBuffer,...r};let{index:i,roots:a,indirectBuffer:o}=t;t.version||(console.warn(`MeshBVH.deserialize: Serialization format has been changed and will be fixed up. It is recommended to regenerate any stored serialized data.`),c(a));let s=new e(n,{...r,[C]:!0});if(s._roots=a,s._indirectBuffer=o||null,r.setIndex){let e=n.getIndex();if(e===null){let e=new v(t.index,1,!1);n.setIndex(e)}else e.array!==i&&(e.array.set(i),e.needsUpdate=!0)}return s;function c(e){for(let t=0;td&&(d=i),o>d&&(d=o),t[n+e]=s,t[n+e+3]=d}return t}computePrimitiveBounds(e,t,n){let r=this.geometry,i=this._indirectBuffer,a=r.attributes.position,o=r.index?r.index.array:null,s=a.normalized;if(e<0||t+e-n.offset>n.length/6)throw Error(`MeshBVH: compute triangle bounds range is invalid.`);let c=a.array,l=a.offset||0,u=3;a.isInterleavedBufferAttribute&&(u=a.data.stride);let d=[`getX`,`getY`,`getZ`],f=n.offset;for(let r=e,p=e+t;ru&&(u=i),o>u&&(u=o);let f=(u-l)/2,g=e*2;n[t+g+0]=l+f,n[t+g+1]=f+(Math.abs(l)+f)*S}}return n}raycastObject3D(e,t,n=[]){let{material:r}=e;if(r===void 0)return;gn.copy(e.matrixWorld).invert(),mn.copy(t.ray).applyMatrix4(gn),_n.setFromMatrixScale(e.matrixWorld),hn.copy(mn.direction).multiply(_n);let i=hn.length(),a=t.near/i,o=t.far/i;if(t.firstHitOnly===!0){let i=this.raycastFirst(mn,r,a,o);i=fn(i,e,t),i&&n.push(i)}else{let i=this.raycast(mn,r,a,o);for(let r=0,a=i.length;r{Y(o,this.resolveTriangleIndex(e)*3,s,c)}:e=>{Y(o,e*3,s,c)},u=G.getPrimitive(),d=t.geometry.index,f=t.geometry.attributes.position,p=t.indirect?e=>{Y(u,t.resolveTriangleIndex(e)*3,d,f)}:e=>{Y(u,e*3,d,f)};if(a){if(!(t instanceof e))throw Error(`MeshBVH: "intersectsTriangles" callback can only be used with another MeshBVH.`);let r=(e,t,r,i,s,c,d,f)=>{for(let m=r,h=r+i;mpn.intersectsBox(e),intersectsTriangle:e=>pn.intersectsTriangle(e)})}intersectsSphere(e){return this.shapecast({intersectsBounds:t=>e.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(e)})}closestPointToGeometry(e,t,n={},r={},i=0,a=1/0){return(this.indirect?dn:Ht)(this,e,t,n,r,i,a)}closestPointToPoint(e,t={},n=0,r=1/0){return tt(this,e,t,n,r)}},bn={Mesh:l.prototype.raycast,Line:m.prototype.raycast,LineSegments:n.prototype.raycast,LineLoop:a.prototype.raycast,Points:f.prototype.raycast,BatchedMesh:_.prototype.raycast},Z=new l,xn=[];function Sn(e,t){if(this.isBatchedMesh)Cn.call(this,e,t);else{let{geometry:r}=this;if(r.boundsTree)r.boundsTree.raycastObject3D(this,e,t);else{let r;if(this instanceof l)r=bn.Mesh;else if(this instanceof n)r=bn.LineSegments;else if(this instanceof a)r=bn.LineLoop;else if(this instanceof m)r=bn.Line;else if(this instanceof f)r=bn.Points;else throw Error(`BVH: Fallback raycast function not found.`);r.call(this,e,t)}}}function Cn(e,t){if(this.boundsTrees){let n=this.boundsTrees,r=this._drawInfo||this._instanceInfo,i=this._drawRanges||this._geometryInfo,a=this.matrixWorld;Z.material=this.material,Z.geometry=this.geometry;let o=Z.geometry.boundsTree,s=Z.geometry.drawRange;Z.geometry.boundingSphere===null&&(Z.geometry.boundingSphere=new g);for(let o=0,s=r.length;o=2&&t.setY(a,e.getY(i)),r>=3&&t.setZ(a,e.getZ(i)),r>=4&&t.setW(a,e.getW(i))}}else{let r=t.array,i=r.constructor,a=r.BYTES_PER_ELEMENT*e.itemSize*n;new i(r.buffer,a,e.array.length).set(e.array)}}function In(e,t,n){let r=e.elements,i=t.elements;for(let e=0,t=i.length;e{e.traverseVisible(e=>{e.isMesh&&t.push(e)})}),this.meshes=t,this.useGroups=!0,this.applyWorldTransforms=!0,this.attributes=[`position`,`normal`,`color`,`tangent`,`uv`,`uv2`],this._intermediateGeometry=Array(t.length).fill().map(()=>new o),this._diffMap=new WeakMap}getMaterials(){let e=[];return this.meshes.forEach(t=>{Array.isArray(t.material)?e.push(...t.material):e.push(t.material)}),e}generate(e=new o){let t=[],{meshes:n,useGroups:r,_intermediateGeometry:i,_diffMap:a}=this;for(let e=0,r=n.length;e{throw e.message?Error(`${this.name}: Could not create Web Worker with error "${e.message}"`):Error(`${this.name}: Could not create Web Worker.`)}}runTask(){}generate(...e){if(this.running)throw Error(`GenerateMeshBVHWorker: Already running job.`);if(this.worker===null)throw Error(`GenerateMeshBVHWorker: Worker has been disposed.`);this.running=!0;let t=this.runTask(this.worker,...e);return t.finally(()=>{this.running=!1}),t}dispose(){this.worker.terminate(),this.worker=null}};export{yn as a,qe as c,C as d,wn as i,Ke as l,Un as n,W as o,Sn as r,U as s,Wn as t,Le as u}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/three-mesh-bvh.B-oXEGo2.js.gz b/Needle/MenuScene/dist/assets/three-mesh-bvh.B-oXEGo2.js.gz deleted file mode 100644 index c95f54f..0000000 Binary files a/Needle/MenuScene/dist/assets/three-mesh-bvh.B-oXEGo2.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/three-mesh-ui.CgGzZ3ml.js b/Needle/MenuScene/dist/assets/three-mesh-ui.CgGzZ3ml.js deleted file mode 100644 index 9df634e..0000000 --- a/Needle/MenuScene/dist/assets/three-mesh-ui.CgGzZ3ml.js +++ /dev/null @@ -1,406 +0,0 @@ -import{n as e}from"./rolldown-runtime.CYVBeYYp.js";import{A as t,Ar as n,It as r,Qt as i,S as a,Zt as o,_n as s,_r as c,fn as l,gr as u,it as d,jr as f,kr as ee,nt as te,tr as ne,vn as re,x as ie}from"./three@0.169.19.js";var ae=e({BaseProperty:()=>xi,Behavior:()=>Si,Block:()=>Ci,DefaultValues:()=>wi,FontLibrary:()=>Ti,FontVariant:()=>Ei,InheritableProperty:()=>Di,Inline:()=>Oi,InlineBlock:()=>ki,InlineGlyph:()=>Ai,MSDFFontMaterialUtils:()=>ji,MaterialTransformers:()=>Mi,MeshUIBaseElement:()=>Ni,ShaderChunkUI:()=>Pi,Text:()=>Fi,TypographicFont:()=>Ii,TypographicGlyph:()=>Li,default:()=>Ri,update:()=>zi}),p={};p.d=(e,t)=>{for(var n in t)p.o(t,n)&&!p.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},p.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),p.r=e=>{typeof Symbol<`u`&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:`Module`}),Object.defineProperty(e,`__esModule`,{value:!0})};var m={};p.d(m,{ti:()=>v,nS:()=>_i,eB:()=>mr,Yp:()=>h,VB:()=>W,BC:()=>E,zN:()=>y,cV:()=>Zr,hW:()=>hi,k2:()=>we,K6:()=>V,M7:()=>g,ls:()=>q,Hi:()=>hn,EY:()=>di,MR:()=>Tt,zf:()=>Ce,Ay:()=>bi,yo:()=>vi});var h={};p.r(h),p.d(h,{get:()=>se,set:()=>oe});var g={};p.r(g),p.d(g,{alphaTestTransformer:()=>R,asPreprocessorValueTransformer:()=>Mt,toPreprocessorTriggerTransformer:()=>z,toUserDataTransformer:()=>Nt,uniformOrUserDataTransformer:()=>B});var _={fontFamily:null,fontSize:.05,fontKerning:`auto`,fontStyle:`normal`,fontWeight:`normal`,offset:.005,lineHeight:1.2,lineBreak:`- ,.:?! -`,whiteSpace:`pre-line`,flexDirection:`column`,justifyContent:`start`,alignItems:`start`,backgroundImage:null,textAlign:`left`,boxSizing:`content-box`,position:`static`,color:16777215,fontColor:16777215,fontOpacity:1,opacity:1,fontPXRange:4,fontSupersampling:!0,fontSmooth:`antialiased`,borderRadius:0,borderWidth:0,borderColor:`black`,borderOpacity:1,backgroundSize:`cover`,backgroundColor:0,backgroundOpacity:0,overflow:`visible`,letterSpacing:0,invertAlpha:!1,segments:1},oe=function(e){for(let t in e)_[t]=e[t]},se=function(e){return Object.prototype.hasOwnProperty.call(_,e)||console.warn(`ThreeMeshUI::DefaultValues is trying to retrieve non-existing property '${e}'`),_[e]},v=class{constructor(e,t=null,n=!0){this._id=e,this._value=t,this._needsUpdate=!0,this._needsProcess=!1,this._needsRender=!1,this._isPrimitive=n}get id(){return this._id}get value(){return this._value}set value(e){this.isValid(e)&&this._value!==e&&(this._value=e,this._needsUpdate=!0)}update(e,t){this.output(t)}output(e){}_outputValue(e){e[this._id]=this._value}process(e){}render(e){}getInheritedInput(e){if(this._value!==`inherit`)return this._value;let t=e._parent._value;return t&&t[`_${this._id}`]?t[`_${this._id}`].getInheritedInput(t):this.getDefaultValue()}getDefaultValue(){return se(this._id)}isValid(e){return!0}emptyStrategyLogic(){throw Error(`ThreeMeshUI::${this.constructor.name} has empty strategy. Update has not been processed.`)}requestUpdate(){this._needsUpdate=!0}requestProcess(){this._needsProcess=!1}requestRender(){this._needsRender=!1}},ce=class extends v{constructor(){super(`renderOrder`,`auto`,!0),this.output=this._outputValue,this._actualValue=0}set value(e){this.isValid(e)&&(this._value=e,this._needsUpdate=!0)}update(e,t){if(this._value!==`auto`)this._actualValue=this._value;else{let t=e._parent._value;t!==null&&(this._actualValue=t._renderOrder._actualValue+(1+t._children._uis.indexOf(e)))}for(let t of e._children._uis)t._renderOrder._value===`auto`&&(t._renderOrder._needsUpdate=!0);this._outputValue(t)}_outputValue(e){e[this._id]=this._actualValue}get value(){return this._value}},y=class extends v{constructor(e,t=null,n=!0){super(e,t,n),this.output=this._outputValue,this._notInheritedValue=null}update(e,t){this._notInheritedValue=this._value,this._notInheritedValue===`inherit`&&(this._notInheritedValue=this.getInheritedInput(e)),this.propagate(e),this._outputValue(t)}propagate(e){for(let t of e._children._uis){let e=t[`_${this._id}`];e!==void 0&&e._value===`inherit`&&(t[`_${this._id}`]._needsUpdate=!0)}}_outputValue(e){e[this._id]=this._notInheritedValue}set value(e){this.isValid(e)&&this._value!==e&&(this._value=e,this._needsUpdate=!0)}get value(){return this._value===`inherit`?this._notInheritedValue:this._value}},le=class extends y{constructor(){super(`offset`,`inherit`,!1)}update(e,t){super.update(e,t),e._parent._value!==null&&(e.position.z=this._notInheritedValue)}},ue=class extends y{constructor(){super(`fontSmooth`,`inherit`,!0),this._needsUpdate=!1,this.isValid=fe,this.output=this._outputValue}},de=[`inherit`,`none`,`antialiased`];function fe(e){return de.indexOf(e)===-1?(console.warn(`.fontSmoothing value '${e}' is not valid. Aborted`),!1):!0}var b=(e=>{var t={};return p.d(t,e),t})({BackSide:()=>1,BufferAttribute:()=>ie,BufferGeometry:()=>a,Color:()=>t,DoubleSide:()=>2,EventDispatcher:()=>te,FileLoader:()=>d,FrontSide:()=>0,LinearFilter:()=>r,Mesh:()=>o,MeshBasicMaterial:()=>i,Object3D:()=>l,Plane:()=>s,PlaneGeometry:()=>re,ShaderMaterial:()=>ne,Texture:()=>u,TextureLoader:()=>c,Vector2:()=>ee,Vector3:()=>n,Vector4:()=>f}),x=class extends v{constructor(e,t,n=!0){super(e,`unset`,n),this._input=`inherit`,this._allowsInherit=!0,this._inheritedInput=void 0,this._inline=void 0}update(e,t){this._allowsInherit||(this._inheritedInput=this.getInheritedInput(e)),this.computeOutputValue(e);for(let t of e._children._uis){let e=t[`_${this._id}`];(e._input?e._input:e._value)===`inherit`&&(t[`_${this._id}`]._needsUpdate=!0)}this.output(t)}computeOutputValue(e){this._value=this._input}_computeFromInherited(e){this._value=this._inheritedInput}set value(e){console.warn(`.(style) sub-property cannot be directly set. It must comes from inline or computed setter.`)}set inline(e){this.isValidValue(e)&&e!==this._inline&&(this._input=this._inline=e,this._needsUpdate=!0)}get inline(){return this._inline}isValidValue(e){return!0}getInheritedInput(e){if(this._input!==`inherit`)return this._input;let t=e._parent._value;return t?t[`_${this._id}`].getInheritedInput(t):this.getDefaultValue()}},S=class extends x{constructor(e,t){super(e,t,!1),this._input=new b.Vector4(0,0,0,0),this._inline=null,this._value=new b.Vector4(0,0,0,0)}get value(){return this._value}computeOutputValue(e){this._vector4ValueSetter(this._value,this._input)}set inline(e){this._vector4ValueSetter(this._input,e),!this._input.equals(this._value)&&(this._needsUpdate=!0)}set top(e){this._input.x!==e&&(this._input.x=e,this._needsUpdate=!0)}get top(){return this._input.x}set right(e){this._input.y!==e&&(this._input.y=e,this._needsUpdate=!0)}get right(){return this._input.y}set bottom(e){this._input.z!==e&&(this._input.z=e,this._needsUpdate=!0)}get bottom(){return this._input.z}set left(e){this._input.w!==e&&(this._input.w=e,this._needsUpdate=!0)}get left(){return this._input.w}dispose(){this._computed=null,this._inline=null,this._input=null,this._output=null}_vector4ValueSetter(e,t){if(t instanceof b.Vector4){e.copy(t);return}if((typeof t==`string`||t instanceof String)&&(t=t.split(` `)),Array.isArray(t))switch(t=t.map(e=>parseFloat(e)),t.length){case 1:e.setScalar(t[0]);return;case 2:e.x=e.z=t[0],e.y=e.w=t[1];return;case 3:e.x=t[0],e.y=t[1],e.z=t[2];return;case 4:e.x=t[0],e.y=t[1],e.z=t[2],e.w=t[3];return;default:console.error(`StyleVector4Property::set() Four Dimension property had more than four values`);return}isNaN(t)||e.setScalar(t)}},pe=class extends S{constructor(){super(`padding`,new b.Vector4(0,0,0,0))}computeOutputValue(e){super.computeOutputValue(e),e._bounds._needsUpdate=!0,e._bounds._needsRender=!0,e._layouter._needsProcess=!0,e._renderer._needsRender=!0,e._parent._value&&(e._parent._value._layouter._needsProcess=!0)}},me=class extends S{constructor(){super(`margin`,new b.Vector4(0,0,0,0))}computeOutputValue(e){super.computeOutputValue(e),e._renderer._needsRender=!0,e._parent._value&&(e._parent._value._flexDirection._needsProcess=!0)}},he=function(e,t,n){e[t]=n},ge=function(e,t,n){n!==null&&(e[t]=n)},C=class{constructor(e){this._definition=e}set definition(e){this._definition=e}mediate(e,t,n,r=null){for(let e in this._definition){let i=this._definition[e];if(n[e]!==void 0){let a=i.t?i.t:he;a(t,i.m,n[e]),r&&a(r,i.m,n[e])}}}static mediate(e,t,n,r,i=null){if(t)for(let e in r){let a=r[e];if(n[e]!==void 0){let r=a.t?a.t:he;r(t,a.m,n[e]),i&&r(i,a.m,n[e])}}}},_e=class extends v{constructor(){super(`parent`,null,!1)}update(e,t){e.parent&&e.parent.isUI?this._value=e.parent:this._value=null}set value(e){console.warn(`ParentProperty is readonly`)}get value(){return this._value}find(e){return this._value?e(this._value)?this._value:this._value._parent.find(e):null}dispose(){this._value=null}},w=function(e,t,n=6){return e.toFixed(n)===t.toFixed(n)},ve=class extends v{constructor(e,t){super(e,t,!0),this.output=this._outputValue}set value(e){this.isValid(e)&&(w(this._value,e)||(this._value=e,this._needsUpdate=!0))}get value(){return this._value}},ye=class extends y{constructor(e){super(e,`inherit`,!0),this.isValid=xe}},be=[b.FrontSide,b.BackSide,b.DoubleSide];function xe(e){return be.indexOf(e)===-1?(console.warn(`SideProperty value '${e}' is not valid. Abort`),!1):!0}var Se=class{constructor(){this._offsetX=0,this._offsetY=0,this._lineBreak=null,this._kerning=0,this._fontFactor=1,this._fontSize=0,this._cumulativeWidth=0,this._paddingLeft=0,this._paddingRight=0,this._marginLeft=0,this._marginRight=0}resetOffsets(){this._offsetX=this._offsetY=0,this._cumulativeWidth=0}get xadvance(){return 0}get xoffset(){return 0}get yoffset(){return 0}get width(){return 0}get height(){return 0}set lineBreak(e){this._lineBreak=e}get lineBreak(){return this._lineBreak}get anchor(){return 0}get kerning(){return this._kerning*this._fontFactor}set kerning(e){this._kerning=e}get fontSize(){return this._fontSize}set fontSize(e){this._fontSize=e}get lineHeight(){return 0}get offsetX(){return this._offsetX}set offsetX(e){this._offsetX=e}get offsetY(){return this._offsetY}set offsetY(e){this._offsetY=e}get cumulativeWidth(){return this._cumulativeWidth}set cumulativeWidth(e){this._cumulativeWidth=e}get marginLeft(){return this._marginLeft}set marginLeft(e){this._marginLeft=e}get marginRight(){return this._marginRight}set marginRight(e){this._marginRight=e}get paddingLeft(){return this._paddingLeft}set paddingLeft(e){this._paddingLeft=e}get paddingRight(){return this._paddingRight}set paddingRight(e){this._paddingRight=e}get lineBase(){return 0}set fontFactor(e){this._fontFactor=e}get fontFactor(){return this._fontFactor}},Ce=class{constructor(e){this._char=``,this._width=1,this._heigth=1,this._xadvance=1,this._xoffset=0,this._yoffset=0,this._font=e}get font(){return this._font}get char(){return this._char}get width(){return this._width}get height(){return this._heigth}get xadvance(){return this._xadvance}get xoffset(){return this._xoffset}get yoffset(){return this._yoffset}set yoffset(e){this._yoffset=e}clone(e){throw Error(`Abstract... Need to be implemented`)}asInlineGlyph(){throw Error(`Abstract... Need to be implemented`)}},we=class extends Se{constructor(e){super(),this._typographic=e}get typographic(){return this._typographic}get xadvance(){return this._typographic.xadvance*this._fontFactor}get xoffset(){return this._typographic.xoffset*this._fontFactor}get yoffset(){return this._typographic.yoffset*this._fontFactor}get width(){return this._typographic.width*this._fontFactor}get height(){return this._typographic.height*this._fontFactor}get char(){return this._typographic.char}get anchor(){return this.yoffset}get lineHeight(){return this._typographic.font.lineHeight*this._fontFactor}get lineBase(){return this._typographic.font.lineBase*this._fontFactor}},Te={light:`100`,normal:`400`,bold:`700`,bolder:`900`};function T(e){return isNaN(e)?Te[e]||e:e.toString()}var Ee=class extends b.EventDispatcher{constructor(e,t){super(),this._isReady=!1,this._weight=T(e),this._style=t,this._size=42,this._lineHeight=42,this._lineBase=42,this._font=null}get typographic(){return this._font}get isReady(){return this._isReady}get weight(){return this._weight}get style(){return this._style}get texture(){return this._texture}set fontMaterial(e){throw Error(`FontVariant('${this.id}')::fontMaterial - is abstract.`)}get fontMaterial(){throw Error(`FontVariant('${this.id}')::fontMaterial - is abstract.`)}get id(){return`${this._name}(w:${this.weight},s:${this.style})`}getTypographicGlyph(e){let t=this._chars[e];if(t)return t;if(e.match(/\s/))return this._chars[` `];let n=this._getFallbackCharacter(e);if(n&&(t=this._chars[n],t))return t;throw Error(`FontVariant('${this.id}')::getTypographicGlyph() - character('${e}') and/or fallback character were not found in provided msdf charset.`)}_getFallbackCharacter(e){throw Error(`FontVariant(${typeof this})::_getFallbackCharacter() is abstract and should therefore be overridden.`)}getGeometricGlyph(e,t){throw Error(`FontVariant(${typeof this})::getGeometryCharacter() is abstract and should therefore be overridden.`)}getKerningAmount(e){return this._kernings[e]?this._kernings[e]:0}adjustTypographicGlyphs(e){for(let t in e){let n=this.getTypographicGlyph(t),r=e[t];for(let i in r)n[`_`+i]=e[t][i]}}_checkReadiness(){this._readyCondition()&&Oe(this)}_alterElementProperties(e){throw Error(`FontVariant(${typeof this})::_alterElementProperties() is abstract and should therefore be overridden.`)}_readyCondition(){throw Error(`FontVariant(${typeof this})::_readyCondition() is abstract and should therefore be overridden.`)}},De={type:`ready`};function Oe(e){e._isReady=!0,e.dispatchEvent(De)}var E=Ee,ke=class extends v{constructor(e=null){super(`font`,e,!1),this._needsUpdate=!1,this._fontVariant=null,this._handleFontReadyClosure=null,this.isValid=Ae}output(e){e[this._id]=this._fontVariant}update(e,t){if(this._fontVariant&&!this._fontVariant.isReady&&this._fontVariant.removeEventListener(`ready`,this._handleFontReadyClosure),this._value&&this._value instanceof E)this._fontVariant=this._value;else{let t=e._fontFamily._value;t&&(this._fontVariant=t.getVariant(e._fontWeight._value,e._fontStyle._value))}this._fontVariant&&(this._fontVariant._alterElementProperties(e),this._handleFontReadyClosure=je(e,this),this._fontVariant.isReady?this._handleFontReadyClosure():this._fontVariant.addEventListener(`ready`,this._handleFontReadyClosure),(!e._fontMaterial._defaultMaterial||!(e._fontMaterial._defaultMaterial instanceof this._fontVariant.fontMaterial))&&(e._fontMaterial._defaultMaterial=new this._fontVariant.fontMaterial,e._fontMaterial._needsUpdate=!0))}set value(e){this.isValid(e)&&this._value!==e&&(this._value=e,this._needsUpdate=!0)}get value(){return this._value}get fontVariant(){return this._fontVariant}dispose(){this._handleFontReadyClosure&&=(this._fontVariant.removeEventListener(`ready`,this._handleFontReadyClosure),null),this._value=null,this._fontVariant=null}};function Ae(e){return e instanceof E?!0:(console.warn(`.font value '${e}' is not valid. It requires a FontVariant instance. Aborted`),!1)}function je(e,t){return function(){t._needsUpdate=!0,e._glyphs._needsProcess=!0,t._fontVariant.removeEventListener(`ready`,t._handleFontReadyClosure),t._handleFontReadyClosure=null}}var Me=class extends x{constructor(e){super(`display`,e),this._value=`flex`,this._allowsInherit=!1,this._needsUpdate=!1,this.isValidValue=Pe}computeOutputValue(e){e._visible._value=this._output!==`none`}},Ne=[`none`,`flex`];function Pe(e){return Ne.indexOf(e)===-1?(console.warn(`(.style) display value '${e}' is not valid. Aborted`),!1):!0}var Fe=class extends x{constructor(e){super(`boxSizing`,e),this._allowsInherit=!1,this.isValidValue=Le}computeOutputValue(e){this._value=this._inheritedInput,e._bounds._needsUpdate=!0}},Ie=[`border-box`,`content-box`];function Le(e){return Ie.indexOf(e)===-1?(console.warn(`(.style) boxSizing value '${e}' is not valid. Aborted`),!1):!0}var D=class extends x{constructor(e,t){super(e,t,!1),this._value=new b.Color,this.output=this._outputValue}computeOutputValue(e){this._input!==`inherit`&&this._value.set(this._input)}set inline(e){this._input=this._inline=e,this._needsUpdate=!0}},O=class extends x{constructor(e,t){super(e,t,!0),this.isValidValue=Re,this._allowsInherit=!1,this._input=t,this._value=t,this.output=this._outputValue,this.computeOutputValue=this._computeFromInherited}_outputValue(e){e[this._id]=this._inheritedInput}};function Re(e){return e<0&&e>1?(console.warn(`(.style) styleFactorProperty('${this.id}') value '${e}' is not valid)`),!1):!0}var ze=class extends x{constructor(e){super(`backgroundImage`,e,!0),this._input=null,this._allowsInherit=!1,this._textureSize=new b.Vector2(1,1),this.isValidValue=Be}get value(){return this._value}output(e){e[this._id]=this._value,e.tSize=this._textureSize}computeOutputValue(e){if(this._value=this._inheritedInput,this._value instanceof b.Texture&&!this._value.image){console.warn(`ThreeMeshUI - .backgroundImage :: Please provide preloaded texture in order to have accurate sizing.`);return}this._needsProcess=!0}process(e){this._value?this._textureSize.set(this._value.image.width,this._value.image.height):this._textureSize.set(1,1)}};function Be(e){return!0}var Ve=class extends x{constructor(e){super(`backgroundSize`,e,!0),this.isValidValue=Ue,this.output=this._outputValue}},He=[`cover`,`contain`,`stretch`];function Ue(e){return He.indexOf(e)===-1?(console.warn(`(.style) backgroundSize value '${e}' is not valid. Aborted`),!1):!0}var We=class extends x{constructor(e){super(`overflow`,e,!0),this.isValidValue=Ke,this._clippingPlanes=null,this._renderStrategy=this._emptyRender}update(e,t){this._inline!==void 0&&this._inline!==`unset`?this._input=this._inline:this._computed!==void 0&&(this._input=this._computed),this._allowsInherit||(this._inheritedInput=this.getInheritedInput(e)),this.computeOutputValue(e);for(let t of e._children._uis)t._overflow._needsUpdate=!0;this.output(t)}output(e){e.clippingPlanes=this._clippingPlanes}computeOutputValue(e){super.computeOutputValue(e),this._value===`hidden`?this._renderStrategy=this._propagateRender:(this._renderStrategy=this._emptyRender,this._clippingPlanes=null);let t=e._parent._value;if(t!==null){let e=t._overflow;if((e._value===`hidden`||e._clippingPlanes!==null)&&!this._clippingPlanes){this._clippingPlanes=[new b.Plane(new b.Vector3(0,-1,0),1),new b.Plane(new b.Vector3(-1,0,0),1),new b.Plane(new b.Vector3(0,1,0),1),new b.Plane(new b.Vector3(1,0,0),1)];for(let e=0;ee.computeValue()),this._sideMediators.sort((e,t)=>e.value1&&this._sideMediators[0].mediate();while(this._sideMediators[0].value>1);let r=t>n?n/t:1,i=tn?n/t:1;this._valueUV.y*=e,this._valueUV.w*=e}if(n!==0){let e=t{switch(e._alignItems._value){case`inherit`:case`start`:return t/2;case`end`:return r-t/2;case`stretch`:case`center`:return r/2}})(),a=e._padding._value,o=e._borderWidth._value;i+=(-a.x+a.z)/2+(-o.x+o.z)/2,n.forEach(e=>{e.y+=i,e.forEach(e=>{e.offsetY+=i})})}},tt=[`start`,`center`,`end`,`stretch`],nt=function(e){return tt.indexOf(e)===-1?(console.warn(`(.style) alignItems value '${e}' is not valid. Aborted`),!1):!0},N=class extends x{constructor(){super(`alignItems`,`inherit`,!0),this.isValidValue=nt}},P=class extends x{constructor(){super(`textAlign`,`inherit`,!0),this.isValidValue=it}},rt=[`left`,`right`,`center`,`justify`,`justify-left`,`justify-right`,`justify-center`],it=function(e){return rt.indexOf(e)===-1?(console.warn(`(.style) textAlign value '${e}' is not valid. Aborted`),!1):!0},at=class extends x{constructor(){super(`flexDirection`,`inherit`,!0),this.isValid=st}},ot=[`row`,`row-reverse`,`column`,`column-reverse`];function st(e){return ot.indexOf(e)===-1?(console.warn(`(.style) flexDirection value '${e}' is not valid. Aborted`),!1):!0}var ct=class extends x{constructor(){super(`justifyContent`,`inherit`,!0),this.isValidValue=ut}},lt=[`start`,`center`,`end`,`space-between`,`space-around`,`space-evenly`];function ut(e){return lt.indexOf(e)===-1?(console.warn(`(.style) justifyContent value '${e}' is not valid. Aborted`),!1):!0}var dt=class extends x{constructor(){super(`order`,0,!0),this._value=0,this._input=0,this._allowsInherit=!1}computeOutputValue(e){this._value=this._inheritedInput,e._parent._value&&(e._parent._value._children._needsProcess=!0)}},ft=class extends x{constructor(){super(`position`,`static`,!0),this._allowsInherit=!1,this._value=`static`,this._needsUpdate=!1,this.computeOutputValue=this._computeFromInherited,this.isValidValue=mt}_computeFromInherited(e){super._computeFromInherited(e),e._parent._value&&(e._parent._value._children._needsProcess=!0)}},pt=[`static`,`absolute`];function mt(e){return pt.indexOf(e)===-1?(console.warn(`(.style) position value '${e}' is not valid. Aborted`),!1):!0}var ht=class extends x{constructor(e,t=null){super(e,t,!0),this._input=`auto`,this._auto=!0,this._relative=!1,this._updateRequired=!0}set inline(e){this.isValidValue(e)&&e!==this._inline&&(this._inline=e,this._input!==this._inline&&this._parseInput())}get inline(){return this._inline}_parseInput(){let e=!0;if(this._inline!==void 0&&this._inline!==`unset`?this._input=this._inline:this._computed===void 0?e=this._input===`inherit`:(this._computed===this._input&&(e=!1),this._input=this._computed),e){if(this._auto=!this._input||this._input===`auto`,this._auto)this._relative=!1;else if((typeof this._input==`string`||this._input instanceof String)&&this._input.endsWith(`%`)){this._relative=!0,this._value=0;let e=parseFloat(this._input.replace(`%`,``).trim());isNaN(e)||(this._value=e/100)}else this._relative=!1,this._value=this._input;this._needsUpdate=this._updateRequired=e}}update(e,t){if(this._updateRequired){this._updateRequired=!1,this._allowsInherit||(this._inheritedInput=this.getInheritedInput(e)),this.computeOutputValue(e);for(let t of e._children._uis)t[`_${this._id}`]._needsUpdate=!0;this.output(t),e._parent._value&&(e._parent._value._layouter._needsProcess=!0)}}computeOutputValue(e){e._bounds._needsUpdate=!0,e._renderer._needsRender=!0}getInheritedInput(e){if(this._input!==`inherit`&&!this._auto)return this._input;let t=e._parent._value;return t?t[`_${this._id}`].getInheritedInput(t):this.getDefaultValue()}getDefaultValue(){return 0}get value(){return this._value}},gt=class extends ht{constructor(){super(`width`)}},_t=class extends ht{constructor(){super(`height`)}computeOutputValue(e){super.computeOutputValue(e)}},vt=class extends M{constructor(){super(`textContent`),this._needsUpdate=!1}set value(e){}process(e){let t=``;for(let n=0;ne.char).join(``)}get textureWidth(){return this._textureWidth}get textureHeight(){return this._textureHeight}},Dt=class extends we{constructor(e){super(e)}get uv(){return this.typographic.uv}},Ot=class e extends Ce{constructor(e,t){super(e),this._char=t.char,this._width=t.width,this._heigth=t.height,this._xadvance=t.xadvance?t.xadvance:this._width,this._xoffset=t.xoffset?t.xoffset:0,this._yoffset=t.yoffset?t.yoffset:0,this._uv=t.uv?t.uv:null,isNaN(t.x)||(this._uv={left:t.x/e.textureWidth,right:(t.x+t.width)/e.textureWidth,top:1-(t.y+t.height)/e.textureHeight,bottom:1-t.y/e.textureHeight})}get uv(){return this._uv}clone(t){return new e(this._font,{char:t,width:this._width,height:this._heigth,xadvance:this._xadvance,xoffset:this._xoffset,yoffset:this._yoffset,uv:null})}asInlineGlyph(){return new Dt(this)}},kt=class extends b.PlaneGeometry{constructor(e,t){let n=1,r=1,i=e.typographic.font.size,a=t._segments.value;n=Math.ceil(e.typographic.width/i*a),r=Math.ceil(e.typographic.height/i*a),super(e.width,e.height,n,r),e.uv?(this._mapUVs(e),this._transformGeometry(e)):(this._nullifyUVs(),this.scale(0,0,1),this.translate(0,e.fontSize/2,0)),this.name=`GlyphGeometry`}_mapUVs(e){let t=e.uv.right-e.uv.left,n=e.uv.bottom-e.uv.top,r=this.getAttribute(`uv`).array.slice(),i=[];for(let a=0;a0)},z=function(e,t,n){e.defines&&(n?e.defines[t]===void 0&&(e.defines[t]=``,e.needsUpdate=!0):e.defines[t]!==void 0&&(delete e.defines[t],e.needsUpdate=!0))},Mt=function(e,t,n){e.defines[t]&&e.defines[t]===n||(e.defines[t]=n,e.needsUpdate=!0)},B=function(e,t,n){e.userData[t]?e.userData[t].value=n:e.uniforms[t].value=n},Nt=function(e,t,n){e.userData[t].value=n},V=class e{static ensureMaterialOptions(e){e.transparent=!0,e.alphaTest=e.alphaTest||.02}static ensureDefines(e){e.defines||={}}static ensureUserData(e,t){e.userData.glyphMap={value:t.glyphMap},e.userData.unitRange={value:new b.Vector2}}static bindUniformsWithUserData(e,t){e.uniforms.glyphMap=t.userData.glyphMap,e.uniforms.unitRange=t.userData.unitRange}static injectShaderChunks(t){e.injectVertexShaderChunks(t),e.injectFragmentShaderChunks(t)}static injectVertexShaderChunks(e){e.vertexShader=e.vertexShader.replace(`#include `,`#include -`+At),e.vertexShader=e.vertexShader.replace(`#include `,`#include -`+jt),e.vertexShader=e.vertexShader.replace(`#include `,`#include -`+F)}static injectFragmentShaderChunks(e){e.fragmentShader=e.fragmentShader.replace(`#include `,`#include -`+I),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include -`+L)}static from(t){return class extends t{static get fontMaterialProperties(){return e.mediation}constructor(t={}){e.ensureMaterialOptions(t),super(t),e.ensureDefines(this),e.ensureUserData(this,t),this._userDefinedOnBeforeCompile=e=>{},this._onBeforeCompile=this._cumulativeOnBeforeCompile}set onBeforeCompile(e){this._userDefinedOnBeforeCompile=e}get onBeforeCompile(){return this._onBeforeCompile}_cumulativeOnBeforeCompile=t=>{e.bindUniformsWithUserData(t,this),e.injectShaderChunks(t),this._userDefinedOnBeforeCompile(t)}}}static get mediation(){return Pt}},Pt={clippingPlanes:{m:`clippingPlanes`},fontAlphaTest:{m:`alphaTest`,t:R},fontSide:{m:`side`},font:{m:`glyphMap`,t:function(e,t,n){let r=n?n.texture:null,i=n?n.unitRange:new b.Vector2;if(e[t]!==void 0){e.glyphMap=r,e.unitRange=i;return}e.userData&&e.userData.glyphMap&&(e.userData.glyphMap.value=r,e.userData.unitRange.value=i)}},color:{m:`color`},fontOpacity:{m:`opacity`},fontSmooth:{m:`NO_RGSS`,t:function(e,t,n){n&&n!==`antialiased`?e.defines.NO_RGSS=``:delete e.defines.NO_RGSS,e.needsUpdate=!0}},invertAlpha:{m:`INVERT_ALPHA`,t:z}},Ft=` -${At} -#include -void main() { - ${jt} - #include - #include - ${F} - #include -} -`,It=` -uniform vec3 diffuse; -uniform float opacity; -${I} -#include -#include -void main() { - // instead of : vec4 diffuseColor - vec4 diffuseColor = vec4( diffuse, opacity ); - ${L} - #include - // instead of - gl_FragColor = diffuseColor; - #include -} -`,Lt=.02,Rt=class e extends b.ShaderMaterial{static get mediation(){return V.mediation}constructor(e={}){super({uniforms:{glyphMap:{value:null},diffuse:{value:null},opacity:{value:1},unitRange:{value:new b.Vector2(0,0)},alphaTest:{value:Lt}},transparent:!0,clipping:!0,vertexShader:Ft,fragmentShader:It,extensions:{derivatives:!0}}),this.defines.USE_ALPHATEST=``,this.needsUpdate=!0,this.noRGSS=e.noRGSS||!1}get color(){return this.uniforms.diffuse.value}set color(e){this.uniforms.diffuse.value=e}set opacity(e){this.uniforms&&(this.uniforms.opacity.value=e)}get opacity(){return this.uniforms.opacity.value}get unitRange(){return this.uniforms.unitRange.value}set unitRange(e){this.uniforms.unitRange.value.copy(e)}get glyphMap(){return this.uniforms.glyphMap.value}set glyphMap(e){this.uniforms.glyphMap.value=e}get isDefault(){return this.constructor===e}get alphaTest(){return this.uniforms.alphaTest.value}set alphaTest(e){this.uniforms.alphaTest.value=e}},zt=class extends E{constructor(e,t,n,r){if(super(e,t),this._unitRange=new b.Vector2(1,1),n.pages?this._buildData(n):Bt(this,n),r instanceof b.Texture)this._texture=r,this._buildTexture(r);else if(typeof r==`string`||r instanceof String)Vt(this,r);else throw Error(`ThreeMeshUI::MSDFVariant provided 'texture' parameter is '${typeof r}'. Only Texture and String allowed.`);this._defaultMaterialClass=Rt,this._checkReadiness()}get texture(){return this._texture}get unitRange(){return this._unitRange}set fontMaterial(e){this._defaultMaterialClass=e}get fontMaterial(){return this._defaultMaterialClass}_buildData(e){this._font=new Et(e),this._kernings=this._buildKerningPairs(e),this._chars=this._buildCharacters(e),this._chars[` `]=this._buildCharacterWhite(e),this._chars[` -`]=this._buildCharacterWhite(e,` -`,.001,1),this._chars[` `]=this._buildCharacterWhite(e,` `,4,1),this._size=e.info.size,this._lineHeight=e.common.lineHeight,this._lineBase=e.common.base,this._distanceRange=e.distanceField.distanceRange,this._unitRange=new b.Vector2(this._distanceRange,this._distanceRange).divide(new b.Vector2(e.common.scaleW,e.common.scaleH))}_buildTexture(e){e.generateMipmaps=!1,e.minFilter=b.LinearFilter,e.magFilter=b.LinearFilter,e.needsUpdate=!0}_getFallbackCharacter(e){return W.missingCharacter(this,e)}getGeometricGlyph(e,t){return new kt(e,t)}_readyCondition(){return this._chars&&this._texture&&this._texture.image}_buildKerningPairs(e){let t={};for(let n=0;n{e._buildData(t),e._checkReadiness()})}function Vt(e,t){e._texture=new b.TextureLoader().load(t,t=>{e._buildTexture(t),e._checkReadiness()})}var H=class extends b.EventDispatcher{constructor(e){super(),this._name=e,this._variants=[],this._isReady=!1}get isReady(){return this._isReady}addVariant(e,t,n,r,i=!1){if(i||!this.getVariant(e,t)){this._isReady=!1;let i=new zt(e,t,n,r);this._variants.push(i),i.isReady?this._checkReadiness():i.addEventListener(`ready`,this._checkReadiness)}else console.warn(`FontFamily('${this._name}')::addVariant() - Variant(${e}, ${t}) already exists.`);return this}addCustomImplementationVariant(e,t=!1){return t||!this.getVariant(e.weight,e.style)?(this._isReady=!1,this._variants.push(e),e.isReady?this._checkReadiness():e.addEventListener(`ready`,this._checkReadiness)):console.warn(`FontFamily('${this._name}')::addCustomImplementationVariant() - Variant(${e.weight}, ${e.style}) already exists.`),this}getVariant(e,t){return e=T(e),this._variants.find(n=>n.weight===e&&n.style===t)}get name(){return this._name}_checkReadiness=()=>{this._variants.every(e=>e.isReady)&&Ut(this)}},Ht={type:`ready`};function Ut(e){e._isReady=!0,e.dispatchEvent(Ht)}var U={},Wt=function(e){let t=[...arguments];t.forEach(e=>{if(!(e instanceof H))throw Error(`FontLibrary::prepare() - One of the provided parameter is not a FontFamily. Instead ${typeof e} given.`)});let n=function(){return t.every(e=>e.isReady)};return new Promise((e,r)=>{if(n())e();else for(let r=0;r{n()&&e()})}})},Gt=function(e){return U[e]&&console.error(`FontLibrary::addFontFamily - Font('${e}') is already registered`),U[e]=new H(e),U[e]},Kt=function(e){return U[e]},qt=function(e){Jt=e},Jt=function(e,t){return console.error(`The character '${t}' is not included in the font characters set.`),` `};function Yt(e,t){return Jt(e,t)}var W={addFontFamily:Gt,getFontFamily:Kt,prepare:Wt,setMissingCharacterHandler:qt,missingCharacter:Yt},Xt=class extends x{constructor(){super(`fontFamily`,`inherit`,!0)}computeOutputValue(e){if(this._input instanceof H)this._value=this._input;else if(this._input!==`inherit`)if(typeof this._input==`string`){let e=W.getFontFamily(this._input);e?this._value=e:console.warn(`(.style) fontFamily, the font '${this._input}' is not registered. Aborted.`)}else console.warn(`(.style) fontFamily requires a registered fontFamily instance, or the id of a registered fontFamily.`),console.warn(`If you want to set a specific font, please use .font property instead.`)}get value(){return this._value}getInheritedInput(e){if(this._input!==`inherit`)return this._input;let t=e._parent._value;return t?t[`_${this._id}`].getInheritedInput(t):this.getDefaultValue()}},Zt=class extends x{constructor(){super(`lineHeight`,`inherit`,!0)}update(e,t){super.update(e,t),e._layouter._needsProcess=!0}},Qt=class extends x{constructor(){super(`whiteSpace`,`inherit`),this.isValidValue=en}},$t=[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`];function en(e){return $t.indexOf(e)===-1?(console.warn(`(.style) whiteSpace value '${e}' is not valid. Aborted`),!1):!0}var tn=class extends x{constructor(){super(`letterSpacing`,`inherit`,!0)}},nn=class extends x{constructor(){super(`fontSize`,`inherit`,!0)}},rn=class extends v{constructor(){super(`segments`,1,!1)}},an=class extends y{constructor(){super(`invertAlpha`,`inherit`)}},G=class extends x{constructor(){super(`fontKerning`,`inherit`),this.isValidValue=sn}},on=[`normal`,`none`,`inherit`];function sn(e){return on.indexOf(e)===-1?(console.warn(`(.style) fontKerning value '${e}' is not valid. Aborted`),!1):!0}var K=class extends y{constructor(e){super(e,`inherit`,!0)}},cn=class extends y{constructor(e){super(e,`inherit`,!1),this._mediation={},this._defaultMaterial=null}update(e,t){this._notInheritedValue=this._value,this._notInheritedValue===`inherit`?this._notInheritedValue=this.getInheritedInput(e):this.propagate(e),this._notInheritedValue?this._notInheritedValue.constructor.mediation?this._mediation={...this._notInheritedValue.constructor.mediation}:this._mediation={clippingPlanes:{m:`clippingPlanes`},fontAlphaTest:{m:`alphaTest`,t:R},fontSide:{m:`side`},color:{m:`color`},fontOpacity:{m:`opacity`}}:this._mediation={},e._transferToFontMaterial(),this._outputValue(t)}getInheritedInput(e){if(this._value!==`inherit`)return this._value;let t=e,n=null;for(;t._parent._value;)if(t=t._parent._value,t[`_${this._id}`]._value!==`inherit`){n=t[`_${this._id}`]._value;break}return n===null?this.getDefaultValue():n}getDefaultValue(){return this._defaultMaterial}},ln=function(e,t,n){e.traverse(e=>{e.renderOrder=n})},q=class extends b.Object3D{constructor(e,t){super(),Object.defineProperties(this,{isUI:{configurable:!1,enumerable:!0,value:!0}}),this._backgroundMesh=null,this._backgroundMaterial=null,this._backgroundCustomDepthMaterial=null,this._backgroundMaterialMediation={},this._backgroundMeshMediation={backgroundCastShadow:{m:`castShadow`},backgroundReceiveShadow:{m:`receiveShadow`},renderOrder:{m:`renderOrder`,t:ln}},this._fontMesh=null,this._fontMaterial=new cn(`fontMaterial`),this._fontCustomDepthMaterial=new cn(`fontCustomDepthMaterial`),this._fontMeshMediation={fontMaterial:{m:`material`},fontCustomDepthMaterial:{m:`customDepthMaterial`,t:ge},fontCastShadow:{m:`castShadow`},fontReceiveShadow:{m:`receiveShadow`},renderOrder:{m:`renderOrder`}},this._children=e.children?new e.children:new M(`children`),this._parent=new _e,this.addEventListener(`added`,this._rebuildParentUI),this.addEventListener(`removed`,this._rebuildParentUI),this._backgroundSide=new ye(`backgroundSide`),this._fontSide=new ye(`fontSide`),this._backgroundAlphaTest=new ve(`backgroundAlphaTest`,.02),this._fontAlphaTest=new ve(`fontAlphaTest`,.02),this._visible=new Qe(`visible`,!0),this._backgroundCastShadow=new K(`backgroundCastShadow`),this._fontCastShadow=new K(`fontCastShadow`),this._backgroundReceiveShadow=new K(`backgroundReceiveShadow`),this._fontReceiveShadow=new K(`fontReceiveShadow`),this._renderOrder=new ce,this._segments=e.segments?new e.segments:new rn,this._bounds=e.bounds?new e.bounds:new M(`bounds`),this._order=new dt,this._padding=new pe,this._margin=new me,this._position=new ft,this._flexDirection=e.flexDirection?new e.flexDirection:new at,this._justifyContent=e.justifyContent?new e.justifyContent:new ct,this._alignItems=e.alignItems?new e.alignItems:new N,this._display=new Me(`flex`),this._boxSizing=new Fe(`border-box`),this._width=new gt,this._height=new _t,this._backgroundColor=e.backgroundColor?new e.backgroundColor:new $e,this._backgroundOpacity=new O(`backgroundOpacity`,.5),this._backgroundImage=new ze,this._backgroundSize=new Ve(`cover`),this._color=e.color?new e.color:new D(`color`,`inherit`),this._fontOpacity=new O(`fontOpacity`,`inherit`),this._whiteSpace=e.whiteSpace?new e.whiteSpace:new Qt,this._fontFamily=e.fontFamily?new e.fontFamily:new Xt,this._fontStyle=e.fontStyle?new e.fontStyle:new yt(`normal`),this._fontWeight=e.fontWeight?new e.fontWeight:new St,this._fontSize=e.fontSize?new e.fontSize:new nn,this._lineHeight=e.lineHeight?new e.lineHeight:new Zt,this._fontKerning=e.fontKerning?new e.fontKerning:new G,this._letterSpacing=e.letterSpacing?new e.letterSpacing:new tn,this._overflow=new We(`visible`),this._borderRadius=new Xe(0),this._borderWidth=new Ze(0),this._borderColor=new D(`borderColor`,16711935),this._borderOpacity=new O(`borderOpacity`,1),this._font=new ke,this._lineBreak=e.lineBreak?new e.lineBreak:new M(`lineBreak`),this._textContent=e.textContent?new e.textContent:new vt,this._glyphs=e.glyphs?new e.glyphs:new M(`glyphs`),this._inlines=e.inlines?new e.inlines:new M(`inlines`),this._layouter=e.layouter?new e.layouter:new M(`layouter`),this._inlineJustificator=new et,this._textAlign=e.textAlign?new e.textAlign:new P,this._autoSize=e.autoSize?new e.autoSize:new M(`autoSize`),this._renderer=e.renderer?new e.renderer:new M(`renderer`),this._offset=new le,this._invertAlpha=new an,this._fontSmooth=e.fontSmooth?new e.fontSmooth:new ue,this._components=[this._textContent,this._children,this._parent,this._autoSize,this._fontFamily,this._fontStyle,this._fontWeight,this._font,this._whiteSpace,this._glyphs,this._inlines,this._visible,this._backgroundSide,this._fontSide,this._backgroundAlphaTest,this._fontAlphaTest,this._backgroundCastShadow,this._fontCastShadow,this._backgroundReceiveShadow,this._fontReceiveShadow,this._renderOrder,this._segments,this._padding,this._margin,this._width,this._height,this._borderWidth,this._boxSizing,this._bounds,this._position,this._flexDirection,this._justifyContent,this._alignItems,this._order,this._display,this._backgroundColor,this._backgroundOpacity,this._backgroundImage,this._backgroundSize,this._fontOpacity,this._color,this._fontSize,this._lineHeight,this._fontKerning,this._letterSpacing,this._borderRadius,this._borderColor,this._borderOpacity,this._lineBreak,this._offset,this._layouter,this._inlineJustificator,this._textAlign,this._invertAlpha,this._fontSmooth,this._fontMaterial,this._fontCustomDepthMaterial,this._overflow,this._renderer],this._onAfterUpdates=[],t.backgroundSide||=0,t&&this.set(t)}update(){let e={};for(let t of this._components)t._needsUpdate&&=(t.update(this,e),!1);this._transferToBackgroundMesh(e),this._transferToFontMesh(e),this._transferToBackgroundMaterial(e),this._transferToFontMaterial(e);for(let e of this._children._uis)e.update()}process(){for(let e of this._children._uis)e.process();for(let e of this._components)e._needsProcess&&=(e.process(this),!1)}render(){for(let e=0;e{this._parent._needsUpdate=!0,this.parent&&!this.parent.isUI?(J.register(this),this.activatePseudoState(`root`)):(J.remove(this),this.deactivatePseudoState(`root`))};add(e){let t=!1;for(let e=0;e{e.material&&e.material.dispose(),e.geometry&&e.geometry.dispose()}),super.clear(),this._backgroundMesh=null,this._backgroundMaterial=null,this._backgroundMaterialMediation=null,this._backgroundMeshMediation=null,this._children.dispose(),this._children=null,this._parent.dispose(),this._parent=null,this._backgroundSide=null,this._backgroundAlphaTest=null,this._visible=null,this._backgroundCastShadow=null,this._backgroundReceiveShadow=null,this._renderOrder=null,this._segments=null,this._bounds=null,this._boxSizing=null,this._padding=null,this._margin=null,this._position=null,this._flexDirection=null,this._justifyContent=null,this._alignItems=null,this._display=null,this._backgroundColor=null,this._backgroundOpacity=null,this._backgroundSize=null,this._fontOpacity=null,this._color=null,this._whiteSpace=null,this._fontFamily=null,this._fontStyle=null,this._fontWeight=null,this._lineHeight=null,this._fontKerning=null,this._letterSpacing=null,this._overflow=null,this._textAlign=null,this._font=null,this._lineBreak=null,this._layouter=null,this}get textContent(){return this._textContent.process(this),this._textContent._value}get backgroundMaterial(){return this._backgroundMaterial}set backgroundMaterial(e){this._backgroundMaterial=e,this._backgroundMaterialMediation={...e.constructor.mediation},this._transferToBackgroundMaterial(),this._backgroundMesh&&(this._backgroundMesh.material=this._backgroundMaterial,B(e,`frameSize`,this._backgroundMesh.scale))}set backgroundCustomDepthMaterial(e){this._backgroundCustomDepthMaterial=e,this._transferToBackgroundMaterial(),this._backgroundMesh&&(this._backgroundMesh.customDepthMaterial=this._backgroundCustomDepthMaterial)}get backgroundCustomDepthMaterial(){return this._backgroundCustomDepthMaterial}_transferToBackgroundMaterial(e=null){if(!e){e={};for(let t of this._components)t.output(e)}C.mediate(this,this._backgroundMaterial,e,this._backgroundMaterialMediation,this._backgroundCustomDepthMaterial)}set backgroundSide(e){this._backgroundSide.value=e,this._backgroundMaterial&&(this._backgroundMaterial.side=e)}get backgroundSide(){return this._backgroundSide.value}set backgroundAlphaTest(e){this._backgroundAlphaTest.value=e,this._backgroundMaterial&&(this._backgroundMaterial.alphaTest=e)}get backgroundAlphaTest(){return this._backgroundAlphaTest.value}get fontMaterial(){return this._fontMaterial.value}set fontMaterial(e){this._fontMaterial.value=e}set fontCustomDepthMaterial(e){this._fontCustomDepthMaterial.value=e}get fontCustomDepthMaterial(){return this._fontCustomDepthMaterial.value}_transferToFontMaterial(e=null){let t=this._fontMaterial.value;if(t){if(!e){e={};for(let t of this._components)t.output(e)}C.mediate(this,t,e,this._fontMaterial._mediation,this._fontCustomDepthMaterial.value)}}set fontSide(e){this._fontSide.value=e}get fontSide(){return this._fontSide.value}set fontAlphaTest(e){this._fontAlphaTest.value=e}get fontAlphaTest(){return this._fontAlphaTest.value}_transferToBackgroundMesh(e=null){if(!e){e={};for(let t of this._components)t.output(e)}C.mediate(this,this._backgroundMesh,e,this._backgroundMeshMediation)}setBackgroundMesh(e){this._backgroundMesh&&(this.remove(this._backgroundMesh),this.unbindBackgroundMeshProperties()),this._backgroundMesh=e,this._backgroundMesh&&(this.bindBackgroundMeshProperties(),this._backgroundCustomDepthMaterial&&(this._backgroundMesh.customDepthMaterial=this._backgroundCustomDepthMaterial),this._backgroundMaterial&&B(this._backgroundMaterial,`frameSize`,this._backgroundMesh.scale),this._transferToBackgroundMesh(),this.add(this._backgroundMesh))}bindBackgroundMeshProperties(){}unbindBackgroundMeshProperties(){}activatePseudoState(e){}deactivatePseudoState(e){}togglePseudoState(e){}hasPseudoState(e){return!1}set borderRadiusMediation(e){this._borderRadius.mediation=e}set backgroundCastShadow(e){this._backgroundCastShadow&&(this._backgroundCastShadow.value=e)}get backgroundCastShadow(){return this._backgroundCastShadow}set backgroundReceiveShadow(e){this._backgroundReceiveShadow&&(this._backgroundReceiveShadow.value=e)}get backgroundReceiveShadow(){return this._backgroundReceiveShadow}set renderOrder(e){this._renderOrder&&(this._renderOrder.value=e)}get renderOrder(){return this._renderOrder.value}_transferToFontMesh(e=null){if(this._fontMesh){if(!e){e={};for(let t of this._components)t.output(e)}C.mediate(this,this._fontMesh,e,this._fontMeshMediation)}}setFontMesh(e){this._fontMesh&&(this.remove(this._fontMesh),this._fontMesh.material&&this._fontMesh.material.dispose(),this._fontMesh.geometry&&this._fontMesh.geometry.dispose(),this._fontMesh=null,this.unbindFontMeshProperties()),this._fontMesh=e,this._fontMesh&&(this._fontMesh.raycast=()=>{},this.bindFontMeshProperties(),this._transferToFontMaterial(),this._transferToFontMesh(),this.add(this._fontMesh))}bindFontMeshProperties(){}unbindFontMeshProperties(){}set fontCastShadow(e){this._fontCastShadow&&(this._fontCastShadow.value=e)}get fontCastShadow(){return this._fontCastShadow}set fontReceiveShadow(e){this._fontReceiveShadow&&(this._fontReceiveShadow.value=e)}get fontReceiveShadow(){return this._fontReceiveShadow}set segments(e){this._segments.value=e}get segments(){return this._segments.value}set onAfterUpdate(e){console.warn("ThreeMeshUI v7xx : `onAfterUpdate()` property has been deprecated, please rely on `addAfterUpdate` instead."),this.addAfterUpdate(e)}addAfterUpdate(e){this._onAfterUpdates.push(e)}removeAfterUpdate(e){let t=this._onAfterUpdates.indexOf(e);t!==-1&&this._onAfterUpdates.splice(t,1)}performAfterUpdate(){for(let e=0;e 0.0 && vUvB.y > topBorderUVy ) -{ - - float w = fwidth( 1.0 - vUvB.y ) * mult; - float step = smoothstep( topBorderUVy , topBorderUVy + w , vUvB.y ); - diffuseColor = mix( diffuseColor, borderColor, step ); - -} - -// Left -float leftBorderUVx = borderWidth.w; -if( borderWidth.w > 0.0 && vUvB.x < leftBorderUVx ) -{ - - float w = fwidth( vUvB.x ) * mult ; - float step = smoothstep( leftBorderUVx , leftBorderUVx - w , vUvB.x ); - diffuseColor = mix( diffuseColor, borderColor, step ); - -} - -// Bottom -float bottomBorderUVy = borderWidth.z; -if( borderWidth.z > 0.0 && vUvB.y < bottomBorderUVy ) -{ - float w = fwidth( vUvB.y ) * mult; - float step = smoothstep( bottomBorderUVy , bottomBorderUVy - w , vUvB.y ); - diffuseColor = mix( diffuseColor, borderColor, step ); -} - -// Right -float rightBorderUVx = 1.0 - borderWidth.y; -if( borderWidth.y > 0.0 && vUvB.x > rightBorderUVx ) -{ - float w = fwidth( 1.0 - vUvB.x ) * mult; - float step = smoothstep( rightBorderUVx , rightBorderUVx + w , vUvB.x ); - diffuseColor = mix( diffuseColor, borderColor, step ); -} - - -// Step 2 ---------------------------------------------- -// Process each corners ( topLeft, topRight, bottomRight, bottomLeft ) -// To transparentize outside radiuses -// To draw ellipse border on the corner - - -// Top Left corner -if( vUvB.x < cornerTL.x && vUvB.y > cornerTL.y ) { - - // Only draw border if width is set - if( borderWidth.w + borderWidth.x > 0.0 ){ - - float borderFactor = getEllipticFactor( vUvB, cornerTL, cornerTL.x - borderWidth.w, ( 1.0 - cornerTL.y ) - borderWidth.x ); - float step = smoothstep( 1.0, 1.0 + fwidth( borderFactor ) * mult, borderFactor ); - diffuseColor = mix( diffuseColor, borderColor, step ); - - } - - // Then then radius - float radiusFactor = getEllipticFactor( vUvB, cornerTL, cornerTL.x, 1.0 - cornerTL.y ); - float alphaStep = smoothstep( 1.0 , 1.0 + fwidth(radiusFactor) * mult , radiusFactor ); - diffuseColor.a = mix( diffuseColor.a, 0.0, alphaStep ); - -} -// Bottom Left -if( vUvB.x < cornerBL.x && vUvB.y < cornerBL.y ) { - - if( borderWidth.w + borderWidth.z > 0.0 ){ - - float borderFactor = getEllipticFactor( vUvB, cornerBL, cornerBL.x - borderWidth.w, cornerBL.y - borderWidth.z ); - float step = smoothstep( 1.0, 1.0 + fwidth( borderFactor ) * mult, borderFactor ); - diffuseColor = mix( diffuseColor, borderColor, step ); - - } - - - float radiusFactor = getEllipticFactor( vUvB, cornerBL, cornerBL.x, cornerBL.y ); - float alphaStep = smoothstep( 1.0 , 1.0 + fwidth(radiusFactor) * mult , radiusFactor ); - diffuseColor.a = mix( diffuseColor.a, 0.0, alphaStep ); - -} -// Top Right -if( vUvB.x > cornerTR.x && vUvB.y > cornerTR.y ) { - - if( borderWidth.y + borderWidth.x > 0.0 ){ - - float borderFactor = getEllipticFactor( vUvB, cornerTR, ( 1.0 - cornerTR.x ) - borderWidth.y, ( 1.0 - cornerTR.y ) - borderWidth.x ); - float step = smoothstep( 1.0, 1.0 + fwidth( borderFactor ) * mult, borderFactor ); - diffuseColor = mix( diffuseColor, borderColor, step ); - - } - - float radiusFactor = getEllipticFactor( vUvB, cornerTR, 1.0 - cornerTR.x, 1.0 - cornerTR.y ); - float alphaStep = smoothstep( 1.0 , 1.0 + fwidth(radiusFactor) * mult , radiusFactor ); - diffuseColor.a = mix( diffuseColor.a, 0.0, alphaStep ); - -} -// Bottom Right -if( vUvB.x > cornerBR.x && vUvB.y < cornerBR.y ) { - - if( borderWidth.y + borderWidth.z > 0.0 ){ - - float borderFactor = getEllipticFactor( vUvB, cornerBR, ( 1.0 - cornerBR.x ) - borderWidth.y, cornerBR.y - borderWidth.z ); - float step = smoothstep( 1.0, 1.0 + fwidth( borderFactor ) * mult, borderFactor ); - diffuseColor = mix( diffuseColor, borderColor, step ); - - } - - float radiusFactor = getEllipticFactor( vUvB, cornerBR, 1.0 - cornerBR.x, cornerBR.y ); - float alphaStep = smoothstep( 1.0 , 1.0 + fwidth(radiusFactor) * mult , radiusFactor ); - diffuseColor.a = mix( diffuseColor.a, 0.0, alphaStep ); - -} - -`,fn=` - -// To be removed - required for both border and background -uniform vec3 frameSize; -uniform vec2 textureSize; - -`,pn=` - -#ifdef USE_MAP - -vec4 sampleTexture() { - - vec2 uv = vUv; - - // default stretch - #if BACKGROUND_MAPPING != 0 - - float textureRatio = textureSize.x / textureSize.y; - float panelRatio = frameSize.x / frameSize.y; - float ratio = panelRatio / textureRatio; - float ratio2 = textureRatio / panelRatio; - - // contain - #if BACKGROUND_MAPPING == 1 - if ( textureRatio < panelRatio ) { // repeat on X - float newX = uv.x * ratio; - newX += 0.5 - 0.5 * ratio; - uv.x = newX; - } else { // repeat on Y - float newY = uv.y * ratio2; - newY += 0.5 - 0.5 * ratio2; - uv.y = newY; - } - #else - // cover - if ( textureRatio < panelRatio ) { // stretch on Y - float newY = uv.y * ratio2; - newY += 0.5 - 0.5 * ratio2; - uv.y = newY; - } else { // stretch on X - float newX = uv.x * ratio; - newX += 0.5 - 0.5 * ratio; - uv.x = newX; - } - - #endif - - #endif - - return texture2D( map, uv ); - -} -#endif -`,mn=` -#ifdef USE_MAP - - vec4 textureSample = sampleTexture(); - diffuseColor *= textureSample; - -#endif -`,hn={msdfAlphaglyphParsVertexGlsl:At,msdfAlphaglyphVertexGlsl:jt,msdfOffsetglyphVertexGlsl:F,msdfAlphaglyphParsFragmentGlsl:I,msdfAlphaglyphFragmentGlsl:L,frameBorderParsVertexGlsl:Y,frameBorderVertexGlsl:X,frameCommonParsFragmentGlsl:fn,frameBorderParsFragmentGlsl:un,frameBorderFragmentGlsl:dn,frameBackgroundParsFragmentGlsl:pn,frameBackgroundFragmentGlsl:mn},gn=` -// Would be automatic on three materials and from USE_UV -#ifdef USE_MAP -varying vec2 vUv; -#endif - -${Y} - -#include - -void main() { - - #ifdef USE_MAP - vUv = uv; - #endif - - ${X} - - vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); - gl_Position = projectionMatrix * mvPosition; - - #include - -} -`,_n=` - -// Basic -uniform vec3 diffuse; -uniform float opacity; - -#ifdef USE_ALPHATEST - uniform float alphaTest; -#endif - -${fn} - -${un} - - -#ifdef USE_MAP -varying vec2 vUv; -uniform sampler2D map; -#endif - -${pn} - -#include - -void main() { - - vec4 diffuseColor = vec4( diffuse, opacity ); - - // map - ${mn} - - ${dn} - - #ifdef USE_ALPHATEST - - if ( diffuseColor.a < alphaTest ) discard; - - #endif - - // output - gl_FragColor = diffuseColor; - - - #include -} -`,vn=class e{static get mediation(){return yn}static ensureMaterialOptions(e){e.transparent=!0,e.alphaTest=e.alphaTest||.02}static ensureDefines(e){e.defines||={}}static ensureUserData(e,t){e.userData.borderColor={value:null},e.userData.borderRadius={value:new b.Vector4(0,0,0,0)},e.userData.cornerTL={value:new b.Vector2(0,1)},e.userData.cornerTR={value:new b.Vector2(1,1)},e.userData.cornerBR={value:new b.Vector2(1,0)},e.userData.cornerBL={value:new b.Vector2(0,0)},e.userData.borderWidth={value:new b.Vector4(0,0,0,0)},e.userData.borderOpacity={value:null},e.userData.frameSize={value:new b.Vector3(1,1,1)},e.userData.textureSize={value:new b.Vector2(1,1)}}static bindUniformsWithUserData(e,t){e.uniforms.borderColor=t.userData.borderColor,e.uniforms.borderRadius=t.userData.borderRadius,e.uniforms.cornerTL=t.userData.cornerTL,e.uniforms.cornerTR=t.userData.cornerTR,e.uniforms.cornerBR=t.userData.cornerBR,e.uniforms.cornerBL=t.userData.cornerBL,e.uniforms.borderWidth=t.userData.borderWidth,e.uniforms.borderOpacity=t.userData.borderOpacity,e.uniforms.frameSize=t.userData.frameSize,e.uniforms.textureSize=t.userData.textureSize}static injectShaderChunks(t){e.injectVertexShaderChunks(t),e.injectFragmentShaderChunks(t)}static injectVertexShaderChunks(e){e.vertexShader=e.vertexShader.replace(`#include `,`#include -`+Y),e.vertexShader=e.vertexShader.replace(`#include `,`#include -`+X)}static injectFragmentShaderChunks(e){e.fragmentShader=e.fragmentShader.replace(`#include `,`#include -`+pn),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include -`+un),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include -`+fn),e.fragmentShader=e.fragmentShader.replace(`#include `,mn),e.fragmentShader=e.fragmentShader.replace(`#include `,dn+` -#include `)}},yn={clippingPlanes:{m:`clippingPlanes`},backgroundAlphaTest:{m:`alphaTest`,t:R},backgroundSide:{m:`side`},backgroundImage:{m:`map`},backgroundColor:{m:`color`},backgroundOpacity:{m:`opacity`},backgroundSize:{m:`computedBackgroundSize`,t:function(e,t,n){n=[`stretch`,`contain`,`cover`].indexOf(n),Mt(e,`BACKGROUND_MAPPING`,n)}},borderWidth:{m:`borderWidth`,t:B},borderColor:{m:`borderColor`,t:B},cornerTL:{m:`cornerTL`,t:B},cornerTR:{m:`cornerTR`,t:B},cornerBR:{m:`cornerBR`,t:B},cornerBL:{m:`cornerBL`,t:B},borderOpacity:{m:`borderOpacity`,t:B},size:{m:`frameSize`,t:B},tSize:{m:`textureSize`,t:B}},bn=class extends b.ShaderMaterial{static get mediation(){return vn.mediation}constructor(){super({uniforms:{alphaTest:{value:.02},map:{value:null},diffuse:{value:new b.Color(16777215)},opacity:{value:1},borderColor:{value:new b.Color(0)},borderOpacity:{value:0},borderRadius:{value:new b.Vector4(0,0,0,0)},cornerTL:{value:new b.Vector2(0,1)},cornerTR:{value:new b.Vector2(1,1)},cornerBR:{value:new b.Vector2(1,0)},cornerBL:{value:new b.Vector2(0,0)},borderWidth:{value:new b.Vector4(0,0,0,0)},frameSize:{value:new b.Vector3(1,1,1)},textureSize:{value:new b.Vector2(1,1)}},side:b.FrontSide,transparent:!0,clipping:!0,vertexShader:gn,fragmentShader:_n,extensions:{derivatives:!0}}),this.defines.USE_ALPHATEST=``,this.needsUpdate=!0}set map(e){this.uniforms.map.value=e,e?this.defines.USE_UV===void 0&&(this.defines.USE_UV=``,this.needsUpdate=!0):this.defines.USE_UV!==void 0&&(delete this.defines.USE_UV,this.needsUpdate=!0),this.needsUpdate=!0}get map(){return this.uniforms.map.value}get alphaTest(){return this.uniforms.alphaTest.value}set alphaTest(e){this.uniforms.alphaTest.value=e}set opacity(e){this.uniforms&&(this.uniforms.opacity.value=e)}get opacity(){return this.uniforms.opacity.value}get color(){return this.uniforms.diffuse.value}set color(e){this.uniforms.diffuse.value=e}},xn=class extends v{constructor(){super(`children`,null,!1),this._uis=[],this._boxes=[]}update(e,t){this._compute(e),e._layouter._needsUpdate=!0,e._renderOrder._needsUpdate=!0}process(e){this._compute(e),e._flexDirection._needsProcess=!0,e._layouter._needsProcess=!0,e._overflow._needsRender=!0}_compute(e){this._uis=e.children.filter(e=>e.visible&&e.isUI),this._boxes=this._uis.filter(e=>e.isBox).sort(this._sortOrder)}dispose(){this._uis=null,this._boxes=null}_sortOrder=(e,t)=>e._order._valuet._order._value?1:this._uis.indexOf(e){let n=t._margin._value;return e+(t._bounds._offsetWidth+n.y+n.w)},0)}function Tn(e){return e._children._boxes.reduce((e,t)=>{let n=t._margin._value;return e+(t._bounds._offsetHeight+n.x+n.z)},0)}var En=class extends N{constructor(){super(),this._allowsInherit=!1,this._needsUpdate=!0,this._process=this.emptyStrategyLogic,this._childAlign=this.emptyStrategyLogic}computeOutputValue(e){switch(this._value=this._inheritedInput,e._flexDirection._value){case`row`:case`row-reverse`:switch(this._process=Nn,this._value){case`start`:this._childAlign=kn;break;case`end`:this._childAlign=On;break;default:this._childAlign=Dn}break;case`column`:case`column-reverse`:switch(this._process=Mn,this._value){case`start`:this._childAlign=jn;break;case`end`:this._childAlign=An;break;default:this._childAlign=Dn}break}this._needsProcess=!0,e._autoSize._needsProcess=!0,e._flexDirection._needsProcess=!0,e._justifyContent._needsProcess=!0,this._needsProcess=!0,e._fontSize._needsProcess=!0,e._layouter._needsProcess=!0}process(e){this._process(e,this._childAlign);let t=`center`,n=`center`,r=`center`,i=e._padding._value,a=e._borderWidth._value;t=e._flexDirection._value.indexOf(`column`)===-1?this._value===`start`?r=`top`:this._value===`end`?r=`bottom`:`centerY`:this._value===`start`?n=`left`:this._value===`end`?n=`right`:`centerX`;let o=-(i.x-i.z)/2-(a.x-a.z)/2,s=-(i.y-i.w)/2-(a.y-a.w)/2;n===`left`?s=(i.w-i.y)/2+(a.w-a.y)/2:n===`right`&&(s=-(i.y-i.w)/2-(a.y-a.w)/2),r===`top`?o=-(i.x-i.z)/2-(a.x-a.z)/2:r===`bottom`&&(o=(i.z-i.x)/2+(a.z-a.x)/2),e._children._boxes.forEach(n=>{let r=0,i=0;t===`top`?i=-n._margin._value.x:t===`bottom`?i=n._margin._value.z:t===`left`?r=n._margin._value.w:t===`right`?r=-n._margin._value.y:t===`centerX`?r=(n._margin._value.w-n._margin._value.y)/2:t===`centerY`&&(i=(-n._margin._value.x+n._margin._value.z)/2),e._layouter._childrenPos[n.id].x+=s+r,e._layouter._childrenPos[n.id].y+=o+i})}};function Dn(){return 0}function On(e,t){return-t+e._bounds._offsetHeight/2}function kn(e,t){return t-e._bounds._offsetHeight/2}function An(e,t){return t-e._bounds._offsetWidth/2}function jn(e,t){return-t+e._bounds._offsetWidth/2}function Mn(e,t){let n=e._bounds._innerWidth/2;e._children._boxes.forEach(r=>{e._layouter._childrenPos[r.id].x=t(r,n)})}function Nn(e,t){let n=e._bounds._innerHeight/2;e._children._boxes.forEach(r=>{e._layouter._childrenPos[r.id].y=t(r,n)})}var Pn=class extends at{constructor(){super(),this._allowsInherit=!1,this._needsUpdate=!0,this._offset=0,this._reverse=1,this._process=this.emptyStrategyLogic}computeOutputValue(e){switch(this._value=this._inheritedInput,this._value){case`row`:this._process=Fn;break;case`row-reverse`:this._process=In;break;case`column`:this._process=Ln;break;case`column-reverse`:this._process=Rn;break}e._justifyContent._needsUpdate||e._justifyContent.computeOutputValue(e),e._alignItems._needsUpdate||e._alignItems.computeOutputValue(e),this._needsProcess=!0}process(e){switch(this._value){case`row`:this._offset=-e._bounds._innerWidth/2;break;case`row-reverse`:this._offset=e._bounds._innerWidth/2;break;case`column`:this._offset=e._bounds._innerHeight/2;break;case`column-reverse`:this._offset=-e._bounds._innerHeight/2;break}this._reverse=-Math.sign(this._offset),this._reverse===0&&(this._reverse=1),this._process(e),e._justifyContent._needsProcess=!0,e._layouter._needsProcess=!0}};function Fn(e){let t=e._flexDirection._offset,n=e._flexDirection._reverse,r=e._children._boxes;for(let i=0;i{e._layouter._childrenPos[t.id].x-=a-o[n]})}function Vn(e){let t=e._flexDirection._offset,{usedDirectionSpace:n,remainingSpace:r}=Un(e),i=t*2-n*Math.sign(t),a=this._computeOffset(i),o=this._computeMargin(e,r,e._flexDirection._reverse);e._children._boxes.forEach((t,n)=>{e._layouter._childrenPos[t.id].y-=a-o[n]})}function Hn(e){let t=e._bounds._computeChildrenSideWidth(e);return{usedDirectionSpace:t,remainingSpace:e._bounds._innerWidth-t}}function Un(e){let t=e._bounds._computeChildrenSideHeight(e);return{usedDirectionSpace:t,remainingSpace:e._bounds._innerHeight-t}}function Q(e){return 0}function Wn(e){return e}function Gn(e){return e/2}function Kn(e,t=0,n=1){return Array(e._children._boxes.length).fill(0)}function qn(e,t=0,n=1){let r=e._children._boxes.length,i=Array(r).fill(0);if(t>0&&r>1){let e=t/(r-1)*n;i[0]=0;for(let t=1;t0){let e=t/(r+1)*n;for(let t=0;t0){let e=t/r*n,a=e/2;i[0]=a;for(let t=1;tt&&(t=r)}return t}function ur(e){let t=0;for(let n of e._children._boxes){if(n._position._value!==`static`)continue;let e=n._margin._value,r=n._bounds._offsetHeight+e.x+e.z;r>t&&(t=r)}return t}var dr=class e extends q{constructor(t,n){e.definePropertiesValues(t,n),super(t,n),e.init(this)}bindBackgroundMeshProperties(){this._bounds._size=this._backgroundMesh.scale,this._bounds._needsProcess=!0}unbindBackgroundMeshProperties(){this._bounds._size=new b.Vector3(1,1,1),this._bounds._needsProcess=!0}static definePropertiesValues(e,t){e.children||=xn,e.bounds||=Sn,e.flexDirection||=Pn,e.justifyContent||=zn,e.alignItems||=En,e.position||=tr,e.autoSize||=nr,e.renderer||=er,t.fontSide||=0,t.invertAlpha||=!1,t.fontCastShadow||=!1,t.fontReceiveShadow||=!1,t.backgroundCastShadow||=!1,t.backgroundReceiveShadow||=!1}static init(e){Object.defineProperties(e,{isBox:{configurable:!1,enumerable:!0,value:!0}}),e.backgroundMaterial=new bn,e._renderer.render(e),e._backgroundMesh.visible=!1}},fr=class extends Array{constructor(...e){super(...e),this.width=0,this.lineBase=0,this.lineHeight=0,this.y=0}},pr=class extends v{constructor(){super(`layouter`,null,!1),this._needsUpdate=!0,this._childrenPos={}}update(e,t){this._childrenPos={};for(let t of e._children._boxes)t._position._value===`static`&&(this._childrenPos[t.id]=t.position)}process(e){}},mr=class e extends dr{constructor(t={}){let n={};e.definePropertiesValues(n,t),super(n,t),e.init(this)}add(e){let t=[];for(let e=0;ee.asInlineGlyph()),this._value.length){this._value[0].paddingLeft=e._padding._value.w,this._value[0].marginLeft=e._margin._value.w;let t=this._value.length-1;this._value[t].paddingRight=e._padding._value.y,this._value[t].marginRight=e._margin._value.y}e._fontSize._needsProcess=!0,e._lineBreak._needsProcess=!0,e._fontKerning._needsProcess=!0,e._layouter._needsProcess=!0}get value(){return this._value}},_r=class extends v{constructor(){super(`glyphs`,null,!1),this._needsUpdate=!1,this._value=null}process(e){e._font._fontVariant&&e._font._fontVariant.isReady&&(this._value=e._whiteSpace._whiteSpacedContent.split(``).map(t=>e._font._fontVariant.getTypographicGlyph(t)),this._value&&(e._inlines._needsProcess=!0))}get value(){return this._value}},vr=class extends D{constructor(){super(`color`,`inherit`,!1),this.output=this._outputValue}computeOutputValue(e){this._input===`inherit`?this._value.set(this.getInheritedInput(e)):this._value.set(this._input)}},yr=class extends v{constructor(e=`- ,.:?! -`){super(`lineBreak`,e,!0),this._newLineBreakability=null}update(e,t){this._needsProcess=!0}process(e){let t=e._whiteSpace._newLineBreakability;if(e._inlines._value)for(let n=0;ne.isUI&&e.isText),this._needsProcess=!0}process(e){this._value&&(this._value._layouter._needsProcess=!0)}},xr=class extends D{constructor(e){super(`backgroundColor`,e,!1),this._allowsInherit=!1,this._input=0}computeOutputValue(e){this._input===`inherit`?this._value.set(this.getInheritedInput(e)):this._value.set(this._input)}},Sr=class extends yt{constructor(){super(),this._allowsInherit=!1,this.computeOutputValue=this._computeFromInherited}},Cr=class extends St{constructor(){super()}computeOutputValue(e){this._value=T(this.getInheritedInput(e))}},wr=class extends Xt{constructor(){super(`fontFamily`,`inherit`,!0),this._input=`inherit`,this._needsUpdate=!0,this._allowsInherit=!1}computeOutputValue(e){let t=this._inheritedInput;if(t===`inherit`&&(t=this.getInheritedInput(e)),t instanceof H)this._value=t,e._font._needsUpdate=!0;else if(typeof t==`string`){let n=W.getFontFamily(t);n?(this._value=n,e._font._needsUpdate=!0):console.warn(`(.style) fontFamily, the font '${t}' is not registered. Aborted.`)}else console.warn(`(.style) fontFamily requires a registered fontFamily instance, or the id of a registered fontFamily.`),console.warn(`If you want to set a specific font, please use .font property instead.`)}get value(){return this._value}},Tr=class extends Qt{constructor(){super(),this._allowsInherit=!1,this.computeOutputValue=this._computeFromInherited,this._whiteSpacedContent=``,this._stringCollapser=this.emptyStrategyLogic,this._inlineCollapser=this.emptyStrategyLogic,this._inlineWrapper=this.emptyStrategyLogic}_computeFromInherited(e){switch(super._computeFromInherited(e),this._newLineBreakability=Dr(this._value),this._value){case`nowrap`:case`normal`:this._stringCollapser=Or;break;case`pre-line`:this._stringCollapser=kr;break;default:this._stringCollapser=Ar}switch(this._value){case`pre-line`:case`nowrap`:case`normal`:this._inlineCollapser=Fr;break;case`pre-wrap`:this._inlineCollapser=Pr;break;default:this._inlineCollapser=Ir}switch(this._value){case`pre-line`:case`pre-wrap`:case`normal`:this._inlineWrapper=jr;break;case`pre`:this._inlineWrapper=Mr;break;default:this._inlineWrapper=Nr}this._needsProcess=!0}process(e){e.isInline&&!e.isInlineBlock&&(this._whiteSpacedContent=this._stringCollapser(e._textContent._value),e._glyphs._needsProcess=!0)}},Er={" ":` `,"\n":` -`,"\r":`\r`," ":` `},Dr=function(e){switch(e){case`pre`:case`pre-wrap`:case`pre-line`:return`mandatory`}return null};function Or(e){return kr(e.replace(/\n/g,` `))}function kr(e){return e.replace(/[ ]{2,}/g,` `)}function Ar(e){return e}function jr(e,t,n,r){let i=e[t];if(i.lineBreak===`mandatory`||n+i.xadvance+i.xoffset+i.kerning>r.INNER_WIDTH)return!0;let a=zr(e,t,r);return Br(e[t-1],n,a,r)}function Mr(e,t,n,r){return e[t].lineBreak===`mandatory`}function Nr(){return!1}function Pr(e){if(!e[0])return 0;let t=e[0],n=e[e.length-1];return t.char&&t.char===` -`&&e.length>1&&Rr([t],e[1]),n.char&&n.char===` -`&&e.length>1&&Lr([n],e[e.length-2]),t.offsetX}function Fr(e){if(!e[0])return 0;let t=[],n;for(let r=0;rr){t.push(i),n=e[r+1];continue}break}Rr(t,n),t=[],n=null;for(let r=e.length-1;r>0;r--){let i=e[r];if(i.char&&Er[i.char]&&r>0){t.push(i),n=e[r-1];continue}break}return Lr(t,n),e[0].offsetX}function Ir(e){return e[0]?e[0].offsetX:0}function Lr(e,t){if(t)for(let n=0;n-1}var Vr=class extends tn{constructor(){super(),this._input=`inherit`,this._allowsInherit=!1,this.computeOutputValue=this._computeFromInherited}_computeFromInherited(e){super._computeFromInherited(e),e._fontSize._needsProcess=!0,e._layouter._needsProcess=!0}},Hr=class extends x{constructor(){super(`fontSize`,`inherit`,!0),this._allowsInherit=!1}computeOutputValue(e){this._value=this._inheritedInput,e._font._fontVariant&&(e._bounds._needsProcess=!0,e._layouter._needsProcess=!0)}process(e){if(!e._font._fontVariant||!e._font._fontVariant.isReady)return;let t=this._value/e._font._fontVariant.typographic.size,n=e._inlines._value;for(let e=0;ee._font._fontVariant.getGeometricGlyph(t,e).translate(t.offsetX,t.offsetY,0)));e.setFontMesh(new b.Mesh(t,e.fontMaterial)),e._fontMesh.renderOrder=1/0}},Xr=class extends P{constructor(){super(),this._allowsInherit=!1,this._needsUpdate=!1}computeOutputValue(e){this._value=this._inheritedInput,e._layouter._needsProcess=!0}},Zr=class e extends q{constructor(t={}){let n={};e.definePropertiesValues(n,t),super(n,t),e.init(this)}add(e){let t=[];for(let e=0;e{super._rebuildParentUI(),this._layouter._needsUpdate=!0};set textContent(e){this._textContent.value=e}get textContent(){return this._textContent._value}set invertAlpha(e){this._invertAlpha.value=e}get invertAlpha(){return this._invertAlpha._value}static definePropertiesValues(e,t){e.children||=Kr,e.textContent||=hr,e.glyphs||=_r,e.inlines||=gr,e.layouter||=br,e.renderer||=Yr,e.fontFamily||=wr,e.fontWeight||=Cr,e.fontStyle||=Sr,e.fontSize||=Hr,e.color||=vr,e.backgroundColor||=xr,e.lineBreak||=yr,e.letterSpacing||=Vr,e.whiteSpace||=Tr,e.segments||=Wr,e.textAlign||=Xr,e.fontKerning||=Gr}static init(e){Object.defineProperties(e,{isInline:{configurable:!1,enumerable:!0,value:!0}})}},Qr=class extends vt{constructor(){super(`textContent`,null,!1),this._needsUpdate=!1}set value(e){this._value!==e&&(this._value=e,this._needsUpdate=!0)}update(e,t){this._needsUpdate=!1;for(let t=e.children.length-1;t>=0;t--){let n=e.children[t];n.isUI&&(e.remove(n),n.clear())}e._children._uis=[],this._value&&e.add(new Zr({name:`anonymousInline`,textContent:this._value}))}},$r=class extends Array{constructor(...e){super(...e),this.width=0,this.height=0}},ei=class extends v{constructor(){super(`layouter`,null,!1),this._value=null}update(e,t){}process(e){let t=e._width._value;t=e._width._auto?1/0:e._bounds._innerWidth;let n=e._lineHeight._value,r=new $r(new fr),i=0;e._children._inlines.forEach(e=>{if(!e._inlines.value)return;this._resetInlines(e);let n=e._fontSize._value,a=e._letterSpacing._value*n,o={WHITESPACE:e._whiteSpace._value,LETTERSPACING:a,BREAKON:e._lineBreak._value,INNER_WIDTH:t},s=e._whiteSpace._inlineWrapper;i+=e._margin._value.w+e._padding._value.w,e._inlines.value.forEach((e,t,n)=>{let c=r[r.length-1];if(s(n,t,i,o)){if(r.push(new fr(e)),e.offsetX=e.xoffset,e.width===0){i=0;return}e.cumulativeWidth=e.xadvance+a,i=e.cumulativeWidth;return}r[r.length-1].push(e),e.offsetX=i+e.xoffset+e.kerning,e.cumulativeWidth=e.xadvance+e.kerning+a,i+=e.cumulativeWidth,c.length-1==1&&c[c.length-2].width===0&&(e.offsetX-=e.xoffset,i-=e.xoffset)}),i+=e._margin._value.y+e._padding._value.y});let a=e._whiteSpace._inlineCollapser,o=0,s=0,c=0;r.forEach((e,t)=>{let i=a(e),l=0,u=0;if(e.forEach(e=>{l=Math.max(l,e.lineHeight),u=Math.max(u,e.lineBase),e.offsetX-=i}),e.lineHeight=l,e.lineBase=u,t===0?c=-(l*n-l)*.5:c-=r[t-1].lineHeight*n,e.y=c,e.x=0,e.forEach(t=>{t.offsetY=c-t.anchor,t.lineHeighte.visible&&e.isUI),this._inlines=this._uis.filter(e=>e.isInline).sort(this._sortOrder)}dispose(){this._inlines=null}_sortOrder=(e,t)=>e._order._valuet._order._value?1:this._uis.indexOf(e)0&&super.add(...t),n&&(this._children._needsUpdate=!0,this._layouter._needsProcess=!0),this}set textContent(e){this._textContent.value=e}get textContent(){return super.textContent}set invertAlpha(e){this._invertAlpha.value=e}get invertAlpha(){return this._invertAlpha._value}get lines(){return this._layouter._value}static definePropertiesValues(e,t){e.flexDirection=ii,e.justifyContent=ct,e.alignItems=N,e.bounds=si,e.autoSize=li,e.renderer=ui,e.children||=ci,e.textContent||=Qr,e.layouter||=ei,e.lineHeight||=ai,e.textAlign||=ti,e.whiteSpace||=Tr,e.fontKerning||=oi,e.segments||=Ur,t.width||=`100%`,t.fontSide||=0}static init(e){Object.defineProperties(e,{isText:{configurable:!1,enumerable:!0,value:!0}})}},fi=class extends v{constructor(){super(`inlines`,null,!1),this._value=[]}process(e){this._value[0].paddingLeft=e._padding._value.w,this._value[0].marginLeft=e._margin._value.w;let t=this._value.length-1;this._value[t].paddingRight=e._padding._value.y,this._value[t].marginRight=e._margin._value.y}},pi=class extends v{constructor(){super(`renderer`)}render(e){e._backgroundMesh||e.setBackgroundMesh(new Zn(e)),e._backgroundMesh.position.x=e._inlines._value[0].offsetX+e._inlines._value[0].width/2,e._backgroundMesh.position.y=e._inlines._value[0].offsetY+e._inlines._value[0].lineBase/2,e._bounds.render(e)}},mi=class extends v{constructor(){super(`bounds`,null,!1),this._size=new b.Vector3(1,1,1),this._offsetWidth=0,this._offsetHeight=0,this._innerWidth=0,this._innerHeight=0}update(e,t){this.output(t),this._needsProcess=!0}process(e){this._offsetWidth=this._innerWidth=e._inlines._value[0].width,this._offsetHeight=this._innerHeight=e._inlines._value[0].height,this._needsRender=!0,e._borderWidth._needsRender=!0,e._borderRadius._needsRender=!0}render(e){this._size.x=this._offsetWidth,this._size.y=this._offsetHeight}output(e){e.size=this._size}},hi=class e extends q{constructor(t={}){let n={};e.definePropertiesValues(n,t),super(n,t),e.init(this)}clear(){for(let e of this._inlines._value)e.clear();return super.clear()}bindBackgroundMeshProperties(){this._backgroundMesh.raycast=()=>{},this._bounds._size=this._backgroundMesh.scale,this._bounds._needsUpdate=!0}unbindBackgroundMeshProperties(){this._bounds._size=new b.Vector3(1,1,1),this._bounds._needsUpdate=!0}add(e){let t=[];for(let e=0;eJ.update(),yi={BaseProperty:v,Block:mr,Text:di,Inline:Zr,InlineBlock:hi,MeshUIBaseElement:q,FontLibrary:W,update:vi,MSDFFontMaterialUtils:V,ShaderChunkUI:hn,Behavior:_i,FontVariant:E};typeof global<`u`&&(global.ThreeMeshUI=yi);var bi=yi,xi=m.ti,Si=m.nS,Ci=m.eB,wi=m.Yp,Ti=m.VB,Ei=m.BC,Di=m.zN,Oi=m.cV,ki=m.hW,Ai=m.k2,ji=m.K6,Mi=m.M7,Ni=m.ls,Pi=m.Hi,Fi=m.EY,Ii=m.MR,Li=m.zf,Ri=m.Ay,zi=m.yo,Bi=class extends Si{constructor(e,t={}){super(e),e._simpleState__activeStates=[],e._simpleState__normalStyles={},e._simpleState__states=t,e._simpleState__statesProperties={};for(let n in t)for(let r in t[n])e._simpleState__statesProperties[r]||(e._simpleState__statesProperties[r]=[]),e._simpleState__statesProperties[r].push(n);for(let t of e._components)e._simpleState__statesProperties[t.id]&&(e._simpleState__normalStyles[t.id]=t.inline?t.inline:t._value);e.__overridedSet=e.set,e.set=this.storeSet.bind(e),e.renderStates=this.renderStates.bind(e),e.setupState=this.setupState.bind(e),e.setState=this.setState.bind(e),e.activatePseudoState=this.activatePseudoState.bind(e),e.deactivatePseudoState=this.deactivatePseudoState.bind(e),e.togglePseudoState=this.togglePseudoState.bind(e)}act(){}attach(){}detach(){}setupState(e,t){this._simpleState__states[e]=t;let n=[];for(let r in t)this._simpleState__statesProperties[r]||(this._simpleState__statesProperties[r]=[],n.push(r)),this._simpleState__statesProperties[r].push(e);for(let e of this._components)n.indexOf(e.id)>-1&&(this._simpleState__normalStyles[e.id]=e.inline?e.inline:e._value)}renderStates(){let e={...this._simpleState__normalStyles};for(let t in this._simpleState__states)this._simpleState__activeStates.indexOf(t)>-1&&(e={...e,...this._simpleState__states[t]});this.set(e,!1)}storeSet(e,t=!0){if(t)for(let t in e)this._simpleState__statesProperties[t]&&(this._simpleState__normalStyles[t]=e[t]);this.__overridedSet(e)}activatePseudoState(e){this._simpleState__activeStates.indexOf(e)===-1&&(this._simpleState__activeStates.push(e),this.renderStates())}deactivatePseudoState(e){let t=this._simpleState__activeStates.indexOf(e);t>-1&&(this._simpleState__activeStates.splice(t,1),this.renderStates())}togglePseudoState(e){let t=this._simpleState__activeStates.indexOf(e);t>-1?this._simpleState__activeStates.splice(t,1):this._simpleState__activeStates.push(e),this.renderStates()}setState(e){Array.isArray(e)?this._simpleState__activeStates=e:this._simpleState__activeStates=[e],this.renderStates()}};export{Fi as a,ae as c,Oi as i,Ci as n,Ri as o,Ti as r,zi as s,Bi as t}; \ No newline at end of file diff --git a/Needle/MenuScene/dist/assets/three-mesh-ui.CgGzZ3ml.js.gz b/Needle/MenuScene/dist/assets/three-mesh-ui.CgGzZ3ml.js.gz deleted file mode 100644 index f37c13d..0000000 Binary files a/Needle/MenuScene/dist/assets/three-mesh-ui.CgGzZ3ml.js.gz and /dev/null differ diff --git a/Needle/MenuScene/dist/assets/three-quarks.DALdLWPD.js b/Needle/MenuScene/dist/assets/three-quarks.DALdLWPD.js deleted file mode 100644 index addfe6f..0000000 --- a/Needle/MenuScene/dist/assets/three-quarks.DALdLWPD.js +++ /dev/null @@ -1,1039 +0,0 @@ -import{$ as e,$n as t,Ar as n,At as r,Qt as i,S as a,Zt as o,_t as s,fn as c,in as l,rn as u,tr as d,vn as f,vt as p,x as m,xr as h,yr as g}from"./three@0.169.19.js";var _=`00.01.02.03.04.05.06.07.08.09.0a.0b.0c.0d.0e.0f.10.11.12.13.14.15.16.17.18.19.1a.1b.1c.1d.1e.1f.20.21.22.23.24.25.26.27.28.29.2a.2b.2c.2d.2e.2f.30.31.32.33.34.35.36.37.38.39.3a.3b.3c.3d.3e.3f.40.41.42.43.44.45.46.47.48.49.4a.4b.4c.4d.4e.4f.50.51.52.53.54.55.56.57.58.59.5a.5b.5c.5d.5e.5f.60.61.62.63.64.65.66.67.68.69.6a.6b.6c.6d.6e.6f.70.71.72.73.74.75.76.77.78.79.7a.7b.7c.7d.7e.7f.80.81.82.83.84.85.86.87.88.89.8a.8b.8c.8d.8e.8f.90.91.92.93.94.95.96.97.98.99.9a.9b.9c.9d.9e.9f.a0.a1.a2.a3.a4.a5.a6.a7.a8.a9.aa.ab.ac.ad.ae.af.b0.b1.b2.b3.b4.b5.b6.b7.b8.b9.ba.bb.bc.bd.be.bf.c0.c1.c2.c3.c4.c5.c6.c7.c8.c9.ca.cb.cc.cd.ce.cf.d0.d1.d2.d3.d4.d5.d6.d7.d8.d9.da.db.dc.dd.de.df.e0.e1.e2.e3.e4.e5.e6.e7.e8.e9.ea.eb.ec.ed.ee.ef.f0.f1.f2.f3.f4.f5.f6.f7.f8.f9.fa.fb.fc.fd.fe.ff`.split(`.`),v=1234567,y=Math.PI/180,b=180/Math.PI;function x(){let e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,r=Math.random()*4294967295|0;return(_[e&255]+_[e>>8&255]+_[e>>16&255]+_[e>>24&255]+`-`+_[t&255]+_[t>>8&255]+`-`+_[t>>16&15|64]+_[t>>24&255]+`-`+_[n&63|128]+_[n>>8&255]+`-`+_[n>>16&255]+_[n>>24&255]+_[r&255]+_[r>>8&255]+_[r>>16&255]+_[r>>24&255]).toLowerCase()}function S(e,t,n){return Math.max(t,Math.min(n,e))}function C(e,t){return(e%t+t)%t}function w(e,t,n,r,i){return r+(e-t)*(i-r)/(n-t)}function T(e,t,n){return e===t?0:(n-e)/(t-e)}function E(e,t,n){return(1-n)*e+n*t}function D(e,t,n,r){return E(e,t,1-Math.exp(-n*r))}function O(e,t=1){return t-Math.abs(C(e,t*2)-t)}function ee(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*(3-2*e))}function k(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*e*(e*(e*6-15)+10))}function A(e,t){return e+Math.floor(Math.random()*(t-e+1))}function j(e,t){return e+Math.random()*(t-e)}function M(e){return e*(.5-Math.random())}function N(e){e!==void 0&&(v=e);let t=v+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function P(e){return e*y}function F(e){return e*b}function te(e){return(e&e-1)==0&&e!==0}function ne(e){return 2**Math.ceil(Math.log(e)/Math.LN2)}function re(e){return 2**Math.floor(Math.log(e)/Math.LN2)}function ie(e,t,n,r,i){let a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((t+r)/2),u=o((t+r)/2),d=a((t-r)/2),f=o((t-r)/2),p=a((r-t)/2),m=o((r-t)/2);switch(i){case`XYX`:e.set(s*u,c*d,c*f,s*l);break;case`YZY`:e.set(c*f,s*u,c*d,s*l);break;case`ZXZ`:e.set(c*d,c*f,s*u,s*l);break;case`XZX`:e.set(s*u,c*m,c*p,s*l);break;case`YXY`:e.set(c*p,s*u,c*m,s*l);break;case`ZYZ`:e.set(c*m,c*p,s*u,s*l);break;default:console.warn(`../math.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: `+i)}}function ae(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error(`Invalid component type.`)}}function oe(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(e*4294967295);case Uint16Array:return Math.round(e*65535);case Uint8Array:return Math.round(e*255);case Int32Array:return Math.round(e*2147483647);case Int16Array:return Math.round(e*32767);case Int8Array:return Math.round(e*127);default:throw Error(`Invalid component type.`)}}var se={DEG2RAD:y,RAD2DEG:b,generateUUID:x,clamp:S,euclideanModulo:C,mapLinear:w,inverseLerp:T,lerp:E,damp:D,pingpong:O,smoothstep:ee,smootherstep:k,randInt:A,randFloat:j,randFloatSpread:M,seededRandom:N,degToRad:P,radToDeg:F,isPowerOfTwo:te,ceilPowerOfTwo:ne,floorPowerOfTwo:re,setQuaternionFromProperEuler:ie,normalize:oe,denormalize:ae},I=class e{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(o===0){e[t+0]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u;return}if(o===1){e[t+0]=d,e[t+1]=f,e[t+2]=p,e[t+3]=m;return}if(u!==m||s!==d||c!==f||l!==p){let e=1-o,t=s*d+c*f+l*p+u*m,n=t>=0?1:-1,r=1-t*t;if(r>2**-52){let i=Math.sqrt(r),a=Math.atan2(i,t*n);e=Math.sin(e*a)/i,o=Math.sin(o*a)/i}let i=o*n;if(s=s*e+d*i,c=c*e+f*i,l=l*e+p*i,u=u*e+m*i,e===1-o){let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new e(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:console.warn(`../math.Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<2**-52?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(S(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);let n=this._x,r=this._y,i=this._z,a=this._w,o=a*e._w+n*e._x+r*e._y+i*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=a,this._x=n,this._y=r,this._z=i,this;let s=1-o*o;if(s<=2**-52){let e=1-t;return this._w=e*a+t*this._w,this._x=e*n+t*this._x,this._y=e*r+t*this._y,this._z=e*i+t*this._z,this.normalize(),this}let c=Math.sqrt(s),l=Math.atan2(c,o),u=Math.sin((1-t)*l)/c,d=Math.sin(t*l)/c;return this._w=a*u+this._w*d,this._x=n*u+this._x*d,this._y=r*u+this._y*d,this._z=i*u+this._z*d,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},L=class e{constructor(t=0,n=0,r=0){this.isVector3=!0,e.prototype.isVector3=!0,this.x=t,this.y=n,this.z=r}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`index is out of range: `+e)}}clone(){return new e(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(le.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(le.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return ce.copy(this).projectOnVector(e),this.sub(ce)}reflect(e){return this.sub(ce.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(S(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}abs(){return this.x=Math.abs(this.x),this.y=Math.abs(this.y),this.z=Math.abs(this.z),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},ce=new L,le=new I,ue=2e3,R=class e{constructor(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g){this.isMatrix4=!0,e.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g)}extractPosition(e){return console.warn(`THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().`),this.copyPosition(e)}multiplyToArray(e,t,n){return console.error(`THREE.Matrix4: .multiplyToArray() has been removed.`),this}setRotationFromQuaternion(e){return this.makeRotationFromQuaternion(e)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,n=e.elements,r=1/de.setFromMatrixColumn(e,0).length(),i=1/de.setFromMatrixColumn(e,1).length(),a=1/de.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(fe,e,pe)}lookAt(e,t,n){let r=this.elements;return V.subVectors(e,t),V.lengthSq()===0&&(V.z=1),V.normalize(),B.crossVectors(n,V),B.lengthSq()===0&&(Math.abs(n.z)===1?V.x+=1e-4:V.z+=1e-4,V.normalize(),B.crossVectors(n,V)),B.normalize(),me.crossVectors(V,B),r[0]=B.x,r[4]=me.x,r[8]=V.x,r[1]=B.y,r[5]=me.y,r[9]=V.y,r[2]=B.z,r[6]=me.z,r[10]=V.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],w=r[12],T=r[1],E=r[5],D=r[9],O=r[13],ee=r[2],k=r[6],A=r[10],j=r[14],M=r[3],N=r[7],P=r[11],F=r[15];return i[0]=a*x+o*T+s*ee+c*M,i[4]=a*S+o*E+s*k+c*N,i[8]=a*C+o*D+s*A+c*P,i[12]=a*w+o*O+s*j+c*F,i[1]=l*x+u*T+d*ee+f*M,i[5]=l*S+u*E+d*k+f*N,i[9]=l*C+u*D+d*A+f*P,i[13]=l*w+u*O+d*j+f*F,i[2]=p*x+m*T+h*ee+g*M,i[6]=p*S+m*E+h*k+g*N,i[10]=p*C+m*D+h*A+g*P,i[14]=p*w+m*O+h*j+g*F,i[3]=_*x+v*T+y*ee+b*M,i[7]=_*S+v*E+y*k+b*N,i[11]=_*C+v*D+y*A+b*P,i[15]=_*w+v*O+y*j+b*F,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15];return p*(+i*s*u-r*c*u-i*o*d+n*c*d+r*o*f-n*s*f)+m*(+t*s*f-t*c*d+i*a*d-r*a*f+r*c*l-i*s*l)+h*(+t*c*u-t*o*f-i*a*u+n*a*f+i*o*l-n*c*l)+g*(-r*o*l-t*s*u+t*o*d+r*a*u-n*a*d+n*s*l)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=u*h*c-m*d*c+m*s*f-o*h*f-u*s*g+o*d*g,v=p*d*c-l*h*c-p*s*f+a*h*f+l*s*g-a*d*g,y=l*m*c-p*u*c+p*o*f-a*m*f-l*o*g+a*u*g,b=p*u*s-l*m*s-p*o*d+a*m*d+l*o*h-a*u*h,x=t*_+n*v+r*y+i*b;if(x===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let S=1/x;return e[0]=_*S,e[1]=(m*d*i-u*h*i-m*r*f+n*h*f+u*r*g-n*d*g)*S,e[2]=(o*h*i-m*s*i+m*r*c-n*h*c-o*r*g+n*s*g)*S,e[3]=(u*s*i-o*d*i-u*r*c+n*d*c+o*r*f-n*s*f)*S,e[4]=v*S,e[5]=(l*h*i-p*d*i+p*r*f-t*h*f-l*r*g+t*d*g)*S,e[6]=(p*s*i-a*h*i-p*r*c+t*h*c+a*r*g-t*s*g)*S,e[7]=(a*d*i-l*s*i+l*r*c-t*d*c-a*r*f+t*s*f)*S,e[8]=y*S,e[9]=(p*u*i-l*m*i-p*n*f+t*m*f+l*n*g-t*u*g)*S,e[10]=(a*m*i-p*o*i+p*n*c-t*m*c-a*n*g+t*o*g)*S,e[11]=(l*o*i-a*u*i-l*n*c+t*u*c+a*n*f-t*o*f)*S,e[12]=b*S,e[13]=(l*m*r-p*u*r+p*n*d-t*m*d-l*n*h+t*u*h)*S,e[14]=(p*o*r-a*m*r-p*n*s+t*m*s+a*n*h-t*o*h)*S,e[15]=(a*u*r-l*o*r+l*n*s-t*u*s-a*n*d+t*o*d)*S,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements,i=de.set(r[0],r[1],r[2]).length(),a=de.set(r[4],r[5],r[6]).length(),o=de.set(r[8],r[9],r[10]).length();this.determinant()<0&&(i=-i),e.x=r[12],e.y=r[13],e.z=r[14],z.copy(this);let s=1/i,c=1/a,l=1/o;return z.elements[0]*=s,z.elements[1]*=s,z.elements[2]*=s,z.elements[4]*=c,z.elements[5]*=c,z.elements[6]*=c,z.elements[8]*=l,z.elements[9]*=l,z.elements[10]*=l,t.setFromRotationMatrix(z),n.x=i,n.y=a,n.z=o,this}makePerspective(e,t,n,r,i,a,o=ue){let s=this.elements,c=2*i/(t-e),l=2*i/(n-r),u=(t+e)/(t-e),d=(n+r)/(n-r),f,p;if(o===2e3)f=-(a+i)/(a-i),p=-2*a*i/(a-i);else if(o===2001)f=-a/(a-i),p=-a*i/(a-i);else throw Error(`Matrix4.makePerspective(): Invalid coordinate system: `+o);return s[0]=c,s[4]=0,s[8]=u,s[12]=0,s[1]=0,s[5]=l,s[9]=d,s[13]=0,s[2]=0,s[6]=0,s[10]=f,s[14]=p,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=ue){let s=this.elements,c=1/(t-e),l=1/(n-r),u=1/(a-i),d=(t+e)*c,f=(n+r)*l,p,m;if(o===2e3)p=(a+i)*u,m=-2*u;else if(o===2001)p=i*u,m=-1*u;else throw Error(`../math.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return s[0]=2*c,s[4]=0,s[8]=0,s[12]=-d,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-f,s[2]=0,s[6]=0,s[10]=m,s[14]=-p,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}},de=new L,z=new R,fe=new L(0,0,0),pe=new L(1,1,1),B=new L,me=new L,V=new L,he=new R,ge=new I,_e=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new e(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(S(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-S(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(S(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-S(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(S(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-S(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:console.warn(`../math.Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return he.makeRotationFromQuaternion(e),this.setFromRotationMatrix(he,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return ge.setFromEuler(this),this.setFromQuaternion(ge,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(e){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};_e.DEFAULT_ORDER=`XYZ`;var H=class e{constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`index is out of range: `+e)}}clone(){return new e(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(S(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}};H.isVector2=!0;var U=class e{constructor(t=0,n=0,r=0,i=1){e.prototype.isVector4=!0,this.x=t,this.y=n,this.z=r,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`index is out of range: `+e)}}clone(){return new e(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)s&&e>_?e_?s0?Math.floor(t/n)*n:t,e){case G.Loop:i%=1;break;case G.PingPong:i=Math.abs(i%2-1);break}return i}var be=class e{constructor(e,t,n,r){this.p=[e,t,n,r]}genValue(e){let t=e*e,n=e*e*e,r=1-e,i=r*r,a=i*r;return this.p[0]*a+this.p[1]*i*e*3+this.p[2]*r*t*3+this.p[3]*n}derivativeCoefficients(e){let t=[];for(let n=e,r=n.length-1;r>0;r--){let e=[];for(let t=0;t1;){for(n=[],a=0,o=t.length-1;a({r:e.x,g:e.y,b:e.z,a:e.w}),Se=e=>new U(e.r,e.g,e.b,e.a),Ce=(e,t)=>{switch(t){case`Vector3`:return new L(e.x,e.y,e.z);case`Vector4`:return new U(e.x,e.y,e.z,e.w);case`Color`:return new L(e.r,e.g,e.b);case`Number`:return e;default:return e}},we=(e,t)=>{switch(t){case`Vector3`:return{x:e.x,y:e.y,z:e.z};case`Vector4`:return{x:e.x,y:e.y,z:e.z,w:e.w};case`Color`:return{r:e.x,g:e.y,b:e.z};case`Number`:return e;default:return e}},Te=class e{constructor(e,t){this.a=e,this.b=t,this.type=`value`}startGen(e){}genColor(e,t){let n=Math.random();return t.copy(this.a).lerp(this.b,n)}toJSON(){return{type:`RandomColor`,a:xe(this.a),b:xe(this.b)}}static fromJSON(t){return new e(Se(t.a),Se(t.b))}clone(){return new e(this.a.clone(),this.b.clone())}},Ee=class e{constructor(e,t){this.a=e,this.b=t,this.indexCount=-1,this.type=`value`}startGen(e){this.indexCount=e.length,e.push(Math.random())}genColor(e,t){return this.indexCount===-1&&this.startGen(e),t.copy(this.a).lerp(this.b,e[this.indexCount])}toJSON(){return{type:`ColorRange`,a:xe(this.a),b:xe(this.b)}}static fromJSON(t){return new e(Se(t.a),Se(t.b))}clone(){return new e(this.a.clone(),this.b.clone())}},De=class e{constructor(e,t){this.subType=t,this.type=`function`,this.keys=e}findKey(e){let t=0,n=0,r=this.keys.length-1;for(;n+1this.getEndX(t))n=t+1;else return t;for(let t=n;t<=r;t++)if(e>=this.getStartX(t)&&e<=this.getEndX(t))return t;return-1}getStartX(e){return this.keys[e][1]}getEndX(e){return e+1=this.keys.length?this.keys[this.keys.length-1][0]:(this.keys[n+1][0]-this.keys[n][0])*((t-this.getStartX(n))/(this.getEndX(n)-this.getStartX(n)))+this.keys[n][0]:n===-1?e.copy(this.keys[0][0]):n+1>=this.keys.length?e.copy(this.keys[this.keys.length-1][0]):e.copy(this.keys[n][0]).lerp(this.keys[n+1][0],(t-this.getStartX(n))/(this.getEndX(n)-this.getStartX(n)))}toJSON(){return this.keys[0][0].constructor.name,{type:`CLinearFunction`,subType:this.subType,keys:this.keys.map(([e,t])=>({value:we(e,this.subType),pos:t}))}}static fromJSON(t){return new e(t.keys.map(e=>[Ce(e.value,t.subType),e.pos]),t.subType)}clone(){return this.subType===`Number`?new e(this.keys.map(([e,t])=>[e,t]),this.subType):new e(this.keys.map(([e,t])=>[e.clone(),t]),this.subType)}},Oe=new L,ke=class e{constructor(e=[[new L(0,0,0),0],[new L(1,1,1),0]],t=[[1,0],[1,1]]){this.type=`function`,this.color=new De(e,`Color`),this.alpha=new De(t,`Number`)}genColor(e,t,n){return this.color.genValue(Oe,n),t.set(Oe.x,Oe.y,Oe.z,this.alpha.genValue(1,n))}toJSON(){return{type:`Gradient`,color:this.color.toJSON(),alpha:this.alpha.toJSON()}}static fromJSON(t){if(t.functions){let n=t.functions.map(e=>[Ee.fromJSON(e.function).a,e.start]);return t.functions.length>0&&n.push([Ee.fromJSON(t.functions[t.functions.length-1].function).b,1]),new e(n.map(e=>[new L(e[0].x,e[0].y,e[0].z),e[1]]),n.map(e=>[e[0].w,e[1]]))}else{let n=new e;return n.alpha=De.fromJSON(t.alpha),n.color=De.fromJSON(t.color),n}}clone(){let t=new e;return t.alpha=this.alpha.clone(),t.color=this.color.clone(),t}startGen(e){}},Ae=new U,je=class e{constructor(e,t){this.indexCount=0,this.type=`function`,this.gradient1=e,this.gradient2=t}startGen(e){this.indexCount=e.length,e.push(Math.random())}genColor(e,t,n){return this.gradient1.genColor(e,t,n),this.gradient2.genColor(e,Ae,n),e&&e[this.indexCount]!==void 0?t.lerp(Ae,e[this.indexCount]):t.lerp(Ae,Math.random()),t}toJSON(){return{type:`RandomColorBetweenGradient`,gradient1:this.gradient1.toJSON(),gradient2:this.gradient2.toJSON()}}static fromJSON(t){return new e(ke.fromJSON(t.gradient1),ke.fromJSON(t.gradient2))}clone(){return new e(this.gradient1.clone(),this.gradient2.clone())}},Me=class e{constructor(e){this.color=e,this.type=`value`}startGen(e){}genColor(e,t){return t.copy(this.color)}toJSON(){return{type:`ConstantColor`,color:xe(this.color)}}static fromJSON(t){return new e(Se(t.color))}clone(){return new e(this.color.clone())}};function Ne(e){switch(e.type){case`ConstantColor`:return Me.fromJSON(e);case`ColorRange`:return Ee.fromJSON(e);case`RandomColor`:return Te.fromJSON(e);case`Gradient`:return ke.fromJSON(e);case`RandomColorBetweenGradient`:return je.fromJSON(e);default:return new Me(new U(1,1,1,1))}}var K=class e{constructor(e){this.value=e,this.type=`value`}startGen(e){}genValue(e){return this.value}toJSON(){return{type:`ConstantValue`,value:this.value}}static fromJSON(t){return new e(t.value)}clone(){return new e(this.value)}},Pe=class e{constructor(e,t){this.a=e,this.b=t,this.indexCount=-1,this.type=`value`}startGen(e){this.indexCount=e.length,e.push(Math.random())}genValue(e){return this.indexCount===-1&&this.startGen(e),se.lerp(this.a,this.b,e[this.indexCount])}toJSON(){return{type:`IntervalValue`,a:this.a,b:this.b}}static fromJSON(t){return new e(t.a,t.b)}clone(){return new e(this.a,this.b)}},Fe=class{constructor(){this.functions=[]}findFunction(e){let t=0,n=0,r=this.functions.length-1;for(;n+1this.getEndX(t))n=t+1;else return t;for(let t=n;t<=r;t++)if(e>=this.functions[t][1]&&e<=this.getEndX(t))return t;return-1}getStartX(e){return this.functions[e][1]}setStartX(e,t){e>0&&(this.functions[e][1]=t)}getEndX(e){return e+1({function:e.toJSON(),start:t}))}}static fromJSON(t){return new e(t.functions.map(e=>[be.fromJSON(e.function),e.start]))}clone(){return new e(this.functions.map(([e,t])=>[e.clone(),t]))}startGen(e){}};function q(e){switch(e.type){case`ConstantValue`:return K.fromJSON(e);case`IntervalValue`:return Pe.fromJSON(e);case`PiecewiseBezier`:return Ie.fromJSON(e);default:return new K(0)}}var Le=class e{constructor(){this.indexCount=0,this.type=`rotation`}startGen(e){this.indexCount=e.length,e.push(new I);let t,n,r,i,a,o;do t=Math.random()*2-1,n=Math.random()*2-1,r=t*t+n*n;while(r>1);do i=Math.random()*2-1,a=Math.random()*2-1,o=i*i+a*a;while(o>1);let s=Math.sqrt((1-r)/o);e[this.indexCount].set(t,n,s*i,s*a)}genValue(e,t,n,r){return this.indexCount===-1&&this.startGen(e),t.copy(e[this.indexCount]),t}toJSON(){return{type:`RandomQuat`}}static fromJSON(t){return new e}clone(){return new e}},Re=class e{constructor(e,t){this.axis=e,this.angle=t,this.type=`rotation`}startGen(e){this.angle.startGen(e)}genValue(e,t,n,r){return t.setFromAxisAngle(this.axis,this.angle.genValue(e,r)*n)}toJSON(){return{type:`AxisAngle`,axis:{x:this.axis.x,y:this.axis.y,z:this.axis.z},angle:this.angle.toJSON()}}static fromJSON(t){return new e(new L(t.axis.x,t.axis.y,t.axis.z),q(t.angle))}clone(){return new e(this.axis.clone(),this.angle.clone())}},ze=class e{constructor(e,t,n,r){this.angleX=e,this.angleY=t,this.angleZ=n,this.type=`rotation`,this.eular=new _e(0,0,0,r)}startGen(e){this.angleX.startGen(e),this.angleY.startGen(e),this.angleZ.startGen(e)}genValue(e,t,n,r){return this.eular.set(this.angleX.genValue(e,r)*n,this.angleY.genValue(e,r)*n,this.angleZ.genValue(e,r)*n),t.setFromEuler(this.eular)}toJSON(){return{type:`Euler`,angleX:this.angleX.toJSON(),angleY:this.angleY.toJSON(),angleZ:this.angleZ.toJSON(),eulerOrder:this.eular.order}}static fromJSON(t){return new e(q(t.angleX),q(t.angleY),q(t.angleZ),t.eulerOrder)}clone(){return new e(this.angleX,this.angleY,this.angleZ,this.eular.order)}};function Be(e){switch(e.type){case`AxisAngle`:return Re.fromJSON(e);case`Euler`:return ze.fromJSON(e);case`RandomQuat`:return Le.fromJSON(e);default:return new Le}}var Ve=class e{constructor(e,t,n){this.x=e,this.y=t,this.z=n,this.type=`vec3function`}startGen(e){this.x.startGen(e),this.y.startGen(e),this.z.startGen(e)}genValue(e,t,n){return t.set(this.x.genValue(e,n),this.y.genValue(e,n),this.z.genValue(e,n))}toJSON(){return{type:`Vector3Function`,x:this.x.toJSON(),y:this.y.toJSON(),z:this.z.toJSON()}}static fromJSON(t){return new e(q(t.x),q(t.y),q(t.z))}clone(){return new e(this.x,this.y,this.z)}};function He(e){switch(e.type){case`Vector3Function`:return Ve.fromJSON(e);default:return new Ve(new K(0),new K(0),new K(0))}}function Ue(e){switch(e.type){case`ConstantValue`:case`IntervalValue`:case`PiecewiseBezier`:return q(e);case`AxisAngle`:case`RandomQuat`:case`Euler`:return Be(e);case`Vector3Function`:return He(e);default:return new K(0)}}var We=class e{constructor(e={}){this.type=`cone`,this.currentValue=0,this.radius=e.radius??10,this.arc=e.arc??2*Math.PI,this.thickness=e.thickness??1,this.angle=e.angle??Math.PI/6,this.mode=e.mode??G.Random,this.spread=e.spread??0,this.speed=e.speed??new K(1),this.memory=[]}update(e,t){G.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,e.emissionState.time/e.duration)*t)}initialize(e,t){let n=ye(this.mode,this.currentValue,this.spread,t),r=se.lerp(1-this.thickness,1,Math.random()),i=n*this.arc,a=Math.sqrt(r),o=Math.sin(i),s=Math.cos(i);e.position.x=a*s,e.position.y=a*o,e.position.z=0;let c=this.angle*a;e.velocity.set(0,0,Math.cos(c)).addScaledVector(e.position,Math.sin(c)).multiplyScalar(e.startSpeed),e.position.multiplyScalar(this.radius)}toJSON(){return{type:`cone`,radius:this.radius,arc:this.arc,thickness:this.thickness,angle:this.angle,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(t){return new e({radius:t.radius,arc:t.arc,thickness:t.thickness,angle:t.angle,mode:t.mode,speed:t.speed?q(t.speed):void 0,spread:t.spread})}clone(){return new e({radius:this.radius,arc:this.arc,thickness:this.thickness,angle:this.angle,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}},Ge=class e{constructor(e={}){this.type=`circle`,this.currentValue=0,this.radius=e.radius??10,this.arc=e.arc??2*Math.PI,this.thickness=e.thickness??1,this.mode=e.mode??G.Random,this.spread=e.spread??0,this.speed=e.speed??new K(1),this.memory=[]}update(e,t){this.currentValue+=this.speed.genValue(this.memory,e.emissionState.time/e.duration)*t}initialize(e,t){let n=ye(this.mode,this.currentValue,this.spread,t),r=se.lerp(1-this.thickness,1,Math.random()),i=n*this.arc;e.position.x=Math.cos(i),e.position.y=Math.sin(i),e.position.z=0,e.velocity.copy(e.position).multiplyScalar(e.startSpeed),e.position.multiplyScalar(this.radius*r)}toJSON(){return{type:`circle`,radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(t){return new e({radius:t.radius,arc:t.arc,thickness:t.thickness,mode:t.mode,speed:t.speed?q(t.speed):void 0,spread:t.spread})}clone(){return new e({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}};function Ke(e,t){return Math.floor(Math.random()*(t-e))+e}var qe=new L(0,1,0),Je=new L(0,0,0),Ye=new L(1,1,1),Xe=new L(0,0,1),Ze=class e{constructor(e={}){this.type=`donut`,this.currentValue=0,this.radius=e.radius??10,this.arc=e.arc??2*Math.PI,this.thickness=e.thickness??1,this.donutRadius=e.donutRadius??this.radius*.2,this.mode=e.mode??G.Random,this.spread=e.spread??0,this.speed=e.speed??new K(1),this.memory=[],this._m1=new R}update(e,t){G.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,e.emissionState.time/e.duration)*t)}initialize(e,t){let n=ye(this.mode,this.currentValue,this.spread,t),r=Math.random(),i=se.lerp(1-this.thickness,1,Math.random()),a=n*this.arc,o=r*Math.PI*2,s=Math.sin(a),c=Math.cos(a);e.position.x=this.radius*c,e.position.y=this.radius*s,e.position.z=0,e.velocity.z=this.donutRadius*i*Math.sin(o),e.velocity.x=this.donutRadius*i*Math.cos(o)*c,e.velocity.y=this.donutRadius*i*Math.cos(o)*s,e.position.add(e.velocity),e.velocity.normalize().multiplyScalar(e.startSpeed),e.rotation instanceof I&&(this._m1.lookAt(Je,e.velocity,qe),e.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:`donut`,radius:this.radius,arc:this.arc,thickness:this.thickness,donutRadius:this.donutRadius,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(t){return new e({radius:t.radius,arc:t.arc,thickness:t.thickness,donutRadius:t.donutRadius,mode:t.mode,speed:t.speed?q(t.speed):void 0,spread:t.spread})}clone(){return new e({radius:this.radius,arc:this.arc,thickness:this.thickness,donutRadius:this.donutRadius,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}},Qe=class e{constructor(){this.type=`point`,this._m1=new R}update(e,t){}initialize(e){let t=Math.random(),n=Math.random(),r=t*Math.PI*2,i=Math.acos(2*n-1),a=Math.cbrt(Math.random()),o=Math.sin(r),s=Math.cos(r),c=Math.sin(i),l=Math.cos(i);e.velocity.x=a*c*s,e.velocity.y=a*c*o,e.velocity.z=a*l,e.velocity.multiplyScalar(e.startSpeed),e.position.setScalar(0),e.rotation instanceof I&&(this._m1.lookAt(Je,e.position,qe),e.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:`point`}}static fromJSON(t){return new e}clone(){return new e}},$e=class e{constructor(e={}){this.type=`sphere`,this.currentValue=0,this.radius=e.radius??10,this.arc=e.arc??2*Math.PI,this.thickness=e.thickness??1,this.mode=e.mode??G.Random,this.spread=e.spread??0,this.speed=e.speed??new K(1),this.memory=[],this._m1=new R}update(e,t){G.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,e.emissionState.time/e.duration)*t)}initialize(e,t){let n=ye(this.mode,this.currentValue,this.spread,t),r=Math.random(),i=se.lerp(1-this.thickness,1,Math.random()),a=n*this.arc,o=Math.acos(2*r-1),s=Math.sin(a),c=Math.cos(a),l=Math.sin(o),u=Math.cos(o);e.position.x=l*c,e.position.y=l*s,e.position.z=u,e.velocity.copy(e.position).multiplyScalar(e.startSpeed),e.position.multiplyScalar(this.radius*i),e.rotation instanceof I&&(this._m1.lookAt(Je,e.position,qe),e.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:`sphere`,radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(t){return new e({radius:t.radius,arc:t.arc,thickness:t.thickness,mode:t.mode,speed:t.speed?q(t.speed):void 0,spread:t.spread})}clone(){return new e({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}},et=class e{constructor(e={}){this.type=`sphere`,this.currentValue=0,this.radius=e.radius??10,this.arc=e.arc??2*Math.PI,this.thickness=e.thickness??1,this.mode=e.mode??G.Random,this.spread=e.spread??0,this.speed=e.speed??new K(1),this.memory=[],this._m1=new R}update(e,t){G.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,e.emissionState.time/e.duration)*t)}initialize(e,t){let n=ye(this.mode,this.currentValue,this.spread,t),r=Math.random(),i=se.lerp(1-this.thickness,1,Math.random()),a=n*this.arc,o=Math.acos(r),s=Math.sin(a),c=Math.cos(a),l=Math.sin(o),u=Math.cos(o);e.position.x=l*c,e.position.y=l*s,e.position.z=u,e.velocity.copy(e.position).multiplyScalar(e.startSpeed),e.position.multiplyScalar(this.radius*i),e.rotation instanceof I&&(this._m1.lookAt(Je,e.position,qe),e.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:`hemisphere`,radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(t){return new e({radius:t.radius,arc:t.arc,thickness:t.thickness,mode:t.mode,speed:t.speed?q(t.speed):void 0,spread:t.spread})}clone(){return new e({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}},tt=class e{constructor(e={}){this.type=`grid`,this.width=e.width??1,this.height=e.height??1,this.column=e.column??10,this.row=e.row??10}initialize(e){let t=Math.floor(Math.random()*this.row),n=Math.floor(Math.random()*this.column);e.position.x=n*this.width/this.column-this.width/2,e.position.y=t*this.height/this.row-this.height/2,e.position.z=0,e.velocity.set(0,0,e.startSpeed)}toJSON(){return{type:`grid`,width:this.width,height:this.height,column:this.column,row:this.row}}static fromJSON(t){return new e(t)}clone(){return new e({width:this.width,height:this.height,column:this.column,row:this.row})}update(e,t){}},nt={circle:{type:`circle`,params:[[`radius`,[`number`]],[`arc`,[`radian`]],[`thickness`,[`number`]],[`mode`,[`emitterMode`]],[`spread`,[`number`]],[`speed`,[`valueFunc`]]],constructor:Ge,loadJSON:Ge.fromJSON},cone:{type:`cone`,params:[[`radius`,[`number`]],[`arc`,[`radian`]],[`thickness`,[`number`]],[`angle`,[`radian`]],[`mode`,[`emitterMode`]],[`spread`,[`number`]],[`speed`,[`valueFunc`]]],constructor:We,loadJSON:We.fromJSON},donut:{type:`donut`,params:[[`radius`,[`number`]],[`arc`,[`radian`]],[`thickness`,[`number`]],[`donutRadius`,[`number`]],[`mode`,[`emitterMode`]],[`spread`,[`number`]],[`speed`,[`valueFunc`]]],constructor:Ze,loadJSON:Ze.fromJSON},point:{type:`point`,params:[],constructor:Qe,loadJSON:Qe.fromJSON},sphere:{type:`sphere`,params:[[`radius`,[`number`]],[`arc`,[`radian`]],[`thickness`,[`number`]],[`angle`,[`radian`]],[`mode`,[`emitterMode`]],[`spread`,[`number`]],[`speed`,[`valueFunc`]]],constructor:$e,loadJSON:$e.fromJSON},hemisphere:{type:`hemisphere`,params:[[`radius`,[`number`]],[`arc`,[`radian`]],[`thickness`,[`number`]],[`angle`,[`radian`]],[`mode`,[`emitterMode`]],[`spread`,[`number`]],[`speed`,[`valueFunc`]]],constructor:et,loadJSON:et.fromJSON},grid:{type:`grid`,params:[[`width`,[`number`]],[`height`,[`number`]],[`rows`,[`number`]],[`column`,[`number`]]],constructor:tt,loadJSON:tt.fromJSON}};function rt(e,t){return nt[e.type].loadJSON(e,t)}var it=class e{constructor(e){this.color=e,this.type=`ColorOverLife`}initialize(e){this.color.startGen(e.memory)}update(e,t){this.color.genColor(e.memory,e.color,e.age/e.life),e.color.x*=e.startColor.x,e.color.y*=e.startColor.y,e.color.z*=e.startColor.z,e.color.w*=e.startColor.w}frameUpdate(e){}toJSON(){return{type:this.type,color:this.color.toJSON()}}static fromJSON(t){return new e(Ne(t.color))}clone(){return new e(this.color.clone())}reset(){}},at=class e{constructor(e){this.angularVelocity=e,this.type=`RotationOverLife`}initialize(e){typeof e.rotation==`number`&&this.angularVelocity.startGen(e.memory)}update(e,t){typeof e.rotation==`number`&&(e.rotation+=t*this.angularVelocity.genValue(e.memory,e.age/e.life))}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON()}}static fromJSON(t){return new e(q(t.angularVelocity))}frameUpdate(e){}clone(){return new e(this.angularVelocity.clone())}reset(){}},ot=class e{constructor(e){this.angularVelocity=e,this.type=`Rotation3DOverLife`,this.tempQuat=new I,this.tempQuat2=new I}initialize(e){e.rotation instanceof I&&(e.angularVelocity=new I,this.angularVelocity.startGen(e.memory))}update(e,t){e.rotation instanceof I&&(this.angularVelocity.genValue(e.memory,this.tempQuat,t,e.age/e.life),e.rotation.multiply(this.tempQuat))}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON()}}static fromJSON(t){return new e(Be(t.angularVelocity))}frameUpdate(e){}clone(){return new e(this.angularVelocity.clone())}reset(){}},st=class e{initialize(e,t){this.ps=t,this.x.startGen(e.memory),this.y.startGen(e.memory),this.z.startGen(e.memory)}constructor(e,t,n){this.x=e,this.y=t,this.z=n,this.type=`ForceOverLife`,this._temp=new L,this._tempScale=new L,this._tempQ=new I}update(e,t){this._temp.set(this.x.genValue(e.memory,e.age/e.life),this.y.genValue(e.memory,e.age/e.life),this.z.genValue(e.memory,e.age/e.life)),this.ps.worldSpace||this._temp.multiply(this._tempScale).applyQuaternion(this._tempQ),e.velocity.addScaledVector(this._temp,t)}toJSON(){return{type:this.type,x:this.x.toJSON(),y:this.y.toJSON(),z:this.z.toJSON()}}static fromJSON(t){return new e(q(t.x),q(t.y),q(t.z))}frameUpdate(e){if(this.ps&&!this.ps.worldSpace){let e=this._temp,t=this._tempQ,n=this._tempScale;this.ps.emitter.matrixWorld.decompose(e,t,n),t.invert(),n.set(1/n.x,1/n.y,1/n.z)}}clone(){return new e(this.x.clone(),this.y.clone(),this.z.clone())}reset(){}},ct=class e{initialize(e){this.size.startGen(e.memory)}constructor(e){this.size=e,this.type=`SizeOverLife`}update(e){this.size instanceof Ve?this.size.genValue(e.memory,e.size,e.age/e.life).multiply(e.startSize):e.size.copy(e.startSize).multiplyScalar(this.size.genValue(e.memory,e.age/e.life))}toJSON(){return{type:this.type,size:this.size.toJSON()}}static fromJSON(t){return new e(Ue(t.size))}frameUpdate(e){}clone(){return new e(this.size.clone())}reset(){}},lt=class e{initialize(e){this.speed.startGen(e.memory)}constructor(e){this.speed=e,this.type=`SpeedOverLife`}update(e){e.speedModifier=this.speed.genValue(e.memory,e.age/e.life)}toJSON(){return{type:this.type,speed:this.speed.toJSON()}}static fromJSON(t){return new e(q(t.speed))}frameUpdate(e){}clone(){return new e(this.speed.clone())}reset(){}},ut=class e{constructor(e){this.frame=e,this.type=`FrameOverLife`}initialize(e){this.frame.startGen(e.memory)}update(e,t){this.frame instanceof Ie&&(e.uvTile=this.frame.genValue(e.memory,e.age/e.life))}frameUpdate(e){}toJSON(){return{type:this.type,frame:this.frame.toJSON()}}static fromJSON(t){return new e(q(t.frame))}clone(){return new e(this.frame.clone())}reset(){}},dt=class e{constructor(e,t=new L(0,1,0)){this.orbitSpeed=e,this.axis=t,this.type=`OrbitOverLife`,this.temp=new L,this.rotation=new I}initialize(e){this.orbitSpeed.startGen(e.memory)}update(e,t){this.temp.copy(e.position).projectOnVector(this.axis),this.rotation.setFromAxisAngle(this.axis,this.orbitSpeed.genValue(e.memory,e.age/e.life)*t),e.position.sub(this.temp),e.position.applyQuaternion(this.rotation),e.position.add(this.temp)}frameUpdate(e){}toJSON(){return{type:this.type,orbitSpeed:this.orbitSpeed.toJSON(),axis:[this.axis.x,this.axis.y,this.axis.z]}}static fromJSON(t){return new e(q(t.orbitSpeed),t.axis?new L(t.axis[0],t.axis[1],t.axis[2]):void 0)}clone(){return new e(this.orbitSpeed.clone())}reset(){}},ft=class{constructor(e){this.data=e,this.next=null,this.prev=null}hasPrev(){return this.prev!==null}hasNext(){return this.next!==null}},pt=class{constructor(){this.length=0,this.head=this.tail=null}isEmpty(){return this.head===null}clear(){this.length=0,this.head=this.tail=null}front(){return this.head===null?null:this.head.data}back(){return this.tail===null?null:this.tail.data}dequeue(){if(this.head){let e=this.head.data;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,e}}pop(){if(this.tail){let e=this.tail.data;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,e}}queue(e){let t=new ft(e);this.tail||=t,this.head&&(this.head.prev=t,t.next=this.head),this.head=t,this.length++}push(e){let t=new ft(e);this.head||=t,this.tail&&(this.tail.next=t,t.prev=this.tail),this.tail=t,this.length++}insertBefore(e,t){let n=new ft(t);n.next=e,n.prev=e.prev,n.prev!==null&&(n.prev.next=n),n.next.prev=n,e==this.head&&(this.head=n),this.length++}remove(e){if(this.head===null||this.tail===null)return;let t=this.head;for(e===this.head.data&&(this.head=this.head.next),e===this.tail.data&&(this.tail=this.tail.prev);t.next!==null&&t.data!==e;)t=t.next;t.data===e&&(t.prev!==null&&(t.prev.next=t.next),t.next!==null&&(t.next.prev=t.prev),this.length--)}*values(){let e=this.head;for(;e!==null;)yield e.data,e=e.next}},mt=class{constructor(){this.startSpeed=0,this.startColor=new U,this.startSize=new L(1,1,1),this.position=new L,this.velocity=new L,this.age=0,this.life=1,this.size=new L(1,1,1),this.speedModifier=1,this.rotation=0,this.color=new U,this.uvTile=0,this.memory=[]}get died(){return this.age>=this.life}reset(){this.memory.length=0}},ht=class{constructor(e,t,n){this.position=e,this.size=t,this.color=n}},gt=class{constructor(){this.startSpeed=0,this.startColor=new U,this.startSize=new L(1,1,1),this.position=new L,this.velocity=new L,this.age=0,this.life=1,this.size=new L(1,1,1),this.length=100,this.speedModifier=1,this.color=new U,this.previous=new pt,this.uvTile=0,this.memory=[]}update(){for(this.age<=this.life?this.previous.push(new ht(this.position.clone(),this.size.x,this.color.clone())):this.previous.length>0&&this.previous.dequeue();this.previous.length>this.length;)this.previous.dequeue()}get died(){return this.age>=this.life}reset(){this.memory.length=0,this.previous.clear()}},_t=class e{initialize(e){this.width.startGen(e.memory)}constructor(e){this.width=e,this.type=`WidthOverLength`}update(e){if(e instanceof gt){let t=e.previous.values();for(let n=0;n=e.life)&&this.emit(e,t)}emit(e,t){if(!this.subParticleSystem||Math.random()>this.emitProbability)return;let n=new R;this.setMatrixFromParticle(n,e),this.subEmissions.push({burstParticleCount:0,burstParticleIndex:0,isBursting:!1,burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0,matrix:n,travelDistance:0,particle:e})}frameUpdate(e){if(this.subParticleSystem)for(let t=0;t=this.subParticleSystem.system.duration)this.subEmissions[t]=this.subEmissions[this.subEmissions.length-1],this.subEmissions.length=this.subEmissions.length-1,t--;else{let n=this.subEmissions[t];n.particle&&n.particle.agem?(h=1,g=0):(h=0,g=1);let _=p-h+wt,v=m-g+wt,y=p-1+2*wt,b=m-1+2*wt,x=c&255,S=l&255,C=.5-p*p-m*m;if(C>=0){let e=n[x+r[S]]*3;C*=C,i=C*C*(X[e]*p+X[e+1]*m)}let w=.5-_*_-v*v;if(w>=0){let e=n[x+h+r[S+g]]*3;w*=w,a=w*w*(X[e]*_+X[e+1]*v)}let T=.5-y*y-b*b;if(T>=0){let e=n[x+1+r[S+1]]*3;T*=T,o=T*T*(X[e]*y+X[e+1]*b)}return 70*(i+a+o)}noise3D(e,t,n){let r=this.permMod12,i=this.perm,a,o,s,c,l=(e+t+n)*Tt,u=Math.floor(e+l),d=Math.floor(t+l),f=Math.floor(n+l),p=(u+d+f)*J,m=u-p,h=d-p,g=f-p,_=e-m,v=t-h,y=n-g,b,x,S,C,w,T;_>=v?v>=y?(b=1,x=0,S=0,C=1,w=1,T=0):_>=y?(b=1,x=0,S=0,C=1,w=0,T=1):(b=0,x=0,S=1,C=1,w=0,T=1):vx?w++:T++,b>S?w++:E++,b>C?w++:D++,x>S?T++:E++,x>C?T++:D++,S>C?E++:D++;let O=+(w>=3),ee=+(T>=3),k=+(E>=3),A=+(D>=3),j=+(w>=2),M=+(T>=2),N=+(E>=2),P=+(D>=2),F=+(w>=1),te=+(T>=1),ne=+(E>=1),re=+(D>=1),ie=b-O+Y,ae=x-ee+Y,oe=S-k+Y,se=C-A+Y,I=b-j+2*Y,L=x-M+2*Y,ce=S-N+2*Y,le=C-P+2*Y,ue=b-F+3*Y,R=x-te+3*Y,de=S-ne+3*Y,z=C-re+3*Y,fe=b-1+4*Y,pe=x-1+4*Y,B=S-1+4*Y,me=C-1+4*Y,V=d&255,he=f&255,ge=p&255,_e=m&255,H=.6-b*b-x*x-S*S-C*C;if(H<0)a=0;else{let e=i[V+i[he+i[ge+i[_e]]]]%32*4;H*=H,a=H*H*(Z[e]*b+Z[e+1]*x+Z[e+2]*S+Z[e+3]*C)}let U=.6-ie*ie-ae*ae-oe*oe-se*se;if(U<0)o=0;else{let e=i[V+O+i[he+ee+i[ge+k+i[_e+A]]]]%32*4;U*=U,o=U*U*(Z[e]*ie+Z[e+1]*ae+Z[e+2]*oe+Z[e+3]*se)}let W=.6-I*I-L*L-ce*ce-le*le;if(W<0)s=0;else{let e=i[V+j+i[he+M+i[ge+N+i[_e+P]]]]%32*4;W*=W,s=W*W*(Z[e]*I+Z[e+1]*L+Z[e+2]*ce+Z[e+3]*le)}let ve=.6-ue*ue-R*R-de*de-z*z;if(ve<0)c=0;else{let e=i[V+F+i[he+te+i[ge+ne+i[_e+re]]]]%32*4;ve*=ve,c=ve*ve*(Z[e]*ue+Z[e+1]*R+Z[e+2]*de+Z[e+3]*z)}let G=.6-fe*fe-pe*pe-B*B-me*me;if(G<0)l=0;else{let e=i[V+1+i[he+1+i[ge+1+i[_e+1]]]]%32*4;G*=G,l=G*G*(Z[e]*fe+Z[e+1]*pe+Z[e+2]*B+Z[e+3]*me)}return 27*(a+o+s+c+l)}};function Ot(e){let t=new Uint8Array(256);for(let e=0;e<256;e++)t[e]=e;for(let n=0;n<255;n++){let r=n+~~(e()*(256-n)),i=t[n];t[n]=t[r],t[r]=i}return t}function kt(e){let t=0,n=0,r=0,i=1,a=At();return t=a(` `),n=a(` `),r=a(` `),t-=a(e),t<0&&(t+=1),n-=a(e),n<0&&(n+=1),r-=a(e),r<0&&(r+=1),function(){let e=2091639*t+i*23283064365386963e-26;return t=n,n=r,r=e-(i=e|0)}}function At(){let e=4022871197;return function(t){t=t.toString();for(let n=0;n>>0,r-=e,r*=e,e=r>>>0,r-=e,e+=r*4294967296}return(e>>>0)*23283064365386963e-26}}var jt=class e{constructor(e,t,n,r){this.scale=e,this.octaves=t,this.velocityMultiplier=n,this.timeScale=r,this.type=`TurbulenceField`,this.generator=new Dt,this.timeOffset=new L,this.temp=new L,this.temp2=new L,this.timeOffset.x=Math.random()/this.scale.x*this.timeScale.x,this.timeOffset.y=Math.random()/this.scale.y*this.timeScale.y,this.timeOffset.z=Math.random()/this.scale.z*this.timeScale.z}initialize(e){}update(e,t){let n=e.position.x/this.scale.x,r=e.position.y/this.scale.y,i=e.position.z/this.scale.z;this.temp.set(0,0,0);let a=1;for(let e=0;e0&&e.lastPosNoise!==void 0&&(e.position.sub(e.lastPosNoise),Mt.set(Q[e.generatorIndex[0]].noise2D(0,e.age*n)*r*i,Q[e.generatorIndex[1]].noise2D(0,e.age*n)*r*i,Q[e.generatorIndex[2]].noise2D(0,e.age*n)*r*i),e.position.add(Mt),e.lastPosNoise.copy(Mt)),a>0&&e.lastRotNoise!==void 0&&(typeof e.rotation==`number`?(e.rotation-=e.lastRotNoise,e.rotation+=Q[e.generatorIndex[3]].noise2D(0,e.age*n)*Math.PI*r*a):(e.lastRotNoise.invert(),e.rotation.multiply(e.lastRotNoise),Nt.set(Q[e.generatorIndex[0]].noise2D(0,e.age*n)*r*a,Q[e.generatorIndex[1]].noise2D(0,e.age*n)*r*a,Q[e.generatorIndex[2]].noise2D(0,e.age*n)*r*a,Q[e.generatorIndex[3]].noise2D(0,e.age*n)*r*a).normalize(),e.rotation.multiply(Nt),e.lastRotNoise.copy(Nt)))}toJSON(){return{type:this.type,frequency:this.frequency.toJSON(),power:this.power.toJSON(),positionAmount:this.positionAmount.toJSON(),rotationAmount:this.rotationAmount.toJSON()}}frameUpdate(e){this.duration+=e}static fromJSON(t){return new e(q(t.frequency),q(t.power),q(t.positionAmount),q(t.rotationAmount))}clone(){return new e(this.frequency.clone(),this.power.clone(),this.positionAmount.clone(),this.rotationAmount.clone())}reset(){}},Ft=class e{constructor(e=0,t=0,n=new L){this.scaleX=e,this.scaleY=t,this.position=n,this.locations=[]}transform(e,t){e.x=this.locations[t%this.locations.length].x*this.scaleX+this.position.x,e.y=this.locations[t%this.locations.length].y*this.scaleY+this.position.y,e.z=this.position.z}static fromJSON(t){let n=new e(t.scaleX,t.scaleY,new L(t.position[0],t.position[1],t.position[2]));return n.locations=t.locations.map(e=>new H(e.x,e.y)),n}clone(){let t=new e(this.scaleX,this.scaleY,this.position.clone());return t.locations=this.locations.map(e=>e.clone()),t}toJSON(){return{scaleX:this.scaleX,scaleY:this.scaleY,position:this.position,locations:this.locations.map(e=>({x:e.x,y:e.y}))}}fromImage(e,t){let n=document.createElement(`canvas`);n.width=e.width,n.height=e.height;let r=n.getContext(`2d`);if(!r)return;r.drawImage(e,0,0);let i=r.getImageData(0,0,n.width,n.height,{colorSpace:`srgb`});n.remove(),this.locations.length=0;for(let e=0;et&&this.locations.push(new H(n,i.height-e))}};function It(e){switch(e.type){case`TextureSequencer`:return Ft.fromJSON(e);default:return new Ft}}var Lt=class e{constructor(e){this.type=`ApplySequences`,this.sequencers=[],this.time=0,this.index=0,this.pCount=0,this.tempV=new L,this.delay=e}initialize(e){e.id=this.pCount,e.dst=new L,e.begin=new L,e.inMotion=!1,this.pCount++}reset(){this.time=0,this.index=0,this.pCount=0}update(t,n){let r=this.sequencers[this.index],i=t.id*this.delay;this.time>=r[0].a+i&&this.time<=r[0].b+i?(t.inMotion||(t.inMotion=!0,t.begin.copy(t.position),r[1].transform(t.dst,t.id)),t.position.lerpVectors(t.begin,t.dst,e.BEZIER.genValue((this.time-r[0].a-i)/(r[0].b-r[0].a)))):this.time>r[0].b+i&&(t.inMotion=!1)}frameUpdate(e){for(;this.index+1=this.sequencers[this.index+1][0].a;)this.index++;this.time+=e}appendSequencer(e,t){this.sequencers.push([e,t])}toJSON(){return{type:this.type,delay:this.delay,sequencers:this.sequencers.map(([e,t])=>({range:e.toJSON(),sequencer:t.toJSON()}))}}static fromJSON(t){let n=new e(t.delay);return t.sequencers.forEach(e=>{n.sequencers.push([q(e.range),It(e.sequencer)])}),n}clone(){let t=new e(this.delay);return t.sequencers=this.sequencers.map(e=>[e[0].clone(),e[1].clone()]),t}};Lt.BEZIER=new be(0,0,1,1);var Rt=class e{constructor(e,t){this.color=e,this.speedRange=t,this.type=`ColorBySpeed`}initialize(e){this.color.startGen(e.memory)}update(e,t){let n=(e.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);this.color.genColor(e.memory,e.color,n),e.color.x*=e.startColor.x,e.color.y*=e.startColor.y,e.color.z*=e.startColor.z,e.color.w*=e.startColor.w}frameUpdate(e){}toJSON(){return{type:this.type,color:this.color.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(t){return new e(Ne(t.color),Pe.fromJSON(t.speedRange))}clone(){return new e(this.color.clone(),this.speedRange.clone())}reset(){}},zt=class e{initialize(e){this.size.startGen(e.memory)}constructor(e,t){this.size=e,this.speedRange=t,this.type=`SizeBySpeed`}update(e){let t=(e.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);this.size instanceof Ve?this.size.genValue(e.memory,e.size,t).multiply(e.startSize):e.size.copy(e.startSize).multiplyScalar(this.size.genValue(e.memory,t))}toJSON(){return{type:this.type,size:this.size.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(t){return new e(Ue(t.size),Pe.fromJSON(t.speedRange))}frameUpdate(e){}clone(){return new e(this.size.clone(),this.speedRange.clone())}reset(){}},Bt=class e{constructor(e,t){this.angularVelocity=e,this.speedRange=t,this.type=`RotationBySpeed`,this.tempQuat=new I}initialize(e){typeof e.rotation==`number`&&this.angularVelocity.startGen(e.memory)}update(e,t){if(typeof e.rotation==`number`){let n=(e.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);e.rotation+=t*this.angularVelocity.genValue(e.memory,n)}}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(t){return new e(q(t.angularVelocity),Pe.fromJSON(t.speedRange))}frameUpdate(e){}clone(){return new e(this.angularVelocity.clone(),this.speedRange.clone())}reset(){}},Vt=class e{initialize(e){this.speed.startGen(e.memory)}constructor(e,t){this.speed=e,this.dampen=t,this.type=`LimitSpeedOverLife`}update(e,t){let n=e.velocity.length(),r=this.speed.genValue(e.memory,e.age/e.life);if(n>r){let i=(n-r)/n;e.velocity.multiplyScalar(1-i*this.dampen*t*20)}}toJSON(){return{type:this.type,speed:this.speed.toJSON(),dampen:this.dampen}}static fromJSON(t){return new e(q(t.speed),t.dampen)}frameUpdate(e){}clone(){return new e(this.speed.clone(),this.dampen)}reset(){}},Ht={ApplyForce:{type:`ApplyForce`,constructor:vt,params:[[`direction`,[`vec3`]],[`magnitude`,[`value`]]],loadJSON:vt.fromJSON},Noise:{type:`Noise`,constructor:Pt,params:[[`frequency`,[`value`]],[`power`,[`value`]],[`positionAmount`,[`value`]],[`rotationAmount`,[`value`]]],loadJSON:Pt.fromJSON},TurbulenceField:{type:`TurbulenceField`,constructor:jt,params:[[`scale`,[`vec3`]],[`octaves`,[`number`]],[`velocityMultiplier`,[`vec3`]],[`timeScale`,[`vec3`]]],loadJSON:jt.fromJSON},GravityForce:{type:`GravityForce`,constructor:yt,params:[[`center`,[`vec3`]],[`magnitude`,[`number`]]],loadJSON:yt.fromJSON},ColorOverLife:{type:`ColorOverLife`,constructor:it,params:[[`color`,[`colorFunc`]]],loadJSON:it.fromJSON},RotationOverLife:{type:`RotationOverLife`,constructor:at,params:[[`angularVelocity`,[`value`,`valueFunc`]]],loadJSON:at.fromJSON},Rotation3DOverLife:{type:`Rotation3DOverLife`,constructor:ot,params:[[`angularVelocity`,[`rotationFunc`]]],loadJSON:ot.fromJSON},SizeOverLife:{type:`SizeOverLife`,constructor:ct,params:[[`size`,[`value`,`valueFunc`,`vec3Func`]]],loadJSON:ct.fromJSON},ColorBySpeed:{type:`ColorBySpeed`,constructor:Rt,params:[[`color`,[`colorFunc`]],[`speedRange`,[`range`]]],loadJSON:Rt.fromJSON},RotationBySpeed:{type:`RotationBySpeed`,constructor:Bt,params:[[`angularVelocity`,[`value`,`valueFunc`]],[`speedRange`,[`range`]]],loadJSON:Bt.fromJSON},SizeBySpeed:{type:`SizeBySpeed`,constructor:zt,params:[[`size`,[`value`,`valueFunc`,`vec3Func`]],[`speedRange`,[`range`]]],loadJSON:zt.fromJSON},SpeedOverLife:{type:`SpeedOverLife`,constructor:lt,params:[[`speed`,[`value`,`valueFunc`]]],loadJSON:lt.fromJSON},FrameOverLife:{type:`FrameOverLife`,constructor:ut,params:[[`frame`,[`value`,`valueFunc`]]],loadJSON:ut.fromJSON},ForceOverLife:{type:`ForceOverLife`,constructor:st,params:[[`x`,[`value`,`valueFunc`]],[`y`,[`value`,`valueFunc`]],[`z`,[`value`,`valueFunc`]]],loadJSON:st.fromJSON},OrbitOverLife:{type:`OrbitOverLife`,constructor:dt,params:[[`orbitSpeed`,[`value`,`valueFunc`]],[`axis`,[`vec3`]]],loadJSON:dt.fromJSON},WidthOverLength:{type:`WidthOverLength`,constructor:_t,params:[[`width`,[`value`,`valueFunc`]]],loadJSON:_t.fromJSON},ChangeEmitDirection:{type:`ChangeEmitDirection`,constructor:bt,params:[[`angle`,[`value`]]],loadJSON:bt.fromJSON},EmitSubParticleSystem:{type:`EmitSubParticleSystem`,constructor:St,params:[[`particleSystem`,[`self`]],[`useVelocityAsBasis`,[`boolean`]],[`subParticleSystem`,[`particleSystem`]],[`mode`,[`number`]],[`emitProbability`,[`number`]]],loadJSON:St.fromJSON},LimitSpeedOverLife:{type:`LimitSpeedOverLife`,constructor:Vt,params:[[`speed`,[`value`,`valueFunc`]],[`dampen`,[`number`]]],loadJSON:Vt.fromJSON}};function Ut(e,t){return Ht[e.type]?Ht[e.type].loadJSON(e,t):null}var Wt=[];function Gt(e){if(!Wt.find(t=>t.id===e.id)){e.initialize();for(let t of e.emitterShapes)nt[t.type]||(nt[t.type]=t);for(let t of e.behaviors)Ht[t.type]||(Ht[t.type]=t)}}var Kt=` -#ifdef SOFT_PARTICLES - - /* #ifdef LOGDEPTH - float distSample = linearize_depth_log(sampleDepth, near, far); - #else - float distSample = ortho ? linearize_depth_ortho(sampleDepth, near, far) : linearize_depth(sampleDepth, near, far); - #endif */ - - vec2 p2 = projPosition.xy / projPosition.w; - - p2 = 0.5 * p2 + 0.5; - - float readDepth = texture2D(depthTexture, p2.xy).r; - float viewDepth = linearize_depth(readDepth); - - float softParticlesFade = saturate(SOFT_INV_FADE_DISTANCE * ((viewDepth - SOFT_NEAR_FADE) - linearDepth)); - - gl_FragColor *= softParticlesFade; - - //gl_FragColor = vec4(softParticlesFade , 0, 0, 1); -#endif -`,qt=` -#ifdef SOFT_PARTICLES - - uniform sampler2D depthTexture; - uniform vec4 projParams; - uniform vec2 softParams; - - varying vec4 projPosition; - varying float linearDepth; - - #define SOFT_NEAR_FADE softParams.x - #define SOFT_INV_FADE_DISTANCE softParams.y - - #define zNear projParams.x - #define zFar projParams.y - - float linearize_depth(float d) - { - return (zFar * zNear) / (zFar - d * (zFar - zNear)); - } - -#endif -`,Jt=` -#ifdef SOFT_PARTICLES - varying vec4 projPosition; - varying float linearDepth; -#endif -`,Yt=` -#ifdef SOFT_PARTICLES - projPosition = gl_Position; - linearDepth = -mvPosition.z; -#endif -`,Xt=` -#ifdef USE_MAP - vec4 texelColor = texture2D( map, vUv); - #ifdef TILE_BLEND - texelColor = mix( texelColor, texture2D( map, vUvNext ), vUvBlend ); - #endif - diffuseColor *= texelColor; -#endif -`,Zt=` -#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - - varying vec2 vUv; -#ifdef TILE_BLEND - varying vec2 vUvNext; - varying float vUvBlend; -#endif - -#endif -#ifdef USE_MAP - - uniform mat3 mapTransform; - varying vec2 vMapUv; -#ifdef TILE_BLEND - varying vec2 vMapUvNext; -#endif - -#endif -#ifdef USE_ALPHAMAP - - uniform mat3 alphaMapTransform; - varying vec2 vAlphaMapUv; - -#endif -#ifdef USE_LIGHTMAP - - uniform mat3 lightMapTransform; - varying vec2 vLightMapUv; - -#endif -#ifdef USE_AOMAP - - uniform mat3 aoMapTransform; - varying vec2 vAoMapUv; - -#endif -#ifdef USE_BUMPMAP - - uniform mat3 bumpMapTransform; - varying vec2 vBumpMapUv; - -#endif -#ifdef USE_NORMALMAP - - uniform mat3 normalMapTransform; - varying vec2 vNormalMapUv; - -#endif -#ifdef USE_DISPLACEMENTMAP - - uniform mat3 displacementMapTransform; - varying vec2 vDisplacementMapUv; - -#endif -#ifdef USE_EMISSIVEMAP - - uniform mat3 emissiveMapTransform; - varying vec2 vEmissiveMapUv; - -#endif -#ifdef USE_METALNESSMAP - - uniform mat3 metalnessMapTransform; - varying vec2 vMetalnessMapUv; - -#endif -#ifdef USE_ROUGHNESSMAP - - uniform mat3 roughnessMapTransform; - varying vec2 vRoughnessMapUv; - -#endif -#ifdef USE_ANISOTROPYMAP - - uniform mat3 anisotropyMapTransform; - varying vec2 vAnisotropyMapUv; - -#endif -#ifdef USE_CLEARCOATMAP - - uniform mat3 clearcoatMapTransform; - varying vec2 vClearcoatMapUv; - -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - - uniform mat3 clearcoatNormalMapTransform; - varying vec2 vClearcoatNormalMapUv; - -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - - uniform mat3 clearcoatRoughnessMapTransform; - varying vec2 vClearcoatRoughnessMapUv; - -#endif -#ifdef USE_SHEEN_COLORMAP - - uniform mat3 sheenColorMapTransform; - varying vec2 vSheenColorMapUv; - -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - - uniform mat3 sheenRoughnessMapTransform; - varying vec2 vSheenRoughnessMapUv; - -#endif -#ifdef USE_IRIDESCENCEMAP - - uniform mat3 iridescenceMapTransform; - varying vec2 vIridescenceMapUv; - -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - - uniform mat3 iridescenceThicknessMapTransform; - varying vec2 vIridescenceThicknessMapUv; - -#endif -#ifdef USE_SPECULARMAP - - uniform mat3 specularMapTransform; - varying vec2 vSpecularMapUv; - -#endif -#ifdef USE_SPECULAR_COLORMAP - - uniform mat3 specularColorMapTransform; - varying vec2 vSpecularColorMapUv; - -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - - uniform mat3 specularIntensityMapTransform; - varying vec2 vSpecularIntensityMapUv; - -#endif -#ifdef USE_TRANSMISSIONMAP - - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; - -#endif -#ifdef USE_THICKNESSMAP - - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; - -#endif -`,Qt=` -#ifdef UV_TILE - attribute float uvTile; - uniform vec2 tileCount; - - mat3 makeTileTransform(float uvTile) { - float col = mod(uvTile, tileCount.x); - float row = (tileCount.y - floor(uvTile / tileCount.x) - 1.0); - - return mat3( - 1.0 / tileCount.x, 0.0, 0.0, - 0.0, 1.0 / tileCount.y, 0.0, - col / tileCount.x, row / tileCount.y, 1.0); - } -#else - mat3 makeTileTransform(float uvTile) { - return mat3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0); - } -#endif - -#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - - varying vec2 vUv; -#ifdef TILE_BLEND - varying vec2 vUvNext; - varying float vUvBlend; -#endif - -#endif -#ifdef USE_MAP - - uniform mat3 mapTransform; - varying vec2 vMapUv; -#ifdef TILE_BLEND - varying vec2 vMapUvNext; -#endif - -#endif -#ifdef USE_ALPHAMAP - - uniform mat3 alphaMapTransform; - varying vec2 vAlphaMapUv; - -#endif -#ifdef USE_LIGHTMAP - - uniform mat3 lightMapTransform; - varying vec2 vLightMapUv; - -#endif -#ifdef USE_AOMAP - - uniform mat3 aoMapTransform; - varying vec2 vAoMapUv; - -#endif -#ifdef USE_BUMPMAP - - uniform mat3 bumpMapTransform; - varying vec2 vBumpMapUv; - -#endif -#ifdef USE_NORMALMAP - - uniform mat3 normalMapTransform; - varying vec2 vNormalMapUv; - -#endif -#ifdef USE_DISPLACEMENTMAP - - uniform mat3 displacementMapTransform; - varying vec2 vDisplacementMapUv; - -#endif -#ifdef USE_EMISSIVEMAP - - uniform mat3 emissiveMapTransform; - varying vec2 vEmissiveMapUv; - -#endif -#ifdef USE_METALNESSMAP - - uniform mat3 metalnessMapTransform; - varying vec2 vMetalnessMapUv; - -#endif -#ifdef USE_ROUGHNESSMAP - - uniform mat3 roughnessMapTransform; - varying vec2 vRoughnessMapUv; - -#endif -#ifdef USE_ANISOTROPYMAP - - uniform mat3 anisotropyMapTransform; - varying vec2 vAnisotropyMapUv; - -#endif -#ifdef USE_CLEARCOATMAP - - uniform mat3 clearcoatMapTransform; - varying vec2 vClearcoatMapUv; - -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - - uniform mat3 clearcoatNormalMapTransform; - varying vec2 vClearcoatNormalMapUv; - -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - - uniform mat3 clearcoatRoughnessMapTransform; - varying vec2 vClearcoatRoughnessMapUv; - -#endif -#ifdef USE_SHEEN_COLORMAP - - uniform mat3 sheenColorMapTransform; - varying vec2 vSheenColorMapUv; - -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - - uniform mat3 sheenRoughnessMapTransform; - varying vec2 vSheenRoughnessMapUv; - -#endif -#ifdef USE_IRIDESCENCEMAP - - uniform mat3 iridescenceMapTransform; - varying vec2 vIridescenceMapUv; - -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - - uniform mat3 iridescenceThicknessMapTransform; - varying vec2 vIridescenceThicknessMapUv; - -#endif -#ifdef USE_SPECULARMAP - - uniform mat3 specularMapTransform; - varying vec2 vSpecularMapUv; - -#endif -#ifdef USE_SPECULAR_COLORMAP - - uniform mat3 specularColorMapTransform; - varying vec2 vSpecularColorMapUv; - -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - - uniform mat3 specularIntensityMapTransform; - varying vec2 vSpecularIntensityMapUv; - -#endif -#ifdef USE_TRANSMISSIONMAP - - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; - -#endif -#ifdef USE_THICKNESSMAP - - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; - -#endif -`,$t=` -#ifdef UV_TILE - mat3 tileTransform = makeTileTransform(floor(uvTile)); - #ifdef TILE_BLEND - mat3 nextTileTransform = makeTileTransform(ceil(uvTile)); - vUvBlend = fract(uvTile); - #endif -#else - mat3 tileTransform = makeTileTransform(0.0); -#endif - -#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - -vUv = (tileTransform *vec3( uv, 1 )).xy; -#if defined( TILE_BLEND ) && defined( UV_TILE ) - vUvNext = (nextTileTransform *vec3( uv, 1 )).xy; -#endif - -#endif -#ifdef USE_MAP - -vMapUv = ( tileTransform * (mapTransform * vec3( MAP_UV, 1 ) )).xy; -#if defined( TILE_BLEND ) && defined( UV_TILE ) - vMapUvNext = (nextTileTransform * (mapTransform * vec3( MAP_UV, 1 ))).xy; -#endif - -#endif -#ifdef USE_ALPHAMAP - -vAlphaMapUv = ( tileTransform * (alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_LIGHTMAP - -vLightMapUv = ( tileTransform * (lightMapTransform * vec3( LIGHTMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_AOMAP - -vAoMapUv = ( tileTransform * (aoMapTransform * vec3( AOMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_BUMPMAP - -vBumpMapUv = ( tileTransform * (bumpMapTransform * vec3( BUMPMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_NORMALMAP - -vNormalMapUv = ( tileTransform * (normalMapTransform * vec3( NORMALMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_DISPLACEMENTMAP - -vDisplacementMapUv = ( tileTransform * (displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_EMISSIVEMAP - -vEmissiveMapUv = ( tileTransform * (emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_METALNESSMAP - -vMetalnessMapUv = ( tileTransform * (metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_ROUGHNESSMAP - -vRoughnessMapUv = ( tileTransform * (roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_ANISOTROPYMAP - -vAnisotropyMapUv = ( tileTransform * (anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_CLEARCOATMAP - -vClearcoatMapUv = ( tileTransform * (clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - -vClearcoatNormalMapUv = ( tileTransform * (clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - -vClearcoatRoughnessMapUv = ( tileTransform * (clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_IRIDESCENCEMAP - -vIridescenceMapUv = ( tileTransform * (iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - -vIridescenceThicknessMapUv = ( tileTransform * (iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_SHEEN_COLORMAP - -vSheenColorMapUv = ( tileTransform * (sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - -vSheenRoughnessMapUv = ( tileTransform * (sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_SPECULARMAP - -vSpecularMapUv = ( tileTransform * (specularMapTransform * vec3( SPECULARMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_SPECULAR_COLORMAP - -vSpecularColorMapUv = ( tileTransform * (specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - -vSpecularIntensityMapUv = ( tileTransform * (specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_TRANSMISSIONMAP - -vTransmissionMapUv = ( tileTransform * transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) )).xy; - -#endif -#ifdef USE_THICKNESSMAP - -vThicknessMapUv = ( tileTransform * thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) )).xy; - -#endif - -`,en=t;function tn(){en.tile_pars_vertex=Qt,en.tile_vertex=$t,en.tile_pars_fragment=Zt,en.tile_fragment=Xt,en.soft_pars_vertex=Jt,en.soft_vertex=Yt,en.soft_pars_fragment=qt,en.soft_fragment=Kt}var nn=class extends c{constructor(e){super(),this.type=`ParticleEmitter`,this.system=e}clone(){let e=this.system.clone();return e.emitter.copy(this,!0),e.emitter}dispose(){}extractFromCache(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}toJSON(e,t={}){let n=this.children;this.children=this.children.filter(e=>e.type!==`ParticleSystemPreview`);let r=super.toJSON(e);return this.children=n,this.system!==null&&(r.object.ps=this.system.toJSON(e,t)),r}},$;(function(e){e[e.BillBoard=0]=`BillBoard`,e[e.StretchedBillBoard=1]=`StretchedBillBoard`,e[e.Mesh=2]=`Mesh`,e[e.Trail=3]=`Trail`,e[e.HorizontalBillBoard=4]=`HorizontalBillBoard`,e[e.VerticalBillBoard=5]=`VerticalBillBoard`})($||={});var rn=class extends o{constructor(e){super(),this.type=`VFXBatch`,this.maxParticles=1e3,this.systems=new Set;let t=new r;t.mask=e.layers.mask;let n=e.material.clone();n.defines={},Object.assign(n.defines,e.material.defines),this.settings={instancingGeometry:e.instancingGeometry,renderMode:e.renderMode,renderOrder:e.renderOrder,material:n,uTileCount:e.uTileCount,vTileCount:e.vTileCount,blendTiles:e.blendTiles,softParticles:e.softParticles,softNearFade:e.softNearFade,softFarFade:e.softFarFade,layers:t},this.frustumCulled=!1,this.renderOrder=this.settings.renderOrder}addSystem(e){this.systems.add(e)}removeSystem(e){this.systems.delete(e)}applyDepthTexture(e){let t=this.material.uniforms.depthTexture;t&&t.value!==e&&(t.value=e,this.material.needsUpdate=!0)}},an=new L(0,0,1),on=new I,sn=new L,cn=new L;new L;var ln=60,un=new f(1,1,1,1),dn=class e{set time(e){this.emissionState.time=e}get time(){return this.emissionState.time}get layers(){return this.rendererSettings.layers}get texture(){return this.rendererSettings.material.map}set texture(e){this.rendererSettings.material.map=e,this.neededToUpdateRender=!0}get material(){return this.rendererSettings.material}set material(e){this.rendererSettings.material=e,this.neededToUpdateRender=!0}get uTileCount(){return this.rendererSettings.uTileCount}set uTileCount(e){this.rendererSettings.uTileCount=e,this.neededToUpdateRender=!0}get vTileCount(){return this.rendererSettings.vTileCount}set vTileCount(e){this.rendererSettings.vTileCount=e,this.neededToUpdateRender=!0}get blendTiles(){return this.rendererSettings.blendTiles}set blendTiles(e){this.rendererSettings.blendTiles=e,this.neededToUpdateRender=!0}get softParticles(){return this.rendererSettings.softParticles}set softParticles(e){this.rendererSettings.softParticles=e,this.neededToUpdateRender=!0}get softNearFade(){return this.rendererSettings.softNearFade}set softNearFade(e){this.rendererSettings.softNearFade=e,this.neededToUpdateRender=!0}get softFarFade(){return this.rendererSettings.softFarFade}set softFarFade(e){this.rendererSettings.softFarFade=e,this.neededToUpdateRender=!0}get instancingGeometry(){return this.rendererSettings.instancingGeometry}set instancingGeometry(e){this.restart(),this.particles.length=0,this.rendererSettings.instancingGeometry=e,this.neededToUpdateRender=!0}get renderMode(){return this.rendererSettings.renderMode}set renderMode(e){if((this.rendererSettings.renderMode!=$.Trail&&e===$.Trail||this.rendererSettings.renderMode==$.Trail&&e!==$.Trail)&&(this.restart(),this.particles.length=0),this.rendererSettings.renderMode!==e)switch(e){case $.Trail:this.rendererEmitterSettings={startLength:new K(30),followLocalOrigin:!1};break;case $.Mesh:this.rendererEmitterSettings={geometry:new f(1,1)},this.startRotation=new Re(new L(0,1,0),new K(0));break;case $.StretchedBillBoard:this.rendererEmitterSettings={speedFactor:0,lengthFactor:2},this.rendererSettings.renderMode===$.Mesh&&(this.startRotation=new K(0));break;case $.BillBoard:case $.VerticalBillBoard:case $.HorizontalBillBoard:this.rendererEmitterSettings={},this.rendererSettings.renderMode===$.Mesh&&(this.startRotation=new K(0));break}this.rendererSettings.renderMode=e,this.neededToUpdateRender=!0}get renderOrder(){return this.rendererSettings.renderOrder}set renderOrder(e){this.rendererSettings.renderOrder=e,this.neededToUpdateRender=!0}get blending(){return this.rendererSettings.material.blending}set blending(e){this.rendererSettings.material.blending=e,this.neededToUpdateRender=!0}constructor(e){if(this.temp=new L,this.travelDistance=0,this.normalMatrix=new W,this.memory=[],this.listeners={},this.firstTimeUpdate=!0,this.autoDestroy=e.autoDestroy===void 0?!1:e.autoDestroy,this.duration=e.duration??1,this.looping=e.looping===void 0?!0:e.looping,this.prewarm=e.prewarm===void 0?!1:e.prewarm,this.startLife=e.startLife??new K(5),this.startSpeed=e.startSpeed??new K(0),this.startRotation=e.startRotation??new K(0),this.startSize=e.startSize??new K(1),this.startColor=e.startColor??new Me(new U(1,1,1,1)),this.emissionOverTime=e.emissionOverTime??new K(10),this.emissionOverDistance=e.emissionOverDistance??new K(0),this.emissionBursts=e.emissionBursts??[],this.onlyUsedByOther=e.onlyUsedByOther??!1,this.emitterShape=e.shape??new $e,this.behaviors=e.behaviors??[],this.worldSpace=e.worldSpace??!1,this.rendererEmitterSettings=e.rendererEmitterSettings??{},e.renderMode===$.StretchedBillBoard){let t=this.rendererEmitterSettings;e.speedFactor!==void 0&&(t.speedFactor=e.speedFactor),t.speedFactor=t.speedFactor??0,t.lengthFactor=t.lengthFactor??0}this.rendererSettings={instancingGeometry:e.instancingGeometry??un,renderMode:e.renderMode??$.BillBoard,renderOrder:e.renderOrder??0,material:e.material,uTileCount:e.uTileCount??1,vTileCount:e.vTileCount??1,blendTiles:e.blendTiles??!1,softParticles:e.softParticles??!1,softNearFade:e.softNearFade??0,softFarFade:e.softFarFade??0,layers:e.layers??new r},this.neededToUpdateRender=!0,this.particles=[],this.startTileIndex=e.startTileIndex||new K(0),this.emitter=new nn(this),this.paused=!1,this.particleNum=0,this.emissionState={isBursting:!1,burstParticleIndex:0,burstParticleCount:0,burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0,travelDistance:0},this.emissionBursts.forEach(e=>e.count.startGen(this.memory)),this.emissionOverDistance.startGen(this.memory),this.emitEnded=!1,this.markForDestroy=!1,this.prewarmed=!1}pause(){this.paused=!0}play(){this.paused=!1}stop(){this.restart(),this.pause()}spawn(e,t,n){on.setFromRotationMatrix(n);let r=sn,i=on,a=cn;n.decompose(r,i,a);for(let r=0;r{e.reset()}),this.emitEnded=!1,this.markForDestroy=!1,this.prewarmed=!1,this.emissionBursts.forEach(e=>e.count.startGen(this.memory)),this.emissionOverDistance.startGen(this.memory)}update(e){if(this.paused)return;let t=this.emitter;for(;t.parent;)t=t.parent;if(t.type!==`Scene`){this.dispose();return}if(this.firstTimeUpdate&&(this.firstTimeUpdate=!1,this.emitter.updateWorldMatrix(!0,!1)),this.emitEnded&&this.particleNum===0){this.markForDestroy&&this.emitter.parent&&this.dispose();return}if(this.looping&&this.prewarm&&!this.prewarmed){this.prewarmed=!0;for(let e=0;e.1&&(e=.1),this.neededToUpdateRender&&=(this._renderer&&this._renderer.updateSystem(this),!1),this.onlyUsedByOther||this.emit(e,this.emissionState,this.emitter.matrixWorld),this.emitterShape.update(this,e);for(let t=0;tthis.duration&&(this.looping?(t.time-=this.duration,t.burstIndex=0,this.behaviors.forEach(e=>{e.reset()})):!this.emitEnded&&!this.onlyUsedByOther&&this.endEmit()),this.normalMatrix.getNormalMatrix(n);let r=Math.ceil(t.waitEmiting);for(this.spawn(r,t,n),t.waitEmiting-=r;t.burstIndex0){let n=Math.floor(t.travelDistance*e);t.travelDistance-=n/e,t.waitEmiting+=n}}t.previousWorldPos===void 0&&(t.previousWorldPos=new L),t.previousWorldPos.set(n.elements[12],n.elements[13],n.elements[14]),t.time+=e}toJSON(e,t={}){if((e===void 0||typeof e==`string`)&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}}),e.materials[this.rendererSettings.material.uuid]=this.rendererSettings.material.toJSON(e),t.useUrlForImage&&this.texture?.source!==void 0){let t=this.texture.source;e.images[t.uuid]={uuid:t.uuid,url:this.texture.image.url}}let n;n=this.renderMode===$.Trail?{startLength:this.rendererEmitterSettings.startLength.toJSON(),followLocalOrigin:this.rendererEmitterSettings.followLocalOrigin}:this.renderMode===$.Mesh?{}:this.renderMode===$.StretchedBillBoard?{speedFactor:this.rendererEmitterSettings.speedFactor,lengthFactor:this.rendererEmitterSettings.lengthFactor}:{};let r=this.rendererSettings.instancingGeometry;return e.geometries&&!e.geometries[r.uuid]&&(e.geometries[r.uuid]=r.toJSON()),{version:`3.0`,autoDestroy:this.autoDestroy,looping:this.looping,prewarm:this.prewarm,duration:this.duration,shape:this.emitterShape.toJSON(),startLife:this.startLife.toJSON(),startSpeed:this.startSpeed.toJSON(),startRotation:this.startRotation.toJSON(),startSize:this.startSize.toJSON(),startColor:this.startColor.toJSON(),emissionOverTime:this.emissionOverTime.toJSON(),emissionOverDistance:this.emissionOverDistance.toJSON(),emissionBursts:this.emissionBursts.map(e=>({time:e.time,count:e.count.toJSON(),probability:e.probability,interval:e.interval,cycle:e.cycle})),onlyUsedByOther:this.onlyUsedByOther,instancingGeometry:this.rendererSettings.instancingGeometry.uuid,renderOrder:this.renderOrder,renderMode:this.renderMode,rendererEmitterSettings:n,material:this.rendererSettings.material.uuid,layers:this.layers.mask,startTileIndex:this.startTileIndex.toJSON(),uTileCount:this.uTileCount,vTileCount:this.vTileCount,blendTiles:this.blendTiles,softParticles:this.rendererSettings.softParticles,softFarFade:this.rendererSettings.softFarFade,softNearFade:this.rendererSettings.softNearFade,behaviors:this.behaviors.map(e=>e.toJSON()),worldSpace:this.worldSpace}}static fromJSON(t,n,a){let o=rt(t.shape,n),s;if(t.renderMode===$.Trail){let e=t.rendererEmitterSettings;s={startLength:e.startLength==null?new K(30):q(e.startLength),followLocalOrigin:e.followLocalOrigin}}else t.renderMode===$.Mesh?s={}:t.renderMode===$.StretchedBillBoard?(s=t.rendererEmitterSettings,t.speedFactor!=null&&(s.speedFactor=t.speedFactor)):s={};let c=new r;t.layers&&(c.mask=t.layers);let l=new e({autoDestroy:t.autoDestroy,looping:t.looping,prewarm:t.prewarm,duration:t.duration,shape:o,startLife:q(t.startLife),startSpeed:q(t.startSpeed),startRotation:Ue(t.startRotation),startSize:Ue(t.startSize),startColor:Ne(t.startColor),emissionOverTime:q(t.emissionOverTime),emissionOverDistance:q(t.emissionOverDistance),emissionBursts:t.emissionBursts?.map(e=>({time:e.time,count:typeof e.count==`number`?new K(e.count):q(e.count),probability:e.probability??1,interval:e.interval??.1,cycle:e.cycle??1})),onlyUsedByOther:t.onlyUsedByOther,instancingGeometry:n.geometries[t.instancingGeometry],renderMode:t.renderMode,rendererEmitterSettings:s,renderOrder:t.renderOrder,layers:c,material:t.material?n.materials[t.material]:t.texture?new i({map:n.textures[t.texture],transparent:t.transparent??!0,blending:t.blending,side:2}):new i({color:16777215,transparent:!0,blending:2,side:2}),startTileIndex:typeof t.startTileIndex==`number`?new K(t.startTileIndex):q(t.startTileIndex),uTileCount:t.uTileCount,vTileCount:t.vTileCount,blendTiles:t.blendTiles,softParticles:t.softParticles,softFarFade:t.softFarFade,softNearFade:t.softNearFade,behaviors:[],worldSpace:t.worldSpace});return l.behaviors=t.behaviors.map(e=>{let t=Ut(e,l);return t.type===`EmitSubParticleSystem`&&(a[e.subParticleSystem]=t),t}),l}addBehavior(e){this.behaviors.push(e)}getRendererSettings(){return this.rendererSettings}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeAllEventListeners(e){this.listeners[e]&&(this.listeners[e]=[])}removeEventListener(e,t){if(this.listeners[e]){let n=this.listeners[e].indexOf(t);n!==-1&&this.listeners[e].splice(n,1)}}fire(e){this.listeners[e.type]&&this.listeners[e.type].forEach(t=>t(e))}clone(){let t=[];for(let e of this.emissionBursts){let n={};Object.assign(n,e),t.push(n)}let n=[];for(let e of this.behaviors)n.push(e.clone());let i;i=this.renderMode===$.Trail?{startLength:this.rendererEmitterSettings.startLength.clone(),followLocalOrigin:this.rendererEmitterSettings.followLocalOrigin}:this.renderMode===$.StretchedBillBoard?{lengthFactor:this.rendererEmitterSettings.lengthFactor,speedFactor:this.rendererEmitterSettings.speedFactor}:{};let a=new r;return a.mask=this.layers.mask,new e({autoDestroy:this.autoDestroy,looping:this.looping,duration:this.duration,shape:this.emitterShape.clone(),startLife:this.startLife.clone(),startSpeed:this.startSpeed.clone(),startRotation:this.startRotation.clone(),startSize:this.startSize.clone(),startColor:this.startColor.clone(),emissionOverTime:this.emissionOverTime.clone(),emissionOverDistance:this.emissionOverDistance.clone(),emissionBursts:t,onlyUsedByOther:this.onlyUsedByOther,instancingGeometry:this.rendererSettings.instancingGeometry,renderMode:this.renderMode,renderOrder:this.renderOrder,rendererEmitterSettings:i,material:this.rendererSettings.material,startTileIndex:this.startTileIndex,uTileCount:this.uTileCount,vTileCount:this.vTileCount,blendTiles:this.blendTiles,softParticles:this.softParticles,softFarFade:this.softFarFade,softNearFade:this.softNearFade,behaviors:n,worldSpace:this.worldSpace,layers:a})}},fn=` - -#include -#include -#include -#include -#include -#include - -#include -#include - -void main() { - - #include - - vec3 outgoingLight = vec3( 0.0 ); - vec4 diffuseColor = vColor; - - #include - - #include - #include - - outgoingLight = diffuseColor.rgb; - - #ifdef USE_COLOR_AS_ALPHA - gl_FragColor = vec4( outgoingLight, diffuseColor.r ); - #else - gl_FragColor = vec4( outgoingLight, diffuseColor.a ); - #endif - - #include - #include -} -`,pn=` -#define STANDARD - -#ifdef PHYSICAL -#define IOR -#define USE_SPECULAR -#endif - -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float roughness; -uniform float metalness; -uniform float opacity; - -#ifdef IOR -uniform float ior; -#endif - -#ifdef USE_SPECULAR -uniform float specularIntensity; -uniform vec3 specularColor; - -#ifdef USE_SPECULAR_COLORMAP -uniform sampler2D specularColorMap; -#endif - -#ifdef USE_SPECULAR_INTENSITYMAP -uniform sampler2D specularIntensityMap; -#endif -#endif - -#ifdef USE_CLEARCOAT -uniform float clearcoat; -uniform float clearcoatRoughness; -#endif - -#ifdef USE_DISPERSION -uniform float dispersion; -#endif - -#ifdef USE_IRIDESCENCE -uniform float iridescence; -uniform float iridescenceIOR; -uniform float iridescenceThicknessMinimum; -uniform float iridescenceThicknessMaximum; -#endif - -#ifdef USE_SHEEN -uniform vec3 sheenColor; -uniform float sheenRoughness; - -#ifdef USE_SHEEN_COLORMAP -uniform sampler2D sheenColorMap; -#endif - -#ifdef USE_SHEEN_ROUGHNESSMAP -uniform sampler2D sheenRoughnessMap; -#endif -#endif - -#ifdef USE_ANISOTROPY -uniform vec2 anisotropyVector; - -#ifdef USE_ANISOTROPYMAP -uniform sampler2D anisotropyMap; -#endif -#endif - -varying vec3 vViewPosition; - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -void main() { - -vec4 diffuseColor = vec4( diffuse, opacity ); -#include - -ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); -vec3 totalEmissiveRadiance = emissive; - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// accumulation -#include -#include -#include -#include - -// modulation -#include - -vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; -vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; - -#include - -vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; - -#ifdef USE_SHEEN - -// Sheen energy compensation approximation calculation can be found at the end of -// https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing -float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); - -outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect; - -#endif - -#ifdef USE_CLEARCOAT - -float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) ); - -vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); - -outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat; - -#endif - -#include -#include -#include -#include -#include -#include -}`,mn=` -#include -#include -#include -#include - -#include -#include - -attribute vec3 offset; -attribute float rotation; -attribute vec3 size; - -void main() { - - vec2 alignedPosition = position.xy * size.xy; - - vec2 rotatedPosition; - rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; - rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; -#ifdef HORIZONTAL - vec4 mvPosition = modelMatrix * vec4( offset, 1.0 ); - mvPosition.x += rotatedPosition.x; - mvPosition.z -= rotatedPosition.y; - mvPosition = viewMatrix * mvPosition; -#elif defined(VERTICAL) - vec4 mvPosition = modelMatrix * vec4( offset, 1.0 ); - mvPosition.y += rotatedPosition.y; - mvPosition = viewMatrix * mvPosition; - mvPosition.x += rotatedPosition.x; -#else - vec4 mvPosition = modelViewMatrix * vec4( offset, 1.0 ); - mvPosition.xy += rotatedPosition; -#endif - - vColor = color; - - gl_Position = projectionMatrix * mvPosition; - - #include - - #include - - #include - #include -} -`,hn=` -#include -#include -#include -#include -#include -#include - -attribute vec3 offset; -attribute vec4 rotation; -attribute vec3 size; -// attribute vec4 color; - -void main() { - - float x2 = rotation.x + rotation.x, y2 = rotation.y + rotation.y, z2 = rotation.z + rotation.z; - float xx = rotation.x * x2, xy = rotation.x * y2, xz = rotation.x * z2; - float yy = rotation.y * y2, yz = rotation.y * z2, zz = rotation.z * z2; - float wx = rotation.w * x2, wy = rotation.w * y2, wz = rotation.w * z2; - float sx = size.x, sy = size.y, sz = size.z; - - mat4 matrix = mat4(( 1.0 - ( yy + zz ) ) * sx, ( xy + wz ) * sx, ( xz - wy ) * sx, 0.0, // 1. column - ( xy - wz ) * sy, ( 1.0 - ( xx + zz ) ) * sy, ( yz + wx ) * sy, 0.0, // 2. column - ( xz + wy ) * sz, ( yz - wx ) * sz, ( 1.0 - ( xx + yy ) ) * sz, 0.0, // 3. column - offset.x, offset.y, offset.z, 1.0); - - vec4 mvPosition = modelViewMatrix * (matrix * vec4( position, 1.0 )); - - vColor = color; - - gl_Position = projectionMatrix * mvPosition; - - #include - #include - #include - #include -} -`,gn=` -#define STANDARD -varying vec3 vViewPosition; -#ifdef USE_TRANSMISSION - varying vec3 vWorldPosition; -#endif -#include - -attribute vec3 offset; -attribute vec4 rotation; -attribute vec3 size; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -void main() { - - #include - float x2 = rotation.x + rotation.x, y2 = rotation.y + rotation.y, z2 = rotation.z + rotation.z; - float xx = rotation.x * x2, xy = rotation.x * y2, xz = rotation.x * z2; - float yy = rotation.y * y2, yz = rotation.y * z2, zz = rotation.z * z2; - float wx = rotation.w * x2, wy = rotation.w * y2, wz = rotation.w * z2; - float sx = size.x, sy = size.y, sz = size.z; - - mat4 particleMatrix = mat4(( 1.0 - ( yy + zz ) ) * sx, ( xy + wz ) * sx, ( xz - wy ) * sx, 0.0, // 1. column - ( xy - wz ) * sy, ( 1.0 - ( xx + zz ) ) * sy, ( yz + wx ) * sy, 0.0, // 2. column - ( xz + wy ) * sz, ( yz - wx ) * sz, ( 1.0 - ( xx + yy ) ) * sz, 0.0, // 3. column - offset.x, offset.y, offset.z, 1.0); - -#include -#include -#include -#include - -#include -#include -#include -#include - - // replace defaultnormal_vertex - vec3 transformedNormal = objectNormal; - mat3 m = mat3( particleMatrix ); - transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); - transformedNormal = m * transformedNormal; - transformedNormal = normalMatrix * transformedNormal; - #ifdef FLIP_SIDED - transformedNormal = - transformedNormal; - #endif - #ifdef USE_TANGENT - vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; - #ifdef FLIP_SIDED - transformedTangent = - transformedTangent; - #endif - #endif - - #include - #include - #include - #include - #include - - // replace include - vec4 mvPosition = vec4( transformed, 1.0 ); - mvPosition = modelViewMatrix * (particleMatrix * mvPosition); - gl_Position = projectionMatrix * mvPosition; - - #include - #include - - vViewPosition = - mvPosition.xyz; - - #include - #include - #include -#ifdef USE_TRANSMISSION - vWorldPosition = worldPosition.xyz; -#endif -} -`,_n=` -#include -#include -#include -#include - -#include -#include - -attribute vec3 offset; -attribute float rotation; -attribute vec3 size; -attribute vec4 velocity; - -uniform float speedFactor; - -void main() { - float lengthFactor = velocity.w; - float avgSize = (size.x + size.y) * 0.5; -#ifdef USE_SKEW - vec4 mvPosition = modelViewMatrix * vec4( offset, 1.0 ); - vec3 viewVelocity = normalMatrix * velocity.xyz; - - vec3 scaledPos = vec3(position.xy * size.xy, position.z); - float vlength = length(viewVelocity); - vec3 projVelocity = dot(scaledPos, viewVelocity) * viewVelocity / vlength; - mvPosition.xyz += scaledPos + projVelocity * (speedFactor / avgSize + lengthFactor / vlength); -#else - vec4 mvPosition = modelViewMatrix * vec4( offset, 1.0 ); - vec3 viewVelocity = normalMatrix * velocity.xyz; - float vlength = length(viewVelocity); - mvPosition.xyz += position.y * normalize(cross(mvPosition.xyz, viewVelocity)) * avgSize; // switch the cross to match unity implementation - mvPosition.xyz -= (position.x + 0.5) * viewVelocity * (1.0 + lengthFactor / vlength) * avgSize; // minus position.x to match unity implementation -#endif - vColor = color; - gl_Position = projectionMatrix * mvPosition; - #include - #include - #include - #include -} -`;function vn(e){return e===0?`uv`:`uv${e}`}var yn=class extends l{constructor(e){super(e)}onBeforeCompile(e,t){super.onBeforeCompile(e,t),e.vertexShader=gn,e.fragmentShader=pn}},bn=class extends u{constructor(e){super(e)}onBeforeCompile(e,t){super.onBeforeCompile(e,t),e.vertexShader=gn,e.fragmentShader=pn}},xn=class extends rn{constructor(e){super(e),this.vector_=new L,this.vector2_=new L,this.vector3_=new L,this.quaternion_=new I,this.quaternion2_=new I,this.quaternion3_=new I,this.rotationMat_=new W,this.rotationMat2_=new W,this.maxParticles=1e3,this.setupBuffers(),this.rebuildMaterial()}buildExpandableBuffers(){this.offsetBuffer=new s(new Float32Array(this.maxParticles*3),3),this.offsetBuffer.setUsage(e),this.geometry.setAttribute(`offset`,this.offsetBuffer),this.colorBuffer=new s(new Float32Array(this.maxParticles*4),4),this.colorBuffer.setUsage(e),this.geometry.setAttribute(`color`,this.colorBuffer),this.settings.renderMode===$.Mesh?(this.rotationBuffer=new s(new Float32Array(this.maxParticles*4),4),this.rotationBuffer.setUsage(e),this.geometry.setAttribute(`rotation`,this.rotationBuffer)):(this.settings.renderMode===$.BillBoard||this.settings.renderMode===$.HorizontalBillBoard||this.settings.renderMode===$.VerticalBillBoard||this.settings.renderMode===$.StretchedBillBoard)&&(this.rotationBuffer=new s(new Float32Array(this.maxParticles),1),this.rotationBuffer.setUsage(e),this.geometry.setAttribute(`rotation`,this.rotationBuffer)),this.sizeBuffer=new s(new Float32Array(this.maxParticles*3),3),this.sizeBuffer.setUsage(e),this.geometry.setAttribute(`size`,this.sizeBuffer),this.uvTileBuffer=new s(new Float32Array(this.maxParticles),1),this.uvTileBuffer.setUsage(e),this.geometry.setAttribute(`uvTile`,this.uvTileBuffer),this.settings.renderMode===$.StretchedBillBoard&&(this.velocityBuffer=new s(new Float32Array(this.maxParticles*4),4),this.velocityBuffer.setUsage(e),this.geometry.setAttribute(`velocity`,this.velocityBuffer))}setupBuffers(){this.geometry&&this.geometry.dispose(),this.geometry=new p,this.geometry.setIndex(this.settings.instancingGeometry.getIndex()),this.settings.instancingGeometry.hasAttribute(`normal`)&&this.geometry.setAttribute(`normal`,this.settings.instancingGeometry.getAttribute(`normal`)),this.geometry.setAttribute(`position`,this.settings.instancingGeometry.getAttribute(`position`)),this.geometry.setAttribute(`uv`,this.settings.instancingGeometry.getAttribute(`uv`)),this.buildExpandableBuffers()}expandBuffers(e){for(;e>=this.maxParticles;)this.maxParticles*=2;this.setupBuffers()}rebuildMaterial(){this.layers.mask=this.settings.layers.mask;let e={},t={};this.settings.material.type!==`MeshStandardMaterial`&&this.settings.material.type!==`MeshPhysicalMaterial`&&(e.map=new h(this.settings.material.map)),this.settings.material.alphaTest&&(t.USE_ALPHATEST=``,e.alphaTest=new h(this.settings.material.alphaTest)),t.USE_UV=``;let n=this.settings.uTileCount,r=this.settings.vTileCount;(n>1||r>1)&&(t.UV_TILE=``,e.tileCount=new h(new H(n,r))),this.settings.material.defines&&this.settings.material.defines.USE_COLOR_AS_ALPHA!==void 0&&(t.USE_COLOR_AS_ALPHA=``),this.settings.material.normalMap&&(t.USE_NORMALMAP=``,t.NORMALMAP_UV=vn(this.settings.material.normalMap.channel),e.normalMapTransform=new h(new W().copy(this.settings.material.normalMap.matrix))),this.settings.material.map&&(t.USE_MAP=``,this.settings.blendTiles&&(t.TILE_BLEND=``),t.MAP_UV=vn(this.settings.material.map.channel),e.mapTransform=new h(new W().copy(this.settings.material.map.matrix))),t.USE_COLOR_ALPHA=``;let i;if(this.settings.softParticles){t.SOFT_PARTICLES=``;let n=this.settings.softNearFade;e.softParams=new h(new H(n,1/(this.settings.softFarFade-this.settings.softNearFade))),e.depthTexture=new h(null);let r=e.projParams=new h(new U);i=(e,t,n)=>{r.value.set(n.near,n.far,0,0)}}let a=!1;if(this.settings.renderMode===$.BillBoard||this.settings.renderMode===$.VerticalBillBoard||this.settings.renderMode===$.HorizontalBillBoard||this.settings.renderMode===$.Mesh){let n,r;this.settings.renderMode===$.Mesh?this.settings.material.type===`MeshStandardMaterial`||this.settings.material.type===`MeshPhysicalMaterial`?(t.USE_COLOR=``,n=gn,r=pn,a=!0):(n=hn,r=fn):(n=mn,r=fn),this.settings.renderMode===$.VerticalBillBoard?t.VERTICAL=``:this.settings.renderMode===$.HorizontalBillBoard&&(t.HORIZONTAL=``);let i=!1;this.settings.renderMode===$.Mesh&&(this.settings.material.type===`MeshStandardMaterial`?(this.material=new yn({}),this.material.copy(this.settings.material),this.material.uniforms=e,this.material.defines=t,i=!0):this.settings.material.type===`MeshPhysicalMaterial`&&(this.material=new bn({}),this.material.copy(this.settings.material),this.material.uniforms=e,this.material.defines=t,i=!0)),i||(this.material=new d({uniforms:e,defines:t,vertexShader:n,fragmentShader:r,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,blending:this.settings.material.blending,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha,side:this.settings.material.side,alphaTest:this.settings.material.alphaTest,depthTest:this.settings.material.depthTest,lights:a}))}else if(this.settings.renderMode===$.StretchedBillBoard)e.speedFactor=new h(1),this.material=new d({uniforms:e,defines:t,vertexShader:_n,fragmentShader:fn,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,blending:this.settings.material.blending,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha,side:this.settings.material.side,alphaTest:this.settings.material.alphaTest,depthTest:this.settings.material.depthTest});else throw Error(`render mode unavailable`);this.material&&i&&(this.material.onBeforeRender=i)}update(){let e=0,t=0;this.systems.forEach(e=>{t+=e.particleNum}),t>this.maxParticles&&this.expandBuffers(t),this.systems.forEach(t=>{t.emitter.updateMatrixWorld&&(t.emitter.updateWorldMatrix(!0,!1),t.emitter.updateMatrixWorld(!0));let n=t.particles,r=t.particleNum,i=this.quaternion2_,a=this.vector2_,o=this.vector3_;t.emitter.matrixWorld.decompose(a,i,o),this.rotationMat_.setFromMatrix4(t.emitter.matrixWorld);for(let a=0;a0&&(this.offsetBuffer.clearUpdateRanges(),this.offsetBuffer.addUpdateRange(0,e*3),this.offsetBuffer.needsUpdate=!0,this.sizeBuffer.clearUpdateRanges(),this.sizeBuffer.addUpdateRange(0,e*3),this.sizeBuffer.needsUpdate=!0,this.colorBuffer.clearUpdateRanges(),this.colorBuffer.addUpdateRange(0,e*4),this.colorBuffer.needsUpdate=!0,this.uvTileBuffer.clearUpdateRanges(),this.uvTileBuffer.addUpdateRange(0,e),this.uvTileBuffer.needsUpdate=!0,this.settings.renderMode===$.StretchedBillBoard&&this.velocityBuffer&&(this.velocityBuffer.clearUpdateRanges(),this.velocityBuffer.addUpdateRange(0,e*4),this.velocityBuffer.needsUpdate=!0),this.settings.renderMode===$.Mesh?(this.rotationBuffer.clearUpdateRanges(),this.rotationBuffer.addUpdateRange(0,e*4),this.rotationBuffer.needsUpdate=!0):(this.settings.renderMode===$.StretchedBillBoard||this.settings.renderMode===$.HorizontalBillBoard||this.settings.renderMode===$.VerticalBillBoard||this.settings.renderMode===$.BillBoard)&&(this.rotationBuffer.clearUpdateRanges(),this.rotationBuffer.addUpdateRange(0,e),this.rotationBuffer.needsUpdate=!0))}dispose(){this.geometry.dispose()}},Sn=` - -#include -#include -#include -#include -#include -#include - -uniform sampler2D alphaMap; -uniform float useAlphaMap; -uniform float visibility; -uniform float alphaTest; - -varying vec4 vColor; - -void main() { - #include - #include - - vec4 diffuseColor = vColor; - - #ifdef USE_MAP - #include - #ifndef USE_COLOR_AS_ALPHA - #endif - #endif - if( useAlphaMap == 1. ) diffuseColor.a *= texture2D( alphaMap, vUv).a; - if( diffuseColor.a < alphaTest ) discard; - gl_FragColor = diffuseColor; - - #include - #include -}`,Cn=` -#include -#include -#include -#include -#include -#include - -attribute vec3 previous; -attribute vec3 next; -attribute float side; -attribute float width; - -uniform vec2 resolution; -uniform float lineWidth; -uniform float sizeAttenuation; - -vec2 fix(vec4 i, float aspect) { - vec2 res = i.xy / i.w; - res.x *= aspect; - return res; -} - -void main() { - - #include - - float aspect = resolution.x / resolution.y; - - vColor = color; - - mat4 m = projectionMatrix * modelViewMatrix; - vec4 finalPosition = m * vec4( position, 1.0 ); - vec4 prevPos = m * vec4( previous, 1.0 ); - vec4 nextPos = m * vec4( next, 1.0 ); - - vec2 currentP = fix( finalPosition, aspect ); - vec2 prevP = fix( prevPos, aspect ); - vec2 nextP = fix( nextPos, aspect ); - - float w = lineWidth * width; - - vec2 dir; - if( nextP == currentP ) dir = normalize( currentP - prevP ); - else if( prevP == currentP ) dir = normalize( nextP - currentP ); - else { - vec2 dir1 = normalize( currentP - prevP ); - vec2 dir2 = normalize( nextP - currentP ); - dir = normalize( dir1 + dir2 ); - - vec2 perp = vec2( -dir1.y, dir1.x ); - vec2 miter = vec2( -dir.y, dir.x ); - //w = clamp( w / dot( miter, perp ), 0., 4., * lineWidth * width ); - - } - - //vec2 normal = ( cross( vec3( dir, 0. ) vec3( 0., 0., 1. ) ) ).xy; - vec4 normal = vec4( -dir.y, dir.x, 0., 1. ); - normal.xy *= .5 * w; - normal *= projectionMatrix; - if( sizeAttenuation == 0. ) { - normal.xy *= finalPosition.w; - normal.xy /= ( vec4( resolution, 0., 1. ) * projectionMatrix ).xy; - } - - finalPosition.xy += normal.xy * side; - - gl_Position = finalPosition; - - #include - #include - - vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); - - #include -}`,wn=class extends rn{constructor(e){super(e),this.vector_=new L,this.vector2_=new L,this.vector3_=new L,this.quaternion_=new I,this.maxParticles=1e4,this.setupBuffers(),this.rebuildMaterial()}setupBuffers(){this.geometry&&this.geometry.dispose(),this.geometry=new a,this.indexBuffer=new m(new Uint32Array(this.maxParticles*6),1),this.indexBuffer.setUsage(e),this.geometry.setIndex(this.indexBuffer),this.positionBuffer=new m(new Float32Array(this.maxParticles*6),3),this.positionBuffer.setUsage(e),this.geometry.setAttribute(`position`,this.positionBuffer),this.previousBuffer=new m(new Float32Array(this.maxParticles*6),3),this.previousBuffer.setUsage(e),this.geometry.setAttribute(`previous`,this.previousBuffer),this.nextBuffer=new m(new Float32Array(this.maxParticles*6),3),this.nextBuffer.setUsage(e),this.geometry.setAttribute(`next`,this.nextBuffer),this.widthBuffer=new m(new Float32Array(this.maxParticles*2),1),this.widthBuffer.setUsage(e),this.geometry.setAttribute(`width`,this.widthBuffer),this.sideBuffer=new m(new Float32Array(this.maxParticles*2),1),this.sideBuffer.setUsage(e),this.geometry.setAttribute(`side`,this.sideBuffer),this.uvBuffer=new m(new Float32Array(this.maxParticles*4),2),this.uvBuffer.setUsage(e),this.geometry.setAttribute(`uv`,this.uvBuffer),this.colorBuffer=new m(new Float32Array(this.maxParticles*8),4),this.colorBuffer.setUsage(e),this.geometry.setAttribute(`color`,this.colorBuffer)}expandBuffers(e){for(;e>=this.maxParticles;)this.maxParticles*=2;this.setupBuffers()}rebuildMaterial(){this.layers.mask=this.settings.layers.mask;let e={lineWidth:{value:1},map:{value:null},useMap:{value:0},alphaMap:{value:null},useAlphaMap:{value:0},resolution:{value:new H(1,1)},sizeAttenuation:{value:1},visibility:{value:1},alphaTest:{value:0}},t={};if(t.USE_UV=``,t.USE_COLOR_ALPHA=``,this.settings.material.map&&(t.USE_MAP=``,t.MAP_UV=vn(this.settings.material.map.channel),e.map=new h(this.settings.material.map),e.mapTransform=new h(new W().copy(this.settings.material.map.matrix))),this.settings.material.defines&&this.settings.material.defines.USE_COLOR_AS_ALPHA!==void 0&&(t.USE_COLOR_AS_ALPHA=``),this.settings.renderMode===$.Trail)this.material=new d({uniforms:e,defines:t,vertexShader:Cn,fragmentShader:Sn,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,side:this.settings.material.side,blending:this.settings.material.blending||2,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha});else throw Error(`render mode unavailable`)}update(){let e=0,t=0,n=0;this.systems.forEach(e=>{for(let t=0;tthis.maxParticles&&this.expandBuffers(n),this.systems.forEach(n=>{n.emitter.updateMatrixWorld&&(n.emitter.updateWorldMatrix(!0,!1),n.emitter.updateMatrixWorld(!0));let r=this.quaternion_,i=this.vector2_,a=this.vector3_;n.emitter.matrixWorld.decompose(i,r,a);let o=n.particles,s=n.particleNum,c=this.settings.uTileCount,l=this.settings.vTileCount,u=1/c,d=1/l;for(let r=0;r1&&(o=1-o,s=1-s);let c=t.getIndex().array[r*3],l=t.getIndex().array[r*3+1],u=t.getIndex().array[r*3+2],d=t.getAttribute(`position`);this._tempA.fromBufferAttribute(d,c),this._tempB.fromBufferAttribute(d,l),this._tempC.fromBufferAttribute(d,u),this._tempB.sub(this._tempA),this._tempC.sub(this._tempA),this._tempA.addScaledVector(this._tempB,o).addScaledVector(this._tempC,s),e.position.copy(this._tempA),this._tempA.copy(this._tempB).cross(this._tempC).normalize(),e.velocity.copy(this._tempA).normalize().multiplyScalar(e.startSpeed)}toJSON(){return{type:`mesh_surface`,mesh:this._geometry?this._geometry.uuid:``}}static fromJSON(t,n){return new e(n.geometries[t.geometry])}clone(){return new e(this._geometry)}update(e,t){}};Gt({id:`three.quarks`,initialize:()=>{},emitterShapes:[{type:`mesh_surface`,params:[[`geometry`,[`geometry`]]],constructor:Tn,loadJSON:Tn.fromJSON}],behaviors:[]});var En=class e extends c{constructor(){super(),this.batches=[],this.systemToBatchIndex=new Map,this.type=`BatchedRenderer`,this.depthTexture=null}static equals(e,t){return e.material.side===t.material.side&&e.material.blending===t.material.blending&&e.material.blendSrc===t.material.blendSrc&&e.material.blendDst===t.material.blendDst&&e.material.blendEquation===t.material.blendEquation&&e.material.premultipliedAlpha===t.material.premultipliedAlpha&&e.material.transparent===t.material.transparent&&e.material.depthTest===t.material.depthTest&&e.material.type===t.material.type&&e.material.alphaTest===t.material.alphaTest&&e.material.map===t.material.map&&e.renderMode===t.renderMode&&e.blendTiles===t.blendTiles&&e.softParticles===t.softParticles&&e.softFarFade===t.softFarFade&&e.softNearFade===t.softNearFade&&e.uTileCount===t.uTileCount&&e.vTileCount===t.vTileCount&&e.instancingGeometry===t.instancingGeometry&&e.renderOrder===t.renderOrder&&e.layers.mask===t.layers.mask}addSystem(t){t._renderer=this;let n=t.getRendererSettings();for(let r=0;r{n.update(e)});for(let e=0;e4,AONode:()=>yC,AddEquation:()=>100,AddOperation:()=>2,AdditiveAnimationBlendMode:()=>it,AdditiveBlending:()=>2,AfterImageNode:()=>Dk,AgXToneMapping:()=>6,AlphaFormat:()=>ie,AlwaysCompare:()=>519,AlwaysDepth:()=>1,AlwaysStencilFunc:()=>519,AmbientLight:()=>Cp,AmbientLightNode:()=>BN,AnaglyphPassNode:()=>PA,AnalyticLightNode:()=>fj,AnamorphicNode:()=>Lk,AnimationAction:()=>_m,AnimationClip:()=>Kf,AnimationLoader:()=>np,AnimationMixer:()=>ym,AnimationObjectGroup:()=>gm,AnimationUtils:()=>Nf,ArcCurve:()=>Mu,ArrayCamera:()=>Ac,ArrayElementNode:()=>Lh,ArrowHelper:()=>fh,AssignNode:()=>M_,AttachedBindMode:()=>a,AttributeNode:()=>cb,Audio:()=>Xp,AudioAnalyser:()=>nm,AudioContext:()=>Lp,AudioListener:()=>Yp,AudioLoader:()=>Rp,AxesHelper:()=>ph,BRDF_GGX:()=>Kw,BRDF_Lambert:()=>Aw,BackSide:()=>1,BasicDepthPacking:()=>at,BasicEnvironmentNode:()=>Cw,BasicNodeLibrary:()=>$N,BasicShadowMap:()=>0,BatchNode:()=>XS,BatchedMesh:()=>nu,BloomNode:()=>gA,Bone:()=>wl,BooleanKeyframeTrack:()=>zf,Box2:()=>Nm,Box3:()=>Gn,Box3Helper:()=>sh,BoxGeometry:()=>Zi,BoxHelper:()=>oh,Break:()=>aC,BufferAttribute:()=>bi,BufferAttributeNode:()=>Vy,BufferGeometry:()=>Ii,BufferGeometryLoader:()=>Ap,BufferNode:()=>vx,BumpMapNode:()=>Qx,BypassNode:()=>Xy,ByteType:()=>x,Cache:()=>Yf,CacheNode:()=>Jy,Camera:()=>la,CameraHelper:()=>rh,CanvasTexture:()=>ku,CapsuleGeometry:()=>od,CatmullRomCurve3:()=>Ru,CineonToneMapping:()=>3,CircleGeometry:()=>sd,ClampToEdgeWrapping:()=>c,Clock:()=>Up,CodeNode:()=>KE,Color:()=>P,ColorKeyframeTrack:()=>Bf,ColorManagement:()=>Tn,ColorSpaceNode:()=>Oy,CompressedArrayTexture:()=>Du,CompressedCubeTexture:()=>Ou,CompressedTexture:()=>Eu,CompressedTextureLoader:()=>rp,ComputeNode:()=>Ky,ConeGeometry:()=>ld,ConstNode:()=>Kh,ConstantAlphaFactor:()=>213,ConstantColorFactor:()=>211,ContextNode:()=>_y,Continue:()=>iC,Controls:()=>hh,ConvertNode:()=>Rh,CubeCamera:()=>ga,CubeReflectionMapping:()=>301,CubeRefractionMapping:()=>302,CubeTexture:()=>_a,CubeTextureLoader:()=>ap,CubeTextureNode:()=>gx,CubeUVReflectionMapping:()=>306,CubicBezierCurve:()=>Yu,CubicBezierCurve3:()=>Xu,CubicInterpolant:()=>Ff,CullFaceBack:()=>1,CullFaceFront:()=>2,CullFaceFrontBack:()=>3,CullFaceNone:()=>0,Curve:()=>Au,CurvePath:()=>rd,CustomBlending:()=>5,CustomToneMapping:()=>5,CylinderGeometry:()=>cd,Cylindrical:()=>Am,DFGApprox:()=>qw,D_GGX:()=>Uw,Data3DTexture:()=>Bn,DataArrayTexture:()=>Rn,DataTexture:()=>Tl,DataTextureLoader:()=>op,DataUtils:()=>_i,DecrementStencilOp:()=>yt,DecrementWrapStencilOp:()=>xt,DefaultLoadingManager:()=>Zf,DenoiseNode:()=>iA,DepthFormat:()=>le,DepthOfFieldNode:()=>Vk,DepthStencilFormat:()=>ue,DepthTexture:()=>ho,DetachedBindMode:()=>o,DirectionalLight:()=>Sp,DirectionalLightHelper:()=>eh,DirectionalLightNode:()=>NN,Discard:()=>rb,DiscreteInterpolant:()=>Lf,DisplayP3ColorSpace:()=>dt,DodecahedronGeometry:()=>dd,DotScreenNode:()=>Uk,DoubleSide:()=>2,DstAlphaFactor:()=>206,DstColorFactor:()=>208,DynamicCopyUsage:()=>At,DynamicDrawUsage:()=>wt,DynamicReadUsage:()=>Dt,EPSILON:()=>av,EdgesGeometry:()=>gd,EllipseCurve:()=>ju,EnvironmentNode:()=>iE,EqualCompare:()=>514,EqualDepth:()=>4,EqualStencilFunc:()=>514,EquirectUVNode:()=>mw,EquirectangularReflectionMapping:()=>303,EquirectangularRefractionMapping:()=>304,Euler:()=>Dr,EventDispatcher:()=>Ft,ExpressionNode:()=>tb,ExtrudeGeometry:()=>$d,FXAANode:()=>cA,F_Schlick:()=>kw,FileLoader:()=>tp,FilmNode:()=>qk,Float16BufferAttribute:()=>Oi,Float32BufferAttribute:()=>F,FloatType:()=>E,Fn:()=>U,Fog:()=>Wc,FogExp2:()=>Uc,FogExp2Node:()=>ZA,FogNode:()=>qA,FogRangeNode:()=>YA,FramebufferTexture:()=>Tu,FrontFacingNode:()=>Qb,FrontSide:()=>0,Frustum:()=>Ta,FunctionCallNode:()=>P_,FunctionNode:()=>ZE,FunctionOverloadingNode:()=>rO,GLBufferAttribute:()=>wm,GLSL1:()=>`100`,GLSL3:()=>Mt,GLSLNodeParser:()=>XN,GTAONode:()=>eA,GaussianBlurNode:()=>Ck,GreaterCompare:()=>516,GreaterDepth:()=>6,GreaterEqualCompare:()=>518,GreaterEqualDepth:()=>5,GreaterEqualStencilFunc:()=>518,GreaterStencilFunc:()=>516,GridHelper:()=>Ym,Group:()=>jc,HalfFloatType:()=>D,HemisphereLight:()=>lp,HemisphereLightHelper:()=>Jm,HemisphereLightNode:()=>VN,IESSpotLightNode:()=>zN,INFINITY:()=>ov,IcosahedronGeometry:()=>nf,If:()=>W,ImageBitmapLoader:()=>Fp,ImageLoader:()=>ip,ImageUtils:()=>kn,IncrementStencilOp:()=>vt,IncrementWrapStencilOp:()=>bt,IndexNode:()=>VS,InstanceNode:()=>JS,InstancedBufferAttribute:()=>kl,InstancedBufferGeometry:()=>kp,InstancedInterleavedBuffer:()=>Cm,InstancedMesh:()=>Ll,InstancedPointsNodeMaterial:()=>rw,Int16BufferAttribute:()=>wi,Int32BufferAttribute:()=>Ei,Int8BufferAttribute:()=>xi,IntType:()=>w,InterleavedBuffer:()=>Kc,InterleavedBufferAttribute:()=>Jc,Interpolant:()=>Pf,InterpolateDiscrete:()=>Ze,InterpolateLinear:()=>Qe,InterpolateSmooth:()=>$e,InvertStencilOp:()=>St,IrradianceNode:()=>SC,JoinNode:()=>Bh,KeepStencilOp:()=>gt,KeyframeTrack:()=>Rf,LOD:()=>pl,LatheGeometry:()=>ad,Layers:()=>Or,LessCompare:()=>513,LessDepth:()=>2,LessEqualCompare:()=>515,LessEqualDepth:()=>3,LessEqualStencilFunc:()=>515,LessStencilFunc:()=>513,Light:()=>cp,LightProbe:()=>Ep,LightProbeNode:()=>HN,LightingContextNode:()=>bC,LightingModel:()=>Tw,LightingNode:()=>vC,LightsNode:()=>gC,Line:()=>du,Line2NodeMaterial:()=>lw,Line3:()=>Im,LineBasicMaterial:()=>ru,LineBasicNodeMaterial:()=>aw,LineCurve:()=>Zu,LineCurve3:()=>Qu,LineDashedMaterial:()=>Tf,LineDashedNodeMaterial:()=>sw,LineLoop:()=>gu,LineSegments:()=>hu,LinearDisplayP3ColorSpace:()=>ft,LinearFilter:()=>h,LinearInterpolant:()=>If,LinearMipMapLinearFilter:()=>y,LinearMipMapNearestFilter:()=>_,LinearMipmapLinearFilter:()=>v,LinearMipmapNearestFilter:()=>g,LinearSRGBColorSpace:()=>ut,LinearToneMapping:()=>1,LinearTransfer:()=>pt,Loader:()=>Qf,LoaderUtils:()=>Op,LoadingManager:()=>Xf,Loop:()=>rC,LoopNode:()=>nC,LoopOnce:()=>Je,LoopPingPong:()=>Xe,LoopRepeat:()=>Ye,LuminanceAlphaFormat:()=>ce,LuminanceFormat:()=>se,Lut3DNode:()=>Yk,MOUSE:()=>r,MRTNode:()=>tO,MatcapUVNode:()=>_E,Material:()=>di,MaterialLoader:()=>Dp,MaterialNode:()=>$,MaterialReferenceNode:()=>Ox,MathUtils:()=>ln,Matrix2:()=>jm,Matrix3:()=>j,Matrix4:()=>N,MaxEquation:()=>104,MaxMipLevelNode:()=>pb,Mesh:()=>Ji,MeshBasicMaterial:()=>fi,MeshBasicNodeMaterial:()=>Ow,MeshDepthMaterial:()=>hc,MeshDistanceMaterial:()=>gc,MeshLambertMaterial:()=>Cf,MeshLambertNodeMaterial:()=>Iw,MeshMatcapMaterial:()=>wf,MeshMatcapNodeMaterial:()=>bE,MeshNormalMaterial:()=>Sf,MeshNormalNodeMaterial:()=>pw,MeshPhongMaterial:()=>bf,MeshPhongNodeMaterial:()=>Rw,MeshPhysicalMaterial:()=>yf,MeshPhysicalNodeMaterial:()=>uE,MeshSSSNodeMaterial:()=>fE,MeshStandardMaterial:()=>vf,MeshStandardNodeMaterial:()=>cE,MeshToonMaterial:()=>xf,MeshToonNodeMaterial:()=>gE,MinEquation:()=>103,MirroredRepeatWrapping:()=>l,MixOperation:()=>1,ModelNode:()=>Pb,ModelViewProjectionNode:()=>zS,MorphNode:()=>dC,MultiplyBlending:()=>4,MultiplyOperation:()=>0,NearestFilter:()=>u,NearestMipMapLinearFilter:()=>m,NearestMipMapNearestFilter:()=>f,NearestMipmapLinearFilter:()=>p,NearestMipmapNearestFilter:()=>d,NeutralToneMapping:()=>7,NeverCompare:()=>512,NeverDepth:()=>0,NeverStencilFunc:()=>512,NoBlending:()=>0,NoColorSpace:()=>``,NoToneMapping:()=>0,Node:()=>R,NodeAttribute:()=>LE,NodeBuilder:()=>JD,NodeCache:()=>UE,NodeCode:()=>VE,NodeFrame:()=>YD,NodeFunctionInput:()=>XD,NodeLoader:()=>PE,NodeMaterial:()=>tw,NodeMaterialLoader:()=>FE,NodeMaterialObserver:()=>vh,NodeObjectLoader:()=>IE,NodeShaderStage:()=>Ah,NodeType:()=>jh,NodeUniform:()=>RE,NodeUpdateType:()=>L,NodeUtils:()=>kh,NodeVar:()=>zE,NodeVarying:()=>BE,NormalAnimationBlendMode:()=>rt,NormalBlending:()=>1,NormalMapNode:()=>Jx,NotEqualCompare:()=>517,NotEqualDepth:()=>7,NotEqualStencilFunc:()=>517,NumberKeyframeTrack:()=>Vf,Object3D:()=>Wr,Object3DNode:()=>Ob,ObjectLoader:()=>jp,ObjectSpaceNormalMap:()=>1,OctahedronGeometry:()=>rf,OneFactor:()=>201,OneMinusConstantAlphaFactor:()=>214,OneMinusConstantColorFactor:()=>212,OneMinusDstAlphaFactor:()=>207,OneMinusDstColorFactor:()=>209,OneMinusSrcAlphaFactor:()=>205,OneMinusSrcColorFactor:()=>203,OrthographicCamera:()=>Ba,OscNode:()=>dO,OutputStructNode:()=>QD,P3Primaries:()=>`p3`,PCFShadowMap:()=>1,PCFSoftShadowMap:()=>2,PI:()=>sv,PI2:()=>cv,PMREMGenerator:()=>$a,PMREMNode:()=>$T,ParallaxBarrierPassNode:()=>IA,ParameterNode:()=>WE,PassNode:()=>_k,Path:()=>id,PerspectiveCamera:()=>pa,PhongLightingModel:()=>Pw,PhysicalLightingModel:()=>OT,PixelationPassNode:()=>SA,Plane:()=>Sa,PlaneGeometry:()=>Oa,PlaneHelper:()=>ch,PointLight:()=>bp,PointLightHelper:()=>Wm,PointLightNode:()=>MN,PointUVNode:()=>JO,Points:()=>Su,PointsMaterial:()=>_u,PointsNodeMaterial:()=>SE,PolarGridHelper:()=>Xm,PolyhedronGeometry:()=>ud,PositionalAudio:()=>tm,PosterizeNode:()=>lk,PropertyBinding:()=>hm,PropertyMixer:()=>rm,PropertyNode:()=>t_,QuadraticBezierCurve:()=>$u,QuadraticBezierCurve3:()=>ed,Quaternion:()=>Hn,QuaternionKeyframeTrack:()=>Uf,QuaternionLinearInterpolant:()=>Hf,RED_GREEN_RGTC2_Format:()=>Ke,RED_RGTC1_Format:()=>We,REVISION:()=>n,RGBADepthPacking:()=>ot,RGBAFormat:()=>oe,RGBAIntegerFormat:()=>ge,RGBA_ASTC_10x10_Format:()=>Re,RGBA_ASTC_10x5_Format:()=>Fe,RGBA_ASTC_10x6_Format:()=>Ie,RGBA_ASTC_10x8_Format:()=>Le,RGBA_ASTC_12x10_Format:()=>ze,RGBA_ASTC_12x12_Format:()=>Be,RGBA_ASTC_4x4_Format:()=>De,RGBA_ASTC_5x4_Format:()=>Oe,RGBA_ASTC_5x5_Format:()=>ke,RGBA_ASTC_6x5_Format:()=>Ae,RGBA_ASTC_6x6_Format:()=>je,RGBA_ASTC_8x5_Format:()=>Me,RGBA_ASTC_8x6_Format:()=>Ne,RGBA_ASTC_8x8_Format:()=>Pe,RGBA_BPTC_Format:()=>Ve,RGBA_ETC2_EAC_Format:()=>Ee,RGBA_PVRTC_2BPPV1_Format:()=>Ce,RGBA_PVRTC_4BPPV1_Format:()=>k,RGBA_S3TC_DXT1_Format:()=>ve,RGBA_S3TC_DXT3_Format:()=>ye,RGBA_S3TC_DXT5_Format:()=>be,RGBDepthPacking:()=>st,RGBFormat:()=>ae,RGBIntegerFormat:()=>he,RGBShiftNode:()=>Gk,RGB_BPTC_SIGNED_Format:()=>He,RGB_BPTC_UNSIGNED_Format:()=>Ue,RGB_ETC1_Format:()=>we,RGB_ETC2_Format:()=>Te,RGB_PVRTC_2BPPV1_Format:()=>Se,RGB_PVRTC_4BPPV1_Format:()=>xe,RGB_S3TC_DXT1_Format:()=>_e,RGDepthPacking:()=>ct,RGFormat:()=>pe,RGIntegerFormat:()=>me,RTTNode:()=>UO,RangeNode:()=>tj,RawShaderMaterial:()=>_f,Ray:()=>_r,Raycaster:()=>Em,Rec709Primaries:()=>ht,RectAreaLight:()=>wp,RectAreaLightNode:()=>LN,RedFormat:()=>de,RedIntegerFormat:()=>fe,ReferenceNode:()=>Tx,ReflectorNode:()=>LO,ReinhardToneMapping:()=>2,RemapNode:()=>Qy,RenderOutputNode:()=>ab,RenderTarget:()=>In,RendererReferenceNode:()=>Iy,RepeatWrapping:()=>s,ReplaceStencilOp:()=>_t,Return:()=>ib,ReverseSubtractEquation:()=>102,RingGeometry:()=>af,RotateNode:()=>CE,SIGNED_RED_GREEN_RGTC2_Format:()=>qe,SIGNED_RED_RGTC1_Format:()=>Ge,SRGBColorSpace:()=>lt,SRGBTransfer:()=>mt,SSAAPassNode:()=>TA,Scene:()=>Gc,SceneNode:()=>XO,Schlick_to_F0:()=>Yw,ScreenNode:()=>TC,ScriptableNode:()=>GA,ScriptableValueNode:()=>BA,SetNode:()=>Uh,ShaderChunk:()=>ka,ShaderLib:()=>Aa,ShaderMaterial:()=>aa,ShaderNode:()=>Sg,ShadowMaterial:()=>gf,ShadowNodeMaterial:()=>kE,Shape:()=>_d,ShapeGeometry:()=>of,ShapePath:()=>mh,ShapeUtils:()=>Xd,ShortType:()=>S,Skeleton:()=>Ol,SkeletonHelper:()=>Hm,SkinnedMesh:()=>Cl,SkinningNode:()=>$S,SobelOperatorNode:()=>zk,Source:()=>jn,Sphere:()=>lr,SphereGeometry:()=>cf,Spherical:()=>km,SphericalHarmonics3:()=>Tp,SplineCurve:()=>td,SplitNode:()=>Hh,SpotLight:()=>hp,SpotLightHelper:()=>Rm,SpotLightNode:()=>RN,Sprite:()=>ll,SpriteMaterial:()=>Yc,SpriteNodeMaterial:()=>EE,SpriteSheetUVNode:()=>gO,SrcAlphaFactor:()=>204,SrcAlphaSaturateFactor:()=>210,SrcColorFactor:()=>202,StackNode:()=>gD,StaticCopyUsage:()=>kt,StaticDrawUsage:()=>Ct,StaticReadUsage:()=>Et,StereoCamera:()=>Hp,StereoPassNode:()=>kA,StorageArrayElementNode:()=>vO,StorageBufferNode:()=>tk,StorageTextureNode:()=>ik,StreamCopyUsage:()=>jt,StreamDrawUsage:()=>Tt,StreamReadUsage:()=>Ot,StringKeyframeTrack:()=>Wf,SubtractEquation:()=>101,SubtractiveBlending:()=>3,TBNViewMatrix:()=>Ux,TOUCH:()=>i,TangentSpaceNormalMap:()=>0,TempNode:()=>zh,TetrahedronGeometry:()=>lf,Texture:()=>Pn,Texture3DNode:()=>jE,TextureLoader:()=>sp,TextureNode:()=>hb,TextureSizeNode:()=>db,TextureUtils:()=>Dc,TimerNode:()=>oO,ToneMappingNode:()=>Ry,ToonOutlinePassNode:()=>RA,TorusGeometry:()=>uf,TorusKnotGeometry:()=>df,TransitionNode:()=>vA,Triangle:()=>ii,TriangleFanDrawMode:()=>2,TriangleStripDrawMode:()=>1,TrianglesDrawMode:()=>0,TriplanarTexturesNode:()=>bO,TubeGeometry:()=>ff,UVMapping:()=>300,Uint16BufferAttribute:()=>Ti,Uint32BufferAttribute:()=>Di,Uint8BufferAttribute:()=>Si,Uint8ClampedBufferAttribute:()=>Ci,Uniform:()=>bm,UniformArrayNode:()=>xx,UniformGroupNode:()=>Jg,UniformNode:()=>e_,UniformsGroup:()=>Sm,UniformsLib:()=>I,UniformsUtils:()=>na,UnsignedByteType:()=>b,UnsignedInt101111Type:()=>re,UnsignedInt248Type:()=>te,UnsignedInt5999Type:()=>ne,UnsignedIntType:()=>T,UnsignedShort4444Type:()=>ee,UnsignedShort5551Type:()=>O,UnsignedShortType:()=>C,UserDataNode:()=>sk,VSMShadowMap:()=>3,V_GGX_SmithCorrelated:()=>Vw,VarNode:()=>by,VaryingNode:()=>Sy,Vector2:()=>A,Vector3:()=>M,Vector4:()=>Fn,VectorKeyframeTrack:()=>Gf,VertexColorNode:()=>KO,VideoTexture:()=>wu,ViewportDepthNode:()=>UC,ViewportDepthTextureNode:()=>VC,ViewportSharedTextureNode:()=>fk,ViewportTextureNode:()=>LC,VolumeNodeMaterial:()=>NE,WebGL3DRenderTarget:()=>Vn,WebGLArrayRenderTarget:()=>zn,WebGLCoordinateSystem:()=>Nt,WebGLCubeRenderTarget:()=>va,WebGLMultipleRenderTargets:()=>gh,WebGLRenderTarget:()=>Ln,WebGLRenderer:()=>Hc,WebGLUtils:()=>kc,WebGPUCoordinateSystem:()=>Pt,WireframeGeometry:()=>pf,WrapAroundEnding:()=>nt,ZeroCurvatureEnding:()=>et,ZeroFactor:()=>200,ZeroSlopeEnding:()=>tt,ZeroStencilOp:()=>0,abs:()=>Av,acesFilmicToneMapping:()=>Xj,acos:()=>Ov,add:()=>L_,addMethodChaining:()=>z,addNodeElement:()=>sb,afterImage:()=>Ok,agxToneMapping:()=>eM,all:()=>lv,alphaT:()=>h_,anaglyphPass:()=>FA,anamorphic:()=>Rk,and:()=>J_,anisotropy:()=>g_,anisotropyB:()=>v_,anisotropyT:()=>__,any:()=>uv,ao:()=>rA,append:()=>Og,arrayBuffer:()=>Wg,asin:()=>Dv,assign:()=>N_,atan:()=>kv,atan2:()=>Uv,atomicAdd:()=>yM,atomicAnd:()=>CM,atomicFunc:()=>_M,atomicMax:()=>xM,atomicMin:()=>SM,atomicOr:()=>wM,atomicStore:()=>vM,atomicSub:()=>bM,atomicXor:()=>TM,attenuationColor:()=>A_,attenuationDistance:()=>k_,attribute:()=>lb,backgroundBlurriness:()=>ZO,backgroundIntensity:()=>QO,batch:()=>ZS,billboarding:()=>Aj,bitAnd:()=>Q_,bitNot:()=>$_,bitOr:()=>ev,bitXor:()=>tv,bitangentGeometry:()=>Lx,bitangentLocal:()=>Rx,bitangentView:()=>zx,bitangentWorld:()=>Bx,bitcast:()=>Vv,bleach:()=>Hj,bloom:()=>_A,blur:()=>JT,bool:()=>Ag,buffer:()=>yx,bufferAttribute:()=>Hy,bumpMap:()=>$x,burn:()=>Lj,bvec2:()=>Ng,bvec3:()=>Ig,bvec4:()=>zg,bypass:()=>Zy,cache:()=>Yy,call:()=>F_,cameraFar:()=>bb,cameraLogDepth:()=>xb,cameraNear:()=>yb,cameraNormalMatrix:()=>Eb,cameraPosition:()=>Db,cameraProjectionMatrix:()=>Sb,cameraProjectionMatrixInverse:()=>Cb,cameraViewMatrix:()=>wb,cameraWorldMatrix:()=>Tb,cbrt:()=>iy,ceil:()=>xv,checker:()=>EM,cineonToneMapping:()=>Jj,clamp:()=>sy,clearcoat:()=>c_,clearcoatRoughness:()=>l_,code:()=>qE,color:()=>kg,colorSpaceToWorking:()=>My,colorToDirection:()=>dw,compute:()=>qy,cond:()=>gy,context:()=>vy,convert:()=>Kg,convertToTexture:()=>GO,cos:()=>Tv,createCanvasElement:()=>hn,cross:()=>Qv,cubeTexture:()=>_x,dFdx:()=>Fv,dFdy:()=>Iv,dashSize:()=>C_,defaultBuildStages:()=>Nh,defaultShaderStages:()=>Mh,defined:()=>bg,degrees:()=>pv,denoise:()=>sA,densityFog:()=>QA,depth:()=>YC,depthPass:()=>bk,difference:()=>Xv,diffuseColor:()=>i_,directionToColor:()=>uw,dispersion:()=>j_,distance:()=>Yv,div:()=>B_,dodge:()=>Rj,dof:()=>Hk,dot:()=>Zv,dotScreen:()=>Wk,drawIndex:()=>qS,dynamicBufferAttribute:()=>Uy,element:()=>Gg,emissive:()=>a_,equal:()=>H_,equals:()=>dv,equirectUV:()=>hw,exp:()=>mv,exp2:()=>hv,expression:()=>nb,faceDirection:()=>ex,faceForward:()=>dy,film:()=>Jk,float:()=>G,floor:()=>bv,fog:()=>JA,fract:()=>Cv,frameGroup:()=>Zg,frameId:()=>uO,frontFacing:()=>$b,fwidth:()=>Bv,fxaa:()=>lA,gain:()=>Sj,gapSize:()=>w_,gaussianBlur:()=>wk,getColorSpaceMethod:()=>Dy,getConstNodeType:()=>xg,getCurrentStack:()=>Dg,getDirection:()=>WT,getDistanceAttenuation:()=>pj,getGeometryRoughness:()=>zw,getRoughness:()=>Bw,getShIrradianceAt:()=>jN,getTextureIndex:()=>eO,global:()=>WA,glsl:()=>XE,glslFn:()=>$E,grayscale:()=>kk,greaterThan:()=>G_,greaterThanEqual:()=>q_,hash:()=>bj,highPrecisionModelNormalViewMatrix:()=>Wb,highPrecisionModelViewMatrix:()=>Ub,hue:()=>Mk,instance:()=>YS,instanceIndex:()=>US,instancedBufferAttribute:()=>Wy,instancedDynamicBufferAttribute:()=>Gy,int:()=>K,inverseSqrt:()=>yv,invocationLocalIndex:()=>KS,invocationSubgroupIndex:()=>GS,ior:()=>E_,iridescence:()=>f_,iridescenceIOR:()=>p_,iridescenceThickness:()=>m_,ivec2:()=>jg,ivec3:()=>Pg,ivec4:()=>Lg,js:()=>JE,label:()=>yy,length:()=>Mv,lengthSq:()=>ay,lessThan:()=>W_,lessThanEqual:()=>K_,lightPosition:()=>gj,lightTargetDirection:()=>yj,lightTargetPosition:()=>_j,lightViewPosition:()=>vj,lightingContext:()=>xC,lights:()=>_C,linearDepth:()=>XC,linearSRGBTosRGB:()=>Gj,linearToneMapping:()=>Kj,localId:()=>oM,log:()=>gv,log2:()=>_v,loop:()=>oC,luminance:()=>Pk,lut3D:()=>Xk,mat2:()=>Bg,mat3:()=>Vg,mat4:()=>Hg,matcapUV:()=>vE,materialAOMap:()=>LS,materialAlphaTest:()=>tS,materialAnisotropy:()=>bS,materialAnisotropyVector:()=>RS,materialAttenuationColor:()=>OS,materialAttenuationDistance:()=>DS,materialClearcoat:()=>mS,materialClearcoatNormal:()=>gS,materialClearcoatRoughness:()=>hS,materialColor:()=>nS,materialDispersion:()=>FS,materialEmissive:()=>iS,materialIOR:()=>ES,materialIridescence:()=>xS,materialIridescenceIOR:()=>SS,materialIridescenceThickness:()=>CS,materialLightMap:()=>IS,materialLineDashOffset:()=>NS,materialLineDashSize:()=>AS,materialLineGapSize:()=>jS,materialLineScale:()=>kS,materialLineWidth:()=>MS,materialMetalness:()=>fS,materialNormal:()=>pS,materialOpacity:()=>aS,materialPointWidth:()=>PS,materialReference:()=>kx,materialReflectivity:()=>uS,materialRefractionRatio:()=>dx,materialRotation:()=>_S,materialRoughness:()=>dS,materialSheen:()=>vS,materialSheenRoughness:()=>yS,materialShininess:()=>rS,materialSpecular:()=>oS,materialSpecularColor:()=>cS,materialSpecularIntensity:()=>sS,materialSpecularStrength:()=>lS,materialThickness:()=>TS,materialTransmission:()=>wS,max:()=>Gv,maxMipLevel:()=>mb,metalness:()=>s_,min:()=>Wv,mix:()=>oy,mixElement:()=>py,mod:()=>Kv,modInt:()=>V_,modelDirection:()=>Fb,modelNormalMatrix:()=>Bb,modelPosition:()=>Lb,modelScale:()=>Rb,modelViewMatrix:()=>Hb,modelViewPosition:()=>zb,modelViewProjection:()=>BS,modelWorldMatrix:()=>Ib,modelWorldMatrixInverse:()=>Vb,morphReference:()=>fC,motionBlur:()=>Vj,mrt:()=>nO,mul:()=>z_,mx_aastep:()=>uN,mx_cell_noise_float:()=>EN,mx_contrast:()=>yN,mx_fractal_noise_float:()=>DN,mx_fractal_noise_vec2:()=>ON,mx_fractal_noise_vec3:()=>kN,mx_fractal_noise_vec4:()=>AN,mx_hsvtorgb:()=>sN,mx_noise_float:()=>bN,mx_noise_vec3:()=>xN,mx_noise_vec4:()=>SN,mx_ramplr:()=>fN,mx_ramptb:()=>pN,mx_rgbtohsv:()=>cN,mx_safepower:()=>vN,mx_splitlr:()=>hN,mx_splittb:()=>gN,mx_srgb_texture_to_lin_rec709:()=>lN,mx_transform_uv:()=>_N,mx_worley_noise_float:()=>CN,mx_worley_noise_vec2:()=>wN,mx_worley_noise_vec3:()=>TN,negate:()=>Nv,neutralToneMapping:()=>tM,nodeArray:()=>wg,nodeImmutable:()=>H,nodeObject:()=>B,nodeObjects:()=>Cg,nodeProxy:()=>V,normalFlat:()=>rx,normalGeometry:()=>tx,normalLocal:()=>nx,normalMap:()=>Yx,normalView:()=>ix,normalWorld:()=>ax,normalize:()=>Sv,not:()=>X_,notEqual:()=>U_,numWorkgroups:()=>iM,objectDirection:()=>kb,objectGroup:()=>$g,objectPosition:()=>jb,objectScale:()=>Mb,objectViewPosition:()=>Nb,objectWorldMatrix:()=>Ab,oneMinus:()=>Pv,or:()=>Y_,orthographicDepthToViewZ:()=>GC,oscSawtooth:()=>hO,oscSine:()=>fO,oscSquare:()=>pO,oscTriangle:()=>mO,output:()=>S_,outputStruct:()=>$D,overlay:()=>Bj,overloadingFn:()=>aO,parabola:()=>xj,parallaxBarrierPass:()=>LA,parallaxDirection:()=>Wx,parallaxUV:()=>Gx,parameter:()=>GE,pass:()=>vk,passTexture:()=>yk,pcurve:()=>Cj,perspectiveDepthToViewZ:()=>qC,pixelationPass:()=>CA,pmremTexture:()=>nE,pointUV:()=>YO,pointWidth:()=>T_,positionGeometry:()=>Gb,positionLocal:()=>Kb,positionPrevious:()=>qb,positionView:()=>Xb,positionViewDirection:()=>Zb,positionWorld:()=>Jb,positionWorldDirection:()=>Yb,posterize:()=>uk,pow:()=>$v,pow2:()=>ey,pow3:()=>ty,pow4:()=>ny,property:()=>n_,radians:()=>fv,rand:()=>fy,range:()=>nj,rangeFog:()=>XA,reciprocal:()=>Rv,reference:()=>Ex,referenceBuffer:()=>Dx,reflect:()=>Jv,reflectVector:()=>mx,reflectView:()=>fx,reflector:()=>RO,refract:()=>ly,refractVector:()=>hx,refractView:()=>px,reinhardToneMapping:()=>qj,remainder:()=>iv,remap:()=>$y,remapClamp:()=>eb,renderGroup:()=>Qg,renderOutput:()=>ob,rendererReference:()=>Ly,rgbShift:()=>Kk,rotate:()=>wE,rotateUV:()=>Oj,roughness:()=>o_,round:()=>Lv,rtt:()=>WO,sRGBToLinearSRGB:()=>Wj,sampler:()=>vb,saturate:()=>cy,saturation:()=>Ak,screen:()=>zj,screenCoordinate:()=>OC,screenSize:()=>DC,screenUV:()=>EC,scriptable:()=>KA,scriptableValue:()=>VA,select:()=>hy,sepia:()=>Uj,setCurrentStack:()=>Eg,shaderStages:()=>Ph,sharedUniformGroup:()=>Xg,sheen:()=>u_,sheenRoughness:()=>d_,shiftLeft:()=>nv,shiftRight:()=>rv,shininess:()=>x_,sign:()=>jv,sin:()=>wv,sinc:()=>wj,skinning:()=>eC,skinningReference:()=>tC,smoothstep:()=>uy,smoothstepElement:()=>my,sobel:()=>Bk,specularColor:()=>y_,specularF90:()=>b_,spherizeUV:()=>kj,split:()=>qg,spritesheetUV:()=>_O,sqrt:()=>vv,ssaaPass:()=>DA,stack:()=>_D,step:()=>qv,stereoPass:()=>AA,storage:()=>nk,storageBarrier:()=>uM,storageObject:()=>rk,storageTexture:()=>ak,string:()=>Ug,sub:()=>R_,subgroupIndex:()=>WS,subgroupSize:()=>sM,tan:()=>Ev,tangentGeometry:()=>Ax,tangentLocal:()=>jx,tangentView:()=>Mx,tangentWorld:()=>Nx,temp:()=>xy,texture:()=>gb,texture3D:()=>ME,textureBarrier:()=>dM,textureBicubic:()=>pT,textureCubeUV:()=>GT,textureLoad:()=>_b,textureSize:()=>fb,textureStore:()=>ok,thickness:()=>O_,threshold:()=>Fk,timerDelta:()=>lO,timerGlobal:()=>cO,timerLocal:()=>sO,toOutputColorSpace:()=>ky,toWorkingColorSpace:()=>Ay,toneMapping:()=>zy,toneMappingExposure:()=>By,toonOutlinePass:()=>zA,transformDirection:()=>ry,transformNormal:()=>lx,transformNormalToView:()=>ux,transformedBentNormalView:()=>Kx,transformedBitangentView:()=>Vx,transformedBitangentWorld:()=>Hx,transformedClearcoatNormalView:()=>cx,transformedNormalView:()=>ox,transformedNormalWorld:()=>sx,transformedTangentView:()=>Px,transformedTangentWorld:()=>Fx,transition:()=>yA,transmission:()=>D_,transpose:()=>Hv,tri:()=>Tj,tri3:()=>Ej,triNoise3D:()=>Dj,triplanarTexture:()=>SO,triplanarTextures:()=>xO,trunc:()=>zv,tslFn:()=>Tg,uint:()=>q,uniform:()=>Z,uniformArray:()=>Sx,uniformGroup:()=>Yg,uniforms:()=>Cx,userData:()=>ck,uv:()=>ub,uvec2:()=>Mg,uvec3:()=>Fg,uvec4:()=>Rg,varying:()=>Cy,varyingProperty:()=>r_,vec2:()=>J,vec3:()=>Y,vec4:()=>X,vectorComponents:()=>Fh,velocity:()=>Ij,vertexColor:()=>qO,vertexIndex:()=>HS,vibrance:()=>jk,viewZToOrthographicDepth:()=>WC,viewZToPerspectiveDepth:()=>KC,viewport:()=>kC,viewportBottomLeft:()=>FC,viewportCoordinate:()=>jC,viewportDepthTexture:()=>HC,viewportLinearDepth:()=>ZC,viewportMipTexture:()=>zC,viewportResolution:()=>NC,viewportSafeUV:()=>jj,viewportSharedTexture:()=>pk,viewportSize:()=>AC,viewportTexture:()=>RC,viewportTopLeft:()=>PC,viewportUV:()=>MC,wgsl:()=>YE,wgslFn:()=>eD,workgroupArray:()=>mM,workgroupBarrier:()=>lM,workgroupId:()=>aM,workingToColorSpace:()=>jy,xor:()=>Z_}),n=`169.19`,r={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},i={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},a=`attached`,o=`detached`,s=1e3,c=1001,l=1002,u=1003,d=1004,f=1004,p=1005,m=1005,h=1006,g=1007,_=1007,v=1008,y=1008,b=1009,x=1010,S=1011,C=1012,w=1013,T=1014,E=1015,D=1016,ee=1017,O=1018,te=1020,ne=35902,re=35899,ie=1021,ae=1022,oe=1023,se=1024,ce=1025,le=1026,ue=1027,de=1028,fe=1029,pe=1030,me=1031,he=1032,ge=1033,_e=33776,ve=33777,ye=33778,be=33779,xe=35840,Se=35841,k=35842,Ce=35843,we=36196,Te=37492,Ee=37496,De=37808,Oe=37809,ke=37810,Ae=37811,je=37812,Me=37813,Ne=37814,Pe=37815,Fe=37816,Ie=37817,Le=37818,Re=37819,ze=37820,Be=37821,Ve=36492,He=36494,Ue=36495,We=36283,Ge=36284,Ke=36285,qe=36286,Je=2200,Ye=2201,Xe=2202,Ze=2300,Qe=2301,$e=2302,et=2400,tt=2401,nt=2402,rt=2500,it=2501,at=3200,ot=3201,st=3202,ct=3203,lt=`srgb`,ut=`srgb-linear`,dt=`display-p3`,ft=`display-p3-linear`,pt=`linear`,mt=`srgb`,ht=`rec709`,gt=7680,_t=7681,vt=7682,yt=7683,bt=34055,xt=34056,St=5386,Ct=35044,wt=35048,Tt=35040,Et=35045,Dt=35049,Ot=35041,kt=35046,At=35050,jt=35042,Mt=`300 es`,Nt=2e3,Pt=2001,Ft=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){if(this._listeners===void 0)return!1;let n=this._listeners;return n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){if(this._listeners===void 0)return;let n=this._listeners[e];if(n!==void 0){let e=n.indexOf(t);e!==-1&&n.splice(e,1)}}dispatchEvent(e){if(this._listeners===void 0)return;let t=this._listeners[e.type];if(t!==void 0){e.target=this;let n=t.slice(0);for(let t=0,r=n.length;t>8&255]+It[e>>16&255]+It[e>>24&255]+`-`+It[t&255]+It[t>>8&255]+`-`+It[t>>16&15|64]+It[t>>24&255]+`-`+It[n&63|128]+It[n>>8&255]+`-`+It[n>>16&255]+It[n>>24&255]+It[r&255]+It[r>>8&255]+It[r>>16&255]+It[r>>24&255]).toLowerCase()}function Vt(e,t,n){return Math.max(t,Math.min(n,e))}function Ht(e,t){return(e%t+t)%t}function Ut(e,t,n,r,i){return r+(e-t)*(i-r)/(n-t)}function Wt(e,t,n){return e===t?0:(n-e)/(t-e)}function Gt(e,t,n){return(1-n)*e+n*t}function Kt(e,t,n,r){return Gt(e,t,1-Math.exp(-n*r))}function qt(e,t=1){return t-Math.abs(Ht(e,t*2)-t)}function Jt(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*(3-2*e))}function Yt(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*e*(e*(e*6-15)+10))}function Xt(e,t){return e+Math.floor(Math.random()*(t-e+1))}function Zt(e,t){return e+Math.random()*(t-e)}function Qt(e){return e*(.5-Math.random())}function $t(e){e!==void 0&&(Lt=e);let t=Lt+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function en(e){return e*Rt}function tn(e){return e*zt}function nn(e){return(e&e-1)==0&&e!==0}function rn(e){return 2**Math.ceil(Math.log(e)/Math.LN2)}function an(e){return 2**Math.floor(Math.log(e)/Math.LN2)}function on(e,t,n,r,i){let a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((t+r)/2),u=o((t+r)/2),d=a((t-r)/2),f=o((t-r)/2),p=a((r-t)/2),m=o((r-t)/2);switch(i){case`XYX`:e.set(s*u,c*d,c*f,s*l);break;case`YZY`:e.set(c*f,s*u,c*d,s*l);break;case`ZXZ`:e.set(c*d,c*f,s*u,s*l);break;case`XZX`:e.set(s*u,c*m,c*p,s*l);break;case`YXY`:e.set(c*p,s*u,c*m,s*l);break;case`ZYZ`:e.set(c*m,c*p,s*u,s*l);break;default:console.warn(`THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: `+i)}}function sn(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error(`Invalid component type.`)}}function cn(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(e*4294967295);case Uint16Array:return Math.round(e*65535);case Uint8Array:return Math.round(e*255);case Int32Array:return Math.round(e*2147483647);case Int16Array:return Math.round(e*32767);case Int8Array:return Math.round(e*127);default:throw Error(`Invalid component type.`)}}var ln={DEG2RAD:Rt,RAD2DEG:zt,generateUUID:Bt,clamp:Vt,euclideanModulo:Ht,mapLinear:Ut,inverseLerp:Wt,lerp:Gt,damp:Kt,pingpong:qt,smoothstep:Jt,smootherstep:Yt,randInt:Xt,randFloat:Zt,randFloatSpread:Qt,seededRandom:$t,degToRad:en,radToDeg:tn,isPowerOfTwo:nn,ceilPowerOfTwo:rn,floorPowerOfTwo:an,setQuaternionFromProperEuler:on,normalize:cn,denormalize:sn},A=class e{constructor(t=0,n=0){e.prototype.isVector2=!0,this.x=t,this.y=n}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Vt(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},j=class e{constructor(t,n,r,i,a,o,s,c,l){e.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(un.makeScale(e,t)),this}rotate(e){return this.premultiply(un.makeRotation(-e)),this}translate(e,t){return this.premultiply(un.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}},un=new j;function dn(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}var fn={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function pn(e,t){return new fn[e](t)}function mn(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}function hn(){let e=mn(`canvas`);return e.style.display=`block`,e}var gn={};function _n(e){e in gn||(gn[e]=!0,console.warn(e))}function vn(e,t,n){return new Promise(function(r,i){function a(){switch(e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0)){case e.WAIT_FAILED:i();break;case e.TIMEOUT_EXPIRED:setTimeout(a,n);break;default:r()}}setTimeout(a,n)})}function yn(e){let t=e.elements;t[2]=.5*t[2]+.5*t[3],t[6]=.5*t[6]+.5*t[7],t[10]=.5*t[10]+.5*t[11],t[14]=.5*t[14]+.5*t[15]}function bn(e){let t=e.elements;t[11]===-1?(t[10]=-t[10]-1,t[14]=-t[14]):(t[10]=-t[10],t[14]=-t[14]+1)}var xn=new j().set(.8224621,.177538,0,.0331941,.9668058,0,.0170827,.0723974,.9105199),Sn=new j().set(1.2249401,-.2249404,0,-.0420569,1.0420571,0,-.0196376,-.0786361,1.0982735),Cn={[ut]:{transfer:pt,primaries:ht,luminanceCoefficients:[.2126,.7152,.0722],toReference:e=>e,fromReference:e=>e},[lt]:{transfer:mt,primaries:ht,luminanceCoefficients:[.2126,.7152,.0722],toReference:e=>e.convertSRGBToLinear(),fromReference:e=>e.convertLinearToSRGB()},[ft]:{transfer:pt,primaries:`p3`,luminanceCoefficients:[.2289,.6917,.0793],toReference:e=>e.applyMatrix3(Sn),fromReference:e=>e.applyMatrix3(xn)},[dt]:{transfer:mt,primaries:`p3`,luminanceCoefficients:[.2289,.6917,.0793],toReference:e=>e.convertSRGBToLinear().applyMatrix3(Sn),fromReference:e=>e.applyMatrix3(xn).convertLinearToSRGB()}},wn=new Set([ut,ft]),Tn={enabled:!0,_workingColorSpace:ut,get workingColorSpace(){return this._workingColorSpace},set workingColorSpace(e){if(!wn.has(e))throw Error(`Unsupported working color space, "${e}".`);this._workingColorSpace=e},convert:function(e,t,n){if(this.enabled===!1||t===n||!t||!n)return e;let r=Cn[t].toReference,i=Cn[n].fromReference;return i(r(e))},fromWorkingColorSpace:function(e,t){return this.convert(e,this._workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this._workingColorSpace)},getPrimaries:function(e){return Cn[e].primaries},getTransfer:function(e){return e===``?pt:Cn[e].transfer},getLuminanceCoefficients:function(e,t=this._workingColorSpace){return e.fromArray(Cn[t].luminanceCoefficients)}};function En(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function Dn(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}var On,kn=class{static getDataURL(e){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let t;if(e instanceof HTMLCanvasElement)t=e;else{On===void 0&&(On=mn(`canvas`)),On.width=e.width,On.height=e.height;let n=On.getContext(`2d`);e instanceof ImageData?n.putImageData(e,0,0):n.drawImage(e,0,0,e.width,e.height),t=On}return t.width>2048||t.height>2048?(console.warn(`THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons`,e),t.toDataURL(`image/jpeg`,.6)):t.toDataURL(`image/png`)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=mn(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case s:e.x-=Math.floor(e.x);break;case c:e.x=e.x<0?0:1;break;case l:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case s:e.y-=Math.floor(e.y);break;case c:e.y=e.y<0?0:1;break;case l:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Pn.DEFAULT_IMAGE=null,Pn.DEFAULT_MAPPING=300,Pn.DEFAULT_ANISOTROPY=4;var Fn=class e{constructor(t=0,n=0,r=0,i=1){e.prototype.isVector4=!0,this.x=t,this.y=n,this.z=r,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)s&&e>_?e_?s=0?1:-1,r=1-t*t;if(r>2**-52){let i=Math.sqrt(r),a=Math.atan2(i,t*n);e=Math.sin(e*a)/i,o=Math.sin(o*a)/i}let i=o*n;if(s=s*e+d*i,c=c*e+f*i,l=l*e+p*i,u=u*e+m*i,e===1-o){let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:console.warn(`THREE.Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<2**-52?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Vt(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);let n=this._x,r=this._y,i=this._z,a=this._w,o=a*e._w+n*e._x+r*e._y+i*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=a,this._x=n,this._y=r,this._z=i,this;let s=1-o*o;if(s<=2**-52){let e=1-t;return this._w=e*a+t*this._w,this._x=e*n+t*this._x,this._y=e*r+t*this._y,this._z=e*i+t*this._z,this.normalize(),this}let c=Math.sqrt(s),l=Math.atan2(c,o),u=Math.sin((1-t)*l)/c,d=Math.sin(t*l)/c;return this._w=a*u+this._w*d,this._x=n*u+this._x*d,this._y=r*u+this._y*d,this._z=i*u+this._z*d,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},M=class e{constructor(t=0,n=0,r=0){e.prototype.isVector3=!0,this.x=t,this.y=n,this.z=r}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Wn.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Wn.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return Un.copy(this).projectOnVector(e),this.sub(Un)}reflect(e){return this.sub(Un.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Vt(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},Un=new M,Wn=new Hn,Gn=class{constructor(e=new M(1/0,1/0,1/0),t=new M(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,qn),qn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(tr),nr.subVectors(this.max,tr),Yn.subVectors(e.a,tr),Xn.subVectors(e.b,tr),Zn.subVectors(e.c,tr),Qn.subVectors(Xn,Yn),$n.subVectors(Zn,Xn),er.subVectors(Yn,Zn);let t=[0,-Qn.z,Qn.y,0,-$n.z,$n.y,0,-er.z,er.y,Qn.z,0,-Qn.x,$n.z,0,-$n.x,er.z,0,-er.x,-Qn.y,Qn.x,0,-$n.y,$n.x,0,-er.y,er.x,0];return!ar(t,Yn,Xn,Zn,nr)||(t=[1,0,0,0,1,0,0,0,1],!ar(t,Yn,Xn,Zn,nr))?!1:(rr.crossVectors(Qn,$n),t=[rr.x,rr.y,rr.z],ar(t,Yn,Xn,Zn,nr))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,qn).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(qn).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(Kn[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),Kn[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),Kn[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),Kn[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),Kn[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),Kn[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),Kn[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),Kn[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(Kn),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},Kn=[new M,new M,new M,new M,new M,new M,new M,new M],qn=new M,Jn=new Gn,Yn=new M,Xn=new M,Zn=new M,Qn=new M,$n=new M,er=new M,tr=new M,nr=new M,rr=new M,ir=new M;function ar(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){ir.fromArray(e,a);let o=i.x*Math.abs(ir.x)+i.y*Math.abs(ir.y)+i.z*Math.abs(ir.z),s=t.dot(ir),c=n.dot(ir),l=r.dot(ir);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}var or=new Gn,sr=new M,cr=new M,lr=class{constructor(e=new M,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let n=this.center;t===void 0?or.setFromPoints(e).getCenter(n):n.copy(t);let r=0;for(let t=0,i=e.length;tthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius*=e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;sr.subVectors(e,this.center);let t=sr.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),n=(e-this.radius)*.5;this.center.addScaledVector(sr,n/e),this.radius+=n}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(cr.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(sr.copy(e.center).add(cr)),this.expandByPoint(sr.copy(e.center).sub(cr))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}},ur=new M,dr=new M,fr=new M,pr=new M,mr=new M,hr=new M,gr=new M,_r=class{constructor(e=new M,t=new M(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,ur)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=ur.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(ur.copy(this.origin).addScaledVector(this.direction,t),ur.distanceToSquared(e))}distanceSqToSegment(e,t,n,r){dr.copy(e).add(t).multiplyScalar(.5),fr.copy(t).sub(e).normalize(),pr.copy(this.origin).sub(dr);let i=e.distanceTo(t)*.5,a=-this.direction.dot(fr),o=pr.dot(this.direction),s=-pr.dot(fr),c=pr.lengthSq(),l=Math.abs(1-a*a),u,d,f,p;if(l>0)if(u=a*s-o,d=a*o-s,p=i*l,u>=0)if(d>=-p)if(d<=p){let e=1/l;u*=e,d*=e,f=u*(u+a*d+2*o)+d*(a*u+d+2*s)+c}else d=i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d=-i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d<=-p?(u=Math.max(0,-(-a*i+o)),d=u>0?-i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c):d<=p?(u=0,d=Math.min(Math.max(-i,-s),i),f=d*(d+2*s)+c):(u=Math.max(0,-(a*i+o)),d=u>0?i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c);else d=a>0?-i:i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,u),r&&r.copy(dr).addScaledVector(fr,d),f}intersectSphere(e,t){ur.subVectors(e.center,this.origin);let n=ur.dot(this.direction),r=ur.dot(ur)-n*n,i=e.radius*e.radius;if(r>i)return null;let a=Math.sqrt(i-r),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,t):this.at(o,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,d=this.origin;return c>=0?(n=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(n=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),l>=0?(i=(e.min.y-d.y)*l,a=(e.max.y-d.y)*l):(i=(e.max.y-d.y)*l,a=(e.min.y-d.y)*l),n>a||i>r||((i>n||isNaN(n))&&(n=i),(a=0?(o=(e.min.z-d.z)*u,s=(e.max.z-d.z)*u):(o=(e.max.z-d.z)*u,s=(e.min.z-d.z)*u),n>s||o>r)||((o>n||n!==n)&&(n=o),(s=0?n:r,t)}intersectsBox(e){return this.intersectBox(e,ur)!==null}intersectTriangle(e,t,n,r,i){mr.subVectors(t,e),hr.subVectors(n,e),gr.crossVectors(mr,hr);let a=this.direction.dot(gr),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;pr.subVectors(this.origin,e);let s=o*this.direction.dot(hr.crossVectors(pr,hr));if(s<0)return null;let c=o*this.direction.dot(mr.cross(pr));if(c<0||s+c>a)return null;let l=-o*pr.dot(gr);return l<0?null:this.at(l/a,i)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},N=class e{constructor(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g){e.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,n=e.elements,r=1/vr.setFromMatrixColumn(e,0).length(),i=1/vr.setFromMatrixColumn(e,1).length(),a=1/vr.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(br,e,xr)}lookAt(e,t,n){let r=this.elements;return wr.subVectors(e,t),wr.lengthSq()===0&&(wr.z=1),wr.normalize(),Sr.crossVectors(n,wr),Sr.lengthSq()===0&&(Math.abs(n.z)===1?wr.x+=1e-4:wr.z+=1e-4,wr.normalize(),Sr.crossVectors(n,wr)),Sr.normalize(),Cr.crossVectors(wr,Sr),r[0]=Sr.x,r[4]=Cr.x,r[8]=wr.x,r[1]=Sr.y,r[5]=Cr.y,r[9]=wr.y,r[2]=Sr.z,r[6]=Cr.z,r[10]=wr.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],w=r[12],T=r[1],E=r[5],D=r[9],ee=r[13],O=r[2],te=r[6],ne=r[10],re=r[14],ie=r[3],ae=r[7],oe=r[11],se=r[15];return i[0]=a*x+o*T+s*O+c*ie,i[4]=a*S+o*E+s*te+c*ae,i[8]=a*C+o*D+s*ne+c*oe,i[12]=a*w+o*ee+s*re+c*se,i[1]=l*x+u*T+d*O+f*ie,i[5]=l*S+u*E+d*te+f*ae,i[9]=l*C+u*D+d*ne+f*oe,i[13]=l*w+u*ee+d*re+f*se,i[2]=p*x+m*T+h*O+g*ie,i[6]=p*S+m*E+h*te+g*ae,i[10]=p*C+m*D+h*ne+g*oe,i[14]=p*w+m*ee+h*re+g*se,i[3]=_*x+v*T+y*O+b*ie,i[7]=_*S+v*E+y*te+b*ae,i[11]=_*C+v*D+y*ne+b*oe,i[15]=_*w+v*ee+y*re+b*se,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15];return p*(+i*s*u-r*c*u-i*o*d+n*c*d+r*o*f-n*s*f)+m*(+t*s*f-t*c*d+i*a*d-r*a*f+r*c*l-i*s*l)+h*(+t*c*u-t*o*f-i*a*u+n*a*f+i*o*l-n*c*l)+g*(-r*o*l-t*s*u+t*o*d+r*a*u-n*a*d+n*s*l)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=u*h*c-m*d*c+m*s*f-o*h*f-u*s*g+o*d*g,v=p*d*c-l*h*c-p*s*f+a*h*f+l*s*g-a*d*g,y=l*m*c-p*u*c+p*o*f-a*m*f-l*o*g+a*u*g,b=p*u*s-l*m*s-p*o*d+a*m*d+l*o*h-a*u*h,x=t*_+n*v+r*y+i*b;if(x===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let S=1/x;return e[0]=_*S,e[1]=(m*d*i-u*h*i-m*r*f+n*h*f+u*r*g-n*d*g)*S,e[2]=(o*h*i-m*s*i+m*r*c-n*h*c-o*r*g+n*s*g)*S,e[3]=(u*s*i-o*d*i-u*r*c+n*d*c+o*r*f-n*s*f)*S,e[4]=v*S,e[5]=(l*h*i-p*d*i+p*r*f-t*h*f-l*r*g+t*d*g)*S,e[6]=(p*s*i-a*h*i-p*r*c+t*h*c+a*r*g-t*s*g)*S,e[7]=(a*d*i-l*s*i+l*r*c-t*d*c-a*r*f+t*s*f)*S,e[8]=y*S,e[9]=(p*u*i-l*m*i-p*n*f+t*m*f+l*n*g-t*u*g)*S,e[10]=(a*m*i-p*o*i+p*n*c-t*m*c-a*n*g+t*o*g)*S,e[11]=(l*o*i-a*u*i-l*n*c+t*u*c+a*n*f-t*o*f)*S,e[12]=b*S,e[13]=(l*m*r-p*u*r+p*n*d-t*m*d-l*n*h+t*u*h)*S,e[14]=(p*o*r-a*m*r-p*n*s+t*m*s+a*n*h-t*o*h)*S,e[15]=(a*u*r-l*o*r+l*n*s-t*u*s-a*n*d+t*o*d)*S,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements,i=vr.set(r[0],r[1],r[2]).length(),a=vr.set(r[4],r[5],r[6]).length(),o=vr.set(r[8],r[9],r[10]).length();this.determinant()<0&&(i=-i),e.x=r[12],e.y=r[13],e.z=r[14],yr.copy(this);let s=1/i,c=1/a,l=1/o;return yr.elements[0]*=s,yr.elements[1]*=s,yr.elements[2]*=s,yr.elements[4]*=c,yr.elements[5]*=c,yr.elements[6]*=c,yr.elements[8]*=l,yr.elements[9]*=l,yr.elements[10]*=l,t.setFromRotationMatrix(yr),n.x=i,n.y=a,n.z=o,this}makePerspective(e,t,n,r,i,a,o=Nt){let s=this.elements,c=2*i/(t-e),l=2*i/(n-r),u=(t+e)/(t-e),d=(n+r)/(n-r),f,p;if(o===2e3)f=-(a+i)/(a-i),p=-2*a*i/(a-i);else if(o===2001)f=-a/(a-i),p=-a*i/(a-i);else throw Error(`THREE.Matrix4.makePerspective(): Invalid coordinate system: `+o);return s[0]=c,s[4]=0,s[8]=u,s[12]=0,s[1]=0,s[5]=l,s[9]=d,s[13]=0,s[2]=0,s[6]=0,s[10]=f,s[14]=p,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=Nt){let s=this.elements,c=1/(t-e),l=1/(n-r),u=1/(a-i),d=(t+e)*c,f=(n+r)*l,p,m;if(o===2e3)p=(a+i)*u,m=-2*u;else if(o===2001)p=i*u,m=-1*u;else throw Error(`THREE.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return s[0]=2*c,s[4]=0,s[8]=0,s[12]=-d,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-f,s[2]=0,s[6]=0,s[10]=m,s[14]=-p,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}},vr=new M,yr=new N,br=new M(0,0,0),xr=new M(1,1,1),Sr=new M,Cr=new M,wr=new M,Tr=new N,Er=new Hn,Dr=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(Vt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-Vt(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(Vt(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-Vt(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(Vt(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-Vt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:console.warn(`THREE.Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return Tr.makeRotationFromQuaternion(e),this.setFromRotationMatrix(Tr,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Er.setFromEuler(this),this.setFromQuaternion(Er,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Dr.DEFAULT_ORDER=`XYZ`;var Or=class{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<1){for(let e=0;e1){for(let e=0;e0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.visibility=this._visibility,r.active=this._active,r.bounds=this._bounds.map(e=>({boxInitialized:e.boxInitialized,boxMin:e.box.min.toArray(),boxMax:e.box.max.toArray(),sphereInitialized:e.sphereInitialized,sphereRadius:e.sphere.radius,sphereCenter:e.sphere.center.toArray()})),r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.geometryCount=this._geometryCount,r.matricesTexture=this._matricesTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere={center:r.boundingSphere.center.toArray(),radius:r.boundingSphere.radius}),this.boundingBox!==null&&(r.boundingBox={min:r.boundingBox.min.toArray(),max:r.boundingBox.max.toArray()}));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t0){r.children=[];for(let t=0;t0){r.animations=[];for(let t=0;t0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}static getBarycoord(e,t,n,r,i){Gr.subVectors(r,t),Kr.subVectors(n,t),qr.subVectors(e,t);let a=Gr.dot(Gr),o=Gr.dot(Kr),s=Gr.dot(qr),c=Kr.dot(Kr),l=Kr.dot(qr),u=a*c-o*o;if(u===0)return i.set(0,0,0),null;let d=1/u,f=(c*s-o*l)*d,p=(a*l-o*s)*d;return i.set(1-f-p,p,f)}static containsPoint(e,t,n,r){return this.getBarycoord(e,t,n,r,Jr)===null?!1:Jr.x>=0&&Jr.y>=0&&Jr.x+Jr.y<=1}static getInterpolation(e,t,n,r,i,a,o,s){return this.getBarycoord(e,t,n,r,Jr)===null?(s.x=0,s.y=0,`z`in s&&(s.z=0),`w`in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(i,Jr.x),s.addScaledVector(a,Jr.y),s.addScaledVector(o,Jr.z),s)}static getInterpolatedAttribute(e,t,n,r,i,a){return ti.setScalar(0),ni.setScalar(0),ri.setScalar(0),ti.fromBufferAttribute(e,t),ni.fromBufferAttribute(e,n),ri.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(ti,i.x),a.addScaledVector(ni,i.y),a.addScaledVector(ri,i.z),a}static isFrontFacing(e,t,n,r){return Gr.subVectors(n,t),Kr.subVectors(e,t),Gr.cross(Kr).dot(r)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,r){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,n,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Gr.subVectors(this.c,this.b),Kr.subVectors(this.a,this.b),Gr.cross(Kr).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return e.getNormal(this.a,this.b,this.c,t)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,n){return e.getBarycoord(t,this.a,this.b,this.c,n)}getInterpolation(t,n,r,i,a){return e.getInterpolation(t,this.a,this.b,this.c,n,r,i,a)}containsPoint(t){return e.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return e.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,r=this.b,i=this.c,a,o;Yr.subVectors(r,n),Xr.subVectors(i,n),Qr.subVectors(e,n);let s=Yr.dot(Qr),c=Xr.dot(Qr);if(s<=0&&c<=0)return t.copy(n);$r.subVectors(e,r);let l=Yr.dot($r),u=Xr.dot($r);if(l>=0&&u<=l)return t.copy(r);let d=s*u-l*c;if(d<=0&&s>=0&&l<=0)return a=s/(s-l),t.copy(n).addScaledVector(Yr,a);ei.subVectors(e,i);let f=Yr.dot(ei),p=Xr.dot(ei);if(p>=0&&f<=p)return t.copy(i);let m=f*c-s*p;if(m<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(n).addScaledVector(Xr,o);let h=l*p-f*u;if(h<=0&&u-l>=0&&f-p>=0)return Zr.subVectors(i,r),o=(u-l)/(u-l+(f-p)),t.copy(r).addScaledVector(Zr,o);let g=1/(h+m+d);return a=m*g,o=d*g,t.copy(n).addScaledVector(Yr,a).addScaledVector(Xr,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},ai={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},oi={h:0,s:0,l:0},si={h:0,s:0,l:0};function ci(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var P=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=lt){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,Tn.toWorkingColorSpace(this,t),this}setRGB(e,t,n,r=Tn.workingColorSpace){return this.r=e,this.g=t,this.b=n,Tn.toWorkingColorSpace(this,r),this}setHSL(e,t,n,r=Tn.workingColorSpace){if(e=Ht(e,1),t=Vt(t,0,1),n=Vt(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=ci(i,r,e+1/3),this.g=ci(i,r,e),this.b=ci(i,r,e-1/3)}return Tn.toWorkingColorSpace(this,r),this}setStyle(e,t=lt){function n(t){t!==void 0&&parseFloat(t)<1&&console.warn(`THREE.Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:console.warn(`THREE.Color: Unknown color model `+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);console.warn(`THREE.Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=lt){let n=ai[e.toLowerCase()];return n===void 0?console.warn(`THREE.Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=En(e.r),this.g=En(e.g),this.b=En(e.b),this}copyLinearToSRGB(e){return this.r=Dn(e.r),this.g=Dn(e.g),this.b=Dn(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=lt){return Tn.fromWorkingColorSpace(li.copy(this),e),Math.round(Vt(li.r*255,0,255))*65536+Math.round(Vt(li.g*255,0,255))*256+Math.round(Vt(li.b*255,0,255))}getHexString(e=lt){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=Tn.workingColorSpace){Tn.fromWorkingColorSpace(li.copy(this),t);let n=li.r,r=li.g,i=li.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r0!=e>0&&this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let n=e[t];if(n===void 0){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}r&&r.isColor?r.set(n):r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;t&&(e={textures:{},images:{}});let n={metadata:{version:4.6,type:`Material`,generator:`Material.toJSON`}};n.uuid=this.uuid,n.type=this.type,this.name!==``&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.shadowSide!==null&&(n.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==1&&(n.blending=this.blending),this.side!==0&&(n.side=this.side),this.vertexColors===!0&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.transparent===!0&&(n.transparent=!0),this.blendSrc!==204&&(n.blendSrc=this.blendSrc),this.blendDst!==205&&(n.blendDst=this.blendDst),this.blendEquation!==100&&(n.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(n.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(n.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(n.blendAlpha=this.blendAlpha),this.depthFunc!==3&&(n.depthFunc=this.depthFunc),this.depthTest===!1&&(n.depthTest=this.depthTest),this.depthWrite===!1&&(n.depthWrite=this.depthWrite),this.colorWrite===!1&&(n.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(n.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==519&&(n.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(n.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==7680&&(n.stencilFail=this.stencilFail),this.stencilZFail!==7680&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==7680&&(n.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(n.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(n.rotation=this.rotation),this.polygonOffset===!0&&(n.polygonOffset=!0),this.polygonOffsetFactor!==0&&(n.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(n.linewidth=this.linewidth),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.dithering===!0&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),this.alphaHash===!0&&(n.alphaHash=!0),this.alphaToCoverage===!0&&(n.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(n.premultipliedAlpha=!0),this.forceSinglePass===!0&&(n.forceSinglePass=!0),this.wireframe===!0&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!==`round`&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!==`round`&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(n.flatShading=!0),this.visible===!1&&(n.visible=!1),this.toneMapped===!1&&(n.toneMapped=!1),this.fog===!1&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData);function r(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(t){let t=r(e.textures),i=r(e.images);t.length>0&&(n.textures=t),i.length>0&&(n.images=i)}return n}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(t!==null){let e=t.length;n=Array(e);for(let r=0;r!==e;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:`dispose`})}set needsUpdate(e){e===!0&&this.version++}},fi=class extends di{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type=`MeshBasicMaterial`,this.color=new P(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Dr,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},pi=mi();function mi(){let e=new ArrayBuffer(4),t=new Float32Array(e),n=new Uint32Array(e),r=new Uint32Array(512),i=new Uint32Array(512);for(let e=0;e<256;++e){let t=e-127;t<-27?(r[e]=0,r[e|256]=32768,i[e]=24,i[e|256]=24):t<-14?(r[e]=1024>>-t-14,r[e|256]=1024>>-t-14|32768,i[e]=-t-1,i[e|256]=-t-1):t<=15?(r[e]=t+15<<10,r[e|256]=t+15<<10|32768,i[e]=13,i[e|256]=13):t<128?(r[e]=31744,r[e|256]=64512,i[e]=24,i[e|256]=24):(r[e]=31744,r[e|256]=64512,i[e]=13,i[e|256]=13)}let a=new Uint32Array(2048),o=new Uint32Array(64),s=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,n=0;for(;!(t&8388608);)t<<=1,n-=8388608;t&=-8388609,n+=947912704,a[e]=t|n}for(let e=1024;e<2048;++e)a[e]=939524096+(e-1024<<13);for(let e=1;e<31;++e)o[e]=e<<23;o[31]=1199570944,o[32]=2147483648;for(let e=33;e<63;++e)o[e]=2147483648+(e-32<<23);o[63]=3347054592;for(let e=1;e<64;++e)e!==32&&(s[e]=1024);return{floatView:t,uint32View:n,baseTable:r,shiftTable:i,mantissaTable:a,exponentTable:o,offsetTable:s}}function hi(e){Math.abs(e)>65504&&console.warn(`THREE.DataUtils.toHalfFloat(): Value out of range.`),e=Vt(e,-65504,65504),pi.floatView[0]=e;let t=pi.uint32View[0],n=t>>23&511;return pi.baseTable[n]+((t&8388607)>>pi.shiftTable[n])}function gi(e){let t=e>>10;return pi.uint32View[0]=pi.mantissaTable[pi.offsetTable[t]+(e&1023)]+pi.exponentTable[t],pi.floatView[0]}var _i={toHalfFloat:hi,fromHalfFloat:gi},vi=new M,yi=new A,bi=class{constructor(e,t,n=!1){if(Array.isArray(e))throw TypeError(`THREE.BufferAttribute: array should be a Typed Array.`);this.isBufferAttribute=!0,this.name=``,this.array=e,this.itemSize=t,this.count=e===void 0?0:e.length/t,this.normalized=n,this.usage=Ct,this.updateRanges=[],this.gpuType=E,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let r=0,i=this.itemSize;r0&&(e.userData=this.userData),this.parameters!==void 0){let t=this.parameters;for(let n in t)t[n]!==void 0&&(e[n]=t[n]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let t in n){let r=n[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},i=!1;for(let t in this.morphAttributes){let n=this.morphAttributes[t],a=[];for(let t=0,r=n.length;t0&&(r[t]=a,i=!0)}i&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return o!==null&&(e.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;n!==null&&this.setIndex(n.clone(t));let r=e.attributes;for(let e in r){let n=r[e];this.setAttribute(e,n.clone(t))}let i=e.morphAttributes;for(let e in i){let n=[],r=i[e];for(let e=0,i=r.length;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e(e.far-e.near)**2))&&(Li.copy(i).invert(),Ri.copy(e.ray).applyMatrix4(Li),!(n.boundingBox!==null&&Ri.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(e,t,Ri)))}_computeIntersections(e,t,n){let r,i=this.geometry,a=this.material,o=i.index,s=i.attributes.position,c=i.attributes.uv,l=i.attributes.uv1,u=i.attributes.normal,d=i.groups,f=i.drawRange;if(o!==null)if(Array.isArray(a))for(let i=0,s=d.length;in.far?null:{distance:l,point:qi.clone(),object:e}}function Xi(e,t,n,r,i,a,o,s,c,l){e.getVertexPosition(s,Vi),e.getVertexPosition(c,Hi),e.getVertexPosition(l,Ui);let u=Yi(e,t,n,r,Vi,Hi,Ui,Ki);if(u){let e=new M;ii.getBarycoord(Ki,Vi,Hi,Ui,e),i&&(u.uv=ii.getInterpolatedAttribute(i,s,c,l,e,new A)),a&&(u.uv1=ii.getInterpolatedAttribute(a,s,c,l,e,new A)),o&&(u.normal=ii.getInterpolatedAttribute(o,s,c,l,e,new M),u.normal.dot(r.direction)>0&&u.normal.multiplyScalar(-1));let t={a:s,b:c,c:l,normal:new M,materialIndex:0};ii.getNormal(Vi,Hi,Ui,t.normal),u.face=t,u.barycoord=e}return u}var Zi=class e extends Ii{constructor(e=1,t=1,n=1,r=1,i=1,a=1){super(),this.type=`BoxGeometry`,this.parameters={width:e,height:t,depth:n,widthSegments:r,heightSegments:i,depthSegments:a};let o=this;r=Math.floor(r),i=Math.floor(i),a=Math.floor(a);let s=[],c=[],l=[],u=[],d=0,f=0;p(`z`,`y`,`x`,-1,-1,n,t,e,a,i,0),p(`z`,`y`,`x`,1,-1,n,t,-e,a,i,1),p(`x`,`z`,`y`,1,1,e,n,t,r,a,2),p(`x`,`z`,`y`,1,-1,e,n,-t,r,a,3),p(`x`,`y`,`z`,1,-1,e,t,n,r,i,4),p(`x`,`y`,`z`,-1,-1,e,t,-n,r,i,5),this.setIndex(s),this.setAttribute(`position`,new F(c,3)),this.setAttribute(`normal`,new F(l,3)),this.setAttribute(`uv`,new F(u,2));function p(e,t,n,r,i,a,p,m,h,g,_){let v=a/h,y=p/g,b=a/2,x=p/2,S=m/2,C=h+1,w=g+1,T=0,E=0,D=new M;for(let a=0;a0?1:-1,l.push(D.x,D.y,D.z),u.push(s/h),u.push(1-a/g),T+=1}for(let e=0;e0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let n={};for(let e in this.extensions)this.extensions[e]===!0&&(n[e]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}},oa=new M,sa=new Hn,ca=new M,la=class extends Wr{constructor(){super(),this.isCamera=!0,this.type=`Camera`,this.matrixWorldInverse=new N,this.projectionMatrix=new N,this.projectionMatrixInverse=new N,this.coordinateSystem=Nt}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorld.decompose(oa,sa,ca),ca.x===1&&ca.y===1&&ca.z===1?this.matrixWorldInverse.copy(this.matrixWorld).invert():this.matrixWorldInverse.compose(oa,sa,ca.set(1,1,1)).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorld.decompose(oa,sa,ca),ca.x===1&&ca.y===1&&ca.z===1?this.matrixWorldInverse.copy(this.matrixWorld).invert():this.matrixWorldInverse.compose(oa,sa,ca.set(1,1,1)).invert()}clone(){return new this.constructor().copy(this)}},ua=new M,da=new A,fa=new A,pa=class extends la{constructor(e=50,t=1,n=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type=`PerspectiveCamera`,this.fov=e,this.zoom=1,this.near=n,this.far=r,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=zt*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(Rt*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return zt*2*Math.atan(Math.tan(Rt*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,n){ua.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(ua.x,ua.y).multiplyScalar(-e/ua.z),ua.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(ua.x,ua.y).multiplyScalar(-e/ua.z)}getViewSize(e,t){return this.getViewBounds(e,da,fa),t.subVectors(fa,da)}setViewOffset(e,t,n,r,i,a){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(Rt*.5*this.fov)/this.zoom,n=2*t,r=this.aspect*n,i=-.5*r,a=this.view;if(this.view!==null&&this.view.enabled){let e=a.fullWidth,o=a.fullHeight;i+=a.offsetX*r/e,t-=a.offsetY*n/o,r*=a.width/e,n*=a.height/o}let o=this.filmOffset;o!==0&&(i+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(i,i+r,t,t-n,e,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}},ma=-90,ha=1,ga=class extends Wr{constructor(e,t,n){super(),this.type=`CubeCamera`,this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new pa(ma,ha,e,t);r.layers=this.layers,this.add(r);let i=new pa(ma,ha,e,t);i.layers=this.layers,this.add(i);let a=new pa(ma,ha,e,t);a.layers=this.layers,this.add(a);let o=new pa(ma,ha,e,t);o.layers=this.layers,this.add(o);let s=new pa(ma,ha,e,t);s.layers=this.layers,this.add(s);let c=new pa(ma,ha,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[n,r,i,a,o,s]=t;for(let e of t)this.remove(e);if(e===2e3)n.up.set(0,1,0),n.lookAt(1,0,0),r.up.set(0,1,0),r.lookAt(-1,0,0),i.up.set(0,0,-1),i.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),s.up.set(0,1,0),s.lookAt(0,0,-1);else if(e===2001)n.up.set(0,-1,0),n.lookAt(-1,0,0),r.up.set(0,-1,0),r.lookAt(1,0,0),i.up.set(0,0,1),i.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),s.up.set(0,-1,0),s.lookAt(0,0,-1);else throw Error(`THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: `+e);for(let e of t)this.add(e),e.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();let{renderTarget:n,activeMipmapLevel:r}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[i,a,o,s,c,l]=this.children,u=e.getRenderTarget(),d=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;let m=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,e.setRenderTarget(n,0,r),e.render(t,i),e.setRenderTarget(n,1,r),e.render(t,a),e.setRenderTarget(n,2,r),e.render(t,o),e.setRenderTarget(n,3,r),e.render(t,s),e.setRenderTarget(n,4,r),e.render(t,c),n.texture.generateMipmaps=m,e.setRenderTarget(n,5,r),e.render(t,l),e.setRenderTarget(u,d,f),e.xr.enabled=p,n.texture.needsPMREMUpdate=!0}},_a=class extends Pn{constructor(e,t,n,r,i,a,o,s,c,l){e=e===void 0?[]:e,t=t===void 0?301:t,super(e,t,n,r,i,a,o,s,c,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},va=class extends Ln{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let n={width:e,height:e,depth:1};this.texture=new _a([n,n,n,n,n,n],t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=t.generateMipmaps===void 0?!1:t.generateMipmaps,this.texture.minFilter=t.minFilter===void 0?h:t.minFilter}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let n={uniforms:{tEquirect:{value:null}},vertexShader:` - - varying vec3 vWorldDirection; - - vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); - - } - - void main() { - - vWorldDirection = transformDirection( position, modelMatrix ); - - #include - #include - - } - `,fragmentShader:` - - uniform sampler2D tEquirect; - - varying vec3 vWorldDirection; - - #include - - void main() { - - vec3 direction = normalize( vWorldDirection ); - - vec2 sampleUV = equirectUv( direction ); - - gl_FragColor = texture2D( tEquirect, sampleUV ); - - } - `},r=new Zi(5,5,5),i=new aa({name:`CubemapFromEquirect`,uniforms:Qi(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});i.uniforms.tEquirect.value=t;let a=new Ji(r,i),o=t.minFilter;return t.minFilter===1008&&(t.minFilter=h),new ga(1,10,this).update(e,a),t.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(e,t,n,r){let i=e.getRenderTarget();for(let i=0;i<6;i++)e.setRenderTarget(this,i),e.clear(t,n,r);e.setRenderTarget(i)}},ya=new M,ba=new M,xa=new j,Sa=class{constructor(e=new M(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,n,r){return this.normal.set(e,t,n),this.constant=r,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,n){let r=ya.subVectors(n,t).cross(ba.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(r,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){let e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectLine(e,t){let n=e.delta(ya),r=this.normal.dot(n);if(r===0)return this.distanceToPoint(e.start)===0?t.copy(e.start):null;let i=-(e.start.dot(this.normal)+this.constant)/r;return i<0||i>1?null:t.copy(e.start).addScaledVector(n,i)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||xa.getNormalMatrix(e),r=this.coplanarPoint(ya).applyMatrix4(e),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}},Ca=new lr,wa=new M,Ta=class{constructor(e=new Sa,t=new Sa,n=new Sa,r=new Sa,i=new Sa,a=new Sa){this.planes=[e,t,n,r,i,a]}set(e,t,n,r,i,a){let o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(n),o[3].copy(r),o[4].copy(i),o[5].copy(a),this}copy(e){let t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=Nt){let n=this.planes,r=e.elements,i=r[0],a=r[1],o=r[2],s=r[3],c=r[4],l=r[5],u=r[6],d=r[7],f=r[8],p=r[9],m=r[10],h=r[11],g=r[12],_=r[13],v=r[14],y=r[15];if(n[0].setComponents(s-i,d-c,h-f,y-g).normalize(),n[1].setComponents(s+i,d+c,h+f,y+g).normalize(),n[2].setComponents(s+a,d+l,h+p,y+_).normalize(),n[3].setComponents(s-a,d-l,h-p,y-_).normalize(),n[4].setComponents(s-o,d-u,h-m,y-v).normalize(),t===2e3)n[5].setComponents(s+o,d+u,h+m,y+v).normalize();else if(t===2001)n[5].setComponents(o,u,m,v).normalize();else throw Error(`THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: `+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),Ca.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),Ca.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(Ca)}intersectsSprite(e){return Ca.center.set(0,0,0),Ca.radius=.7071067811865476,Ca.applyMatrix4(e.matrixWorld),this.intersectsSphere(Ca)}intersectsSphere(e){let t=this.planes,n=e.center,r=-e.radius;for(let e=0;e<6;e++)if(t[e].distanceToPoint(n)0?e.max.x:e.min.x,wa.y=r.normal.y>0?e.max.y:e.min.y,wa.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(wa)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}};function Ea(){let e=null,t=!1,n=null,r=null;function i(t,a){n(t,a),r=e.requestAnimationFrame(i)}return{start:function(){t!==!0&&n!==null&&(r=e.requestAnimationFrame(i),t=!0)},stop:function(){e.cancelAnimationFrame(r),t=!1},setAnimationLoop:function(e){n=e},setContext:function(t){e=t}}}function Da(e){let t=new WeakMap;function n(t,n){let r=t.array,i=t.usage,a=r.byteLength,o=e.createBuffer();e.bindBuffer(n,o),e.bufferData(n,r,i),t.onUploadCallback();let s;if(r instanceof Float32Array)s=e.FLOAT;else if(r instanceof Uint16Array)s=t.isFloat16BufferAttribute?e.HALF_FLOAT:e.UNSIGNED_SHORT;else if(r instanceof Int16Array)s=e.SHORT;else if(r instanceof Uint32Array)s=e.UNSIGNED_INT;else if(r instanceof Int32Array)s=e.INT;else if(r instanceof Int8Array)s=e.BYTE;else if(r instanceof Uint8Array)s=e.UNSIGNED_BYTE;else if(r instanceof Uint8ClampedArray)s=e.UNSIGNED_BYTE;else throw Error(`THREE.WebGLAttributes: Unsupported buffer data format: `+r);return{buffer:o,type:s,bytesPerElement:r.BYTES_PER_ELEMENT,version:t.version,size:a}}function r(t,n,r){let i=n.array,a=n.updateRanges;if(e.bindBuffer(r,t),a.length===0)e.bufferSubData(r,0,i);else{a.sort((e,t)=>e.start-t.start);let t=0;for(let e=1;e 0 - vec4 plane; - #ifdef ALPHA_TO_COVERAGE - float distanceToPlane, distanceGradient; - float clipOpacity = 1.0; - #pragma unroll_loop_start - for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w; - distanceGradient = fwidth( distanceToPlane ) / 2.0; - clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane ); - if ( clipOpacity == 0.0 ) discard; - } - #pragma unroll_loop_end - #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES - float unionClipOpacity = 1.0; - #pragma unroll_loop_start - for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w; - distanceGradient = fwidth( distanceToPlane ) / 2.0; - unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane ); - } - #pragma unroll_loop_end - clipOpacity *= 1.0 - unionClipOpacity; - #endif - diffuseColor.a *= clipOpacity; - if ( diffuseColor.a == 0.0 ) discard; - #else - #pragma unroll_loop_start - for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard; - } - #pragma unroll_loop_end - #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES - bool clipped = true; - #pragma unroll_loop_start - for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped; - } - #pragma unroll_loop_end - if ( clipped ) discard; - #endif - #endif -#endif`,clipping_planes_pars_fragment:`#if NUM_CLIPPING_PLANES > 0 - varying vec3 vClipPosition; - uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,clipping_planes_pars_vertex:`#if NUM_CLIPPING_PLANES > 0 - varying vec3 vClipPosition; -#endif`,clipping_planes_vertex:`#if NUM_CLIPPING_PLANES > 0 - vClipPosition = - mvPosition.xyz; -#endif`,color_fragment:`#if defined( USE_COLOR_ALPHA ) - diffuseColor *= vColor; -#elif defined( USE_COLOR ) - diffuseColor.rgb *= vColor; -#endif`,color_pars_fragment:`#if defined( USE_COLOR_ALPHA ) - varying vec4 vColor; -#elif defined( USE_COLOR ) - varying vec3 vColor; -#endif`,color_pars_vertex:`#if defined( USE_COLOR_ALPHA ) - varying vec4 vColor; -#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) - varying vec3 vColor; -#endif`,color_vertex:`#if defined( USE_COLOR_ALPHA ) - vColor = vec4( 1.0 ); -#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) - vColor = vec3( 1.0 ); -#endif -#ifdef USE_COLOR - vColor *= color; -#endif -#ifdef USE_INSTANCING_COLOR - vColor.xyz *= instanceColor.xyz; -#endif -#ifdef USE_BATCHING_COLOR - vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) ); - vColor.xyz *= batchingColor.xyz; -#endif`,common:`#define PI 3.141592653589793 -#define PI2 6.283185307179586 -#define PI_HALF 1.5707963267948966 -#define RECIPROCAL_PI 0.3183098861837907 -#define RECIPROCAL_PI2 0.15915494309189535 -#define EPSILON 1e-6 -#ifndef saturate -#define saturate( a ) clamp( a, 0.0, 1.0 ) -#endif -#define whiteComplement( a ) ( 1.0 - saturate( a ) ) -float pow2( const in float x ) { return x*x; } -vec3 pow2( const in vec3 x ) { return x*x; } -float pow3( const in float x ) { return x*x*x; } -float pow4( const in float x ) { float x2 = x*x; return x2*x2; } -float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); } -float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); } -highp float rand( const in vec2 uv ) { - const highp float a = 12.9898, b = 78.233, c = 43758.5453; - highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); - return fract( sin( sn ) * c ); -} -#ifdef HIGH_PRECISION - float precisionSafeLength( vec3 v ) { return length( v ); } -#else - float precisionSafeLength( vec3 v ) { - float maxComponent = max3( abs( v ) ); - return length( v / maxComponent ) * maxComponent; - } -#endif -struct IncidentLight { - vec3 color; - vec3 direction; - bool visible; -}; -struct ReflectedLight { - vec3 directDiffuse; - vec3 directSpecular; - vec3 indirectDiffuse; - vec3 indirectSpecular; -}; -#ifdef USE_ALPHAHASH - varying vec3 vPosition; -#endif -vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); -} -vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) { - return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); -} -mat3 transposeMat3( const in mat3 m ) { - mat3 tmp; - tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); - tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); - tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); - return tmp; -} -bool isPerspectiveMatrix( mat4 m ) { - return m[ 2 ][ 3 ] == - 1.0; -} -vec2 equirectUv( in vec3 dir ) { - float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5; - float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5; - return vec2( u, v ); -} -vec3 BRDF_Lambert( const in vec3 diffuseColor ) { - return RECIPROCAL_PI * diffuseColor; -} -vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { - float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} -float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { - float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} // validated`,cube_uv_reflection_fragment:`#ifdef ENVMAP_TYPE_CUBE_UV - #define cubeUV_minMipLevel 4.0 - #define cubeUV_minTileSize 16.0 - float getFace( vec3 direction ) { - vec3 absDirection = abs( direction ); - float face = - 1.0; - if ( absDirection.x > absDirection.z ) { - if ( absDirection.x > absDirection.y ) - face = direction.x > 0.0 ? 0.0 : 3.0; - else - face = direction.y > 0.0 ? 1.0 : 4.0; - } else { - if ( absDirection.z > absDirection.y ) - face = direction.z > 0.0 ? 2.0 : 5.0; - else - face = direction.y > 0.0 ? 1.0 : 4.0; - } - return face; - } - vec2 getUV( vec3 direction, float face ) { - vec2 uv; - if ( face == 0.0 ) { - uv = vec2( direction.z, direction.y ) / abs( direction.x ); - } else if ( face == 1.0 ) { - uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); - } else if ( face == 2.0 ) { - uv = vec2( - direction.x, direction.y ) / abs( direction.z ); - } else if ( face == 3.0 ) { - uv = vec2( - direction.z, direction.y ) / abs( direction.x ); - } else if ( face == 4.0 ) { - uv = vec2( - direction.x, direction.z ) / abs( direction.y ); - } else { - uv = vec2( direction.x, direction.y ) / abs( direction.z ); - } - return 0.5 * ( uv + 1.0 ); - } - vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) { - float face = getFace( direction ); - float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 ); - mipInt = max( mipInt, cubeUV_minMipLevel ); - float faceSize = exp2( mipInt ); - highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; - if ( face > 2.0 ) { - uv.y += faceSize; - face -= 3.0; - } - uv.x += face * faceSize; - uv.x += filterInt * 3.0 * cubeUV_minTileSize; - uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); - uv.x *= CUBEUV_TEXEL_WIDTH; - uv.y *= CUBEUV_TEXEL_HEIGHT; - #ifdef texture2DGradEXT - return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; - #else - return texture2D( envMap, uv ).rgb; - #endif - } - #define cubeUV_r0 1.0 - #define cubeUV_m0 - 2.0 - #define cubeUV_r1 0.8 - #define cubeUV_m1 - 1.0 - #define cubeUV_r4 0.4 - #define cubeUV_m4 2.0 - #define cubeUV_r5 0.305 - #define cubeUV_m5 3.0 - #define cubeUV_r6 0.21 - #define cubeUV_m6 4.0 - float roughnessToMip( float roughness ) { - float mip = 0.0; - if ( roughness >= cubeUV_r1 ) { - mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; - } else if ( roughness >= cubeUV_r4 ) { - mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; - } else if ( roughness >= cubeUV_r5 ) { - mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; - } else if ( roughness >= cubeUV_r6 ) { - mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; - } else { - mip = - 2.0 * log2( 1.16 * roughness ); } - return mip; - } - vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) { - float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); - float mipF = fract( mip ); - float mipInt = floor( mip ); - vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt ); - if ( mipF == 0.0 ) { - return vec4( color0, 1.0 ); - } else { - vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 ); - return vec4( mix( color0, color1, mipF ), 1.0 ); - } - } -#endif`,defaultnormal_vertex:`vec3 transformedNormal = objectNormal; -#ifdef USE_TANGENT - vec3 transformedTangent = objectTangent; -#endif -#ifdef USE_BATCHING - mat3 bm = mat3( batchingMatrix ); - transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) ); - transformedNormal = bm * transformedNormal; - #ifdef USE_TANGENT - transformedTangent = bm * transformedTangent; - #endif -#endif -#ifdef USE_INSTANCING - mat3 im = mat3( instanceMatrix ); - transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) ); - transformedNormal = im * transformedNormal; - #ifdef USE_TANGENT - transformedTangent = im * transformedTangent; - #endif -#endif -transformedNormal = normalMatrix * transformedNormal; -#ifdef FLIP_SIDED - transformedNormal = - transformedNormal; -#endif -#ifdef USE_TANGENT - transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz; - #ifdef FLIP_SIDED - transformedTangent = - transformedTangent; - #endif -#endif`,displacementmap_pars_vertex:`#ifdef USE_DISPLACEMENTMAP - uniform sampler2D displacementMap; - uniform float displacementScale; - uniform float displacementBias; -#endif`,displacementmap_vertex:`#ifdef USE_DISPLACEMENTMAP - transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,emissivemap_fragment:`#ifdef USE_EMISSIVEMAP - vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); - totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,emissivemap_pars_fragment:`#ifdef USE_EMISSIVEMAP - uniform sampler2D emissiveMap; -#endif`,colorspace_fragment:`gl_FragColor = linearToOutputTexel( gl_FragColor );`,colorspace_pars_fragment:` -const mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3( - vec3( 0.8224621, 0.177538, 0.0 ), - vec3( 0.0331941, 0.9668058, 0.0 ), - vec3( 0.0170827, 0.0723974, 0.9105199 ) -); -const mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3( - vec3( 1.2249401, - 0.2249404, 0.0 ), - vec3( - 0.0420569, 1.0420571, 0.0 ), - vec3( - 0.0196376, - 0.0786361, 1.0982735 ) -); -vec4 LinearSRGBToLinearDisplayP3( in vec4 value ) { - return vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a ); -} -vec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) { - return vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a ); -} -vec4 LinearTransferOETF( in vec4 value ) { - return value; -} -vec4 sRGBTransferOETF( in vec4 value ) { - return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); -}`,envmap_fragment:`#ifdef USE_ENVMAP - #ifdef ENV_WORLDPOS - vec3 cameraToFrag; - if ( isOrthographic ) { - cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); - } else { - cameraToFrag = normalize( vWorldPosition - cameraPosition ); - } - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - #ifdef ENVMAP_MODE_REFLECTION - vec3 reflectVec = reflect( cameraToFrag, worldNormal ); - #else - vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio ); - #endif - #else - vec3 reflectVec = vReflect; - #endif - #ifdef ENVMAP_TYPE_CUBE - vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) ); - #else - vec4 envColor = vec4( 0.0 ); - #endif - #ifdef ENVMAP_BLENDING_MULTIPLY - outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity ); - #elif defined( ENVMAP_BLENDING_MIX ) - outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity ); - #elif defined( ENVMAP_BLENDING_ADD ) - outgoingLight += envColor.xyz * specularStrength * reflectivity; - #endif -#endif`,envmap_common_pars_fragment:`#ifdef USE_ENVMAP - uniform float envMapIntensity; - uniform float flipEnvMap; - uniform mat3 envMapRotation; - #ifdef ENVMAP_TYPE_CUBE - uniform samplerCube envMap; - #else - uniform sampler2D envMap; - #endif - -#endif`,envmap_pars_fragment:`#ifdef USE_ENVMAP - uniform float reflectivity; - #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) - #define ENV_WORLDPOS - #endif - #ifdef ENV_WORLDPOS - varying vec3 vWorldPosition; - uniform float refractionRatio; - #else - varying vec3 vReflect; - #endif -#endif`,envmap_pars_vertex:`#ifdef USE_ENVMAP - #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) - #define ENV_WORLDPOS - #endif - #ifdef ENV_WORLDPOS - - varying vec3 vWorldPosition; - #else - varying vec3 vReflect; - uniform float refractionRatio; - #endif -#endif`,envmap_physical_pars_fragment:`#ifdef USE_ENVMAP - vec3 getIBLIrradiance( const in vec3 normal ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 ); - return PI * envMapColor.rgb * envMapIntensity; - #else - return vec3( 0.0 ); - #endif - } - vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 reflectVec = reflect( - viewDir, normal ); - reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) ); - reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); - vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness ); - return envMapColor.rgb * envMapIntensity; - #else - return vec3( 0.0 ); - #endif - } - #ifdef USE_ANISOTROPY - vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 bentNormal = cross( bitangent, viewDir ); - bentNormal = normalize( cross( bentNormal, bitangent ) ); - bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) ); - return getIBLRadiance( viewDir, bentNormal, roughness ); - #else - return vec3( 0.0 ); - #endif - } - #endif -#endif`,envmap_vertex:`#ifdef USE_ENVMAP - #ifdef ENV_WORLDPOS - vWorldPosition = worldPosition.xyz; - #else - vec3 cameraToVertex; - if ( isOrthographic ) { - cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); - } else { - cameraToVertex = normalize( worldPosition.xyz - cameraPosition ); - } - vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); - #ifdef ENVMAP_MODE_REFLECTION - vReflect = reflect( cameraToVertex, worldNormal ); - #else - vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); - #endif - #endif -#endif`,fog_vertex:`#ifdef USE_FOG - vFogDepth = - mvPosition.z; -#endif`,fog_pars_vertex:`#ifdef USE_FOG - varying float vFogDepth; -#endif`,fog_fragment:`#ifdef USE_FOG - #ifdef FOG_EXP2 - float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); - #else - float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); - #endif - gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); -#endif`,fog_pars_fragment:`#ifdef USE_FOG - uniform vec3 fogColor; - varying float vFogDepth; - #ifdef FOG_EXP2 - uniform float fogDensity; - #else - uniform float fogNear; - uniform float fogFar; - #endif -#endif`,gradientmap_pars_fragment:`#ifdef USE_GRADIENTMAP - uniform sampler2D gradientMap; -#endif -vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { - float dotNL = dot( normal, lightDirection ); - vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 ); - #ifdef USE_GRADIENTMAP - return vec3( texture2D( gradientMap, coord ).r ); - #else - vec2 fw = fwidth( coord ) * 0.5; - return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); - #endif -}`,lightmap_pars_fragment:`#ifdef USE_LIGHTMAP - uniform sampler2D lightMap; - uniform float lightMapIntensity; -#endif`,lights_lambert_fragment:`LambertMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,lights_lambert_pars_fragment:`varying vec3 vViewPosition; -struct LambertMaterial { - vec3 diffuseColor; - float specularStrength; -}; -void RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_Lambert -#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,lights_pars_begin:`uniform bool receiveShadow; -uniform vec3 ambientLightColor; -#if defined( USE_LIGHT_PROBES ) - uniform vec3 lightProbe[ 9 ]; -#endif -vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) { - float x = normal.x, y = normal.y, z = normal.z; - vec3 result = shCoefficients[ 0 ] * 0.886227; - result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; - result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; - result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; - result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; - result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; - result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); - result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; - result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); - return result; -} -vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) { - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe ); - return irradiance; -} -vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) { - vec3 irradiance = ambientLightColor; - return irradiance; -} -float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) { - float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 ); - if ( cutoffDistance > 0.0 ) { - distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) ); - } - return distanceFalloff; -} -float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) { - return smoothstep( coneCosine, penumbraCosine, angleCosine ); -} -#if NUM_DIR_LIGHTS > 0 - struct DirectionalLight { - vec3 direction; - vec3 color; - }; - uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; - void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) { - light.color = directionalLight.color; - light.direction = directionalLight.direction; - light.visible = true; - } -#endif -#if NUM_POINT_LIGHTS > 0 - struct PointLight { - vec3 position; - vec3 color; - float distance; - float decay; - }; - uniform PointLight pointLights[ NUM_POINT_LIGHTS ]; - void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) { - vec3 lVector = pointLight.position - geometryPosition; - light.direction = normalize( lVector ); - float lightDistance = length( lVector ); - light.color = pointLight.color; - light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay ); - light.visible = ( light.color != vec3( 0.0 ) ); - } -#endif -#if NUM_SPOT_LIGHTS > 0 - struct SpotLight { - vec3 position; - vec3 direction; - vec3 color; - float distance; - float decay; - float coneCos; - float penumbraCos; - }; - uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ]; - void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) { - vec3 lVector = spotLight.position - geometryPosition; - light.direction = normalize( lVector ); - float angleCos = dot( light.direction, spotLight.direction ); - float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos ); - if ( spotAttenuation > 0.0 ) { - float lightDistance = length( lVector ); - light.color = spotLight.color * spotAttenuation; - light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay ); - light.visible = ( light.color != vec3( 0.0 ) ); - } else { - light.color = vec3( 0.0 ); - light.visible = false; - } - } -#endif -#if NUM_RECT_AREA_LIGHTS > 0 - struct RectAreaLight { - vec3 color; - vec3 position; - vec3 halfWidth; - vec3 halfHeight; - }; - uniform sampler2D ltc_1; uniform sampler2D ltc_2; - uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ]; -#endif -#if NUM_HEMI_LIGHTS > 0 - struct HemisphereLight { - vec3 direction; - vec3 skyColor; - vec3 groundColor; - }; - uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ]; - vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) { - float dotNL = dot( normal, hemiLight.direction ); - float hemiDiffuseWeight = 0.5 * dotNL + 0.5; - vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); - return irradiance; - } -#endif`,lights_toon_fragment:`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,lights_toon_pars_fragment:`varying vec3 vViewPosition; -struct ToonMaterial { - vec3 diffuseColor; -}; -void RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { - vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_Toon -#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,lights_phong_fragment:`BlinnPhongMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.specularColor = specular; -material.specularShininess = shininess; -material.specularStrength = specularStrength;`,lights_phong_pars_fragment:`varying vec3 vViewPosition; -struct BlinnPhongMaterial { - vec3 diffuseColor; - vec3 specularColor; - float specularShininess; - float specularStrength; -}; -void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); - reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength; -} -void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_BlinnPhong -#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,lights_physical_fragment:`PhysicalMaterial material; -material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); -vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) ); -float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); -material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness; -material.roughness = min( material.roughness, 1.0 ); -#ifdef IOR - material.ior = ior; - #ifdef USE_SPECULAR - float specularIntensityFactor = specularIntensity; - vec3 specularColorFactor = specularColor; - #ifdef USE_SPECULAR_COLORMAP - specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb; - #endif - #ifdef USE_SPECULAR_INTENSITYMAP - specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a; - #endif - material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); - #else - float specularIntensityFactor = 1.0; - vec3 specularColorFactor = vec3( 1.0 ); - material.specularF90 = 1.0; - #endif - material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor ); -#else - material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor ); - material.specularF90 = 1.0; -#endif -#ifdef USE_CLEARCOAT - material.clearcoat = clearcoat; - material.clearcoatRoughness = clearcoatRoughness; - material.clearcoatF0 = vec3( 0.04 ); - material.clearcoatF90 = 1.0; - #ifdef USE_CLEARCOATMAP - material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x; - #endif - #ifdef USE_CLEARCOAT_ROUGHNESSMAP - material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y; - #endif - material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); - material.clearcoatRoughness += geometryRoughness; - material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); -#endif -#ifdef USE_DISPERSION - material.dispersion = dispersion; -#endif -#ifdef USE_IRIDESCENCE - material.iridescence = iridescence; - material.iridescenceIOR = iridescenceIOR; - #ifdef USE_IRIDESCENCEMAP - material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r; - #endif - #ifdef USE_IRIDESCENCE_THICKNESSMAP - material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum; - #else - material.iridescenceThickness = iridescenceThicknessMaximum; - #endif -#endif -#ifdef USE_SHEEN - material.sheenColor = sheenColor; - #ifdef USE_SHEEN_COLORMAP - material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb; - #endif - material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 ); - #ifdef USE_SHEEN_ROUGHNESSMAP - material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a; - #endif -#endif -#ifdef USE_ANISOTROPY - #ifdef USE_ANISOTROPYMAP - mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x ); - vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb; - vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b; - #else - vec2 anisotropyV = anisotropyVector; - #endif - material.anisotropy = length( anisotropyV ); - if( material.anisotropy == 0.0 ) { - anisotropyV = vec2( 1.0, 0.0 ); - } else { - anisotropyV /= material.anisotropy; - material.anisotropy = saturate( material.anisotropy ); - } - material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) ); - material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y; - material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y; -#endif`,lights_physical_pars_fragment:`struct PhysicalMaterial { - vec3 diffuseColor; - float roughness; - vec3 specularColor; - float specularF90; - float dispersion; - #ifdef USE_CLEARCOAT - float clearcoat; - float clearcoatRoughness; - vec3 clearcoatF0; - float clearcoatF90; - #endif - #ifdef USE_IRIDESCENCE - float iridescence; - float iridescenceIOR; - float iridescenceThickness; - vec3 iridescenceFresnel; - vec3 iridescenceF0; - #endif - #ifdef USE_SHEEN - vec3 sheenColor; - float sheenRoughness; - #endif - #ifdef IOR - float ior; - #endif - #ifdef USE_TRANSMISSION - float transmission; - float transmissionAlpha; - float thickness; - float attenuationDistance; - vec3 attenuationColor; - #endif - #ifdef USE_ANISOTROPY - float anisotropy; - float alphaT; - vec3 anisotropyT; - vec3 anisotropyB; - #endif -}; -vec3 clearcoatSpecularDirect = vec3( 0.0 ); -vec3 clearcoatSpecularIndirect = vec3( 0.0 ); -vec3 sheenSpecularDirect = vec3( 0.0 ); -vec3 sheenSpecularIndirect = vec3(0.0 ); -vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) { - float x = clamp( 1.0 - dotVH, 0.0, 1.0 ); - float x2 = x * x; - float x5 = clamp( x * x2 * x2, 0.0, 0.9999 ); - return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); -} -float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) { - float a2 = pow2( alpha ); - float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); - float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); - return 0.5 / max( gv + gl, EPSILON ); -} -float D_GGX( const in float alpha, const in float dotNH ) { - float a2 = pow2( alpha ); - float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; - return RECIPROCAL_PI * a2 / pow2( denom ); -} -#ifdef USE_ANISOTROPY - float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) { - float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) ); - float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) ); - float v = 0.5 / ( gv + gl ); - return saturate(v); - } - float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) { - float a2 = alphaT * alphaB; - highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH ); - highp float v2 = dot( v, v ); - float w2 = a2 / v2; - return RECIPROCAL_PI * a2 * pow2 ( w2 ); - } -#endif -#ifdef USE_CLEARCOAT - vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) { - vec3 f0 = material.clearcoatF0; - float f90 = material.clearcoatF90; - float roughness = material.clearcoatRoughness; - float alpha = pow2( roughness ); - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( f0, f90, dotVH ); - float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - float D = D_GGX( alpha, dotNH ); - return F * ( V * D ); - } -#endif -vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) { - vec3 f0 = material.specularColor; - float f90 = material.specularF90; - float roughness = material.roughness; - float alpha = pow2( roughness ); - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( f0, f90, dotVH ); - #ifdef USE_IRIDESCENCE - F = mix( F, material.iridescenceFresnel, material.iridescence ); - #endif - #ifdef USE_ANISOTROPY - float dotTL = dot( material.anisotropyT, lightDir ); - float dotTV = dot( material.anisotropyT, viewDir ); - float dotTH = dot( material.anisotropyT, halfDir ); - float dotBL = dot( material.anisotropyB, lightDir ); - float dotBV = dot( material.anisotropyB, viewDir ); - float dotBH = dot( material.anisotropyB, halfDir ); - float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL ); - float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH ); - #else - float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - float D = D_GGX( alpha, dotNH ); - #endif - return F * ( V * D ); -} -vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) { - const float LUT_SIZE = 64.0; - const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE; - const float LUT_BIAS = 0.5 / LUT_SIZE; - float dotNV = saturate( dot( N, V ) ); - vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) ); - uv = uv * LUT_SCALE + LUT_BIAS; - return uv; -} -float LTC_ClippedSphereFormFactor( const in vec3 f ) { - float l = length( f ); - return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 ); -} -vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) { - float x = dot( v1, v2 ); - float y = abs( x ); - float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y; - float b = 3.4175940 + ( 4.1616724 + y ) * y; - float v = a / b; - float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v; - return cross( v1, v2 ) * theta_sintheta; -} -vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) { - vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ]; - vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ]; - vec3 lightNormal = cross( v1, v2 ); - if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 ); - vec3 T1, T2; - T1 = normalize( V - N * dot( V, N ) ); - T2 = - cross( N, T1 ); - mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) ); - vec3 coords[ 4 ]; - coords[ 0 ] = mat * ( rectCoords[ 0 ] - P ); - coords[ 1 ] = mat * ( rectCoords[ 1 ] - P ); - coords[ 2 ] = mat * ( rectCoords[ 2 ] - P ); - coords[ 3 ] = mat * ( rectCoords[ 3 ] - P ); - coords[ 0 ] = normalize( coords[ 0 ] ); - coords[ 1 ] = normalize( coords[ 1 ] ); - coords[ 2 ] = normalize( coords[ 2 ] ); - coords[ 3 ] = normalize( coords[ 3 ] ); - vec3 vectorFormFactor = vec3( 0.0 ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] ); - float result = LTC_ClippedSphereFormFactor( vectorFormFactor ); - return vec3( result ); -} -#if defined( USE_SHEEN ) -float D_Charlie( float roughness, float dotNH ) { - float alpha = pow2( roughness ); - float invAlpha = 1.0 / alpha; - float cos2h = dotNH * dotNH; - float sin2h = max( 1.0 - cos2h, 0.0078125 ); - return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); -} -float V_Neubelt( float dotNV, float dotNL ) { - return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); -} -vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) { - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float D = D_Charlie( sheenRoughness, dotNH ); - float V = V_Neubelt( dotNV, dotNL ); - return sheenColor * ( D * V ); -} -#endif -float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { - float dotNV = saturate( dot( normal, viewDir ) ); - float r2 = roughness * roughness; - float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95; - float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72; - float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) ); - return saturate( DG * RECIPROCAL_PI ); -} -vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { - float dotNV = saturate( dot( normal, viewDir ) ); - const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); - const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 ); - vec4 r = roughness * c0 + c1; - float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; - vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw; - return fab; -} -vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) { - vec2 fab = DFGApprox( normal, viewDir, roughness ); - return specularColor * fab.x + specularF90 * fab.y; -} -#ifdef USE_IRIDESCENCE -void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { -#else -void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { -#endif - vec2 fab = DFGApprox( normal, viewDir, roughness ); - #ifdef USE_IRIDESCENCE - vec3 Fr = mix( specularColor, iridescenceF0, iridescence ); - #else - vec3 Fr = specularColor; - #endif - vec3 FssEss = Fr * fab.x + specularF90 * fab.y; - float Ess = fab.x + fab.y; - float Ems = 1.0 - Ess; - vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg ); - singleScatter += FssEss; - multiScatter += Fms * Ems; -} -#if NUM_RECT_AREA_LIGHTS > 0 - void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - vec3 normal = geometryNormal; - vec3 viewDir = geometryViewDir; - vec3 position = geometryPosition; - vec3 lightPos = rectAreaLight.position; - vec3 halfWidth = rectAreaLight.halfWidth; - vec3 halfHeight = rectAreaLight.halfHeight; - vec3 lightColor = rectAreaLight.color; - float roughness = material.roughness; - vec3 rectCoords[ 4 ]; - rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight; - rectCoords[ 2 ] = lightPos - halfWidth + halfHeight; - rectCoords[ 3 ] = lightPos + halfWidth + halfHeight; - vec2 uv = LTC_Uv( normal, viewDir, roughness ); - vec4 t1 = texture2D( ltc_1, uv ); - vec4 t2 = texture2D( ltc_2, uv ); - mat3 mInv = mat3( - vec3( t1.x, 0, t1.y ), - vec3( 0, 1, 0 ), - vec3( t1.z, 0, t1.w ) - ); - vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y ); - reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords ); - reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords ); - } -#endif -void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - #ifdef USE_CLEARCOAT - float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) ); - vec3 ccIrradiance = dotNLcc * directLight.color; - clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material ); - #endif - #ifdef USE_SHEEN - sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness ); - #endif - reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material ); - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { - #ifdef USE_CLEARCOAT - clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); - #endif - #ifdef USE_SHEEN - sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ); - #endif - vec3 singleScattering = vec3( 0.0 ); - vec3 multiScattering = vec3( 0.0 ); - vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI; - #ifdef USE_IRIDESCENCE - computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering ); - #else - computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering ); - #endif - vec3 totalScattering = singleScattering + multiScattering; - vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) ); - reflectedLight.indirectSpecular += radiance * singleScattering; - reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance; - reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance; -} -#define RE_Direct RE_Direct_Physical -#define RE_Direct_RectArea RE_Direct_RectArea_Physical -#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical -#define RE_IndirectSpecular RE_IndirectSpecular_Physical -float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { - return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); -}`,lights_fragment_begin:` -vec3 geometryPosition = - vViewPosition; -vec3 geometryNormal = normal; -vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); -vec3 geometryClearcoatNormal = vec3( 0.0 ); -#ifdef USE_CLEARCOAT - geometryClearcoatNormal = clearcoatNormal; -#endif -#ifdef USE_IRIDESCENCE - float dotNVi = saturate( dot( normal, geometryViewDir ) ); - if ( material.iridescenceThickness == 0.0 ) { - material.iridescence = 0.0; - } else { - material.iridescence = saturate( material.iridescence ); - } - if ( material.iridescence > 0.0 ) { - material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); - material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); - } -#endif -IncidentLight directLight; -#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) - PointLight pointLight; - #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 - PointLightShadow pointLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { - pointLight = pointLights[ i ]; - getPointLightInfo( pointLight, geometryPosition, directLight ); - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) - pointLightShadow = pointLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) - SpotLight spotLight; - vec4 spotColor; - vec3 spotLightCoord; - bool inSpotLightMap; - #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { - spotLight = spotLights[ i ]; - getSpotLightInfo( spotLight, geometryPosition, directLight ); - #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) - #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX - #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS - #else - #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) - #endif - #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) - spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; - inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); - spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); - directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; - #endif - #undef SPOT_LIGHT_MAP_INDEX - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - spotLightShadow = spotLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) - DirectionalLight directionalLight; - #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { - directionalLight = directionalLights[ i ]; - getDirectionalLightInfo( directionalLight, directLight ); - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) - directionalLightShadow = directionalLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) - RectAreaLight rectAreaLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { - rectAreaLight = rectAreaLights[ i ]; - RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if defined( RE_IndirectDiffuse ) - vec3 iblIrradiance = vec3( 0.0 ); - vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); - #if defined( USE_LIGHT_PROBES ) - irradiance += getLightProbeIrradiance( lightProbe, geometryNormal ); - #endif - #if ( NUM_HEMI_LIGHTS > 0 ) - #pragma unroll_loop_start - for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { - irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal ); - } - #pragma unroll_loop_end - #endif -#endif -#if defined( RE_IndirectSpecular ) - vec3 radiance = vec3( 0.0 ); - vec3 clearcoatRadiance = vec3( 0.0 ); -#endif`,lights_fragment_maps:`#if defined( RE_IndirectDiffuse ) - #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; - irradiance += lightMapIrradiance; - #endif - #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV ) - iblIrradiance += getIBLIrradiance( geometryNormal ); - #endif -#endif -#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular ) - #ifdef USE_ANISOTROPY - radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy ); - #else - radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness ); - #endif - #ifdef USE_CLEARCOAT - clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness ); - #endif -#endif`,lights_fragment_end:`#if defined( RE_IndirectDiffuse ) - RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif -#if defined( RE_IndirectSpecular ) - RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif`,logdepthbuf_fragment:`#if defined( USE_LOGDEPTHBUF ) - gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,logdepthbuf_pars_fragment:`#if defined( USE_LOGDEPTHBUF ) - uniform float logDepthBufFC; - varying float vFragDepth; - varying float vIsPerspective; -#endif`,logdepthbuf_pars_vertex:`#ifdef USE_LOGDEPTHBUF - varying float vFragDepth; - varying float vIsPerspective; -#endif`,logdepthbuf_vertex:`#ifdef USE_LOGDEPTHBUF - vFragDepth = 1.0 + gl_Position.w; - vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,map_fragment:`#ifdef USE_MAP -#ifdef USE_MIPMAP_BIAS - vec4 sampledDiffuseColor = texture2D( map, vMapUv, mipmapBias ); -#else - vec4 sampledDiffuseColor = texture2D( map, vMapUv ); -#endif - #ifdef DECODE_VIDEO_TEXTURE - sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w ); - - #endif - diffuseColor *= sampledDiffuseColor; -#endif`,map_pars_fragment:`#ifdef USE_MAP - uniform sampler2D map; - -#ifdef USE_MIPMAP_BIAS - uniform float mipmapBias; -#endif -#endif`,map_particle_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) - #if defined( USE_POINTS_UV ) - vec2 uv = vUv; - #else - vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy; - #endif -#endif -#ifdef USE_MAP - diffuseColor *= texture2D( map, uv ); -#endif -#ifdef USE_ALPHAMAP - diffuseColor.a *= texture2D( alphaMap, uv ).g; -#endif`,map_particle_pars_fragment:`#if defined( USE_POINTS_UV ) - varying vec2 vUv; -#else - #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) - uniform mat3 uvTransform; - #endif -#endif -#ifdef USE_MAP - uniform sampler2D map; -#endif -#ifdef USE_ALPHAMAP - uniform sampler2D alphaMap; -#endif`,metalnessmap_fragment:`float metalnessFactor = metalness; -#ifdef USE_METALNESSMAP - vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); - metalnessFactor *= texelMetalness.b; -#endif`,metalnessmap_pars_fragment:`#ifdef USE_METALNESSMAP - uniform sampler2D metalnessMap; -#endif`,morphinstance_vertex:`#ifdef USE_INSTANCING_MORPH - float morphTargetInfluences[ MORPHTARGETS_COUNT ]; - float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r; - } -#endif`,morphcolor_vertex:`#if defined( USE_MORPHCOLORS ) - vColor *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - #if defined( USE_COLOR_ALPHA ) - if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ]; - #elif defined( USE_COLOR ) - if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; - #endif - } -#endif`,morphnormal_vertex:`#ifdef USE_MORPHNORMALS - objectNormal *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; - } -#endif`,morphtarget_pars_vertex:`#ifdef USE_MORPHTARGETS - #ifndef USE_INSTANCING_MORPH - uniform float morphTargetBaseInfluence; - uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; - #endif - uniform sampler2DArray morphTargetsTexture; - uniform ivec2 morphTargetsTextureSize; - vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) { - int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; - int y = texelIndex / morphTargetsTextureSize.x; - int x = texelIndex - y * morphTargetsTextureSize.x; - ivec3 morphUV = ivec3( x, y, morphTargetIndex ); - return texelFetch( morphTargetsTexture, morphUV, 0 ); - } -#endif`,morphtarget_vertex:`#ifdef USE_MORPHTARGETS - transformed *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; - } -#endif`,normal_fragment_begin:`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; -#ifdef FLAT_SHADED - vec3 fdx = dFdx( vViewPosition ); - vec3 fdy = dFdy( vViewPosition ); - vec3 normal = normalize( cross( fdx, fdy ) ); -#else - vec3 normal = normalize( vNormal ); - #ifdef DOUBLE_SIDED - normal *= faceDirection; - #endif -#endif -#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) - #ifdef USE_TANGENT - mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); - #else - mat3 tbn = getTangentFrame( - vViewPosition, normal, - #if defined( USE_NORMALMAP ) - vNormalMapUv - #elif defined( USE_CLEARCOAT_NORMALMAP ) - vClearcoatNormalMapUv - #else - vUv - #endif - ); - #endif - #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) - tbn[0] *= faceDirection; - tbn[1] *= faceDirection; - #endif -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - #ifdef USE_TANGENT - mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); - #else - mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv ); - #endif - #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) - tbn2[0] *= faceDirection; - tbn2[1] *= faceDirection; - #endif -#endif -vec3 nonPerturbedNormal = normal;`,normal_fragment_maps:`#ifdef USE_NORMALMAP_OBJECTSPACE - normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; - #ifdef FLIP_SIDED - normal = - normal; - #endif - #ifdef DOUBLE_SIDED - normal = normal * faceDirection; - #endif - normal = normalize( normalMatrix * normal ); -#elif defined( USE_NORMALMAP_TANGENTSPACE ) - vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; - mapN.xy *= normalScale; - normal = normalize( tbn * mapN ); -#elif defined( USE_BUMPMAP ) - normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,normal_pars_fragment:`#ifndef FLAT_SHADED - varying vec3 vNormal; - #ifdef USE_TANGENT - varying vec3 vTangent; - varying vec3 vBitangent; - #endif -#endif`,normal_pars_vertex:`#ifndef FLAT_SHADED - varying vec3 vNormal; - #ifdef USE_TANGENT - varying vec3 vTangent; - varying vec3 vBitangent; - #endif -#endif`,normal_vertex:`#ifndef FLAT_SHADED - vNormal = normalize( transformedNormal ); - #ifdef USE_TANGENT - vTangent = normalize( transformedTangent ); - vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); - #endif -#endif`,normalmap_pars_fragment:`#ifdef USE_NORMALMAP - uniform sampler2D normalMap; - uniform vec2 normalScale; -#endif -#ifdef USE_NORMALMAP_OBJECTSPACE - uniform mat3 normalMatrix; -#endif -#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) ) - mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) { - vec3 q0 = dFdx( eye_pos.xyz ); - vec3 q1 = dFdy( eye_pos.xyz ); - vec2 st0 = dFdx( uv.st ); - vec2 st1 = dFdy( uv.st ); - vec3 N = surf_norm; - vec3 q1perp = cross( q1, N ); - vec3 q0perp = cross( N, q0 ); - vec3 T = q1perp * st0.x + q0perp * st1.x; - vec3 B = q1perp * st0.y + q0perp * st1.y; - float det = max( dot( T, T ), dot( B, B ) ); - float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); - return mat3( T * scale, B * scale, N ); - } -#endif`,clearcoat_normal_fragment_begin:`#ifdef USE_CLEARCOAT - vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,clearcoat_normal_fragment_maps:`#ifdef USE_CLEARCOAT_NORMALMAP - vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; - clearcoatMapN.xy *= clearcoatNormalScale; - clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,clearcoat_pars_fragment:`#ifdef USE_CLEARCOATMAP - uniform sampler2D clearcoatMap; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - uniform sampler2D clearcoatNormalMap; - uniform vec2 clearcoatNormalScale; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform sampler2D clearcoatRoughnessMap; -#endif`,iridescence_pars_fragment:`#ifdef USE_IRIDESCENCEMAP - uniform sampler2D iridescenceMap; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - uniform sampler2D iridescenceThicknessMap; -#endif`,opaque_fragment:`#ifdef OPAQUE -diffuseColor.a = 1.0; -#endif -#ifdef USE_TRANSMISSION -diffuseColor.a *= material.transmissionAlpha; -#endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,packing:`vec3 packNormalToRGB( const in vec3 normal ) { - return normalize( normal ) * 0.5 + 0.5; -} -vec3 unpackRGBToNormal( const in vec3 rgb ) { - return 2.0 * rgb.xyz - 1.0; -} -const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.; -const float Inv255 = 1. / 255.; -const vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 ); -const vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g ); -const vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b ); -const vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a ); -vec4 packDepthToRGBA( const in float v ) { - if( v <= 0.0 ) - return vec4( 0., 0., 0., 0. ); - if( v >= 1.0 ) - return vec4( 1., 1., 1., 1. ); - float vuf; - float af = modf( v * PackFactors.a, vuf ); - float bf = modf( vuf * ShiftRight8, vuf ); - float gf = modf( vuf * ShiftRight8, vuf ); - return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af ); -} -vec3 packDepthToRGB( const in float v ) { - if( v <= 0.0 ) - return vec3( 0., 0., 0. ); - if( v >= 1.0 ) - return vec3( 1., 1., 1. ); - float vuf; - float bf = modf( v * PackFactors.b, vuf ); - float gf = modf( vuf * ShiftRight8, vuf ); - return vec3( vuf * Inv255, gf * PackUpscale, bf ); -} -vec2 packDepthToRG( const in float v ) { - if( v <= 0.0 ) - return vec2( 0., 0. ); - if( v >= 1.0 ) - return vec2( 1., 1. ); - float vuf; - float gf = modf( v * 256., vuf ); - return vec2( vuf * Inv255, gf ); -} -float unpackRGBAToDepth( const in vec4 v ) { - return dot( v, UnpackFactors4 ); -} -float unpackRGBToDepth( const in vec3 v ) { - return dot( v, UnpackFactors3 ); -} -float unpackRGToDepth( const in vec2 v ) { - return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g; -} -vec4 pack2HalfToRGBA( const in vec2 v ) { - vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) ); - return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w ); -} -vec2 unpackRGBATo2Half( const in vec4 v ) { - return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) ); -} -float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) { - return ( viewZ + near ) / ( near - far ); -} -float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) { - return depth * ( near - far ) - near; -} -float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) { - return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ ); -} -float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) { - return ( near * far ) / ( ( far - near ) * depth - far ); -}`,premultiplied_alpha_fragment:`#ifdef PREMULTIPLIED_ALPHA - gl_FragColor.rgb *= gl_FragColor.a; -#endif`,project_vertex:`vec4 mvPosition = vec4( transformed, 1.0 ); -#ifdef USE_BATCHING - mvPosition = batchingMatrix * mvPosition; -#endif -#ifdef USE_INSTANCING - mvPosition = instanceMatrix * mvPosition; -#endif -mvPosition = modelViewMatrix * mvPosition; -gl_Position = projectionMatrix * mvPosition;`,dithering_fragment:`#ifdef DITHERING - gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,dithering_pars_fragment:`#ifdef DITHERING - vec3 dithering( vec3 color ) { - float grid_position = rand( gl_FragCoord.xy ); - vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); - dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); - return color + dither_shift_RGB; - } -#endif`,roughnessmap_fragment:`float roughnessFactor = roughness; -#ifdef USE_ROUGHNESSMAP - vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); - roughnessFactor *= texelRoughness.g; -#endif`,roughnessmap_pars_fragment:`#ifdef USE_ROUGHNESSMAP - uniform sampler2D roughnessMap; -#endif`,shadowmap_pars_fragment:`#if NUM_SPOT_LIGHT_COORDS > 0 - varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; -#endif -#if NUM_SPOT_LIGHT_MAPS > 0 - uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ]; -#endif -#ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; - varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; - struct DirectionalLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; - struct SpotLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; - varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; - struct PointLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - float shadowCameraNear; - float shadowCameraFar; - }; - uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; - #endif - float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { - return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); - } - vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { - return unpackRGBATo2Half( texture2D( shadow, uv ) ); - } - float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ - float occlusion = 1.0; - vec2 distribution = texture2DDistribution( shadow, uv ); - float hard_shadow = step( compare , distribution.x ); - if (hard_shadow != 1.0 ) { - float distance = compare - distribution.x ; - float variance = max( 0.00000, distribution.y * distribution.y ); - float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); - } - return occlusion; - } - float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) { - float shadow = 1.0; - shadowCoord.xyz /= shadowCoord.w; - shadowCoord.z += shadowBias; - bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; - bool frustumTest = inFrustum && shadowCoord.z <= 1.0; - if ( frustumTest ) { - #if defined( SHADOWMAP_TYPE_PCF ) - vec2 texelSize = vec2( 1.0 ) / shadowMapSize; - float dx0 = - texelSize.x * shadowRadius; - float dy0 = - texelSize.y * shadowRadius; - float dx1 = + texelSize.x * shadowRadius; - float dy1 = + texelSize.y * shadowRadius; - float dx2 = dx0 / 2.0; - float dy2 = dy0 / 2.0; - float dx3 = dx1 / 2.0; - float dy3 = dy1 / 2.0; - shadow = ( - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z ) - ) * ( 1.0 / 17.0 ); - #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) - vec2 texelSize = vec2( 1.0 ) / shadowMapSize; - float dx = texelSize.x; - float dy = texelSize.y; - vec2 uv = shadowCoord.xy; - vec2 f = fract( uv * shadowMapSize + 0.5 ); - uv -= f * texelSize; - shadow = ( - texture2DCompare( shadowMap, uv, shadowCoord.z ) + - texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + - texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + - mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), - f.x ) + - mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), - f.x ) + - mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), - f.y ) + - mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), - f.y ) + - mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), - f.x ), - mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), - f.x ), - f.y ) - ) * ( 1.0 / 9.0 ); - #elif defined( SHADOWMAP_TYPE_VSM ) - shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); - #else - shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); - #endif - } - return mix( 1.0, shadow, shadowIntensity ); - } - vec2 cubeToUV( vec3 v, float texelSizeY ) { - vec3 absV = abs( v ); - float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); - absV *= scaleToCube; - v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); - vec2 planar = v.xy; - float almostATexel = 1.5 * texelSizeY; - float almostOne = 1.0 - almostATexel; - if ( absV.z >= almostOne ) { - if ( v.z > 0.0 ) - planar.x = 4.0 - v.x; - } else if ( absV.x >= almostOne ) { - float signX = sign( v.x ); - planar.x = v.z * signX + 2.0 * signX; - } else if ( absV.y >= almostOne ) { - float signY = sign( v.y ); - planar.x = v.x + 2.0 * signY + 2.0; - planar.y = v.z * signY - 2.0; - } - return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); - } - float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { - float shadow = 1.0; - vec3 lightToPosition = shadowCoord.xyz; - - float lightToPositionLength = length( lightToPosition ); - if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) { - float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias; - vec3 bd3D = normalize( lightToPosition ); - vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); - #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM ) - vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y; - shadow = ( - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp ) - ) * ( 1.0 / 9.0 ); - #else - shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ); - #endif - } - return mix( 1.0, shadow, shadowIntensity ); - } -#endif`,shadowmap_pars_vertex:`#if NUM_SPOT_LIGHT_COORDS > 0 - uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; - varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; -#endif -#ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ]; - varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; - struct DirectionalLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - struct SpotLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ]; - varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; - struct PointLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - float shadowCameraNear; - float shadowCameraFar; - }; - uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; - #endif -#endif`,shadowmap_vertex:`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) - vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); - vec4 shadowWorldPosition; -#endif -#if defined( USE_SHADOWMAP ) - #if NUM_DIR_LIGHT_SHADOWS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { - shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); - vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { - shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); - vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end - #endif -#endif -#if NUM_SPOT_LIGHT_COORDS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) { - shadowWorldPosition = worldPosition; - #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias; - #endif - vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end -#endif`,shadowmask_pars_fragment:`float getShadowMask() { - float shadow = 1.0; - #ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { - directionalLight = directionalLightShadows[ i ]; - shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - } - #pragma unroll_loop_end - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { - spotLight = spotLightShadows[ i ]; - shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; - } - #pragma unroll_loop_end - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - PointLightShadow pointLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { - pointLight = pointLightShadows[ i ]; - shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0; - } - #pragma unroll_loop_end - #endif - #endif - return shadow; -}`,skinbase_vertex:`#ifdef USE_SKINNING - mat4 boneMatX = getBoneMatrix( skinIndex.x ); - mat4 boneMatY = getBoneMatrix( skinIndex.y ); - mat4 boneMatZ = getBoneMatrix( skinIndex.z ); - mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,skinning_pars_vertex:`#ifdef USE_SKINNING - uniform mat4 bindMatrix; - uniform mat4 bindMatrixInverse; - uniform highp sampler2D boneTexture; - mat4 getBoneMatrix( const in float i ) { - int size = textureSize( boneTexture, 0 ).x; - int j = int( i ) * 4; - int x = j % size; - int y = j / size; - vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 ); - vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 ); - vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 ); - vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); - return mat4( v1, v2, v3, v4 ); - } -#endif`,skinning_vertex:`#ifdef USE_SKINNING - vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); - vec4 skinned = vec4( 0.0 ); - skinned += boneMatX * skinVertex * skinWeight.x; - skinned += boneMatY * skinVertex * skinWeight.y; - skinned += boneMatZ * skinVertex * skinWeight.z; - skinned += boneMatW * skinVertex * skinWeight.w; - transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,skinnormal_vertex:`#ifdef USE_SKINNING - mat4 skinMatrix = mat4( 0.0 ); - skinMatrix += skinWeight.x * boneMatX; - skinMatrix += skinWeight.y * boneMatY; - skinMatrix += skinWeight.z * boneMatZ; - skinMatrix += skinWeight.w * boneMatW; - skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix; - objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; - #ifdef USE_TANGENT - objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; - #endif -#endif`,specularmap_fragment:`float specularStrength; -#ifdef USE_SPECULARMAP - vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); - specularStrength = texelSpecular.r; -#else - specularStrength = 1.0; -#endif`,specularmap_pars_fragment:`#ifdef USE_SPECULARMAP - uniform sampler2D specularMap; -#endif`,tonemapping_fragment:`#if defined( TONE_MAPPING ) - gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,tonemapping_pars_fragment:`#ifndef saturate -#define saturate( a ) clamp( a, 0.0, 1.0 ) -#endif -uniform float toneMappingExposure; -vec3 LinearToneMapping( vec3 color ) { - return saturate( toneMappingExposure * color ); -} -vec3 ReinhardToneMapping( vec3 color ) { - color *= toneMappingExposure; - return saturate( color / ( vec3( 1.0 ) + color ) ); -} -vec3 CineonToneMapping( vec3 color ) { - color *= toneMappingExposure; - color = max( vec3( 0.0 ), color - 0.004 ); - return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) ); -} -vec3 RRTAndODTFit( vec3 v ) { - vec3 a = v * ( v + 0.0245786 ) - 0.000090537; - vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081; - return a / b; -} -vec3 ACESFilmicToneMapping( vec3 color ) { - const mat3 ACESInputMat = mat3( - vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ), - vec3( 0.04823, 0.01566, 0.83777 ) - ); - const mat3 ACESOutputMat = mat3( - vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ), - vec3( -0.07367, -0.00605, 1.07602 ) - ); - color *= toneMappingExposure / 0.6; - color = ACESInputMat * color; - color = RRTAndODTFit( color ); - color = ACESOutputMat * color; - return saturate( color ); -} -const mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3( - vec3( 1.6605, - 0.1246, - 0.0182 ), - vec3( - 0.5876, 1.1329, - 0.1006 ), - vec3( - 0.0728, - 0.0083, 1.1187 ) -); -const mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3( - vec3( 0.6274, 0.0691, 0.0164 ), - vec3( 0.3293, 0.9195, 0.0880 ), - vec3( 0.0433, 0.0113, 0.8956 ) -); -vec3 agxDefaultContrastApprox( vec3 x ) { - vec3 x2 = x * x; - vec3 x4 = x2 * x2; - return + 15.5 * x4 * x2 - - 40.14 * x4 * x - + 31.96 * x4 - - 6.868 * x2 * x - + 0.4298 * x2 - + 0.1191 * x - - 0.00232; -} -vec3 AgXToneMapping( vec3 color ) { - const mat3 AgXInsetMatrix = mat3( - vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ), - vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ), - vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 ) - ); - const mat3 AgXOutsetMatrix = mat3( - vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ), - vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ), - vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 ) - ); - const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069; - color *= toneMappingExposure; - color = LINEAR_SRGB_TO_LINEAR_REC2020 * color; - color = AgXInsetMatrix * color; - color = max( color, 1e-10 ); color = log2( color ); - color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv ); - color = clamp( color, 0.0, 1.0 ); - color = agxDefaultContrastApprox( color ); - color = AgXOutsetMatrix * color; - color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) ); - color = LINEAR_REC2020_TO_LINEAR_SRGB * color; - color = clamp( color, 0.0, 1.0 ); - return color; -} -vec3 NeutralToneMapping( vec3 color ) { - const float StartCompression = 0.8 - 0.04; - const float Desaturation = 0.15; - color *= toneMappingExposure; - float x = min( color.r, min( color.g, color.b ) ); - float offset = x < 0.08 ? x - 6.25 * x * x : 0.04; - color -= offset; - float peak = max( color.r, max( color.g, color.b ) ); - if ( peak < StartCompression ) return color; - float d = 1. - StartCompression; - float newPeak = 1. - d * d / ( peak + d - StartCompression ); - color *= newPeak / peak; - float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. ); - return mix( color, vec3( newPeak ), g ); -} -vec3 CustomToneMapping( vec3 color ) { return color; }`,transmission_fragment:`#ifdef USE_TRANSMISSION - material.transmission = transmission; - material.transmissionAlpha = 1.0; - material.thickness = thickness; - material.attenuationDistance = attenuationDistance; - material.attenuationColor = attenuationColor; - #ifdef USE_TRANSMISSIONMAP - material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r; - #endif - #ifdef USE_THICKNESSMAP - material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g; - #endif - vec3 pos = vWorldPosition; - vec3 v = normalize( cameraPosition - pos ); - vec3 n = inverseTransformDirection( normal, viewMatrix ); - vec4 transmitted = getIBLVolumeRefraction( - n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90, - pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness, - material.attenuationColor, material.attenuationDistance ); - material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); - totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,transmission_pars_fragment:`#ifdef USE_TRANSMISSION - uniform float transmission; - uniform float thickness; - uniform float attenuationDistance; - uniform vec3 attenuationColor; - #ifdef USE_TRANSMISSIONMAP - uniform sampler2D transmissionMap; - #endif - #ifdef USE_THICKNESSMAP - uniform sampler2D thicknessMap; - #endif - uniform vec2 transmissionSamplerSize; - uniform sampler2D transmissionSamplerMap; - uniform mat4 modelMatrix; - uniform mat4 projectionMatrix; - varying vec3 vWorldPosition; - float w0( float a ) { - return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 ); - } - float w1( float a ) { - return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 ); - } - float w2( float a ){ - return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 ); - } - float w3( float a ) { - return ( 1.0 / 6.0 ) * ( a * a * a ); - } - float g0( float a ) { - return w0( a ) + w1( a ); - } - float g1( float a ) { - return w2( a ) + w3( a ); - } - float h0( float a ) { - return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) ); - } - float h1( float a ) { - return 1.0 + w3( a ) / ( w2( a ) + w3( a ) ); - } - vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) { - uv = uv * texelSize.zw + 0.5; - vec2 iuv = floor( uv ); - vec2 fuv = fract( uv ); - float g0x = g0( fuv.x ); - float g1x = g1( fuv.x ); - float h0x = h0( fuv.x ); - float h1x = h1( fuv.x ); - float h0y = h0( fuv.y ); - float h1y = h1( fuv.y ); - vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; - vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; - vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; - vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; - return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) + - g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) ); - } - vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) { - vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) ); - vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) ); - vec2 fLodSizeInv = 1.0 / fLodSize; - vec2 cLodSizeInv = 1.0 / cLodSize; - vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) ); - vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) ); - return mix( fSample, cSample, fract( lod ) ); - } - vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) { - vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior ); - vec3 modelScale; - modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); - modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); - modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); - return normalize( refractionVector ) * thickness * modelScale; - } - float applyIorToRoughness( const in float roughness, const in float ior ) { - return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); - } - vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) { - float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); - return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod ); - } - vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) { - if ( isinf( attenuationDistance ) ) { - return vec3( 1.0 ); - } else { - vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance; - vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance; - } - } - vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor, - const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix, - const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness, - const in vec3 attenuationColor, const in float attenuationDistance ) { - vec4 transmittedLight; - vec3 transmittance; - #ifdef USE_DISPERSION - float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion; - vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread ); - for ( int i = 0; i < 3; i ++ ) { - vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix ); - vec3 refractedRayExit = position + transmissionRay; - - vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); - vec2 refractionCoords = ndcPos.xy / ndcPos.w; - refractionCoords += 1.0; - refractionCoords /= 2.0; - - vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] ); - transmittedLight[ i ] = transmissionSample[ i ]; - transmittedLight.a += transmissionSample.a; - transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ]; - } - transmittedLight.a /= 3.0; - - #else - - vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); - vec3 refractedRayExit = position + transmissionRay; - vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); - vec2 refractionCoords = ndcPos.xy / ndcPos.w; - refractionCoords += 1.0; - refractionCoords /= 2.0; - transmittedLight = getTransmissionSample( refractionCoords, roughness, ior ); - transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance ); - - #endif - vec3 attenuatedColor = transmittance * transmittedLight.rgb; - vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); - float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; - return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); - } -#endif`,uv_pars_fragment:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - varying vec2 vUv; -#endif -#ifdef USE_MAP - varying vec2 vMapUv; -#endif -#ifdef USE_ALPHAMAP - varying vec2 vAlphaMapUv; -#endif -#ifdef USE_LIGHTMAP - varying vec2 vLightMapUv; -#endif -#ifdef USE_AOMAP - varying vec2 vAoMapUv; -#endif -#ifdef USE_BUMPMAP - varying vec2 vBumpMapUv; -#endif -#ifdef USE_NORMALMAP - varying vec2 vNormalMapUv; -#endif -#ifdef USE_EMISSIVEMAP - varying vec2 vEmissiveMapUv; -#endif -#ifdef USE_METALNESSMAP - varying vec2 vMetalnessMapUv; -#endif -#ifdef USE_ROUGHNESSMAP - varying vec2 vRoughnessMapUv; -#endif -#ifdef USE_ANISOTROPYMAP - varying vec2 vAnisotropyMapUv; -#endif -#ifdef USE_CLEARCOATMAP - varying vec2 vClearcoatMapUv; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - varying vec2 vClearcoatNormalMapUv; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - varying vec2 vClearcoatRoughnessMapUv; -#endif -#ifdef USE_IRIDESCENCEMAP - varying vec2 vIridescenceMapUv; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - varying vec2 vIridescenceThicknessMapUv; -#endif -#ifdef USE_SHEEN_COLORMAP - varying vec2 vSheenColorMapUv; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - varying vec2 vSheenRoughnessMapUv; -#endif -#ifdef USE_SPECULARMAP - varying vec2 vSpecularMapUv; -#endif -#ifdef USE_SPECULAR_COLORMAP - varying vec2 vSpecularColorMapUv; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - varying vec2 vSpecularIntensityMapUv; -#endif -#ifdef USE_TRANSMISSIONMAP - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; -#endif -#ifdef USE_THICKNESSMAP - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; -#endif`,uv_pars_vertex:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - varying vec2 vUv; -#endif -#ifdef USE_MAP - uniform mat3 mapTransform; - varying vec2 vMapUv; -#endif -#ifdef USE_ALPHAMAP - uniform mat3 alphaMapTransform; - varying vec2 vAlphaMapUv; -#endif -#ifdef USE_LIGHTMAP - uniform mat3 lightMapTransform; - varying vec2 vLightMapUv; -#endif -#ifdef USE_AOMAP - uniform mat3 aoMapTransform; - varying vec2 vAoMapUv; -#endif -#ifdef USE_BUMPMAP - uniform mat3 bumpMapTransform; - varying vec2 vBumpMapUv; -#endif -#ifdef USE_NORMALMAP - uniform mat3 normalMapTransform; - varying vec2 vNormalMapUv; -#endif -#ifdef USE_DISPLACEMENTMAP - uniform mat3 displacementMapTransform; - varying vec2 vDisplacementMapUv; -#endif -#ifdef USE_EMISSIVEMAP - uniform mat3 emissiveMapTransform; - varying vec2 vEmissiveMapUv; -#endif -#ifdef USE_METALNESSMAP - uniform mat3 metalnessMapTransform; - varying vec2 vMetalnessMapUv; -#endif -#ifdef USE_ROUGHNESSMAP - uniform mat3 roughnessMapTransform; - varying vec2 vRoughnessMapUv; -#endif -#ifdef USE_ANISOTROPYMAP - uniform mat3 anisotropyMapTransform; - varying vec2 vAnisotropyMapUv; -#endif -#ifdef USE_CLEARCOATMAP - uniform mat3 clearcoatMapTransform; - varying vec2 vClearcoatMapUv; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - uniform mat3 clearcoatNormalMapTransform; - varying vec2 vClearcoatNormalMapUv; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform mat3 clearcoatRoughnessMapTransform; - varying vec2 vClearcoatRoughnessMapUv; -#endif -#ifdef USE_SHEEN_COLORMAP - uniform mat3 sheenColorMapTransform; - varying vec2 vSheenColorMapUv; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - uniform mat3 sheenRoughnessMapTransform; - varying vec2 vSheenRoughnessMapUv; -#endif -#ifdef USE_IRIDESCENCEMAP - uniform mat3 iridescenceMapTransform; - varying vec2 vIridescenceMapUv; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - uniform mat3 iridescenceThicknessMapTransform; - varying vec2 vIridescenceThicknessMapUv; -#endif -#ifdef USE_SPECULARMAP - uniform mat3 specularMapTransform; - varying vec2 vSpecularMapUv; -#endif -#ifdef USE_SPECULAR_COLORMAP - uniform mat3 specularColorMapTransform; - varying vec2 vSpecularColorMapUv; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - uniform mat3 specularIntensityMapTransform; - varying vec2 vSpecularIntensityMapUv; -#endif -#ifdef USE_TRANSMISSIONMAP - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; -#endif -#ifdef USE_THICKNESSMAP - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; -#endif`,uv_vertex:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - vUv = vec3( uv, 1 ).xy; -#endif -#ifdef USE_MAP - vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ALPHAMAP - vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_LIGHTMAP - vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_AOMAP - vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_BUMPMAP - vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_NORMALMAP - vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_DISPLACEMENTMAP - vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_EMISSIVEMAP - vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_METALNESSMAP - vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ROUGHNESSMAP - vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ANISOTROPYMAP - vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOATMAP - vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_IRIDESCENCEMAP - vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SHEEN_COLORMAP - vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULARMAP - vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULAR_COLORMAP - vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_TRANSMISSIONMAP - vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_THICKNESSMAP - vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,worldpos_vertex:`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 - vec4 worldPosition = vec4( transformed, 1.0 ); - #ifdef USE_BATCHING - worldPosition = batchingMatrix * worldPosition; - #endif - #ifdef USE_INSTANCING - worldPosition = instanceMatrix * worldPosition; - #endif - worldPosition = modelMatrix * worldPosition; -#endif`,background_vert:`varying vec2 vUv; -uniform mat3 uvTransform; -void main() { - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,background_frag:`uniform sampler2D t2D; -uniform float backgroundIntensity; -varying vec2 vUv; -void main() { - vec4 texColor = texture2D( t2D, vUv ); - #ifdef DECODE_VIDEO_TEXTURE - texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w ); - #endif - texColor.rgb *= backgroundIntensity; - gl_FragColor = texColor; - #include - #include -}`,backgroundCube_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include - gl_Position.z = gl_Position.w; -}`,backgroundCube_frag:`#ifdef ENVMAP_TYPE_CUBE - uniform samplerCube envMap; -#elif defined( ENVMAP_TYPE_CUBE_UV ) - uniform sampler2D envMap; -#endif -uniform float flipEnvMap; -uniform float backgroundBlurriness; -uniform float backgroundIntensity; -uniform mat3 backgroundRotation; -varying vec3 vWorldDirection; -#include -void main() { - #ifdef ENVMAP_TYPE_CUBE - vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) ); - #elif defined( ENVMAP_TYPE_CUBE_UV ) - vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness ); - #else - vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - #endif - texColor.rgb *= backgroundIntensity; - gl_FragColor = texColor; - #include - #include -}`,cube_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include - gl_Position.z = gl_Position.w; -}`,cube_frag:`uniform samplerCube tCube; -uniform float tFlip; -uniform float opacity; -varying vec3 vWorldDirection; -void main() { - vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) ); - gl_FragColor = texColor; - gl_FragColor.a *= opacity; - #include - #include -}`,depth_vert:`#include -#include -#include -#include -#include -#include -#include -#include -varying vec2 vHighPrecisionZW; -void main() { - #include - #include - #include - #include - #ifdef USE_DISPLACEMENTMAP - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - vHighPrecisionZW = gl_Position.zw; -}`,depth_frag:`#if DEPTH_PACKING == 3200 - uniform float opacity; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -varying vec2 vHighPrecisionZW; -void main() { - vec4 diffuseColor = vec4( 1.0 ); - #include - #if DEPTH_PACKING == 3200 - diffuseColor.a = opacity; - #endif - #include - #include - #include - #include - #include - float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5; - #if DEPTH_PACKING == 3200 - gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity ); - #elif DEPTH_PACKING == 3201 - gl_FragColor = packDepthToRGBA( fragCoordZ ); - #elif DEPTH_PACKING == 3202 - gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 ); - #elif DEPTH_PACKING == 3203 - gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 ); - #endif -}`,distanceRGBA_vert:`#define DISTANCE -varying vec3 vWorldPosition; -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #ifdef USE_DISPLACEMENTMAP - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - vWorldPosition = worldPosition.xyz; -}`,distanceRGBA_frag:`#define DISTANCE -uniform vec3 referencePosition; -uniform float nearDistance; -uniform float farDistance; -varying vec3 vWorldPosition; -#include -#include -#include -#include -#include -#include -#include -#include -void main () { - vec4 diffuseColor = vec4( 1.0 ); - #include - #include - #include - #include - #include - float dist = length( vWorldPosition - referencePosition ); - dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); - dist = saturate( dist ); - gl_FragColor = packDepthToRGBA( dist ); -}`,equirect_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include -}`,equirect_frag:`uniform sampler2D tEquirect; -varying vec3 vWorldDirection; -#include -void main() { - vec3 direction = normalize( vWorldDirection ); - vec2 sampleUV = equirectUv( direction ); - gl_FragColor = texture2D( tEquirect, sampleUV ); - #include - #include -}`,linedashed_vert:`uniform float scale; -attribute float lineDistance; -varying float vLineDistance; -#include -#include -#include -#include -#include -#include -#include -void main() { - vLineDistance = scale * lineDistance; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,linedashed_frag:`uniform vec3 diffuse; -uniform float opacity; -uniform float dashSize; -uniform float totalSize; -varying float vLineDistance; -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - if ( mod( vLineDistance, totalSize ) > dashSize ) { - discard; - } - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include - #include -}`,meshbasic_vert:`#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) - #include - #include - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,meshbasic_frag:`uniform vec3 diffuse; -uniform float opacity; -#ifndef FLAT_SHADED - varying vec3 vNormal; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - #include - #include - #include - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; - #else - reflectedLight.indirectDiffuse += vec3( 1.0 ); - #endif - #include - reflectedLight.indirectDiffuse *= diffuseColor.rgb; - vec3 outgoingLight = reflectedLight.indirectDiffuse; - #include - #include - #include - #include - #include - #include - #include -}`,meshlambert_vert:`#define LAMBERT -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include - #include -}`,meshlambert_frag:`#define LAMBERT -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include - #include -}`,meshmatcap_vert:`#define MATCAP -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; -}`,meshmatcap_frag:`#define MATCAP -uniform vec3 diffuse; -uniform float opacity; -uniform sampler2D matcap; -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 viewDir = normalize( vViewPosition ); - vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); - vec3 y = cross( viewDir, x ); - vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; - #ifdef USE_MATCAP - vec4 matcapColor = texture2D( matcap, uv ); - #else - vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); - #endif - vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb; - #include - #include - #include - #include - #include - #include -}`,meshnormal_vert:`#define NORMAL -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - varying vec3 vViewPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - vViewPosition = - mvPosition.xyz; -#endif -}`,meshnormal_frag:`#define NORMAL -uniform float opacity; -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - varying vec3 vViewPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity ); - #include - #include - #include - #include - gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a ); - #ifdef OPAQUE - gl_FragColor.a = 1.0; - #endif -}`,meshphong_vert:`#define PHONG -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include - #include -}`,meshphong_frag:`#define PHONG -uniform vec3 diffuse; -uniform vec3 emissive; -uniform vec3 specular; -uniform float shininess; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include - #include -}`,meshphysical_vert:`#define STANDARD -varying vec3 vViewPosition; -#ifdef USE_TRANSMISSION - varying vec3 vWorldPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include -#ifdef USE_TRANSMISSION - vWorldPosition = worldPosition.xyz; -#endif -}`,meshphysical_frag:`#define STANDARD -#ifdef PHYSICAL - #define IOR - #define USE_SPECULAR -#endif -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float roughness; -uniform float metalness; -uniform float opacity; -#ifdef IOR - uniform float ior; -#endif -#ifdef USE_SPECULAR - uniform float specularIntensity; - uniform vec3 specularColor; - #ifdef USE_SPECULAR_COLORMAP - uniform sampler2D specularColorMap; - #endif - #ifdef USE_SPECULAR_INTENSITYMAP - uniform sampler2D specularIntensityMap; - #endif -#endif -#ifdef USE_CLEARCOAT - uniform float clearcoat; - uniform float clearcoatRoughness; -#endif -#ifdef USE_DISPERSION - uniform float dispersion; -#endif -#ifdef USE_IRIDESCENCE - uniform float iridescence; - uniform float iridescenceIOR; - uniform float iridescenceThicknessMinimum; - uniform float iridescenceThicknessMaximum; -#endif -#ifdef USE_SHEEN - uniform vec3 sheenColor; - uniform float sheenRoughness; - #ifdef USE_SHEEN_COLORMAP - uniform sampler2D sheenColorMap; - #endif - #ifdef USE_SHEEN_ROUGHNESSMAP - uniform sampler2D sheenRoughnessMap; - #endif -#endif -#ifdef USE_ANISOTROPY - uniform vec2 anisotropyVector; - #ifdef USE_ANISOTROPYMAP - uniform sampler2D anisotropyMap; - #endif -#endif -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; - vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; - #include - vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; - #ifdef USE_SHEEN - float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); - outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect; - #endif - #ifdef USE_CLEARCOAT - float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) ); - vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); - outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat; - #endif - #include - #include - #include - #include - #include - #include -}`,meshtoon_vert:`#define TOON -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include -}`,meshtoon_frag:`#define TOON -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include -}`,points_vert:`uniform float size; -uniform float scale; -#include -#include -#include -#include -#include -#include -#ifdef USE_POINTS_UV - varying vec2 vUv; - uniform mat3 uvTransform; -#endif -void main() { - #ifdef USE_POINTS_UV - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - #endif - #include - #include - #include - #include - #include - #include - gl_PointSize = size; - #ifdef USE_SIZEATTENUATION - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z ); - #endif - #include - #include - #include - #include -}`,points_frag:`uniform vec3 diffuse; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include - #include -}`,shadow_vert:`#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,shadow_frag:`uniform vec3 color; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) ); - #include - #include - #include -}`,sprite_vert:`uniform float rotation; -uniform vec2 center; -#include -#include -#include -#include -#include -void main() { - #include - vec4 mvPosition = modelViewMatrix[ 3 ]; - vec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) ); - #ifndef USE_SIZEATTENUATION - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) scale *= - mvPosition.z; - #endif - vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale; - vec2 rotatedPosition; - rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; - rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; - mvPosition.xy += rotatedPosition; - gl_Position = projectionMatrix * mvPosition; - #include - #include - #include -}`,sprite_frag:`uniform vec3 diffuse; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include -}`},I={common:{diffuse:{value:new P(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new j},alphaMap:{value:null},alphaMapTransform:{value:new j},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new j}},envmap:{envMap:{value:null},envMapRotation:{value:new j},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new j}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new j}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new j},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new j},normalScale:{value:new A(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new j},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new j}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new j}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new j}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new P(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new P(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new j},alphaTest:{value:0},uvTransform:{value:new j}},sprite:{diffuse:{value:new P(16777215)},opacity:{value:1},center:{value:new A(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new j},alphaMap:{value:null},alphaMapTransform:{value:new j},alphaTest:{value:0}}},Aa={basic:{uniforms:$i([I.common,I.specularmap,I.envmap,I.aomap,I.lightmap,I.fog]),vertexShader:ka.meshbasic_vert,fragmentShader:ka.meshbasic_frag},lambert:{uniforms:$i([I.common,I.specularmap,I.envmap,I.aomap,I.lightmap,I.emissivemap,I.bumpmap,I.normalmap,I.displacementmap,I.fog,I.lights,{emissive:{value:new P(0)}}]),vertexShader:ka.meshlambert_vert,fragmentShader:ka.meshlambert_frag},phong:{uniforms:$i([I.common,I.specularmap,I.envmap,I.aomap,I.lightmap,I.emissivemap,I.bumpmap,I.normalmap,I.displacementmap,I.fog,I.lights,{emissive:{value:new P(0)},specular:{value:new P(1118481)},shininess:{value:30}}]),vertexShader:ka.meshphong_vert,fragmentShader:ka.meshphong_frag},standard:{uniforms:$i([I.common,I.envmap,I.aomap,I.lightmap,I.emissivemap,I.bumpmap,I.normalmap,I.displacementmap,I.roughnessmap,I.metalnessmap,I.fog,I.lights,{emissive:{value:new P(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:ka.meshphysical_vert,fragmentShader:ka.meshphysical_frag},toon:{uniforms:$i([I.common,I.aomap,I.lightmap,I.emissivemap,I.bumpmap,I.normalmap,I.displacementmap,I.gradientmap,I.fog,I.lights,{emissive:{value:new P(0)}}]),vertexShader:ka.meshtoon_vert,fragmentShader:ka.meshtoon_frag},matcap:{uniforms:$i([I.common,I.bumpmap,I.normalmap,I.displacementmap,I.fog,{matcap:{value:null}}]),vertexShader:ka.meshmatcap_vert,fragmentShader:ka.meshmatcap_frag},points:{uniforms:$i([I.points,I.fog]),vertexShader:ka.points_vert,fragmentShader:ka.points_frag},dashed:{uniforms:$i([I.common,I.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:ka.linedashed_vert,fragmentShader:ka.linedashed_frag},depth:{uniforms:$i([I.common,I.displacementmap]),vertexShader:ka.depth_vert,fragmentShader:ka.depth_frag},normal:{uniforms:$i([I.common,I.bumpmap,I.normalmap,I.displacementmap,{opacity:{value:1}}]),vertexShader:ka.meshnormal_vert,fragmentShader:ka.meshnormal_frag},sprite:{uniforms:$i([I.sprite,I.fog]),vertexShader:ka.sprite_vert,fragmentShader:ka.sprite_frag},background:{uniforms:{uvTransform:{value:new j},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:ka.background_vert,fragmentShader:ka.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new j}},vertexShader:ka.backgroundCube_vert,fragmentShader:ka.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:ka.cube_vert,fragmentShader:ka.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:ka.equirect_vert,fragmentShader:ka.equirect_frag},distanceRGBA:{uniforms:$i([I.common,I.displacementmap,{referencePosition:{value:new M},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:ka.distanceRGBA_vert,fragmentShader:ka.distanceRGBA_frag},shadow:{uniforms:$i([I.lights,I.fog,{color:{value:new P(0)},opacity:{value:1}}]),vertexShader:ka.shadow_vert,fragmentShader:ka.shadow_frag}};Aa.physical={uniforms:$i([Aa.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new j},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new j},clearcoatNormalScale:{value:new A(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new j},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new j},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new j},sheen:{value:0},sheenColor:{value:new P(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new j},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new j},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new j},transmissionSamplerSize:{value:new A},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new j},attenuationDistance:{value:0},attenuationColor:{value:new P(0)},specularColor:{value:new P(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new j},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new j},anisotropyVector:{value:new A},anisotropyMap:{value:null},anisotropyMapTransform:{value:new j}}]),vertexShader:ka.meshphysical_vert,fragmentShader:ka.meshphysical_frag};var ja={r:0,b:0,g:0},Ma=new Dr,Na=new N;function Pa(e,t,n,r,i,a,o){let s=new P(0),c=a===!0?0:1,l,u,d=null,f=0,p=null;function m(e){let r=e.isScene===!0?e.background:null;return r&&r.isTexture&&(r=(e.backgroundBlurriness>0?n:t).get(r)),r}function h(t){let n=!1,i=m(t);i===null?_(s,c):i&&i.isColor&&(_(i,1),n=!0);let a=e.xr.getEnvironmentBlendMode();a===`additive`?r.buffers.color.setClear(0,0,0,1,o):a===`alpha-blend`&&r.buffers.color.setClear(0,0,0,0,o),(e.autoClear||n)&&(r.buffers.depth.setTest(!0),r.buffers.depth.setMask(!0),r.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))}function g(t,n){let r=m(n);r&&(r.isCubeTexture||r.mapping===306)?(u===void 0&&(u=new Ji(new Zi(1,1,1),new aa({name:`BackgroundCubeMaterial`,uniforms:Qi(Aa.backgroundCube.uniforms),vertexShader:Aa.backgroundCube.vertexShader,fragmentShader:Aa.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),u.geometry.deleteAttribute(`normal`),u.geometry.deleteAttribute(`uv`),u.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(u.material,`envMap`,{get:function(){return this.uniforms.envMap.value}}),i.update(u)),Ma.copy(n.backgroundRotation),Ma.x*=-1,Ma.y*=-1,Ma.z*=-1,r.isCubeTexture&&r.isRenderTargetTexture===!1&&(Ma.y*=-1,Ma.z*=-1),u.material.uniforms.envMap.value=r,u.material.uniforms.flipEnvMap.value=r.isCubeTexture&&r.isRenderTargetTexture===!1?-1:1,u.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,u.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,u.material.uniforms.backgroundRotation.value.setFromMatrix4(Na.makeRotationFromEuler(Ma)),u.material.toneMapped=Tn.getTransfer(r.colorSpace)!==mt,(d!==r||f!==r.version||p!==e.toneMapping)&&(u.material.needsUpdate=!0,d=r,f=r.version,p=e.toneMapping),u.layers.enableAll(),t.unshift(u,u.geometry,u.material,0,0,null)):r&&r.isTexture&&(l===void 0&&(l=new Ji(new Oa(2,2),new aa({name:`BackgroundMaterial`,uniforms:Qi(Aa.background.uniforms),vertexShader:Aa.background.vertexShader,fragmentShader:Aa.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),l.geometry.deleteAttribute(`normal`),Object.defineProperty(l.material,`map`,{get:function(){return this.uniforms.t2D.value}}),i.update(l)),l.material.uniforms.t2D.value=r,l.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,l.material.toneMapped=Tn.getTransfer(r.colorSpace)!==mt,r.matrixAutoUpdate===!0&&r.updateMatrix(),l.material.uniforms.uvTransform.value.copy(r.matrix),(d!==r||f!==r.version||p!==e.toneMapping)&&(l.material.needsUpdate=!0,d=r,f=r.version,p=e.toneMapping),l.layers.enableAll(),t.unshift(l,l.geometry,l.material,0,0,null))}function _(t,n){t.getRGB(ja,ta(e)),r.buffers.color.setClear(ja.r,ja.g,ja.b,n,o)}return{getClearColor:function(){return s},setClearColor:function(e,t=1){s.set(e),c=t,_(s,c)},getClearAlpha:function(){return c},setClearAlpha:function(e){c=e,_(s,c)},render:h,addToRenderList:g}}function Fa(e,t){let n=e.getParameter(e.MAX_VERTEX_ATTRIBS),r={},i=f(null),a=i,o=!1;function s(n,r,i,s,c){let u=!1,f=d(s,i,r);a!==f&&(a=f,l(a.object)),u=p(n,s,i,c),u&&m(n,s,i,c),c!==null&&t.update(c,e.ELEMENT_ARRAY_BUFFER),(u||o)&&(o=!1,b(n,r,i,s),c!==null&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t.get(c).buffer))}function c(){return e.createVertexArray()}function l(t){return e.bindVertexArray(t)}function u(t){return e.deleteVertexArray(t)}function d(e,t,n){let i=n.wireframe===!0,a=r[e.id];a===void 0&&(a={},r[e.id]=a);let o=a[t.id];o===void 0&&(o={},a[t.id]=o);let s=o[i];return s===void 0&&(s=f(c()),o[i]=s),s}function f(e){let t=[],r=[],i=[];for(let e=0;e=0){let n=i[t],r=o[t];if(r===void 0&&(t===`instanceMatrix`&&e.instanceMatrix&&(r=e.instanceMatrix),t===`instanceColor`&&e.instanceColor&&(r=e.instanceColor)),n===void 0||n.attribute!==r||r&&n.data!==r.data)return!0;s++}return a.attributesNum!==s||a.index!==r}function m(e,t,n,r){let i={},o=t.attributes,s=0,c=n.getAttributes();for(let t in c)if(c[t].location>=0){let n=o[t];n===void 0&&(t===`instanceMatrix`&&e.instanceMatrix&&(n=e.instanceMatrix),t===`instanceColor`&&e.instanceColor&&(n=e.instanceColor));let r={};r.attribute=n,n&&n.data&&(r.data=n.data),i[t]=r,s++}a.attributes=i,a.attributesNum=s,a.index=r}function h(){let e=a.newAttributes;for(let t=0,n=e.length;t=0){let s=o[r];if(s===void 0&&(r===`instanceMatrix`&&n.instanceMatrix&&(s=n.instanceMatrix),r===`instanceColor`&&n.instanceColor&&(s=n.instanceColor)),s!==void 0){let r=s.normalized,o=s.itemSize,c=t.get(s);if(c===void 0)continue;let l=c.buffer,u=c.type,d=c.bytesPerElement,f=u===e.INT||u===e.UNSIGNED_INT||s.gpuType===1013;if(s.isInterleavedBufferAttribute){let t=s.data,c=t.stride,p=s.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return`highp`;t=`mediump`}return t===`mediump`&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?`mediump`:`lowp`}let l=n.precision===void 0?`highp`:n.precision,u=c(l);u!==l&&(console.warn(`THREE.WebGLRenderer:`,l,`not supported, using`,u,`instead.`),l=u);let d=n.logarithmicDepthBuffer===!0,f=n.reverseDepthBuffer===!0&&t.has(`EXT_clip_control`);if(f===!0){let e=t.get(`EXT_clip_control`);e.clipControlEXT(e.LOWER_LEFT_EXT,e.ZERO_TO_ONE_EXT)}let p=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),m=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS),h=e.getParameter(e.MAX_TEXTURE_SIZE),g=e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),_=e.getParameter(e.MAX_VERTEX_ATTRIBS),v=e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),y=e.getParameter(e.MAX_VARYING_VECTORS),b=e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),x=m>0,S=e.getParameter(e.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:a,getMaxPrecision:c,textureFormatReadable:o,textureTypeReadable:s,precision:l,logarithmicDepthBuffer:d,reverseDepthBuffer:f,maxTextures:p,maxVertexTextures:m,maxTextureSize:h,maxCubemapSize:g,maxAttributes:_,maxVertexUniforms:v,maxVaryings:y,maxFragmentUniforms:b,vertexTextures:x,maxSamples:S}}function Ra(e){let t=this,n=null,r=0,i=!1,a=!1,o=new Sa,s=new j,c={value:null,needsUpdate:!1};this.uniform=c,this.numPlanes=0,this.numIntersection=0,this.init=function(e,t){let n=e.length!==0||t||r!==0||i;return i=t,r=e.length,n},this.beginShadows=function(){a=!0,u(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(e,t){n=u(e,t,0)},this.setState=function(t,o,s){let d=t.clippingPlanes,f=t.clipIntersection,p=t.clipShadows,m=e.get(t);if(!i||d===null||d.length===0||a&&!p)a?u(null):l();else{let e=a?0:r,t=e*4,i=m.clippingState||null;c.value=i,i=u(d,o,t,s);for(let e=0;e!==t;++e)i[e]=n[e];m.clippingState=i,this.numIntersection=f?this.numPlanes:0,this.numPlanes+=e}};function l(){c.value!==n&&(c.value=n,c.needsUpdate=r>0),t.numPlanes=r,t.numIntersection=0}function u(e,n,r,i){let a=e===null?0:e.length,l=null;if(a!==0){if(l=c.value,i!==!0||l===null){let t=r+a*4,i=n.matrixWorldInverse;s.getNormalMatrix(i),(l===null||l.length0){let o=new va(a.height);return o.fromEquirectangularTexture(e,r),t.set(r,o),r.addEventListener(`dispose`,i),n(o.texture,r.mapping)}else return null}}return r}function i(e){let n=e.target;n.removeEventListener(`dispose`,i);let r=t.get(n);r!==void 0&&(t.delete(n),r.dispose())}function a(){t=new WeakMap}return{get:r,dispose:a}}var Ba=class extends la{constructor(e=-1,t=1,n=1,r=-1,i=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type=`OrthographicCamera`,this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=n,this.bottom=r,this.near=i,this.far=a,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=e.view===null?null:Object.assign({},e.view),this}setViewOffset(e,t,n,r,i,a){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,r=(this.top+this.bottom)/2,i=n-e,a=n+e,o=r+t,s=r-t;if(this.view!==null&&this.view.enabled){let e=(this.right-this.left)/this.view.fullWidth/this.zoom,t=(this.top-this.bottom)/this.view.fullHeight/this.zoom;i+=e*this.view.offsetX,a=i+e*this.view.width,o-=t*this.view.offsetY,s=o-t*this.view.height}this.projectionMatrix.makeOrthographic(i,a,o,s,this.near,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,this.view!==null&&(t.object.view=Object.assign({},this.view)),t}},Va=4,Ha=[.125,.215,.35,.446,.526,.582],Ua=20,Wa=new Ba,Ga=new P,Ka=null,qa=0,Ja=0,Ya=!1,Xa=(1+Math.sqrt(5))/2,Za=1/Xa,Qa=[new M(-Xa,Za,0),new M(Xa,Za,0),new M(-Za,0,Xa),new M(Za,0,Xa),new M(0,Xa,-Za),new M(0,Xa,Za),new M(-1,1,-1),new M(1,1,-1),new M(-1,1,1),new M(1,1,1)],$a=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,n=.1,r=100){Ka=this._renderer.getRenderTarget(),qa=this._renderer.getActiveCubeFace(),Ja=this._renderer.getActiveMipmapLevel(),Ya=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(256);let i=this._allocateTargets();return i.depthBuffer=!0,this._sceneToCubeUV(e,n,r,i),t>0&&this._blur(i,0,0,t),this._applyPMREM(i),this._cleanup(i),i}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=ao(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=io(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=2**this._lodMax}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?c:0,c,c),s.setRenderTarget(r),f&&s.render(d,i),s.render(e,i)}d.geometry.dispose(),d.material.dispose(),s.toneMapping=l,s.autoClear=c,e.background=p}_textureToCubeUV(e,t){let n=this._renderer,r=e.mapping===301||e.mapping===302;r?(this._cubemapMaterial===null&&(this._cubemapMaterial=ao()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=io());let i=r?this._cubemapMaterial:this._equirectMaterial,a=new Ji(this._lodPlanes[0],i),o=i.uniforms;o.envMap.value=e;let s=this._cubeSize;no(t,0,0,3*s,2*s),n.setRenderTarget(t),n.render(a,Wa)}_applyPMREM(e){let t=this._renderer,n=t.autoClear;t.autoClear=!1;let r=this._lodPlanes.length;for(let t=1;tUa&&console.warn(`sigmaRadians, ${i}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${Ua}`);let h=[],g=0;for(let e=0;e_-Va?r-_+Va:0),4*(this._cubeSize-v),3*v,2*v),s.setRenderTarget(t),s.render(l,Wa)}};function eo(e){let t=[],n=[],r=[],i=e,a=e-Va+1+Ha.length;for(let o=0;oe-Va?s=Ha[o-e+Va-1]:o===0&&(s=0),r.push(s);let c=1/(a-2),l=-c,u=1+c,d=[l,l,u,l,u,u,l,l,u,u,l,u],f=new Float32Array(108),p=new Float32Array(72),m=new Float32Array(36);for(let e=0;e<6;e++){let t=e%3*2/3-1,n=e>2?0:-1,r=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];f.set(r,18*e),p.set(d,12*e);let i=[e,e,e,e,e,e];m.set(i,6*e)}let h=new Ii;h.setAttribute(`position`,new bi(f,3)),h.setAttribute(`uv`,new bi(p,2)),h.setAttribute(`faceIndex`,new bi(m,1)),t.push(h),i>Va&&i--}return{lodPlanes:t,sizeLods:n,sigmas:r}}function to(e,t,n){let r=new Ln(e,t,n);return r.texture.mapping=306,r.texture.name=`PMREM.cubeUv`,r.scissorTest=!0,r}function no(e,t,n,r,i){e.viewport.set(t,n,r,i),e.scissor.set(t,n,r,i)}function ro(e,t,n){let r=new Float32Array(Ua),i=new M(0,1,0);return new aa({name:`SphericalGaussianBlur`,defines:{n:Ua,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:r},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:i}},vertexShader:oo(),fragmentShader:` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - uniform int samples; - uniform float weights[ n ]; - uniform bool latitudinal; - uniform float dTheta; - uniform float mipInt; - uniform vec3 poleAxis; - - #define ENVMAP_TYPE_CUBE_UV - #include - - vec3 getSample( float theta, vec3 axis ) { - - float cosTheta = cos( theta ); - // Rodrigues' axis-angle rotation - vec3 sampleDirection = vOutputDirection * cosTheta - + cross( axis, vOutputDirection ) * sin( theta ) - + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); - - return bilinearCubeUV( envMap, sampleDirection, mipInt ); - - } - - void main() { - - vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); - - if ( all( equal( axis, vec3( 0.0 ) ) ) ) { - - axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); - - } - - axis = normalize( axis ); - - gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); - - for ( int i = 1; i < n; i++ ) { - - if ( i >= samples ) { - - break; - - } - - float theta = dTheta * float( i ); - gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); - gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); - - } - - } - `,blending:0,depthTest:!1,depthWrite:!1})}function io(){return new aa({name:`EquirectangularToCubeUV`,uniforms:{envMap:{value:null}},vertexShader:oo(),fragmentShader:` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - - #include - - void main() { - - vec3 outputDirection = normalize( vOutputDirection ); - vec2 uv = equirectUv( outputDirection ); - - gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); - - } - `,blending:0,depthTest:!1,depthWrite:!1})}function ao(){return new aa({name:`CubemapToCubeUV`,uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:oo(),fragmentShader:` - - precision mediump float; - precision mediump int; - - uniform float flipEnvMap; - - varying vec3 vOutputDirection; - - uniform samplerCube envMap; - - void main() { - - gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); - - } - `,blending:0,depthTest:!1,depthWrite:!1})}function oo(){return` - - precision mediump float; - precision mediump int; - - attribute float faceIndex; - - varying vec3 vOutputDirection; - - // RH coordinate system; PMREM face-indexing convention - vec3 getDirection( vec2 uv, float face ) { - - uv = 2.0 * uv - 1.0; - - vec3 direction = vec3( uv, 1.0 ); - - if ( face == 0.0 ) { - - direction = direction.zyx; // ( 1, v, u ) pos x - - } else if ( face == 1.0 ) { - - direction = direction.xzy; - direction.xz *= -1.0; // ( -u, 1, -v ) pos y - - } else if ( face == 2.0 ) { - - direction.x *= -1.0; // ( -u, v, 1 ) pos z - - } else if ( face == 3.0 ) { - - direction = direction.zyx; - direction.xz *= -1.0; // ( -1, v, -u ) neg x - - } else if ( face == 4.0 ) { - - direction = direction.xzy; - direction.xy *= -1.0; // ( -u, -1, v ) neg y - - } else if ( face == 5.0 ) { - - direction.z *= -1.0; // ( u, v, -1 ) neg z - - } - - return direction; - - } - - void main() { - - vOutputDirection = getDirection( uv, faceIndex ); - gl_Position = vec4( position, 1.0 ); - - } - `}function so(e){let t=new WeakMap,n=null;function r(r){if(r&&r.isTexture){let o=r.mapping,s=o===303||o===304,c=o===301||o===302;if(s||c){let o=t.get(r),l=o===void 0?0:o.texture.pmremVersion;if(r.isRenderTargetTexture&&r.pmremVersion!==l)return n===null&&(n=new $a(e)),o=s?n.fromEquirectangular(r,o):n.fromCubemap(r,o),o.texture.pmremVersion=r.pmremVersion,t.set(r,o),o.texture;if(o!==void 0)return o.texture;{let l=r.image;return s&&l&&l.height>0||c&&l&&i(l)?(n=new $a(e),o=s?n.fromEquirectangular(r):n.fromCubemap(r),o.texture.pmremVersion=r.pmremVersion,t.set(r,o),r.addEventListener(`dispose`,a),o.texture):null}}}return r}function i(e){let t=0;for(let n=0;n<6;n++)e[n]!==void 0&&t++;return t===6}function a(e){let n=e.target;n.removeEventListener(`dispose`,a);let r=t.get(n);r!==void 0&&(t.delete(n),r.dispose())}function o(){t=new WeakMap,n!==null&&(n.dispose(),n=null)}return{get:r,dispose:o}}function co(e){let t={};function n(n){if(t[n]!==void 0)return t[n];let r;switch(n){case`WEBGL_depth_texture`:r=e.getExtension(`WEBGL_depth_texture`)||e.getExtension(`MOZ_WEBGL_depth_texture`)||e.getExtension(`WEBKIT_WEBGL_depth_texture`);break;case`EXT_texture_filter_anisotropic`:r=e.getExtension(`EXT_texture_filter_anisotropic`)||e.getExtension(`MOZ_EXT_texture_filter_anisotropic`)||e.getExtension(`WEBKIT_EXT_texture_filter_anisotropic`);break;case`WEBGL_compressed_texture_s3tc`:r=e.getExtension(`WEBGL_compressed_texture_s3tc`)||e.getExtension(`MOZ_WEBGL_compressed_texture_s3tc`)||e.getExtension(`WEBKIT_WEBGL_compressed_texture_s3tc`);break;case`WEBGL_compressed_texture_pvrtc`:r=e.getExtension(`WEBGL_compressed_texture_pvrtc`)||e.getExtension(`WEBKIT_WEBGL_compressed_texture_pvrtc`);break;default:r=e.getExtension(n)}return t[n]=r,r}return{has:function(e){return n(e)!==null},init:function(){n(`EXT_color_buffer_float`),n(`WEBGL_clip_cull_distance`),n(`OES_texture_float_linear`),n(`EXT_color_buffer_half_float`),n(`WEBGL_multisampled_render_to_texture`),n(`WEBGL_render_shared_exponent`)},get:function(e){let t=n(e);return t===null&&_n(`THREE.WebGLRenderer: `+e+` extension not supported.`),t}}}function lo(e,t,n,r){let i={},a=new WeakMap;function o(e){let s=e.target;s.index!==null&&t.remove(s.index);for(let e in s.attributes)t.remove(s.attributes[e]);for(let e in s.morphAttributes){let n=s.morphAttributes[e];for(let e=0,r=n.length;et.maxTextureSize&&(m=Math.ceil(p/t.maxTextureSize),p=t.maxTextureSize);let h=new Float32Array(p*m*4*u),g=new Rn(h,p,m,u);g.type=E,g.needsUpdate=!0;let _=f*4;for(let t=0;t0)return e;let i=t*n,a=xo[i];if(a===void 0&&(a=new Float32Array(i),xo[i]=a),t!==0){r.toArray(a,0);for(let r=1,i=0;r!==t;++r)i+=n,e[r].toArray(a,i)}return a}function Do(e,t){if(e.length!==t.length)return!1;for(let n=0,r=e.length;n`:` `} ${i}: ${n[e]}`)}return r.join(` -`)}function Ds(e){let t=Tn.getPrimaries(Tn.workingColorSpace),n=Tn.getPrimaries(e),r;switch(t===n?r=``:t===`p3`&&n===`rec709`?r=`LinearDisplayP3ToLinearSRGB`:t===`rec709`&&n===`p3`&&(r=`LinearSRGBToLinearDisplayP3`),e){case ut:case ft:return[r,`LinearTransferOETF`];case lt:case dt:return[r,`sRGBTransferOETF`];default:return console.warn(`THREE.WebGLProgram: Unsupported color space:`,e),[r,`LinearTransferOETF`]}}function Os(e,t,n){let r=e.getShaderParameter(t,e.COMPILE_STATUS),i=e.getShaderInfoLog(t).trim();if(r&&i===``)return``;let a=/ERROR: 0:(\d+)/.exec(i);if(a){let r=parseInt(a[1]);return n.toUpperCase()+` - -`+i+` - -`+Es(e.getShaderSource(t),r)}else return i}function ks(e,t){let n=Ds(t);return`vec4 ${e}( vec4 value ) { return ${n[0]}( ${n[1]}( value ) ); }`}function As(e,t){let n;switch(t){case 1:n=`Linear`;break;case 2:n=`Reinhard`;break;case 3:n=`Cineon`;break;case 4:n=`ACESFilmic`;break;case 6:n=`AgX`;break;case 7:n=`Neutral`;break;case 5:n=`Custom`;break;default:console.warn(`THREE.WebGLProgram: Unsupported toneMapping:`,t),n=`Linear`}return`vec3 `+e+`( vec3 color ) { return `+n+`ToneMapping( color ); }`}var js=new M;function Ms(){return Tn.getLuminanceCoefficients(js),[`float luminance( const in vec3 rgb ) {`,` const vec3 weights = vec3( ${js.x.toFixed(4)}, ${js.y.toFixed(4)}, ${js.z.toFixed(4)} );`,` return dot( weights, rgb );`,`}`].join(` -`)}function Ns(e){return[e.extensionClipCullDistance?`#extension GL_ANGLE_clip_cull_distance : require`:``,e.extensionMultiDraw?`#extension GL_ANGLE_multi_draw : require`:``].filter(Is).join(` -`)}function Ps(e){let t=[];for(let n in e){let r=e[n];r!==!1&&t.push(`#define `+n+` `+r)}return t.join(` -`)}function Fs(e,t){let n={},r=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let i=0;i/gm;function Bs(e){return e.replace(zs,Hs)}var Vs=new Map;function Hs(e,t){let n=ka[t];if(n===void 0){let e=Vs.get(t);if(e!==void 0)n=ka[e],console.warn(`THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.`,t,e);else throw Error(`Can not resolve #include <`+t+`>`)}return Bs(n)}var Us=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Ws(e){return e.replace(Us,Gs)}function Gs(e,t,n,r){let i=``;for(let e=parseInt(t);e0&&(g+=` -`),_=[`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m].filter(Is).join(` -`),_.length>0&&(_+=` -`)):(g=[Ks(n),`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m,n.extensionClipCullDistance?`#define USE_CLIP_DISTANCE`:``,n.batching?`#define USE_BATCHING`:``,n.batchingColor?`#define USE_BATCHING_COLOR`:``,n.instancing?`#define USE_INSTANCING`:``,n.instancingColor?`#define USE_INSTANCING_COLOR`:``,n.instancingMorph?`#define USE_INSTANCING_MORPH`:``,n.useFog&&n.fog?`#define USE_FOG`:``,n.useFog&&n.fogExp2?`#define FOG_EXP2`:``,n.map?`#define USE_MAP`:``,n.envMap?`#define USE_ENVMAP`:``,n.envMap?`#define `+u:``,n.lightMap?`#define USE_LIGHTMAP`:``,n.aoMap?`#define USE_AOMAP`:``,n.bumpMap?`#define USE_BUMPMAP`:``,n.normalMap?`#define USE_NORMALMAP`:``,n.normalMapObjectSpace?`#define USE_NORMALMAP_OBJECTSPACE`:``,n.normalMapTangentSpace?`#define USE_NORMALMAP_TANGENTSPACE`:``,n.displacementMap?`#define USE_DISPLACEMENTMAP`:``,n.emissiveMap?`#define USE_EMISSIVEMAP`:``,n.anisotropy?`#define USE_ANISOTROPY`:``,n.anisotropyMap?`#define USE_ANISOTROPYMAP`:``,n.clearcoatMap?`#define USE_CLEARCOATMAP`:``,n.clearcoatRoughnessMap?`#define USE_CLEARCOAT_ROUGHNESSMAP`:``,n.clearcoatNormalMap?`#define USE_CLEARCOAT_NORMALMAP`:``,n.iridescenceMap?`#define USE_IRIDESCENCEMAP`:``,n.iridescenceThicknessMap?`#define USE_IRIDESCENCE_THICKNESSMAP`:``,n.specularMap?`#define USE_SPECULARMAP`:``,n.specularColorMap?`#define USE_SPECULAR_COLORMAP`:``,n.specularIntensityMap?`#define USE_SPECULAR_INTENSITYMAP`:``,n.roughnessMap?`#define USE_ROUGHNESSMAP`:``,n.metalnessMap?`#define USE_METALNESSMAP`:``,n.alphaMap?`#define USE_ALPHAMAP`:``,n.alphaHash?`#define USE_ALPHAHASH`:``,n.transmission?`#define USE_TRANSMISSION`:``,n.transmissionMap?`#define USE_TRANSMISSIONMAP`:``,n.thicknessMap?`#define USE_THICKNESSMAP`:``,n.sheenColorMap?`#define USE_SHEEN_COLORMAP`:``,n.sheenRoughnessMap?`#define USE_SHEEN_ROUGHNESSMAP`:``,n.mapUv?`#define MAP_UV `+n.mapUv:``,n.alphaMapUv?`#define ALPHAMAP_UV `+n.alphaMapUv:``,n.lightMapUv?`#define LIGHTMAP_UV `+n.lightMapUv:``,n.aoMapUv?`#define AOMAP_UV `+n.aoMapUv:``,n.emissiveMapUv?`#define EMISSIVEMAP_UV `+n.emissiveMapUv:``,n.bumpMapUv?`#define BUMPMAP_UV `+n.bumpMapUv:``,n.normalMapUv?`#define NORMALMAP_UV `+n.normalMapUv:``,n.displacementMapUv?`#define DISPLACEMENTMAP_UV `+n.displacementMapUv:``,n.metalnessMapUv?`#define METALNESSMAP_UV `+n.metalnessMapUv:``,n.roughnessMapUv?`#define ROUGHNESSMAP_UV `+n.roughnessMapUv:``,n.anisotropyMapUv?`#define ANISOTROPYMAP_UV `+n.anisotropyMapUv:``,n.clearcoatMapUv?`#define CLEARCOATMAP_UV `+n.clearcoatMapUv:``,n.clearcoatNormalMapUv?`#define CLEARCOAT_NORMALMAP_UV `+n.clearcoatNormalMapUv:``,n.clearcoatRoughnessMapUv?`#define CLEARCOAT_ROUGHNESSMAP_UV `+n.clearcoatRoughnessMapUv:``,n.iridescenceMapUv?`#define IRIDESCENCEMAP_UV `+n.iridescenceMapUv:``,n.iridescenceThicknessMapUv?`#define IRIDESCENCE_THICKNESSMAP_UV `+n.iridescenceThicknessMapUv:``,n.sheenColorMapUv?`#define SHEEN_COLORMAP_UV `+n.sheenColorMapUv:``,n.sheenRoughnessMapUv?`#define SHEEN_ROUGHNESSMAP_UV `+n.sheenRoughnessMapUv:``,n.specularMapUv?`#define SPECULARMAP_UV `+n.specularMapUv:``,n.specularColorMapUv?`#define SPECULAR_COLORMAP_UV `+n.specularColorMapUv:``,n.specularIntensityMapUv?`#define SPECULAR_INTENSITYMAP_UV `+n.specularIntensityMapUv:``,n.transmissionMapUv?`#define TRANSMISSIONMAP_UV `+n.transmissionMapUv:``,n.thicknessMapUv?`#define THICKNESSMAP_UV `+n.thicknessMapUv:``,n.vertexTangents&&n.flatShading===!1?`#define USE_TANGENT`:``,n.vertexColors?`#define USE_COLOR`:``,n.vertexAlphas?`#define USE_COLOR_ALPHA`:``,n.vertexUv1s?`#define USE_UV1`:``,n.vertexUv2s?`#define USE_UV2`:``,n.vertexUv3s?`#define USE_UV3`:``,n.pointsUvs?`#define USE_POINTS_UV`:``,n.flatShading?`#define FLAT_SHADED`:``,n.skinning?`#define USE_SKINNING`:``,n.morphTargets?`#define USE_MORPHTARGETS`:``,n.morphNormals&&n.flatShading===!1?`#define USE_MORPHNORMALS`:``,n.morphColors?`#define USE_MORPHCOLORS`:``,n.morphTargetsCount>0?`#define MORPHTARGETS_TEXTURE_STRIDE `+n.morphTextureStride:``,n.morphTargetsCount>0?`#define MORPHTARGETS_COUNT `+n.morphTargetsCount:``,n.doubleSided?`#define DOUBLE_SIDED`:``,n.flipSided?`#define FLIP_SIDED`:``,n.shadowMapEnabled?`#define USE_SHADOWMAP`:``,n.shadowMapEnabled?`#define `+c:``,n.sizeAttenuation?`#define USE_SIZEATTENUATION`:``,n.numLightProbes>0?`#define USE_LIGHT_PROBES`:``,n.logarithmicDepthBuffer?`#define USE_LOGDEPTHBUF`:``,n.reverseDepthBuffer?`#define USE_REVERSEDEPTHBUF`:``,`uniform mat4 modelMatrix;`,`uniform mat4 modelViewMatrix;`,`uniform mat4 projectionMatrix;`,`uniform mat4 viewMatrix;`,`uniform mat3 normalMatrix;`,`uniform vec3 cameraPosition;`,`uniform bool isOrthographic;`,`#ifdef USE_INSTANCING`,` attribute mat4 instanceMatrix;`,`#endif`,`#ifdef USE_INSTANCING_COLOR`,` attribute vec3 instanceColor;`,`#endif`,`#ifdef USE_INSTANCING_MORPH`,` uniform sampler2D morphTexture;`,`#endif`,`attribute vec3 position;`,`attribute vec3 normal;`,`attribute vec2 uv;`,`#ifdef USE_UV1`,` attribute vec2 uv1;`,`#endif`,`#ifdef USE_UV2`,` attribute vec2 uv2;`,`#endif`,`#ifdef USE_UV3`,` attribute vec2 uv3;`,`#endif`,`#ifdef USE_TANGENT`,` attribute vec4 tangent;`,`#endif`,`#if defined( USE_COLOR_ALPHA )`,` attribute vec4 color;`,`#elif defined( USE_COLOR )`,` attribute vec3 color;`,`#endif`,`#ifdef USE_SKINNING`,` attribute vec4 skinIndex;`,` attribute vec4 skinWeight;`,`#endif`,` -`].filter(Is).join(` -`),_=[Ks(n),`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m,n.useFog&&n.fog?`#define USE_FOG`:``,n.useFog&&n.fogExp2?`#define FOG_EXP2`:``,n.alphaToCoverage?`#define ALPHA_TO_COVERAGE`:``,n.map?`#define USE_MAP`:``,n.matcap?`#define USE_MATCAP`:``,n.envMap?`#define USE_ENVMAP`:``,n.envMap?`#define `+l:``,n.envMap?`#define `+u:``,n.envMap?`#define `+d:``,f?`#define CUBEUV_TEXEL_WIDTH `+f.texelWidth:``,f?`#define CUBEUV_TEXEL_HEIGHT `+f.texelHeight:``,f?`#define CUBEUV_MAX_MIP `+f.maxMip+`.0`:``,n.lightMap?`#define USE_LIGHTMAP`:``,n.aoMap?`#define USE_AOMAP`:``,n.bumpMap?`#define USE_BUMPMAP`:``,n.normalMap?`#define USE_NORMALMAP`:``,n.normalMapObjectSpace?`#define USE_NORMALMAP_OBJECTSPACE`:``,n.normalMapTangentSpace?`#define USE_NORMALMAP_TANGENTSPACE`:``,n.emissiveMap?`#define USE_EMISSIVEMAP`:``,n.anisotropy?`#define USE_ANISOTROPY`:``,n.anisotropyMap?`#define USE_ANISOTROPYMAP`:``,n.clearcoat?`#define USE_CLEARCOAT`:``,n.clearcoatMap?`#define USE_CLEARCOATMAP`:``,n.clearcoatRoughnessMap?`#define USE_CLEARCOAT_ROUGHNESSMAP`:``,n.clearcoatNormalMap?`#define USE_CLEARCOAT_NORMALMAP`:``,n.dispersion?`#define USE_DISPERSION`:``,n.iridescence?`#define USE_IRIDESCENCE`:``,n.iridescenceMap?`#define USE_IRIDESCENCEMAP`:``,n.iridescenceThicknessMap?`#define USE_IRIDESCENCE_THICKNESSMAP`:``,n.specularMap?`#define USE_SPECULARMAP`:``,n.specularColorMap?`#define USE_SPECULAR_COLORMAP`:``,n.specularIntensityMap?`#define USE_SPECULAR_INTENSITYMAP`:``,n.roughnessMap?`#define USE_ROUGHNESSMAP`:``,n.metalnessMap?`#define USE_METALNESSMAP`:``,n.alphaMap?`#define USE_ALPHAMAP`:``,n.alphaTest?`#define USE_ALPHATEST`:``,n.alphaHash?`#define USE_ALPHAHASH`:``,n.sheen?`#define USE_SHEEN`:``,n.sheenColorMap?`#define USE_SHEEN_COLORMAP`:``,n.sheenRoughnessMap?`#define USE_SHEEN_ROUGHNESSMAP`:``,n.transmission?`#define USE_TRANSMISSION`:``,n.transmissionMap?`#define USE_TRANSMISSIONMAP`:``,n.thicknessMap?`#define USE_THICKNESSMAP`:``,n.vertexTangents&&n.flatShading===!1?`#define USE_TANGENT`:``,n.vertexColors||n.instancingColor||n.batchingColor?`#define USE_COLOR`:``,n.vertexAlphas?`#define USE_COLOR_ALPHA`:``,n.vertexUv1s?`#define USE_UV1`:``,n.vertexUv2s?`#define USE_UV2`:``,n.vertexUv3s?`#define USE_UV3`:``,n.pointsUvs?`#define USE_POINTS_UV`:``,n.gradientMap?`#define USE_GRADIENTMAP`:``,n.flatShading?`#define FLAT_SHADED`:``,n.doubleSided?`#define DOUBLE_SIDED`:``,n.flipSided?`#define FLIP_SIDED`:``,n.shadowMapEnabled?`#define USE_SHADOWMAP`:``,n.shadowMapEnabled?`#define `+c:``,n.premultipliedAlpha?`#define PREMULTIPLIED_ALPHA`:``,n.numLightProbes>0?`#define USE_LIGHT_PROBES`:``,n.decodeVideoTexture?`#define DECODE_VIDEO_TEXTURE`:``,n.logarithmicDepthBuffer?`#define USE_LOGDEPTHBUF`:``,n.reverseDepthBuffer?`#define USE_REVERSEDEPTHBUF`:``,`uniform mat4 viewMatrix;`,`uniform vec3 cameraPosition;`,`uniform bool isOrthographic;`,n.toneMapping===0?``:`#define TONE_MAPPING`,n.toneMapping===0?``:ka.tonemapping_pars_fragment,n.toneMapping===0?``:As(`toneMapping`,n.toneMapping),n.dithering?`#define DITHERING`:``,n.opaque?`#define OPAQUE`:``,ka.colorspace_pars_fragment,ks(`linearToOutputTexel`,n.outputColorSpace),Ms(),n.useDepthPacking?`#define DEPTH_PACKING `+n.depthPacking:``,` -`].filter(Is).join(` -`)),o=Bs(o),o=Ls(o,n),o=Rs(o,n),s=Bs(s),s=Ls(s,n),s=Rs(s,n),o=Ws(o),s=Ws(s),n.isRawShaderMaterial!==!0&&(v=`#version 300 es -`,g=[p,`#define attribute in`,`#define varying out`,`#define texture2D texture`].join(` -`)+` -`+g,_=[`#define varying in`,n.glslVersion===`300 es`?``:`layout(location = 0) out highp vec4 pc_fragColor;`,n.glslVersion===`300 es`?``:`#define gl_FragColor pc_fragColor`,`#define gl_FragDepthEXT gl_FragDepth`,`#define texture2D texture`,`#define textureCube texture`,`#define texture2DProj textureProj`,`#define texture2DLodEXT textureLod`,`#define texture2DProjLodEXT textureProjLod`,`#define textureCubeLodEXT textureLod`,`#define texture2DGradEXT textureGrad`,`#define texture2DProjGradEXT textureProjGrad`,`#define textureCubeGradEXT textureGrad`].join(` -`)+` -`+_);let y=v+g+o,b=v+_+s,x=Cs(i,i.VERTEX_SHADER,y),S=Cs(i,i.FRAGMENT_SHADER,b);i.attachShader(h,x),i.attachShader(h,S),n.index0AttributeName===void 0?n.morphTargets===!0&&i.bindAttribLocation(h,0,`position`):i.bindAttribLocation(h,0,n.index0AttributeName),i.linkProgram(h);function C(t){if(e.debug.checkShaderErrors){let n=i.getProgramInfoLog(h).trim(),r=i.getShaderInfoLog(x).trim(),a=i.getShaderInfoLog(S).trim(),o=!0,s=!0;if(i.getProgramParameter(h,i.LINK_STATUS)===!1)if(o=!1,typeof e.debug.onShaderError==`function`)e.debug.onShaderError(i,h,x,S);else{let e=Os(i,x,`vertex`),r=Os(i,S,`fragment`);console.error(`THREE.WebGLProgram: Shader Error `+i.getError()+` - VALIDATE_STATUS `+i.getProgramParameter(h,i.VALIDATE_STATUS)+` - -Material Name: `+t.name+` -Material Type: `+t.type+` - -Program Info Log: `+n+` -`+e+` -`+r)}else n===``?(r===``||a===``)&&(s=!1):console.warn(`THREE.WebGLProgram: Program Info Log:`,n);s&&(t.diagnostics={runnable:o,programLog:n,vertexShader:{log:r,prefix:g},fragmentShader:{log:a,prefix:_}})}i.deleteShader(x),i.deleteShader(S),w=new Ss(i,h),T=Fs(i,h)}let w;this.getUniforms=function(){return w===void 0&&C(this),w};let T;this.getAttributes=function(){return T===void 0&&C(this),T};let E=n.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return E===!1&&(E=i.getProgramParameter(h,ws)),E},this.destroy=function(){r.releaseStatesOfProgram(this),i.deleteProgram(h),this.program=void 0},this.type=n.shaderType,this.name=n.shaderName,this.id=Ts++,this.cacheKey=t,this.usedTimes=1,this.program=h,this.vertexShader=x,this.fragmentShader=S,this}var $s=0,ec=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let t=e.vertexShader,n=e.fragmentShader,r=this._getShaderStage(t),i=this._getShaderStage(n),a=this._getShaderCacheForMaterial(e);return a.has(r)===!1&&(a.add(r),r.usedTimes++),a.has(i)===!1&&(a.add(i),i.usedTimes++),this}remove(e){let t=this.materialCache.get(e);for(let e of t)e.usedTimes--,e.usedTimes===0&&this.shaderCache.delete(e.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,n=t.get(e);return n===void 0&&(n=new Set,t.set(e,n)),n}_getShaderStage(e){let t=this.shaderCache,n=t.get(e);return n===void 0&&(n=new tc(e),t.set(e,n)),n}},tc=class{constructor(e){this.id=$s++,this.code=e,this.usedTimes=0}};function nc(e,t,n,r,i,a,o){let s=new Or,c=new ec,l=new Set,u=[],d=i.logarithmicDepthBuffer,f=i.reverseDepthBuffer,p=i.vertexTextures,m=i.precision,h={MeshDepthMaterial:`depth`,MeshDistanceMaterial:`distanceRGBA`,MeshNormalMaterial:`normal`,MeshBasicMaterial:`basic`,MeshLambertMaterial:`lambert`,MeshPhongMaterial:`phong`,MeshToonMaterial:`toon`,MeshStandardMaterial:`physical`,MeshPhysicalMaterial:`physical`,MeshMatcapMaterial:`matcap`,LineBasicMaterial:`basic`,LineDashedMaterial:`dashed`,PointsMaterial:`points`,ShadowMaterial:`shadow`,SpriteMaterial:`sprite`};function g(e){return l.add(e),e===0?`uv`:`uv${e}`}function _(a,s,u,_,v){let y=_.fog,b=v.geometry,x=a.isMeshStandardMaterial?_.environment:null,S=(a.isMeshStandardMaterial?n:t).get(a.envMap||x),C=S&&S.mapping===306?S.image.height:null,w=h[a.type];a.precision!==null&&(m=i.getMaxPrecision(a.precision),m!==a.precision&&console.warn(`THREE.WebGLProgram.getParameters:`,a.precision,`not supported, using`,m,`instead.`));let T=b.morphAttributes.position||b.morphAttributes.normal||b.morphAttributes.color,E=T===void 0?0:T.length,D=0;b.morphAttributes.position!==void 0&&(D=1),b.morphAttributes.normal!==void 0&&(D=2),b.morphAttributes.color!==void 0&&(D=3);let ee,O,te,ne;if(w){let e=Aa[w];ee=e.vertexShader,O=e.fragmentShader}else ee=a.vertexShader,O=a.fragmentShader,c.update(a),te=c.getVertexShaderID(a),ne=c.getFragmentShaderID(a);let re=e.getRenderTarget(),ie=v.isInstancedMesh===!0,ae=v.isBatchedMesh===!0,oe=!!a.map,se=!!a.matcap,ce=!!S,le=!!a.aoMap,ue=!!a.lightMap,de=!!a.bumpMap,fe=!!a.normalMap,pe=!!a.displacementMap,me=!!a.emissiveMap,he=!!a.metalnessMap,ge=!!a.roughnessMap,_e=a.anisotropy>0,ve=a.clearcoat>0,ye=a.dispersion>0,be=a.iridescence>0,xe=a.sheen>0,Se=a.transmission>0,k=_e&&!!a.anisotropyMap,Ce=ve&&!!a.clearcoatMap,we=ve&&!!a.clearcoatNormalMap,Te=ve&&!!a.clearcoatRoughnessMap,Ee=be&&!!a.iridescenceMap,De=be&&!!a.iridescenceThicknessMap,Oe=xe&&!!a.sheenColorMap,ke=xe&&!!a.sheenRoughnessMap,Ae=!!a.specularMap,je=!!a.specularColorMap,Me=!!a.specularIntensityMap,Ne=Se&&!!a.transmissionMap,Pe=Se&&!!a.thicknessMap,Fe=!!a.gradientMap,Ie=!!a.alphaMap,Le=a.alphaTest>0,Re=!!a.alphaHash,ze=!!a.extensions,Be=0;a.toneMapped&&(re===null||re.isXRRenderTarget===!0)&&(Be=e.toneMapping);let Ve={shaderID:w,shaderType:a.type,shaderName:a.name,vertexShader:ee,fragmentShader:O,defines:a.defines,customVertexShaderID:te,customFragmentShaderID:ne,isRawShaderMaterial:a.isRawShaderMaterial===!0,glslVersion:a.glslVersion,precision:m,batching:ae,batchingColor:ae&&v._colorsTexture!==null,instancing:ie,instancingColor:ie&&v.instanceColor!==null,instancingMorph:ie&&v.morphTexture!==null,supportsVertexTextures:p,outputColorSpace:re===null?e.outputColorSpace:re.isXRRenderTarget===!0?re.texture.colorSpace:ut,alphaToCoverage:!!a.alphaToCoverage,map:oe,matcap:se,envMap:ce,envMapMode:ce&&S.mapping,envMapCubeUVHeight:C,aoMap:le,lightMap:ue,bumpMap:de,normalMap:fe,displacementMap:p&&pe,emissiveMap:me,normalMapObjectSpace:fe&&a.normalMapType===1,normalMapTangentSpace:fe&&a.normalMapType===0,metalnessMap:he,roughnessMap:ge,anisotropy:_e,anisotropyMap:k,clearcoat:ve,clearcoatMap:Ce,clearcoatNormalMap:we,clearcoatRoughnessMap:Te,dispersion:ye,iridescence:be,iridescenceMap:Ee,iridescenceThicknessMap:De,sheen:xe,sheenColorMap:Oe,sheenRoughnessMap:ke,specularMap:Ae,specularColorMap:je,specularIntensityMap:Me,transmission:Se,transmissionMap:Ne,thicknessMap:Pe,gradientMap:Fe,opaque:a.transparent===!1&&a.blending===1&&a.alphaToCoverage===!1,alphaMap:Ie,alphaTest:Le,alphaHash:Re,combine:a.combine,mapUv:oe&&g(a.map.channel),aoMapUv:le&&g(a.aoMap.channel),lightMapUv:ue&&g(a.lightMap.channel),bumpMapUv:de&&g(a.bumpMap.channel),normalMapUv:fe&&g(a.normalMap.channel),displacementMapUv:pe&&g(a.displacementMap.channel),emissiveMapUv:me&&g(a.emissiveMap.channel),metalnessMapUv:he&&g(a.metalnessMap.channel),roughnessMapUv:ge&&g(a.roughnessMap.channel),anisotropyMapUv:k&&g(a.anisotropyMap.channel),clearcoatMapUv:Ce&&g(a.clearcoatMap.channel),clearcoatNormalMapUv:we&&g(a.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Te&&g(a.clearcoatRoughnessMap.channel),iridescenceMapUv:Ee&&g(a.iridescenceMap.channel),iridescenceThicknessMapUv:De&&g(a.iridescenceThicknessMap.channel),sheenColorMapUv:Oe&&g(a.sheenColorMap.channel),sheenRoughnessMapUv:ke&&g(a.sheenRoughnessMap.channel),specularMapUv:Ae&&g(a.specularMap.channel),specularColorMapUv:je&&g(a.specularColorMap.channel),specularIntensityMapUv:Me&&g(a.specularIntensityMap.channel),transmissionMapUv:Ne&&g(a.transmissionMap.channel),thicknessMapUv:Pe&&g(a.thicknessMap.channel),alphaMapUv:Ie&&g(a.alphaMap.channel),vertexTangents:!!b.attributes.tangent&&(fe||_e),vertexColors:a.vertexColors,vertexAlphas:a.vertexColors===!0&&!!b.attributes.color&&b.attributes.color.itemSize===4,pointsUvs:v.isPoints===!0&&!!b.attributes.uv&&(oe||Ie),fog:!!y,useFog:a.fog===!0,fogExp2:!!y&&y.isFogExp2,flatShading:a.flatShading===!0,sizeAttenuation:a.sizeAttenuation===!0,logarithmicDepthBuffer:d,reverseDepthBuffer:f,skinning:v.isSkinnedMesh===!0,morphTargets:b.morphAttributes.position!==void 0,morphNormals:b.morphAttributes.normal!==void 0,morphColors:b.morphAttributes.color!==void 0,morphTargetsCount:E,morphTextureStride:D,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numSpotLightMaps:s.spotLightMap.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numSpotLightShadowsWithMaps:s.numSpotLightShadowsWithMaps,numLightProbes:s.numLightProbes,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:a.dithering,shadowMapEnabled:e.shadowMap.enabled&&u.length>0,shadowMapType:e.shadowMap.type,toneMapping:Be,decodeVideoTexture:oe&&a.map.isVideoTexture===!0&&Tn.getTransfer(a.map.colorSpace)===`srgb`,premultipliedAlpha:a.premultipliedAlpha,doubleSided:a.side===2,flipSided:a.side===1,useDepthPacking:a.depthPacking>=0,depthPacking:a.depthPacking||0,index0AttributeName:a.index0AttributeName,extensionClipCullDistance:ze&&a.extensions.clipCullDistance===!0&&r.has(`WEBGL_clip_cull_distance`),extensionMultiDraw:(ze&&a.extensions.multiDraw===!0||ae)&&r.has(`WEBGL_multi_draw`),rendererExtensionParallelShaderCompile:r.has(`KHR_parallel_shader_compile`),customProgramCacheKey:a.customProgramCacheKey()};return Ve.vertexUv1s=l.has(1),Ve.vertexUv2s=l.has(2),Ve.vertexUv3s=l.has(3),l.clear(),Ve}function v(t){let n=[];if(t.shaderID?n.push(t.shaderID):(n.push(t.customVertexShaderID),n.push(t.customFragmentShaderID)),t.defines!==void 0)for(let e in t.defines)n.push(e),n.push(t.defines[e]);return t.isRawShaderMaterial===!1&&(y(n,t),b(n,t),n.push(e.outputColorSpace)),n.push(t.customProgramCacheKey),n.join()}function y(e,t){e.push(t.precision),e.push(t.outputColorSpace),e.push(t.envMapMode),e.push(t.envMapCubeUVHeight),e.push(t.mapUv),e.push(t.alphaMapUv),e.push(t.lightMapUv),e.push(t.aoMapUv),e.push(t.bumpMapUv),e.push(t.normalMapUv),e.push(t.displacementMapUv),e.push(t.emissiveMapUv),e.push(t.metalnessMapUv),e.push(t.roughnessMapUv),e.push(t.anisotropyMapUv),e.push(t.clearcoatMapUv),e.push(t.clearcoatNormalMapUv),e.push(t.clearcoatRoughnessMapUv),e.push(t.iridescenceMapUv),e.push(t.iridescenceThicknessMapUv),e.push(t.sheenColorMapUv),e.push(t.sheenRoughnessMapUv),e.push(t.specularMapUv),e.push(t.specularColorMapUv),e.push(t.specularIntensityMapUv),e.push(t.transmissionMapUv),e.push(t.thicknessMapUv),e.push(t.combine),e.push(t.fogExp2),e.push(t.sizeAttenuation),e.push(t.morphTargetsCount),e.push(t.morphAttributeCount),e.push(t.numDirLights),e.push(t.numPointLights),e.push(t.numSpotLights),e.push(t.numSpotLightMaps),e.push(t.numHemiLights),e.push(t.numRectAreaLights),e.push(t.numDirLightShadows),e.push(t.numPointLightShadows),e.push(t.numSpotLightShadows),e.push(t.numSpotLightShadowsWithMaps),e.push(t.numLightProbes),e.push(t.shadowMapType),e.push(t.toneMapping),e.push(t.numClippingPlanes),e.push(t.numClipIntersection),e.push(t.depthPacking)}function b(e,t){s.disableAll(),t.supportsVertexTextures&&s.enable(0),t.instancing&&s.enable(1),t.instancingColor&&s.enable(2),t.instancingMorph&&s.enable(3),t.matcap&&s.enable(4),t.envMap&&s.enable(5),t.normalMapObjectSpace&&s.enable(6),t.normalMapTangentSpace&&s.enable(7),t.clearcoat&&s.enable(8),t.iridescence&&s.enable(9),t.alphaTest&&s.enable(10),t.vertexColors&&s.enable(11),t.vertexAlphas&&s.enable(12),t.vertexUv1s&&s.enable(13),t.vertexUv2s&&s.enable(14),t.vertexUv3s&&s.enable(15),t.vertexTangents&&s.enable(16),t.anisotropy&&s.enable(17),t.alphaHash&&s.enable(18),t.batching&&s.enable(19),t.dispersion&&s.enable(20),t.batchingColor&&s.enable(21),e.push(s.mask),s.disableAll(),t.fog&&s.enable(0),t.useFog&&s.enable(1),t.flatShading&&s.enable(2),t.logarithmicDepthBuffer&&s.enable(3),t.reverseDepthBuffer&&s.enable(4),t.skinning&&s.enable(5),t.morphTargets&&s.enable(6),t.morphNormals&&s.enable(7),t.morphColors&&s.enable(8),t.premultipliedAlpha&&s.enable(9),t.shadowMapEnabled&&s.enable(10),t.doubleSided&&s.enable(11),t.flipSided&&s.enable(12),t.useDepthPacking&&s.enable(13),t.dithering&&s.enable(14),t.transmission&&s.enable(15),t.sheen&&s.enable(16),t.opaque&&s.enable(17),t.pointsUvs&&s.enable(18),t.decodeVideoTexture&&s.enable(19),t.alphaToCoverage&&s.enable(20),e.push(s.mask)}function x(e){let t=h[e.type],n;if(t){let e=Aa[t];n=na.clone(e.uniforms)}else n=e.uniforms;return n}function S(t,n){let r;for(let e=0,t=u.length;e0?r.push(u):a.transparent===!0?i.push(u):n.push(u),e.onAfterRenderListPush?.(e,t,a,l)}function c(e,t,a,s,c,l){let u=o(e,t,a,s,c,l);a.transmission>0?r.unshift(u):a.transparent===!0?i.unshift(u):n.unshift(u)}function l(e,t){n.length>1&&n.sort(e||ic),r.length>1&&r.sort(t||ac),i.length>1&&i.sort(t||ac)}function u(){for(let n=t,r=e.length;n=r.length?(i=new oc,r.push(i)):i=r[n],i}function n(){e=new WeakMap}return{get:t,dispose:n}}function cc(){let e={};return{get:function(t){if(e[t.id]!==void 0)return e[t.id];let n;switch(t.type){case`DirectionalLight`:n={direction:new M,color:new P};break;case`SpotLight`:n={position:new M,direction:new M,color:new P,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case`PointLight`:n={position:new M,color:new P,distance:0,decay:0};break;case`HemisphereLight`:n={direction:new M,skyColor:new P,groundColor:new P};break;case`RectAreaLight`:n={color:new P,position:new M,halfWidth:new M,halfHeight:new M};break}return e[t.id]=n,n}}}function lc(){let e={};return{get:function(t){if(e[t.id]!==void 0)return e[t.id];let n;switch(t.type){case`DirectionalLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new A};break;case`SpotLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new A};break;case`PointLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new A,shadowCameraNear:1,shadowCameraFar:1e3};break}return e[t.id]=n,n}}}var uc=0;function dc(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+ +!!t.map-!!e.map}function fc(e){let t=new cc,n=lc(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let e=0;e<9;e++)r.probe.push(new M);let i=new M,a=new N,o=new N;function s(i){let a=0,o=0,s=0;for(let e=0;e<9;e++)r.probe[e].set(0,0,0);let c=0,l=0,u=0,d=0,f=0,p=0,m=0,h=0,g=0,_=0,v=0;i.sort(dc);for(let e=0,y=i.length;e0&&(e.has(`OES_texture_float_linear`)===!0?(r.rectAreaLTC1=I.LTC_FLOAT_1,r.rectAreaLTC2=I.LTC_FLOAT_2):(r.rectAreaLTC1=I.LTC_HALF_1,r.rectAreaLTC2=I.LTC_HALF_2)),r.ambient[0]=a,r.ambient[1]=o,r.ambient[2]=s;let y=r.hash;(y.directionalLength!==c||y.pointLength!==l||y.spotLength!==u||y.rectAreaLength!==d||y.hemiLength!==f||y.numDirectionalShadows!==p||y.numPointShadows!==m||y.numSpotShadows!==h||y.numSpotMaps!==g||y.numLightProbes!==v)&&(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=l,r.hemi.length=f,r.directionalShadow.length=p,r.directionalShadowMap.length=p,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=h,r.spotShadowMap.length=h,r.directionalShadowMatrix.length=p,r.pointShadowMatrix.length=m,r.spotLightMatrix.length=h+g-_,r.spotLightMap.length=g,r.numSpotLightShadowsWithMaps=_,r.numLightProbes=v,y.directionalLength=c,y.pointLength=l,y.spotLength=u,y.rectAreaLength=d,y.hemiLength=f,y.numDirectionalShadows=p,y.numPointShadows=m,y.numSpotShadows=h,y.numSpotMaps=g,y.numLightProbes=v,r.version=uc++)}function c(e,t){let n=0,s=0,c=0,l=0,u=0,d=t.matrixWorldInverse;for(let t=0,f=e.length;t=i.length?(a=new pc(e),i.push(a)):a=i[r],a}function r(){t=new WeakMap}return{get:n,dispose:r}}var hc=class extends di{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type=`MeshDepthMaterial`,this.depthPacking=at,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}},gc=class extends di{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type=`MeshDistanceMaterial`,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}},_c=`void main() { - gl_Position = vec4( position, 1.0 ); -}`,vc=`uniform sampler2D shadow_pass; -uniform vec2 resolution; -uniform float radius; -#include -void main() { - const float samples = float( VSM_SAMPLES ); - float mean = 0.0; - float squared_mean = 0.0; - float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 ); - float uvStart = samples <= 1.0 ? 0.0 : - 1.0; - for ( float i = 0.0; i < samples; i ++ ) { - float uvOffset = uvStart + i * uvStride; - #ifdef HORIZONTAL_PASS - vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) ); - mean += distribution.x; - squared_mean += distribution.y * distribution.y + distribution.x * distribution.x; - #else - float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) ); - mean += depth; - squared_mean += depth * depth; - #endif - } - mean = mean / samples; - squared_mean = squared_mean / samples; - float std_dev = sqrt( squared_mean - mean * mean ); - gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) ); -}`;function yc(e,t,n){let r=new Ta,i=new A,a=new A,o=new Fn,s=new hc({depthPacking:ot}),c=new gc,l={},d=n.maxTextureSize,f={0:1,1:0,2:2},p=new aa({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new A},radius:{value:4}},vertexShader:_c,fragmentShader:vc}),m=p.clone();m.defines.HORIZONTAL_PASS=1;let h=new Ii;h.setAttribute(`position`,new bi(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let g=new Ji(h,p),_=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1;let v=this.type;this.render=function(t,n,s){if(_.enabled===!1||_.autoUpdate===!1&&_.needsUpdate===!1||t.length===0)return;let c=e.getRenderTarget(),l=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.state;p.setBlending(0),p.buffers.color.setClear(1,1,1,1),p.buffers.depth.setTest(!0),p.setScissorTest(!1);let m=v!==3&&this.type===3,h=v===3&&this.type!==3;for(let c=0,l=t.length;cd||i.y>d)&&(i.x>d&&(a.x=Math.floor(d/g.x),i.x=a.x*g.x,f.mapSize.x=a.x),i.y>d&&(a.y=Math.floor(d/g.y),i.y=a.y*g.y,f.mapSize.y=a.y)),f.map===null||m===!0||h===!0){let e=this.type===3?{}:{minFilter:u,magFilter:u};f.map!==null&&f.map.dispose(),f.map=new Ln(i.x,i.y,e),f.map.texture.name=l.name+`.shadowMap`,f.camera.updateProjectionMatrix()}e.setRenderTarget(f.map),e.clear();let _=f.getViewportCount();for(let e=0;e<_;e++){let t=f.getViewport(e);o.set(a.x*t.x,a.y*t.y,a.x*t.z,a.y*t.w),p.viewport(o),f.updateMatrices(l,e),r=f.getFrustum(),x(n,s,f.camera,l,this.type)}f.isPointLightShadow!==!0&&this.type===3&&y(f,s),f.needsUpdate=!1}v=this.type,_.needsUpdate=!1,e.setRenderTarget(c,l,f)};function y(n,r){let a=t.update(g);p.defines.VSM_SAMPLES!==n.blurSamples&&(p.defines.VSM_SAMPLES=n.blurSamples,m.defines.VSM_SAMPLES=n.blurSamples,p.needsUpdate=!0,m.needsUpdate=!0),n.mapPass===null&&(n.mapPass=new Ln(i.x,i.y)),p.uniforms.shadow_pass.value=n.map.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,e.setRenderTarget(n.mapPass),e.clear(),e.renderBufferDirect(r,null,a,p,g,null),m.uniforms.shadow_pass.value=n.mapPass.texture,m.uniforms.resolution.value=n.mapSize,m.uniforms.radius.value=n.radius,e.setRenderTarget(n.map),e.clear(),e.renderBufferDirect(r,null,a,m,g,null)}function b(t,n,r,i){let a=null,o=r.isPointLight===!0?t.customDistanceMaterial:t.customDepthMaterial;if(o!==void 0)a=o;else if(a=r.isPointLight===!0?c:s,e.localClippingEnabled&&n.clipShadows===!0&&Array.isArray(n.clippingPlanes)&&n.clippingPlanes.length!==0||n.displacementMap&&n.displacementScale!==0||n.alphaMap&&n.alphaTest>0||n.map&&n.alphaTest>0){let e=a.uuid,t=n.uuid,r=l[e];r===void 0&&(r={},l[e]=r);let i=r[t];i===void 0&&(i=a.clone(),r[t]=i,n.addEventListener(`dispose`,S)),a=i}if(a.visible=n.visible,a.wireframe=n.wireframe,i===3?a.side=n.shadowSide===null?n.side:n.shadowSide:a.side=n.shadowSide===null?f[n.side]:n.shadowSide,a.alphaMap=n.alphaMap,a.alphaTest=n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,r.isPointLight===!0&&a.isMeshDistanceMaterial===!0){let t=e.properties.get(a);t.light=r}return a}function x(n,i,a,o,s){if(n.visible===!1)return;if(n.layers.test(i.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&s===3)&&(!n.frustumCulled||r.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,n.matrixWorld);let r=t.update(n),c=n.material;if(Array.isArray(c)){let t=r.groups;for(let l=0,u=t.length;l=2):(re=parseFloat(/^WebGL (\d)/.exec(ie)[1]),ne=re>=1);let ae=null,oe={},se=e.getParameter(e.SCISSOR_BOX),ce=e.getParameter(e.VIEWPORT),le=new Fn().fromArray(se),ue=new Fn().fromArray(ce);function de(t,n,r,i){let a=new Uint8Array(4),o=e.createTexture();e.bindTexture(t,o),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let o=0;ot?(e.repeat.x=1,e.repeat.y=n/t,e.offset.x=0,e.offset.y=(1-e.repeat.y)/2):(e.repeat.x=t/n,e.repeat.y=1,e.offset.x=(1-e.repeat.x)/2,e.offset.y=0),e}function Cc(e,t){let n=e.image&&e.image.width?e.image.width/e.image.height:1;return n>t?(e.repeat.x=t/n,e.repeat.y=1,e.offset.x=(1-e.repeat.x)/2,e.offset.y=0):(e.repeat.x=1,e.repeat.y=n/t,e.offset.x=0,e.offset.y=(1-e.repeat.y)/2),e}function wc(e){return e.repeat.x=1,e.repeat.y=1,e.offset.x=0,e.offset.y=0,e}function Tc(e,t,n,r){let i=Ec(r);switch(n){case ie:return e*t;case se:return e*t;case ce:return e*t*2;case de:return e*t/i.components*i.byteLength;case fe:return e*t/i.components*i.byteLength;case pe:return e*t*2/i.components*i.byteLength;case me:return e*t*2/i.components*i.byteLength;case ae:return e*t*3/i.components*i.byteLength;case oe:return e*t*4/i.components*i.byteLength;case ge:return e*t*4/i.components*i.byteLength;case _e:case ve:return Math.floor((e+3)/4)*Math.floor((t+3)/4)*8;case ye:case be:return Math.floor((e+3)/4)*Math.floor((t+3)/4)*16;case Se:case Ce:return Math.max(e,16)*Math.max(t,8)/4;case xe:case k:return Math.max(e,8)*Math.max(t,8)/2;case we:case Te:return Math.floor((e+3)/4)*Math.floor((t+3)/4)*8;case Ee:return Math.floor((e+3)/4)*Math.floor((t+3)/4)*16;case De:return Math.floor((e+3)/4)*Math.floor((t+3)/4)*16;case Oe:return Math.floor((e+4)/5)*Math.floor((t+3)/4)*16;case ke:return Math.floor((e+4)/5)*Math.floor((t+4)/5)*16;case Ae:return Math.floor((e+5)/6)*Math.floor((t+4)/5)*16;case je:return Math.floor((e+5)/6)*Math.floor((t+5)/6)*16;case Me:return Math.floor((e+7)/8)*Math.floor((t+4)/5)*16;case Ne:return Math.floor((e+7)/8)*Math.floor((t+5)/6)*16;case Pe:return Math.floor((e+7)/8)*Math.floor((t+7)/8)*16;case Fe:return Math.floor((e+9)/10)*Math.floor((t+4)/5)*16;case Ie:return Math.floor((e+9)/10)*Math.floor((t+5)/6)*16;case Le:return Math.floor((e+9)/10)*Math.floor((t+7)/8)*16;case Re:return Math.floor((e+9)/10)*Math.floor((t+9)/10)*16;case ze:return Math.floor((e+11)/12)*Math.floor((t+9)/10)*16;case Be:return Math.floor((e+11)/12)*Math.floor((t+11)/12)*16;case Ve:case He:case Ue:return Math.ceil(e/4)*Math.ceil(t/4)*16;case We:case Ge:return Math.ceil(e/4)*Math.ceil(t/4)*8;case Ke:case qe:return Math.ceil(e/4)*Math.ceil(t/4)*16}throw Error(`Unable to determine texture byte length for ${n} format.`)}function Ec(e){switch(e){case b:case x:return{byteLength:1,components:1};case C:case S:case D:return{byteLength:2,components:1};case ee:case O:return{byteLength:2,components:4};case T:case w:case E:return{byteLength:4,components:1};case ne:case re:return{byteLength:4,components:3}}throw Error(`Unknown texture type ${e}.`)}var Dc={contain:Sc,cover:Cc,fill:wc,getByteLength:Tc};function Oc(e,t,n,r,i,a,o){let f=t.has(`WEBGL_multisampled_render_to_texture`)?t.get(`WEBGL_multisampled_render_to_texture`):null,m=typeof navigator>`u`?!1:/OculusBrowser/g.test(navigator.userAgent),_=new A,y=new WeakMap,b,x=new WeakMap,S=!1;try{S=typeof OffscreenCanvas<`u`&&new OffscreenCanvas(1,1).getContext(`2d`)!==null}catch{}function C(e,t){return S?new OffscreenCanvas(e,t):mn(`canvas`)}function w(e,t,n){let r=1,i=Fe(e);if((i.width>n||i.height>n)&&(r=n/Math.max(i.width,i.height)),r<1)if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap||typeof VideoFrame<`u`&&e instanceof VideoFrame){let n=Math.floor(r*i.width),a=Math.floor(r*i.height);b===void 0&&(b=C(n,a));let o=t?C(n,a):b;return o.width=n,o.height=a,o.getContext(`2d`).drawImage(e,0,0,n,a),console.warn(`THREE.WebGLRenderer: Texture has been resized from (`+i.width+`x`+i.height+`) to (`+n+`x`+a+`).`),o}else return`data`in e&&console.warn(`THREE.WebGLRenderer: Image in DataTexture is too big (`+i.width+`x`+i.height+`).`),e;return e}function T(e){return e.generateMipmaps&&e.minFilter!==1003&&e.minFilter!==1006}function E(t){e.generateMipmap(t)}function D(n,r,i,a,o=!1){if(n!==null){if(e[n]!==void 0)return e[n];console.warn(`THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '`+n+`'`)}let s=r;if(r===e.RED&&(i===e.FLOAT&&(s=e.R32F),i===e.HALF_FLOAT&&(s=e.R16F),i===e.UNSIGNED_BYTE&&(s=e.R8)),r===e.RED_INTEGER&&(i===e.UNSIGNED_BYTE&&(s=e.R8UI),i===e.UNSIGNED_SHORT&&(s=e.R16UI),i===e.UNSIGNED_INT&&(s=e.R32UI),i===e.BYTE&&(s=e.R8I),i===e.SHORT&&(s=e.R16I),i===e.INT&&(s=e.R32I)),r===e.RG&&(i===e.FLOAT&&(s=e.RG32F),i===e.HALF_FLOAT&&(s=e.RG16F),i===e.UNSIGNED_BYTE&&(s=e.RG8)),r===e.RG_INTEGER&&(i===e.UNSIGNED_BYTE&&(s=e.RG8UI),i===e.UNSIGNED_SHORT&&(s=e.RG16UI),i===e.UNSIGNED_INT&&(s=e.RG32UI),i===e.BYTE&&(s=e.RG8I),i===e.SHORT&&(s=e.RG16I),i===e.INT&&(s=e.RG32I)),r===e.RGB_INTEGER&&(i===e.UNSIGNED_BYTE&&(s=e.RGB8UI),i===e.UNSIGNED_SHORT&&(s=e.RGB16UI),i===e.UNSIGNED_INT&&(s=e.RGB32UI),i===e.BYTE&&(s=e.RGB8I),i===e.SHORT&&(s=e.RGB16I),i===e.INT&&(s=e.RGB32I)),r===e.RGBA_INTEGER&&(i===e.UNSIGNED_BYTE&&(s=e.RGBA8UI),i===e.UNSIGNED_SHORT&&(s=e.RGBA16UI),i===e.UNSIGNED_INT&&(s=e.RGBA32UI),i===e.BYTE&&(s=e.RGBA8I),i===e.SHORT&&(s=e.RGBA16I),i===e.INT&&(s=e.RGBA32I)),r===e.RGB&&(i===e.UNSIGNED_INT_5_9_9_9_REV&&(s=e.RGB9_E5),i===e.UNSIGNED_INT_10F_11F_11F_REV&&(s=e.R11F_G11F_B10F)),r===e.RGBA){let t=o?pt:Tn.getTransfer(a);i===e.FLOAT&&(s=e.RGBA32F),i===e.HALF_FLOAT&&(s=e.RGBA16F),i===e.UNSIGNED_BYTE&&(s=t===`srgb`?e.SRGB8_ALPHA8:e.RGBA8),i===e.UNSIGNED_SHORT_4_4_4_4&&(s=e.RGBA4),i===e.UNSIGNED_SHORT_5_5_5_1&&(s=e.RGB5_A1)}return(s===e.R16F||s===e.R32F||s===e.RG16F||s===e.RG32F||s===e.RGBA16F||s===e.RGBA32F)&&t.get(`EXT_color_buffer_float`),s}function ee(t,n){let r;return t?n===null||n===1014||n===1020?r=e.DEPTH24_STENCIL8:n===1015?r=e.DEPTH32F_STENCIL8:n===1012&&(r=e.DEPTH24_STENCIL8,console.warn(`DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.`)):n===null||n===1014||n===1020?r=e.DEPTH_COMPONENT24:n===1015?r=e.DEPTH_COMPONENT32F:n===1012&&(r=e.DEPTH_COMPONENT16),r}function O(e,t){return T(e)===!0||e.isFramebufferTexture&&e.minFilter!==1003&&e.minFilter!==1006?Math.log2(Math.max(t.width,t.height))+1:e.mipmaps!==void 0&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function te(e){let t=e.target;t.removeEventListener(`dispose`,te),re(t),t.isVideoTexture&&y.delete(t)}function ne(e){let t=e.target;t.removeEventListener(`dispose`,ne),ae(t)}function re(e){let t=r.get(e);if(t.__webglInit===void 0)return;let n=e.source,i=x.get(n);if(i){let r=i[t.__cacheKey];r.usedTimes--,r.usedTimes===0&&ie(e),Object.keys(i).length===0&&x.delete(n)}r.remove(e)}function ie(t){let n=r.get(t);e.deleteTexture(n.__webglTexture);let i=t.source,a=x.get(i);delete a[n.__cacheKey],o.memory.textures--}function ae(t){let n=r.get(t);if(t.depthTexture&&t.depthTexture.dispose(),t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let r=0;r=i.maxTextures&&console.warn(`THREE.WebGLTextures: Trying to use `+e+` texture units while this GPU supports only `+i.maxTextures),oe+=1,e}function le(e){let t=[];return t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR||0),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy),t.push(e.internalFormat),t.push(e.format),t.push(e.type),t.push(e.generateMipmaps),t.push(e.premultiplyAlpha),t.push(e.flipY),t.push(e.unpackAlignment),t.push(e.colorSpace),t.join()}function de(t,i){let a=r.get(t);if(t.isVideoTexture&&Ne(t),t.isRenderTargetTexture===!1&&t.version>0&&a.__version!==t.version){let e=t.image;if(e===null)console.warn(`THREE.WebGLRenderer: Texture marked for update but no image data found.`);else if(e.complete===!1)console.warn(`THREE.WebGLRenderer: Texture marked for update but image is incomplete`);else{be(a,t,i);return}}n.bindTexture(e.TEXTURE_2D,a.__webglTexture,e.TEXTURE0+i)}function fe(t,i){let a=r.get(t);if(t.version>0&&a.__version!==t.version){be(a,t,i);return}n.bindTexture(e.TEXTURE_2D_ARRAY,a.__webglTexture,e.TEXTURE0+i)}function pe(t,i){let a=r.get(t);if(t.version>0&&a.__version!==t.version){be(a,t,i);return}n.bindTexture(e.TEXTURE_3D,a.__webglTexture,e.TEXTURE0+i)}function me(t,i){let a=r.get(t);if(t.version>0&&a.__version!==t.version){xe(a,t,i);return}n.bindTexture(e.TEXTURE_CUBE_MAP,a.__webglTexture,e.TEXTURE0+i)}let he={[s]:e.REPEAT,[c]:e.CLAMP_TO_EDGE,[l]:e.MIRRORED_REPEAT},ge={[u]:e.NEAREST,[d]:e.NEAREST_MIPMAP_NEAREST,[p]:e.NEAREST_MIPMAP_LINEAR,[h]:e.LINEAR,[g]:e.LINEAR_MIPMAP_NEAREST,[v]:e.LINEAR_MIPMAP_LINEAR},_e={512:e.NEVER,519:e.ALWAYS,513:e.LESS,515:e.LEQUAL,514:e.EQUAL,518:e.GEQUAL,516:e.GREATER,517:e.NOTEQUAL};function ve(n,a){if(a.type===1015&&t.has(`OES_texture_float_linear`)===!1&&(a.magFilter===1006||a.magFilter===1007||a.magFilter===1005||a.magFilter===1008||a.minFilter===1006||a.minFilter===1007||a.minFilter===1005||a.minFilter===1008)&&console.warn(`THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.`),e.texParameteri(n,e.TEXTURE_WRAP_S,he[a.wrapS]),e.texParameteri(n,e.TEXTURE_WRAP_T,he[a.wrapT]),(n===e.TEXTURE_3D||n===e.TEXTURE_2D_ARRAY)&&e.texParameteri(n,e.TEXTURE_WRAP_R,he[a.wrapR]),e.texParameteri(n,e.TEXTURE_MAG_FILTER,ge[a.magFilter]),e.texParameteri(n,e.TEXTURE_MIN_FILTER,ge[a.minFilter]),a.compareFunction&&(e.texParameteri(n,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(n,e.TEXTURE_COMPARE_FUNC,_e[a.compareFunction])),t.has(`EXT_texture_filter_anisotropic`)===!0){if(a.magFilter===1003||a.minFilter!==1005&&a.minFilter!==1008||a.type===1015&&t.has(`OES_texture_float_linear`)===!1)return;if(a.anisotropy>1||r.get(a).__currentAnisotropy){let o=t.get(`EXT_texture_filter_anisotropic`);e.texParameterf(n,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy}}}function ye(t,n){let r=!1;t.__webglInit===void 0&&(t.__webglInit=!0,n.addEventListener(`dispose`,te));let i=n.source,a=x.get(i);a===void 0&&(a={},x.set(i,a));let s=le(n);if(s!==t.__cacheKey){a[s]===void 0&&(a[s]={texture:e.createTexture(),usedTimes:0},o.memory.textures++,r=!0),a[s].usedTimes++;let i=a[t.__cacheKey];i!==void 0&&(a[t.__cacheKey].usedTimes--,i.usedTimes===0&&ie(n)),t.__cacheKey=s,t.__webglTexture=a[s].texture}return r}function be(t,o,s){let c=e.TEXTURE_2D;(o.isDataArrayTexture||o.isCompressedArrayTexture)&&(c=e.TEXTURE_2D_ARRAY),o.isData3DTexture&&(c=e.TEXTURE_3D);let l=ye(t,o),u=o.source;n.bindTexture(c,t.__webglTexture,e.TEXTURE0+s);let d=r.get(u);if(u.version!==d.__version||l===!0){n.activeTexture(e.TEXTURE0+s);let t=Tn.getPrimaries(Tn.workingColorSpace),r=o.colorSpace===``?null:Tn.getPrimaries(o.colorSpace),f=o.colorSpace===``||t===r?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,o.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,o.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,o.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,f);let p=w(o.image,!1,i.maxTextureSize);p=Pe(o,p);let m=a.convert(o.format,o.colorSpace),h=a.convert(o.type),g=D(o.internalFormat,m,h,o.colorSpace,o.isVideoTexture);ve(c,o);let _,v=o.mipmaps,y=o.isVideoTexture!==!0,b=d.__version===void 0||l===!0,x=u.dataReady,S=O(o,p);if(o.isDepthTexture)g=ee(o.format===ue,o.type),b&&(y?n.texStorage2D(e.TEXTURE_2D,1,g,p.width,p.height):n.texImage2D(e.TEXTURE_2D,0,g,p.width,p.height,0,m,h,null));else if(o.isDataTexture)if(v.length>0){y&&b&&n.texStorage2D(e.TEXTURE_2D,S,g,v[0].width,v[0].height);for(let t=0,r=v.length;t0){let r=Tc(_.width,_.height,o.format,o.type);for(let i of o.layerUpdates){let a=_.data.subarray(i*r/_.data.BYTES_PER_ELEMENT,(i+1)*r/_.data.BYTES_PER_ELEMENT);n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,i,_.width,_.height,1,m,a,0,0)}o.clearLayerUpdates()}else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,_.width,_.height,p.depth,m,_.data,0,0)}else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY,t,g,_.width,_.height,p.depth,0,_.data,0,0);else console.warn(`THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()`);else y?x&&n.texSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,_.width,_.height,p.depth,m,h,_.data):n.texImage3D(e.TEXTURE_2D_ARRAY,t,g,_.width,_.height,p.depth,0,m,h,_.data)}else{y&&b&&n.texStorage2D(e.TEXTURE_2D,S,g,v[0].width,v[0].height);for(let t=0,r=v.length;t0){let t=Tc(p.width,p.height,o.format,o.type);for(let r of o.layerUpdates){let i=p.data.subarray(r*t/p.data.BYTES_PER_ELEMENT,(r+1)*t/p.data.BYTES_PER_ELEMENT);n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,r,p.width,p.height,1,m,h,i)}o.clearLayerUpdates()}else n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,p.width,p.height,p.depth,m,h,p.data)}else n.texImage3D(e.TEXTURE_2D_ARRAY,0,g,p.width,p.height,p.depth,0,m,h,p.data);else if(o.isData3DTexture)y?(b&&n.texStorage3D(e.TEXTURE_3D,S,g,p.width,p.height,p.depth),x&&n.texSubImage3D(e.TEXTURE_3D,0,0,0,0,p.width,p.height,p.depth,m,h,p.data)):n.texImage3D(e.TEXTURE_3D,0,g,p.width,p.height,p.depth,0,m,h,p.data);else if(o.isFramebufferTexture){if(b)if(y)n.texStorage2D(e.TEXTURE_2D,S,g,p.width,p.height);else{let t=p.width,r=p.height;for(let i=0;i>=1,r>>=1}}else if(v.length>0){if(y&&b){let t=Fe(v[0]);n.texStorage2D(e.TEXTURE_2D,S,g,t.width,t.height)}for(let t=0,r=v.length;t0&&S++;let t=Fe(m[0]);n.texStorage2D(e.TEXTURE_CUBE_MAP,S,v,t.width,t.height)}for(let t=0;t<6;t++)if(p){y?x&&n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,0,0,m[t].width,m[t].height,g,_,m[t].data):n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,v,m[t].width,m[t].height,0,g,_,m[t].data);for(let r=0;r>l),r=Math.max(1,i.height>>l);c===e.TEXTURE_3D||c===e.TEXTURE_2D_ARRAY?n.texImage3D(c,l,p,t,r,i.depth,0,u,d,null):n.texImage2D(c,l,p,t,r,0,u,d,null)}n.bindFramebuffer(e.FRAMEBUFFER,t),Me(i)?f.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,s,c,r.get(o).__webglTexture,0,je(i)):(c===e.TEXTURE_2D||c>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&c<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,s,c,r.get(o).__webglTexture,l),n.bindFramebuffer(e.FRAMEBUFFER,null)}function k(t,n,r){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){let i=n.depthTexture,a=i&&i.isDepthTexture?i.type:null,o=ee(n.stencilBuffer,a),s=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,c=je(n);Me(n)?f.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,c,o,n.width,n.height):r?e.renderbufferStorageMultisample(e.RENDERBUFFER,c,o,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,o,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,s,e.RENDERBUFFER,t)}else{let t=n.textures;for(let i=0;i{delete i.__boundDepthTexture,delete i.__depthDisposeCallback,e.removeEventListener(`dispose`,t)};e.addEventListener(`dispose`,t),i.__depthDisposeCallback=t}i.__boundDepthTexture=e}if(t.depthTexture&&!i.__autoAllocateDepthBuffer){if(a)throw Error(`target.depthTexture not supported in Cube render targets`);Ce(i.__webglFramebuffer,t)}else if(a){i.__webglDepthbuffer=[];for(let r=0;r<6;r++)if(n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer[r]),i.__webglDepthbuffer[r]===void 0)i.__webglDepthbuffer[r]=e.createRenderbuffer(),k(i.__webglDepthbuffer[r],t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,a=i.__webglDepthbuffer[r];e.bindRenderbuffer(e.RENDERBUFFER,a),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,a)}}else if(n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer),i.__webglDepthbuffer===void 0)i.__webglDepthbuffer=e.createRenderbuffer(),k(i.__webglDepthbuffer,t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,r=i.__webglDepthbuffer;e.bindRenderbuffer(e.RENDERBUFFER,r),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,r)}n.bindFramebuffer(e.FRAMEBUFFER,null)}function Te(t,n,i){let a=r.get(t);n!==void 0&&Se(a.__webglFramebuffer,t,t.texture,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,0),i!==void 0&&we(t)}function Ee(t){let i=t.texture,s=r.get(t),c=r.get(i);t.addEventListener(`dispose`,ne);let l=t.textures,u=t.isWebGLCubeRenderTarget===!0,d=l.length>1;if(d||(c.__webglTexture===void 0&&(c.__webglTexture=e.createTexture()),c.__version=i.version,o.memory.textures++),u){s.__webglFramebuffer=[];for(let t=0;t<6;t++)if(i.mipmaps&&i.mipmaps.length>0){s.__webglFramebuffer[t]=[];for(let n=0;n0){s.__webglFramebuffer=[];for(let t=0;t0&&Me(t)===!1){s.__webglMultisampledFramebuffer=e.createFramebuffer(),s.__webglColorRenderbuffer=[],n.bindFramebuffer(e.FRAMEBUFFER,s.__webglMultisampledFramebuffer);for(let n=0;n0)for(let r=0;r0)for(let n=0;n0){if(Me(t)===!1){let i=t.textures,a=t.width,o=t.height,s=e.COLOR_BUFFER_BIT,c=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,l=r.get(t),u=i.length>1;if(u)for(let t=0;t0&&t.has(`WEBGL_multisampled_render_to_texture`)===!0&&n.__useRenderToTexture!==!1}function Ne(e){let t=o.render.frame;y.get(e)!==t&&(y.set(e,t),e.update())}function Pe(e,t){let n=e.colorSpace,r=e.format,i=e.type;return e.isCompressedTexture===!0||e.isVideoTexture===!0||n!==`srgb-linear`&&n!==``&&(Tn.getTransfer(n)===`srgb`?(r!==1023||i!==1009)&&console.warn(`THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.`):console.error(`THREE.WebGLTextures: Unsupported texture color space:`,n)),t}function Fe(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement?(_.width=e.naturalWidth||e.width,_.height=e.naturalHeight||e.height):typeof VideoFrame<`u`&&e instanceof VideoFrame?(_.width=e.displayWidth,_.height=e.displayHeight):(_.width=e.width,_.height=e.height),_}this.allocateTextureUnit=ce,this.resetTextureUnits=se,this.setTexture2D=de,this.setTexture2DArray=fe,this.setTexture3D=pe,this.setTextureCube=me,this.rebindTextures=Te,this.setupRenderTarget=Ee,this.updateRenderTargetMipmap=De,this.updateMultisampleRenderTarget=Ae,this.setupDepthRenderbuffer=we,this.setupFrameBufferTexture=Se,this.useMultisampledRTT=Me}function kc(e,t){function n(n,r=``){let i,a=Tn.getTransfer(r);if(n===1009)return e.UNSIGNED_BYTE;if(n===1017)return e.UNSIGNED_SHORT_4_4_4_4;if(n===1018)return e.UNSIGNED_SHORT_5_5_5_1;if(n===35902)return e.UNSIGNED_INT_5_9_9_9_REV;if(n===35899)return e.UNSIGNED_INT_10F_11F_11F_REV;if(n===1010)return e.BYTE;if(n===1011)return e.SHORT;if(n===1012)return e.UNSIGNED_SHORT;if(n===1013)return e.INT;if(n===1014)return e.UNSIGNED_INT;if(n===1015)return e.FLOAT;if(n===1016)return e.HALF_FLOAT;if(n===1021)return e.ALPHA;if(n===1022)return e.RGB;if(n===1023)return e.RGBA;if(n===1024)return e.LUMINANCE;if(n===1025)return e.LUMINANCE_ALPHA;if(n===1026)return e.DEPTH_COMPONENT;if(n===1027)return e.DEPTH_STENCIL;if(n===1028)return e.RED;if(n===1029)return e.RED_INTEGER;if(n===1030)return e.RG;if(n===1031)return e.RG_INTEGER;if(n===1033)return e.RGBA_INTEGER;if(n===33776||n===33777||n===33778||n===33779)if(a===`srgb`)if(i=t.get(`WEBGL_compressed_texture_s3tc_srgb`),i!==null){if(n===33776)return i.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(n===33777)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(n===33778)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(n===33779)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(i=t.get(`WEBGL_compressed_texture_s3tc`),i!==null){if(n===33776)return i.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===33777)return i.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===33778)return i.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===33779)return i.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(n===35840||n===35841||n===35842||n===35843)if(i=t.get(`WEBGL_compressed_texture_pvrtc`),i!==null){if(n===35840)return i.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===35841)return i.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===35842)return i.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===35843)return i.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(n===36196||n===37492||n===37496)if(i=t.get(`WEBGL_compressed_texture_etc`),i!==null){if(n===36196||n===37492)return a===`srgb`?i.COMPRESSED_SRGB8_ETC2:i.COMPRESSED_RGB8_ETC2;if(n===37496)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:i.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(n===37808||n===37809||n===37810||n===37811||n===37812||n===37813||n===37814||n===37815||n===37816||n===37817||n===37818||n===37819||n===37820||n===37821)if(i=t.get(`WEBGL_compressed_texture_astc`),i!==null){if(n===37808)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:i.COMPRESSED_RGBA_ASTC_4x4_KHR;if(n===37809)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:i.COMPRESSED_RGBA_ASTC_5x4_KHR;if(n===37810)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:i.COMPRESSED_RGBA_ASTC_5x5_KHR;if(n===37811)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:i.COMPRESSED_RGBA_ASTC_6x5_KHR;if(n===37812)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:i.COMPRESSED_RGBA_ASTC_6x6_KHR;if(n===37813)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:i.COMPRESSED_RGBA_ASTC_8x5_KHR;if(n===37814)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:i.COMPRESSED_RGBA_ASTC_8x6_KHR;if(n===37815)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:i.COMPRESSED_RGBA_ASTC_8x8_KHR;if(n===37816)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:i.COMPRESSED_RGBA_ASTC_10x5_KHR;if(n===37817)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:i.COMPRESSED_RGBA_ASTC_10x6_KHR;if(n===37818)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:i.COMPRESSED_RGBA_ASTC_10x8_KHR;if(n===37819)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:i.COMPRESSED_RGBA_ASTC_10x10_KHR;if(n===37820)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:i.COMPRESSED_RGBA_ASTC_12x10_KHR;if(n===37821)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:i.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(n===36492||n===36494||n===36495)if(i=t.get(`EXT_texture_compression_bptc`),i!==null){if(n===36492)return a===`srgb`?i.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:i.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(n===36494)return i.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(n===36495)return i.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(n===36283||n===36284||n===36285||n===36286)if(i=t.get(`EXT_texture_compression_rgtc`),i!==null){if(n===36492)return i.COMPRESSED_RED_RGTC1_EXT;if(n===36284)return i.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(n===36285)return i.COMPRESSED_RED_GREEN_RGTC2_EXT;if(n===36286)return i.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return n===1020?e.UNSIGNED_INT_24_8:e[n]===void 0?null:e[n]}return{convert:n}}var Ac=class extends pa{constructor(e=[]){super(),this.isArrayCamera=!0,this.cameras=e}},jc=class extends Wr{constructor(){super(),this.isGroup=!0,this.type=`Group`}},Mc={type:`move`},Nc=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new jc,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new jc,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new M,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new M),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new jc,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new M,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new M),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){let t=this._hand;if(t)for(let n of e.hand.values())this._getHandJoint(t,n)}return this.dispatchEvent({type:`connected`,data:e}),this}disconnect(e){return this.dispatchEvent({type:`disconnected`,data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(e,t,n){let r=null,i=null,a=null,o=this._targetRay,s=this._grip,c=this._hand;if(e&&t.session.visibilityState!==`visible-blurred`){if(c&&e.hand){a=!0;for(let r of e.hand.values()){let e=t.getJointPose(r,n),i=this._getHandJoint(c,r);e!==null&&(i.matrix.fromArray(e.transform.matrix),i.matrix.decompose(i.position,i.rotation,i.scale),i.matrixWorldNeedsUpdate=!0,i.jointRadius=e.radius),i.visible=e!==null}let r=c.joints[`index-finger-tip`],i=c.joints[`thumb-tip`],o=r.position.distanceTo(i.position),s=.02,l=.005;c.inputState.pinching&&o>s+l?(c.inputState.pinching=!1,this.dispatchEvent({type:`pinchend`,handedness:e.handedness,target:this})):!c.inputState.pinching&&o<=s-l&&(c.inputState.pinching=!0,this.dispatchEvent({type:`pinchstart`,handedness:e.handedness,target:this}))}else s!==null&&e.gripSpace&&(i=t.getPose(e.gripSpace,n),i!==null&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.matrixWorldNeedsUpdate=!0,i.linearVelocity?(s.hasLinearVelocity=!0,s.linearVelocity.copy(i.linearVelocity)):s.hasLinearVelocity=!1,i.angularVelocity?(s.hasAngularVelocity=!0,s.angularVelocity.copy(i.angularVelocity)):s.hasAngularVelocity=!1));o!==null&&(r=t.getPose(e.targetRaySpace,n),r===null&&i!==null&&(r=i),r!==null&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Mc)))}return o!==null&&(o.visible=r!==null),s!==null&&(s.visible=i!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){let n=new jc;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}},Pc=` -void main() { - - gl_Position = vec4( position, 1.0 ); - -}`,Fc=` -uniform sampler2DArray depthColor; -uniform float depthWidth; -uniform float depthHeight; - -void main() { - - vec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight ); - - if ( coord.x >= 1.0 ) { - - gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r; - - } else { - - gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r; - - } - -}`,Ic=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t,n){if(this.texture===null){let r=new Pn,i=e.properties.get(r);i.__webglTexture=t.texture,(t.depthNear!=n.depthNear||t.depthFar!=n.depthFar)&&(this.depthNear=t.depthNear,this.depthFar=t.depthFar),this.texture=r}}getMesh(e){if(this.texture!==null&&this.mesh===null){let t=e.cameras[0].viewport,n=new aa({vertexShader:Pc,fragmentShader:Fc,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Ji(new Oa(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},Lc=class extends Ft{constructor(e,t){super();let n=this,r=null,i=1,a=null,o=`local-floor`,s=1,c=null,l=null,u=null,d=null,f=null,p=null,m=new Ic,h=t.getContextAttributes(),g=null,_=null,v=[],y=[],x=new A,S=null,C=new pa;C.layers.enable(1),C.viewport=new Fn;let w=new pa;w.layers.enable(2),w.viewport=new Fn;let E=[C,w],D=new Ac;D.layers.enable(1),D.layers.enable(2);let ee=null,O=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.controllerAutoUpdate=!0,this.getController=function(e){let t=v[e];return t===void 0&&(t=new Nc,v[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=v[e];return t===void 0&&(t=new Nc,v[e]=t),t.getGripSpace()},this.getHand=function(e){let t=v[e];return t===void 0&&(t=new Nc,v[e]=t),t.getHandSpace()};function ne(e){let t=y.indexOf(e.inputSource);if(t===-1)return;let n=v[t];n!==void 0&&(n.update(e.inputSource,e.frame,c||a),n.dispatchEvent({type:e.type,data:e.inputSource}))}function re(){r.removeEventListener(`select`,ne),r.removeEventListener(`selectstart`,ne),r.removeEventListener(`selectend`,ne),r.removeEventListener(`squeeze`,ne),r.removeEventListener(`squeezestart`,ne),r.removeEventListener(`squeezeend`,ne),r.removeEventListener(`end`,re),r.removeEventListener(`inputsourceschange`,ie);for(let e=0;e=0&&(y[r]=null,v[r]&&v[r].disconnect(n))}for(let t=0;t=y.length){y.push(n),r=e;break}else if(y[e]===null){y[e]=n,r=e;break}if(r===-1)break}let i=v[r];i&&i.connect(n)}}let ae=new M,se=new M;function ce(e,t,n){ae.setFromMatrixPosition(t.matrixWorld),se.setFromMatrixPosition(n.matrixWorld);let r=ae.distanceTo(se),i=t.projectionMatrix.elements,a=n.projectionMatrix.elements,o=i[14]/(i[10]-1),s=i[14]/(i[10]+1),c=(i[9]+1)/i[5],l=(i[9]-1)/i[5],u=(i[8]-1)/i[0],d=(a[8]+1)/a[0],f=o*u,p=o*d,m=r/(-u+d),h=m*-u;if(t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(h),e.translateZ(m),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.copy(e.matrixWorld).invert(),i[10]===-1)e.projectionMatrix.copy(t.projectionMatrix),e.projectionMatrixInverse.copy(t.projectionMatrixInverse);else{let t=o+m,n=s+m,i=f-h,a=p+(r-h),u=c*s/n*t,d=l*s/n*t;e.projectionMatrix.makePerspective(i,a,u,d,t,n),e.projectionMatrixInverse.copy(e.projectionMatrix).invert()}}function de(e,t){t===null?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(r===null)return;let t=e.near,n=e.far;m.texture!==null&&(m.depthNear>0&&(t=m.depthNear),m.depthFar>0&&(n=m.depthFar)),D.near=w.near=C.near=t,D.far=w.far=C.far=n,(ee!==D.near||O!==D.far)&&(r.updateRenderState({depthNear:D.near,depthFar:D.far}),ee=D.near,O=D.far);let i=e.parent,a=D.cameras;de(D,i);for(let e=0;e0&&(e.alphaTest.value=r.alphaTest);let i=t.get(r),a=i.envMap,o=i.envMapRotation;a&&(e.envMap.value=a,Rc.copy(o),Rc.x*=-1,Rc.y*=-1,Rc.z*=-1,a.isCubeTexture&&a.isRenderTargetTexture===!1&&(Rc.y*=-1,Rc.z*=-1),e.envMapRotation.value.setFromMatrix4(zc.makeRotationFromEuler(Rc)),e.flipEnvMap.value=a.isCubeTexture&&a.isRenderTargetTexture===!1?-1:1,e.reflectivity.value=r.reflectivity,e.ior.value=r.ior,e.refractionRatio.value=r.refractionRatio),r.lightMap&&(e.lightMap.value=r.lightMap,e.lightMapIntensity.value=r.lightMapIntensity,n(r.lightMap,e.lightMapTransform)),r.aoMap&&(e.aoMap.value=r.aoMap,e.aoMapIntensity.value=r.aoMapIntensity,n(r.aoMap,e.aoMapTransform))}function o(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}function s(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}function c(e,t,r,i){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*r,e.scale.value=i*.5,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function l(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function u(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}function d(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}function f(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform)),e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform)),t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}function p(e,t,r){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform))),t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),t.side===1&&e.clearcoatNormalScale.value.negate())),t.dispersion>0&&(e.dispersion.value=t.dispersion),t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform))),t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=r.texture,e.transmissionSamplerSize.value.set(r.width,r.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor)),t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform))),e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform)),t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}function m(e,t){t.matcap&&(e.matcap.value=t.matcap)}function h(e,n){let r=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(r.matrixWorld),e.nearDistance.value=r.shadow.camera.near,e.farDistance.value=r.shadow.camera.far}return{refreshFogUniforms:r,refreshMaterialUniforms:i}}function Vc(e,t,n,r){let i={},a={},o=[],s=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function c(e,t){let n=t.program;r.uniformBlockBinding(e,n)}function l(e,n){let o=i[e.id];o===void 0&&(m(e),o=u(e),i[e.id]=o,e.addEventListener(`dispose`,g));let s=n.program;r.updateUBOMapping(e,s);let c=t.render.frame;a[e.id]!==c&&(f(e),a[e.id]=c)}function u(t){let n=d();t.__bindingPointIndex=n;let r=e.createBuffer(),i=t.__size,a=t.usage;return e.bindBuffer(e.UNIFORM_BUFFER,r),e.bufferData(e.UNIFORM_BUFFER,i,a),e.bindBuffer(e.UNIFORM_BUFFER,null),e.bindBufferBase(e.UNIFORM_BUFFER,n,r),r}function d(){for(let e=0;e0&&(n+=16-r),e.__size=n,e.__cache={},this}function h(e){let t={boundary:0,storage:0};return typeof e==`number`||typeof e==`boolean`?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?console.warn(`THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.`):console.warn(`THREE.WebGLRenderer: Unsupported uniform value type.`,e),t}function g(t){let n=t.target;n.removeEventListener(`dispose`,g);let r=o.indexOf(n.__bindingPointIndex);o.splice(r,1),e.deleteBuffer(i[n.id]),delete i[n.id],delete a[n.id]}function _(){for(let t in i)e.deleteBuffer(i[t]);o=[],i={},a={}}return{bind:c,update:l,dispose:_}}var Hc=class{constructor(e={}){let{canvas:t=hn(),context:r=null,depth:i=!0,stencil:a=!1,alpha:o=!1,antialias:s=!1,premultipliedAlpha:c=!0,preserveDrawingBuffer:l=!1,powerPreference:u=`default`,failIfMajorPerformanceCaveat:d=!1}=e;this.isWebGLRenderer=!0;let f;if(r!==null){if(typeof WebGLRenderingContext<`u`&&r instanceof WebGLRenderingContext)throw Error(`THREE.WebGLRenderer: WebGL 1 is not supported since r163.`);f=r.getContextAttributes().alpha}else f=o;let p=new Uint32Array(4),m=new Int32Array(4),h=null,g=null,_=[],y=[];this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this._outputColorSpace=lt,this.toneMapping=0,this.toneMappingExposure=1;let x=this,S=!1,C=0,w=0,T=null,E=-1,ee=null,O=new Fn,te=new Fn,ne=null,re=new P(0),ie=0,ae=t.width,oe=t.height,se=1,ce=null,le=null,ue=new Fn(0,0,ae,oe),de=new Fn(0,0,ae,oe),fe=!1,pe=new Ta,me=!1,he=!1,ge=new N,_e=new N,ve=new M,ye=new Fn,be={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},xe=!1;function Se(){return T===null?se:1}let k=r;function Ce(e,n){return t.getContext(e,n)}try{let e={alpha:!0,depth:i,stencil:a,antialias:s,premultipliedAlpha:c,preserveDrawingBuffer:l,powerPreference:u,failIfMajorPerformanceCaveat:d};if(`setAttribute`in t&&t.setAttribute(`data-engine`,`three.js r${n}`),t.addEventListener(`webglcontextlost`,Xe,!1),t.addEventListener(`webglcontextrestored`,Ze,!1),t.addEventListener(`webglcontextcreationerror`,Qe,!1),k===null){let t=`webgl2`;if(k=Ce(t,e),k===null)throw Ce(t)?Error(`Error creating WebGL context with your selected attributes.`):Error(`Error creating WebGL context.`)}}catch(e){throw console.error(`THREE.WebGLRenderer: `+e.message),e}let we,Te,Ee,De,Oe,ke,Ae,je,Me,Ne,Pe,Fe,Ie,Le,Re,ze,Be,Ve,He,Ue,We,Ge,Ke,qe;function Je(){we=new co(k),we.init(),Ge=new kc(k,we),Te=new La(k,we,e,Ge),Ee=new xc(k),Te.reverseDepthBuffer&&Ee.buffers.depth.setReversed(!0),De=new fo(k),Oe=new rc,ke=new Oc(k,we,Ee,Oe,Te,Ge,De),Ae=new za(x),je=new so(x),Me=new Da(k),Ke=new Fa(k,Me),Ne=new lo(k,Me,De,Ke),Pe=new mo(k,Ne,Me,De),He=new po(k,Te,ke),ze=new Ra(Oe),Fe=new nc(x,Ae,je,we,Te,Ke,ze),Ie=new Bc(x,Oe),Le=new sc,Re=new mc(we),Ve=new Pa(x,Ae,je,Ee,Pe,f,c),Be=new yc(x,Pe,Te),qe=new Vc(k,De,Te,Ee),Ue=new Ia(k,we,De),We=new uo(k,we,De),De.programs=Fe.programs,x.capabilities=Te,x.extensions=we,x.properties=Oe,x.renderLists=Le,x.shadowMap=Be,x.state=Ee,x.info=De}Je();let Ye=new Lc(x,k);this.xr=Ye,this.getContext=function(){return k},this.getContextAttributes=function(){return k.getContextAttributes()},this.forceContextLoss=function(){let e=we.get(`WEBGL_lose_context`);e&&e.loseContext()},this.forceContextRestore=function(){let e=we.get(`WEBGL_lose_context`);e&&e.restoreContext()},this.getPixelRatio=function(){return se},this.setPixelRatio=function(e){e!==void 0&&(se=e,this.setSize(ae,oe,!1))},this.getSize=function(e){return e.set(ae,oe)},this.setSize=function(e,n,r=!0){if(Ye.isPresenting){console.warn(`THREE.WebGLRenderer: Can't change size while VR device is presenting.`);return}ae=e,oe=n,t.width=Math.floor(e*se),t.height=Math.floor(n*se),r===!0&&(t.style.width=e+`px`,t.style.height=n+`px`),this.setViewport(0,0,e,n)},this.getDrawingBufferSize=function(e){return e.set(ae*se,oe*se).floor()},this.setDrawingBufferSize=function(e,n,r){ae=e,oe=n,se=r,t.width=Math.floor(e*r),t.height=Math.floor(n*r),this.setViewport(0,0,e,n)},this.getCurrentViewport=function(e){return e.copy(O)},this.getViewport=function(e){return e.copy(ue)},this.setViewport=function(e,t,n,r){e.isVector4?ue.set(e.x,e.y,e.z,e.w):ue.set(e,t,n,r),Ee.viewport(O.copy(ue).multiplyScalar(se).round())},this.getScissor=function(e){return e.copy(de)},this.setScissor=function(e,t,n,r){e.isVector4?de.set(e.x,e.y,e.z,e.w):de.set(e,t,n,r),Ee.scissor(te.copy(de).multiplyScalar(se).round())},this.getScissorTest=function(){return fe},this.setScissorTest=function(e){Ee.setScissorTest(fe=e)},this.setOpaqueSort=function(e){ce=e},this.setTransparentSort=function(e){le=e},this.getClearColor=function(e){return e.copy(Ve.getClearColor())},this.setClearColor=function(){Ve.setClearColor.apply(Ve,arguments)},this.getClearAlpha=function(){return Ve.getClearAlpha()},this.setClearAlpha=function(){Ve.setClearAlpha.apply(Ve,arguments)},this.clear=function(e=!0,t=!0,n=!0){let r=0;if(e){let e=!1;if(T!==null){let t=T.texture.format;e=t===1033||t===1031||t===1029}if(e){let e=T.texture.type,t=e===1009||e===1014||e===1012||e===1020||e===1017||e===1018,n=Ve.getClearColor(),r=Ve.getClearAlpha(),i=n.r,a=n.g,o=n.b;t?(p[0]=i,p[1]=a,p[2]=o,p[3]=r,k.clearBufferuiv(k.COLOR,0,p)):(m[0]=i,m[1]=a,m[2]=o,m[3]=r,k.clearBufferiv(k.COLOR,0,m))}else r|=k.COLOR_BUFFER_BIT}t&&(r|=k.DEPTH_BUFFER_BIT,k.clearDepth(+!this.capabilities.reverseDepthBuffer)),n&&(r|=k.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),k.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener(`webglcontextlost`,Xe,!1),t.removeEventListener(`webglcontextrestored`,Ze,!1),t.removeEventListener(`webglcontextcreationerror`,Qe,!1),Le.dispose(),Re.dispose(),Oe.dispose(),Ae.dispose(),je.dispose(),Pe.dispose(),Ke.dispose(),qe.dispose(),Fe.dispose(),Ye.dispose(),Ye.removeEventListener(`sessionstart`,at),Ye.removeEventListener(`sessionend`,ot),st.stop()};function Xe(e){e.preventDefault(),console.log(`THREE.WebGLRenderer: Context Lost.`),S=!0}function Ze(){console.log(`THREE.WebGLRenderer: Context Restored.`),S=!1;let e=De.autoReset,t=Be.enabled,n=Be.autoUpdate,r=Be.needsUpdate,i=Be.type;Je(),De.autoReset=e,Be.enabled=t,Be.autoUpdate=n,Be.needsUpdate=r,Be.type=i}function Qe(e){console.error(`THREE.WebGLRenderer: A WebGL context could not be created. Reason: `,e.statusMessage)}function $e(e){let t=e.target;t.removeEventListener(`dispose`,$e),et(t)}function et(e){tt(e),Oe.remove(e)}function tt(e){let t=Oe.get(e).programs;t!==void 0&&(t.forEach(function(e){Fe.releaseProgram(e)}),e.isShaderMaterial&&Fe.releaseShaderCache(e))}this.renderBufferDirect=function(e,t,n,r,i,a){t===null&&(t=be);let o=i.isMesh&&i.matrixWorld.determinant()<0,s=vt(e,t,n,r,i);Ee.setMaterial(r,o);let c=n.index,l=1;if(r.wireframe===!0){if(c=Ne.getWireframeAttribute(n),c===void 0)return;l=2}let u=n.drawRange,d=n.attributes.position,f=u.start*l,p=(u.start+u.count)*l;a!==null&&(f=Math.max(f,a.start*l),p=Math.min(p,(a.start+a.count)*l)),c===null?d!=null&&(f=Math.max(f,0),p=Math.min(p,d.count)):(f=Math.max(f,0),p=Math.min(p,c.count));let m=p-f;if(m<0||m===1/0)return;Ke.setup(i,r,s,n,c);let h,g=Ue;if(c!==null&&(h=Me.get(c),g=We,g.setIndex(h)),i.isMesh)r.wireframe===!0?(Ee.setLineWidth(r.wireframeLinewidth*Se()),g.setMode(k.LINES)):g.setMode(k.TRIANGLES);else if(i.isLine){let e=r.linewidth;e===void 0&&(e=1),Ee.setLineWidth(e*Se()),i.isLineSegments?g.setMode(k.LINES):i.isLineLoop?g.setMode(k.LINE_LOOP):g.setMode(k.LINE_STRIP)}else i.isPoints?g.setMode(k.POINTS):i.isSprite&&g.setMode(k.TRIANGLES);if(i.isBatchedMesh)if(i._multiDrawInstances!==null)g.renderMultiDrawInstances(i._multiDrawStarts,i._multiDrawCounts,i._multiDrawCount,i._multiDrawInstances);else if(we.get(`WEBGL_multi_draw`))g.renderMultiDraw(i._multiDrawStarts,i._multiDrawCounts,i._multiDrawCount);else{let e=i._multiDrawStarts,t=i._multiDrawCounts,n=i._multiDrawCount,a=c?Me.get(c).bytesPerElement:1,o=Oe.get(r).currentProgram.getUniforms();for(let r=0;r{function n(){if(r.forEach(function(e){Oe.get(e).currentProgram.isReady()&&r.delete(e)}),r.size===0){t(e);return}setTimeout(n,10)}we.get(`KHR_parallel_shader_compile`)===null?setTimeout(n,10):n()})};let rt=null;function it(e){rt&&rt(e)}function at(){st.stop()}function ot(){st.start()}let st=new Ea;st.setAnimationLoop(it),typeof self<`u`&&st.setContext(self),this.setAnimationLoop=function(e){rt=e,Ye.setAnimationLoop(e),e===null?st.stop():st.start()},Ye.addEventListener(`sessionstart`,at),Ye.addEventListener(`sessionend`,ot),this.render=function(e,t){if(t!==void 0&&t.isCamera!==!0){console.error(`THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.`);return}if(S===!0)return;if(e.matrixWorldAutoUpdate===!0&&e.updateMatrixWorld(),t.parent===null&&t.matrixWorldAutoUpdate===!0&&t.updateMatrixWorld(),Ye.enabled===!0&&Ye.isPresenting===!0&&(Ye.cameraAutoUpdate===!0&&Ye.updateCamera(t),t=Ye.getCamera()),e.isScene===!0&&e.onBeforeRender(x,e,t,T),g=Re.get(e,y.length),g.init(t),y.push(g),_e.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),pe.setFromProjectionMatrix(_e),he=this.localClippingEnabled,me=ze.init(this.clippingPlanes,he),h=Le.get(e,_.length),h.init(),_.push(h),Ye.enabled===!0&&Ye.isPresenting===!0){let e=x.xr.getDepthSensingMesh();e!==null&&ct(e,t,-1/0,x.sortObjects)}ct(e,t,0,x.sortObjects),h.finish(),x.sortObjects===!0&&h.sort(ce,le),xe=Ye.enabled===!1||Ye.isPresenting===!1||Ye.hasDepthSensing()===!1,xe&&Ve.addToRenderList(h,e),this.info.render.frame++,me===!0&&ze.beginShadows();let n=g.state.shadowsArray;Be.render(n,e,t),me===!0&&ze.endShadows(),this.info.autoReset===!0&&this.info.reset();let r=h.opaque,i=h.transmissive;if(g.setupLights(),t.isArrayCamera){let n=t.cameras;if(i.length>0)for(let t=0,a=n.length;t0&&ft(r,i,e,t),xe&&Ve.render(e),dt(h,e,t);T!==null&&(ke.updateMultisampleRenderTarget(T),ke.updateRenderTargetMipmap(T)),e.isScene===!0&&e.onAfterRender(x,e,t),Ke.resetDefaultState(),E=-1,ee=null,y.pop(),y.length>0?(g=y[y.length-1],me===!0&&ze.setGlobalState(x.clippingPlanes,g.state.camera)):g=null,_.pop(),h=_.length>0?_[_.length-1]:null};function ct(e,t,n,r){if(e.visible===!1)return;if(e.layers.test(t.layers)){if(e.isGroup)n=e.renderOrder;else if(e.isLOD)e.autoUpdate===!0&&e.update(t);else if(e.isLight)g.pushLight(e),e.castShadow&&g.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||pe.intersectsSprite(e)){r&&ye.setFromMatrixPosition(e.matrixWorld).applyMatrix4(_e);let t=Pe.update(e),i=e.material;i.visible&&h.push(e,t,i,n,ye.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||pe.intersectsObject(e))){let t=Pe.update(e),i=e.material;if(r&&(e.boundingSphere===void 0?(t.boundingSphere===null&&t.computeBoundingSphere(),ye.copy(t.boundingSphere.center)):(e.boundingSphere===null&&e.computeBoundingSphere(),ye.copy(e.boundingSphere.center)),ye.applyMatrix4(e.matrixWorld).applyMatrix4(_e)),Array.isArray(i)){let r=t.groups;for(let a=0,o=r.length;a0&&pt(i,t,n),a.length>0&&pt(a,t,n),o.length>0&&pt(o,t,n),Ee.buffers.depth.setTest(!0),Ee.buffers.depth.setMask(!0),Ee.buffers.color.setMask(!0),Ee.setPolygonOffset(!1)}function ft(e,t,n,r){if((n.isScene===!0?n.overrideMaterial:null)!==null)return;g.state.transmissionRenderTarget[r.id]===void 0&&(g.state.transmissionRenderTarget[r.id]=new Ln(1,1,{generateMipmaps:!0,type:we.has(`EXT_color_buffer_half_float`)||we.has(`EXT_color_buffer_float`)?D:b,minFilter:v,samples:4,stencilBuffer:a,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Tn.workingColorSpace}));let i=g.state.transmissionRenderTarget[r.id],o=r.viewport||O;i.setSize(o.z,o.w);let s=x.getRenderTarget();x.setRenderTarget(i),x.getClearColor(re),ie=x.getClearAlpha(),ie<1&&x.setClearColor(16777215,.5),x.clear(),xe&&Ve.render(n);let c=x.toneMapping;x.toneMapping=0;let l=r.viewport;if(r.viewport!==void 0&&(r.viewport=void 0),g.setupLightsView(r),me===!0&&ze.setGlobalState(x.clippingPlanes,r),pt(e,n,r),ke.updateMultisampleRenderTarget(i),ke.updateRenderTargetMipmap(i),we.has(`WEBGL_multisampled_render_to_texture`)===!1){let e=!1;for(let i=0,a=t.length;i0),d=!!n.morphAttributes.position,f=!!n.morphAttributes.normal,p=!!n.morphAttributes.color,m=0;r.toneMapped&&(T===null||T.isXRRenderTarget===!0)&&(m=x.toneMapping);let h=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,_=h===void 0?0:h.length,v=Oe.get(r),y=g.state.lights;if(me===!0&&(he===!0||e!==ee)){let t=e===ee&&r.id===E;ze.setState(r,e,t)}let b=!1;r.version===v.__version?v.needsLights&&v.lightsStateVersion!==y.state.version?b=!0:v.outputColorSpace===s?i.isBatchedMesh&&v.batching===!1||!i.isBatchedMesh&&v.batching===!0||i.isBatchedMesh&&v.batchingColor===!0&&i.colorTexture===null||i.isBatchedMesh&&v.batchingColor===!1&&i.colorTexture!==null||i.isInstancedMesh&&v.instancing===!1||!i.isInstancedMesh&&v.instancing===!0||i.isSkinnedMesh&&v.skinning===!1||!i.isSkinnedMesh&&v.skinning===!0||i.isInstancedMesh&&v.instancingColor===!0&&i.instanceColor===null||i.isInstancedMesh&&v.instancingColor===!1&&i.instanceColor!==null||i.isInstancedMesh&&v.instancingMorph===!0&&i.morphTexture===null||i.isInstancedMesh&&v.instancingMorph===!1&&i.morphTexture!==null?b=!0:v.envMap===c?r.fog===!0&&v.fog!==a||v.numClippingPlanes!==void 0&&(v.numClippingPlanes!==ze.numPlanes||v.numIntersection!==ze.numIntersection)?b=!0:v.vertexAlphas===l&&v.vertexTangents===u&&v.morphTargets===d&&v.morphNormals===f&&v.morphColors===p&&v.toneMapping===m?v.morphTargetsCount!==_&&(b=!0):b=!0:b=!0:b=!0:(b=!0,v.__version=r.version);let S=v.currentProgram;b===!0&&(S=ht(r,t,i));let C=!1,w=!1,D=!1,O=S.getUniforms(),te=v.uniforms;if(Ee.useProgram(S.program)&&(C=!0,w=!0,D=!0),(r.id!==E||r._forceRefresh)&&(E=r.id,w=!0,r._forceRefresh=!1),C||ee!==e){Te.reverseDepthBuffer?(ge.copy(e.projectionMatrix),yn(ge),bn(ge),O.setValue(k,`projectionMatrix`,ge)):O.setValue(k,`projectionMatrix`,e.projectionMatrix),O.setValue(k,`viewMatrix`,e.matrixWorldInverse);let t=O.map.cameraPosition;t!==void 0&&t.setValue(k,ve.setFromMatrixPosition(e.matrixWorld)),Te.logarithmicDepthBuffer&&O.setValue(k,`logDepthBufFC`,2/(Math.log(e.far+1)/Math.LN2)),(r.isMeshPhongMaterial||r.isMeshToonMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial)&&O.setValue(k,`isOrthographic`,e.isOrthographicCamera===!0),ee!==e&&(ee=e,w=!0,D=!0)}if(i.isSkinnedMesh){O.setOptional(k,i,`bindMatrix`),O.setOptional(k,i,`bindMatrixInverse`);let e=i.skeleton;e&&(e.boneTexture===null&&e.computeBoneTexture(),O.setValue(k,`boneTexture`,e.boneTexture,ke))}i.isBatchedMesh&&(O.setOptional(k,i,`batchingTexture`),O.setValue(k,`batchingTexture`,i._matricesTexture,ke),O.setOptional(k,i,`batchingIdTexture`),O.setValue(k,`batchingIdTexture`,i._indirectTexture,ke),O.setOptional(k,i,`batchingColorTexture`),i._colorsTexture!==null&&O.setValue(k,`batchingColorTexture`,i._colorsTexture,ke));let ne=n.morphAttributes;if((ne.position!==void 0||ne.normal!==void 0||ne.color!==void 0)&&He.update(i,n,S),(w||v.receiveShadow!==i.receiveShadow)&&(v.receiveShadow=i.receiveShadow,O.setValue(k,`receiveShadow`,i.receiveShadow)),r.isMeshGouraudMaterial&&r.envMap!==null&&(te.envMap.value=c,te.flipEnvMap.value=c.isCubeTexture&&c.isRenderTargetTexture===!1?-1:1),r.isMeshStandardMaterial&&r.envMap===null&&t.environment!==null&&(te.envMapIntensity.value=t.environmentIntensity),w&&(O.setValue(k,`toneMappingExposure`,x.toneMappingExposure),v.needsLights&&yt(te,D),a&&r.fog===!0&&Ie.refreshFogUniforms(te,a),Ie.refreshMaterialUniforms(te,r,se,oe,g.state.transmissionRenderTarget[e.id]),Ss.upload(k,gt(v),te,ke)),r.isShaderMaterial&&r.uniformsNeedUpdate===!0&&(Ss.upload(k,gt(v),te,ke),r.uniformsNeedUpdate=!1),r.isSpriteMaterial&&O.setValue(k,`center`,i.center),O.setValue(k,`modelViewMatrix`,i.modelViewMatrix),O.setValue(k,`normalMatrix`,i.normalMatrix),O.setValue(k,`modelMatrix`,i.matrixWorld),r.isShaderMaterial||r.isRawShaderMaterial){let e=r.uniformsGroups;for(let t=0,n=e.length;t0&&ke.useMultisampledRTT(e)===!1?Oe.get(e).__webglMultisampledFramebuffer:Array.isArray(l)?l[n]:l,O.copy(e.viewport),te.copy(e.scissor),ne=e.scissorTest}else O.copy(ue).multiplyScalar(se).floor(),te.copy(de).multiplyScalar(se).floor(),ne=fe;if(Ee.bindFramebuffer(k.FRAMEBUFFER,i)&&r&&Ee.drawBuffers(e,i),Ee.viewport(O),Ee.scissor(te),Ee.setScissorTest(ne),a){let r=Oe.get(e.texture);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,k.TEXTURE_CUBE_MAP_POSITIVE_X+t,r.__webglTexture,n)}else if(o){let r=Oe.get(e.texture),i=t||0;k.framebufferTextureLayer(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,r.__webglTexture,n||0,i)}E=-1},this.readRenderTargetPixels=function(e,t,n,r,i,a,o){if(!(e&&e.isWebGLRenderTarget)){console.error(`THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.`);return}let s=Oe.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&o!==void 0&&(s=s[o]),s){Ee.bindFramebuffer(k.FRAMEBUFFER,s);try{let o=e.texture,s=o.format,c=o.type;if(!Te.textureFormatReadable(s)){console.error(`THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.`);return}if(!Te.textureTypeReadable(c)){console.error(`THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.`);return}t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i&&k.readPixels(t,n,r,i,Ge.convert(s),Ge.convert(c),a)}finally{let e=T===null?null:Oe.get(T).__webglFramebuffer;Ee.bindFramebuffer(k.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,r,i,a,o){if(!(e&&e.isWebGLRenderTarget))throw Error(`THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.`);let s=Oe.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&o!==void 0&&(s=s[o]),s){let o=e.texture,c=o.format,l=o.type;if(!Te.textureFormatReadable(c))throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.`);if(!Te.textureTypeReadable(l))throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.`);if(t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i){Ee.bindFramebuffer(k.FRAMEBUFFER,s);let e=k.createBuffer();k.bindBuffer(k.PIXEL_PACK_BUFFER,e),k.bufferData(k.PIXEL_PACK_BUFFER,a.byteLength,k.STREAM_READ),k.readPixels(t,n,r,i,Ge.convert(c),Ge.convert(l),0);let o=T===null?null:Oe.get(T).__webglFramebuffer;Ee.bindFramebuffer(k.FRAMEBUFFER,o);let u=k.fenceSync(k.SYNC_GPU_COMMANDS_COMPLETE,0);return k.flush(),await vn(k,u,4),k.bindBuffer(k.PIXEL_PACK_BUFFER,e),k.getBufferSubData(k.PIXEL_PACK_BUFFER,0,a),k.deleteBuffer(e),k.deleteSync(u),a}else throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.`)}},this.copyFramebufferToTexture=function(e,t=null,n=0){e.isTexture!==!0&&(_n(`WebGLRenderer: copyFramebufferToTexture function signature has changed.`),t=arguments[0]||null,e=arguments[1]);let r=2**-n,i=Math.floor(e.image.width*r),a=Math.floor(e.image.height*r),o=t===null?0:t.x,s=t===null?0:t.y;ke.setTexture2D(e,0),k.copyTexSubImage2D(k.TEXTURE_2D,n,0,0,o,s,i,a),Ee.unbindTexture()},this.copyTextureToTexture=function(e,t,n=null,r=null,i=0){e.isTexture!==!0&&(_n(`WebGLRenderer: copyTextureToTexture function signature has changed.`),r=arguments[0]||null,e=arguments[1],t=arguments[2],i=arguments[3]||0,n=null);let a,o,s,c,l,u;n===null?(a=e.image.width,o=e.image.height,s=0,c=0):(a=n.max.x-n.min.x,o=n.max.y-n.min.y,s=n.min.x,c=n.min.y),r===null?(l=0,u=0):(l=r.x,u=r.y);let d=Ge.convert(t.format),f=Ge.convert(t.type);ke.setTexture2D(t,0),k.pixelStorei(k.UNPACK_FLIP_Y_WEBGL,t.flipY),k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),k.pixelStorei(k.UNPACK_ALIGNMENT,t.unpackAlignment);let p=k.getParameter(k.UNPACK_ROW_LENGTH),m=k.getParameter(k.UNPACK_IMAGE_HEIGHT),h=k.getParameter(k.UNPACK_SKIP_PIXELS),g=k.getParameter(k.UNPACK_SKIP_ROWS),_=k.getParameter(k.UNPACK_SKIP_IMAGES),v=e.isCompressedTexture?e.mipmaps[i]:e.image;k.pixelStorei(k.UNPACK_ROW_LENGTH,v.width),k.pixelStorei(k.UNPACK_IMAGE_HEIGHT,v.height),k.pixelStorei(k.UNPACK_SKIP_PIXELS,s),k.pixelStorei(k.UNPACK_SKIP_ROWS,c),e.isDataTexture?k.texSubImage2D(k.TEXTURE_2D,i,l,u,a,o,d,f,v.data):e.isCompressedTexture?k.compressedTexSubImage2D(k.TEXTURE_2D,i,l,u,v.width,v.height,d,v.data):k.texSubImage2D(k.TEXTURE_2D,i,l,u,a,o,d,f,v),k.pixelStorei(k.UNPACK_ROW_LENGTH,p),k.pixelStorei(k.UNPACK_IMAGE_HEIGHT,m),k.pixelStorei(k.UNPACK_SKIP_PIXELS,h),k.pixelStorei(k.UNPACK_SKIP_ROWS,g),k.pixelStorei(k.UNPACK_SKIP_IMAGES,_),i===0&&t.generateMipmaps&&k.generateMipmap(k.TEXTURE_2D),Ee.unbindTexture()},this.copyTextureToTexture3D=function(e,t,n=null,r=null,i=0){e.isTexture!==!0&&(_n(`WebGLRenderer: copyTextureToTexture3D function signature has changed.`),n=arguments[0]||null,r=arguments[1]||null,e=arguments[2],t=arguments[3],i=arguments[4]||0);let a,o,s,c,l,u,d,f,p,m=e.isCompressedTexture?e.mipmaps[i]:e.image;n===null?(a=m.width,o=m.height,s=m.depth,c=0,l=0,u=0):(a=n.max.x-n.min.x,o=n.max.y-n.min.y,s=n.max.z-n.min.z,c=n.min.x,l=n.min.y,u=n.min.z),r===null?(d=0,f=0,p=0):(d=r.x,f=r.y,p=r.z);let h=Ge.convert(t.format),g=Ge.convert(t.type),_;if(t.isData3DTexture)ke.setTexture3D(t,0),_=k.TEXTURE_3D;else if(t.isDataArrayTexture||t.isCompressedArrayTexture)ke.setTexture2DArray(t,0),_=k.TEXTURE_2D_ARRAY;else{console.warn(`THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.`);return}k.pixelStorei(k.UNPACK_FLIP_Y_WEBGL,t.flipY),k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),k.pixelStorei(k.UNPACK_ALIGNMENT,t.unpackAlignment);let v=k.getParameter(k.UNPACK_ROW_LENGTH),y=k.getParameter(k.UNPACK_IMAGE_HEIGHT),b=k.getParameter(k.UNPACK_SKIP_PIXELS),x=k.getParameter(k.UNPACK_SKIP_ROWS),S=k.getParameter(k.UNPACK_SKIP_IMAGES);k.pixelStorei(k.UNPACK_ROW_LENGTH,m.width),k.pixelStorei(k.UNPACK_IMAGE_HEIGHT,m.height),k.pixelStorei(k.UNPACK_SKIP_PIXELS,c),k.pixelStorei(k.UNPACK_SKIP_ROWS,l),k.pixelStorei(k.UNPACK_SKIP_IMAGES,u),e.isDataTexture||e.isData3DTexture?k.texSubImage3D(_,i,d,f,p,a,o,s,h,g,m.data):t.isCompressedArrayTexture?k.compressedTexSubImage3D(_,i,d,f,p,a,o,s,h,m.data):k.texSubImage3D(_,i,d,f,p,a,o,s,h,g,m),k.pixelStorei(k.UNPACK_ROW_LENGTH,v),k.pixelStorei(k.UNPACK_IMAGE_HEIGHT,y),k.pixelStorei(k.UNPACK_SKIP_PIXELS,b),k.pixelStorei(k.UNPACK_SKIP_ROWS,x),k.pixelStorei(k.UNPACK_SKIP_IMAGES,S),i===0&&t.generateMipmaps&&k.generateMipmap(_),Ee.unbindTexture()},this.initRenderTarget=function(e){Oe.get(e).__webglFramebuffer===void 0&&ke.setupRenderTarget(e)},this.initTexture=function(e){e.isCubeTexture?ke.setTextureCube(e,0):e.isData3DTexture?ke.setTexture3D(e,0):e.isDataArrayTexture||e.isCompressedArrayTexture?ke.setTexture2DArray(e,0):ke.setTexture2D(e,0),Ee.unbindTexture()},this.resetState=function(){C=0,w=0,T=null,Ee.reset(),Ke.reset()},typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}get coordinateSystem(){return Nt}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;let t=this.getContext();t.drawingBufferColorSpace=e===`display-p3`?`display-p3`:`srgb`,t.unpackColorSpace=Tn.workingColorSpace===`display-p3-linear`?`display-p3`:`srgb`}},Uc=class e{constructor(e,t=25e-5){this.isFogExp2=!0,this.name=``,this.color=new P(e),this.density=t}clone(){return new e(this.color,this.density)}toJSON(){return{type:`FogExp2`,name:this.name,color:this.color.getHex(),density:this.density}}},Wc=class e{constructor(e,t=1,n=1e3){this.isFog=!0,this.name=``,this.color=new P(e),this.near=t,this.far=n}clone(){return new e(this.color,this.near,this.far)}toJSON(){return{type:`Fog`,name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}},Gc=class extends Wr{constructor(){super(),this.isScene=!0,this.type=`Scene`,this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new Dr,this.environmentIntensity=1,this.environmentRotation=new Dr,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}copy(e,t){return super.copy(e,t),e.background!==null&&(this.background=e.background.clone()),e.environment!==null&&(this.environment=e.environment.clone()),e.fog!==null&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),e.overrideMaterial!==null&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}},Kc=class{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e===void 0?0:e.length/t,this.usage=Ct,this.updateRanges=[],this.version=0,this.uuid=Bt()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let r=0,i=this.stride;re.far||t.push({distance:s,point:Zc.clone(),uv:ii.getInterpolation(Zc,rl,il,al,ol,sl,cl,new A),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}};function ul(e,t,n,r,i,a){el.subVectors(e,n).addScalar(.5).multiply(r),i===void 0?tl.copy(el):(tl.x=a*el.x-i*el.y,tl.y=i*el.x+a*el.y),e.copy(t),e.x+=tl.x,e.y+=tl.y,e.applyMatrix4(nl)}var dl=new M,fl=new M,pl=class extends Wr{constructor(){super(),this._currentLevel=0,this.type=`LOD`,Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(e){super.copy(e,!1);let t=e.levels;for(let e=0,n=t.length;e0){let n,r;for(n=1,r=t.length;n0){dl.setFromMatrixPosition(this.matrixWorld);let n=e.ray.origin.distanceTo(dl);this.getObjectForDistance(n).raycast(e,t)}}update(e){let t=this.levels;if(t.length>1){dl.setFromMatrixPosition(e.matrixWorld),fl.setFromMatrixPosition(this.matrixWorld);let n=dl.distanceTo(fl)/e.zoom;t[0].object.visible=!0;let r,i;for(r=1,i=t.length;r=e)t[r-1].object.visible=!1,t[r].object.visible=!0;else break}for(this._currentLevel=r-1;r=r.length&&r.push({start:-1,count:-1,z:-1,index:-1});let a=r[this.index];i.push(a),this.index++,a.start=e.start,a.count=e.count,a.z=t,a.index=n}reset(){this.list.length=0,this.index=0}},Vl=new N,Hl=new N,Ul=new N,Wl=new P(1,1,1),Gl=new N,Kl=new Ta,ql=new Gn,Jl=new lr,Yl=new M,Xl=new M,Zl=new M,Ql=new Bl,$l=new Ji,eu=[];function tu(e,t,n=0){let r=t.itemSize;if(e.isInterleavedBufferAttribute||e.array.constructor!==t.array.constructor){let i=e.count;for(let a=0;a65535?new Uint32Array(r):new Uint16Array(r);t.setIndex(new bi(e,1))}this._geometryInitialized=!0}}_validateGeometry(e){let t=this.geometry;if(!!e.getIndex()!=!!t.getIndex())throw Error(`BatchedMesh: All geometries must consistently have "index".`);for(let n in t.attributes){if(!e.hasAttribute(n))throw Error(`BatchedMesh: Added geometry missing "${n}". All geometries must have consistent attributes.`);let r=e.getAttribute(n),i=t.getAttribute(n);if(r.itemSize!==i.itemSize||r.normalized!==i.normalized)throw Error(`BatchedMesh: All attributes must have a consistent itemSize and normalized value.`)}}setCustomSort(e){return this.customSort=e,this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Gn);let e=this.boundingBox,t=this._drawInfo;e.makeEmpty();for(let n=0,r=t.length;n=this.maxInstanceCount&&this._availableInstanceIds.length===0)throw Error(`BatchedMesh: Maximum item count reached.`);let t={visible:!0,active:!0,geometryIndex:e},n=null;this._availableInstanceIds.length>0?(n=this._availableInstanceIds.pop(),this._drawInfo[n]=t):(n=this._drawInfo.length,this._drawInfo.push(t));let r=this._matricesTexture,i=r.image.data;Ul.toArray(i,n*16),r.needsUpdate=!0;let a=this._colorsTexture;return a&&(Wl.toArray(a.image.data,n*4),a.needsUpdate=!0),n}addGeometry(e,t=-1,n=-1){if(this._initializeGeometry(e),this._validateGeometry(e),this._drawInfo.length>=this._maxInstanceCount)throw Error(`BatchedMesh: Maximum item count reached.`);let r={vertexStart:-1,vertexCount:-1,indexStart:-1,indexCount:-1},i=null,a=this._reservedRanges,o=this._drawRanges,s=this._bounds;this._geometryCount!==0&&(i=a[a.length-1]),t===-1?r.vertexCount=e.getAttribute(`position`).count:r.vertexCount=t,i===null?r.vertexStart=0:r.vertexStart=i.vertexStart+i.vertexCount;let c=e.getIndex(),l=c!==null;if(l&&(n===-1?r.indexCount=c.count:r.indexCount=n,i===null?r.indexStart=0:r.indexStart=i.indexStart+i.indexCount),r.indexStart!==-1&&r.indexStart+r.indexCount>this._maxIndexCount||r.vertexStart+r.vertexCount>this._maxVertexCount)throw Error(`BatchedMesh: Reserved space request exceeds the maximum buffer size.`);let u=this._geometryCount;return this._geometryCount++,a.push(r),o.push({start:l?r.indexStart:r.vertexStart,count:-1}),s.push({boxInitialized:!1,box:new Gn,sphereInitialized:!1,sphere:new lr}),this.setGeometryAt(u,e),u}setGeometryAt(e,t){if(e>=this._geometryCount)throw Error(`BatchedMesh: Maximum geometry count reached.`);this._validateGeometry(t);let n=this.geometry,r=n.getIndex()!==null,i=n.getIndex(),a=t.getIndex(),o=this._reservedRanges[e];if(r&&a.count>o.indexCount||t.attributes.position.count>o.vertexCount)throw Error(`BatchedMesh: Reserved space not large enough for provided geometry.`);let s=o.vertexStart,c=o.vertexCount;for(let e in n.attributes){let r=t.getAttribute(e),i=n.getAttribute(e);tu(r,i,s);let a=r.itemSize;for(let e=r.count,t=c;e=t.length||t[e].active===!1?this:(t[e].active=!1,this._availableInstanceIds.push(e),this._visibilityChanged=!0,this)}getBoundingBoxAt(e,t){if(e>=this._geometryCount)return null;let n=this._bounds[e],r=n.box,i=this.geometry;if(n.boxInitialized===!1){r.makeEmpty();let t=i.index,a=i.attributes.position,o=this._drawRanges[e];for(let e=o.start,n=o.start+o.count;e=this._geometryCount)return null;let n=this._bounds[e],r=n.sphere,i=this.geometry;if(n.sphereInitialized===!1){r.makeEmpty(),this.getBoundingBoxAt(e,ql),ql.getCenter(r.center);let t=i.index,a=i.attributes.position,o=this._drawRanges[e],s=0;for(let e=o.start,n=o.start+o.count;e=n.length||n[e].active===!1?this:(t.toArray(i,e*16),r.needsUpdate=!0,this)}getMatrixAt(e,t){let n=this._drawInfo,r=this._matricesTexture.image.data;return e>=n.length||n[e].active===!1?null:t.fromArray(r,e*16)}setColorAt(e,t){this._colorsTexture===null&&this._initColorsTexture();let n=this._colorsTexture,r=this._colorsTexture.image.data,i=this._drawInfo;return e>=i.length||i[e].active===!1?this:(t.toArray(r,e*4),n.needsUpdate=!0,this)}getColorAt(e,t){let n=this._colorsTexture.image.data,r=this._drawInfo;return e>=r.length||r[e].active===!1?null:t.fromArray(n,e*4)}setVisibleAt(e,t){let n=this._drawInfo;return e>=n.length||n[e].active===!1||n[e].visible===t?this:(n[e].visible=t,this._visibilityChanged=!0,this)}getVisibleAt(e){let t=this._drawInfo;return e>=t.length||t[e].active===!1?!1:t[e].visible}setGeometryIdAt(e,t){let n=this._drawInfo;return e>=n.length||n[e].active===!1||t<0||t>=this._geometryCount?null:(n[e].geometryIndex=t,this)}getGeometryIdAt(e){let t=this._drawInfo;return e>=t.length||t[e].active===!1?-1:t[e].geometryIndex}getGeometryRangeAt(e,t={}){if(e<0||e>=this._geometryCount)return null;let n=this._drawRanges[e];return t.start=n.start,t.count=n.count,t}raycast(e,t){let n=this._drawInfo,r=this._drawRanges,i=this.matrixWorld,a=this.geometry;$l.material=this.material,$l.geometry.index=a.index,$l.geometry.attributes=a.attributes,$l.geometry.boundingBox===null&&($l.geometry.boundingBox=new Gn),$l.geometry.boundingSphere===null&&($l.geometry.boundingSphere=new lr);for(let a=0,o=n.length;a({...e})),this._reservedRanges=e._reservedRanges.map(e=>({...e})),this._drawInfo=e._drawInfo.map(e=>({...e})),this._bounds=e._bounds.map(e=>({boxInitialized:e.boxInitialized,box:e.box.clone(),sphereInitialized:e.sphereInitialized,sphere:e.sphere.clone()})),this._maxInstanceCount=e._maxInstanceCount,this._maxVertexCount=e._maxVertexCount,this._maxIndexCount=e._maxIndexCount,this._geometryInitialized=e._geometryInitialized,this._geometryCount=e._geometryCount,this._multiDrawCounts=e._multiDrawCounts.slice(),this._multiDrawStarts=e._multiDrawStarts.slice(),this._matricesTexture=e._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),this._colorsTexture!==null&&(this._colorsTexture=e._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){return this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,this._colorsTexture!==null&&(this._colorsTexture.dispose(),this._colorsTexture=null),this}onBeforeRender(e,t,n,r,i){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;let a=r.getIndex(),o=a===null?1:a.array.BYTES_PER_ELEMENT,s=this._drawInfo,c=this._multiDrawStarts,l=this._multiDrawCounts,u=this._drawRanges,d=this.perObjectFrustumCulled,f=this._indirectTexture,p=f.image.data;d&&(Gl.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse).multiply(this.matrixWorld),Kl.setFromProjectionMatrix(Gl,e.coordinateSystem));let m=0;if(this.sortObjects){Hl.copy(this.matrixWorld).invert(),Yl.setFromMatrixPosition(n.matrixWorld).applyMatrix4(Hl),Xl.set(0,0,-1).transformDirection(n.matrixWorld).transformDirection(Hl);for(let e=0,t=s.length;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;er)return;lu.applyMatrix4(e.matrixWorld);let s=t.ray.origin.distanceTo(lu);if(!(st.far))return{distance:s,point:uu.clone().applyMatrix4(e.matrixWorld),index:i,face:null,faceIndex:null,barycoord:null,object:e}}var pu=new M,mu=new M,hu=class extends du{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type=`LineSegments`}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[];for(let e=0,r=t.count;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;ei.far)return;a.push({distance:c,distanceToRay:Math.sqrt(s),point:n,index:t,face:null,faceIndex:null,barycoord:null,object:o})}}var wu=class extends Pn{constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r,i,a,o,s,c),this.isVideoTexture=!0,this.minFilter=a===void 0?h:a,this.magFilter=i===void 0?h:i,this.generateMipmaps=!1;let l=this;function u(){l.needsUpdate=!0,e.requestVideoFrameCallback(u)}`requestVideoFrameCallback`in e&&e.requestVideoFrameCallback(u)}clone(){return new this.constructor(this.image).copy(this)}update(){let e=this.image;!(`requestVideoFrameCallback`in e)&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}},Tu=class extends Pn{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=u,this.minFilter=u,this.generateMipmaps=!1,this.needsUpdate=!0}},Eu=class extends Pn{constructor(e,t,n,r,i,a,o,s,c,l,u,d){super(null,a,o,s,c,l,r,i,u,d),this.isCompressedTexture=!0,this.image={width:t,height:n},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}},Du=class extends Eu{constructor(e,t,n,r,i,a){super(e,t,n,i,a),this.isCompressedArrayTexture=!0,this.image.depth=r,this.wrapR=c,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}},Ou=class extends Eu{constructor(e,t,n){super(void 0,e[0].width,e[0].height,t,n,301),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=e}},ku=class extends Pn{constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r,i,a,o,s,c),this.isCanvasTexture=!0,this.needsUpdate=!0}},Au=class{constructor(){this.type=`Curve`,this.arcLengthDivisions=200}getPoint(){return console.warn(`THREE.Curve: .getPoint() not implemented.`),null}getPointAt(e,t){let n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],n,r=this.getPoint(0),i=0;t.push(0);for(let a=1;a<=e;a++)n=this.getPoint(a/e),i+=n.distanceTo(r),t.push(i),r=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){let n=this.getLengths(),r=0,i=n.length,a;a=t||e*n[i-1];let o=0,s=i-1,c;for(;o<=s;)if(r=Math.floor(o+(s-o)/2),c=n[r]-a,c<0)o=r+1;else if(c>0)s=r-1;else{s=r;break}if(r=s,n[r]===a)return r/(i-1);let l=n[r],u=n[r+1]-l,d=(a-l)/u;return(r+d)/(i-1)}getTangent(e,t){let n=1e-4,r=e-n,i=e+n;r<0&&(r=0),i>1&&(i=1);let a=this.getPoint(r),o=this.getPoint(i),s=t||(a.isVector2?new A:new M);return s.copy(o).sub(a).normalize(),s}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t){let n=new M,r=[],i=[],a=[],o=new M,s=new N;for(let t=0;t<=e;t++){let n=t/e;r[t]=this.getTangentAt(n,new M)}i[0]=new M,a[0]=new M;let c=Number.MAX_VALUE,l=Math.abs(r[0].x),u=Math.abs(r[0].y),d=Math.abs(r[0].z);l<=c&&(c=l,n.set(1,0,0)),u<=c&&(c=u,n.set(0,1,0)),d<=c&&n.set(0,0,1),o.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],o),a[0].crossVectors(r[0],i[0]);for(let t=1;t<=e;t++){if(i[t]=i[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>2**-52){o.normalize();let e=Math.acos(Vt(r[t-1].dot(r[t]),-1,1));i[t].applyMatrix4(s.makeRotationAxis(o,e))}a[t].crossVectors(r[t],i[t])}if(t===!0){let t=Math.acos(Vt(i[0].dot(i[e]),-1,1));t/=e,r[0].dot(o.crossVectors(i[0],i[e]))>0&&(t=-t);for(let n=1;n<=e;n++)i[n].applyMatrix4(s.makeRotationAxis(r[n],t*n)),a[n].crossVectors(r[n],i[n])}return{tangents:r,normals:i,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.6,type:`Curve`,generator:`Curve.toJSON`}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}},ju=class extends Au{constructor(e=0,t=0,n=1,r=1,i=0,a=Math.PI*2,o=!1,s=0){super(),this.isEllipseCurve=!0,this.type=`EllipseCurve`,this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=r,this.aStartAngle=i,this.aEndAngle=a,this.aClockwise=o,this.aRotation=s}getPoint(e,t=new A){let n=t,r=Math.PI*2,i=this.aEndAngle-this.aStartAngle,a=Math.abs(i)<2**-52;for(;i<0;)i+=r;for(;i>r;)i-=r;i<2**-52&&(i=a?0:r),this.aClockwise===!0&&!a&&(i===r?i=-r:i-=r);let o=this.aStartAngle+e*i,s=this.aX+this.xRadius*Math.cos(o),c=this.aY+this.yRadius*Math.sin(o);if(this.aRotation!==0){let e=Math.cos(this.aRotation),t=Math.sin(this.aRotation),n=s-this.aX,r=c-this.aY;s=n*e-r*t+this.aX,c=n*t+r*e+this.aY}return n.set(s,c)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){let e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}},Mu=class extends ju{constructor(e,t,n,r,i,a){super(e,t,n,n,r,i,a),this.isArcCurve=!0,this.type=`ArcCurve`}};function Nu(){let e=0,t=0,n=0,r=0;function i(i,a,o,s){e=i,t=o,n=-3*i+3*a-2*o-s,r=2*i-2*a+o+s}return{initCatmullRom:function(e,t,n,r,a){i(t,n,a*(n-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,n,r,a,o,s){let c=(t-e)/a-(n-e)/(a+o)+(n-t)/o,l=(n-t)/o-(r-t)/(o+s)+(r-n)/s;c*=o,l*=o,i(t,n,c,l)},calc:function(i){let a=i*i,o=a*i;return e+t*i+n*a+r*o}}}var Pu=new M,Fu=new Nu,Iu=new Nu,Lu=new Nu,Ru=class extends Au{constructor(e=[],t=!1,n=`centripetal`,r=.5){super(),this.isCatmullRomCurve3=!0,this.type=`CatmullRomCurve3`,this.points=e,this.closed=t,this.curveType=n,this.tension=r}getPoint(e,t=new M){let n=t,r=this.points,i=r.length,a=(i-+!this.closed)*e,o=Math.floor(a),s=a-o;this.closed?o+=o>0?0:(Math.floor(Math.abs(o)/i)+1)*i:s===0&&o===i-1&&(o=i-2,s=1);let c,l;this.closed||o>0?c=r[(o-1)%i]:(Pu.subVectors(r[0],r[1]).add(r[0]),c=Pu);let u=r[o%i],d=r[(o+1)%i];if(this.closed||o+2r.length-2?r.length-1:a+1],u=r[a>r.length-3?r.length-1:a+2];return n.set(zu(o,s.x,c.x,l.x,u.x),zu(o,s.y,c.y,l.y,u.y)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t=n){let e=r[i]-n,a=this.curves[i],o=a.getLength(),s=o===0?0:1-e/o;return a.getPointAt(s,t)}i++}return null}getLength(){let e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let e=[],t=0;for(let n=0,r=this.curves.length;n1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,n=e.curves.length;t0){let e=c.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(c);let l=c.getPoint(1);return this.currentPoint.copy(l),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){let e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}},ad=class e extends Ii{constructor(e=[new A(0,-.5),new A(.5,0),new A(0,.5)],t=12,n=0,r=Math.PI*2){super(),this.type=`LatheGeometry`,this.parameters={points:e,segments:t,phiStart:n,phiLength:r},t=Math.floor(t),r=Vt(r,0,Math.PI*2);let i=[],a=[],o=[],s=[],c=[],l=1/t,u=new M,d=new A,f=new M,p=new M,m=new M,h=0,g=0;for(let t=0;t<=e.length-1;t++)switch(t){case 0:h=e[t+1].x-e[t].x,g=e[t+1].y-e[t].y,f.x=g*1,f.y=-h,f.z=g*0,m.copy(f),f.normalize(),s.push(f.x,f.y,f.z);break;case e.length-1:s.push(m.x,m.y,m.z);break;default:h=e[t+1].x-e[t].x,g=e[t+1].y-e[t].y,f.x=g*1,f.y=-h,f.z=g*0,p.copy(f),f.x+=m.x,f.y+=m.y,f.z+=m.z,f.normalize(),s.push(f.x,f.y,f.z),m.copy(p)}for(let i=0;i<=t;i++){let f=n+i*l*r,p=Math.sin(f),m=Math.cos(f);for(let n=0;n<=e.length-1;n++){u.x=e[n].x*p,u.y=e[n].y,u.z=e[n].x*m,a.push(u.x,u.y,u.z),d.x=i/t,d.y=n/(e.length-1),o.push(d.x,d.y);let r=s[3*n+0]*p,l=s[3*n+1],f=s[3*n+0]*m;c.push(r,l,f)}}for(let n=0;n0&&v(!0),t>0&&v(!1)),this.setIndex(l),this.setAttribute(`position`,new F(u,3)),this.setAttribute(`normal`,new F(d,3)),this.setAttribute(`uv`,new F(f,2));function _(){let a=new M,_=new M,v=0,y=(t-e)/n;for(let c=0;c<=i;c++){let l=[],g=c/i,v=g*(t-e)+e;for(let e=0;e<=r;e++){let t=e/r,i=t*s+o,c=Math.sin(i),m=Math.cos(i);_.x=v*c,_.y=-g*n+h,_.z=v*m,u.push(_.x,_.y,_.z),a.set(c,y,m).normalize(),d.push(a.x,a.y,a.z),f.push(t,1-g),l.push(p++)}m.push(l)}for(let n=0;n0&&(l.push(i,a,s),v+=3),t>0&&(l.push(a,o,s),v+=3)}c.addGroup(g,v,0),g+=v}function v(n){let i=p,a=new A,m=new M,_=0,v=n===!0?e:t,y=n===!0?1:-1;for(let e=1;e<=r;e++)u.push(0,h*y,0),d.push(0,y,0),f.push(.5,.5),p++;let b=p;for(let e=0;e<=r;e++){let t=e/r*s+o,n=Math.cos(t),i=Math.sin(t);m.x=v*i,m.y=h*y,m.z=v*n,u.push(m.x,m.y,m.z),d.push(0,y,0),a.x=n*.5+.5,a.y=i*.5*y+.5,f.push(a.x,a.y),p++}for(let e=0;e.9&&Math.min(t,n,r)<.1&&(t<.2&&(a[e+0]+=1),n<.2&&(a[e+2]+=1),r<.2&&(a[e+4]+=1))}}function d(e){i.push(e.x,e.y,e.z)}function f(t,n){let r=t*3;n.x=e[r+0],n.y=e[r+1],n.z=e[r+2]}function p(){let e=new M,t=new M,n=new M,r=new M,o=new A,s=new A,c=new A;for(let l=0,u=0;l80*n){s=l=e[0],c=u=e[1];for(let t=n;tl&&(l=d),f>u&&(u=f);p=Math.max(l-s,u-c),p=p===0?0:32767/p}return xd(a,o,n,s,c,p,0),o}};function yd(e,t,n,r,i){let a,o;if(i===Yd(e,t,n,r)>0)for(a=t;a=t;a-=r)o=Kd(a,e[a],e[a+1],o);return o&&Rd(o,o.next)&&(qd(o),o=o.next),o}function bd(e,t){if(!e)return e;t||=e;let n=e,r;do if(r=!1,!n.steiner&&(Rd(n,n.next)||Ld(n.prev,n,n.next)===0)){if(qd(n),n=t=n.prev,n===n.next)break;r=!0}else n=n.next;while(r||n!==t);return t}function xd(e,t,n,r,i,a,o){if(!e)return;!o&&a&&jd(e,r,i,a);let s=e,c,l;for(;e.prev!==e.next;){if(c=e.prev,l=e.next,a?Cd(e,r,i,a):Sd(e)){t.push(c.i/n|0),t.push(e.i/n|0),t.push(l.i/n|0),qd(e),e=l.next,s=l.next;continue}if(e=l,e===s){o?o===1?(e=wd(bd(e),t,n),xd(e,t,n,r,i,a,2)):o===2&&Td(e,t,n,r,i,a):xd(bd(e),t,n,r,i,a,1);break}}}function Sd(e){let t=e.prev,n=e,r=e.next;if(Ld(t,n,r)>=0)return!1;let i=t.x,a=n.x,o=r.x,s=t.y,c=n.y,l=r.y,u=ia?i>o?i:o:a>o?a:o,p=s>c?s>l?s:l:c>l?c:l,m=r.next;for(;m!==t;){if(m.x>=u&&m.x<=f&&m.y>=d&&m.y<=p&&Fd(i,s,a,c,o,l,m.x,m.y)&&Ld(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function Cd(e,t,n,r){let i=e.prev,a=e,o=e.next;if(Ld(i,a,o)>=0)return!1;let s=i.x,c=a.x,l=o.x,u=i.y,d=a.y,f=o.y,p=sc?s>l?s:l:c>l?c:l,g=u>d?u>f?u:f:d>f?d:f,_=Nd(p,m,t,n,r),v=Nd(h,g,t,n,r),y=e.prevZ,b=e.nextZ;for(;y&&y.z>=_&&b&&b.z<=v;){if(y.x>=p&&y.x<=h&&y.y>=m&&y.y<=g&&y!==i&&y!==o&&Fd(s,u,c,d,l,f,y.x,y.y)&&Ld(y.prev,y,y.next)>=0||(y=y.prevZ,b.x>=p&&b.x<=h&&b.y>=m&&b.y<=g&&b!==i&&b!==o&&Fd(s,u,c,d,l,f,b.x,b.y)&&Ld(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;y&&y.z>=_;){if(y.x>=p&&y.x<=h&&y.y>=m&&y.y<=g&&y!==i&&y!==o&&Fd(s,u,c,d,l,f,y.x,y.y)&&Ld(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;b&&b.z<=v;){if(b.x>=p&&b.x<=h&&b.y>=m&&b.y<=g&&b!==i&&b!==o&&Fd(s,u,c,d,l,f,b.x,b.y)&&Ld(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function wd(e,t,n){let r=e;do{let i=r.prev,a=r.next.next;!Rd(i,a)&&zd(i,r,r.next,a)&&Ud(i,a)&&Ud(a,i)&&(t.push(i.i/n|0),t.push(r.i/n|0),t.push(a.i/n|0),qd(r),qd(r.next),r=e=a),r=r.next}while(r!==e);return bd(r)}function Td(e,t,n,r,i,a){let o=e;do{let e=o.next.next;for(;e!==o.prev;){if(o.i!==e.i&&Id(o,e)){let s=Gd(o,e);o=bd(o,o.next),s=bd(s,s.next),xd(o,t,n,r,i,a,0),xd(s,t,n,r,i,a,0);return}e=e.next}o=o.next}while(o!==e)}function Ed(e,t,n,r){let i=[],a,o,s,c,l;for(a=0,o=t.length;a=n.next.y&&n.next.y!==n.y){let e=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=a&&e>r&&(r=e,i=n.x=n.x&&n.x>=c&&a!==n.x&&Fd(oi.x||n.x===i.x&&Ad(i,n)))&&(i=n,u=d)),n=n.next;while(n!==s);return i}function Ad(e,t){return Ld(e.prev,e,t.prev)<0&&Ld(t.next,e,e.next)<0}function jd(e,t,n,r){let i=e;do i.z===0&&(i.z=Nd(i.x,i.y,t,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next;while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,Md(i)}function Md(e){let t,n,r,i,a,o,s,c,l=1;do{for(n=e,e=null,a=null,o=0;n;){for(o++,r=n,s=0,t=0;t0||c>0&&r;)s!==0&&(c===0||!r||n.z<=r.z)?(i=n,n=n.nextZ,s--):(i=r,r=r.nextZ,c--),a?a.nextZ=i:e=i,i.prevZ=a,a=i;n=r}a.nextZ=null,l*=2}while(o>1);return e}function Nd(e,t,n,r,i){return e=(e-n)*i|0,t=(t-r)*i|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function Pd(e){let t=e,n=e;do(t.x=(e-o)*(a-s)&&(e-o)*(r-s)>=(n-o)*(t-s)&&(n-o)*(a-s)>=(i-o)*(r-s)}function Id(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!Hd(e,t)&&(Ud(e,t)&&Ud(t,e)&&Wd(e,t)&&(Ld(e.prev,e,t.prev)||Ld(e,t.prev,t))||Rd(e,t)&&Ld(e.prev,e,e.next)>0&&Ld(t.prev,t,t.next)>0)}function Ld(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function Rd(e,t){return e.x===t.x&&e.y===t.y}function zd(e,t,n,r){let i=Vd(Ld(e,t,n)),a=Vd(Ld(e,t,r)),o=Vd(Ld(n,r,e)),s=Vd(Ld(n,r,t));return!!(i!==a&&o!==s||i===0&&Bd(e,n,t)||a===0&&Bd(e,r,t)||o===0&&Bd(n,e,r)||s===0&&Bd(n,t,r))}function Bd(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function Vd(e){return e>0?1:e<0?-1:0}function Hd(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&zd(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function Ud(e,t){return Ld(e.prev,e,e.next)<0?Ld(e,t,e.next)>=0&&Ld(e,e.prev,t)>=0:Ld(e,t,e.prev)<0||Ld(e,e.next,t)<0}function Wd(e,t){let n=e,r=!1,i=(e.x+t.x)/2,a=(e.y+t.y)/2;do n.y>a!=n.next.y>a&&n.next.y!==n.y&&i<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next;while(n!==e);return r}function Gd(e,t){let n=new Jd(e.i,e.x,e.y),r=new Jd(t.i,t.x,t.y),i=e.next,a=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,r.next=n,n.prev=r,a.next=r,r.prev=a,r}function Kd(e,t,n,r){let i=new Jd(e,t,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function qd(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Jd(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Yd(e,t,n,r){let i=0;for(let a=t,o=n-r;a2&&e[t-1].equals(e[0])&&e.pop()}function Qd(e,t){for(let n=0;n2**-52){let d=Math.sqrt(u),f=Math.sqrt(c*c+l*l),p=t.x-s/d,m=t.y+o/d,h=n.x-l/f,g=n.y+c/f,_=((h-p)*l-(g-m)*c)/(o*l-s*c);r=p+o*_-e.x,i=m+s*_-e.y;let v=r*r+i*i;if(v<=2)return new A(r,i);a=Math.sqrt(v/2)}else{let e=!1;o>2**-52?c>2**-52&&(e=!0):o<-(2**-52)?c<-(2**-52)&&(e=!0):Math.sign(s)===Math.sign(l)&&(e=!0),e?(r=-s,i=o,a=Math.sqrt(u)):(r=o,i=s,a=Math.sqrt(u/2))}return new A(r/a,i/a)}let ne=[];for(let e=0,t=E.length,n=t-1,r=e+1;e=0;e--){let t=e/p,n=u*Math.cos(t*Math.PI/2),r=d*Math.sin(t*Math.PI/2)+f;for(let e=0,t=E.length;e=0;){let r=n,i=n-1;i<0&&(i=e.length-1);for(let e=0,n=s+p*2;e0)&&f.push(t,i,c),(e!==n-1||s0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:``,PHYSICAL:``},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}},bf=class extends di{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type=`MeshPhongMaterial`,this.color=new P(16777215),this.specular=new P(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new P(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new A(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Dr,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},xf=class extends di{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:``},this.type=`MeshToonMaterial`,this.color=new P(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new P(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new A(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},Sf=class extends di{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type=`MeshNormalMaterial`,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new A(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}},Cf=class extends di{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type=`MeshLambertMaterial`,this.color=new P(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new P(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new A(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Dr,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},wf=class extends di{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:``},this.type=`MeshMatcapMaterial`,this.color=new P(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new A(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:``},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this.fog=e.fog,this}},Tf=class extends ru{constructor(e){super(),this.isLineDashedMaterial=!0,this.type=`LineDashedMaterial`,this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}};function Ef(e,t,n){return!e||!n&&e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}function Df(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Of(e){function t(t,n){return e[t]-e[n]}let n=e.length,r=Array(n);for(let e=0;e!==n;++e)r[e]=e;return r.sort(t),r}function kf(e,t,n){let r=e.length,i=new e.constructor(r);for(let a=0,o=0;o!==r;++a){let r=n[a]*t;for(let n=0;n!==t;++n)i[o++]=e[r+n]}return i}function Af(e,t,n,r){let i=1,a=e[0];for(;a!==void 0&&a[r]===void 0;)a=e[i++];if(a===void 0)return;let o=a[r];if(o!==void 0)if(Array.isArray(o))do o=a[r],o!==void 0&&(t.push(a.time),n.push.apply(n,o)),a=e[i++];while(a!==void 0);else if(o.toArray!==void 0)do o=a[r],o!==void 0&&(t.push(a.time),o.toArray(n,n.length)),a=e[i++];while(a!==void 0);else do o=a[r],o!==void 0&&(t.push(a.time),n.push(o)),a=e[i++];while(a!==void 0)}function jf(e,t,n,r,i=30){let a=e.clone();a.name=t;let o=[];for(let e=0;e=r)){c.push(t.times[e]);for(let n=0;na.tracks[e].times[0]&&(s=a.tracks[e].times[0]);for(let e=0;e=r.times[d]){let e=d*c+s,t=e+c-s;f=r.values.slice(e,t)}else{let e=r.createInterpolant(),t=s,n=c-s;e.evaluate(a),f=e.resultBuffer.slice(t,n)}i===`quaternion`&&new Hn().fromArray(f).normalize().conjugate().toArray(f);let p=o.times.length;for(let e=0;e=i)){let o=t[1];e=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n>>1;et;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(console.error(`THREE.KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(console.error(`THREE.KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){console.error(`THREE.KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){console.error(`THREE.KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&Df(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){console.error(`THREE.KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===$e,i=e.length-1,a=1;for(let o=1;o0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}};Rf.prototype.TimeBufferType=Float32Array,Rf.prototype.ValueBufferType=Float32Array,Rf.prototype.DefaultInterpolation=Qe;var zf=class extends Rf{constructor(e,t,n){super(e,t,n)}};zf.prototype.ValueTypeName=`bool`,zf.prototype.ValueBufferType=Array,zf.prototype.DefaultInterpolation=Ze,zf.prototype.InterpolantFactoryMethodLinear=void 0,zf.prototype.InterpolantFactoryMethodSmooth=void 0;var Bf=class extends Rf{};Bf.prototype.ValueTypeName=`color`;var Vf=class extends Rf{};Vf.prototype.ValueTypeName=`number`;var Hf=class extends Pf{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)Hn.slerpFlat(i,0,a,c-o,a,c,s);return i}},Uf=class extends Rf{InterpolantFactoryMethodLinear(e){return new Hf(this.times,this.values,this.getValueSize(),e)}};Uf.prototype.ValueTypeName=`quaternion`,Uf.prototype.InterpolantFactoryMethodSmooth=void 0;var Wf=class extends Rf{constructor(e,t,n){super(e,t,n)}};Wf.prototype.ValueTypeName=`string`,Wf.prototype.ValueBufferType=Array,Wf.prototype.DefaultInterpolation=Ze,Wf.prototype.InterpolantFactoryMethodLinear=void 0,Wf.prototype.InterpolantFactoryMethodSmooth=void 0;var Gf=class extends Rf{};Gf.prototype.ValueTypeName=`vector`;var Kf=class{constructor(e=``,t=-1,n=[],r=rt){this.name=e,this.tracks=n,this.duration=t,this.blendMode=r,this.uuid=Bt(),this.duration<0&&this.resetDuration()}static parse(e){let t=[],n=e.tracks,r=1/(e.fps||1);for(let e=0,i=n.length;e!==i;++e)t.push(Jf(n[e]).scale(r));let i=new this(e.name,e.duration,t,e.blendMode);return i.uuid=e.uuid,i}static toJSON(e){let t=[],n=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let e=0,r=n.length;e!==r;++e)t.push(Rf.toJSON(n[e]));return r}static CreateFromMorphTargetSequence(e,t,n,r){let i=t.length,a=[];for(let e=0;e1){let e=a[1],t=r[e];t||(r[e]=t=[]),t.push(n)}}let a=[];for(let e in r)a.push(this.CreateFromMorphTargetSequence(e,r[e],t,n));return a}static parseAnimation(e,t){if(!e)return console.error(`THREE.AnimationClip: No animation in JSONLoader data.`),null;let n=function(e,t,n,r,i){if(n.length!==0){let a=[],o=[];Af(n,a,o,r),a.length!==0&&i.push(new e(t,a,o))}},r=[],i=e.name||`default`,a=e.fps||30,o=e.blendMode,s=e.length||-1,c=e.hierarchy||[];for(let e=0;e{t&&t(i),this.manager.itemEnd(e)},0),i;if($f[e]!==void 0){$f[e].push({onLoad:t,onProgress:n,onError:r});return}$f[e]=[],$f[e].push({onLoad:t,onProgress:n,onError:r});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?`include`:`same-origin`}),o=this.mimeType,s=this.responseType;fetch(a).then(t=>{if(t.status===200||t.status===0){if(t.status===0&&console.warn(`THREE.FileLoader: HTTP Status 0 received.`),typeof ReadableStream>`u`||t.body===void 0||t.body.getReader===void 0)return t;let n=$f[e],r=t.body.getReader(),i=t.headers.get(`X-File-Size`)||t.headers.get(`Content-Length`),a=i?parseInt(i):0,o=a!==0,s=0,c=new ReadableStream({start(e){t();function t(){r.read().then(({done:r,value:i})=>{if(r)e.close();else{s+=i.byteLength;let r=new ProgressEvent(`progress`,{lengthComputable:o,loaded:s,total:a});for(let e=0,t=n.length;e{e.error(t)})}}});return new Response(c)}else throw new ep(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(s){case`arraybuffer`:return e.arrayBuffer();case`blob`:return e.blob();case`document`:return e.text().then(e=>new DOMParser().parseFromString(e,o));case`json`:return e.json();default:if(o===void 0)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(o),n=t&&t[1]?t[1].toLowerCase():void 0,r=new TextDecoder(n);return e.arrayBuffer().then(e=>r.decode(e))}}}).then(t=>{Yf.add(e,t);let n=$f[e];delete $f[e];for(let e=0,r=n.length;e{let n=$f[e];if(n===void 0)throw this.manager.itemError(e),t;delete $f[e];for(let e=0,r=n.length;e{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}},np=class extends Qf{constructor(e){super(e)}load(e,t,n,r){let i=this,a=new tp(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(n){try{t(i.parse(JSON.parse(n)))}catch(t){r?r(t):console.error(t),i.manager.itemError(e)}},n,r)}parse(e){let t=[];for(let n=0;n0:r.vertexColors=e.vertexColors),e.uniforms!==void 0)for(let t in e.uniforms){let i=e.uniforms[t];switch(r.uniforms[t]={},i.type){case`t`:r.uniforms[t].value=n(i.value);break;case`c`:r.uniforms[t].value=new P().setHex(i.value);break;case`v2`:r.uniforms[t].value=new A().fromArray(i.value);break;case`v3`:r.uniforms[t].value=new M().fromArray(i.value);break;case`v4`:r.uniforms[t].value=new Fn().fromArray(i.value);break;case`m3`:r.uniforms[t].value=new j().fromArray(i.value);break;case`m4`:r.uniforms[t].value=new N().fromArray(i.value);break;default:r.uniforms[t].value=i.value}}if(e.defines!==void 0&&(r.defines=e.defines),e.vertexShader!==void 0&&(r.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(r.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(r.glslVersion=e.glslVersion),e.extensions!==void 0)for(let t in e.extensions)r.extensions[t]=e.extensions[t];if(e.lights!==void 0&&(r.lights=e.lights),e.clipping!==void 0&&(r.clipping=e.clipping),e.size!==void 0&&(r.size=e.size),e.sizeAttenuation!==void 0&&(r.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(r.map=n(e.map)),e.matcap!==void 0&&(r.matcap=n(e.matcap)),e.alphaMap!==void 0&&(r.alphaMap=n(e.alphaMap)),e.bumpMap!==void 0&&(r.bumpMap=n(e.bumpMap)),e.bumpScale!==void 0&&(r.bumpScale=e.bumpScale),e.normalMap!==void 0&&(r.normalMap=n(e.normalMap)),e.normalMapType!==void 0&&(r.normalMapType=e.normalMapType),e.normalScale!==void 0){let t=e.normalScale;Array.isArray(t)===!1&&(t=[t,t]),r.normalScale=new A().fromArray(t)}return e.displacementMap!==void 0&&(r.displacementMap=n(e.displacementMap)),e.displacementScale!==void 0&&(r.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(r.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(r.roughnessMap=n(e.roughnessMap)),e.metalnessMap!==void 0&&(r.metalnessMap=n(e.metalnessMap)),e.emissiveMap!==void 0&&(r.emissiveMap=n(e.emissiveMap)),e.emissiveIntensity!==void 0&&(r.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(r.specularMap=n(e.specularMap)),e.specularIntensityMap!==void 0&&(r.specularIntensityMap=n(e.specularIntensityMap)),e.specularColorMap!==void 0&&(r.specularColorMap=n(e.specularColorMap)),e.envMap!==void 0&&(r.envMap=n(e.envMap)),e.envMapRotation!==void 0&&r.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(r.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(r.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(r.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(r.lightMap=n(e.lightMap)),e.lightMapIntensity!==void 0&&(r.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(r.aoMap=n(e.aoMap)),e.aoMapIntensity!==void 0&&(r.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(r.gradientMap=n(e.gradientMap)),e.clearcoatMap!==void 0&&(r.clearcoatMap=n(e.clearcoatMap)),e.clearcoatRoughnessMap!==void 0&&(r.clearcoatRoughnessMap=n(e.clearcoatRoughnessMap)),e.clearcoatNormalMap!==void 0&&(r.clearcoatNormalMap=n(e.clearcoatNormalMap)),e.clearcoatNormalScale!==void 0&&(r.clearcoatNormalScale=new A().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(r.iridescenceMap=n(e.iridescenceMap)),e.iridescenceThicknessMap!==void 0&&(r.iridescenceThicknessMap=n(e.iridescenceThicknessMap)),e.transmissionMap!==void 0&&(r.transmissionMap=n(e.transmissionMap)),e.thicknessMap!==void 0&&(r.thicknessMap=n(e.thicknessMap)),e.anisotropyMap!==void 0&&(r.anisotropyMap=n(e.anisotropyMap)),e.sheenColorMap!==void 0&&(r.sheenColorMap=n(e.sheenColorMap)),e.sheenRoughnessMap!==void 0&&(r.sheenRoughnessMap=n(e.sheenRoughnessMap)),r}setTextures(e){return this.textures=e,this}createMaterialFromType(t){return e.createMaterialFromType(t)}static createMaterialFromType(e){return new{ShadowMaterial:gf,SpriteMaterial:Yc,RawShaderMaterial:_f,ShaderMaterial:aa,PointsMaterial:_u,MeshPhysicalMaterial:yf,MeshStandardMaterial:vf,MeshPhongMaterial:bf,MeshToonMaterial:xf,MeshNormalMaterial:Sf,MeshLambertMaterial:Cf,MeshDepthMaterial:hc,MeshDistanceMaterial:gc,MeshBasicMaterial:fi,MeshMatcapMaterial:wf,LineDashedMaterial:Tf,LineBasicMaterial:ru,Material:di}[e]}},Op=class{static decodeText(e){if(console.warn(`THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead.`),typeof TextDecoder<`u`)return new TextDecoder().decode(e);let t=``;for(let n=0,r=e.length;n0){i=new ip(new Xf(t)),i.setCrossOrigin(this.crossOrigin);for(let t=0,n=e.length;t0){r=new ip(this.manager),r.setCrossOrigin(this.crossOrigin);for(let t=0,r=e.length;t{let t=new Gn;t.min.fromArray(e.boxMin),t.max.fromArray(e.boxMax);let n=new lr;return n.radius=e.sphereRadius,n.center.fromArray(e.sphereCenter),{boxInitialized:e.boxInitialized,box:t,sphereInitialized:e.sphereInitialized,sphere:n}}),a._maxInstanceCount=e.maxInstanceCount,a._maxVertexCount=e.maxVertexCount,a._maxIndexCount=e.maxIndexCount,a._geometryInitialized=e.geometryInitialized,a._geometryCount=e.geometryCount,a._matricesTexture=c(e.matricesTexture.uuid),e.colorsTexture!==void 0&&(a._colorsTexture=c(e.colorsTexture.uuid));break;case`LOD`:a=new pl;break;case`Line`:a=new du(o(e.geometry),s(e.material));break;case`LineLoop`:a=new gu(o(e.geometry),s(e.material));break;case`LineSegments`:a=new hu(o(e.geometry),s(e.material));break;case`PointCloud`:case`Points`:a=new Su(o(e.geometry),s(e.material));break;case`Sprite`:a=new ll(s(e.material));break;case`Group`:a=new jc;break;case`Bone`:a=new wl;break;default:a=new Wr}if(a.uuid=e.uuid,e.name!==void 0&&(a.name=e.name),e.matrix===void 0?(e.position!==void 0&&a.position.fromArray(e.position),e.rotation!==void 0&&a.rotation.fromArray(e.rotation),e.quaternion!==void 0&&a.quaternion.fromArray(e.quaternion),e.scale!==void 0&&a.scale.fromArray(e.scale)):(a.matrix.fromArray(e.matrix),e.matrixAutoUpdate!==void 0&&(a.matrixAutoUpdate=e.matrixAutoUpdate),a.matrixAutoUpdate&&a.matrix.decompose(a.position,a.quaternion,a.scale)),e.up!==void 0&&a.up.fromArray(e.up),e.castShadow!==void 0&&(a.castShadow=e.castShadow),e.receiveShadow!==void 0&&(a.receiveShadow=e.receiveShadow),e.shadow&&(e.shadow.intensity!==void 0&&(a.shadow.intensity=e.shadow.intensity),e.shadow.bias!==void 0&&(a.shadow.bias=e.shadow.bias),e.shadow.normalBias!==void 0&&(a.shadow.normalBias=e.shadow.normalBias),e.shadow.radius!==void 0&&(a.shadow.radius=e.shadow.radius),e.shadow.mapSize!==void 0&&a.shadow.mapSize.fromArray(e.shadow.mapSize),e.shadow.camera!==void 0&&(a.shadow.camera=this.parseObject(e.shadow.camera))),e.visible!==void 0&&(a.visible=e.visible),e.frustumCulled!==void 0&&(a.frustumCulled=e.frustumCulled),e.renderOrder!==void 0&&(a.renderOrder=e.renderOrder),e.userData!==void 0&&(a.userData=e.userData),e.layers!==void 0&&(a.layers.mask=e.layers),e.children!==void 0){let o=e.children;for(let e=0;e`u`&&console.warn(`THREE.ImageBitmapLoader: createImageBitmap() not supported.`),typeof fetch>`u`&&console.warn(`THREE.ImageBitmapLoader: fetch() not supported.`),this.options={premultiplyAlpha:`none`}}setOptions(e){return this.options=e,this}load(e,t,n,r){e===void 0&&(e=``),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let i=this,a=Yf.get(e);if(a!==void 0){if(i.manager.itemStart(e),a.then){a.then(n=>{t&&t(n),i.manager.itemEnd(e)}).catch(e=>{r&&r(e)});return}return setTimeout(function(){t&&t(a),i.manager.itemEnd(e)},0),a}let o={};o.credentials=this.crossOrigin===`anonymous`?`same-origin`:`include`,o.headers=this.requestHeader;let s=fetch(e,o).then(function(e){return e.blob()}).then(function(e){return createImageBitmap(e,Object.assign(i.options,{colorSpaceConversion:`none`}))}).then(function(n){return Yf.add(e,n),t&&t(n),i.manager.itemEnd(e),n}).catch(function(t){r&&r(t),Yf.remove(e),i.manager.itemError(e),i.manager.itemEnd(e)});Yf.add(e,s),i.manager.itemStart(e)}},Ip,Lp=class{static getContext(){return Ip===void 0&&(Ip=new(window.AudioContext||window.webkitAudioContext)),Ip}static setContext(e){Ip=e}},Rp=class extends Qf{constructor(e){super(e)}load(e,t,n,r){let i=this,a=new tp(this.manager);a.setResponseType(`arraybuffer`),a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(e){try{let n=e.slice(0);Lp.getContext().decodeAudioData(n,function(e){t(e)}).catch(o)}catch(e){o(e)}},n,r);function o(t){r?r(t):console.error(t),i.manager.itemError(e)}}},zp=new N,Bp=new N,Vp=new N,Hp=class{constructor(){this.type=`StereoCamera`,this.aspect=1,this.eyeSep=.064,this.cameraL=new pa,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new pa,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(e){let t=this._cache;if(t.focus!==e.focus||t.fov!==e.fov||t.aspect!==e.aspect*this.aspect||t.near!==e.near||t.far!==e.far||t.zoom!==e.zoom||t.eyeSep!==this.eyeSep){t.focus=e.focus,t.fov=e.fov,t.aspect=e.aspect*this.aspect,t.near=e.near,t.far=e.far,t.zoom=e.zoom,t.eyeSep=this.eyeSep,Vp.copy(e.projectionMatrix);let n=t.eyeSep/2,r=n*t.near/t.focus,i=t.near*Math.tan(Rt*t.fov*.5)/t.zoom,a,o;Bp.elements[12]=-n,zp.elements[12]=n,a=-i*t.aspect+r,o=i*t.aspect+r,Vp.elements[0]=2*t.near/(o-a),Vp.elements[8]=(o+a)/(o-a),this.cameraL.projectionMatrix.copy(Vp),a=-i*t.aspect-r,o=i*t.aspect-r,Vp.elements[0]=2*t.near/(o-a),Vp.elements[8]=(o+a)/(o-a),this.cameraR.projectionMatrix.copy(Vp)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(Bp),this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(zp)}},Up=class{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=Wp(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){let t=Wp();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}};function Wp(){return performance.now()}var Gp=new M,Kp=new Hn,qp=new M,Jp=new M,Yp=class extends Wr{constructor(){super(),this.type=`AudioListener`,this.context=Lp.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new Up}getInput(){return this.gain}removeFilter(){return this.filter!==null&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(e){return this.filter===null?this.gain.disconnect(this.context.destination):(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)),this.filter=e,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(e){return this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01),this}updateMatrixWorld(e){super.updateMatrixWorld(e);let t=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(Gp,Kp,qp),!(!Number.isFinite(Gp.x)||!Number.isFinite(Gp.y)||!Number.isFinite(Gp.z)))if(Jp.set(0,0,-1).applyQuaternion(Kp),t.positionX){let e=this.context.currentTime+this.timeDelta;t.positionX.linearRampToValueAtTime(Gp.x,e),t.positionY.linearRampToValueAtTime(Gp.y,e),t.positionZ.linearRampToValueAtTime(Gp.z,e),t.forwardX.linearRampToValueAtTime(Jp.x,e),t.forwardY.linearRampToValueAtTime(Jp.y,e),t.forwardZ.linearRampToValueAtTime(Jp.z,e),t.upX.linearRampToValueAtTime(n.x,e),t.upY.linearRampToValueAtTime(n.y,e),t.upZ.linearRampToValueAtTime(n.z,e)}else t.setPosition(Gp.x,Gp.y,Gp.z),t.setOrientation(Jp.x,Jp.y,Jp.z,n.x,n.y,n.z)}},Xp=class extends Wr{constructor(e){super(),this.type=`Audio`,this.listener=e,this.context=e.context,this.gain=this.context.createGain(),this.gain.connect(e.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType=`empty`,this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(e){return this.hasPlaybackControl=!1,this.sourceType=`audioNode`,this.source=e,this.connect(),this}setMediaElementSource(e){return this.hasPlaybackControl=!1,this.sourceType=`mediaNode`,this.source=this.context.createMediaElementSource(e),this.connect(),this}setMediaStreamSource(e){return this.hasPlaybackControl=!1,this.sourceType=`mediaStreamNode`,this.source=this.context.createMediaStreamSource(e),this.connect(),this}setBuffer(e){return this.buffer=e,this.sourceType=`buffer`,this.autoplay&&this.play(),this}play(e=0){if(this.isPlaying===!0){console.warn(`THREE.Audio: Audio is already playing.`);return}if(this.hasPlaybackControl===!1){console.warn(`THREE.Audio: this Audio has no playback control.`);return}this._startedAt=this.context.currentTime+e;let t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.loopStart=this.loopStart,t.loopEnd=this.loopEnd,t.onended=this.onEnded.bind(this),t.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=t,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(this.hasPlaybackControl===!1){console.warn(`THREE.Audio: this Audio has no playback control.`);return}return this.isPlaying===!0&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,this.loop===!0&&(this._progress%=this.duration||(this.buffer?this.buffer.duration:Number.MAX_VALUE)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this}stop(e=0){if(this.hasPlaybackControl===!1){console.warn(`THREE.Audio: this Audio has no playback control.`);return}return this._progress=0,this.source!==null&&(this.source.stop(this.context.currentTime+e),this.source.onended=null),this.isPlaying=!1,this}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(let e=1,t=this.filters.length;e0&&this._mixBufferRegionAdditive(n,r,this._addIndex*t,1,t);for(let e=t,i=t+t;e!==i;++e)if(n[e]!==n[e+t]){o.setValue(n,r);break}}saveOriginalState(){let e=this.binding,t=this.buffer,n=this.valueSize,r=n*this._origIndex;e.getValue(t,r);for(let e=n,i=r;e!==i;++e)t[e]=t[r+e%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let e=this.valueSize*3;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){let e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let n=e;n=.5)for(let r=0;r!==i;++r)e[t+r]=e[n+r]}_slerp(e,t,n,r){Hn.slerpFlat(e,t,e,t,e,n,r)}_slerpAdditive(e,t,n,r,i){let a=this._workIndex*i;Hn.multiplyQuaternionsFlat(e,a,e,t,e,n),Hn.slerpFlat(e,t,e,t,e,a,r)}_lerp(e,t,n,r,i){let a=1-r;for(let o=0;o!==i;++o){let i=t+o;e[i]=e[i]*a+e[n+o]*r}}_lerpAdditive(e,t,n,r,i){for(let a=0;a!==i;++a){let i=t+a;e[i]=e[i]+e[n+a]*r}}},im=`\\[\\]\\.:\\/`,am=RegExp(`[`+im+`]`,`g`),om=`[^`+im+`]`,sm=`[^`+im.replace(`\\.`,``)+`]`,cm=`((?:WC+[\\/:])*)`.replace(`WC`,om),lm=`(WCOD+)?`.replace(`WCOD`,sm),um=`(?:\\.(WC+)(?:\\[(.+)\\])?)?`.replace(`WC`,om),dm=`\\.(WC+)(?:\\[(.+)\\])?`.replace(`WC`,om),fm=RegExp(`^`+cm+lm+um+dm+`$`),pm=[`material`,`materials`,`bones`,`map`],mm=class{constructor(e,t,n){let r=n||hm.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},hm=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\s/g,`_`).replace(am,``)}static parseTrackName(e){let t=fm.exec(e);if(t===null)throw Error(`PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);pm.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e,r){for(let i=0;i=i){let a=i++,l=e[a];t[l.uuid]=c,e[c]=l,t[s]=a,e[a]=o;for(let e=0,t=r;e!==t;++e){let t=n[e],r=t[a],i=t[c];t[c]=r,t[a]=i}}}this.nCachedObjects_=i}uncache(){let e=this._objects,t=this._indicesByUUID,n=this._bindings,r=n.length,i=this.nCachedObjects_,a=e.length;for(let o=0,s=arguments.length;o!==s;++o){let s=arguments[o].uuid,c=t[s];if(c!==void 0)if(delete t[s],c0&&(t[o.uuid]=c),e[c]=o,e.pop();for(let e=0,t=r;e!==t;++e){let t=n[e];t[c]=t[i],t.pop()}}}this.nCachedObjects_=i}subscribe_(e,t){let n=this._bindingsIndicesByPath,r=n[e],i=this._bindings;if(r!==void 0)return i[r];let a=this._paths,o=this._parsedPaths,s=this._objects,c=s.length,l=this.nCachedObjects_,u=Array(c);r=i.length,n[e]=r,a.push(e),o.push(t),i.push(u);for(let n=l,r=s.length;n!==r;++n){let r=s[n];u[n]=new hm(r,e,t)}return u}unsubscribe_(e){let t=this._bindingsIndicesByPath,n=t[e];if(n!==void 0){let r=this._paths,i=this._parsedPaths,a=this._bindings,o=a.length-1,s=a[o],c=e[o];t[c]=n,a[n]=s,a.pop(),i[n]=i[o],i.pop(),r[n]=r[o],r.pop()}}},_m=class{constructor(e,t,n=null,r=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=n,this.blendMode=r;let i=t.tracks,a=i.length,o=Array(a),s={endingStart:et,endingEnd:et};for(let e=0;e!==a;++e){let t=i[e].createInterpolant(null);o[e]=t,t.settings=s}this._interpolantSettings=s,this._interpolants=o,this._propertyBindings=Array(a),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=Ye,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&this.timeScale!==0&&this._startTime===null&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,n){if(e.fadeOut(t),this.fadeIn(t),n){let n=this._clip.duration,r=e._clip.duration,i=r/n,a=n/r;e.warp(1,i,t),this.warp(a,1,t)}return this}crossFadeTo(e,t,n){return e.crossFadeFrom(this,t,n)}stopFading(){let e=this._weightInterpolant;return e!==null&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,n){let r=this._mixer,i=r.time,a=this.timeScale,o=this._timeScaleInterpolant;o===null&&(o=r._lendControlInterpolant(),this._timeScaleInterpolant=o);let s=o.parameterPositions,c=o.sampleValues;return s[0]=i,s[1]=i+n,c[0]=e/a,c[1]=t/a,this}stopWarping(){let e=this._timeScaleInterpolant;return e!==null&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,n,r){if(!this.enabled){this._updateWeight(e);return}let i=this._startTime;if(i!==null){let r=(e-i)*n;r<0||n===0?t=0:(this._startTime=null,t=n*r)}t*=this._updateTimeScale(e);let a=this._updateTime(t),o=this._updateWeight(e);if(o>0){let e=this._interpolants,t=this._propertyBindings;switch(this.blendMode){case it:for(let n=0,r=e.length;n!==r;++n)e[n].evaluate(a),t[n].accumulateAdditive(o);break;case rt:default:for(let n=0,i=e.length;n!==i;++n)e[n].evaluate(a),t[n].accumulate(r,o)}}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;let n=this._weightInterpolant;if(n!==null){let r=n.evaluate(e)[0];t*=r,e>n.parameterPositions[1]&&(this.stopFading(),r===0&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;let n=this._timeScaleInterpolant;if(n!==null){let r=n.evaluate(e)[0];t*=r,e>n.parameterPositions[1]&&(this.stopWarping(),t===0?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(e){let t=this._clip.duration,n=this.loop,r=this.time+e,i=this._loopCount,a=n===Xe;if(e===0)return i===-1?r:a&&(i&1)==1?t-r:r;if(n===2200){i===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));handle_stop:{if(r>=t)r=t;else if(r<0)r=0;else{this.time=r;break handle_stop}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=r,this._mixer.dispatchEvent({type:`finished`,action:this,direction:e<0?-1:1})}}else{if(i===-1&&(e>=0?(i=0,this._setEndings(!0,this.repetitions===0,a)):this._setEndings(this.repetitions===0,!0,a)),r>=t||r<0){let n=Math.floor(r/t);r-=t*n,i+=Math.abs(n);let o=this.repetitions-i;if(o<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,r=e>0?t:0,this.time=r,this._mixer.dispatchEvent({type:`finished`,action:this,direction:e>0?1:-1});else{if(o===1){let t=e<0;this._setEndings(t,!t,a)}else this._setEndings(!1,!1,a);this._loopCount=i,this.time=r,this._mixer.dispatchEvent({type:`loop`,action:this,loopDelta:n})}}else this.time=r;if(a&&(i&1)==1)return t-r}return r}_setEndings(e,t,n){let r=this._interpolantSettings;n?(r.endingStart=tt,r.endingEnd=tt):(e?r.endingStart=this.zeroSlopeAtStart?tt:et:r.endingStart=nt,t?r.endingEnd=this.zeroSlopeAtEnd?tt:et:r.endingEnd=nt)}_scheduleFading(e,t,n){let r=this._mixer,i=r.time,a=this._weightInterpolant;a===null&&(a=r._lendControlInterpolant(),this._weightInterpolant=a);let o=a.parameterPositions,s=a.sampleValues;return o[0]=i,s[0]=t,o[1]=i+e,s[1]=n,this}},vm=new Float32Array(1),ym=class extends Ft{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){let n=e._localRoot||this._root,r=e._clip.tracks,i=r.length,a=e._propertyBindings,o=e._interpolants,s=n.uuid,c=this._bindingsByRootAndName,l=c[s];l===void 0&&(l={},c[s]=l);for(let e=0;e!==i;++e){let i=r[e],c=i.name,u=l[c];if(u!==void 0)++u.referenceCount,a[e]=u;else{if(u=a[e],u!==void 0){u._cacheIndex===null&&(++u.referenceCount,this._addInactiveBinding(u,s,c));continue}let r=t&&t._propertyBindings[e].binding.parsedPath;u=new rm(hm.create(n,c,r),i.ValueTypeName,i.getValueSize()),++u.referenceCount,this._addInactiveBinding(u,s,c),a[e]=u}o[e].resultBuffer=u.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(e._cacheIndex===null){let t=(e._localRoot||this._root).uuid,n=e._clip.uuid,r=this._actionsByClip[n];this._bindAction(e,r&&r.knownActions[0]),this._addInactiveAction(e,n,t)}let t=e._propertyBindings;for(let e=0,n=t.length;e!==n;++e){let n=t[e];n.useCount++===0&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){let t=e._propertyBindings;for(let e=0,n=t.length;e!==n;++e){let n=t[e];--n.useCount===0&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;let e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){let t=e._cacheIndex;return t!==null&&t=0;--n)e[n].stop();return this}update(e){e*=this.timeScale;let t=this._actions,n=this._nActiveActions,r=this.time+=e,i=Math.sign(e),a=this._accuIndex^=1;for(let o=0;o!==n;++o)t[o]._update(r,e,i,a);let o=this._bindings,s=this._nActiveBindings;for(let e=0;e!==s;++e)o[e].apply(a);return this}setTime(e){this.time=0;for(let e=0;e=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Mm).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},Pm=new M,Fm=new M,Im=class{constructor(e=new M,t=new M){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){Pm.subVectors(e,this.start),Fm.subVectors(this.end,this.start);let n=Fm.dot(Fm),r=Fm.dot(Pm)/n;return t&&(r=Vt(r,0,1)),r}closestPointToPoint(e,t,n){let r=this.closestPointToPointParameter(e,t);return this.delta(n).multiplyScalar(r).add(this.start)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}},Lm=new M,Rm=class extends Wr{constructor(e,t){super(),this.light=e,this.matrixAutoUpdate=!1,this.color=t,this.type=`SpotLightHelper`;let n=new Ii,r=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let e=0,t=1;e<32;e++,t++){let n=e/32*Math.PI*2,i=t/32*Math.PI*2;r.push(Math.cos(n),Math.sin(n),1,Math.cos(i),Math.sin(i),1)}n.setAttribute(`position`,new F(r,3)),this.cone=new hu(n,new ru({fog:!1,toneMapped:!1})),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1),this.parent?(this.parent.updateWorldMatrix(!0),this.matrix.copy(this.parent.matrixWorld).invert().multiply(this.light.matrixWorld)):this.matrix.copy(this.light.matrixWorld),this.matrixWorld.copy(this.light.matrixWorld);let e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e),Lm.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(Lm),this.color===void 0?this.cone.material.color.copy(this.light.color):this.cone.material.color.set(this.color)}},zm=new M,Bm=new N,Vm=new N,Hm=class extends hu{constructor(e){let t=Um(e),n=new Ii,r=[],i=[],a=new P(0,0,1),o=new P(0,1,0);for(let e=0;e1)for(let n=0;n.99999)this.quaternion.set(0,0,0,1);else if(e.y<-.99999)this.quaternion.set(1,0,0,0);else{lh.set(e.z,0,-e.x).normalize();let t=Math.acos(e.y);this.quaternion.setFromAxisAngle(lh,t)}}setLength(e,t=e*.2,n=t*.2){this.line.scale.set(1,Math.max(1e-4,e-t),1),this.line.updateMatrix(),this.cone.scale.set(n,t,n),this.cone.position.y=e,this.cone.updateMatrix()}setColor(e){this.line.material.color.set(e),this.cone.material.color.set(e)}copy(e){return super.copy(e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}},ph=class extends hu{constructor(e=1){let t=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],n=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],r=new Ii;r.setAttribute(`position`,new F(t,3)),r.setAttribute(`color`,new F(n,3));let i=new ru({vertexColors:!0,toneMapped:!1});super(r,i),this.type=`AxesHelper`}setColors(e,t,n){let r=new P,i=this.geometry.attributes.color.array;return r.set(e),r.toArray(i,0),r.toArray(i,3),r.set(t),r.toArray(i,6),r.toArray(i,9),r.set(n),r.toArray(i,12),r.toArray(i,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}},mh=class{constructor(){this.type=`ShapePath`,this.color=new P,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new id,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}quadraticCurveTo(e,t,n,r){return this.currentPath.quadraticCurveTo(e,t,n,r),this}bezierCurveTo(e,t,n,r,i,a){return this.currentPath.bezierCurveTo(e,t,n,r,i,a),this}splineThru(e){return this.currentPath.splineThru(e),this}toShapes(e){function t(e){let t=[];for(let n=0,r=e.length;n2**-52){if(c<0&&(n=t[a],s=-s,o=t[i],c=-c),e.yo.y)continue;if(e.y===n.y){if(e.x===n.x)return!0}else{let t=c*(e.x-n.x)-s*(e.y-n.y);if(t===0)return!0;if(t<0)continue;r=!r}}else{if(e.y!==n.y)continue;if(o.x<=e.x&&e.x<=n.x||n.x<=e.x&&e.x<=o.x)return!0}}return r}let r=Xd.isClockWise,i=this.subPaths;if(i.length===0)return[];let a,o,s,c=[];if(i.length===1)return o=i[0],s=new _d,s.curves=o.curves,c.push(s),c;let l=!r(i[0].getPoints());l=e?!l:l;let u=[],d=[],f=[],p=0,m;d[p]=void 0,f[p]=[];for(let t=0,n=i.length;t1){let e=!1,t=0;for(let e=0,t=d.length;e0&&e===!1&&(f=u)}let h;for(let e=0,t=d.length;e>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&r)+(n>>>0)}var bh=e=>yh(e),xh=e=>yh(e),Sh=(...e)=>yh(e);function Ch(e,t=!1){let n=[];e.isNode===!0&&(n.push(e.id),e=e.getSelf());for(let{property:r,childNode:i}of wh(e))n.push(n,yh(r.slice(0,-4)),i.getCacheKey(t));return yh(n)}function*wh(e,t=!1){for(let n in e){if(n.startsWith(`_`)===!0)continue;let r=e[n];if(Array.isArray(r)===!0)for(let e=0;ee.charCodeAt(0)).buffer}var kh=Object.freeze({__proto__:null,arrayBufferToBase64:Dh,base64ToArrayBuffer:Oh,getCacheKey:Ch,getNodeChildren:wh,getValueFromType:Eh,getValueType:Th,hash:Sh,hashArray:xh,hashString:bh}),Ah={VERTEX:`vertex`,FRAGMENT:`fragment`},L={NONE:`none`,FRAME:`frame`,RENDER:`render`,OBJECT:`object`},jh={BOOLEAN:`bool`,INTEGER:`int`,FLOAT:`float`,VECTOR2:`vec2`,VECTOR3:`vec3`,VECTOR4:`vec4`,MATRIX2:`mat2`,MATRIX3:`mat3`,MATRIX4:`mat4`},Mh=[`fragment`,`vertex`],Nh=[`setup`,`analyze`,`generate`],Ph=[...Mh,`compute`],Fh=[`x`,`y`,`z`,`w`],Ih=0,R=class extends Ft{static get type(){return`Node`}constructor(e=null){super(),this.nodeType=e,this.updateType=L.NONE,this.updateBeforeType=L.NONE,this.updateAfterType=L.NONE,this.uuid=ln.generateUUID(),this.version=0,this._cacheKey=null,this._cacheKeyVersion=0,this.global=!1,this.isNode=!0,Object.defineProperty(this,`id`,{value:Ih++})}set needsUpdate(e){e===!0&&this.version++}get type(){return this.constructor.type}onUpdate(e,t){return this.updateType=t,this.update=e.bind(this.getSelf()),this}onFrameUpdate(e){return this.onUpdate(e,L.FRAME)}onRenderUpdate(e){return this.onUpdate(e,L.RENDER)}onObjectUpdate(e){return this.onUpdate(e,L.OBJECT)}onReference(e){return this.updateReference=e.bind(this.getSelf()),this}getSelf(){return this.self||this}updateReference(){return this}isGlobal(){return this.global}*getChildren(){for(let{childNode:e}of wh(this))yield e}dispose(){this.dispatchEvent({type:`dispose`})}traverse(e){e(this);for(let t of this.getChildren())t.traverse(e)}getCacheKey(e=!1){return e||=this.version!==this._cacheKeyVersion,(e===!0||this._cacheKey===null)&&(this._cacheKey=Ch(this,e),this._cacheKeyVersion=this.version),this._cacheKey}getScope(){return this}getHash(){return this.uuid}getUpdateType(){return this.updateType}getUpdateBeforeType(){return this.updateBeforeType}getUpdateAfterType(){return this.updateAfterType}getElementType(e){let t=this.getNodeType(e);return e.getElementType(t)}getNodeType(e){let t=e.getNodeProperties(this);return t.outputNode?t.outputNode.getNodeType(e):this.nodeType}getShared(e){let t=this.getHash(e);return e.getNodeFromHash(t)||this}setup(e){let t=e.getNodeProperties(this),n=0;for(let e of this.getChildren())t[`node`+ n++]=e;return null}analyze(e){if(e.increaseUsage(this)===1){let t=e.getNodeProperties(this);for(let n of Object.values(t))n&&n.isNode===!0&&n.build(e)}}generate(e,t){let{outputNode:n}=e.getNodeProperties(this);if(n&&n.isNode===!0)return n.build(e,t)}updateBefore(){console.warn(`Abstract function.`)}updateAfter(){console.warn(`Abstract function.`)}update(){console.warn(`Abstract function.`)}build(e,t=null){let n=this.getShared(e);if(this!==n)return n.build(e,t);e.addNode(this),e.addChain(this);let r=null,i=e.getBuildStage();if(i===`setup`){this.updateReference(e);let t=e.getNodeProperties(this);if(t.initialized!==!0){e.stack.nodes.length,t.initialized=!0,t.outputNode=this.setup(e),t.outputNode!==null&&e.stack.nodes.length;for(let n of Object.values(t))n&&n.isNode===!0&&n.build(e)}}else if(i===`analyze`)this.analyze(e);else if(i===`generate`)if(this.generate.length===1){let n=this.getNodeType(e),i=e.getDataFromNode(this);r=i.snippet,r===void 0?(r=this.generate(e)||``,i.snippet=r):i.flowCodes!==void 0&&e.context.nodeBlock!==void 0&&e.addFlowCodeHierarchy(this,e.context.nodeBlock),r=e.format(r,n,t)}else r=this.generate(e,t)||``;return e.removeChain(this),r}getSerializeChildren(){return wh(this)}serialize(e){let t=this.getSerializeChildren(),n={};for(let{property:r,index:i,childNode:a}of t)i===void 0?n[r]=a.toJSON(e.meta).uuid:(n[r]===void 0&&(n[r]=Number.isInteger(i)?[]:{}),n[r][i]=a.toJSON(e.meta).uuid);Object.keys(n).length>0&&(e.inputNodes=n)}deserialize(e){if(e.inputNodes!==void 0){let t=e.meta.nodes;for(let n in e.inputNodes)if(Array.isArray(e.inputNodes[n])){let r=[];for(let i of e.inputNodes[n])r.push(t[i]);this[n]=r}else if(typeof e.inputNodes[n]==`object`){let r={};for(let i in e.inputNodes[n])r[i]=t[e.inputNodes[n][i]];this[n]=r}else this[n]=t[e.inputNodes[n]]}}toJSON(e){let{uuid:t,type:n}=this,r=e===void 0||typeof e==`string`;r&&(e={textures:{},images:{},nodes:{}});let i=e.nodes[t];i===void 0&&(i={uuid:t,type:n,meta:e,metadata:{version:4.6,type:`Node`,generator:`Node.toJSON`}},r!==!0&&(e.nodes[i.uuid]=i),this.serialize(i),delete i.meta);function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(r){let t=a(e.textures),n=a(e.images),r=a(e.nodes);t.length>0&&(i.textures=t),n.length>0&&(i.images=n),r.length>0&&(i.nodes=r)}return i}},Lh=class extends R{static get type(){return`ArrayElementNode`}constructor(e,t){super(),this.node=e,this.indexNode=t,this.isArrayElementNode=!0}getNodeType(e){return this.node.getElementType(e)}generate(e){return`${this.node.build(e)}[ ${this.indexNode.build(e,`uint`)} ]`}},Rh=class extends R{static get type(){return`ConvertNode`}constructor(e,t){super(),this.node=e,this.convertTo=t}getNodeType(e){let t=this.node.getNodeType(e),n=null;for(let r of this.convertTo.split(`|`))(n===null||e.getTypeLength(t)===e.getTypeLength(r))&&(n=r);return n}serialize(e){super.serialize(e),e.convertTo=this.convertTo}deserialize(e){super.deserialize(e),this.convertTo=e.convertTo}generate(e,t){let n=this.node,r=this.getNodeType(e),i=n.build(e,r);return e.format(i,r,t)}},zh=class extends R{static get type(){return`TempNode`}constructor(e){super(e),this.isTempNode=!0}hasDependencies(e){return e.getDataFromNode(this).usageCount>1}build(e,t){if(e.getBuildStage()===`generate`){let n=e.getVectorType(this.getNodeType(e,t)),r=e.getDataFromNode(this);if(r.propertyName!==void 0)return e.format(r.propertyName,n,t);if(n!==`void`&&t!==`void`&&this.hasDependencies(e)){let i=super.build(e,n),a=e.getVarFromNode(this,null,n),o=e.getPropertyName(a);return e.addLineFlowCode(`${o} = ${i}`,this),r.snippet=i,r.propertyName=o,e.format(r.propertyName,n,t)}}return super.build(e,t)}},Bh=class extends zh{static get type(){return`JoinNode`}constructor(e=[],t=null){super(t),this.nodes=e}getNodeType(e){return this.nodeType===null?e.getTypeFromLength(this.nodes.reduce((t,n)=>t+e.getTypeLength(n.getNodeType(e)),0)):e.getVectorType(this.nodeType)}generate(e,t){let n=this.getNodeType(e),r=this.nodes,i=e.getComponentType(n),a=[];for(let t of r){let n=t.build(e),r=e.getComponentType(t.getNodeType(e));r!==i&&(n=e.format(n,r,i)),a.push(n)}let o=`${e.getType(n)}( ${a.join(`, `)} )`;return e.format(o,n,t)}},Vh=Fh.join(``),Hh=class extends R{static get type(){return`SplitNode`}constructor(e,t=`x`){super(),this.node=e,this.components=t,this.isSplitNode=!0}getVectorLength(){let e=this.components.length;for(let t of this.components)e=Math.max(Fh.indexOf(t)+1,e);return e}getComponentType(e){return e.getComponentType(this.node.getNodeType(e))}getNodeType(e){return e.getTypeFromLength(this.components.length,this.getComponentType(e))}generate(e,t){let n=this.node,r=e.getTypeLength(n.getNodeType(e)),i=null;if(r>1){let a=null;this.getVectorLength()>=r&&(a=e.getTypeFromLength(this.getVectorLength(),this.getComponentType(e)));let o=n.build(e,a);i=this.components.length===r&&this.components===Vh.slice(0,this.components.length)?e.format(o,a,t):e.format(`${o}.${this.components}`,this.getNodeType(e),t)}else i=n.build(e,t);return i}serialize(e){super.serialize(e),e.components=this.components}deserialize(e){super.deserialize(e),this.components=e.components}},Uh=class extends zh{static get type(){return`SetNode`}constructor(e,t,n){super(),this.sourceNode=e,this.components=t,this.targetNode=n}getNodeType(e){return this.sourceNode.getNodeType(e)}generate(e){let{sourceNode:t,components:n,targetNode:r}=this,i=this.getNodeType(e),a=e.getTypeFromLength(n.length,r.getNodeType(e)),o=r.build(e,a),s=t.build(e,i),c=e.getTypeLength(i),l=[];for(let e=0;ee.replace(/r|s/g,`x`).replace(/g|t/g,`y`).replace(/b|p/g,`z`).replace(/a|q/g,`w`),Xh=e=>Yh(e).split(``).sort().join(``),Zh={setup(e,t){return e(Cg(t.shift()),...t)},get(e,t,n){if(typeof t==`string`&&e[t]===void 0){if(e.isStackNode!==!0&&t===`assign`)return(...e)=>(qh.assign(n,...e),n);if(Jh.has(t)){let r=Jh.get(t);return e.isStackNode?(...e)=>n.add(r(...e)):(...e)=>r(n,...e)}else if(t===`self`)return e;else if(t.endsWith(`Assign`)&&Jh.has(t.slice(0,t.length-6))){let r=Jh.get(t.slice(0,t.length-6));return e.isStackNode?(...e)=>n.assign(e[0],r(...e)):(...e)=>n.assign(r(n,...e))}else if(/^[xyzwrgbastpq]{1,4}$/.test(t)===!0)return t=Yh(t),B(new Hh(n,t));else if(/^set[XYZWRGBASTPQ]{1,4}$/.test(t)===!0)return t=Xh(t.slice(3).toLowerCase()),n=>B(new Uh(e,t,n));else if(/^flip[XYZWRGBASTPQ]{1,4}$/.test(t)===!0)return t=Xh(t.slice(4).toLowerCase()),()=>B(new Wh(B(e),t));else if(t===`width`||t===`height`||t===`depth`)return t===`width`?t=`x`:t===`height`?t=`y`:t===`depth`&&(t=`z`),B(new Hh(e,t));else if(/^\d+$/.test(t)===!0)return B(new Lh(n,new Kh(Number(t),`uint`)))}return Reflect.get(e,t,n)},set(e,t,n,r){return typeof t==`string`&&e[t]===void 0&&(/^[xyzwrgbastpq]{1,4}$/.test(t)===!0||t===`width`||t===`height`||t===`depth`||/^\d+$/.test(t)===!0)?(r[t].assign(n),!0):Reflect.set(e,t,n,r)}},Qh=new WeakMap,$h=new WeakMap,eg=function(e,t=null){let n=Th(e);if(n===`node`){let t=Qh.get(e);return t===void 0&&(t=new Proxy(e,Zh),Qh.set(e,t),Qh.set(t,t)),t}else if(t===null&&(n===`float`||n===`boolean`)||n&&n!==`shader`&&n!==`string`)return B(_g(e,t));else if(n===`shader`)return U(e);return e},tg=function(e,t=null){for(let n in e)e[n]=B(e[n],t);return e},ng=function(e,t=null){let n=e.length;for(let r=0;rB(r===null?e:Object.assign(e,r));return t===null?(...t)=>i(new e(...wg(t))):n===null?(...n)=>i(new e(t,...wg(n))):(n=B(n),(...r)=>i(new e(t,...wg(r),n)))},ig=function(e,...t){return B(new e(...wg(t)))},ag=class extends R{constructor(e,t){super(),this.shaderNode=e,this.inputNodes=t}getNodeType(e){return this.shaderNode.nodeType||this.getOutputNode(e).getNodeType(e)}call(e){let{shaderNode:t,inputNodes:n}=this,r=e.getNodeProperties(t);if(r.onceOutput)return r.onceOutput;let i=null;if(t.layout){let r=$h.get(e.constructor);r===void 0&&(r=new WeakMap,$h.set(e.constructor,r));let a=r.get(t);a===void 0&&(a=B(e.buildFunctionNode(t)),r.set(t,a)),e.currentFunctionNode!==null&&e.currentFunctionNode.includes.push(a),i=B(a.call(n))}else{let r=t.jsFunc;i=B(n===null?r(e):r(n,e))}return t.once&&(r.onceOutput=i),i}getOutputNode(e){let t=e.getNodeProperties(this);return t.outputNode===null&&(t.outputNode=this.setupOutput(e)),t.outputNode}setup(e){return this.getOutputNode(e)}setupOutput(e){return e.addStack(),e.stack.outputNode=this.call(e),e.removeStack()}generate(e,t){return this.getOutputNode(e).build(e,t)}},og=class extends R{constructor(e,t){super(t),this.jsFunc=e,this.layout=null,this.global=!0,this.once=!1}setLayout(e){return this.layout=e,this}call(e=null){return Cg(e),B(new ag(this,e))}setup(){return this.call()}},sg=[!1,!0],cg=[0,1,2,3],lg=[-1,-2],ug=[.5,1.5,1/3,1e-6,1e6,Math.PI,Math.PI*2,1/Math.PI,2/Math.PI,1/(Math.PI*2),Math.PI/2],dg=new Map;for(let e of sg)dg.set(e,new Kh(e));var fg=new Map;for(let e of cg)fg.set(e,new Kh(e,`uint`));var pg=new Map([...fg].map(e=>new Kh(e.value,`int`)));for(let e of lg)pg.set(e,new Kh(e,`int`));var mg=new Map([...pg].map(e=>new Kh(e.value)));for(let e of ug)mg.set(e,new Kh(e));for(let e of ug)mg.set(-e,new Kh(-e));var hg={bool:dg,uint:fg,ints:pg,float:mg},gg=new Map([...dg,...mg]),_g=(e,t)=>gg.has(e)?gg.get(e):e.isNode===!0?e:new Kh(e,t),vg=e=>{try{return e.getNodeType()}catch{return}},yg=function(e,t=null){return(...n)=>{if((n.length===0||![`bool`,`float`,`int`,`uint`].includes(e)&&n.every(e=>typeof e!=`object`))&&(n=[Eh(e,...n)]),n.length===1&&t!==null&&t.has(n[0]))return B(t.get(n[0]));if(n.length===1){let t=_g(n[0],e);return vg(t)===e?B(t):B(new Rh(t,e))}return B(new Bh(n.map(e=>_g(e)),e))}},bg=e=>typeof e==`object`&&e?e.value:e,xg=e=>e==null?null:e.nodeType||e.convertTo||(typeof e==`string`?e:null);function Sg(e,t){return new Proxy(new og(e,t),Zh)}var B=(e,t=null)=>eg(e,t),Cg=(e,t=null)=>new tg(e,t),wg=(e,t=null)=>new ng(e,t),V=(...e)=>new rg(...e),H=(...e)=>new ig(...e),U=(e,t)=>{let n=new Sg(e,t),r=(...e)=>{let t;return Cg(e),t=e[0]&&e[0].isNode?[...e]:e[0],n.call(t)};return r.shaderNode=n,r.setLayout=e=>(n.setLayout(e),r),r.once=()=>(n.once=!0,r),r},Tg=(...e)=>(console.warn(`TSL.ShaderNode: tslFn() has been renamed to Fn().`),U(...e));z(`toGlobal`,e=>(e.global=!0,e));var Eg=e=>{qh=e},Dg=()=>qh,W=(...e)=>qh.If(...e);function Og(e){return qh&&qh.add(e),e}z(`append`,Og);var kg=new yg(`color`),G=new yg(`float`,hg.float),K=new yg(`int`,hg.ints),q=new yg(`uint`,hg.uint),Ag=new yg(`bool`,hg.bool),J=new yg(`vec2`),jg=new yg(`ivec2`),Mg=new yg(`uvec2`),Ng=new yg(`bvec2`),Y=new yg(`vec3`),Pg=new yg(`ivec3`),Fg=new yg(`uvec3`),Ig=new yg(`bvec3`),X=new yg(`vec4`),Lg=new yg(`ivec4`),Rg=new yg(`uvec4`),zg=new yg(`bvec4`),Bg=new yg(`mat2`),Vg=new yg(`mat3`),Hg=new yg(`mat4`),Ug=(e=``)=>B(new Kh(e,`string`)),Wg=e=>B(new Kh(e,`ArrayBuffer`));z(`toColor`,kg),z(`toFloat`,G),z(`toInt`,K),z(`toUint`,q),z(`toBool`,Ag),z(`toVec2`,J),z(`toIVec2`,jg),z(`toUVec2`,Mg),z(`toBVec2`,Ng),z(`toVec3`,Y),z(`toIVec3`,Pg),z(`toUVec3`,Fg),z(`toBVec3`,Ig),z(`toVec4`,X),z(`toIVec4`,Lg),z(`toUVec4`,Rg),z(`toBVec4`,zg),z(`toMat2`,Bg),z(`toMat3`,Vg),z(`toMat4`,Hg);var Gg=V(Lh),Kg=(e,t)=>B(new Rh(B(e),t)),qg=(e,t)=>B(new Hh(B(e),t));z(`element`,Gg),z(`convert`,Kg);var Jg=class extends R{static get type(){return`UniformGroupNode`}constructor(e,t=!1,n=1){super(`string`),this.name=e,this.version=0,this.shared=t,this.order=n,this.isUniformGroup=!0}set needsUpdate(e){e===!0&&this.version++}serialize(e){super.serialize(e),e.name=this.name,e.version=this.version,e.shared=this.shared}deserialize(e){super.deserialize(e),this.name=e.name,this.version=e.version,this.shared=e.shared}},Yg=e=>new Jg(e),Xg=(e,t=0)=>new Jg(e,!0,t),Zg=Xg(`frame`),Qg=Xg(`render`),$g=Yg(`object`),e_=class extends Gh{static get type(){return`UniformNode`}constructor(e,t=null){super(e,t),this.isUniformNode=!0,this.name=``,this.groupNode=$g}label(e){return this.name=e,this}setGroup(e){return this.groupNode=e,this}getGroup(){return this.groupNode}getUniformHash(e){return this.getHash(e)}onUpdate(e,t){let n=this.getSelf();return e=e.bind(n),super.onUpdate(t=>{let r=e(t,n);r!==void 0&&(this.value=r)},t)}generate(e,t){let n=this.getNodeType(e),r=this.getUniformHash(e),i=e.getNodeFromHash(r);i===void 0&&(e.setHashNode(this,r),i=this);let a=i.getInputType(e),o=e.getUniformFromNode(i,a,e.shaderStage,this.name||e.context.label),s=e.getPropertyName(o);return e.context.label!==void 0&&delete e.context.label,e.format(s,n,t)}},Z=(e,t)=>{let n=xg(t||e);return B(new e_(e&&e.isNode===!0?e.node&&e.node.value||e.value:e,n))},t_=class extends R{static get type(){return`PropertyNode`}constructor(e,t=null,n=!1){super(e),this.name=t,this.varying=n,this.isPropertyNode=!0}getHash(e){return this.name||super.getHash(e)}isGlobal(){return!0}generate(e){let t;return this.varying===!0?(t=e.getVaryingFromNode(this,this.name),t.needsInterpolation=!0):t=e.getVarFromNode(this,this.name),e.getPropertyName(t)}},n_=(e,t)=>B(new t_(e,t)),r_=(e,t)=>B(new t_(e,t,!0)),i_=H(t_,`vec4`,`DiffuseColor`),a_=H(t_,`vec3`,`EmissiveColor`),o_=H(t_,`float`,`Roughness`),s_=H(t_,`float`,`Metalness`),c_=H(t_,`float`,`Clearcoat`),l_=H(t_,`float`,`ClearcoatRoughness`),u_=H(t_,`vec3`,`Sheen`),d_=H(t_,`float`,`SheenRoughness`),f_=H(t_,`float`,`Iridescence`),p_=H(t_,`float`,`IridescenceIOR`),m_=H(t_,`float`,`IridescenceThickness`),h_=H(t_,`float`,`AlphaT`),g_=H(t_,`float`,`Anisotropy`),__=H(t_,`vec3`,`AnisotropyT`),v_=H(t_,`vec3`,`AnisotropyB`),y_=H(t_,`color`,`SpecularColor`),b_=H(t_,`float`,`SpecularF90`),x_=H(t_,`float`,`Shininess`),S_=H(t_,`vec4`,`Output`),C_=H(t_,`float`,`dashSize`),w_=H(t_,`float`,`gapSize`),T_=H(t_,`float`,`pointWidth`),E_=H(t_,`float`,`IOR`),D_=H(t_,`float`,`Transmission`),O_=H(t_,`float`,`Thickness`),k_=H(t_,`float`,`AttenuationDistance`),A_=H(t_,`color`,`AttenuationColor`),j_=H(t_,`float`,`Dispersion`),M_=class extends zh{static get type(){return`AssignNode`}constructor(e,t){super(),this.targetNode=e,this.sourceNode=t}hasDependencies(){return!1}getNodeType(e,t){return t===`void`?`void`:this.targetNode.getNodeType(e)}needsSplitAssign(e){let{targetNode:t}=this;if(e.isAvailable(`swizzleAssign`)===!1&&t.isSplitNode&&t.components.length>1){let n=e.getTypeLength(t.node.getNodeType(e));return Fh.join(``).slice(0,n)!==t.components}return!1}generate(e,t){let{targetNode:n,sourceNode:r}=this,i=this.needsSplitAssign(e),a=n.getNodeType(e),o=n.context({assign:!0}).build(e),s=r.build(e,a),c=r.getNodeType(e),l=e.getDataFromNode(this),u;if(l.initialized===!0)t!==`void`&&(u=o);else if(i){let r=e.getVarFromNode(this,null,a),i=e.getPropertyName(r);e.addLineFlowCode(`${i} = ${s}`,this);let c=n.node.context({assign:!0}).build(e);for(let t=0;t(t=t.length>1||t[0]&&t[0].isNode===!0?wg(t):Cg(t[0]),B(new P_(B(e),t)));z(`call`,F_);var I_=class e extends zh{static get type(){return`OperatorNode`}constructor(t,n,r,...i){if(super(),i.length>0){let a=new e(t,n,r);for(let n=0;n>`||n===`<<`)return e.getIntegerType(a);if(n===`!`||n===`==`||n===`&&`||n===`||`||n===`^^`)return`bool`;if(n===`<`||n===`>`||n===`<=`||n===`>=`){let n=t?e.getTypeLength(t):Math.max(e.getTypeLength(a),e.getTypeLength(o));return n>1?`bvec${n}`:`bool`}else return a===`float`&&e.isMatrix(o)?o:e.isMatrix(a)&&e.isVector(o)?e.getVectorFromMatrix(a):e.isVector(a)&&e.isMatrix(o)?e.getVectorFromMatrix(o):e.getTypeLength(o)>e.getTypeLength(a)?o:a}generate(e,t){let n=this.op,r=this.aNode,i=this.bNode,a=this.getNodeType(e,t),o=null,s=null;a===`void`?o=s=a:(o=r.getNodeType(e),s=i===void 0?null:i.getNodeType(e),n===`<`||n===`>`||n===`<=`||n===`>=`||n===`==`?e.isVector(o)?s=o:o!==s&&(o=s=`float`):n===`>>`||n===`<<`?(o=a,s=e.changeComponentType(s,`uint`)):e.isMatrix(o)&&e.isVector(s)?s=e.getVectorFromMatrix(o):o=e.isVector(o)&&e.isMatrix(s)?e.getVectorFromMatrix(s):s=a);let c=r.build(e,o),l=i===void 0?null:i.build(e,s),u=e.getTypeLength(t),d=e.getFunctionOperator(n);if(t!==`void`)return n===`<`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`lessThan`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} < ${l} )`,a,t):n===`<=`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`lessThanEqual`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} <= ${l} )`,a,t):n===`>`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`greaterThan`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} > ${l} )`,a,t):n===`>=`&&u>1?e.useComparisonMethod?e.format(`${e.getMethod(`greaterThanEqual`,t)}( ${c}, ${l} )`,a,t):e.format(`( ${c} >= ${l} )`,a,t):n===`!`||n===`~`?e.format(`(${n}${c})`,o,t):d?e.format(`${d}( ${c}, ${l} )`,a,t):e.format(`( ${c} ${n} ${l} )`,a,t);if(o!==`void`)return d?e.format(`${d}( ${c}, ${l} )`,a,t):e.format(`${c} ${n} ${l}`,a,t)}serialize(e){super.serialize(e),e.op=this.op}deserialize(e){super.deserialize(e),this.op=e.op}},L_=V(I_,`+`),R_=V(I_,`-`),z_=V(I_,`*`),B_=V(I_,`/`),V_=V(I_,`%`),H_=V(I_,`==`),U_=V(I_,`!=`),W_=V(I_,`<`),G_=V(I_,`>`),K_=V(I_,`<=`),q_=V(I_,`>=`),J_=V(I_,`&&`),Y_=V(I_,`||`),X_=V(I_,`!`),Z_=V(I_,`^^`),Q_=V(I_,`&`),$_=V(I_,`~`),ev=V(I_,`|`),tv=V(I_,`^`),nv=V(I_,`<<`),rv=V(I_,`>>`);z(`add`,L_),z(`sub`,R_),z(`mul`,z_),z(`div`,B_),z(`modInt`,V_),z(`equal`,H_),z(`notEqual`,U_),z(`lessThan`,W_),z(`greaterThan`,G_),z(`lessThanEqual`,K_),z(`greaterThanEqual`,q_),z(`and`,J_),z(`or`,Y_),z(`not`,X_),z(`xor`,Z_),z(`bitAnd`,Q_),z(`bitNot`,$_),z(`bitOr`,ev),z(`bitXor`,tv),z(`shiftLeft`,nv),z(`shiftRight`,rv);var iv=(...e)=>(console.warn(`TSL.OperatorNode: .remainder() has been renamed to .modInt().`),V_(...e));z(`remainder`,iv);var Q=class e extends zh{static get type(){return`MathNode`}constructor(e,t,n=null,r=null){super(),this.method=e,this.aNode=t,this.bNode=n,this.cNode=r}getInputType(e){let t=this.aNode.getNodeType(e),n=this.bNode?this.bNode.getNodeType(e):null,r=this.cNode?this.cNode.getNodeType(e):null,i=e.isMatrix(t)?0:e.getTypeLength(t),a=e.isMatrix(n)?0:e.getTypeLength(n),o=e.isMatrix(r)?0:e.getTypeLength(r);return i>a&&i>o?t:a>o?n:o>i?r:t}getNodeType(t){let n=this.method;return n===e.LENGTH||n===e.DISTANCE||n===e.DOT?`float`:n===e.CROSS?`vec3`:n===e.ALL?`bool`:n===e.EQUALS?t.changeComponentType(this.aNode.getNodeType(t),`bool`):n===e.MOD?this.aNode.getNodeType(t):this.getInputType(t)}generate(t,n){let r=this.method,i=this.getNodeType(t),a=this.getInputType(t),o=this.aNode,s=this.bNode,c=this.cNode,l=t.renderer.isWebGLRenderer===!0;if(r===e.TRANSFORM_DIRECTION){let e=o,r=s;t.isMatrix(e.getNodeType(t))?r=X(Y(r),0):e=X(Y(e),0);let i=z_(e,r).xyz;return Sv(i).build(t,n)}else if(r===e.NEGATE)return t.format(`( - `+o.build(t,a)+` )`,i,n);else if(r===e.ONE_MINUS)return R_(1,o).build(t,n);else if(r===e.RECIPROCAL)return B_(1,o).build(t,n);else if(r===e.DIFFERENCE)return Av(R_(o,s)).build(t,n);else{let u=[];return r===e.CROSS||r===e.MOD?u.push(o.build(t,i),s.build(t,i)):l&&r===e.STEP?u.push(o.build(t,t.getTypeLength(o.getNodeType(t))===1?`float`:a),s.build(t,a)):l&&(r===e.MIN||r===e.MAX)||r===e.MOD?u.push(o.build(t,a),s.build(t,t.getTypeLength(s.getNodeType(t))===1?`float`:a)):r===e.REFRACT?u.push(o.build(t,a),s.build(t,a),c.build(t,`float`)):r===e.MIX?u.push(o.build(t,a),s.build(t,a),c.build(t,t.getTypeLength(c.getNodeType(t))===1?`float`:a)):(u.push(o.build(t,a)),s!==null&&u.push(s.build(t,a)),c!==null&&u.push(c.build(t,a))),t.format(`${t.getMethod(r,i)}( ${u.join(`, `)} )`,i,n)}}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}};Q.ALL=`all`,Q.ANY=`any`,Q.EQUALS=`equals`,Q.RADIANS=`radians`,Q.DEGREES=`degrees`,Q.EXP=`exp`,Q.EXP2=`exp2`,Q.LOG=`log`,Q.LOG2=`log2`,Q.SQRT=`sqrt`,Q.INVERSE_SQRT=`inversesqrt`,Q.FLOOR=`floor`,Q.CEIL=`ceil`,Q.NORMALIZE=`normalize`,Q.FRACT=`fract`,Q.SIN=`sin`,Q.COS=`cos`,Q.TAN=`tan`,Q.ASIN=`asin`,Q.ACOS=`acos`,Q.ATAN=`atan`,Q.ABS=`abs`,Q.SIGN=`sign`,Q.LENGTH=`length`,Q.NEGATE=`negate`,Q.ONE_MINUS=`oneMinus`,Q.DFDX=`dFdx`,Q.DFDY=`dFdy`,Q.ROUND=`round`,Q.RECIPROCAL=`reciprocal`,Q.TRUNC=`trunc`,Q.FWIDTH=`fwidth`,Q.BITCAST=`bitcast`,Q.TRANSPOSE=`transpose`,Q.ATAN2=`atan2`,Q.MIN=`min`,Q.MAX=`max`,Q.MOD=`mod`,Q.STEP=`step`,Q.REFLECT=`reflect`,Q.DISTANCE=`distance`,Q.DIFFERENCE=`difference`,Q.DOT=`dot`,Q.CROSS=`cross`,Q.POW=`pow`,Q.TRANSFORM_DIRECTION=`transformDirection`,Q.MIX=`mix`,Q.CLAMP=`clamp`,Q.REFRACT=`refract`,Q.SMOOTHSTEP=`smoothstep`,Q.FACEFORWARD=`faceforward`;var av=G(1e-6),ov=G(1e6),sv=G(Math.PI),cv=G(Math.PI*2),lv=V(Q,Q.ALL),uv=V(Q,Q.ANY),dv=V(Q,Q.EQUALS),fv=V(Q,Q.RADIANS),pv=V(Q,Q.DEGREES),mv=V(Q,Q.EXP),hv=V(Q,Q.EXP2),gv=V(Q,Q.LOG),_v=V(Q,Q.LOG2),vv=V(Q,Q.SQRT),yv=V(Q,Q.INVERSE_SQRT),bv=V(Q,Q.FLOOR),xv=V(Q,Q.CEIL),Sv=V(Q,Q.NORMALIZE),Cv=V(Q,Q.FRACT),wv=V(Q,Q.SIN),Tv=V(Q,Q.COS),Ev=V(Q,Q.TAN),Dv=V(Q,Q.ASIN),Ov=V(Q,Q.ACOS),kv=V(Q,Q.ATAN),Av=V(Q,Q.ABS),jv=V(Q,Q.SIGN),Mv=V(Q,Q.LENGTH),Nv=V(Q,Q.NEGATE),Pv=V(Q,Q.ONE_MINUS),Fv=V(Q,Q.DFDX),Iv=V(Q,Q.DFDY),Lv=V(Q,Q.ROUND),Rv=V(Q,Q.RECIPROCAL),zv=V(Q,Q.TRUNC),Bv=V(Q,Q.FWIDTH),Vv=V(Q,Q.BITCAST),Hv=V(Q,Q.TRANSPOSE),Uv=V(Q,Q.ATAN2),Wv=V(Q,Q.MIN),Gv=V(Q,Q.MAX),Kv=V(Q,Q.MOD),qv=V(Q,Q.STEP),Jv=V(Q,Q.REFLECT),Yv=V(Q,Q.DISTANCE),Xv=V(Q,Q.DIFFERENCE),Zv=V(Q,Q.DOT),Qv=V(Q,Q.CROSS),$v=V(Q,Q.POW),ey=V(Q,Q.POW,2),ty=V(Q,Q.POW,3),ny=V(Q,Q.POW,4),ry=V(Q,Q.TRANSFORM_DIRECTION),iy=e=>z_(jv(e),$v(Av(e),1/3)),ay=e=>Zv(e,e),oy=V(Q,Q.MIX),sy=(e,t=0,n=1)=>B(new Q(Q.CLAMP,B(e),B(t),B(n))),cy=e=>sy(e),ly=V(Q,Q.REFRACT),uy=V(Q,Q.SMOOTHSTEP),dy=V(Q,Q.FACEFORWARD),fy=U(([e])=>Cv(wv(Kv(Zv(e.xy,J(12.9898,78.233)),sv)).mul(43758.5453))),py=(e,t,n)=>oy(t,n,e),my=(e,t,n)=>uy(t,n,e);z(`all`,lv),z(`any`,uv),z(`equals`,dv),z(`radians`,fv),z(`degrees`,pv),z(`exp`,mv),z(`exp2`,hv),z(`log`,gv),z(`log2`,_v),z(`sqrt`,vv),z(`inverseSqrt`,yv),z(`floor`,bv),z(`ceil`,xv),z(`normalize`,Sv),z(`fract`,Cv),z(`sin`,wv),z(`cos`,Tv),z(`tan`,Ev),z(`asin`,Dv),z(`acos`,Ov),z(`atan`,kv),z(`abs`,Av),z(`sign`,jv),z(`length`,Mv),z(`lengthSq`,ay),z(`negate`,Nv),z(`oneMinus`,Pv),z(`dFdx`,Fv),z(`dFdy`,Iv),z(`round`,Lv),z(`reciprocal`,Rv),z(`trunc`,zv),z(`fwidth`,Bv),z(`atan2`,Uv),z(`min`,Wv),z(`max`,Gv),z(`mod`,Kv),z(`step`,qv),z(`reflect`,Jv),z(`distance`,Yv),z(`dot`,Zv),z(`cross`,Qv),z(`pow`,$v),z(`pow2`,ey),z(`pow3`,ty),z(`pow4`,ny),z(`transformDirection`,ry),z(`mix`,py),z(`clamp`,sy),z(`refract`,ly),z(`smoothstep`,my),z(`faceForward`,dy),z(`difference`,Xv),z(`saturate`,cy),z(`cbrt`,iy),z(`transpose`,Hv),z(`rand`,fy);var hy=V(class extends R{static get type(){return`ConditionalNode`}constructor(e,t,n=null){super(),this.condNode=e,this.ifNode=t,this.elseNode=n}getNodeType(e){let t=this.ifNode.getNodeType(e);if(this.elseNode!==null){let n=this.elseNode.getNodeType(e);if(e.getTypeLength(n)>e.getTypeLength(t))return n}return t}setup(e){let t=this.condNode.cache(),n=this.ifNode.cache(),r=this.elseNode?this.elseNode.cache():null,i=e.context.nodeBlock;e.getDataFromNode(n).parentNodeBlock=i,r!==null&&(e.getDataFromNode(r).parentNodeBlock=i);let a=e.getNodeProperties(this);a.condNode=t,a.ifNode=n.context({nodeBlock:n}),a.elseNode=r?r.context({nodeBlock:r}):null}generate(e,t){let n=this.getNodeType(e),r=e.getDataFromNode(this);if(r.nodeProperty!==void 0)return r.nodeProperty;let{condNode:i,ifNode:a,elseNode:o}=e.getNodeProperties(this),s=t!==`void`,c=s?n_(n).build(e):``;r.nodeProperty=c;let l=i.build(e,`bool`);e.addFlowCode(`\n${e.tab}if ( ${l} ) {\n\n`).addFlowTab();let u=a.build(e,n);if(u&&=s?c+` = `+u+`;`:`return `+u+`;`,e.removeFlowTab().addFlowCode(e.tab+` `+u+` - -`+e.tab+`}`),o!==null){e.addFlowCode(` else { - -`).addFlowTab();let t=o.build(e,n);t&&=s?c+` = `+t+`;`:`return `+t+`;`,e.removeFlowTab().addFlowCode(e.tab+` `+t+` - -`+e.tab+`} - -`)}else e.addFlowCode(` - -`);return e.format(c,n,t)}});z(`select`,hy);var gy=(...e)=>(console.warn(`TSL.ConditionalNode: cond() has been renamed to select().`),hy(...e));z(`cond`,gy);var _y=class extends R{static get type(){return`ContextNode`}constructor(e,t={}){super(),this.isContextNode=!0,this.node=e,this.value=t}getScope(){return this.node.getScope()}getNodeType(e){return this.node.getNodeType(e)}analyze(e){this.node.build(e)}setup(e){let t=e.getContext();e.setContext({...e.context,...this.value});let n=this.node.build(e);return e.setContext(t),n}generate(e,t){let n=e.getContext();e.setContext({...e.context,...this.value});let r=this.node.build(e,t);return e.setContext(n),r}},vy=V(_y),yy=(e,t)=>vy(e,{label:t});z(`context`,vy),z(`label`,yy);var by=class extends R{static get type(){return`VarNode`}constructor(e,t=null){super(),this.node=e,this.name=t,this.global=!0,this.isVarNode=!0}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}generate(e){let{node:t,name:n}=this,r=e.getVarFromNode(this,n,e.getVectorType(this.getNodeType(e))),i=e.getPropertyName(r),a=t.build(e,r.type);return e.addLineFlowCode(`${i} = ${a}`,this),i}},xy=V(by);z(`temp`,xy),z(`toVar`,(...e)=>xy(...e).append());var Sy=class extends R{static get type(){return`VaryingNode`}constructor(e,t=null){super(),this.node=e,this.name=t,this.isVaryingNode=!0}isGlobal(){return!0}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}setupVarying(e){let t=e.getNodeProperties(this),n=t.varying;if(n===void 0){let r=this.name,i=this.getNodeType(e);t.varying=n=e.getVaryingFromNode(this,r,i),t.node=this.node}return n.needsInterpolation||=e.shaderStage===`fragment`,n}setup(e){this.setupVarying(e)}analyze(e){return this.setupVarying(e),this.node.analyze(e)}generate(e){let t=e.getNodeProperties(this),n=this.setupVarying(e);if(t.propertyName===void 0){let r=this.getNodeType(e),i=e.getPropertyName(n,Ah.VERTEX);e.flowNodeFromShaderStage(Ah.VERTEX,this.node,r,i),t.propertyName=i}return e.getPropertyName(n)}},Cy=V(Sy);z(`varying`,Cy);var wy=`WorkingColorSpace`,Ty=`OutputColorSpace`;function Ey(e){let t=null;return e===`srgb-linear`?t=`Linear`:e===`srgb`&&(t=`sRGB`),t}function Dy(e,t){return Ey(e)+`To`+Ey(t)}var Oy=class extends zh{static get type(){return`ColorSpaceNode`}constructor(e,t,n){super(`vec4`),this.colorNode=e,this.source=t,this.target=n}getColorSpace(e,t){return t===wy?Tn.workingColorSpace:t===Ty?e.context.outputColorSpace||e.renderer.outputColorSpace:t}setup(e){let{renderer:t}=e,{colorNode:n}=this,r=this.getColorSpace(e,this.source),i=this.getColorSpace(e,this.target);if(r===i)return n;let a=Dy(r,i),o=null,s=t.nodes.library.getColorSpaceFunction(a);return s===null?(console.error(`ColorSpaceNode: Unsupported Color Space configuration.`,a),o=n):o=X(s(n.rgb),n.a),o}},ky=e=>B(new Oy(B(e),wy,Ty)),Ay=e=>B(new Oy(B(e),Ty,wy)),jy=(e,t)=>B(new Oy(B(e),wy,t)),My=(e,t)=>B(new Oy(B(e),t,wy));z(`toOutputColorSpace`,ky),z(`toWorkingColorSpace`,Ay),z(`workingToColorSpace`,jy),z(`colorSpaceToWorking`,My);var Ny=class extends Lh{static get type(){return`ReferenceElementNode`}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){let t=super.generate(e),n=this.referenceNode.getNodeType(),r=this.getNodeType();return e.format(t,n,r)}},Py=class extends R{static get type(){return`ReferenceBaseNode`}constructor(e,t,n=null,r=null){super(),this.property=e,this.uniformType=t,this.object=n,this.count=r,this.properties=e.split(`.`),this.reference=n,this.node=null,this.group=null,this.updateType=L.OBJECT}setGroup(e){return this.group=e,this}element(e){return B(new Ny(this,B(e)))}setNodeType(e){let t=Z(null,e).getSelf();this.group!==null&&t.setGroup(this.group),this.node=t}getNodeType(e){return this.node===null&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){let{properties:t}=this,n=e[t[0]];for(let e=1;eB(new Py(e,t,n)),Iy=class extends Py{static get type(){return`RendererReferenceNode`}constructor(e,t,n=null){super(e,t,n),this.renderer=n,this.setGroup(Qg)}updateReference(e){return this.reference=this.renderer===null?e.renderer:this.renderer,this.reference}},Ly=(e,t,n)=>B(new Iy(e,t,n)),Ry=class extends zh{static get type(){return`ToneMappingNode`}constructor(e,t=By,n=null){super(`vec3`),this.toneMapping=e,this.exposureNode=t,this.colorNode=n}getCacheKey(){return Sh(super.getCacheKey(),this.toneMapping)}setup(e){let t=this.colorNode||e.context.color,n=this.toneMapping;if(n===0)return t;let r=null,i=e.renderer.nodes.library.getToneMappingFunction(n);return i===null?(console.error(`ToneMappingNode: Unsupported Tone Mapping configuration.`,n),r=t):r=X(i(t.rgb,this.exposureNode),t.a),r}},zy=(e,t,n)=>B(new Ry(e,B(t),B(n))),By=Ly(`toneMappingExposure`,`float`);z(`toneMapping`,(e,t,n)=>zy(t,n,e));var Vy=class extends Gh{static get type(){return`BufferAttributeNode`}constructor(e,t=null,n=0,r=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferStride=n,this.bufferOffset=r,this.usage=Ct,this.instanced=!1,this.attribute=null,this.global=!0,e&&e.isBufferAttribute===!0&&(this.attribute=e,this.usage=e.usage,this.instanced=e.isInstancedBufferAttribute)}getHash(e){if(this.bufferStride===0&&this.bufferOffset===0){let t=e.globalCache.getData(this.value);return t===void 0&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getNodeType(e){return this.bufferType===null&&(this.bufferType=e.getTypeFromAttribute(this.attribute)),this.bufferType}setup(e){if(this.attribute!==null)return;let t=this.getNodeType(e),n=this.value,r=e.getTypeLength(t),i=this.bufferStride||r,a=this.bufferOffset,o=n.isInterleavedBuffer===!0?n:new Kc(n,i),s=new Jc(o,r,a);o.setUsage(this.usage),this.attribute=s,this.attribute.isInstancedBufferAttribute=this.instanced}generate(e){let t=this.getNodeType(e),n=e.getBufferAttributeFromNode(this,t),r=e.getPropertyName(n),i=null;return e.shaderStage===`vertex`||e.shaderStage===`compute`?(this.name=r,i=r):i=Cy(this).build(e,t),i}getInputType(){return`bufferAttribute`}setUsage(e){return this.usage=e,this.attribute&&this.attribute.isBufferAttribute===!0&&(this.attribute.usage=e),this}setInstanced(e){return this.instanced=e,this}},Hy=(e,t,n,r)=>B(new Vy(e,t,n,r)),Uy=(e,t,n,r)=>Hy(e,t,n,r).setUsage(wt),Wy=(e,t,n,r)=>Hy(e,t,n,r).setInstanced(!0),Gy=(e,t,n,r)=>Uy(e,t,n,r).setInstanced(!0);z(`toAttribute`,e=>Hy(e.value));var Ky=class extends R{static get type(){return`ComputeNode`}constructor(e,t,n=[64]){super(`void`),this.isComputeNode=!0,this.computeNode=e,this.count=t,this.workgroupSize=n,this.dispatchCount=0,this.version=1,this.updateBeforeType=L.OBJECT,this.updateDispatchCount()}dispose(){this.dispatchEvent({type:`dispose`})}set needsUpdate(e){e===!0&&this.version++}updateDispatchCount(){let{count:e,workgroupSize:t}=this,n=t[0];for(let e=1;eB(new Ky(B(e),t,n));z(`compute`,qy);var Jy=class extends R{static get type(){return`CacheNode`}constructor(e,t=!0){super(),this.node=e,this.parent=t,this.isCacheNode=!0}getNodeType(e){return this.node.getNodeType(e)}build(e,...t){let n=e.getCache(),r=e.getCacheFromNode(this,this.parent);e.setCache(r);let i=this.node.build(e,...t);return e.setCache(n),i}},Yy=(e,...t)=>B(new Jy(B(e),...t));z(`cache`,Yy);var Xy=class extends R{static get type(){return`BypassNode`}constructor(e,t){super(),this.isBypassNode=!0,this.outputNode=e,this.callNode=t}getNodeType(e){return this.outputNode.getNodeType(e)}generate(e){let t=this.callNode.build(e,`void`);return t!==``&&e.addLineFlowCode(t,this),this.outputNode.build(e)}},Zy=V(Xy);z(`bypass`,Zy);var Qy=class extends R{static get type(){return`RemapNode`}constructor(e,t,n,r=G(0),i=G(1)){super(),this.node=e,this.inLowNode=t,this.inHighNode=n,this.outLowNode=r,this.outHighNode=i,this.doClamp=!0}setup(){let{node:e,inLowNode:t,inHighNode:n,outLowNode:r,outHighNode:i,doClamp:a}=this,o=e.sub(t).div(n.sub(t));return a===!0&&(o=o.clamp()),o.mul(i.sub(r)).add(r)}},$y=V(Qy,null,null,{doClamp:!1}),eb=V(Qy);z(`remap`,$y),z(`remapClamp`,eb);var tb=class extends R{static get type(){return`ExpressionNode`}constructor(e=``,t=`void`){super(t),this.snippet=e}generate(e,t){let n=this.getNodeType(e),r=this.snippet;if(n===`void`)e.addLineFlowCode(r,this);else return e.format(`( ${r} )`,n,t)}},nb=V(tb),rb=e=>(e?hy(e,nb(`discard`)):nb(`discard`)).append(),ib=()=>nb(`return`).append();z(`discard`,rb);var ab=class extends zh{static get type(){return`RenderOutputNode`}constructor(e,t,n){super(`vec4`),this.colorNode=e,this.toneMapping=t,this.outputColorSpace=n,this.isRenderOutput=!0}setup({context:e}){let t=this.colorNode||e.color,n=(this.toneMapping===null?e.toneMapping:this.toneMapping)||0,r=(this.outputColorSpace===null?e.outputColorSpace:this.outputColorSpace)||``;return n!==0&&(t=t.toneMapping(n)),r!==``&&r!==Tn.workingColorSpace&&(t=t.workingToColorSpace(r)),t}},ob=(e,t=null,n=null)=>B(new ab(B(e),t,n));z(`renderOutput`,ob);function sb(e){console.warn(`THREE.TSLBase: AddNodeElement has been removed in favor of tree-shaking. Trying add`,e)}var cb=class extends R{static get type(){return`AttributeNode`}constructor(e,t=null){super(t),this.global=!0,this._attributeName=e}getHash(e){return this.getAttributeName(e)}getNodeType(e){let t=this.nodeType;if(t===null){let n=this.getAttributeName(e);if(e.hasGeometryAttribute(n)){let r=e.geometry.getAttribute(n);t=e.getTypeFromAttribute(r)}else t=`float`}return t}setAttributeName(e){return this._attributeName=e,this}getAttributeName(){return this._attributeName}generate(e){let t=this.getAttributeName(e),n=this.getNodeType(e);if(e.hasGeometryAttribute(t)===!0){let r=e.geometry.getAttribute(t),i=e.getTypeFromAttribute(r),a=e.getAttribute(t,i);return e.shaderStage===`vertex`?e.format(a.name,i,n):Cy(this).build(e,n)}else return console.warn(`AttributeNode: Vertex attribute "${t}" not found on geometry.`),e.generateConst(n)}serialize(e){super.serialize(e),e.global=this.global,e._attributeName=this._attributeName}deserialize(e){super.deserialize(e),this.global=e.global,this._attributeName=e._attributeName}},lb=(e,t)=>B(new cb(e,t)),ub=e=>lb(`uv`+(e>0?e:``),`vec2`),db=class extends R{static get type(){return`TextureSizeNode`}constructor(e,t=null){super(`uvec2`),this.isTextureSizeNode=!0,this.textureNode=e,this.levelNode=t}generate(e,t){let n=this.textureNode.build(e,`property`),r=this.levelNode===null?`0`:this.levelNode.build(e,`int`);return e.format(`${e.getMethod(`textureDimensions`)}( ${n}, ${r} )`,this.getNodeType(e),t)}},fb=V(db),pb=class extends e_{static get type(){return`MaxMipLevelNode`}constructor(e){super(0),this._textureNode=e,this.updateType=L.FRAME}get textureNode(){return this._textureNode}get texture(){return this._textureNode.value}update(){let e=this.texture,t=e.images,n=t&&t.length>0?t[0]&&t[0].image||t[0]:e.image;if(n&&n.width!==void 0){let{width:e,height:t}=n;this.value=Math.log2(Math.max(e,t))}}},mb=V(pb),hb=class extends e_{static get type(){return`TextureNode`}constructor(e,t=null,n=null,r=null){super(e),this.isTextureNode=!0,this.uvNode=t,this.levelNode=n,this.biasNode=r,this.compareNode=null,this.depthNode=null,this.gradNode=null,this.sampler=!0,this.updateMatrix=!1,this.updateType=L.NONE,this.referenceNode=null,this._value=e,this._matrixUniform=null,this.setUpdateMatrix(t===null)}set value(e){this.referenceNode?this.referenceNode.value=e:this._value=e}get value(){return this.referenceNode?this.referenceNode.value:this._value}getUniformHash(){return this.value.uuid}getNodeType(){return this.value.isDepthTexture===!0?`float`:this.value.type===1014?`uvec4`:this.value.type===1013?`ivec4`:`vec4`}getInputType(){return`texture`}getDefaultUV(){return ub(this.value.channel)}updateReference(){return this.value}getTransformedUV(e){return this._matrixUniform===null&&(this._matrixUniform=Z(this.value.matrix)),this._matrixUniform.mul(Y(e,1)).xy}setUpdateMatrix(e){return this.updateMatrix=e,this.updateType=e?L.FRAME:L.NONE,this}setupUV(e,t){let n=this.value;return e.isFlipY()&&(n.isRenderTargetTexture===!0||n.isFramebufferTexture===!0||n.isDepthTexture===!0)&&(t=this.sampler?t.flipY():t.setY(K(fb(this,this.levelNode).y).sub(t.y).sub(1))),t}setup(e){let t=e.getNodeProperties(this);t.referenceNode=this.referenceNode;let n=this.uvNode;(n===null||e.context.forceUVContext===!0)&&e.context.getUV&&(n=e.context.getUV(this)),n||=this.getDefaultUV(),this.updateMatrix===!0&&(n=this.getTransformedUV(n)),n=this.setupUV(e,n);let r=this.levelNode;r===null&&e.context.getTextureLevel&&(r=e.context.getTextureLevel(this)),t.uvNode=n,t.levelNode=r,t.biasNode=this.biasNode,t.compareNode=this.compareNode,t.gradNode=this.gradNode,t.depthNode=this.depthNode}generateUV(e,t){return t.build(e,this.sampler===!0?`vec2`:`ivec2`)}generateSnippet(e,t,n,r,i,a,o,s){let c=this.value,l;return l=r?e.generateTextureLevel(c,t,n,r,a):i?e.generateTextureBias(c,t,n,i,a):s?e.generateTextureGrad(c,t,n,s,a):o?e.generateTextureCompare(c,t,n,o,a):this.sampler===!1?e.generateTextureLoad(c,t,n,a):e.generateTexture(c,t,n,a),l}generate(e,t){let n=e.getNodeProperties(this),r=this.value;if(!r||r.isTexture!==!0)throw Error(`TextureNode: Need a three.js texture.`);let i=super.generate(e,`property`);if(t===`sampler`)return i+`_sampler`;if(e.isReference(t))return i;{let a=e.getDataFromNode(this),o=a.propertyName;if(o===void 0){let{uvNode:t,levelNode:r,biasNode:s,compareNode:c,depthNode:l,gradNode:u}=n,d=this.generateUV(e,t),f=r?r.build(e,`float`):null,p=s?s.build(e,`float`):null,m=l?l.build(e,`int`):null,h=c?c.build(e,`float`):null,g=u?[u[0].build(e,`vec2`),u[1].build(e,`vec2`)]:null,_=e.getVarFromNode(this);o=e.getPropertyName(_);let v=this.generateSnippet(e,i,d,f,p,m,h,g);e.addLineFlowCode(`${o} = ${v}`,this),a.snippet=v,a.propertyName=o}let s=o,c=this.getNodeType(e);return e.needsToWorkingColorSpace(r)&&(s=My(nb(s,c),r.colorSpace).setup(e).build(e,c)),e.format(s,c,t)}}setSampler(e){return this.sampler=e,this}getSampler(){return this.sampler}uv(e){let t=this.clone();return t.uvNode=B(e),t.referenceNode=this.getSelf(),B(t)}blur(e){let t=this.clone();return t.biasNode=B(e).mul(mb(t)),t.referenceNode=this.getSelf(),B(t)}level(e){let t=this.clone();return t.levelNode=B(e),t.referenceNode=this.getSelf(),B(t)}size(e){return fb(this,e)}bias(e){let t=this.clone();return t.biasNode=B(e),t.referenceNode=this.getSelf(),B(t)}compare(e){let t=this.clone();return t.compareNode=B(e),t.referenceNode=this.getSelf(),B(t)}grad(e,t){let n=this.clone();return n.gradNode=[B(e),B(t)],n.referenceNode=this.getSelf(),B(n)}depth(e){let t=this.clone();return t.depthNode=B(e),t.referenceNode=this.getSelf(),B(t)}serialize(e){super.serialize(e),e.value=this.value.toJSON(e.meta).uuid,e.sampler=this.sampler,e.updateMatrix=this.updateMatrix,e.updateType=this.updateType}deserialize(e){super.deserialize(e),this.value=e.meta.textures[e.value],this.sampler=e.sampler,this.updateMatrix=e.updateMatrix,this.updateType=e.updateType}update(){let e=this.value,t=this._matrixUniform;t!==null&&(t.value=e.matrix),e.matrixAutoUpdate===!0&&e.updateMatrix()}clone(){let e=new this.constructor(this.value,this.uvNode,this.levelNode,this.biasNode);return e.sampler=this.sampler,e}},gb=V(hb),_b=(...e)=>gb(...e).setSampler(!1),vb=e=>(e.isNode===!0?e:gb(e)).convert(`sampler`),yb=Z(`float`).label(`cameraNear`).setGroup(Qg).onRenderUpdate(({camera:e})=>e.near),bb=Z(`float`).label(`cameraFar`).setGroup(Qg).onRenderUpdate(({camera:e})=>e.far),xb=Z(`float`).label(`cameraLogDepth`).setGroup(Qg).onRenderUpdate(({camera:e})=>2/(Math.log(e.far+1)/Math.LN2)),Sb=Z(`mat4`).label(`cameraProjectionMatrix`).setGroup(Qg).onRenderUpdate(({camera:e})=>e.projectionMatrix),Cb=Z(`mat4`).label(`cameraProjectionMatrixInverse`).setGroup(Qg).onRenderUpdate(({camera:e})=>e.projectionMatrixInverse),wb=Z(`mat4`).label(`cameraViewMatrix`).setGroup(Qg).onRenderUpdate(({camera:e})=>e.matrixWorldInverse),Tb=Z(`mat4`).label(`cameraWorldMatrix`).setGroup(Qg).onRenderUpdate(({camera:e})=>e.matrixWorld),Eb=Z(`mat3`).label(`cameraNormalMatrix`).setGroup(Qg).onRenderUpdate(({camera:e})=>e.normalMatrix),Db=Z(new M).label(`cameraPosition`).setGroup(Qg).onRenderUpdate(({camera:e},t)=>t.value.setFromMatrixPosition(e.matrixWorld)),Ob=class e extends R{static get type(){return`Object3DNode`}constructor(e,t=null){super(),this.scope=e,this.object3d=t,this.updateType=L.OBJECT,this._uniformNode=new e_(null)}getNodeType(){let t=this.scope;if(t===e.WORLD_MATRIX)return`mat4`;if(t===e.POSITION||t===e.VIEW_POSITION||t===e.DIRECTION||t===e.SCALE)return`vec3`}update(t){let n=this.object3d,r=this._uniformNode,i=this.scope;if(i===e.WORLD_MATRIX)r.value=n.matrixWorld;else if(i===e.POSITION)r.value=r.value||new M,r.value.setFromMatrixPosition(n.matrixWorld);else if(i===e.SCALE)r.value=r.value||new M,r.value.setFromMatrixScale(n.matrixWorld);else if(i===e.DIRECTION)r.value=r.value||new M,n.getWorldDirection(r.value);else if(i===e.VIEW_POSITION){let e=t.camera;r.value=r.value||new M,r.value.setFromMatrixPosition(n.matrixWorld),r.value.applyMatrix4(e.matrixWorldInverse)}}generate(t){let n=this.scope;return n===e.WORLD_MATRIX?this._uniformNode.nodeType=`mat4`:(n===e.POSITION||n===e.VIEW_POSITION||n===e.DIRECTION||n===e.SCALE)&&(this._uniformNode.nodeType=`vec3`),this._uniformNode.build(t)}serialize(e){super.serialize(e),e.scope=this.scope}deserialize(e){super.deserialize(e),this.scope=e.scope}};Ob.WORLD_MATRIX=`worldMatrix`,Ob.POSITION=`position`,Ob.SCALE=`scale`,Ob.VIEW_POSITION=`viewPosition`,Ob.DIRECTION=`direction`;var kb=V(Ob,Ob.DIRECTION),Ab=V(Ob,Ob.WORLD_MATRIX),jb=V(Ob,Ob.POSITION),Mb=V(Ob,Ob.SCALE),Nb=V(Ob,Ob.VIEW_POSITION),Pb=class extends Ob{static get type(){return`ModelNode`}constructor(e){super(e)}update(e){this.object3d=e.object,super.update(e)}},Fb=H(Pb,Pb.DIRECTION),Ib=H(Pb,Pb.WORLD_MATRIX),Lb=H(Pb,Pb.POSITION),Rb=H(Pb,Pb.SCALE),zb=H(Pb,Pb.VIEW_POSITION),Bb=Z(new j).onObjectUpdate(({object:e},t)=>t.value.getNormalMatrix(e.matrixWorld)),Vb=Z(new N).onObjectUpdate(({object:e},t)=>t.value.copy(e.matrixWorld).invert()),Hb=wb.mul(Ib).toVar(`modelViewMatrix_2`),Ub=U(e=>(e.context.isHighPrecisionModelViewMatrix=!0,Z(`mat4`).onObjectUpdate(({object:e,camera:t})=>e.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse,e.matrixWorld)))).once()().toVar(`highPrecisionModelViewMatrix`),Wb=U(e=>{let t=e.context.isHighPrecisionModelViewMatrix;return Z(`mat3`).onObjectUpdate(({object:e,camera:n})=>(t!==!0&&e.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,e.matrixWorld),e.normalMatrix.getNormalMatrix(e.modelViewMatrix)))}).once()().toVar(`highPrecisionModelNormalMatrix`),Gb=lb(`position`,`vec3`),Kb=Gb.varying(`positionLocal`),qb=Gb.varying(`positionPrevious`),Jb=Ib.mul(Kb).xyz.varying(`v_positionWorld`),Yb=Kb.transformDirection(Ib).varying(`v_positionWorldDirection`).normalize().toVar(`positionWorldDirection`),Xb=Hb.mul(Kb).xyz.varying(`v_positionView`),Zb=Xb.negate().varying(`v_positionViewDirection`).normalize().toVar(`positionViewDirection`),Qb=class extends R{static get type(){return`FrontFacingNode`}constructor(){super(`bool`),this.isFrontFacingNode=!0}generate(e){let{renderer:t,material:n}=e;return t.coordinateSystem===2e3&&n.side===1?`false`:e.getFrontFacing()}},$b=H(Qb),ex=G($b).mul(2).sub(1),tx=lb(`normal`,`vec3`),nx=U(e=>e.geometry.hasAttribute(`normal`)===!1?(console.warn(`TSL.NormalNode: Vertex attribute "normal" not found on geometry.`),Y(0,1,0)):tx,`vec3`).once()().toVar(`normalLocal`),rx=Xb.dFdx().cross(Xb.dFdy()).normalize().toVar(`normalFlat`),ix=U(e=>{let t;return t=e.material.flatShading===!0?rx:Cy(ux(nx),`v_normalView`).normalize(),t},`vec3`).once()().toVar(`normalView`),ax=Cy(ix.transformDirection(wb),`v_normalWorld`).normalize().toVar(`normalWorld`),ox=U(e=>e.context.setupNormal(),`vec3`).once()().mul(ex).toVar(`transformedNormalView`),sx=ox.transformDirection(wb).toVar(`transformedNormalWorld`),cx=U(e=>e.context.setupClearcoatNormal(),`vec3`).once()().mul(ex).toVar(`transformedClearcoatNormalView`),lx=U(([e,t=Ib])=>{let n=Vg(t),r=e.div(Y(n[0].dot(n[0]),n[1].dot(n[1]),n[2].dot(n[2])));return n.mul(r).xyz}),ux=U(([e],t)=>{let n=t.renderer.nodes.modelNormalViewMatrix;if(n!==null)return n.transformDirection(e);let r=Bb.mul(e);return wb.transformDirection(r)}),dx=Z(0).onReference(({material:e})=>e).onRenderUpdate(({material:e})=>e.refractionRatio),fx=Zb.negate().reflect(ox),px=Zb.negate().refract(ox,dx),mx=fx.transformDirection(wb).toVar(`reflectVector`),hx=px.transformDirection(wb).toVar(`reflectVector`),gx=class extends hb{static get type(){return`CubeTextureNode`}constructor(e,t=null,n=null,r=null){super(e,t,n,r),this.isCubeTextureNode=!0}getInputType(){return`cubeTexture`}getDefaultUV(){let e=this.value;return e.mapping===301?mx:e.mapping===302?hx:(console.error(`THREE.CubeTextureNode: Mapping "%s" not supported.`,e.mapping),Y(0,0,0))}setUpdateMatrix(){}setupUV(e,t){let n=this.value;return e.renderer.coordinateSystem===2001||!n.isRenderTargetTexture?Y(t.x.negate(),t.yz):t}generateUV(e,t){return t.build(e,`vec3`)}},_x=V(gx),vx=class extends e_{static get type(){return`BufferNode`}constructor(e,t,n=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferCount=n}getElementType(e){return this.getNodeType(e)}getInputType(){return`buffer`}},yx=(e,t,n)=>B(new vx(e,t,n)),bx=class extends Lh{static get type(){return`UniformArrayElementNode`}constructor(e,t){super(e,t),this.isArrayBufferElementNode=!0}generate(e){let t=super.generate(e),n=this.getNodeType();return e.format(t,`vec4`,n)}},xx=class extends vx{static get type(){return`UniformArrayNode`}constructor(e,t=null){super(null,`vec4`),this.array=e,this.elementType=t,this._elementType=null,this._elementLength=0,this.updateType=L.RENDER,this.isArrayBufferNode=!0}getElementType(){return this.elementType||this._elementType}getElementLength(){return this._elementLength}update(){let{array:e,value:t}=this,n=this.getElementLength(),r=this.getElementType();if(n===1)for(let n=0;nB(new xx(e,t)),Cx=(e,t)=>(console.warn(`TSL.UniformArrayNode: uniforms() has been renamed to uniformArray().`),B(new xx(e,t))),wx=class extends Lh{static get type(){return`ReferenceElementNode`}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){let t=super.generate(e),n=this.referenceNode.getNodeType(),r=this.getNodeType();return e.format(t,n,r)}},Tx=class extends R{static get type(){return`ReferenceNode`}constructor(e,t,n=null,r=null){super(),this.property=e,this.uniformType=t,this.object=n,this.count=r,this.properties=e.split(`.`),this.reference=n,this.node=null,this.group=null,this.name=null,this.updateType=L.OBJECT}element(e){return B(new wx(this,B(e)))}setGroup(e){return this.group=e,this}label(e){return this.name=e,this}setNodeType(e){let t=null;t=this.count===null?Array.isArray(this.getValueFromReference())?Sx(null,e):e===`texture`?gb(null):e===`cubeTexture`?_x(null):Z(null,e):yx(null,e,this.count),this.group!==null&&t.setGroup(this.group),this.name!==null&&t.label(this.name),this.node=t.getSelf()}getNodeType(e){return this.node===null&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){let{properties:t}=this,n=e[t[0]];for(let e=1;eB(new Tx(e,t,n)),Dx=(e,t,n,r)=>B(new Tx(e,t,r,n)),Ox=class extends Tx{static get type(){return`MaterialReferenceNode`}constructor(e,t,n=null){super(e,t,n),this.material=n,this.isMaterialReferenceNode=!0}updateReference(e){return this.reference=this.material===null?e.material:this.material,this.reference}},kx=(e,t,n)=>B(new Ox(e,t,n)),Ax=U(e=>(e.geometry.hasAttribute(`tangent`)===!1&&e.geometry.computeTangents(),lb(`tangent`,`vec4`)))(),jx=Ax.xyz.toVar(`tangentLocal`),Mx=Hb.mul(X(jx,0)).xyz.varying(`v_tangentView`).normalize().toVar(`tangentView`),Nx=Mx.transformDirection(wb).varying(`v_tangentWorld`).normalize().toVar(`tangentWorld`),Px=Mx.toVar(`transformedTangentView`),Fx=Px.transformDirection(wb).normalize().toVar(`transformedTangentWorld`),Ix=e=>e.mul(Ax.w).xyz,Lx=Cy(Ix(tx.cross(Ax)),`v_bitangentGeometry`).normalize().toVar(`bitangentGeometry`),Rx=Cy(Ix(nx.cross(jx)),`v_bitangentLocal`).normalize().toVar(`bitangentLocal`),zx=Cy(Ix(ix.cross(Mx)),`v_bitangentView`).normalize().toVar(`bitangentView`),Bx=Cy(Ix(ax.cross(Nx)),`v_bitangentWorld`).normalize().toVar(`bitangentWorld`),Vx=Ix(ox.cross(Px)).normalize().toVar(`transformedBitangentView`),Hx=Vx.transformDirection(wb).normalize().toVar(`transformedBitangentWorld`),Ux=Vg(Mx,zx,ix),Wx=Zb.mul(Ux),Gx=(e,t)=>e.sub(Wx.mul(t)),Kx=(()=>{let e=v_.cross(Zb);return e=e.cross(v_).normalize(),e=oy(e,ox,g_.mul(o_.oneMinus()).oneMinus().pow2().pow2()).normalize(),e})(),qx=U(e=>{let{eye_pos:t,surf_norm:n,mapN:r,uv:i}=e,a=t.dFdx(),o=t.dFdy(),s=i.dFdx(),c=i.dFdy(),l=n,u=o.cross(l),d=l.cross(a),f=u.mul(s.x).add(d.mul(c.x)),p=u.mul(s.y).add(d.mul(c.y)),m=f.dot(f).max(p.dot(p)),h=ex.mul(m.inverseSqrt());return L_(f.mul(r.x,h),p.mul(r.y,h),l.mul(r.z)).normalize()}),Jx=class extends zh{static get type(){return`NormalMapNode`}constructor(e,t=null){super(`vec3`),this.node=e,this.scaleNode=t,this.normalMapType=0}setup(e){let{normalMapType:t,scaleNode:n}=this,r=this.node.mul(2).sub(1);n!==null&&(r=Y(r.xy.mul(n),r.z));let i=null;return t===1?i=ux(r):t===0&&(i=e.hasGeometryAttribute(`tangent`)===!0?Ux.mul(r).normalize():qx({eye_pos:Xb,surf_norm:ix,mapN:r,uv:ub()})),i}},Yx=V(Jx),Xx=U(({textureNode:e,bumpScale:t})=>{let n=t=>e.cache().context({getUV:e=>t(e.uvNode||ub()),forceUVContext:!0}),r=G(n(e=>e));return J(G(n(e=>e.add(e.dFdx()))).sub(r),G(n(e=>e.add(e.dFdy()))).sub(r)).mul(t)}),Zx=U(e=>{let{surf_pos:t,surf_norm:n,dHdxy:r}=e,i=t.dFdx().normalize(),a=t.dFdy().normalize(),o=n,s=a.cross(o),c=o.cross(i),l=i.dot(s).mul(ex),u=l.sign().mul(r.x.mul(s).add(r.y.mul(c)));return l.abs().mul(n).sub(u).normalize()}),Qx=class extends zh{static get type(){return`BumpMapNode`}constructor(e,t=null){super(`vec3`),this.textureNode=e,this.scaleNode=t}setup(){let e=this.scaleNode===null?1:this.scaleNode;return Zx({surf_pos:Xb,surf_norm:ix,dHdxy:Xx({textureNode:this.textureNode,bumpScale:e})})}},$x=V(Qx),eS=new Map,$=class e extends R{static get type(){return`MaterialNode`}constructor(e){super(),this.scope=e}getCache(e,t){let n=eS.get(e);return n===void 0&&(n=kx(e,t),eS.set(e,n)),n}getFloat(e){return this.getCache(e,`float`)}getColor(e){return this.getCache(e,`color`)}getTexture(e){return this.getCache(e===`map`?`map`:e+`Map`,`texture`)}setup(t){let n=t.context.material,r=this.scope,i=null;if(r===e.COLOR){let e=n.color===void 0?Y():this.getColor(r);i=n.map&&n.map.isTexture===!0?e.mul(this.getTexture(`map`)):e}else if(r===e.OPACITY){let e=this.getFloat(r);i=n.alphaMap&&n.alphaMap.isTexture===!0?e.mul(this.getTexture(`alpha`)):e}else if(r===e.SPECULAR_STRENGTH)i=n.specularMap&&n.specularMap.isTexture===!0?this.getTexture(`specular`).r:G(1);else if(r===e.SPECULAR_INTENSITY){let e=this.getFloat(r);i=n.specularMap?e.mul(this.getTexture(r).a):e}else if(r===e.SPECULAR_COLOR){let e=this.getColor(r);i=n.specularColorMap&&n.specularColorMap.isTexture===!0?e.mul(this.getTexture(r).rgb):e}else if(r===e.ROUGHNESS){let e=this.getFloat(r);i=n.roughnessMap&&n.roughnessMap.isTexture===!0?e.mul(this.getTexture(r).g):e}else if(r===e.METALNESS){let e=this.getFloat(r);i=n.metalnessMap&&n.metalnessMap.isTexture===!0?e.mul(this.getTexture(r).b):e}else if(r===e.EMISSIVE){let e=this.getFloat(`emissiveIntensity`),t=this.getColor(r).mul(e);i=n.emissiveMap&&n.emissiveMap.isTexture===!0?t.mul(this.getTexture(r)):t}else if(r===e.NORMAL)n.normalMap?(i=Yx(this.getTexture(`normal`),this.getCache(`normalScale`,`vec2`)),i.normalMapType=n.normalMapType):i=n.bumpMap?$x(this.getTexture(`bump`).r,this.getFloat(`bumpScale`)):ix;else if(r===e.CLEARCOAT){let e=this.getFloat(r);i=n.clearcoatMap&&n.clearcoatMap.isTexture===!0?e.mul(this.getTexture(r).r):e}else if(r===e.CLEARCOAT_ROUGHNESS){let e=this.getFloat(r);i=n.clearcoatRoughnessMap&&n.clearcoatRoughnessMap.isTexture===!0?e.mul(this.getTexture(r).r):e}else if(r===e.CLEARCOAT_NORMAL)i=n.clearcoatNormalMap?Yx(this.getTexture(r),this.getCache(r+`Scale`,`vec2`)):ix;else if(r===e.SHEEN){let e=this.getColor(`sheenColor`).mul(this.getFloat(`sheen`));i=n.sheenColorMap&&n.sheenColorMap.isTexture===!0?e.mul(this.getTexture(`sheenColor`).rgb):e}else if(r===e.SHEEN_ROUGHNESS){let e=this.getFloat(r);i=n.sheenRoughnessMap&&n.sheenRoughnessMap.isTexture===!0?e.mul(this.getTexture(r).a):e,i=i.clamp(.07,1)}else if(r===e.ANISOTROPY)if(n.anisotropyMap&&n.anisotropyMap.isTexture===!0){let e=this.getTexture(r);i=Bg(RS.x,RS.y,RS.y.negate(),RS.x).mul(e.rg.mul(2).sub(J(1)).normalize().mul(e.b))}else i=RS;else if(r===e.IRIDESCENCE_THICKNESS){let e=Ex(`1`,`float`,n.iridescenceThicknessRange);if(n.iridescenceThicknessMap){let t=Ex(`0`,`float`,n.iridescenceThicknessRange);i=e.sub(t).mul(this.getTexture(r).g).add(t)}else i=e}else if(r===e.TRANSMISSION){let e=this.getFloat(r);i=n.transmissionMap?e.mul(this.getTexture(r).r):e}else if(r===e.THICKNESS){let e=this.getFloat(r);i=n.thicknessMap?e.mul(this.getTexture(r).g):e}else if(r===e.IOR)i=this.getFloat(r);else if(r===e.LIGHT_MAP)i=this.getTexture(r).rgb.mul(this.getFloat(`lightMapIntensity`));else if(r===e.AO_MAP)i=this.getTexture(r).r.sub(1).mul(this.getFloat(`aoMapIntensity`)).add(1);else{let e=this.getNodeType(t);i=this.getCache(r,e)}return i}};$.ALPHA_TEST=`alphaTest`,$.COLOR=`color`,$.OPACITY=`opacity`,$.SHININESS=`shininess`,$.SPECULAR=`specular`,$.SPECULAR_STRENGTH=`specularStrength`,$.SPECULAR_INTENSITY=`specularIntensity`,$.SPECULAR_COLOR=`specularColor`,$.REFLECTIVITY=`reflectivity`,$.ROUGHNESS=`roughness`,$.METALNESS=`metalness`,$.NORMAL=`normal`,$.CLEARCOAT=`clearcoat`,$.CLEARCOAT_ROUGHNESS=`clearcoatRoughness`,$.CLEARCOAT_NORMAL=`clearcoatNormal`,$.EMISSIVE=`emissive`,$.ROTATION=`rotation`,$.SHEEN=`sheen`,$.SHEEN_ROUGHNESS=`sheenRoughness`,$.ANISOTROPY=`anisotropy`,$.IRIDESCENCE=`iridescence`,$.IRIDESCENCE_IOR=`iridescenceIOR`,$.IRIDESCENCE_THICKNESS=`iridescenceThickness`,$.IOR=`ior`,$.TRANSMISSION=`transmission`,$.THICKNESS=`thickness`,$.ATTENUATION_DISTANCE=`attenuationDistance`,$.ATTENUATION_COLOR=`attenuationColor`,$.LINE_SCALE=`scale`,$.LINE_DASH_SIZE=`dashSize`,$.LINE_GAP_SIZE=`gapSize`,$.LINE_WIDTH=`linewidth`,$.LINE_DASH_OFFSET=`dashOffset`,$.POINT_WIDTH=`pointWidth`,$.DISPERSION=`dispersion`,$.LIGHT_MAP=`light`,$.AO_MAP=`ao`;var tS=H($,$.ALPHA_TEST),nS=H($,$.COLOR),rS=H($,$.SHININESS),iS=H($,$.EMISSIVE),aS=H($,$.OPACITY),oS=H($,$.SPECULAR),sS=H($,$.SPECULAR_INTENSITY),cS=H($,$.SPECULAR_COLOR),lS=H($,$.SPECULAR_STRENGTH),uS=H($,$.REFLECTIVITY),dS=H($,$.ROUGHNESS),fS=H($,$.METALNESS),pS=H($,$.NORMAL).context({getUV:null}),mS=H($,$.CLEARCOAT),hS=H($,$.CLEARCOAT_ROUGHNESS),gS=H($,$.CLEARCOAT_NORMAL).context({getUV:null}),_S=H($,$.ROTATION),vS=H($,$.SHEEN),yS=H($,$.SHEEN_ROUGHNESS),bS=H($,$.ANISOTROPY),xS=H($,$.IRIDESCENCE),SS=H($,$.IRIDESCENCE_IOR),CS=H($,$.IRIDESCENCE_THICKNESS),wS=H($,$.TRANSMISSION),TS=H($,$.THICKNESS),ES=H($,$.IOR),DS=H($,$.ATTENUATION_DISTANCE),OS=H($,$.ATTENUATION_COLOR),kS=H($,$.LINE_SCALE),AS=H($,$.LINE_DASH_SIZE),jS=H($,$.LINE_GAP_SIZE),MS=H($,$.LINE_WIDTH),NS=H($,$.LINE_DASH_OFFSET),PS=H($,$.POINT_WIDTH),FS=H($,$.DISPERSION),IS=H($,$.LIGHT_MAP),LS=H($,$.AO_MAP),RS=Z(new A).onReference(function(e){return e.material}).onRenderUpdate(function({material:e}){this.value.set(e.anisotropy*Math.cos(e.anisotropyRotation),e.anisotropy*Math.sin(e.anisotropyRotation))}),zS=class extends zh{static get type(){return`ModelViewProjectionNode`}constructor(e=null){super(`vec4`),this.positionNode=e}setup(e){if(e.shaderStage===`fragment`)return Cy(e.context.mvp);let t=this.positionNode||Kb,n=e.renderer.nodes.modelViewMatrix||Hb;return Sb.mul(n).mul(t)}},BS=V(zS),VS=class e extends R{static get type(){return`IndexNode`}constructor(e){super(`uint`),this.scope=e,this.isInstanceIndexNode=!0}generate(t){let n=this.getNodeType(t),r=this.scope,i;if(r===e.VERTEX)i=t.getVertexIndex();else if(r===e.INSTANCE)i=t.getInstanceIndex();else if(r===e.DRAW)i=t.getDrawIndex();else if(r===e.INVOCATION_LOCAL)i=t.getInvocationLocalIndex();else if(r===e.INVOCATION_SUBGROUP)i=t.getInvocationSubgroupIndex();else if(r===e.SUBGROUP)i=t.getSubgroupIndex();else throw Error(`THREE.IndexNode: Unknown scope: `+r);let a;return a=t.shaderStage===`vertex`||t.shaderStage===`compute`?i:Cy(this).build(t,n),a}};VS.VERTEX=`vertex`,VS.INSTANCE=`instance`,VS.SUBGROUP=`subgroup`,VS.INVOCATION_LOCAL=`invocationLocal`,VS.INVOCATION_SUBGROUP=`invocationSubgroup`,VS.DRAW=`draw`;var HS=H(VS,VS.VERTEX),US=H(VS,VS.INSTANCE),WS=H(VS,VS.SUBGROUP),GS=H(VS,VS.INVOCATION_SUBGROUP),KS=H(VS,VS.INVOCATION_LOCAL),qS=H(VS,VS.DRAW),JS=class extends R{static get type(){return`InstanceNode`}constructor(e){super(`void`),this.instanceMesh=e,this.instanceMatrixNode=null,this.instanceColorNode=null,this.updateType=L.FRAME,this.buffer=null,this.bufferColor=null}setup(e){let t=this.instanceMatrixNode,n=this.instanceColorNode,r=this.instanceMesh;if(t===null){let e=r.instanceMatrix;if(r.count<=1e3)t=yx(e.array,`mat4`,Math.max(r.count,1)).element(US);else{let n=new Cm(e.array,16,1);this.buffer=n;let r=e.usage===35048?Gy:Wy;t=Hg(r(n,`vec4`,16,0),r(n,`vec4`,16,4),r(n,`vec4`,16,8),r(n,`vec4`,16,12))}this.instanceMatrixNode=t}let i=r.instanceColor;if(i&&n===null){let e=new kl(i.array,3),t=i.usage===35048?Gy:Wy;this.bufferColor=e,n=Y(t(e,`vec3`,3,0)),this.instanceColorNode=n}let a=t.mul(Kb).xyz;if(Kb.assign(a),e.hasGeometryAttribute(`normal`)){let e=lx(nx,t);nx.assign(e)}this.instanceColorNode!==null&&r_(`vec3`,`vInstanceColor`).assign(this.instanceColorNode)}update(){this.instanceMesh.instanceMatrix.usage!==35048&&this.buffer!=null&&this.instanceMesh.instanceMatrix.version!==this.buffer.version&&(this.buffer.version=this.instanceMesh.instanceMatrix.version),this.instanceMesh.instanceColor&&this.instanceMesh.instanceColor.usage!==35048&&this.bufferColor!=null&&this.instanceMesh.instanceColor.version!==this.bufferColor.version&&(this.bufferColor.version=this.instanceMesh.instanceColor.version)}},YS=V(JS),XS=class extends R{static get type(){return`BatchNode`}constructor(e){super(`void`),this.batchMesh=e,this.batchingIdNode=null}setup(e){this.batchingIdNode===null&&(e.getDrawIndex()===null?this.batchingIdNode=US:this.batchingIdNode=qS);let t=U(([e])=>{let t=fb(_b(this.batchMesh._indirectTexture),0),n=K(e).modInt(K(t)),r=K(e).div(K(t));return _b(this.batchMesh._indirectTexture,jg(n,r)).x}).setLayout({name:`getIndirectIndex`,type:`uint`,inputs:[{name:`id`,type:`int`}]})(K(this.batchingIdNode)),n=this.batchMesh._matricesTexture,r=fb(_b(n),0),i=G(t).mul(4).toInt().toVar(),a=i.modInt(r),o=i.div(K(r)),s=Hg(_b(n,jg(a,o)),_b(n,jg(a.add(1),o)),_b(n,jg(a.add(2),o)),_b(n,jg(a.add(3),o))),c=this.batchMesh._colorsTexture;if(c!==null){let e=U(([e])=>{let t=fb(_b(c),0).x,n=e;return _b(c,jg(n.modInt(t),n.div(t))).rgb}).setLayout({name:`getBatchingColor`,type:`vec3`,inputs:[{name:`id`,type:`int`}]})(t);r_(`vec3`,`vBatchColor`).assign(e)}let l=Vg(s);Kb.assign(s.mul(Kb));let u=nx.div(Y(l[0].dot(l[0]),l[1].dot(l[1]),l[2].dot(l[2]))),d=l.mul(u).xyz;nx.assign(d),e.hasGeometryAttribute(`tangent`)&&jx.mulAssign(l)}},ZS=V(XS),QS=new WeakMap,$S=class extends R{static get type(){return`SkinningNode`}constructor(e,t=!1){super(`void`),this.skinnedMesh=e,this.useReference=t,this.updateType=L.OBJECT,this.skinIndexNode=lb(`skinIndex`,`uvec4`),this.skinWeightNode=lb(`skinWeight`,`vec4`);let n,r,i;t?(n=Ex(`bindMatrix`,`mat4`),r=Ex(`bindMatrixInverse`,`mat4`),i=Dx(`skeleton.boneMatrices`,`mat4`,e.skeleton.bones.length)):(n=Z(e.bindMatrix,`mat4`),r=Z(e.bindMatrixInverse,`mat4`),i=yx(e.skeleton.boneMatrices,`mat4`,e.skeleton.bones.length)),this.bindMatrixNode=n,this.bindMatrixInverseNode=r,this.boneMatricesNode=i,this.previousBoneMatricesNode=null}getSkinnedPosition(e=this.boneMatricesNode,t=Kb){let{skinIndexNode:n,skinWeightNode:r,bindMatrixNode:i,bindMatrixInverseNode:a}=this,o=e.element(n.x),s=e.element(n.y),c=e.element(n.z),l=e.element(n.w),u=i.mul(t),d=L_(o.mul(r.x).mul(u),s.mul(r.y).mul(u),c.mul(r.z).mul(u),l.mul(r.w).mul(u));return a.mul(d).xyz}getSkinnedNormal(e=this.boneMatricesNode,t=nx){let{skinIndexNode:n,skinWeightNode:r,bindMatrixNode:i,bindMatrixInverseNode:a}=this,o=e.element(n.x),s=e.element(n.y),c=e.element(n.z),l=e.element(n.w),u=L_(r.x.mul(o),r.y.mul(s),r.z.mul(c),r.w.mul(l));return u=a.mul(u).mul(i),u.transformDirection(t).xyz}getPreviousSkinnedPosition(e){let t=e.object;return this.previousBoneMatricesNode===null&&(t.skeleton.previousBoneMatrices=new Float32Array(t.skeleton.boneMatrices),this.previousBoneMatricesNode=Dx(`skeleton.previousBoneMatrices`,`mat4`,t.skeleton.bones.length)),this.getSkinnedPosition(this.previousBoneMatricesNode,qb)}needsPreviousBoneMatrices(e){let t=e.renderer.getMRT();return t&&t.has(`velocity`)}setup(e){this.needsPreviousBoneMatrices(e)&&qb.assign(this.getPreviousSkinnedPosition(e));let t=this.getSkinnedPosition();if(Kb.assign(t),e.hasGeometryAttribute(`normal`)){let t=this.getSkinnedNormal();nx.assign(t),e.hasGeometryAttribute(`tangent`)&&jx.assign(t)}}generate(e,t){if(t!==`void`)return Kb.build(e,t)}update(e){let t=(this.useReference?e.object:this.skinnedMesh).skeleton;QS.get(t)!==e.frameId&&(QS.set(t,e.frameId),this.previousBoneMatricesNode!==null&&t.previousBoneMatrices.set(t.boneMatrices),t.update())}},eC=e=>B(new $S(e)),tC=e=>B(new $S(e,!0)),nC=class extends R{static get type(){return`LoopNode`}constructor(e=[]){super(),this.params=e}getVarName(e){return String.fromCharCode(105+e)}getProperties(e){let t=e.getNodeProperties(this);if(t.stackNode!==void 0)return t;let n={};for(let e=0,t=this.params.length-1;e=`):a!==void 0&&i===void 0&&(i=`0`,c=`<`),c===void 0&&(c=Number(i)>Number(a)?`>=`:`<`));let u={start:i,end:a},d=u.start,f=u.end,p=``,m=``,h=``;l||=s===`int`||s===`uint`?c.includes(`<`)?`++`:`--`:c.includes(`<`)?`+= 1.`:`-= 1.`,p+=e.getVar(s,o)+` = `+d,m+=o+` `+c+` `+f,h+=o+` `+l;let g=`for ( ${p}; ${m}; ${h} )`;e.addFlowCode((t===0?` -`:``)+e.tab+g+` { - -`).addFlowTab()}let i=r.build(e,`void`),a=t.returnsNode?t.returnsNode.build(e):``;e.removeFlowTab().addFlowCode(` -`+e.tab+i);for(let t=0,n=this.params.length-1;tB(new nC(wg(e,`int`))).append(),iC=()=>nb(`continue`).append(),aC=()=>nb(`break`).append(),oC=(...e)=>(console.warn(`TSL.LoopNode: loop() has been renamed to Loop().`),rC(...e)),sC=new WeakMap,cC=new Fn,lC=U(({bufferMap:e,influence:t,stride:n,width:r,depth:i,offset:a})=>{let o=K(HS).mul(n).add(a),s=o.div(r);return _b(e,jg(o.sub(s.mul(r)),s)).depth(i).mul(t)});function uC(e){let t=e.morphAttributes.position!==void 0,n=e.morphAttributes.normal!==void 0,r=e.morphAttributes.color!==void 0,i=e.morphAttributes.position||e.morphAttributes.normal||e.morphAttributes.color,a=i===void 0?0:i.length,o=sC.get(e);if(o===void 0||o.count!==a){o!==void 0&&o.texture.dispose();let i=e.morphAttributes.position||[],s=e.morphAttributes.normal||[],c=e.morphAttributes.color||[],l=0;t===!0&&(l=1),n===!0&&(l=2),r===!0&&(l=3);let u=e.attributes.position.count*l,d=1,f=4096;u>f&&(d=Math.ceil(u/f),u=f);let p=new Float32Array(u*d*4*a),m=new Rn(p,u,d,a);m.type=E,m.needsUpdate=!0;let h=l*4;for(let e=0;e{let t=G(0).toVar();this.mesh.count>1&&this.mesh.morphTexture!==null&&this.mesh.morphTexture!==void 0?t.assign(_b(this.mesh.morphTexture,jg(K(e).add(1),K(US))).r):t.assign(Ex(`morphTargetInfluences`,`float`).element(e).toVar()),n===!0&&Kb.addAssign(lC({bufferMap:o,influence:t,stride:s,width:l,depth:e,offset:K(0)})),r===!0&&nx.addAssign(lC({bufferMap:o,influence:t,stride:s,width:l,depth:e,offset:K(1)}))})}update(){let e=this.morphBaseInfluence;this.mesh.geometry.morphTargetsRelative?e.value=1:e.value=1-this.mesh.morphTargetInfluences.reduce((e,t)=>e+t,0)}},fC=V(dC),pC=e=>e.sort((e,t)=>e.id-t.id),mC=(e,t)=>{for(let n of t)if(n.isAnalyticLightNode&&n.light.id===e)return n;return null},hC=new WeakMap,gC=class extends R{static get type(){return`LightsNode`}constructor(e=[]){super(`vec3`),this.totalDiffuseNode=Y().toVar(`totalDiffuse`),this.totalSpecularNode=Y().toVar(`totalSpecular`),this.outgoingLightNode=Y().toVar(`outgoingLight`),this._lights=e,this._lightNodes=null,this._lightNodesHash=null,this.global=!0}getHash(e){if(this._lightNodesHash===null){this._lightNodes===null&&this.setupLightsNode(e);let t=[];for(let e of this._lightNodes)t.push(e.getHash());this._lightNodesHash=`lights-`+t.join(`,`)}return this._lightNodesHash}analyze(e){let t=e.getDataFromNode(this);for(let n of t.nodes)n.build(e)}setupLightsNode(e){let t=[],n=this._lightNodes,r=pC(this._lights),i=e.renderer.nodes.library;for(let e of r)if(e.isNode)t.push(B(e));else{let r=null;if(n!==null&&(r=mC(e.id,n)),r===null){let n=i.getLightNodeClass(e.constructor);if(n===null){console.warn(`LightsNode.setupNodeLights: Light node not found for ${e.constructor.name}`);continue}let r=null;hC.has(e)?r=hC.get(e):(r=new n(e),hC.set(e,r)),t.push(r)}}this._lightNodes=t}setup(e){this._lightNodes===null&&this.setupLightsNode(e);let t=e.context,n=t.lightingModel,r=this.outgoingLightNode;if(n){let{_lightNodes:i,totalDiffuseNode:a,totalSpecularNode:o}=this;t.outgoingLight=r;let s=e.addStack(),c=e.getDataFromNode(this);c.nodes=s.nodes,n.start(t,s,e);for(let t of i)t.build(e);n.indirect(t,s,e);let{backdrop:l,backdropAlpha:u}=t,{directDiffuse:d,directSpecular:f,indirectDiffuse:p,indirectSpecular:m}=t.reflectedLight,h=d.add(p);l!==null&&(h=Y(u===null?l:u.mix(h,l)),t.material.transparent=!0),a.assign(h),o.assign(f.add(m)),r.assign(a.add(o)),n.finish(t,s,e),r=r.bypass(e.removeStack())}return r}setLights(e){return this._lights=e,this._lightNodes=null,this._lightNodesHash=null,this}getLights(){return this._lights}},_C=V(gC),vC=class extends R{static get type(){return`LightingNode`}constructor(){super(`vec3`),this.isLightingNode=!0}generate(){console.warn(`Abstract function.`)}},yC=class extends vC{static get type(){return`AONode`}constructor(e=null){super(),this.aoNode=e}setup(e){e.context.ambientOcclusion.mulAssign(this.aoNode)}},bC=class extends _y{static get type(){return`LightingContextNode`}constructor(e,t=null,n=null,r=null){super(e),this.lightingModel=t,this.backdropNode=n,this.backdropAlphaNode=r,this._value=null}getContext(){let{backdropNode:e,backdropAlphaNode:t}=this,n={directDiffuse:Y().toVar(`directDiffuse`),directSpecular:Y().toVar(`directSpecular`),indirectDiffuse:Y().toVar(`indirectDiffuse`),indirectSpecular:Y().toVar(`indirectSpecular`)};return{radiance:Y().toVar(`radiance`),irradiance:Y().toVar(`irradiance`),iblIrradiance:Y().toVar(`iblIrradiance`),ambientOcclusion:G(1).toVar(`ambientOcclusion`),reflectedLight:n,backdrop:e,backdropAlpha:t}}setup(e){return this.value=this._value||=this.getContext(),this.value.lightingModel=this.lightingModel||e.context.lightingModel,super.setup(e)}},xC=V(bC),SC=class extends vC{static get type(){return`IrradianceNode`}constructor(e){super(),this.node=e}setup(e){e.context.irradiance.addAssign(this.node)}},CC,wC,TC=class e extends R{static get type(){return`ScreenNode`}constructor(e){super(),this.scope=e,this.isViewportNode=!0}getNodeType(){return this.scope===e.VIEWPORT?`vec4`:`vec2`}getUpdateType(){let t=L.NONE;return(this.scope===e.SIZE||this.scope===e.VIEWPORT)&&(t=L.RENDER),this.updateType=t,t}update({renderer:t}){let n=t.getRenderTarget();this.scope===e.VIEWPORT?n===null?(t.getViewport(wC),wC.multiplyScalar(t.getPixelRatio())):wC.copy(n.viewport):n===null?t.getDrawingBufferSize(CC):(CC.width=n.width,CC.height=n.height)}setup(){let t=this.scope,n=null;return n=t===e.SIZE?Z(CC||=new A):t===e.VIEWPORT?Z(wC||=new Fn):J(OC.div(DC)),n}generate(t){if(this.scope===e.COORDINATE){let e=t.getFragCoord();if(t.isFlipY()){let n=t.getNodeProperties(DC).outputNode.build(t);e=`${t.getType(`vec2`)}( ${e}.x, ${n}.y - ${e}.y )`}return e}return super.generate(t)}};TC.COORDINATE=`coordinate`,TC.VIEWPORT=`viewport`,TC.SIZE=`size`,TC.UV=`uv`;var EC=H(TC,TC.UV),DC=H(TC,TC.SIZE),OC=H(TC,TC.COORDINATE),kC=H(TC,TC.VIEWPORT),AC=kC.zw,jC=OC.sub(kC.xy),MC=jC.div(AC),NC=U(()=>(console.warn(`TSL.ViewportNode: "viewportResolution" is deprecated. Use "screenSize" instead.`),DC),`vec2`).once()(),PC=U(()=>(console.warn(`TSL.ViewportNode: "viewportTopLeft" is deprecated. Use "screenUV" instead.`),EC),`vec2`).once()(),FC=U(()=>(console.warn(`TSL.ViewportNode: "viewportBottomLeft" is deprecated. Use "screenUV.flipY()" instead.`),EC.flipY()),`vec2`).once()(),IC=new A,LC=class extends hb{static get type(){return`ViewportTextureNode`}constructor(e=EC,t=null,n=null){n===null&&(n=new Tu,n.minFilter=v),super(n,e,t),this.generateMipmaps=!1,this.isOutputTextureNode=!0,this.updateBeforeType=L.FRAME}updateBefore(e){let t=e.renderer;t.getDrawingBufferSize(IC);let n=this.value;(n.image.width!==IC.width||n.image.height!==IC.height)&&(n.image.width=IC.width,n.image.height=IC.height,n.needsUpdate=!0);let r=n.generateMipmaps;n.generateMipmaps=this.generateMipmaps,t.copyFramebufferToTexture(n),n.generateMipmaps=r}clone(){let e=new this.constructor(this.uvNode,this.levelNode,this.value);return e.generateMipmaps=this.generateMipmaps,e}},RC=V(LC),zC=V(LC,null,null,{generateMipmaps:!0}),BC=null,VC=class extends LC{static get type(){return`ViewportDepthTextureNode`}constructor(e=EC,t=null){BC===null&&(BC=new ho),super(e,t,BC)}},HC=V(VC),UC=class e extends R{static get type(){return`ViewportDepthNode`}constructor(e,t=null){super(`float`),this.scope=e,this.valueNode=t,this.isViewportDepthNode=!0}generate(t){let{scope:n}=this;return n===e.DEPTH_BASE?t.getFragDepth():super.generate(t)}setup({camera:t}){let{scope:n}=this,r=this.valueNode,i=null;return n===e.DEPTH_BASE?r!==null&&(i=JC().assign(r)):n===e.DEPTH?i=t.isPerspectiveCamera?KC(Xb.z,yb,bb):WC(Xb.z,yb,bb):n===e.LINEAR_DEPTH&&(i=r===null?WC(Xb.z,yb,bb):t.isPerspectiveCamera?WC(qC(r,yb,bb),yb,bb):r),i}};UC.DEPTH_BASE=`depthBase`,UC.DEPTH=`depth`,UC.LINEAR_DEPTH=`linearDepth`;var WC=(e,t,n)=>e.add(t).div(t.sub(n)),GC=(e,t,n)=>t.sub(n).mul(e).sub(t),KC=(e,t,n)=>t.add(e).mul(n).div(n.sub(t).mul(e)),qC=(e,t,n)=>t.mul(n).div(n.sub(t).mul(e).sub(n)),JC=V(UC,UC.DEPTH_BASE),YC=H(UC,UC.DEPTH),XC=V(UC,UC.LINEAR_DEPTH),ZC=XC(HC());YC.assign=e=>JC(e);var QC=class e extends R{static get type(){return`ClippingNode`}constructor(t=e.DEFAULT){super(),this.scope=t}setup(t){super.setup(t);let n=t.clippingContext,{localClipIntersection:r,localClippingCount:i,globalClippingCount:a}=n,o=a+i,s=r?o-i:o;return this.scope===e.ALPHA_TO_COVERAGE?this.setupAlphaToCoverage(n.planes,o,s):this.setupDefault(n.planes,o,s)}setupAlphaToCoverage(e,t,n){return U(()=>{let r=Sx(e),i=n_(`float`,`distanceToPlane`),a=n_(`float`,`distanceToGradient`),o=n_(`float`,`clipOpacity`);o.assign(1);let s;if(rC(n,({i:e})=>{s=r.element(e),i.assign(Xb.dot(s.xyz).negate().add(s.w)),a.assign(i.fwidth().div(2)),o.mulAssign(uy(a.negate(),a,i)),o.equal(0).discard()}),n{s=r.element(t),i.assign(Xb.dot(s.xyz).negate().add(s.w)),a.assign(i.fwidth().div(2)),e.mulAssign(uy(a.negate(),a,i).oneMinus())}),o.mulAssign(e.oneMinus())}i_.a.mulAssign(o),i_.a.equal(0).discard()})()}setupDefault(e,t,n){return U(()=>{let r=Sx(e),i;if(rC(n,({i:e})=>{i=r.element(e),Xb.dot(i.xyz).greaterThan(i.w).discard()}),n{i=r.element(t),e.assign(Xb.dot(i.xyz).greaterThan(i.w).and(e))}),e.discard()}})()}};QC.ALPHA_TO_COVERAGE=`alphaToCoverage`,QC.DEFAULT=`default`;var $C=()=>B(new QC),ew=()=>B(new QC(QC.ALPHA_TO_COVERAGE)),tw=class extends di{static get type(){return`NodeMaterial`}constructor(){super(),this.isNodeMaterial=!0,this.type=this.constructor.type,this.forceSinglePass=!1,this.fog=!0,this.lights=!1,this.lightsNode=null,this.envNode=null,this.aoNode=null,this.colorNode=null,this.normalNode=null,this.opacityNode=null,this.backdropNode=null,this.backdropAlphaNode=null,this.alphaTestNode=null,this.positionNode=null,this.depthNode=null,this.shadowNode=null,this.shadowPositionNode=null,this.outputNode=null,this.mrtNode=null,this.fragmentNode=null,this.vertexNode=null}customProgramCacheKey(){return this.type+Ch(this)}build(e){this.setup(e)}setupObserver(e){return new vh(e)}setup(e){e.context.setupNormal=()=>this.setupNormal(e),e.addStack(),e.stack.outputNode=this.vertexNode||this.setupPosition(e),e.addFlow(`vertex`,e.removeStack()),e.addStack();let t,n=this.setupClipping(e);if(this.depthWrite===!0&&this.setupDepth(e),this.fragmentNode===null){this.setupDiffuseColor(e),this.setupVariants(e);let r=this.setupLighting(e);n!==null&&e.stack.add(n);let i=X(r,i_.a).max(0);if(t=this.setupOutput(e,i),S_.assign(t),this.outputNode!==null&&(t=this.outputNode),e.renderer.getRenderTarget()!==null){let n=e.renderer.getMRT(),r=this.mrtNode;n===null?r!==null&&(t=r):(t=n,r!==null&&(t=n.merge(r)))}}else{let n=this.fragmentNode;n.isOutputStructNode!==!0&&(n=X(n)),t=this.setupOutput(e,n)}e.stack.outputNode=t,e.addFlow(`fragment`,e.removeStack()),e.monitor=this.setupObserver(e)}setupClipping(e){if(e.clippingContext===null)return null;let{globalClippingCount:t,localClippingCount:n}=e.clippingContext,r=null;if(t||n){let t=e.renderer.samples;this.alphaToCoverage&&t>1?r=ew():e.stack.add($C())}return r}setupDepth(e){let{renderer:t}=e,n=this.depthNode;if(n===null){let e=`getMRT`in t&&t.getMRT();e&&e.has(`depth`)?n=e.get(`depth`):t.logarithmicDepthBuffer===!0&&(n=BS().w.add(1).log2().mul(xb).mul(.5))}n!==null&&YC.assign(n).append()}setupPosition(e){let{object:t}=e,n=t.geometry;if(e.addStack(),(n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color)&&fC(t).append(),t.isSkinnedMesh===!0&&tC(t).append(),this.displacementMap){let e=kx(`displacementMap`,`texture`),t=kx(`displacementScale`,`float`),n=kx(`displacementBias`,`float`);Kb.addAssign(nx.normalize().mul(e.x.mul(t).add(n)))}t.isBatchedMesh&&ZS(t).append(),t.instanceMatrix&&t.instanceMatrix.isInstancedBufferAttribute===!0&&YS(t).append(),this.positionNode!==null&&Kb.assign(this.positionNode);let r=BS();return e.context.vertex=e.removeStack(),e.context.mvp=r,r}setupDiffuseColor({object:e,geometry:t}){let n=this.colorNode?X(this.colorNode):nS;this.vertexColors===!0&&t.hasAttribute(`color`)&&(n=X(n.xyz.mul(lb(`color`,`vec3`)),n.a)),e.instanceColor&&(n=r_(`vec3`,`vInstanceColor`).mul(n)),e.isBatchedMesh&&e._colorsTexture&&(n=r_(`vec3`,`vBatchColor`).mul(n)),i_.assign(n);let r=this.opacityNode?G(this.opacityNode):aS;if(i_.a.assign(i_.a.mul(r)),this.alphaTestNode!==null||this.alphaTest>0){let e=this.alphaTestNode===null?tS:G(this.alphaTestNode);i_.a.lessThanEqual(e).discard()}this.transparent===!1&&this.blending===1&&this.alphaToCoverage===!1&&i_.a.assign(1)}setupVariants(){}setupOutgoingLight(){return this.lights===!0?Y(0):i_.rgb}setupNormal(){return this.normalNode?Y(this.normalNode):pS}setupEnvironment(){let e=null;return this.envNode?e=this.envNode:this.envMap&&(e=this.envMap.isCubeTexture?kx(`envMap`,`cubeTexture`):kx(`envMap`,`texture`)),e}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new SC(IS)),t}setupLights(e){let t=[],n=this.setupEnvironment(e);n&&n.isLightingNode&&t.push(n);let r=this.setupLightMap(e);if(r&&r.isLightingNode&&t.push(r),this.aoNode!==null||e.material.aoMap){let e=this.aoNode===null?LS:this.aoNode;t.push(new yC(e))}let i=this.lightsNode||e.lightsNode;return t.length>0&&(i=_C([...i.getLights(),...t])),i}setupLightingModel(){}setupLighting(e){let{material:t}=e,{backdropNode:n,backdropAlphaNode:r,emissiveNode:i}=this,a=this.lights===!0||this.lightsNode!==null?this.setupLights(e):null,o=this.setupOutgoingLight(e);return a&&a.getScope().getLights().length>0?o=xC(a,this.setupLightingModel(e),n,r):n!==null&&(o=Y(r===null?n:oy(o,n,r))),(i&&i.isNode===!0||t.emissive&&t.emissive.isColor===!0)&&(a_.assign(Y(i||iS)),o=o.add(a_)),o}setupOutput(e,t){if(this.fog===!0){let n=e.fogNode;n&&(t=X(n.mix(t.rgb,n.colorNode),t.a))}return t}setDefaultValues(e){for(let t in e){let n=e[t];this[t]===void 0&&(this[t]=n,n&&n.clone&&(this[t]=n.clone()))}let t=Object.getOwnPropertyDescriptors(e.constructor.prototype);for(let e in t)Object.getOwnPropertyDescriptor(this.constructor.prototype,e)===void 0&&t[e].get!==void 0&&Object.defineProperty(this.constructor.prototype,e,t[e])}toJSON(e){let t=e===void 0||typeof e==`string`;t&&(e={textures:{},images:{},nodes:{}});let n=di.prototype.toJSON.call(this,e),r=wh(this);n.inputNodes={};for(let{property:t,childNode:i}of r)n.inputNodes[t]=i.toJSON(e).uuid;function i(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(t){let t=i(e.textures),r=i(e.images),a=i(e.nodes);t.length>0&&(n.textures=t),r.length>0&&(n.images=r),a.length>0&&(n.nodes=a)}return n}copy(e){return this.lightsNode=e.lightsNode,this.envNode=e.envNode,this.colorNode=e.colorNode,this.normalNode=e.normalNode,this.opacityNode=e.opacityNode,this.backdropNode=e.backdropNode,this.backdropAlphaNode=e.backdropAlphaNode,this.alphaTestNode=e.alphaTestNode,this.positionNode=e.positionNode,this.depthNode=e.depthNode,this.shadowNode=e.shadowNode,this.shadowPositionNode=e.shadowPositionNode,this.outputNode=e.outputNode,this.mrtNode=e.mrtNode,this.fragmentNode=e.fragmentNode,this.vertexNode=e.vertexNode,super.copy(e)}},nw=new _u,rw=class extends tw{static get type(){return`InstancedPointsNodeMaterial`}constructor(e={}){super(),this.lights=!1,this.useAlphaToCoverage=!0,this.useColor=e.vertexColors,this.pointWidth=1,this.pointColorNode=null,this.pointWidthNode=null,this.setDefaultValues(nw),this.setValues(e)}setup(e){this.setupShaders(e),super.setup(e)}setupShaders({renderer:e}){let t=this.alphaToCoverage,n=this.useColor;this.vertexNode=U(()=>{let e=lb(`instancePosition`).xyz,t=X(Hb.mul(X(e,1))),n=kC.z.div(kC.w),r=Sb.mul(t),i=Gb.xy.toVar();return i.mulAssign(this.pointWidthNode?this.pointWidthNode:PS),i.assign(i.div(kC.z)),i.y.assign(i.y.mul(n)),i.assign(i.mul(r.w)),r.addAssign(X(i,0,0)),r})(),this.fragmentNode=U(()=>{let r=G(1).toVar(),i=ay(ub().mul(2).sub(1));if(t&&e.samples>1){let e=G(i.fwidth()).toVar();r.assign(uy(e.oneMinus(),e.add(1),i).oneMinus())}else i.greaterThan(1).discard();let a;return a=this.pointColorNode?this.pointColorNode:n?lb(`instanceColor`).mul(nS):nS,r.mulAssign(aS),X(a,r)})()}get alphaToCoverage(){return this.useAlphaToCoverage}set alphaToCoverage(e){this.useAlphaToCoverage!==e&&(this.useAlphaToCoverage=e,this.needsUpdate=!0)}},iw=new ru,aw=class extends tw{static get type(){return`LineBasicNodeMaterial`}constructor(e){super(),this.isLineBasicNodeMaterial=!0,this.lights=!1,this.setDefaultValues(iw),this.setValues(e)}},ow=new Tf,sw=class extends tw{static get type(){return`LineDashedNodeMaterial`}constructor(e){super(),this.isLineDashedNodeMaterial=!0,this.lights=!1,this.setDefaultValues(ow),this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.setValues(e)}setupVariants(){let e=this.offsetNode,t=this.dashScaleNode?G(this.dashScaleNode):kS,n=this.dashSizeNode?G(this.dashSizeNode):AS,r=this.dashSizeNode?G(this.dashGapNode):jS;C_.assign(n),w_.assign(r);let i=Cy(lb(`lineDistance`).mul(t));(e?i.add(e):i).mod(C_.add(w_)).greaterThan(C_).discard()}},cw=new Tf,lw=class extends tw{static get type(){return`Line2NodeMaterial`}constructor(e={}){super(),this.lights=!1,this.setDefaultValues(cw),this.useAlphaToCoverage=!0,this.useColor=e.vertexColors,this.useDash=e.dashed,this.useWorldUnits=!1,this.dashOffset=0,this.lineWidth=1,this.lineColorNode=null,this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.setValues(e)}setup(e){this.setupShaders(e),super.setup(e)}setupShaders({renderer:e}){let t=this.alphaToCoverage,n=this.useColor,r=this.dashed,i=this.worldUnits,a=U(({start:e,end:t})=>{let n=Sb.element(2).element(2),r=Sb.element(3).element(2).mul(-.5).div(n).sub(e.z).div(t.z.sub(e.z));return X(oy(e.xyz,t.xyz,r),t.w)}).setLayout({name:`trimSegment`,type:`vec4`,inputs:[{name:`start`,type:`vec4`},{name:`end`,type:`vec4`}]});this.vertexNode=U(()=>{let e=lb(`instanceStart`),t=lb(`instanceEnd`),n=X(Hb.mul(X(e,1))).toVar(`start`),o=X(Hb.mul(X(t,1))).toVar(`end`);i&&(r_(`vec3`,`worldStart`).assign(n.xyz),r_(`vec3`,`worldEnd`).assign(o.xyz));let s=kC.z.div(kC.w);W(Sb.element(2).element(3).equal(-1),()=>{W(n.z.lessThan(0).and(o.z.greaterThan(0)),()=>{o.assign(a({start:n,end:o}))}).ElseIf(o.z.lessThan(0).and(n.z.greaterThanEqual(0)),()=>{n.assign(a({start:o,end:n}))})});let c=Sb.mul(n),l=Sb.mul(o),u=c.xyz.div(c.w),d=l.xyz.div(l.w),f=d.xy.sub(u.xy).toVar();f.x.assign(f.x.mul(s)),f.assign(f.normalize());let p=X().toVar();if(i){let e=o.xyz.sub(n.xyz).normalize(),t=oy(n.xyz,o.xyz,.5).normalize(),i=e.cross(t).normalize(),a=e.cross(i),s=r_(`vec4`,`worldPos`);s.assign(Gb.y.lessThan(.5).select(n,o));let c=MS.mul(.5);s.addAssign(X(Gb.x.lessThan(0).select(i.mul(c),i.mul(c).negate()),0)),r||(s.addAssign(X(Gb.y.lessThan(.5).select(e.mul(c).negate(),e.mul(c)),0)),s.addAssign(X(a.mul(c),0)),W(Gb.y.greaterThan(1).or(Gb.y.lessThan(0)),()=>{s.subAssign(X(a.mul(2).mul(c),0))})),p.assign(Sb.mul(s));let l=Y().toVar();l.assign(Gb.y.lessThan(.5).select(u,d)),p.z.assign(l.z.mul(p.w))}else{let e=J(f.y,f.x.negate()).toVar(`offset`);f.x.assign(f.x.div(s)),e.x.assign(e.x.div(s)),e.assign(Gb.x.lessThan(0).select(e.negate(),e)),W(Gb.y.lessThan(0),()=>{e.assign(e.sub(f))}).ElseIf(Gb.y.greaterThan(1),()=>{e.assign(e.add(f))}),e.assign(e.mul(MS)),e.assign(e.div(kC.w)),p.assign(Gb.y.lessThan(.5).select(c,l)),e.assign(e.mul(p.w)),p.assign(p.add(X(e,0,0)))}return p})();let o=U(({p1:e,p2:t,p3:n,p4:r})=>{let i=e.sub(n),a=r.sub(n),o=t.sub(e),s=i.dot(a),c=a.dot(o),l=i.dot(o),u=a.dot(a),d=o.dot(o).mul(u).sub(c.mul(c)),f=s.mul(c).sub(l.mul(u)).div(d).clamp();return J(f,s.add(c.mul(f)).div(u).clamp())});this.fragmentNode=U(()=>{let a=ub();if(r){let e=this.offsetNode?G(this.offsetNodeNode):NS,t=this.dashScaleNode?G(this.dashScaleNode):kS,n=this.dashSizeNode?G(this.dashSizeNode):AS,r=this.dashSizeNode?G(this.dashGapNode):jS;C_.assign(n),w_.assign(r);let i=lb(`instanceDistanceStart`),o=lb(`instanceDistanceEnd`),s=Cy(Gb.y.lessThan(.5).select(t.mul(i),kS.mul(o)).add(NS)),c=e?s.add(e):s;a.y.lessThan(-1).or(a.y.greaterThan(1)).discard(),c.mod(C_.add(w_)).greaterThan(C_).discard()}let s=G(1).toVar(`alpha`);if(i){let n=r_(`vec3`,`worldStart`),i=r_(`vec3`,`worldEnd`),a=r_(`vec4`,`worldPos`).xyz.normalize().mul(1e5),c=i.sub(n),l=o({p1:n,p2:i,p3:Y(0,0,0),p4:a}),u=n.add(c.mul(l.x)),d=a.mul(l.y),f=u.sub(d).length().div(MS);if(!r)if(t&&e.samples>1){let e=f.fwidth();s.assign(uy(e.negate().add(.5),e.add(.5),f).oneMinus())}else f.greaterThan(.5).discard()}else if(t&&e.samples>1){let e=a.x,t=a.y.greaterThan(0).select(a.y.sub(1),a.y.add(1)),n=e.mul(e).add(t.mul(t)),r=G(n.fwidth()).toVar(`dlen`);W(a.y.abs().greaterThan(1),()=>{s.assign(uy(r.oneMinus(),r.add(1),n).oneMinus())})}else W(a.y.abs().greaterThan(1),()=>{let e=a.x,t=a.y.greaterThan(0).select(a.y.sub(1),a.y.add(1));e.mul(e).add(t.mul(t)).greaterThan(1).discard()});let c;if(this.lineColorNode)c=this.lineColorNode;else if(n){let e=lb(`instanceColorStart`),t=lb(`instanceColorEnd`);c=Gb.y.lessThan(.5).select(e,t).mul(nS)}else c=nS;return X(c,s)})()}get worldUnits(){return this.useWorldUnits}set worldUnits(e){this.useWorldUnits!==e&&(this.useWorldUnits=e,this.needsUpdate=!0)}get dashed(){return this.useDash}set dashed(e){this.useDash!==e&&(this.useDash=e,this.needsUpdate=!0)}get alphaToCoverage(){return this.useAlphaToCoverage}set alphaToCoverage(e){this.useAlphaToCoverage!==e&&(this.useAlphaToCoverage=e,this.needsUpdate=!0)}},uw=e=>B(e).mul(.5).add(.5),dw=e=>B(e).mul(2).sub(1),fw=new Sf,pw=class extends tw{static get type(){return`MeshNormalNodeMaterial`}constructor(e){super(),this.lights=!1,this.isMeshNormalNodeMaterial=!0,this.setDefaultValues(fw),this.setValues(e)}setupDiffuseColor(){let e=this.opacityNode?G(this.opacityNode):aS;i_.assign(X(uw(ox),e))}},mw=class extends zh{static get type(){return`EquirectUVNode`}constructor(e=Yb){super(`vec2`),this.dirNode=e}setup(){let e=this.dirNode;return J(e.z.atan2(e.x).mul(1/(Math.PI*2)).add(.5),e.y.clamp(-1,1).asin().mul(1/Math.PI).add(.5))}},hw=V(mw),gw=class extends va{constructor(e=1,t={}){super(e,t),this.isCubeRenderTarget=!0}fromEquirectangularTexture(e,t){let n=t.minFilter,r=t.generateMipmaps;t.generateMipmaps=!0,this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let i=new Zi(5,5,5),a=hw(Yb),o=new tw;o.colorNode=gb(t,a,0),o.side=1,o.blending=0;let s=new Ji(i,o),c=new Gc;c.add(s),t.minFilter===1008&&(t.minFilter=h);let l=new ga(1,10,this),u=e.getMRT();return e.setMRT(null),l.update(e,c),e.setMRT(u),t.minFilter=n,t.currentGenerateMipmaps=r,s.geometry.dispose(),s.material.dispose(),this}},_w=new WeakMap,vw=class extends zh{static get type(){return`CubeMapNode`}constructor(e){super(`vec3`),this.envNode=e,this._cubeTexture=null,this._cubeTextureNode=_x();let t=new _a;t.isRenderTargetTexture=!0,this._defaultTexture=t,this.updateBeforeType=L.RENDER}updateBefore(e){let{renderer:t,material:n}=e,r=this.envNode;if(r.isTextureNode||r.isMaterialReferenceNode){let e=r.isTextureNode?r.value:n[r.property];if(e&&e.isTexture){let n=e.mapping;if(n===303||n===304){if(_w.has(e)){let t=_w.get(e);xw(t,e.mapping),this._cubeTexture=t}else{let n=e.image;if(yw(n)){let r=new gw(n.height);r.fromEquirectangularTexture(t,e),xw(r.texture,e.mapping),this._cubeTexture=r.texture,_w.set(e,r.texture),e.addEventListener(`dispose`,bw)}else this._cubeTexture=this._defaultTexture}this._cubeTextureNode.value=this._cubeTexture}else this._cubeTextureNode=this.envNode}}}setup(e){return this.updateBefore(e),this._cubeTextureNode}};function yw(e){return e==null?!1:e.height>0}function bw(e){let t=e.target;t.removeEventListener(`dispose`,bw);let n=_w.get(t);n!==void 0&&(_w.delete(t),n.dispose())}function xw(e,t){t===303?e.mapping=301:t===304&&(e.mapping=302)}var Sw=V(vw),Cw=class extends vC{static get type(){return`BasicEnvironmentNode`}constructor(e=null){super(),this.envNode=e}setup(e){e.context.environment=Sw(this.envNode)}},ww=class extends vC{static get type(){return`BasicLightMapNode`}constructor(e=null){super(),this.lightMapNode=e}setup(e){let t=G(1/Math.PI);e.context.irradianceLightMap=this.lightMapNode.mul(t)}},Tw=class{start(){}finish(){}direct(){}directRectArea(){}indirect(){}ambientOcclusion(){}},Ew=class extends Tw{constructor(){super()}indirect(e,t,n){let r=e.ambientOcclusion,i=e.reflectedLight,a=n.context.irradianceLightMap;i.indirectDiffuse.assign(X(0)),a?i.indirectDiffuse.addAssign(a):i.indirectDiffuse.addAssign(X(1,1,1,0)),i.indirectDiffuse.mulAssign(r),i.indirectDiffuse.mulAssign(i_.rgb)}finish(e,t,n){let r=n.material,i=e.outgoingLight,a=n.context.environment;if(a)switch(r.combine){case 0:i.rgb.assign(oy(i.rgb,i.rgb.mul(a.rgb),lS.mul(uS)));break;case 1:i.rgb.assign(oy(i.rgb,a.rgb,lS.mul(uS)));break;case 2:i.rgb.addAssign(a.rgb.mul(lS.mul(uS)));break;default:console.warn(`THREE.BasicLightingModel: Unsupported .combine value:`,r.combine);break}}},Dw=new fi,Ow=class extends tw{static get type(){return`MeshBasicNodeMaterial`}constructor(e){super(),this.isMeshBasicNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Dw),this.setValues(e)}setupNormal(){return ix}setupEnvironment(e){let t=super.setupEnvironment(e);return t?new Cw(t):null}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new ww(IS)),t}setupOutgoingLight(){return i_.rgb}setupLightingModel(){return new Ew}},kw=U(({f0:e,f90:t,dotVH:n})=>{let r=n.mul(-5.55473).sub(6.98316).mul(n).exp2();return e.mul(r.oneMinus()).add(t.mul(r))}),Aw=U(e=>e.diffuseColor.mul(1/Math.PI)),jw=()=>G(.25),Mw=U(({dotNH:e})=>x_.mul(G(.5)).add(1).mul(G(1/Math.PI)).mul(e.pow(x_))),Nw=U(({lightDirection:e})=>{let t=e.add(Zb).normalize(),n=ox.dot(t).clamp(),r=kw({f0:y_,f90:1,dotVH:Zb.dot(t).clamp()}),i=jw(),a=Mw({dotNH:n});return r.mul(i).mul(a)}),Pw=class extends Ew{constructor(e=!0){super(),this.specular=e}direct({lightDirection:e,lightColor:t,reflectedLight:n}){let r=ox.dot(e).clamp().mul(t);n.directDiffuse.addAssign(r.mul(Aw({diffuseColor:i_.rgb}))),this.specular===!0&&n.directSpecular.addAssign(r.mul(Nw({lightDirection:e})).mul(lS))}indirect({ambientOcclusion:e,irradiance:t,reflectedLight:n}){n.indirectDiffuse.addAssign(t.mul(Aw({diffuseColor:i_}))),n.indirectDiffuse.mulAssign(e)}},Fw=new Cf,Iw=class extends tw{static get type(){return`MeshLambertNodeMaterial`}constructor(e){super(),this.isMeshLambertNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Fw),this.setValues(e)}setupEnvironment(e){let t=super.setupEnvironment(e);return t?new Cw(t):null}setupLightingModel(){return new Pw(!1)}},Lw=new bf,Rw=class extends tw{static get type(){return`MeshPhongNodeMaterial`}constructor(e){super(),this.isMeshPhongNodeMaterial=!0,this.lights=!0,this.shininessNode=null,this.specularNode=null,this.setDefaultValues(Lw),this.setValues(e)}setupEnvironment(e){let t=super.setupEnvironment(e);return t?new Cw(t):null}setupLightingModel(){return new Pw}setupVariants(){let e=(this.shininessNode?G(this.shininessNode):rS).max(1e-4);x_.assign(e);let t=this.specularNode||oS;y_.assign(t)}copy(e){return this.shininessNode=e.shininessNode,this.specularNode=e.specularNode,super.copy(e)}},zw=U(()=>{let e=ix.dFdx().abs().max(ix.dFdy().abs());return e.x.max(e.y).max(e.z)}),Bw=U(e=>{let{roughness:t}=e,n=zw(),r=t.max(.0525);return r=r.add(n),r=r.min(1),r}),Vw=U(({alpha:e,dotNL:t,dotNV:n})=>{let r=e.pow2(),i=t.mul(r.add(r.oneMinus().mul(n.pow2())).sqrt()),a=n.mul(r.add(r.oneMinus().mul(t.pow2())).sqrt());return B_(.5,i.add(a).max(av))}).setLayout({name:`V_GGX_SmithCorrelated`,type:`float`,inputs:[{name:`alpha`,type:`float`},{name:`dotNL`,type:`float`},{name:`dotNV`,type:`float`}]}),Hw=U(({alphaT:e,alphaB:t,dotTV:n,dotBV:r,dotTL:i,dotBL:a,dotNV:o,dotNL:s})=>{let c=s.mul(Y(e.mul(n),t.mul(r),o).length()),l=o.mul(Y(e.mul(i),t.mul(a),s).length());return B_(.5,c.add(l)).saturate()}).setLayout({name:`V_GGX_SmithCorrelated_Anisotropic`,type:`float`,inputs:[{name:`alphaT`,type:`float`,qualifier:`in`},{name:`alphaB`,type:`float`,qualifier:`in`},{name:`dotTV`,type:`float`,qualifier:`in`},{name:`dotBV`,type:`float`,qualifier:`in`},{name:`dotTL`,type:`float`,qualifier:`in`},{name:`dotBL`,type:`float`,qualifier:`in`},{name:`dotNV`,type:`float`,qualifier:`in`},{name:`dotNL`,type:`float`,qualifier:`in`}]}),Uw=U(({alpha:e,dotNH:t})=>{let n=e.pow2(),r=t.pow2().mul(n.oneMinus()).oneMinus();return n.div(r.pow2()).mul(1/Math.PI)}).setLayout({name:`D_GGX`,type:`float`,inputs:[{name:`alpha`,type:`float`},{name:`dotNH`,type:`float`}]}),Ww=G(1/Math.PI),Gw=U(({alphaT:e,alphaB:t,dotNH:n,dotTH:r,dotBH:i})=>{let a=e.mul(t),o=Y(t.mul(r),e.mul(i),a.mul(n)),s=o.dot(o),c=a.div(s);return Ww.mul(a.mul(c.pow2()))}).setLayout({name:`D_GGX_Anisotropic`,type:`float`,inputs:[{name:`alphaT`,type:`float`,qualifier:`in`},{name:`alphaB`,type:`float`,qualifier:`in`},{name:`dotNH`,type:`float`,qualifier:`in`},{name:`dotTH`,type:`float`,qualifier:`in`},{name:`dotBH`,type:`float`,qualifier:`in`}]}),Kw=U(e=>{let{lightDirection:t,f0:n,f90:r,roughness:i,f:a,USE_IRIDESCENCE:o,USE_ANISOTROPY:s}=e,c=e.normalView||ox,l=i.pow2(),u=t.add(Zb).normalize(),d=c.dot(t).clamp(),f=c.dot(Zb).clamp(),p=c.dot(u).clamp(),m=kw({f0:n,f90:r,dotVH:Zb.dot(u).clamp()}),h,g;if(bg(o)&&(m=f_.mix(m,a)),bg(s)){let e=__.dot(t),n=__.dot(Zb),r=__.dot(u),i=v_.dot(t),a=v_.dot(Zb),o=v_.dot(u);h=Hw({alphaT:h_,alphaB:l,dotTV:n,dotBV:a,dotTL:e,dotBL:i,dotNV:f,dotNL:d}),g=Gw({alphaT:h_,alphaB:l,dotNH:p,dotTH:r,dotBH:o})}else h=Vw({alpha:l,dotNL:d,dotNV:f}),g=Uw({alpha:l,dotNH:p});return m.mul(h).mul(g)}),qw=U(({roughness:e,dotNV:t})=>{let n=X(-1,-.0275,-.572,.022),r=X(1,.0425,1.04,-.04),i=e.mul(n).add(r),a=i.x.mul(i.x).min(t.mul(-9.28).exp2()).mul(i.x).add(i.y);return J(-1.04,1.04).mul(a).add(i.zw)}).setLayout({name:`DFGApprox`,type:`vec2`,inputs:[{name:`roughness`,type:`float`},{name:`dotNV`,type:`vec3`}]}),Jw=U(e=>{let{dotNV:t,specularColor:n,specularF90:r,roughness:i}=e,a=qw({dotNV:t,roughness:i});return n.mul(a.x).add(r.mul(a.y))}),Yw=U(({f:e,f90:t,dotVH:n})=>{let r=n.oneMinus().saturate(),i=r.mul(r),a=r.mul(i,i).clamp(0,.9999);return e.sub(Y(t).mul(a)).div(a.oneMinus())}).setLayout({name:`Schlick_to_F0`,type:`vec3`,inputs:[{name:`f`,type:`vec3`},{name:`f90`,type:`float`},{name:`dotVH`,type:`float`}]}),Xw=U(({roughness:e,dotNH:t})=>{let n=e.pow2(),r=G(1).div(n),i=t.pow2().oneMinus().max(.0078125);return G(2).add(r).mul(i.pow(r.mul(.5))).div(2*Math.PI)}).setLayout({name:`D_Charlie`,type:`float`,inputs:[{name:`roughness`,type:`float`},{name:`dotNH`,type:`float`}]}),Zw=U(({dotNV:e,dotNL:t})=>G(1).div(G(4).mul(t.add(e).sub(t.mul(e))))).setLayout({name:`V_Neubelt`,type:`float`,inputs:[{name:`dotNV`,type:`float`},{name:`dotNL`,type:`float`}]}),Qw=U(({lightDirection:e})=>{let t=e.add(Zb).normalize(),n=ox.dot(e).clamp(),r=ox.dot(Zb).clamp(),i=Xw({roughness:d_,dotNH:ox.dot(t).clamp()}),a=Zw({dotNV:r,dotNL:n});return u_.mul(i).mul(a)}),$w=U(({N:e,V:t,roughness:n})=>{let r=J(n,e.dot(t).saturate().oneMinus().sqrt());return r.assign(r.mul(.984375).add(.0078125)),r}).setLayout({name:`LTC_Uv`,type:`vec2`,inputs:[{name:`N`,type:`vec3`},{name:`V`,type:`vec3`},{name:`roughness`,type:`float`}]}),eT=U(({f:e})=>{let t=e.length();return Gv(t.mul(t).add(e.z).div(t.add(1)),0)}).setLayout({name:`LTC_ClippedSphereFormFactor`,type:`float`,inputs:[{name:`f`,type:`vec3`}]}),tT=U(({v1:e,v2:t})=>{let n=e.dot(t),r=n.abs().toVar(),i=r.mul(.0145206).add(.4965155).mul(r).add(.8543985).toVar(),a=r.add(4.1616724).mul(r).add(3.417594).toVar(),o=i.div(a),s=n.greaterThan(0).select(o,Gv(n.mul(n).oneMinus(),1e-7).inverseSqrt().mul(.5).sub(o));return e.cross(t).mul(s)}).setLayout({name:`LTC_EdgeVectorFormFactor`,type:`vec3`,inputs:[{name:`v1`,type:`vec3`},{name:`v2`,type:`vec3`}]}),nT=U(({N:e,V:t,P:n,mInv:r,p0:i,p1:a,p2:o,p3:s})=>{let c=a.sub(i).toVar(),l=s.sub(i).toVar(),u=c.cross(l),d=Y().toVar();return W(u.dot(n.sub(i)).greaterThanEqual(0),()=>{let c=t.sub(e.mul(t.dot(e))).normalize(),l=e.cross(c).negate(),u=r.mul(Vg(c,l,e).transpose()).toVar(),f=u.mul(i.sub(n)).normalize().toVar(),p=u.mul(a.sub(n)).normalize().toVar(),m=u.mul(o.sub(n)).normalize().toVar(),h=u.mul(s.sub(n)).normalize().toVar(),g=Y(0).toVar();g.addAssign(tT({v1:f,v2:p})),g.addAssign(tT({v1:p,v2:m})),g.addAssign(tT({v1:m,v2:h})),g.addAssign(tT({v1:h,v2:f})),d.assign(Y(eT({f:g})))}),d}).setLayout({name:`LTC_Evaluate`,type:`vec3`,inputs:[{name:`N`,type:`vec3`},{name:`V`,type:`vec3`},{name:`P`,type:`vec3`},{name:`mInv`,type:`mat3`},{name:`p0`,type:`vec3`},{name:`p1`,type:`vec3`},{name:`p2`,type:`vec3`},{name:`p3`,type:`vec3`}]}),rT=1/6,iT=e=>z_(rT,z_(e,z_(e,e.negate().add(3)).sub(3)).add(1)),aT=e=>z_(rT,z_(e,z_(e,z_(3,e).sub(6))).add(4)),oT=e=>z_(rT,z_(e,z_(e,z_(-3,e).add(3)).add(3)).add(1)),sT=e=>z_(rT,$v(e,3)),cT=e=>iT(e).add(aT(e)),lT=e=>oT(e).add(sT(e)),uT=e=>L_(-1,aT(e).div(iT(e).add(aT(e)))),dT=e=>L_(1,sT(e).div(oT(e).add(sT(e)))),fT=(e,t,n)=>{let r=e.uvNode,i=z_(r,t.zw).add(.5),a=bv(i),o=Cv(i),s=cT(o.x),c=lT(o.x),l=uT(o.x),u=dT(o.x),d=uT(o.y),f=dT(o.y),p=J(a.x.add(l),a.y.add(d)).sub(.5).mul(t.xy),m=J(a.x.add(u),a.y.add(d)).sub(.5).mul(t.xy),h=J(a.x.add(l),a.y.add(f)).sub(.5).mul(t.xy),g=J(a.x.add(u),a.y.add(f)).sub(.5).mul(t.xy),_=cT(o.y).mul(L_(s.mul(e.uv(p).level(n)),c.mul(e.uv(m).level(n)))),v=lT(o.y).mul(L_(s.mul(e.uv(h).level(n)),c.mul(e.uv(g).level(n))));return _.add(v)},pT=U(([e,t=G(3)])=>{let n=J(e.size(K(t))),r=J(e.size(K(t.add(1)))),i=B_(1,n),a=B_(1,r),o=fT(e,X(i,n),bv(t)),s=fT(e,X(a,r),xv(t));return Cv(t).mix(o,s)}),mT=U(([e,t,n,r,i])=>{let a=Y(ly(t.negate(),Sv(e),B_(1,r))),o=Y(Mv(i[0].xyz),Mv(i[1].xyz),Mv(i[2].xyz));return Sv(a).mul(n.mul(o))}).setLayout({name:`getVolumeTransmissionRay`,type:`vec3`,inputs:[{name:`n`,type:`vec3`},{name:`v`,type:`vec3`},{name:`thickness`,type:`float`},{name:`ior`,type:`float`},{name:`modelMatrix`,type:`mat4`}]}),hT=U(([e,t])=>e.mul(sy(t.mul(2).sub(2),0,1))).setLayout({name:`applyIorToRoughness`,type:`float`,inputs:[{name:`roughness`,type:`float`},{name:`ior`,type:`float`}]}),gT=zC(),_T=U(([e,t,n])=>pT(gT.uv(e),_v(G(DC.x)).mul(hT(t,n)))),vT=U(([e,t,n])=>(W(n.notEqual(0),()=>mv(gv(t).negate().div(n).negate().mul(e))),Y(1))).setLayout({name:`volumeAttenuation`,type:`vec3`,inputs:[{name:`transmissionDistance`,type:`float`},{name:`attenuationColor`,type:`vec3`},{name:`attenuationDistance`,type:`float`}]}),yT=U(([e,t,n,r,i,a,o,s,c,l,u,d,f,p,m])=>{let h,g;if(m){h=X().toVar(),g=Y().toVar();let i=u.sub(1).mul(m.mul(.025)),a=Y(u.sub(i),u,u.add(i));rC({start:0,end:3},({i})=>{let u=a.element(i),m=mT(e,t,d,u,s),_=o.add(m),v=l.mul(c.mul(X(_,1))),y=J(v.xy.div(v.w)).toVar();y.addAssign(1),y.divAssign(2),y.assign(J(y.x,y.y.oneMinus()));let b=_T(y,n,u);h.element(i).assign(b.element(i)),h.a.addAssign(b.a),g.element(i).assign(r.element(i).mul(vT(Mv(m),f,p).element(i)))}),h.a.divAssign(3)}else{let i=mT(e,t,d,u,s),a=o.add(i),m=l.mul(c.mul(X(a,1))),_=J(m.xy.div(m.w)).toVar();_.addAssign(1),_.divAssign(2),_.assign(J(_.x,_.y.oneMinus())),h=_T(_,n,u),g=r.mul(vT(Mv(i),f,p))}let _=g.rgb.mul(h.rgb),v=Y(Jw({dotNV:e.dot(t).clamp(),specularColor:i,specularF90:a,roughness:n})),y=g.r.add(g.g,g.b).div(3);return X(v.oneMinus().mul(_),h.a.oneMinus().mul(y).oneMinus())}),bT=Vg(3.2404542,-.969266,.0556434,-1.5371385,1.8760108,-.2040259,-.4985314,.041556,1.0572252),xT=e=>{let t=e.sqrt();return Y(1).add(t).div(Y(1).sub(t))},ST=(e,t)=>e.sub(t).div(e.add(t)).pow2(),CT=(e,t)=>{let n=e.mul(2*Math.PI*1e-9),r=Y(54856e-17,44201e-17,52481e-17),i=Y(1681e3,1795300,2208400),a=Y(43278e5,93046e5,66121e5),o=G(9747e-17*Math.sqrt(2*Math.PI*45282e5)).mul(n.mul(2239900).add(t.x).cos()).mul(n.pow2().mul(-45282e5).exp()),s=r.mul(a.mul(2*Math.PI).sqrt()).mul(i.mul(n).add(t).cos()).mul(n.pow2().negate().mul(a).exp());return s=Y(s.x.add(o),s.y,s.z).div(1.0685e-7),bT.mul(s)},wT=U(({outsideIOR:e,eta2:t,cosTheta1:n,thinFilmThickness:r,baseF0:i})=>{let a=oy(e,t,uy(0,.03,r)),o=e.div(a).pow2().mul(G(1).sub(n.pow2())),s=G(1).sub(o).sqrt(),c=kw({f0:ST(a,e),f90:1,dotVH:n}),l=c.oneMinus(),u=a.lessThan(e).select(Math.PI,0),d=G(Math.PI).sub(u),f=xT(i.clamp(0,.9999)),p=kw({f0:ST(f,a.toVec3()),f90:1,dotVH:s}),m=Y(f.x.lessThan(a).select(Math.PI,0),f.y.lessThan(a).select(Math.PI,0),f.z.lessThan(a).select(Math.PI,0)),h=a.mul(r,s,2),g=Y(d).add(m),_=c.mul(p).clamp(1e-5,.9999),v=_.sqrt(),y=l.pow2().mul(p).div(Y(1).sub(_)),b=c.add(y),x=y.sub(l);for(let e=1;e<=2;++e){x=x.mul(v);let t=CT(G(e).mul(h),G(e).mul(g)).mul(2);b=b.add(x.mul(t))}return b.max(Y(0))}).setLayout({name:`evalIridescence`,type:`vec3`,inputs:[{name:`outsideIOR`,type:`float`},{name:`eta2`,type:`float`},{name:`cosTheta1`,type:`float`},{name:`thinFilmThickness`,type:`float`},{name:`baseF0`,type:`vec3`}]}),TT=U(({normal:e,viewDir:t,roughness:n})=>{let r=e.dot(t).saturate(),i=n.pow2(),a=hy(n.lessThan(.25),G(-339.2).mul(i).add(G(161.4).mul(n)).sub(25.9),G(-8.48).mul(i).add(G(14.3).mul(n)).sub(9.95)),o=hy(n.lessThan(.25),G(44).mul(i).sub(G(23.7).mul(n)).add(3.26),G(1.97).mul(i).sub(G(3.27).mul(n)).add(.72));return hy(n.lessThan(.25),0,G(.1).mul(n).sub(.025)).add(a.mul(r).add(o).exp()).mul(1/Math.PI).saturate()}),ET=Y(.04),DT=G(1),OT=class extends Tw{constructor(e=!1,t=!1,n=!1,r=!1,i=!1,a=!1){super(),this.clearcoat=e,this.sheen=t,this.iridescence=n,this.anisotropy=r,this.transmission=i,this.dispersion=a,this.clearcoatRadiance=null,this.clearcoatSpecularDirect=null,this.clearcoatSpecularIndirect=null,this.sheenSpecularDirect=null,this.sheenSpecularIndirect=null,this.iridescenceFresnel=null,this.iridescenceF0=null}start(e){if(this.clearcoat===!0&&(this.clearcoatRadiance=Y().toVar(`clearcoatRadiance`),this.clearcoatSpecularDirect=Y().toVar(`clearcoatSpecularDirect`),this.clearcoatSpecularIndirect=Y().toVar(`clearcoatSpecularIndirect`)),this.sheen===!0&&(this.sheenSpecularDirect=Y().toVar(`sheenSpecularDirect`),this.sheenSpecularIndirect=Y().toVar(`sheenSpecularIndirect`)),this.iridescence===!0){let e=ox.dot(Zb).clamp();this.iridescenceFresnel=wT({outsideIOR:G(1),eta2:p_,cosTheta1:e,thinFilmThickness:m_,baseF0:y_}),this.iridescenceF0=Yw({f:this.iridescenceFresnel,f90:1,dotVH:e})}if(this.transmission===!0){let t=Jb;e.backdrop=yT(sx,Db.sub(Jb).normalize(),o_,i_,y_,b_,t,Ib,wb,Sb,E_,O_,A_,k_,this.dispersion?j_:null),e.backdropAlpha=D_,i_.a.mulAssign(oy(1,e.backdrop.a,D_))}}computeMultiscattering(e,t,n){let r=qw({roughness:o_,dotNV:ox.dot(Zb).clamp()}),i=(this.iridescenceF0?f_.mix(y_,this.iridescenceF0):y_).mul(r.x).add(n.mul(r.y)),a=r.x.add(r.y).oneMinus(),o=y_.add(y_.oneMinus().mul(.047619)),s=i.mul(o).div(a.mul(o).oneMinus());e.addAssign(i),t.addAssign(s.mul(a))}direct({lightDirection:e,lightColor:t,reflectedLight:n}){let r=ox.dot(e).clamp().mul(t);if(this.sheen===!0&&this.sheenSpecularDirect.addAssign(r.mul(Qw({lightDirection:e}))),this.clearcoat===!0){let n=cx.dot(e).clamp().mul(t);this.clearcoatSpecularDirect.addAssign(n.mul(Kw({lightDirection:e,f0:ET,f90:DT,roughness:l_,normalView:cx})))}n.directDiffuse.addAssign(r.mul(Aw({diffuseColor:i_.rgb}))),n.directSpecular.addAssign(r.mul(Kw({lightDirection:e,f0:y_,f90:1,roughness:o_,iridescence:this.iridescence,f:this.iridescenceFresnel,USE_IRIDESCENCE:this.iridescence,USE_ANISOTROPY:this.anisotropy})))}directRectArea({lightColor:e,lightPosition:t,halfWidth:n,halfHeight:r,reflectedLight:i,ltc_1:a,ltc_2:o}){let s=t.add(n).sub(r),c=t.sub(n).sub(r),l=t.sub(n).add(r),u=t.add(n).add(r),d=ox,f=Zb,p=Xb.toVar(),m=$w({N:d,V:f,roughness:o_}),h=a.uv(m).toVar(),g=o.uv(m).toVar(),_=Vg(Y(h.x,0,h.y),Y(0,1,0),Y(h.z,0,h.w)).toVar(),v=y_.mul(g.x).add(y_.oneMinus().mul(g.y)).toVar();i.directSpecular.addAssign(e.mul(v).mul(nT({N:d,V:f,P:p,mInv:_,p0:s,p1:c,p2:l,p3:u}))),i.directDiffuse.addAssign(e.mul(i_).mul(nT({N:d,V:f,P:p,mInv:Vg(1,0,0,0,1,0,0,0,1),p0:s,p1:c,p2:l,p3:u})))}indirect(e,t,n){this.indirectDiffuse(e,t,n),this.indirectSpecular(e,t,n),this.ambientOcclusion(e,t,n)}indirectDiffuse({irradiance:e,reflectedLight:t}){t.indirectDiffuse.addAssign(e.mul(Aw({diffuseColor:i_})))}indirectSpecular({radiance:e,iblIrradiance:t,reflectedLight:n}){if(this.sheen===!0&&this.sheenSpecularIndirect.addAssign(t.mul(u_,TT({normal:ox,viewDir:Zb,roughness:d_}))),this.clearcoat===!0){let e=Jw({dotNV:cx.dot(Zb).clamp(),specularColor:ET,specularF90:DT,roughness:l_});this.clearcoatSpecularIndirect.addAssign(this.clearcoatRadiance.mul(e))}let r=Y().toVar(`singleScattering`),i=Y().toVar(`multiScattering`),a=t.mul(1/Math.PI);this.computeMultiscattering(r,i,b_);let o=r.add(i),s=i_.mul(o.r.max(o.g).max(o.b).oneMinus());n.indirectSpecular.addAssign(e.mul(r)),n.indirectSpecular.addAssign(i.mul(a)),n.indirectDiffuse.addAssign(s.mul(a))}ambientOcclusion({ambientOcclusion:e,reflectedLight:t}){let n=ox.dot(Zb).clamp().add(e),r=o_.mul(-16).oneMinus().negate().exp2(),i=e.sub(n.pow(r).oneMinus()).clamp();this.clearcoat===!0&&this.clearcoatSpecularIndirect.mulAssign(e),this.sheen===!0&&this.sheenSpecularIndirect.mulAssign(e),t.indirectDiffuse.mulAssign(e),t.indirectSpecular.mulAssign(i)}finish(e){let{outgoingLight:t}=e;if(this.clearcoat===!0){let e=kw({dotVH:cx.dot(Zb).clamp(),f0:ET,f90:DT}),n=t.mul(c_.mul(e).oneMinus()).add(this.clearcoatSpecularDirect.add(this.clearcoatSpecularIndirect).mul(c_));t.assign(n)}if(this.sheen===!0){let e=u_.r.max(u_.g).max(u_.b).mul(.157).oneMinus(),n=t.mul(e).add(this.sheenSpecularDirect,this.sheenSpecularIndirect);t.assign(n)}}},kT=G(1),AT=G(-2),jT=G(.8),MT=G(-1),NT=G(.4),PT=G(2),FT=G(.305),IT=G(3),LT=G(.21),RT=G(4),zT=G(4),BT=G(16),VT=U(([e])=>{let t=Y(Av(e)).toVar(),n=G(-1).toVar();return W(t.x.greaterThan(t.z),()=>{W(t.x.greaterThan(t.y),()=>{n.assign(hy(e.x.greaterThan(0),0,3))}).Else(()=>{n.assign(hy(e.y.greaterThan(0),1,4))})}).Else(()=>{W(t.z.greaterThan(t.y),()=>{n.assign(hy(e.z.greaterThan(0),2,5))}).Else(()=>{n.assign(hy(e.y.greaterThan(0),1,4))})}),n}).setLayout({name:`getFace`,type:`float`,inputs:[{name:`direction`,type:`vec3`}]}),HT=U(([e,t])=>{let n=J().toVar();return W(t.equal(0),()=>{n.assign(J(e.z,e.y).div(Av(e.x)))}).ElseIf(t.equal(1),()=>{n.assign(J(e.x.negate(),e.z.negate()).div(Av(e.y)))}).ElseIf(t.equal(2),()=>{n.assign(J(e.x.negate(),e.y).div(Av(e.z)))}).ElseIf(t.equal(3),()=>{n.assign(J(e.z.negate(),e.y).div(Av(e.x)))}).ElseIf(t.equal(4),()=>{n.assign(J(e.x.negate(),e.z).div(Av(e.y)))}).Else(()=>{n.assign(J(e.x,e.y).div(Av(e.z)))}),z_(.5,n.add(1))}).setLayout({name:`getUV`,type:`vec2`,inputs:[{name:`direction`,type:`vec3`},{name:`face`,type:`float`}]}),UT=U(([e])=>{let t=G(0).toVar();return W(e.greaterThanEqual(jT),()=>{t.assign(kT.sub(e).mul(MT.sub(AT)).div(kT.sub(jT)).add(AT))}).ElseIf(e.greaterThanEqual(NT),()=>{t.assign(jT.sub(e).mul(PT.sub(MT)).div(jT.sub(NT)).add(MT))}).ElseIf(e.greaterThanEqual(FT),()=>{t.assign(NT.sub(e).mul(IT.sub(PT)).div(NT.sub(FT)).add(PT))}).ElseIf(e.greaterThanEqual(LT),()=>{t.assign(FT.sub(e).mul(RT.sub(IT)).div(FT.sub(LT)).add(IT))}).Else(()=>{t.assign(G(-2).mul(_v(z_(1.16,e))))}),t}).setLayout({name:`roughnessToMip`,type:`float`,inputs:[{name:`roughness`,type:`float`}]}),WT=U(([e,t])=>{let n=e.toVar();n.assign(z_(2,n).sub(1));let r=Y(n,1).toVar();return W(t.equal(0),()=>{r.assign(r.zyx)}).ElseIf(t.equal(1),()=>{r.assign(r.xzy),r.xz.mulAssign(-1)}).ElseIf(t.equal(2),()=>{r.x.mulAssign(-1)}).ElseIf(t.equal(3),()=>{r.assign(r.zyx),r.xz.mulAssign(-1)}).ElseIf(t.equal(4),()=>{r.assign(r.xzy),r.xy.mulAssign(-1)}).ElseIf(t.equal(5),()=>{r.z.mulAssign(-1)}),r}).setLayout({name:`getDirection`,type:`vec3`,inputs:[{name:`uv`,type:`vec2`},{name:`face`,type:`float`}]}),GT=U(([e,t,n,r,i,a])=>{let o=G(n),s=Y(t),c=sy(UT(o),AT,a),l=Cv(c),u=bv(c),d=Y(KT(e,s,u,r,i,a)).toVar();return W(l.notEqual(0),()=>{let t=Y(KT(e,s,u.add(1),r,i,a)).toVar();d.assign(oy(d,t,l))}),d}),KT=U(([e,t,n,r,i,a])=>{let o=G(n).toVar(),s=Y(t),c=G(VT(s)).toVar(),l=G(Gv(zT.sub(o),0)).toVar();o.assign(Gv(o,zT));let u=G(hv(o)).toVar(),d=J(HT(s,c).mul(u.sub(2)).add(1)).toVar();return W(c.greaterThan(2),()=>{d.y.addAssign(u),c.subAssign(3)}),d.x.addAssign(c.mul(u)),d.x.addAssign(l.mul(z_(3,BT))),d.y.addAssign(z_(4,hv(a).sub(u))),d.x.mulAssign(r),d.y.mulAssign(i),e.uv(d).grad(J(),J())}),qT=U(({envMap:e,mipInt:t,outputDirection:n,theta:r,axis:i,CUBEUV_TEXEL_WIDTH:a,CUBEUV_TEXEL_HEIGHT:o,CUBEUV_MAX_MIP:s})=>{let c=Tv(r);return KT(e,n.mul(c).add(i.cross(n).mul(wv(r))).add(i.mul(i.dot(n).mul(c.oneMinus()))),t,a,o,s)}),JT=U(({n:e,latitudinal:t,poleAxis:n,outputDirection:r,weights:i,samples:a,dTheta:o,mipInt:s,envMap:c,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:u,CUBEUV_MAX_MIP:d})=>{let f=Y(hy(t,n,Qv(n,r))).toVar();W(lv(f.equals(Y(0))),()=>{f.assign(Y(r.z,0,r.x.negate()))}),f.assign(Sv(f));let p=Y().toVar();return p.addAssign(i.element(K(0)).mul(qT({theta:0,axis:f,outputDirection:r,mipInt:s,envMap:c,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:u,CUBEUV_MAX_MIP:d}))),rC({start:K(1),end:e},({i:e})=>{W(e.greaterThanEqual(a),()=>{aC()});let t=G(o.mul(G(e))).toVar();p.addAssign(i.element(e).mul(qT({theta:t.mul(-1),axis:f,outputDirection:r,mipInt:s,envMap:c,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:u,CUBEUV_MAX_MIP:d}))),p.addAssign(i.element(e).mul(qT({theta:t,axis:f,outputDirection:r,mipInt:s,envMap:c,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:u,CUBEUV_MAX_MIP:d})))}),X(p,1)}),YT=null,XT=new WeakMap;function ZT(e){let t=Math.log2(e)-2,n=1/e;return{texelWidth:1/(3*Math.max(2**t,112)),texelHeight:n,maxMip:t}}function QT(e){let t=XT.get(e);if((t===void 0?-1:t.pmremVersion)!==e.pmremVersion){let n=e.image;if(e.isCubeTexture)if(eE(n))t=YT.fromCubemap(e,t);else return null;else if(tE(n))t=YT.fromEquirectangular(e,t);else return null;t.pmremVersion=e.pmremVersion,XT.set(e,t)}return t.texture}var $T=class extends zh{static get type(){return`PMREMNode`}constructor(e,t=null,n=null){super(`vec3`),this._value=e,this._pmrem=null,this.uvNode=t,this.levelNode=n,this._generator=null;let r=new Pn;r.isRenderTargetTexture=!0,this._texture=gb(r),this._width=Z(0),this._height=Z(0),this._maxMip=Z(0),this.updateBeforeType=L.RENDER}set value(e){this._value=e,this._pmrem=null}get value(){return this._value}updateFromTexture(e){let t=ZT(e.image.height);this._texture.value=e,this._width.value=t.texelWidth,this._height.value=t.texelHeight,this._maxMip.value=t.maxMip}updateBefore(){let e=this._pmrem,t=e?e.pmremVersion:-1,n=this._value;t!==n.pmremVersion&&(e=n.isPMREMTexture===!0?n:QT(n),e!==null&&(this._pmrem=e,this.updateFromTexture(e)))}setup(e){YT===null&&(YT=e.createPMREMGenerator()),this.updateBefore(e);let t=this.uvNode;t===null&&e.context.getUV&&(t=e.context.getUV(this));let n=this.value;e.renderer.coordinateSystem===2e3&&n.isPMREMTexture!==!0&&n.isRenderTargetTexture===!0&&(t=Y(t.x.negate(),t.yz));let r=this.levelNode;return r===null&&e.context.getTextureLevel&&(r=e.context.getTextureLevel(this)),GT(this._texture,t,r,this._width,this._height,this._maxMip)}};function eE(e){if(e==null)return!1;let t=0;for(let n=0;n<6;n++)e[n]!==void 0&&t++;return t===6}function tE(e){return e==null?!1:e.height>0}var nE=V($T),rE=new WeakMap,iE=class extends vC{static get type(){return`EnvironmentNode`}constructor(e=null){super(),this.envNode=e}setup(e){let{material:t}=e,n=this.envNode;if(n.isTextureNode||n.isMaterialReferenceNode){let e=n.isTextureNode?n.value:t[n.property],r=rE.get(e);r===void 0&&(r=nE(e),rE.set(e,r)),n=r}let r=t.envMap?Ex(`envMapIntensity`,`float`,e.material):Ex(`environmentIntensity`,`float`,e.scene),i=t.useAnisotropy===!0||t.anisotropy>0?Kx:ox,a=n.context(aE(o_,i)).mul(r),o=n.context(oE(sx)).mul(Math.PI).mul(r),s=Yy(a),c=Yy(o);e.context.radiance.addAssign(s),e.context.iblIrradiance.addAssign(c);let l=e.context.lightingModel.clearcoatRadiance;if(l){let e=Yy(n.context(aE(l_,cx)).mul(r));l.addAssign(e)}}},aE=(e,t)=>{let n=null;return{getUV:()=>(n===null&&(n=Zb.negate().reflect(t),n=e.mul(e).mix(n,t).normalize(),n=n.transformDirection(wb)),n),getTextureLevel:()=>e}},oE=e=>({getUV:()=>e,getTextureLevel:()=>G(1)}),sE=new vf,cE=class extends tw{static get type(){return`MeshStandardNodeMaterial`}constructor(e){super(),this.isMeshStandardNodeMaterial=!0,this.lights=!0,this.emissiveNode=null,this.metalnessNode=null,this.roughnessNode=null,this.setDefaultValues(sE),this.setValues(e)}setupEnvironment(e){let t=super.setupEnvironment(e);return t===null&&e.environmentNode&&(t=e.environmentNode),t?new iE(t):null}setupLightingModel(){return new OT}setupSpecular(){let e=oy(Y(.04),i_.rgb,s_);y_.assign(e),b_.assign(1)}setupVariants(){let e=this.metalnessNode?G(this.metalnessNode):fS;s_.assign(e);let t=this.roughnessNode?G(this.roughnessNode):dS;t=Bw({roughness:t}),o_.assign(t),this.setupSpecular(),i_.assign(X(i_.rgb.mul(e.oneMinus()),i_.a))}copy(e){return this.emissiveNode=e.emissiveNode,this.metalnessNode=e.metalnessNode,this.roughnessNode=e.roughnessNode,super.copy(e)}},lE=new yf,uE=class extends cE{static get type(){return`MeshPhysicalNodeMaterial`}constructor(e){super(),this.isMeshPhysicalNodeMaterial=!0,this.clearcoatNode=null,this.clearcoatRoughnessNode=null,this.clearcoatNormalNode=null,this.sheenNode=null,this.sheenRoughnessNode=null,this.iridescenceNode=null,this.iridescenceIORNode=null,this.iridescenceThicknessNode=null,this.specularIntensityNode=null,this.specularColorNode=null,this.iorNode=null,this.transmissionNode=null,this.thicknessNode=null,this.attenuationDistanceNode=null,this.attenuationColorNode=null,this.dispersionNode=null,this.anisotropyNode=null,this.setDefaultValues(lE),this.setValues(e)}get useClearcoat(){return this.clearcoat>0||this.clearcoatNode!==null}get useIridescence(){return this.iridescence>0||this.iridescenceNode!==null}get useSheen(){return this.sheen>0||this.sheenNode!==null}get useAnisotropy(){return this.anisotropy>0||this.anisotropyNode!==null}get useTransmission(){return this.transmission>0||this.transmissionNode!==null}get useDispersion(){return this.dispersion>0||this.dispersionNode!==null}setupSpecular(){let e=this.iorNode?G(this.iorNode):ES;E_.assign(e),y_.assign(oy(Wv(ey(E_.sub(1).div(E_.add(1))).mul(cS),Y(1)).mul(sS),i_.rgb,s_)),b_.assign(oy(sS,1,s_))}setupLightingModel(){return new OT(this.useClearcoat,this.useSheen,this.useIridescence,this.useAnisotropy,this.useTransmission,this.useDispersion)}setupVariants(e){if(super.setupVariants(e),this.useClearcoat){let e=this.clearcoatNode?G(this.clearcoatNode):mS,t=this.clearcoatRoughnessNode?G(this.clearcoatRoughnessNode):hS;c_.assign(e),l_.assign(Bw({roughness:t}))}if(this.useSheen){let e=this.sheenNode?Y(this.sheenNode):vS,t=this.sheenRoughnessNode?G(this.sheenRoughnessNode):yS;u_.assign(e),d_.assign(t)}if(this.useIridescence){let e=this.iridescenceNode?G(this.iridescenceNode):xS,t=this.iridescenceIORNode?G(this.iridescenceIORNode):SS,n=this.iridescenceThicknessNode?G(this.iridescenceThicknessNode):CS;f_.assign(e),p_.assign(t),m_.assign(n)}if(this.useAnisotropy){let e=(this.anisotropyNode?J(this.anisotropyNode):bS).toVar();g_.assign(e.length()),W(g_.equal(0),()=>{e.assign(J(1,0))}).Else(()=>{e.divAssign(J(g_)),g_.assign(g_.saturate())}),h_.assign(g_.pow2().mix(o_.pow2(),1)),__.assign(Ux[0].mul(e.x).add(Ux[1].mul(e.y))),v_.assign(Ux[1].mul(e.x).sub(Ux[0].mul(e.y)))}if(this.useTransmission){let e=this.transmissionNode?G(this.transmissionNode):wS,t=this.thicknessNode?G(this.thicknessNode):TS,n=this.attenuationDistanceNode?G(this.attenuationDistanceNode):DS,r=this.attenuationColorNode?Y(this.attenuationColorNode):OS;if(D_.assign(e),O_.assign(t),k_.assign(n),A_.assign(r),this.useDispersion){let e=this.dispersionNode?G(this.dispersionNode):FS;j_.assign(e)}}}setupClearcoatNormal(){return this.clearcoatNormalNode?Y(this.clearcoatNormalNode):gS}setup(e){e.context.setupClearcoatNormal=()=>this.setupClearcoatNormal(e),super.setup(e)}copy(e){return this.clearcoatNode=e.clearcoatNode,this.clearcoatRoughnessNode=e.clearcoatRoughnessNode,this.clearcoatNormalNode=e.clearcoatNormalNode,this.sheenNode=e.sheenNode,this.sheenRoughnessNode=e.sheenRoughnessNode,this.iridescenceNode=e.iridescenceNode,this.iridescenceIORNode=e.iridescenceIORNode,this.iridescenceThicknessNode=e.iridescenceThicknessNode,this.specularIntensityNode=e.specularIntensityNode,this.specularColorNode=e.specularColorNode,this.transmissionNode=e.transmissionNode,this.thicknessNode=e.thicknessNode,this.attenuationDistanceNode=e.attenuationDistanceNode,this.attenuationColorNode=e.attenuationColorNode,this.dispersionNode=e.dispersionNode,this.anisotropyNode=e.anisotropyNode,super.copy(e)}},dE=class extends OT{constructor(e,t,n,r){super(e,t,n),this.useSSS=r}direct({lightDirection:e,lightColor:t,reflectedLight:n},r,i){if(this.useSSS===!0){let{thicknessColorNode:r,thicknessDistortionNode:a,thicknessAmbientNode:o,thicknessAttenuationNode:s,thicknessPowerNode:c,thicknessScaleNode:l}=i.material,u=e.add(ox.mul(a)).normalize(),d=Y(G(Zb.dot(u.negate()).saturate().pow(c).mul(l)).add(o).mul(r));n.directDiffuse.addAssign(d.mul(s.mul(t)))}super.direct({lightDirection:e,lightColor:t,reflectedLight:n},r,i)}},fE=class extends uE{static get type(){return`MeshSSSNodeMaterial`}constructor(e){super(e),this.thicknessColorNode=null,this.thicknessDistortionNode=G(.1),this.thicknessAmbientNode=G(0),this.thicknessAttenuationNode=G(.1),this.thicknessPowerNode=G(2),this.thicknessScaleNode=G(10)}get useSSS(){return this.thicknessColorNode!==null}setupLightingModel(){return new dE(this.useClearcoat,this.useSheen,this.useIridescence,this.useSSS)}copy(e){return this.thicknessColorNode=e.thicknessColorNode,this.thicknessDistortionNode=e.thicknessDistortionNode,this.thicknessAmbientNode=e.thicknessAmbientNode,this.thicknessAttenuationNode=e.thicknessAttenuationNode,this.thicknessPowerNode=e.thicknessPowerNode,this.thicknessScaleNode=e.thicknessScaleNode,super.copy(e)}},pE=U(({normal:e,lightDirection:t,builder:n})=>{let r=J(e.dot(t).mul(.5).add(.5),0);if(n.material.gradientMap)return Y(kx(`gradientMap`,`texture`).context({getUV:()=>r}).r);{let e=r.fwidth().mul(.5);return oy(Y(.7),Y(1),uy(G(.7).sub(e.x),G(.7).add(e.x),r.x))}}),mE=class extends Tw{direct({lightDirection:e,lightColor:t,reflectedLight:n},r,i){let a=pE({normal:tx,lightDirection:e,builder:i}).mul(t);n.directDiffuse.addAssign(a.mul(Aw({diffuseColor:i_.rgb})))}indirect({ambientOcclusion:e,irradiance:t,reflectedLight:n}){n.indirectDiffuse.addAssign(t.mul(Aw({diffuseColor:i_}))),n.indirectDiffuse.mulAssign(e)}},hE=new xf,gE=class extends tw{static get type(){return`MeshToonNodeMaterial`}constructor(e){super(),this.isMeshToonNodeMaterial=!0,this.lights=!0,this.setDefaultValues(hE),this.setValues(e)}setupLightingModel(){return new mE}},_E=class extends zh{static get type(){return`MatcapUVNode`}constructor(){super(`vec2`)}setup(){let e=Y(Zb.z,0,Zb.x.negate()).normalize(),t=Zb.cross(e);return J(e.dot(ox),t.dot(ox)).mul(.495).add(.5)}},vE=H(_E),yE=new wf,bE=class extends tw{static get type(){return`MeshMatcapNodeMaterial`}constructor(e){super(),this.lights=!1,this.isMeshMatcapNodeMaterial=!0,this.setDefaultValues(yE),this.setValues(e)}setupVariants(e){let t=vE,n;n=e.material.matcap?kx(`matcap`,`texture`).context({getUV:()=>t}):Y(oy(.2,.8,t.y)),i_.rgb.mulAssign(n.rgb)}},xE=new _u,SE=class extends tw{static get type(){return`PointsNodeMaterial`}constructor(e){super(),this.isPointsNodeMaterial=!0,this.lights=!1,this.transparent=!0,this.sizeNode=null,this.setDefaultValues(xE),this.setValues(e)}copy(e){return this.sizeNode=e.sizeNode,super.copy(e)}},CE=class extends zh{static get type(){return`RotateNode`}constructor(e,t){super(),this.positionNode=e,this.rotationNode=t}getNodeType(e){return this.positionNode.getNodeType(e)}setup(e){let{rotationNode:t,positionNode:n}=this;if(this.getNodeType(e)===`vec2`){let e=t.cos(),r=t.sin();return Bg(e,r,r.negate(),e).mul(n)}else{let e=t,r=Hg(X(1,0,0,0),X(0,Tv(e.x),wv(e.x).negate(),0),X(0,wv(e.x),Tv(e.x),0),X(0,0,0,1)),i=Hg(X(Tv(e.y),0,wv(e.y),0),X(0,1,0,0),X(wv(e.y).negate(),0,Tv(e.y),0),X(0,0,0,1)),a=Hg(X(Tv(e.z),wv(e.z).negate(),0,0),X(wv(e.z),Tv(e.z),0,0),X(0,0,1,0),X(0,0,0,1));return r.mul(i).mul(a).mul(X(n,1)).xyz}}},wE=V(CE),TE=new Yc,EE=class extends tw{static get type(){return`SpriteNodeMaterial`}constructor(e){super(),this.isSpriteNodeMaterial=!0,this.lights=!1,this._useSizeAttenuation=!0,this.positionNode=null,this.rotationNode=null,this.scaleNode=null,this.setDefaultValues(TE),this.setValues(e)}setupPosition({object:e,camera:t,context:n}){let r=this.sizeAttenuation,{positionNode:i,rotationNode:a,scaleNode:o}=this,s=Kb,c=Hb.mul(Y(i||0)),l=J(Ib[0].xyz.length(),Ib[1].xyz.length());o!==null&&(l=l.mul(o)),!r&&t.isPerspectiveCamera&&(l=l.mul(c.z.negate()));let u=s.xy;if(e.center&&e.center.isVector2===!0){let e=Fy(`center`,`vec2`);u=u.sub(e.sub(.5))}u=u.mul(l);let d=G(a||_S),f=wE(u,d);c=X(c.xy.add(f),c.zw);let p=Sb.mul(c);return n.vertex=s,p}copy(e){return this.positionNode=e.positionNode,this.rotationNode=e.rotationNode,this.scaleNode=e.scaleNode,super.copy(e)}get sizeAttenuation(){return this._useSizeAttenuation}set sizeAttenuation(e){this._useSizeAttenuation!==e&&(this._useSizeAttenuation=e,this.needsUpdate=!0)}},DE=class extends Tw{constructor(){super(),this.shadowNode=G(1).toVar(`shadowMask`)}direct({shadowMask:e}){this.shadowNode.mulAssign(e)}finish(e){i_.a.mulAssign(this.shadowNode.oneMinus()),e.outgoingLight.rgb.assign(i_.rgb)}},OE=new gf,kE=class extends tw{static get type(){return`ShadowNodeMaterial`}constructor(e){super(),this.isShadowNodeMaterial=!0,this.lights=!0,this.setDefaultValues(OE),this.setValues(e)}setupLightingModel(){return new DE}},AE=U(({texture:e,uv:t})=>{let n=1e-4,r=Y().toVar();return W(t.x.lessThan(n),()=>{r.assign(Y(1,0,0))}).ElseIf(t.y.lessThan(n),()=>{r.assign(Y(0,1,0))}).ElseIf(t.z.lessThan(n),()=>{r.assign(Y(0,0,1))}).ElseIf(t.x.greaterThan(1-n),()=>{r.assign(Y(-1,0,0))}).ElseIf(t.y.greaterThan(1-n),()=>{r.assign(Y(0,-1,0))}).ElseIf(t.z.greaterThan(1-n),()=>{r.assign(Y(0,0,-1))}).Else(()=>{let n=.01,i=e.uv(t.add(Y(-n,0,0))).r.sub(e.uv(t.add(Y(n,0,0))).r),a=e.uv(t.add(Y(0,-n,0))).r.sub(e.uv(t.add(Y(0,n,0))).r),o=e.uv(t.add(Y(0,0,-n))).r.sub(e.uv(t.add(Y(0,0,n))).r);r.assign(Y(i,a,o))}),r.normalize()}),jE=class extends hb{static get type(){return`Texture3DNode`}constructor(e,t=null,n=null){super(e,t,n),this.isTexture3DNode=!0}getInputType(){return`texture3D`}getDefaultUV(){return Y(.5,.5,.5)}setUpdateMatrix(){}setupUV(e,t){return t}generateUV(e,t){return t.build(e,`vec3`)}normal(e){return AE({texture:this,uv:e})}},ME=V(jE),NE=class extends tw{static get type(){return`VolumeNodeMaterial`}constructor(e={}){super(),this.lights=!1,this.isVolumeNodeMaterial=!0,this.testNode=null,this.setValues(e)}setup(e){let t=ME(this.map,null,0),n=U(({orig:e,dir:t})=>{let n=Y(-.5),r=Y(.5),i=t.reciprocal(),a=n.sub(e).mul(i),o=r.sub(e).mul(i),s=Wv(a,o),c=Gv(a,o);return J(Gv(s.x,Gv(s.y,s.z)),Wv(c.x,Wv(c.y,c.z)))});this.fragmentNode=U(()=>{let e=Cy(Y(Vb.mul(X(Db,1)))),r=Cy(Gb.sub(e)).normalize(),i=J(n({orig:e,dir:r})).toVar();i.x.greaterThan(i.y).discard(),i.assign(J(Gv(i.x,0),i.y));let a=Y(e.add(i.x.mul(r))).toVar(),o=Y(r.abs().reciprocal()).toVar(),s=G(Wv(o.x,Wv(o.y,o.z))).toVar(`delta`);s.divAssign(kx(`steps`,`float`));let c=X(kx(`base`,`color`),0).toVar();return rC({type:`float`,start:i.x,end:i.y,update:`+= delta`},()=>{let e=n_(`float`,`d`).assign(t.uv(a.add(.5)).r);this.testNode===null?(c.a.assign(1),aC()):this.testNode({map:t,mapValue:e,probe:a,finalColor:c}).append(),a.addAssign(r.mul(s))}),c.a.equal(0).discard(),X(c)})(),super.setup(e)}},PE=class extends Qf{constructor(e){super(e),this.textures={},this.nodes={}}load(e,t,n,r){let i=new tp(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,n=>{try{t(this.parse(JSON.parse(n)))}catch(t){r?r(t):console.error(t),this.manager.itemError(e)}},n,r)}parseNodes(e){let t={};if(e!==void 0){for(let n of e){let{uuid:e,type:r}=n;t[e]=this.createNodeFromType(r),t[e].uuid=e}let n={nodes:t,textures:this.textures};for(let r of e)r.meta=n,t[r.uuid].deserialize(r),delete r.meta}return t}parse(e){let t=this.createNodeFromType(e.type);return t.uuid=e.uuid,e.meta={nodes:this.parseNodes(e.nodes),textures:this.textures},t.deserialize(e),delete e.meta,t}setTextures(e){return this.textures=e,this}setNodes(e){return this.nodes=e,this}createNodeFromType(e){return this.nodes[e]===void 0?(console.error(`THREE.NodeLoader: Node type not found:`,e),G()):B(new this.nodes[e])}},FE=class extends Dp{constructor(e){super(e),this.nodes={},this.nodeMaterials={}}parse(e){let t=super.parse(e),n=this.nodes,r=e.inputNodes;for(let e in r)t[e]=n[r[e]];return t}setNodes(e){return this.nodes=e,this}setNodeMaterials(e){return this.nodeMaterials=e,this}createMaterialFromType(e){let t=this.nodeMaterials[e];return t===void 0?super.createMaterialFromType(e):new t}},IE=class extends jp{constructor(e){super(e),this.nodes={},this.nodeMaterials={},this._nodesJSON=null}setNodes(e){return this.nodes=e,this}setNodeMaterials(e){return this.nodeMaterials=e,this}parse(e,t){this._nodesJSON=e.nodes;let n=super.parse(e,t);return this._nodesJSON=null,n}parseNodes(e,t){if(e!==void 0){let n=new PE;return n.setNodes(this.nodes),n.setTextures(t),n.parseNodes(e)}return{}}parseMaterials(e,t){let n={};if(e!==void 0){let r=this.parseNodes(this._nodesJSON,t),i=new FE;i.setTextures(t),i.setNodes(r),i.setNodeMaterials(this.nodeMaterials);for(let t=0,r=e.length;tB(new WE(e,t)),KE=class extends R{static get type(){return`CodeNode`}constructor(e=``,t=[],n=``){super(`code`),this.isCodeNode=!0,this.code=e,this.language=n,this.includes=t}isGlobal(){return!0}setIncludes(e){return this.includes=e,this}getIncludes(){return this.includes}generate(e){let t=this.getIncludes(e);for(let n of t)n.build(e);let n=e.getCodeFromNode(this,this.getNodeType(e));return n.code=this.code,n.code}serialize(e){super.serialize(e),e.code=this.code,e.language=this.language}deserialize(e){super.deserialize(e),this.code=e.code,this.language=e.language}},qE=V(KE),JE=(e,t)=>qE(e,t,`js`),YE=(e,t)=>qE(e,t,`wgsl`),XE=(e,t)=>qE(e,t,`glsl`),ZE=class extends KE{static get type(){return`FunctionNode`}constructor(e=``,t=[],n=``){super(e,t,n)}getNodeType(e){return this.getNodeFunction(e).type}getInputs(e){return this.getNodeFunction(e).inputs}getNodeFunction(e){let t=e.getDataFromNode(this),n=t.nodeFunction;return n===void 0&&(n=e.parser.parseFunction(this.code),t.nodeFunction=n),n}generate(e,t){super.generate(e);let n=this.getNodeFunction(e),r=n.name,i=n.type,a=e.getCodeFromNode(this,i);r!==``&&(a.name=r);let o=e.getPropertyName(a);return a.code=this.getNodeFunction(e).getCode(o)+` -`,t===`property`?o:e.format(`${o}()`,i,t)}},QE=(e,t=[],n=``)=>{for(let e=0;er.call(...e);return i.functionNode=r,i},$E=(e,t)=>QE(e,t,`glsl`),eD=(e,t)=>QE(e,t,`wgsl`),tD=class{constructor(e,t){this.name=e,this.value=t,this.boundary=0,this.itemSize=0,this.offset=0}setValue(e){this.value=e}getValue(){return this.value}},nD=class extends tD{constructor(e,t=0){super(e,t),this.isNumberUniform=!0,this.boundary=4,this.itemSize=1}},rD=class extends tD{constructor(e,t=new A){super(e,t),this.isVector2Uniform=!0,this.boundary=8,this.itemSize=2}},iD=class extends tD{constructor(e,t=new M){super(e,t),this.isVector3Uniform=!0,this.boundary=16,this.itemSize=3}},aD=class extends tD{constructor(e,t=new Fn){super(e,t),this.isVector4Uniform=!0,this.boundary=16,this.itemSize=4}},oD=class extends tD{constructor(e,t=new P){super(e,t),this.isColorUniform=!0,this.boundary=16,this.itemSize=3}},sD=class extends tD{constructor(e,t=new j){super(e,t),this.isMatrix3Uniform=!0,this.boundary=48,this.itemSize=12}},cD=class extends tD{constructor(e,t=new N){super(e,t),this.isMatrix4Uniform=!0,this.boundary=64,this.itemSize=16}},lD=class extends nD{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}},uD=class extends rD{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}},dD=class extends iD{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}},fD=class extends aD{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}},pD=class extends oD{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}},mD=class extends sD{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}},hD=class extends cD{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}},gD=class extends R{static get type(){return`StackNode`}constructor(e=null){super(),this.nodes=[],this.outputNode=null,this.parent=e,this._currentCond=null,this.isStackNode=!0}getNodeType(e){return this.outputNode?this.outputNode.getNodeType(e):`void`}add(e){return this.nodes.push(e),this}If(e,t){return this._currentCond=hy(e,new Sg(t)),this.add(this._currentCond)}ElseIf(e,t){let n=hy(e,new Sg(t));return this._currentCond.elseNode=n,this._currentCond=n,this}Else(e){return this._currentCond.elseNode=new Sg(e),this}build(e,...t){let n=Dg();Eg(this);for(let t of this.nodes)t.build(e,`void`);return Eg(n),this.outputNode?this.outputNode.build(e,...t):super.build(e,...t)}else(...e){return console.warn(`TSL.StackNode: .else() has been renamed to .Else().`),this.Else(...e)}elseif(...e){return console.warn(`TSL.StackNode: .elseif() has been renamed to .ElseIf().`),this.ElseIf(...e)}},_D=V(gD),vD=class{constructor(){this.weakMap=new WeakMap}get(e){let t=this.weakMap;for(let n=0;n0&&this._blur(i,0,0,t),this._applyPMREM(i),this._cleanup(i),i}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}async compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=BD(),await this._compileMaterial(this._cubemapMaterial))}async compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=VD(),await this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose(),this._backgroundBox!==null&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=2**this._lodMax}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?c:0,c,c),s.render(e,i)}s.autoClear=c,e.background=d}_textureToCubeUV(e,t){let n=this._renderer,r=e.mapping===301||e.mapping===302;r?this._cubemapMaterial===null&&(this._cubemapMaterial=BD(e)):this._equirectMaterial===null&&(this._equirectMaterial=VD(e));let i=r?this._cubemapMaterial:this._equirectMaterial;i.fragmentNode.value=e;let a=this._lodMeshes[0];a.material=i;let o=this._cubeSize;LD(t,0,0,3*o,2*o),n.setRenderTarget(t),n.render(a,SD)}_applyPMREM(e){let t=this._renderer,n=t.autoClear;t.autoClear=!1;let r=this._lodPlanes.length;for(let t=1;txD&&console.warn(`sigmaRadians, ${i}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${xD}`);let h=[],g=0;for(let e=0;e_-yD?r-_+yD:0),4*(this._cubeSize-v),3*v,2*v),s.setRenderTarget(t),s.render(l,SD)}};function FD(e){let t=[],n=[],r=[],i=[],a=e,o=e-yD+1+bD.length;for(let s=0;se-yD?c=bD[s-e+yD-1]:s===0&&(c=0),r.push(c);let l=1/(o-2),u=-l,d=1+l,f=[u,u,d,u,d,d,u,u,d,d,u,d],p=new Float32Array(108),m=new Float32Array(72),h=new Float32Array(36);for(let e=0;e<6;e++){let t=e%3*2/3-1,n=e>2?0:-1,r=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0],i=jD[e];p.set(r,18*i),m.set(f,12*i);let a=[i,i,i,i,i,i];h.set(a,6*i)}let g=new Ii;g.setAttribute(`position`,new bi(p,3)),g.setAttribute(`uv`,new bi(m,2)),g.setAttribute(`faceIndex`,new bi(h,1)),t.push(g),i.push(new Ji(g,null)),a>yD&&a--}return{lodPlanes:t,sizeLods:n,sigmas:r,lodMeshes:i}}function ID(e,t,n){let r=new In(e,t,n);return r.texture.mapping=306,r.texture.name=`PMREM.cubeUv`,r.texture.isPMREMTexture=!0,r.scissorTest=!0,r}function LD(e,t,n,r,i){e.viewport.set(t,n,r,i),e.scissor.set(t,n,r,i)}function RD(e){let t=new tw;return t.depthTest=!1,t.depthWrite=!1,t.blending=0,t.name=`PMREM_${e}`,t}function zD(e,t,n){let r=Sx(Array(xD).fill(0)),i=Z(new M(0,1,0)),a=Z(0),o=G(xD),s=Z(0),c={n:o,latitudinal:s,weights:r,poleAxis:i,outputDirection:ND,dTheta:a,samples:Z(1),envMap:gb(null),mipInt:Z(0),CUBEUV_TEXEL_WIDTH:G(1/t),CUBEUV_TEXEL_HEIGHT:G(1/n),CUBEUV_MAX_MIP:G(e)},l=RD(`blur`);return l.uniforms=c,l.fragmentNode=JT({...c,latitudinal:s.equal(1)}),l}function BD(e){let t=RD(`cubemap`);return t.fragmentNode=_x(e,ND),t}function VD(e){let t=RD(`equirect`);return t.fragmentNode=gb(e,hw(ND),0),t}var HD=0,UD=class{constructor(e=``,t=[],n=0,r=[]){this.name=e,this.bindings=t,this.index=n,this.bindingsReference=r,this.id=HD++}},WD=new WeakMap,GD=new Map([[2,`vec2`],[3,`vec3`],[4,`vec4`],[9,`mat3`],[16,`mat4`]]),KD=new Map([[Int8Array,`int`],[Int16Array,`int`],[Int32Array,`int`],[Uint8Array,`uint`],[Uint16Array,`uint`],[Uint32Array,`uint`],[Float32Array,`float`]]),qD=e=>(e=Number(e),e+(e%1?``:`.0`)),JD=class{constructor(e,t,n){this.object=e,this.material=e&&e.material||null,this.geometry=e&&e.geometry||null,this.renderer=t,this.parser=n,this.scene=null,this.camera=null,this.nodes=[],this.updateNodes=[],this.updateBeforeNodes=[],this.updateAfterNodes=[],this.hashNodes={},this.monitor=null,this.lightsNode=null,this.environmentNode=null,this.fogNode=null,this.clippingContext=null,this.vertexShader=null,this.fragmentShader=null,this.computeShader=null,this.flowNodes={vertex:[],fragment:[],compute:[]},this.flowCode={vertex:``,fragment:``,compute:``},this.uniforms={vertex:[],fragment:[],compute:[],index:0},this.structs={vertex:[],fragment:[],compute:[],index:0},this.bindings={vertex:{},fragment:{},compute:{}},this.bindingsIndexes={},this.bindGroups=null,this.attributes=[],this.bufferAttributes=[],this.varyings=[],this.codes={},this.vars={},this.flow={code:``},this.chaining=[],this.stack=_D(),this.stacks=[],this.tab=` `,this.currentFunctionNode=null,this.context={material:this.material},this.cache=new UE,this.globalCache=this.cache,this.flowsData=new WeakMap,this.shaderStage=null,this.buildStage=null,this.useComparisonMethod=!1}getBindGroupsCache(){let e=WD.get(this.renderer);return e===void 0&&(e=new vD,WD.set(this.renderer,e)),e}createRenderTarget(e,t,n){return new In(e,t,n)}createCubeRenderTarget(e,t){return new gw(e,t)}createPMREMGenerator(){return new PD(this.renderer)}includes(e){return this.nodes.includes(e)}_getBindGroup(e,t){let n=this.getBindGroupsCache(),r=[],i=!0;for(let e of t)r.push(e),i&&=e.groupNode.shared!==!0;let a;return i?(a=n.get(r),a===void 0&&(a=new UD(e,r,this.bindingsIndexes[e].group,r),n.set(r,a))):a=new UD(e,r,this.bindingsIndexes[e].group,r),a}getBindGroupArray(e,t){let n=this.bindings[t],r=n[e];return r===void 0&&(this.bindingsIndexes[e]===void 0&&(this.bindingsIndexes[e]={binding:0,group:Object.keys(this.bindingsIndexes).length}),n[e]=r=[]),r}getBindings(){let e=this.bindGroups;if(e===null){let t={},n=this.bindings;for(let e of Ph)for(let r in n[e]){let i=n[e][r];(t[r]||(t[r]=[])).push(...i)}e=[];for(let n in t){let r=t[n],i=this._getBindGroup(n,r);e.push(i)}this.bindGroups=e}return e}sortBindingGroups(){let e=this.getBindings();e.sort((e,t)=>e.bindings[0].groupNode.order-t.bindings[0].groupNode.order);for(let t=0;t=0?`${Math.round(t)}u`:`0u`;if(e===`bool`)return t?`true`:`false`;if(e===`color`)return`${this.getType(`vec3`)}( ${qD(t.r)}, ${qD(t.g)}, ${qD(t.b)} )`;let n=this.getTypeLength(e),r=this.getComponentType(e),i=e=>this.generateConst(r,e);if(n===2)return`${this.getType(e)}( ${i(t.x)}, ${i(t.y)} )`;if(n===3)return`${this.getType(e)}( ${i(t.x)}, ${i(t.y)}, ${i(t.z)} )`;if(n===4)return`${this.getType(e)}( ${i(t.x)}, ${i(t.y)}, ${i(t.z)}, ${i(t.w)} )`;if(n>4&&t&&(t.isMatrix3||t.isMatrix4))return`${this.getType(e)}( ${t.elements.map(i).join(`, `)} )`;if(n>4)return`${this.getType(e)}()`;throw Error(`NodeBuilder: Type '${e}' not found in generate constant attempt.`)}getType(e){return e===`color`?`vec3`:e}hasGeometryAttribute(e){return this.geometry&&this.geometry.getAttribute(e)!==void 0}getAttribute(e,t){let n=this.attributes;for(let t of n)if(t.name===e)return t;let r=new LE(e,t);return n.push(r),r}getPropertyName(e){return e.name}isVector(e){return/vec\d/.test(e)}isMatrix(e){return/mat\d/.test(e)}isReference(e){return e===`void`||e===`property`||e===`sampler`||e===`texture`||e===`cubeTexture`||e===`storageTexture`||e===`depthTexture`||e===`texture3D`}needsToWorkingColorSpace(){return!1}getComponentTypeFromTexture(e){let t=e.type;if(e.isDataTexture){if(t===1013)return`int`;if(t===1014)return`uint`}return`float`}getElementType(e){return e===`mat2`?`vec2`:e===`mat3`?`vec3`:e===`mat4`?`vec4`:this.getComponentType(e)}getComponentType(e){if(e=this.getVectorType(e),e===`float`||e===`bool`||e===`int`||e===`uint`)return e;let t=/(b|i|u|)(vec|mat)([2-4])/.exec(e);return t===null?null:t[1]===`b`?`bool`:t[1]===`i`?`int`:t[1]===`u`?`uint`:`float`}getVectorType(e){return e===`color`?`vec3`:e===`texture`||e===`cubeTexture`||e===`storageTexture`||e===`texture3D`?`vec4`:e}getTypeFromLength(e,t=`float`){if(e===1)return t;let n=GD.get(e);return(t===`float`?``:t[0])+n}getTypeFromArray(e){return KD.get(e.constructor)}getTypeFromAttribute(e){let t=e;e.isInterleavedBufferAttribute&&(t=e.data);let n=t.array,r=e.itemSize,i=e.normalized,a;return!(e instanceof Oi)&&i!==!0&&(a=this.getTypeFromArray(n)),this.getTypeFromLength(r,a)}getTypeLength(e){let t=this.getVectorType(e),n=/vec([2-4])/.exec(t);return n===null?t===`float`||t===`bool`||t===`int`||t===`uint`?1:/mat2/.test(e)===!0?4:/mat3/.test(e)===!0?9:/mat4/.test(e)===!0?16:0:Number(n[1])}getVectorFromMatrix(e){return e.replace(`mat`,`vec`)}changeComponentType(e,t){return this.getTypeFromLength(this.getTypeLength(e),t)}getIntegerType(e){let t=this.getComponentType(e);return t===`int`||t===`uint`?e:this.changeComponentType(e,`int`)}addStack(){return this.stack=_D(this.stack),this.stacks.push(Dg()||this.stack),Eg(this.stack),this.stack}removeStack(){let e=this.stack;return this.stack=e.parent,Eg(this.stacks.pop()),e}getDataFromNode(e,t=this.shaderStage,n=null){n=n===null?e.isGlobal(this)?this.globalCache:this.cache:n;let r=n.getData(e);return r===void 0&&(r={},n.setData(e,r)),r[t]===void 0&&(r[t]={}),r[t]}getNodeProperties(e,t=`any`){let n=this.getDataFromNode(e,t);return n.properties||={outputNode:null}}getBufferAttributeFromNode(e,t){let n=this.getDataFromNode(e),r=n.bufferAttribute;return r===void 0&&(r=new LE(`nodeAttribute`+ this.uniforms.index++,t,e),this.bufferAttributes.push(r),n.bufferAttribute=r),r}getStructTypeFromNode(e,t=this.shaderStage){let n=this.getDataFromNode(e,t);return n.structType===void 0&&(e.name=`StructType${this.structs.index++}`,this.structs[t].push(e),n.structType=e),e}getUniformFromNode(e,t,n=this.shaderStage,r=null){r===`in`&&(console.warn(`NodeBuilder: "in" is a reserved word, using "inValue" instead.`,e,r),e.name=`inValue`,r=e.name);let i=this.getDataFromNode(e,n,this.globalCache),a=i.uniform;if(a===void 0){let o=this.uniforms.index++;a=new RE(r||`nodeUniform`+o,t,e),this.uniforms[n].push(a),i.uniform=a}return a}getVarFromNode(e,t=null,n=e.getNodeType(this),r=this.shaderStage){let i=this.getDataFromNode(e,r),a=i.variable;if(a===void 0){let e=this.vars[r]||(this.vars[r]=[]);t===null&&(t=`nodeVar`+e.length),a=new zE(t,n),e.push(a),i.variable=a}return a}getVaryingFromNode(e,t=null,n=e.getNodeType(this)){let r=this.getDataFromNode(e,`any`),i=r.varying;if(i===void 0){let e=this.varyings,a=e.length;t===null&&(t=`nodeVarying`+a),i=new BE(t,n),e.push(i),r.varying=i}return i}getCodeFromNode(e,t,n=this.shaderStage){let r=this.getDataFromNode(e),i=r.code;if(i===void 0){let e=this.codes[n]||(this.codes[n]=[]),a=e.length;i=new VE(`nodeCode`+a,t),e.push(i),r.code=i}return i}addFlowCodeHierarchy(e,t){let{flowCodes:n,flowCodeBlock:r}=this.getDataFromNode(e),i=!0,a=t;for(;a;){if(r.get(a)===!0){i=!1;break}a=this.getDataFromNode(a).parentNodeBlock}if(i)for(let e of n)this.addLineFlowCode(e)}addLineFlowCodeBlock(e,t,n){let r=this.getDataFromNode(e),i=r.flowCodes||=[],a=r.flowCodeBlock||=new WeakMap;i.push(t),a.set(n,!0)}addLineFlowCode(e,t=null){return e===``?this:(t!==null&&this.context.nodeBlock&&this.addLineFlowCodeBlock(t,e,this.context.nodeBlock),e=this.tab+e,/;\s*$/.test(e)||(e+=`; -`),this.flow.code+=e,this)}addFlowCode(e){return this.flow.code+=e,this}addFlowTab(){return this.tab+=` `,this}removeFlowTab(){return this.tab=this.tab.slice(0,-1),this}getFlowData(e){return this.flowsData.get(e)}flowNode(e){let t=e.getNodeType(this),n=this.flowChildNode(e,t);return this.flowsData.set(e,n),n}buildFunctionNode(e){let t=new ZE,n=this.currentFunctionNode;return this.currentFunctionNode=t,t.code=this.buildFunctionCode(e),this.currentFunctionNode=n,t}flowShaderNode(e){let t=e.layout,n={[Symbol.iterator](){let e=0,t=Object.values(this);return{next:()=>({value:t[e],done:e++>=t.length})}}};for(let e of t.inputs)n[e.name]=new WE(e.type,e.name);e.layout=null;let r=e.call(n),i=this.flowStagesNode(r,t.type);return e.layout=t,i}flowStagesNode(e,t=null){let n=this.flow,r=this.vars,i=this.cache,a=this.buildStage,o=this.stack,s={code:``};this.flow=s,this.vars={},this.cache=new UE,this.stack=_D();for(let n of Nh)this.setBuildStage(n),s.result=e.build(this,t);return s.vars=this.getVars(this.shaderStage),this.flow=n,this.vars=r,this.cache=i,this.stack=o,this.setBuildStage(a),s}getFunctionOperator(){return null}flowChildNode(e,t=null){let n=this.flow,r={code:``};return this.flow=r,r.result=e.build(this,t),this.flow=n,r}flowNodeFromShaderStage(e,t,n=null,r=null){let i=this.shaderStage;this.setShaderStage(e);let a=this.flowChildNode(t,n);return r!==null&&(a.code+=`${this.tab+r} = ${a.result};\n`),this.flowCode[e]=this.flowCode[e]+a.code,this.setShaderStage(i),a}getAttributesArray(){return this.attributes.concat(this.bufferAttributes)}getAttributes(){console.warn(`Abstract function.`)}getVaryings(){console.warn(`Abstract function.`)}getVar(e,t){return`${this.getType(e)} ${t}`}getVars(e){let t=``,n=this.vars[e];if(n!==void 0)for(let e of n)t+=`${this.getVar(e.type,e.name)}; `;return t}getUniforms(){console.warn(`Abstract function.`)}getCodes(e){let t=this.codes[e],n=``;if(t!==void 0)for(let e of t)n+=e.code+` -`;return n}getHash(){return this.vertexShader+this.fragmentShader+this.computeShader}setShaderStage(e){this.shaderStage=e}getShaderStage(){return this.shaderStage}setBuildStage(e){this.buildStage=e}getBuildStage(){return this.buildStage}buildCode(){console.warn(`Abstract function.`)}build(){let{object:e,material:t,renderer:n}=this;if(t!==null){let e=n.nodes.library.fromMaterial(t);e===null&&(console.error(`NodeMaterial: Material "${t.type}" is not compatible.`),e=new tw),e.build(this)}else this.addFlow(`compute`,e);for(let e of Nh){this.setBuildStage(e),this.context.vertex&&this.context.vertex.isNode&&this.flowNodeFromShaderStage(`vertex`,this.context.vertex);for(let t of Ph){this.setShaderStage(t);let n=this.flowNodes[t];for(let t of n)e===`generate`?this.flowNode(t):t.build(this)}}return this.setBuildStage(null),this.setShaderStage(null),this.buildCode(),this.buildUpdateNodes(),this}getNodeUniform(e,t){if(t===`float`||t===`int`||t===`uint`)return new lD(e);if(t===`vec2`||t===`ivec2`||t===`uvec2`)return new uD(e);if(t===`vec3`||t===`ivec3`||t===`uvec3`)return new dD(e);if(t===`vec4`||t===`ivec4`||t===`uvec4`)return new fD(e);if(t===`color`)return new pD(e);if(t===`mat3`)return new mD(e);if(t===`mat4`)return new hD(e);throw Error(`Uniform "${t}" not declared.`)}createNodeMaterial(e=`NodeMaterial`){throw Error(`THREE.NodeBuilder: createNodeMaterial() was deprecated. Use new ${e}() instead.`)}format(e,t,n){if(t=this.getVectorType(t),n=this.getVectorType(n),t===n||n===null||this.isReference(n))return e;let r=this.getTypeLength(t),i=this.getTypeLength(n);return r===16&&i===9?`${this.getType(n)}(${e}[0].xyz, ${e}[1].xyz, ${e}[2].xyz)`:r===9&&i===4?`${this.getType(n)}(${e}[0].xy, ${e}[1].xy)`:r>4||i>4||i===0?e:r===i?`${this.getType(n)}( ${e} )`:r>i?this.format(`${e}.${`xyz`.slice(0,i)}`,this.getTypeFromLength(i,this.getComponentType(t)),n):i===4&&r>1?`${this.getType(n)}( ${this.format(e,t,`vec3`)}, 1.0 )`:r===2?`${this.getType(n)}( ${this.format(e,t,`vec2`)}, 0.0 )`:(r===1&&i>1&&t!==this.getComponentType(n)&&(e=`${this.getType(this.getComponentType(n))}( ${e} )`),`${this.getType(n)}( ${e} )`)}getSignature(){return`// Three.js r${n} - Node System\n`}},YD=class{constructor(){this.time=0,this.deltaTime=0,this.frameId=0,this.renderId=0,this.startTime=null,this.updateMap=new WeakMap,this.updateBeforeMap=new WeakMap,this.updateAfterMap=new WeakMap,this.renderer=null,this.material=null,this.camera=null,this.object=null,this.scene=null}_getMaps(e,t){let n=e.get(t);return n===void 0&&(n={renderMap:new WeakMap,frameMap:new WeakMap},e.set(t,n)),n}updateBeforeNode(e){let t=e.getUpdateBeforeType(),n=e.updateReference(this);if(t===L.FRAME){let{frameMap:t}=this._getMaps(this.updateBeforeMap,n);t.get(n)!==this.frameId&&e.updateBefore(this)!==!1&&t.set(n,this.frameId)}else if(t===L.RENDER){let{renderMap:t}=this._getMaps(this.updateBeforeMap,n);t.get(n)!==this.renderId&&e.updateBefore(this)!==!1&&t.set(n,this.renderId)}else t===L.OBJECT&&e.updateBefore(this)}updateAfterNode(e){let t=e.getUpdateAfterType(),n=e.updateReference(this);if(t===L.FRAME){let{frameMap:t}=this._getMaps(this.updateAfterMap,n);t.get(n)!==this.frameId&&e.updateAfter(this)!==!1&&t.set(n,this.frameId)}else if(t===L.RENDER){let{renderMap:t}=this._getMaps(this.updateAfterMap,n);t.get(n)!==this.renderId&&e.updateAfter(this)!==!1&&t.set(n,this.renderId)}else t===L.OBJECT&&e.updateAfter(this)}updateNode(e){let t=e.getUpdateType(),n=e.updateReference(this);if(t===L.FRAME){let{frameMap:t}=this._getMaps(this.updateMap,n);t.get(n)!==this.frameId&&e.update(this)!==!1&&t.set(n,this.frameId)}else if(t===L.RENDER){let{renderMap:t}=this._getMaps(this.updateMap,n);t.get(n)!==this.renderId&&e.update(this)!==!1&&t.set(n,this.renderId)}else t===L.OBJECT&&e.update(this)}update(){this.frameId++,this.lastTime===void 0&&(this.lastTime=performance.now()),this.deltaTime=(performance.now()-this.lastTime)/1e3,this.lastTime=performance.now(),this.time+=this.deltaTime}},XD=class{constructor(e,t,n=null,r=``,i=!1){this.type=e,this.name=t,this.count=n,this.qualifier=r,this.isConst=i}};XD.isNodeFunctionInput=!0;var ZD=class extends R{static get type(){return`StructTypeNode`}constructor(e){super(),this.types=e,this.isStructTypeNode=!0}getMemberTypes(){return this.types}},QD=class extends R{static get type(){return`OutputStructNode`}constructor(...e){super(),this.members=e,this.isOutputStructNode=!0}setup(e){super.setup(e);let t=this.members,n=[];for(let r=0;ri&&(r=n,i=a)}}this._candidateFnCall=n=r(...t)}return n}},iO=V(rO),aO=e=>(...t)=>iO(e,...t),oO=class e extends e_{static get type(){return`TimerNode`}constructor(t=e.LOCAL,n=1,r=0){super(r),this.scope=t,this.scale=n,this.updateType=L.FRAME}update(t){let n=this.scope,r=this.scale;n===e.LOCAL?this.value+=t.deltaTime*r:n===e.DELTA?this.value=t.deltaTime*r:n===e.FRAME?this.value=t.frameId:this.value=t.time*r}serialize(e){super.serialize(e),e.scope=this.scope,e.scale=this.scale}deserialize(e){super.deserialize(e),this.scope=e.scope,this.scale=e.scale}};oO.LOCAL=`local`,oO.GLOBAL=`global`,oO.DELTA=`delta`,oO.FRAME=`frame`;var sO=(e,t=0)=>B(new oO(oO.LOCAL,e,t)),cO=(e,t=0)=>B(new oO(oO.GLOBAL,e,t)),lO=(e,t=0)=>B(new oO(oO.DELTA,e,t)),uO=H(oO,oO.FRAME).toUint(),dO=class e extends R{static get type(){return`OscNode`}constructor(t=e.SINE,n=sO()){super(),this.method=t,this.timeNode=n}getNodeType(e){return this.timeNode.getNodeType(e)}setup(){let t=this.method,n=B(this.timeNode),r=null;return t===e.SINE?r=n.add(.75).mul(Math.PI*2).sin().mul(.5).add(.5):t===e.SQUARE?r=n.fract().round():t===e.TRIANGLE?r=n.add(.5).fract().mul(2).sub(1).abs():t===e.SAWTOOTH&&(r=n.fract()),r}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}};dO.SINE=`sine`,dO.SQUARE=`square`,dO.TRIANGLE=`triangle`,dO.SAWTOOTH=`sawtooth`;var fO=V(dO,dO.SINE),pO=V(dO,dO.SQUARE),mO=V(dO,dO.TRIANGLE),hO=V(dO,dO.SAWTOOTH),gO=class extends R{static get type(){return`SpriteSheetUVNode`}constructor(e,t=ub(),n=G(0)){super(`vec2`),this.countNode=e,this.uvNode=t,this.frameNode=n}setup(){let{frameNode:e,uvNode:t,countNode:n}=this,{width:r,height:i}=n,a=e.mod(r.mul(i)).floor(),o=a.mod(r),s=i.sub(a.add(1).div(r).ceil()),c=n.reciprocal(),l=J(o,s);return t.add(l).mul(c)}},_O=V(gO),vO=class extends Lh{static get type(){return`StorageArrayElementNode`}constructor(e,t){super(e,t),this.isStorageArrayElementNode=!0}set storageBufferNode(e){this.node=e}get storageBufferNode(){return this.node}setup(e){return e.isAvailable(`storageBuffer`)===!1&&this.node.bufferObject===!0&&e.setupPBO(this.node),super.setup(e)}generate(e,t){let n,r=e.context.assign;if(n=e.isAvailable(`storageBuffer`)===!1?this.node.bufferObject===!0&&r!==!0?e.generatePBO(this):this.node.build(e):super.generate(e),r!==!0){let r=this.getNodeType(e);n=e.format(n,r,t)}return n}},yO=V(vO),bO=class extends R{static get type(){return`TriplanarTexturesNode`}constructor(e,t=null,n=null,r=G(1),i=Kb,a=nx){super(`vec4`),this.textureXNode=e,this.textureYNode=t,this.textureZNode=n,this.scaleNode=r,this.positionNode=i,this.normalNode=a}setup(){let{textureXNode:e,textureYNode:t,textureZNode:n,scaleNode:r,positionNode:i,normalNode:a}=this,o=a.abs().normalize();o=o.div(o.dot(Y(1)));let s=i.yz.mul(r),c=i.zx.mul(r),l=i.xy.mul(r),u=e.value,d=t===null?u:t.value,f=n===null?u:n.value;return L_(gb(u,s).mul(o.x),gb(d,c).mul(o.y),gb(f,l).mul(o.z))}},xO=V(bO),SO=(...e)=>xO(...e),CO=new Sa,wO=new M,TO=new M,EO=new M,DO=new N,OO=new M(0,0,-1),kO=new Fn,AO=new M,jO=new M,MO=new Fn,NO=new A,PO=new In,FO=EC.flipX(),IO=!1,LO=class extends hb{static get type(){return`ReflectorNode`}constructor(e={}){super(PO.texture,FO);let{target:t=new Wr,resolution:n=1,generateMipmaps:r=!1,bounces:i=!0}=e;this.target=t,this.resolution=n,this.generateMipmaps=r,this.bounces=i,this.updateBeforeType=i?L.RENDER:L.FRAME,this.virtualCameras=new WeakMap,this.renderTargets=new WeakMap}_updateResolution(e,t){let n=this.resolution;t.getDrawingBufferSize(NO),e.setSize(Math.round(NO.width*n),Math.round(NO.height*n))}setup(e){return this._updateResolution(PO,e.renderer),super.setup(e)}getTextureNode(){return this.textureNode}getVirtualCamera(e){let t=this.virtualCameras.get(e);return t===void 0&&(t=e.clone(),this.virtualCameras.set(e,t)),t}getRenderTarget(e){let t=this.renderTargets.get(e);return t===void 0&&(t=new In(0,0,{type:D}),this.generateMipmaps===!0&&(t.texture.minFilter=y,t.texture.generateMipmaps=!0),this.renderTargets.set(e,t)),t}updateBefore(e){if(this.bounces===!1&&IO)return!1;IO=!0;let{scene:t,camera:n,renderer:r,material:i}=e,{target:a}=this,o=this.getVirtualCamera(n),s=this.getRenderTarget(o);if(r.getDrawingBufferSize(NO),this._updateResolution(s,r),TO.setFromMatrixPosition(a.matrixWorld),EO.setFromMatrixPosition(n.matrixWorld),DO.extractRotation(a.matrixWorld),wO.set(0,0,1),wO.applyMatrix4(DO),AO.subVectors(TO,EO),AO.dot(wO)>0)return;AO.reflect(wO).negate(),AO.add(TO),DO.extractRotation(n.matrixWorld),OO.set(0,0,-1),OO.applyMatrix4(DO),OO.add(EO),jO.subVectors(TO,OO),jO.reflect(wO).negate(),jO.add(TO),o.coordinateSystem=n.coordinateSystem,o.position.copy(AO),o.up.set(0,1,0),o.up.applyMatrix4(DO),o.up.reflect(wO),o.lookAt(jO),o.near=n.near,o.far=n.far,o.updateMatrixWorld(),o.projectionMatrix.copy(n.projectionMatrix),CO.setFromNormalAndCoplanarPoint(wO,TO),CO.applyMatrix4(o.matrixWorldInverse),kO.set(CO.normal.x,CO.normal.y,CO.normal.z,CO.constant);let c=o.projectionMatrix;MO.x=(Math.sign(kO.x)+c.elements[8])/c.elements[0],MO.y=(Math.sign(kO.y)+c.elements[9])/c.elements[5],MO.z=-1,MO.w=(1+c.elements[10])/c.elements[14],kO.multiplyScalar(1/kO.dot(MO)),c.elements[2]=kO.x,c.elements[6]=kO.y,c.elements[10]=kO.z-0,c.elements[14]=kO.w,this.value=s.texture,i.visible=!1;let l=r.getRenderTarget(),u=r.getMRT();r.setMRT(null),r.setRenderTarget(s),r.render(t,o),r.setMRT(u),r.setRenderTarget(l),i.visible=!0,IO=!1}},RO=e=>B(new LO(e)),zO=new Ba(-1,1,1,-1,0,1),BO=new class extends Ii{constructor(e=!1){super();let t=e===!1?[0,-1,0,1,2,1]:[0,2,0,0,2,0];this.setAttribute(`position`,new F([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute(`uv`,new F(t,2))}},VO=class extends Ji{constructor(e=null){super(BO,e),this.camera=zO,this.isQuadMesh=!0}renderAsync(e){return e.renderAsync(this,zO)}render(e){e.render(this,zO)}},HO=new A,UO=class extends hb{static get type(){return`RTTNode`}constructor(e,t=null,n=null,r={type:D}){let i=new In(t,n,r);super(i.texture,ub()),this.node=e,this.width=t,this.height=n,this.renderTarget=i,this.textureNeedsUpdate=!0,this.autoUpdate=!0,this.updateMap=new WeakMap,this._rttNode=null,this._quadMesh=new VO(new tw),this.updateBeforeType=L.RENDER}get autoSize(){return this.width===null}setup(e){return this._rttNode=this.node.context(e.getSharedContext()),this._quadMesh.material.name=`RTT`,this._quadMesh.material.needsUpdate=!0,super.setup(e)}setSize(e,t){this.width=e,this.height=t;let n=e*this.pixelRatio,r=t*this.pixelRatio;this.renderTarget.setSize(n,r),this.textureNeedsUpdate=!0}setPixelRatio(e){this.pixelRatio=e,this.setSize(this.width,this.height)}updateBefore({renderer:e}){if(this.textureNeedsUpdate===!1&&this.autoUpdate===!1)return;if(this.textureNeedsUpdate=!1,this.autoSize===!0){this.pixelRatio=e.getPixelRatio();let t=e.getSize(HO);this.setSize(t.width,t.height)}this._quadMesh.material.fragmentNode=this._rttNode;let t=e.getRenderTarget();e.setRenderTarget(this.renderTarget),this._quadMesh.render(e),e.setRenderTarget(t)}clone(){let e=new hb(this.value,this.uvNode,this.levelNode);return e.sampler=this.sampler,e.referenceNode=this,e}},WO=(e,...t)=>B(new UO(B(e),...t)),GO=(e,...t)=>e.isTextureNode?e:WO(e,...t),KO=class extends cb{static get type(){return`VertexColorNode`}constructor(e=0){super(null,`vec4`),this.isVertexColorNode=!0,this.index=e}getAttributeName(){let e=this.index;return`color`+(e>0?e:``)}generate(e){let t=this.getAttributeName(e),n=e.hasGeometryAttribute(t),r;return r=n===!0?super.generate(e):e.generateConst(this.nodeType,new Fn(1,1,1,1)),r}serialize(e){super.serialize(e),e.index=this.index}deserialize(e){super.deserialize(e),this.index=e.index}},qO=(...e)=>B(new KO(...e)),JO=class extends R{static get type(){return`PointUVNode`}constructor(){super(`vec2`),this.isPointUVNode=!0}generate(){return`vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )`}},YO=H(JO),XO=class e extends R{static get type(){return`SceneNode`}constructor(t=e.BACKGROUND_BLURRINESS,n=null){super(),this.scope=t,this.scene=n}setup(t){let n=this.scope,r=this.scene===null?t.scene:this.scene,i;return n===e.BACKGROUND_BLURRINESS?i=Ex(`backgroundBlurriness`,`float`,r):n===e.BACKGROUND_INTENSITY?i=Ex(`backgroundIntensity`,`float`,r):console.error(`THREE.SceneNode: Unknown scope:`,n),i}};XO.BACKGROUND_BLURRINESS=`backgroundBlurriness`,XO.BACKGROUND_INTENSITY=`backgroundIntensity`;var ZO=H(XO,XO.BACKGROUND_BLURRINESS),QO=H(XO,XO.BACKGROUND_INTENSITY),$O={Storage:`storage`,ReadOnlyStorage:`read-only-storage`},ek={WriteOnly:`write-only`,ReadOnly:`read-only`},tk=class extends vx{static get type(){return`StorageBufferNode`}constructor(e,t,n=0){super(e,t,n),this.isStorageBufferNode=!0,this.access=$O.Storage,this.isAtomic=!1,this.bufferObject=!1,this.bufferCount=n,this._attribute=null,this._varying=null,this.global=!0,e.isStorageBufferAttribute!==!0&&e.isStorageInstancedBufferAttribute!==!0&&(e.isInstancedBufferAttribute?e.isStorageInstancedBufferAttribute=!0:e.isStorageBufferAttribute=!0)}getHash(e){if(this.bufferCount===0){let t=e.globalCache.getData(this.value);return t===void 0&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getInputType(){return`storageBuffer`}element(e){return yO(this,e)}setBufferObject(e){return this.bufferObject=e,this}setAccess(e){return this.access=e,this}toReadOnly(){return this.setAccess($O.ReadOnlyStorage)}setAtomic(e){return this.isAtomic=e,this}toAtomic(){return this.setAtomic(!0)}generate(e){if(e.isAvailable(`storageBuffer`))return super.generate(e);let t=this.getNodeType(e);this._attribute===null&&(this._attribute=Hy(this.value),this._varying=Cy(this._attribute));let n=this._varying.build(e,t);return e.registerTransform(n,this._attribute),n}},nk=(e,t,n)=>B(new tk(e,t,n)),rk=(e,t,n)=>B(new tk(e,t,n).setBufferObject(!0)),ik=class extends hb{static get type(){return`StorageTextureNode`}constructor(e,t,n=null){super(e,t),this.storeNode=n,this.isStorageTextureNode=!0,this.access=ek.WriteOnly}getInputType(){return`storageTexture`}setup(e){super.setup(e);let t=e.getNodeProperties(this);t.storeNode=this.storeNode}setAccess(e){return this.access=e,this}generate(e,t){let n;return n=this.storeNode===null?super.generate(e,t):this.generateStore(e),n}toReadOnly(){return this.setAccess(ek.ReadOnly)}toWriteOnly(){return this.setAccess(ek.WriteOnly)}generateStore(e){let{uvNode:t,storeNode:n}=e.getNodeProperties(this),r=super.generate(e,`property`),i=t.build(e,`uvec2`),a=n.build(e,`vec4`),o=e.generateTextureStore(e,r,i,a);e.addLineFlowCode(o,this)}},ak=V(ik),ok=(e,t,n)=>{let r=ak(e,t,n);return n!==null&&r.append(),r},sk=class extends Tx{static get type(){return`UserDataNode`}constructor(e,t,n=null){super(e,t,n),this.userData=n}updateReference(e){return this.reference=this.userData===null?e.object.userData:this.userData,this.reference}},ck=(e,t,n)=>B(new sk(e,t,n)),lk=class extends zh{static get type(){return`PosterizeNode`}constructor(e,t){super(),this.sourceNode=e,this.stepsNode=t}setup(){let{sourceNode:e,stepsNode:t}=this;return e.mul(t).floor().div(t)}},uk=V(lk),dk=null,fk=class extends LC{static get type(){return`ViewportSharedTextureNode`}constructor(e=EC,t=null){dk===null&&(dk=new Tu),super(e,t,dk)}updateReference(){return this}},pk=V(fk),mk=new A,hk=class extends hb{static get type(){return`PassTextureNode`}constructor(e,t){super(t),this.passNode=e,this.setUpdateMatrix(!1)}setup(e){return e.object.isQuadMesh&&this.passNode.build(e),super.setup(e)}clone(){return new this.constructor(this.passNode,this.value)}},gk=class extends hk{static get type(){return`PassMultipleTextureNode`}constructor(e,t,n=!1){super(e,null),this.textureName=t,this.previousTexture=n}updateTexture(){this.value=this.previousTexture?this.passNode.getPreviousTexture(this.textureName):this.passNode.getTexture(this.textureName)}setup(e){return this.updateTexture(),super.setup(e)}clone(){return new this.constructor(this.passNode,this.textureName,this.previousTexture)}},_k=class e extends zh{static get type(){return`PassNode`}constructor(e,t,n,r={}){super(`vec4`),this.scope=e,this.scene=t,this.camera=n,this.options=r,this._pixelRatio=1,this._width=1,this._height=1;let i=new ho;i.isRenderTargetTexture=!0,i.name=`depth`;let a=new In(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:D,...r});a.texture.name=`output`,a.depthTexture=i,this.renderTarget=a,this.updateBeforeType=L.FRAME,this._textures={output:a.texture,depth:i},this._textureNodes={},this._linearDepthNodes={},this._viewZNodes={},this._previousTextures={},this._previousTextureNodes={},this._cameraNear=Z(0),this._cameraFar=Z(0),this._mrt=null,this.isPassNode=!0}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}isGlobal(){return!0}getTexture(e){let t=this._textures[e];return t===void 0&&(t=this.renderTarget.texture.clone(),t.isRenderTargetTexture=!0,t.name=e,this._textures[e]=t,this.renderTarget.textures.push(t)),t}getPreviousTexture(e){let t=this._previousTextures[e];return t===void 0&&(t=this.getTexture(e).clone(),t.isRenderTargetTexture=!0,this._previousTextures[e]=t),t}toggleTexture(e){let t=this._previousTextures[e];if(t!==void 0){let n=this._textures[e],r=this.renderTarget.textures.indexOf(n);this.renderTarget.textures[r]=t,this._textures[e]=t,this._previousTextures[e]=n,this._textureNodes[e].updateTexture(),this._previousTextureNodes[e].updateTexture()}}getTextureNode(e=`output`){let t=this._textureNodes[e];return t===void 0&&(this._textureNodes[e]=t=B(new gk(this,e)),this._textureNodes[e].updateTexture()),t}getPreviousTextureNode(e=`output`){let t=this._previousTextureNodes[e];return t===void 0&&(this._textureNodes[e]===void 0&&this.getTextureNode(e),this._previousTextureNodes[e]=t=B(new gk(this,e,!0)),this._previousTextureNodes[e].updateTexture()),t}getViewZNode(e=`depth`){let t=this._viewZNodes[e];if(t===void 0){let n=this._cameraNear,r=this._cameraFar;this._viewZNodes[e]=t=qC(this.getTextureNode(e),n,r)}return t}getLinearDepthNode(e=`depth`){let t=this._linearDepthNodes[e];if(t===void 0){let n=this._cameraNear,r=this._cameraFar,i=this.getViewZNode(e);this._linearDepthNodes[e]=t=WC(i,n,r)}return t}setup({renderer:t}){return this.renderTarget.samples=this.options.samples===void 0?t.samples:this.options.samples,t.backend.isWebGLBackend===!0&&(this.renderTarget.samples=0),this.renderTarget.depthTexture.isMultisampleRenderTargetTexture=this.renderTarget.samples>1,this.scope===e.COLOR?this.getTextureNode():this.getLinearDepthNode()}updateBefore(e){let{renderer:t}=e,{scene:n,camera:r}=this;this._pixelRatio=t.getPixelRatio();let i=t.getSize(mk);this.setSize(i.width,i.height);let a=t.getRenderTarget(),o=t.getMRT();this._cameraNear.value=r.near,this._cameraFar.value=r.far;for(let e in this._previousTextures)this.toggleTexture(e);t.setRenderTarget(this.renderTarget),t.setMRT(this._mrt),t.render(n,r),t.setRenderTarget(a),t.setMRT(o)}setSize(e,t){this._width=e,this._height=t;let n=this._width*this._pixelRatio,r=this._height*this._pixelRatio;this.renderTarget.setSize(n,r)}setPixelRatio(e){this._pixelRatio=e,this.setSize(this._width,this._height)}dispose(){this.renderTarget.dispose()}};_k.COLOR=`color`,_k.DEPTH=`depth`;var vk=(e,t,n)=>B(new _k(_k.COLOR,e,t,n)),yk=(e,t)=>B(new hk(e,t)),bk=(e,t)=>B(new _k(_k.DEPTH,e,t)),xk=new VO,Sk=new VO,Ck=class extends zh{static get type(){return`GaussianBlurNode`}constructor(e,t=null,n=2){super(`vec4`),this.textureNode=e,this.directionNode=t,this.sigma=n,this._invSize=Z(new A),this._passDirection=Z(new A),this._horizontalRT=new In,this._horizontalRT.texture.name=`GaussianBlurNode.horizontal`,this._verticalRT=new In,this._verticalRT.texture.name=`GaussianBlurNode.vertical`,this._textureNode=yk(this,this._verticalRT.texture),this.updateBeforeType=L.RENDER,this.resolution=new A(1,1)}setSize(e,t){e=Math.max(Math.round(e*this.resolution.x),1),t=Math.max(Math.round(t*this.resolution.y),1),this._invSize.value.set(1/e,1/t),this._horizontalRT.setSize(e,t),this._verticalRT.setSize(e,t)}updateBefore(e){let{renderer:t}=e,n=this.textureNode,r=n.value,i=t.getRenderTarget(),a=t.getMRT(),o=n.value;xk.material=this._material,Sk.material=this._material,this.setSize(r.image.width,r.image.height);let s=r.type;this._horizontalRT.texture.type=s,this._verticalRT.texture.type=s,t.setMRT(null),t.setRenderTarget(this._horizontalRT),this._passDirection.value.set(1,0),xk.render(t),n.value=this._horizontalRT.texture,t.setRenderTarget(this._verticalRT),this._passDirection.value.set(0,1),Sk.render(t),t.setRenderTarget(i),t.setMRT(a),n.value=o}getTextureNode(){return this._textureNode}setup(e){let t=this.textureNode;if(t.isTextureNode!==!0)return console.error(`GaussianBlurNode requires a TextureNode.`),X();let n=t.uvNode||ub(),r=J(this.directionNode||1),i=e=>t.uv(e),a=U(()=>{let e=3+2*this.sigma,t=this._getCoefficients(e),a=this._invSize,o=r.mul(this._passDirection),s=G(t[0]).toVar(),c=X(i(n).mul(s)).toVar();for(let r=1;rB(new Ck(GO(e),t,n)),Tk=new A,Ek=new VO,Dk=class extends zh{static get type(){return`AfterImageNode`}constructor(e,t=.96){super(e),this.textureNode=e,this.textureNodeOld=gb(),this.damp=Z(t),this._compRT=new In,this._compRT.texture.name=`AfterImageNode.comp`,this._oldRT=new In,this._oldRT.texture.name=`AfterImageNode.old`,this._textureNode=yk(this,this._compRT.texture),this.updateBeforeType=L.RENDER}getTextureNode(){return this._textureNode}setSize(e,t){this._compRT.setSize(e,t),this._oldRT.setSize(e,t)}updateBefore(e){let{renderer:t}=e,n=this.textureNode,r=n.value.type;this._compRT.texture.type=r,this._oldRT.texture.type=r,t.getDrawingBufferSize(Tk),this.setSize(Tk.x,Tk.y);let i=t.getRenderTarget(),a=n.value;this.textureNodeOld.value=this._oldRT.texture,t.setRenderTarget(this._compRT),Ek.render(t);let o=this._oldRT;this._oldRT=this._compRT,this._compRT=o,t.setRenderTarget(i),n.value=a}setup(e){let t=this.textureNode,n=this.textureNodeOld,r=t.uvNode||ub();n.uvNode=r;let i=e=>t.uv(e),a=U(([e,t])=>{let n=G(t).toVar();return Gv(jv(X(e).toVar().sub(n)),0)}),o=U(()=>{let e=X(n),t=X(i(r));return e.mulAssign(this.damp.mul(a(e,.1))),Gv(t,e)}),s=this._materialComposed||=new tw;s.name=`AfterImage`,s.fragmentNode=o(),Ek.material=s;let c=e.getNodeProperties(this);return c.textureNode=t,this._textureNode}dispose(){this._compRT.dispose(),this._oldRT.dispose()}},Ok=(e,t)=>B(new Dk(GO(e),t)),kk=U(([e])=>Pk(e.rgb)),Ak=U(([e,t=G(1)])=>t.mix(Pk(e.rgb),e.rgb)),jk=U(([e,t=G(1)])=>{let n=L_(e.r,e.g,e.b).div(3),r=e.r.max(e.g.max(e.b)),i=r.sub(n).mul(t).mul(-3);return oy(e.rgb,r,i)}),Mk=U(([e,t=G(1)])=>{let n=Y(.57735,.57735,.57735),r=t.cos();return Y(e.rgb.mul(r).add(n.cross(e.rgb).mul(t.sin()).add(n.mul(Zv(n,e.rgb).mul(r.oneMinus())))))}),Nk=new M,Pk=(e,t=Y(...Tn.getLuminanceCoefficients(Nk)))=>Zv(e,t),Fk=(e,t)=>oy(Y(0),e,Pk(e).sub(t).max(0)),Ik=new VO,Lk=class extends zh{static get type(){return`AnamorphicNode`}constructor(e,t,n,r){super(`vec4`),this.textureNode=e,this.tresholdNode=t,this.scaleNode=n,this.colorNode=Y(.1,0,1),this.samples=r,this.resolution=new A(1,1),this._renderTarget=new In,this._renderTarget.texture.name=`anamorphic`,this._invSize=Z(new A),this._textureNode=yk(this,this._renderTarget.texture),this.updateBeforeType=L.RENDER}getTextureNode(){return this._textureNode}setSize(e,t){this._invSize.value.set(1/e,1/t),e=Math.max(Math.round(e*this.resolution.x),1),t=Math.max(Math.round(t*this.resolution.y),1),this._renderTarget.setSize(e,t)}updateBefore(e){let{renderer:t}=e,n=this.textureNode,r=n.value;this._renderTarget.texture.type=r.type;let i=t.getRenderTarget(),a=n.value;Ik.material=this._material,this.setSize(r.image.width,r.image.height),t.setRenderTarget(this._renderTarget),Ik.render(t),t.setRenderTarget(i),n.value=a}setup(e){let t=this.textureNode,n=t.uvNode||ub(),r=e=>t.uv(e),i=U(()=>{let e=this.samples,t=Math.floor(e/2),i=Y(0).toVar();return rC({start:-t,end:t},({i:e})=>{let a=G(e).abs().div(t).oneMinus(),o=Fk(r(J(n.x.add(this._invSize.x.mul(e).mul(this.scaleNode)),n.y)),this.tresholdNode).mul(a);i.addAssign(o)}),i.mul(this.colorNode)}),a=this._material||=new tw;a.name=`Anamorphic`,a.fragmentNode=i();let o=e.getNodeProperties(this);return o.textureNode=t,this._textureNode}dispose(){this._renderTarget.dispose()}},Rk=(e,t=.9,n=3,r=32)=>B(new Lk(GO(e),B(t),B(n),r)),zk=class extends zh{static get type(){return`SobelOperatorNode`}constructor(e){super(),this.textureNode=e,this.updateBeforeType=L.RENDER,this._invSize=Z(new A)}updateBefore(){let e=this.textureNode.value;this._invSize.value.set(1/e.image.width,1/e.image.height)}setup(){let{textureNode:e}=this,t=e.uvNode||ub(),n=t=>e.uv(t);return U(()=>{let e=this._invSize,r=Vg(-1,-2,-1,0,0,0,1,2,1),i=Vg(-1,0,1,-2,0,2,-1,0,1),a=Pk(n(t.add(e.mul(J(-1,-1)))).xyz),o=Pk(n(t.add(e.mul(J(-1,0)))).xyz),s=Pk(n(t.add(e.mul(J(-1,1)))).xyz),c=Pk(n(t.add(e.mul(J(0,-1)))).xyz),l=Pk(n(t.add(e.mul(J(0,0)))).xyz),u=Pk(n(t.add(e.mul(J(0,1)))).xyz),d=Pk(n(t.add(e.mul(J(1,-1)))).xyz),f=Pk(n(t.add(e.mul(J(1,0)))).xyz),p=Pk(n(t.add(e.mul(J(1,1)))).xyz),m=L_(r[0][0].mul(a),r[1][0].mul(c),r[2][0].mul(d),r[0][1].mul(o),r[1][1].mul(l),r[2][1].mul(f),r[0][2].mul(s),r[1][2].mul(u),r[2][2].mul(p)),h=L_(i[0][0].mul(a),i[1][0].mul(c),i[2][0].mul(d),i[0][1].mul(o),i[1][1].mul(l),i[2][1].mul(f),i[0][2].mul(s),i[1][2].mul(u),i[2][2].mul(p));return X(Y(m.mul(m).add(h.mul(h)).sqrt()),1)})()}},Bk=e=>B(new zk(GO(e))),Vk=class extends zh{static get type(){return`DepthOfFieldNode`}constructor(e,t,n,r,i){super(),this.textureNode=e,this.viewZNode=t,this.focusNode=n,this.apertureNode=r,this.maxblurNode=i,this._aspect=Z(0),this.updateBeforeType=L.RENDER}updateBefore(){let e=this.textureNode.value;this._aspect.value=e.image.width/e.image.height}setup(){let e=this.textureNode,t=e.uvNode||ub(),n=t=>e.uv(t);return U(()=>{let e=J(1,this._aspect),r=J(sy(this.focusNode.add(this.viewZNode).mul(this.apertureNode),this.maxblurNode.negate(),this.maxblurNode)),i=r.mul(.9),a=r.mul(.7),o=r.mul(.4),s=X(0);return s=s.add(n(t)),s=s.add(n(t.add(J(0,.4).mul(e).mul(r)))),s=s.add(n(t.add(J(.15,.37).mul(e).mul(r)))),s=s.add(n(t.add(J(.29,.29).mul(e).mul(r)))),s=s.add(n(t.add(J(-.37,.15).mul(e).mul(r)))),s=s.add(n(t.add(J(.4,0).mul(e).mul(r)))),s=s.add(n(t.add(J(.37,-.15).mul(e).mul(r)))),s=s.add(n(t.add(J(.29,-.29).mul(e).mul(r)))),s=s.add(n(t.add(J(-.15,-.37).mul(e).mul(r)))),s=s.add(n(t.add(J(0,-.4).mul(e).mul(r)))),s=s.add(n(t.add(J(-.15,.37).mul(e).mul(r)))),s=s.add(n(t.add(J(-.29,.29).mul(e).mul(r)))),s=s.add(n(t.add(J(.37,.15).mul(e).mul(r)))),s=s.add(n(t.add(J(-.4,0).mul(e).mul(r)))),s=s.add(n(t.add(J(-.37,-.15).mul(e).mul(r)))),s=s.add(n(t.add(J(-.29,-.29).mul(e).mul(r)))),s=s.add(n(t.add(J(.15,-.37).mul(e).mul(r)))),s=s.add(n(t.add(J(.15,.37).mul(e).mul(i)))),s=s.add(n(t.add(J(-.37,.15).mul(e).mul(i)))),s=s.add(n(t.add(J(.37,-.15).mul(e).mul(i)))),s=s.add(n(t.add(J(-.15,-.37).mul(e).mul(i)))),s=s.add(n(t.add(J(-.15,.37).mul(e).mul(i)))),s=s.add(n(t.add(J(.37,.15).mul(e).mul(i)))),s=s.add(n(t.add(J(-.37,-.15).mul(e).mul(i)))),s=s.add(n(t.add(J(.15,-.37).mul(e).mul(i)))),s=s.add(n(t.add(J(.29,.29).mul(e).mul(a)))),s=s.add(n(t.add(J(.4,0).mul(e).mul(a)))),s=s.add(n(t.add(J(.29,-.29).mul(e).mul(a)))),s=s.add(n(t.add(J(0,-.4).mul(e).mul(a)))),s=s.add(n(t.add(J(-.29,.29).mul(e).mul(a)))),s=s.add(n(t.add(J(-.4,0).mul(e).mul(a)))),s=s.add(n(t.add(J(-.29,-.29).mul(e).mul(a)))),s=s.add(n(t.add(J(0,.4).mul(e).mul(a)))),s=s.add(n(t.add(J(.29,.29).mul(e).mul(o)))),s=s.add(n(t.add(J(.4,0).mul(e).mul(o)))),s=s.add(n(t.add(J(.29,-.29).mul(e).mul(o)))),s=s.add(n(t.add(J(0,-.4).mul(e).mul(o)))),s=s.add(n(t.add(J(-.29,.29).mul(e).mul(o)))),s=s.add(n(t.add(J(-.4,0).mul(e).mul(o)))),s=s.add(n(t.add(J(-.29,-.29).mul(e).mul(o)))),s=s.add(n(t.add(J(0,.4).mul(e).mul(o)))),s=s.div(41),s.a=1,X(s)})()}},Hk=(e,t,n=1,r=.025,i=1)=>B(new Vk(GO(e),B(t),B(n),B(r),B(i))),Uk=class extends zh{static get type(){return`DotScreenNode`}constructor(e,t=new A(.5,.5),n=1.57,r=1){super(`vec4`),this.inputNode=e,this.center=Z(t),this.angle=Z(n),this.scale=Z(r)}setup(){let e=this.inputNode,t=U(()=>{let e=wv(this.angle),t=Tv(this.angle),n=ub().mul(DC).sub(this.center),r=J(t.mul(n.x).sub(e.mul(n.y)),e.mul(n.x).add(t.mul(n.y))).mul(this.scale);return wv(r.x).mul(wv(r.y)).mul(4)});return U(()=>{let n=e;return X(Y(L_(n.r,n.g,n.b).div(3).mul(10).sub(5).add(t())),n.a)})()}},Wk=(e,t,n,r)=>B(new Uk(B(e),t,n,r)),Gk=class extends zh{static get type(){return`RGBShiftNode`}constructor(e,t=.005,n=0){super(`vec4`),this.textureNode=e,this.amount=Z(t),this.angle=Z(n)}setup(){let{textureNode:e}=this,t=e.uvNode||ub(),n=t=>e.uv(t);return U(()=>{let e=J(Tv(this.angle),wv(this.angle)).mul(this.amount),r=n(t.add(e)),i=n(t),a=n(t.sub(e));return X(r.r,i.g,a.b,i.a)})()}},Kk=(e,t,n)=>B(new Gk(GO(e),t,n)),qk=class extends zh{static get type(){return`FilmNode`}constructor(e,t=null,n=null){super(),this.inputNode=e,this.intensityNode=t,this.uvNode=n}setup(){let e=this.uvNode||ub();return U(()=>{let t=this.inputNode.rgb,n=fy(Cv(e.add(sO()))),r=t.add(t.mul(sy(n.add(.1),0,1)));return this.intensityNode!==null&&(r=oy(t,r,this.intensityNode)),X(r,this.inputNode.a)})()}},Jk=V(qk),Yk=class extends zh{static get type(){return`Lut3DNode`}constructor(e,t,n,r){super(),this.inputNode=e,this.lutNode=t,this.size=Z(n),this.intensityNode=r}setup(){let{inputNode:e,lutNode:t}=this,n=e=>t.uv(e);return U(()=>{let t=e,r=G(1).div(this.size);return X(oy(t,X(n(Y(G(.5).div(this.size)).add(t.rgb.mul(G(1).sub(r)))).rgb,t.a),this.intensityNode))})()}},Xk=(e,t,n,r)=>B(new Yk(B(e),B(t),n,B(r))),Zk=new VO,Qk=new P,$k=new A,eA=class extends zh{static get type(){return`GTAONode`}constructor(e,t,n){super(),this.depthNode=e,this.normalNode=t,this.radius=Z(.25),this.resolution=Z(new A),this.thickness=Z(1),this.distanceExponent=Z(1),this.distanceFallOff=Z(1),this.scale=Z(1),this.noiseNode=gb(tA()),this.cameraProjectionMatrix=Z(n.projectionMatrix),this.cameraProjectionMatrixInverse=Z(n.projectionMatrixInverse),this.SAMPLES=Z(16),this._aoRenderTarget=new In,this._aoRenderTarget.texture.name=`GTAONode.AO`,this._material=null,this._textureNode=yk(this,this._aoRenderTarget.texture),this.updateBeforeType=L.FRAME}getTextureNode(){return this._textureNode}setSize(e,t){this.resolution.value.set(e,t),this._aoRenderTarget.setSize(e,t)}updateBefore(e){let{renderer:t}=e,n=t.getDrawingBufferSize($k),r=t.getRenderTarget(),i=t.getMRT();t.getClearColor(Qk);let a=t.getClearAlpha();Zk.material=this._material,this.setSize(n.width,n.height),t.setMRT(null),t.setClearColor(16777215,1),t.setRenderTarget(this._aoRenderTarget),Zk.render(t),t.setRenderTarget(r),t.setMRT(i),t.setClearColor(Qk,a)}setup(e){let t=ub(),n=e=>this.depthNode.uv(e).x,r=e=>this.noiseNode.uv(e),i=U(([e])=>{let t=this.cameraProjectionMatrix.mul(X(e,1)),r=t.xy.div(t.w).mul(.5).add(.5).toVar();r=J(r.x,r.y.oneMinus());let i=n(r);return Y(r,i)}),a=U(([e,t])=>{e=J(e.x,e.y.oneMinus()).mul(2).sub(1);let n=X(Y(e,t),1),r=X(this.cameraProjectionMatrixInverse.mul(n));return r.xyz.div(r.w)}),o=U(()=>{let e=n(t);e.greaterThanEqual(1).discard();let o=a(t,e),s=this.normalNode.rgb.normalize(),c=this.radius,l=fb(this.noiseNode,0),u=J(t.x,t.y.oneMinus());u=u.mul(this.resolution.div(l));let d=r(u),f=Y(d.xyz.mul(2).sub(1).xy,0).normalize(),p=Vg(f,Y(f.y.mul(-1),f.x,0),Y(0,0,1)),m=this.SAMPLES.lessThan(30).select(3,5),h=L_(this.SAMPLES,m.sub(1)).div(m),g=G(0).toVar();return rC({start:K(0),end:m,type:`int`,condition:`<`},({i:e})=>{let t=G(e).div(G(m)).mul(sv),n=X(Tv(t),wv(t),0,L_(.5,z_(.5,d.w)));n.xyz=Sv(p.mul(n.xyz));let r=Sv(o.xyz.negate()),l=Sv(Qv(n.xyz,r)),u=Qv(l,r),f=Sv(s.sub(l.mul(Zv(s,l)))),_=Qv(f,l),v=J(Zv(r,_),Zv(r,_.negate())).toVar();rC({end:h,type:`int`,name:`j`,condition:`<`},({j:e})=>{let t=n.xyz.mul(c).mul(n.w).mul($v(B_(G(e).add(1),G(h)),this.distanceExponent)),s=i(o.add(t)),l=a(s.xy,s.z).sub(o);W(Av(l.z).lessThan(this.thickness),()=>{let t=Zv(r,Sv(l));v.x.addAssign(Gv(0,z_(t.sub(v.x),oy(1,G(2).div(G(e).add(2)),this.distanceFallOff))))});let u=i(o.sub(t)),d=a(u.xy,u.z).sub(o);W(Av(d.z).lessThan(this.thickness),()=>{let t=Zv(r,Sv(d));v.y.addAssign(Gv(0,z_(t.sub(v.y),oy(1,G(2).div(G(e).add(2)),this.distanceFallOff))))})});let y=vv(R_(1,v.mul(v))),b=Zv(f,u),x=Zv(f,r),S=z_(.5,Ov(v.y).sub(Ov(v.x)).add(y.x.mul(v.x).sub(y.y.mul(v.y)))),C=z_(.5,R_(2,v.x.mul(v.x)).sub(v.y.mul(v.y))),w=b.mul(S).add(x.mul(C));g.addAssign(w)}),g.assign(sy(g.div(m),0,1)),g.assign($v(g,this.scale)),X(Y(g),1)}),s=this._material||=new tw;return s.fragmentNode=o().context(e.getSharedContext()),s.name=`GTAO`,s.needsUpdate=!0,this._textureNode}dispose(){this._aoRenderTarget.dispose()}};function tA(e=5){let t=Math.floor(e)%2==0?Math.floor(e)+1:Math.floor(e),n=nA(t),r=n.length,i=new Uint8Array(r*4);for(let e=0;eB(new eA(B(e),B(t),n)),iA=class extends zh{static get type(){return`DenoiseNode`}constructor(e,t,n,r,i){super(),this.textureNode=e,this.depthNode=t,this.normalNode=n,this.noiseNode=r,this.cameraProjectionMatrixInverse=Z(i.projectionMatrixInverse),this.lumaPhi=Z(5),this.depthPhi=Z(5),this.normalPhi=Z(5),this.radius=Z(5),this.index=Z(0),this._resolution=Z(new A),this._sampleVectors=Sx(aA(16,2,1)),this.updateBeforeType=L.RENDER}updateBefore(){let e=this.textureNode.value;this._resolution.value.set(e.image.width,e.image.height)}setup(){let e=ub(),t=e=>this.textureNode.uv(e),n=e=>this.depthNode.uv(e).x,r=e=>this.normalNode.uv(e),i=e=>this.noiseNode.uv(e),a=U(([e,t])=>{e=J(e.x,e.y.oneMinus()).mul(2).sub(1);let n=X(Y(e,t),1),r=X(this.cameraProjectionMatrixInverse.mul(n));return r.xyz.div(r.w)}),o=U(([e,i,o,s])=>{let c=t(s),l=n(s),u=r(s).rgb.normalize(),d=c.rgb,f=a(s,l),p=$v(Gv(Zv(i,u).toVar(),0),this.normalPhi).toVar(),m=Av(Pk(d).sub(Pk(e))).toVar(),h=Gv(G(1).sub(m.div(this.lumaPhi)),0).toVar(),g=Av(Zv(o.sub(f),i)).toVar(),_=Gv(G(1).sub(g.div(this.depthPhi)),0),v=h.mul(_).mul(p);return X(d.mul(v),v)}),s=U(([e])=>{let s=n(e),c=r(e).rgb.normalize(),l=t(e);W(s.greaterThanEqual(1).or(Zv(c,c).equal(0)),()=>l);let u=Y(l.rgb),d=a(e,s),f=fb(this.noiseNode,0),p=J(e.x,e.y.oneMinus());p=p.mul(this._resolution.div(f));let m=i(p),h=J(wv(m.element(this.index.mod(4).mul(2).mul(sv))),Tv(m.element(this.index.mod(4).mul(2).mul(sv)))),g=Bg(h.x,h.y.negate(),h.x,h.y),_=G(1).toVar(),v=Y(l.rgb).toVar();return rC({start:K(0),end:K(16),type:`int`,condition:`<`},({i:t})=>{let n=this._sampleVectors.element(t).toVar(),r=g.mul(n.xy.mul(G(1).add(n.z.mul(this.radius.sub(1))))).div(this._resolution).toVar(),i=o(u,c,d,e.add(r).toVar());v.addAssign(i.xyz),_.addAssign(i.w)}),W(_.greaterThan(G(0)),()=>{v.divAssign(_)}),X(v,l.a)}).setLayout({name:`denoise`,type:`vec4`,inputs:[{name:`uv`,type:`vec2`}]});return U(()=>s(e))()}};function aA(e,t,n){let r=oA(e,t,n),i=[];for(let t=0;tB(new iA(GO(e),B(t),B(n),B(r),i)),cA=class extends zh{static get type(){return`FXAANode`}constructor(e){super(),this.textureNode=e,this.updateBeforeType=L.RENDER,this._invSize=Z(new A)}updateBefore(){let e=this.textureNode.value;this._invSize.value.set(1/e.image.width,1/e.image.height)}setup(){let e=this.textureNode.bias(-100),t=e.uvNode||ub(),n=t=>e.uv(t),r=(t,n,r)=>e.uv(t.add(n.mul(r))),i=K(5),a=U(([e,t])=>{let n=X(t).toVar(),r=X(Av(X(e).toVar().sub(n))).toVar();return Gv(Gv(Gv(r.r,r.g),r.b),r.a)}),o=U(([e,t,o,s])=>{let c=n(e).toVar(),l=r(e,J(0,-1),t.xy).toVar(),u=r(e,J(1,0),t.xy).toVar(),d=r(e,J(0,1),t.xy).toVar(),f=r(e,J(-1,0),t.xy).toVar(),p=a(c,d).toVar(),m=a(c,l).toVar(),h=a(c,u).toVar(),g=a(c,f).toVar();W(Gv(p,Gv(m,Gv(h,g))).toVar().lessThan(o),()=>c);let _=R_(p.add(m),h.add(g)).toVar();_.mulAssign(s),W(Av(_).lessThan(.3),()=>{let n=J(h.greaterThan(g).select(1,-1).toVar(),m.greaterThan(p).select(1,-1).toVar()).toVar(),i=a(c,r(e,J(n.x,n.y),t.xy)).toVar(),o=a(c,r(e,J(n.x.negate(),n.y.negate()),t.xy)).toVar();_.assign(o.sub(i)),_.mulAssign(s),W(Av(_).lessThan(.3),()=>oy(c,d.add(l).add(u).add(f).mul(.25),.4))});let v=J().toVar();W(_.lessThanEqual(0),()=>{d.assign(f),l.assign(u),v.x.assign(0),v.y.assign(t.y)}).Else(()=>{v.x.assign(t.x),v.y.assign(0)});let y=a(c,d).toVar(),b=a(c,l).toVar();W(y.lessThanEqual(b),()=>{d.assign(l)});let x=K(0).toVar(),S=K(0).toVar(),C=G(0).toVar(),w=G(0).toVar(),T=J(e).toVar(),E=J(e).toVar(),D=K(0).toVar(),ee=K(0).toVar();rC(i,({i:t})=>{let r=t.add(1).toVar();W(x.equal(0),()=>{C.addAssign(r),T.assign(e.add(v.mul(C)));let i=n(T.xy),o=a(i,c).toVar(),s=a(i,d).toVar();W(o.greaterThan(s),()=>{x.assign(1)}),D.assign(t)}),W(S.equal(0),()=>{w.addAssign(r),E.assign(e.sub(v.mul(w)));let i=n(E.xy),o=a(i,c).toVar(),s=a(i,d).toVar();W(o.greaterThan(s),()=>{S.assign(1)}),ee.assign(t)}),W(x.equal(1).or(S.equal(1)),()=>{aC()})}),W(x.equal(0).and(S.equal(0)),()=>c);let O=G(1).toVar(),te=G(1).toVar();W(x.equal(1),()=>{O.assign(G(D).div(G(i.sub(1))))}),W(S.equal(1),()=>{te.assign(G(ee).div(G(i.sub(1))))});let ne=Wv(O,te);return ne.assign($v(ne,.5)),ne.assign(G(1).sub(ne)),oy(c,d,ne.mul(.5))}).setLayout({name:`FxaaPixelShader`,type:`vec4`,inputs:[{name:`uv`,type:`vec2`},{name:`fxaaQualityRcpFrame`,type:`vec2`},{name:`fxaaQualityEdgeThreshold`,type:`float`},{name:`fxaaQualityinvEdgeThreshold`,type:`float`}]});return U(()=>{let e=G(.2),n=G(1).div(e);return o(t,this._invSize,e,n)})()}},lA=e=>B(new cA(GO(e))),uA=new VO,dA=new P(0,0,0),fA=new P,pA=new A,mA=new A(1,0),hA=new A(0,1),gA=class extends zh{static get type(){return`BloomNode`}constructor(e,t=1,n=0,r=0){super(),this.inputNode=e,this.strength=Z(t),this.radius=Z(n),this.threshold=Z(r),this.smoothWidth=Z(.01),this._renderTargetsHorizontal=[],this._renderTargetsVertical=[],this._nMips=5,this._renderTargetBright=new In(1,1,{type:D}),this._renderTargetBright.texture.name=`UnrealBloomPass.bright`,this._renderTargetBright.texture.generateMipmaps=!1;for(let e=0;e{let e=this.inputNode,t=Pk(e.rgb),n=uy(this.threshold,this.threshold.add(this.smoothWidth),t);return oy(X(0),e,n)});this._highPassFilterMaterial=this._highPassFilterMaterial||new tw,this._highPassFilterMaterial.fragmentNode=t().context(e.getSharedContext()),this._highPassFilterMaterial.name=`Bloom_highPass`,this._highPassFilterMaterial.needsUpdate=!0;let n=[3,5,7,9,11];for(let t=0;toy(e,G(1.2).sub(e),t)).setLayout({name:`lerpBloomFactor`,type:`float`,inputs:[{name:`factor`,type:`float`},{name:`radius`,type:`float`}]}),o=U(()=>{let e=a(r.element(0),this.radius).mul(X(i.element(0),1)).mul(this._textureNodeBlur0),t=a(r.element(1),this.radius).mul(X(i.element(1),1)).mul(this._textureNodeBlur1),n=a(r.element(2),this.radius).mul(X(i.element(2),1)).mul(this._textureNodeBlur2),o=a(r.element(3),this.radius).mul(X(i.element(3),1)).mul(this._textureNodeBlur3),s=a(r.element(4),this.radius).mul(X(i.element(4),1)).mul(this._textureNodeBlur4);return e.add(t).add(n).add(o).add(s).mul(this.strength)});return this._compositeMaterial=this._compositeMaterial||new tw,this._compositeMaterial.fragmentNode=o().context(e.getSharedContext()),this._compositeMaterial.name=`Bloom_comp`,this._compositeMaterial.needsUpdate=!0,this._textureOutput}dispose(){for(let e=0;er.uv(e),l=U(()=>{let e=i.element(0).toVar(),n=c(s).rgb.mul(e).toVar();return rC({start:K(1),end:K(t),type:`int`,condition:`<`},({i:t})=>{let r=G(t),l=i.element(t),u=o.mul(a).mul(r),d=c(s.add(u)).rgb,f=c(s.sub(u)).rgb;n.addAssign(L_(d,f).mul(l)),e.addAssign(G(2).mul(l))}),X(n.div(e),1)}),u=new tw;return u.fragmentNode=l().context(e.getSharedContext()),u.name=`Bloom_seperable`,u.needsUpdate=!0,u.colorTexture=r,u.direction=o,u.invSize=a,u}},_A=(e,t,n,r)=>B(new gA(B(e),t,n,r)),vA=class extends zh{static get type(){return`TransitionNode`}constructor(e,t,n,r,i,a){super(),this.textureNodeA=e,this.textureNodeB=t,this.mixTextureNode=n,this.mixRatioNode=r,this.thresholdNode=i,this.useTextureNode=a}setup(){let{textureNodeA:e,textureNodeB:t,mixTextureNode:n,mixRatioNode:r,thresholdNode:i,useTextureNode:a}=this,o=e=>{let t=e.uvNode||ub();return e.uv(t)};return U(()=>{let s=o(e),c=o(t),l=X().toVar();return W(a.equal(K(1)),()=>{let e=o(n),t=r.mul(i.mul(2).add(1)).sub(i),a=sy(R_(e.r,t).mul(G(1).div(i)),0,1);l.assign(oy(s,c,a))}).Else(()=>{l.assign(oy(c,s,r))}),l})()}},yA=(e,t,n,r=0,i=.1,a=0)=>B(new vA(GO(e),GO(t),GO(n),B(r),B(i),B(a))),bA=class extends zh{static get type(){return`PixelationNode`}constructor(e,t,n,r,i,a){super(),this.textureNode=e,this.depthNode=t,this.normalNode=n,this.pixelSize=r,this.normalEdgeStrength=i,this.depthEdgeStrength=a,this._resolution=Z(new Fn),this.updateBeforeType=L.RENDER}updateBefore(){let e=this.textureNode.value,t=e.image.width,n=e.image.height;this._resolution.value.set(t,n,1/t,1/n)}setup(){let{textureNode:e,depthNode:t,normalNode:n}=this,r=e.uvNode||ub(),i=t.uvNode||ub(),a=n.uvNode||ub(),o=()=>e.uv(r),s=(e,n)=>t.uv(i.add(J(e,n).mul(this._resolution.zw))).r,c=(e,t)=>n.uv(a.add(J(e,t).mul(this._resolution.zw))).rgb.normalize(),l=e=>{let t=n_(`float`,`diff`);return t.addAssign(sy(s(1,0).sub(e))),t.addAssign(sy(s(-1,0).sub(e))),t.addAssign(sy(s(0,1).sub(e))),t.addAssign(sy(s(0,-1).sub(e))),bv(uy(.01,.02,t).mul(2)).div(2)},u=(e,t,n,r)=>{let i=s(e,t).sub(n),a=c(e,t),o=Y(1,1,1),l=sy(uy(-.01,.01,Zv(r.sub(a),o)),0,1),u=sy(jv(i.mul(.25).add(.0025)),0,1);return G(1).sub(Zv(r,a)).mul(u).mul(l)},d=(e,t)=>{let n=n_(`float`,`indicator`);return n.addAssign(u(0,-1,e,t)),n.addAssign(u(0,1,e,t)),n.addAssign(u(-1,0,e,t)),n.addAssign(u(1,0,e,t)),qv(.1,n)};return U(()=>{let e=o(),t=n_(`float`,`depth`),n=n_(`vec3`,`normal`);W(this.depthEdgeStrength.greaterThan(0).or(this.normalEdgeStrength.greaterThan(0)),()=>{t.assign(s(0,0)),n.assign(c(0,0))});let r=n_(`float`,`dei`);W(this.depthEdgeStrength.greaterThan(0),()=>{r.assign(l(t))});let i=n_(`float`,`nei`);W(this.normalEdgeStrength.greaterThan(0),()=>{i.assign(d(t,n))});let a=r.greaterThan(0).select(G(1).sub(r.mul(this.depthEdgeStrength)),i.mul(this.normalEdgeStrength).add(1));return e.mul(a)})()}},xA=(e,t,n,r=6,i=.3,a=.4)=>B(new bA(GO(e),GO(t),GO(n),B(r),B(i),B(a))),SA=class extends _k{static get type(){return`PixelationPassNode`}constructor(e,t,n=6,r=.3,i=.4){super(`color`,e,t,{minFilter:u,magFilter:u}),this.pixelSize=n,this.normalEdgeStrength=r,this.depthEdgeStrength=i,this.isPixelationPassNode=!0,this._mrt=nO({output:S_,normal:ix})}setSize(e,t){let n=this.pixelSize.value?this.pixelSize.value:this.pixelSize,r=Math.floor(e/n),i=Math.floor(t/n);super.setSize(r,i)}setup(){return xA(super.getTextureNode(`output`),super.getTextureNode(`depth`),super.getTextureNode(`normal`),this.pixelSize,this.normalEdgeStrength,this.depthEdgeStrength)}},CA=(e,t,n,r,i)=>B(new SA(e,t,n,r,i)),wA=new A,TA=class extends _k{static get type(){return`SSAAPassNode`}constructor(e,t){super(_k.COLOR,e,t),this.isSSAAPassNode=!0,this.sampleLevel=4,this.unbiased=!0,this.clearColor=new P(0),this.clearAlpha=0,this._currentClearColor=new P,this.sampleWeight=Z(1),this.sampleRenderTarget=null,this._quadMesh=new VO}updateBefore(e){let{renderer:t}=e,{scene:n,camera:r}=this;this._pixelRatio=t.getPixelRatio();let i=t.getSize(wA);this.setSize(i.width,i.height),this.sampleRenderTarget.setSize(this.renderTarget.width,this.renderTarget.height),t.getClearColor(this._currentClearColor);let a=t.getClearAlpha(),o=t.getRenderTarget(),s=t.getMRT(),c=t.autoClear;this._cameraNear.value=r.near,this._cameraFar.value=r.far,t.setMRT(this.getMRT()),t.autoClear=!1;let l=EA[Math.max(0,Math.min(this.sampleLevel,5))],u=1/l.length,d={fullWidth:this.renderTarget.width,fullHeight:this.renderTarget.height,offsetX:0,offsetY:0,width:this.renderTarget.width,height:this.renderTarget.height},f=Object.assign({},r.view);f.enabled&&Object.assign(d,f);for(let e=0;e=0&&(e[t]=gb(this.sampleRenderTarget.textures[n]).mul(this.sampleWeight))}t=nO(e)}else t=gb(this.sampleRenderTarget.texture).mul(this.sampleWeight);return this._quadMesh.material=new tw,this._quadMesh.material.fragmentNode=t,this._quadMesh.material.transparent=!0,this._quadMesh.material.depthTest=!1,this._quadMesh.material.depthWrite=!1,this._quadMesh.material.premultipliedAlpha=!0,this._quadMesh.material.blending=2,this._quadMesh.material.normals=!1,this._quadMesh.material.name=`SSAA`,super.setup(e)}dispose(){super.dispose(),this.sampleRenderTarget!==null&&this.sampleRenderTarget.dispose()}},EA=[[[0,0]],[[4,4],[-4,-4]],[[-2,-6],[6,-2],[-6,2],[2,6]],[[1,-3],[-1,3],[5,1],[-3,-5],[-5,5],[-7,-1],[3,7],[7,-7]],[[1,1],[-1,-3],[-3,2],[4,-1],[-5,-2],[2,5],[5,3],[3,-5],[-2,6],[0,-7],[-4,-6],[-6,4],[-8,0],[7,-4],[6,7],[-7,-8]],[[-4,-7],[-7,-5],[-3,-5],[-5,-4],[-1,-4],[-2,-2],[-6,-1],[-4,0],[-7,1],[-1,2],[-6,3],[-3,3],[-7,6],[-3,6],[-5,7],[-1,7],[5,-7],[1,-6],[6,-5],[4,-4],[2,-3],[7,-2],[1,-1],[4,-1],[2,1],[6,2],[0,4],[4,4],[2,5],[7,5],[5,6],[3,7]]],DA=(e,t)=>B(new TA(e,t)),OA=new A,kA=class extends _k{static get type(){return`StereoPassNode`}constructor(e,t){super(_k.COLOR,e,t),this.isStereoPassNode=!0,this.stereo=new Hp,this.stereo.aspect=.5}updateBefore(e){let{renderer:t}=e,{scene:n,camera:r,stereo:i,renderTarget:a}=this;this._pixelRatio=t.getPixelRatio(),i.cameraL.coordinateSystem=t.coordinateSystem,i.cameraR.coordinateSystem=t.coordinateSystem,i.update(r);let o=t.getSize(OA);this.setSize(o.width,o.height);let s=t.autoClear;t.autoClear=!1;let c=t.getRenderTarget(),l=t.getMRT();this._cameraNear.value=r.near,this._cameraFar.value=r.far;for(let e in this._previousTextures)this.toggleTexture(e);t.setRenderTarget(a),t.setMRT(this._mrt),t.clear(),a.scissorTest=!0,a.scissor.set(0,0,a.width/2,a.height),a.viewport.set(0,0,a.width/2,a.height),t.render(n,i.cameraL),a.scissor.set(a.width/2,0,a.width/2,a.height),a.viewport.set(a.width/2,0,a.width/2,a.height),t.render(n,i.cameraR),a.scissorTest=!1,t.setRenderTarget(c),t.setMRT(l),t.autoClear=s}},AA=(e,t)=>B(new kA(e,t)),jA=new A,MA=new VO,NA=class extends _k{static get type(){return`StereoCompositePassNode`}constructor(e,t){super(_k.COLOR,e,t),this.isStereoCompositePassNode=!0,this.stereo=new Hp;let n={minFilter:h,magFilter:u,type:D};this._renderTargetL=new In(1,1,n),this._renderTargetR=new In(1,1,n),this._mapLeft=gb(this._renderTargetL.texture),this._mapRight=gb(this._renderTargetR.texture),this._material=null}updateStereoCamera(e){this.stereo.cameraL.coordinateSystem=e,this.stereo.cameraR.coordinateSystem=e,this.stereo.update(this.camera)}setSize(e,t){super.setSize(e,t),this._renderTargetL.setSize(this.renderTarget.width,this.renderTarget.height),this._renderTargetR.setSize(this.renderTarget.width,this.renderTarget.height)}updateBefore(e){let{renderer:t}=e,{scene:n,stereo:r,renderTarget:i}=this;this._pixelRatio=t.getPixelRatio(),this.updateStereoCamera(t.coordinateSystem);let a=t.getSize(jA);this.setSize(a.width,a.height);let o=t.getRenderTarget();t.setRenderTarget(this._renderTargetL),t.render(n,r.cameraL),t.setRenderTarget(this._renderTargetR),t.render(n,r.cameraR),t.setRenderTarget(i),MA.material=this._material,MA.render(t),t.setRenderTarget(o)}dispose(){super.dispose(),this._renderTargetL.dispose(),this._renderTargetR.dispose(),this._material!==null&&this._material.dispose()}},PA=class extends NA{static get type(){return`AnaglyphPassNode`}constructor(e,t){super(e,t),this.isAnaglyphPassNode=!0,this._colorMatrixLeft=Z(new j().fromArray([.4561,-.0400822,-.0152161,.500484,-.0378246,-.0205971,.176381,-.0157589,-.00546856])),this._colorMatrixRight=Z(new j().fromArray([-.0434706,.378476,-.0721527,-.0879388,.73364,-.112961,-.00155529,-.0184503,1.2264]))}setup(e){let t=ub(),n=U(()=>{let e=this._mapLeft.uv(t),n=this._mapRight.uv(t);return X(sy(this._colorMatrixLeft.mul(e.rgb).add(this._colorMatrixRight.mul(n.rgb))).rgb,Gv(e.a,n.a))}),r=this._material||=new tw;return r.fragmentNode=n().context(e.getSharedContext()),r.name=`Anaglyph`,r.needsUpdate=!0,super.setup(e)}},FA=(e,t)=>B(new PA(e,t)),IA=class extends NA{static get type(){return`ParallaxBarrierPassNode`}constructor(e,t){super(e,t),this.isParallaxBarrierPassNode=!0}setup(e){let t=ub(),n=U(()=>{let e=X().toVar();return W(Kv(OC.y,2).greaterThan(1),()=>{e.assign(this._mapLeft.uv(t))}).Else(()=>{e.assign(this._mapRight.uv(t))}),e}),r=this._material||=new tw;return r.fragmentNode=n().context(e.getSharedContext()),r.needsUpdate=!0,super.setup(e)}},LA=(e,t)=>B(new IA(e,t)),RA=class extends _k{static get type(){return`ToonOutlinePassNode`}constructor(e,t,n,r,i){super(_k.COLOR,e,t),this.colorNode=n,this.thicknessNode=r,this.alphaNode=i,this._materialCache=new WeakMap}updateBefore(e){let{renderer:t}=e,n=t.getRenderObjectFunction();t.setRenderObjectFunction((e,n,r,i,a,o,s)=>{if((a.isMeshToonMaterial||a.isMeshToonNodeMaterial)&&a.wireframe===!1){let c=this._getOutlineMaterial(a);t.renderObject(e,n,r,i,c,o,s)}t.renderObject(e,n,r,i,a,o,s)}),super.updateBefore(e),t.setRenderObjectFunction(n)}_createMaterial(){let e=new tw;e.isMeshToonOutlineMaterial=!0,e.name=`Toon_Outline`,e.side=1;let t=nx.negate(),n=Sb.mul(Hb),r=G(1),i=n.mul(X(Kb,1)),a=n.mul(X(Kb.add(t),1)),o=Sv(i.sub(a));return e.vertexNode=i.add(o.mul(this.thicknessNode).mul(i.w).mul(r)),e.colorNode=X(this.colorNode,this.alphaNode),e}_getOutlineMaterial(e){let t=this._materialCache.get(e);return t===void 0&&(t=this._createMaterial(),this._materialCache.set(e,t)),t}},zA=(e,t,n=new P(0,0,0),r=.003,i=1)=>B(new RA(e,t,B(n),B(r),B(i))),BA=class extends R{static get type(){return`ScriptableValueNode`}constructor(e=null){super(),this._value=e,this._cache=null,this.inputType=null,this.outpuType=null,this.events=new Ft,this.isScriptableValueNode=!0}get isScriptableOutputNode(){return this.outputType!==null}set value(e){this._value!==e&&(this._cache&&this.inputType===`URL`&&this.value.value instanceof ArrayBuffer&&(URL.revokeObjectURL(this._cache),this._cache=null),this._value=e,this.events.dispatchEvent({type:`change`}),this.refresh())}get value(){return this._value}refresh(){this.events.dispatchEvent({type:`refresh`})}getValue(){let e=this.value;if(e&&this._cache===null&&this.inputType===`URL`&&e.value instanceof ArrayBuffer)this._cache=URL.createObjectURL(new Blob([e.value]));else if(e&&e.value!==null&&e.value!==void 0&&((this.inputType===`URL`||this.inputType===`String`)&&typeof e.value==`string`||this.inputType===`Number`&&typeof e.value==`number`||this.inputType===`Vector2`&&e.value.isVector2||this.inputType===`Vector3`&&e.value.isVector3||this.inputType===`Vector4`&&e.value.isVector4||this.inputType===`Color`&&e.value.isColor||this.inputType===`Matrix3`&&e.value.isMatrix3||this.inputType===`Matrix4`&&e.value.isMatrix4))return e.value;return this._cache||e}getNodeType(e){return this.value&&this.value.isNode?this.value.getNodeType(e):`float`}setup(){return this.value&&this.value.isNode?this.value:G()}serialize(e){super.serialize(e),this.value===null?e.value=null:this.inputType===`ArrayBuffer`?e.value=Dh(this.value):e.value=this.value?this.value.toJSON(e.meta).uuid:null,e.inputType=this.inputType,e.outputType=this.outputType}deserialize(e){super.deserialize(e);let t=null;e.value!==null&&(t=e.inputType===`ArrayBuffer`?Oh(e.value):e.inputType===`Texture`?e.meta.textures[e.value]:e.meta.nodes[e.value]||null),this.value=t,this.inputType=e.inputType,this.outputType=e.outputType}},VA=V(BA),HA=class extends Map{get(e,t=null,...n){if(this.has(e))return super.get(e);if(t!==null){let r=t(...n);return this.set(e,r),r}}},UA=class{constructor(e){this.scriptableNode=e}get parameters(){return this.scriptableNode.parameters}get layout(){return this.scriptableNode.getLayout()}getInputLayout(e){return this.scriptableNode.getInputLayout(e)}get(e){let t=this.parameters[e];return t?t.getValue():null}},WA=new HA,GA=class extends R{static get type(){return`ScriptableNode`}constructor(e=null,t={}){super(),this.codeNode=e,this.parameters=t,this._local=new HA,this._output=VA(),this._outputs={},this._source=this.source,this._method=null,this._object=null,this._value=null,this._needsOutputUpdate=!0,this.onRefresh=this.onRefresh.bind(this),this.isScriptableNode=!0}get source(){return this.codeNode?this.codeNode.code:``}setLocal(e,t){return this._local.set(e,t)}getLocal(e){return this._local.get(e)}onRefresh(){this._refresh()}getInputLayout(e){for(let t of this.getLayout())if(t.inputType&&(t.id===e||t.name===e))return t}getOutputLayout(e){for(let t of this.getLayout())if(t.outputType&&(t.id===e||t.name===e))return t}setOutput(e,t){let n=this._outputs;return n[e]===void 0?n[e]=VA(t):n[e].value=t,this}getOutput(e){return this._outputs[e]}getParameter(e){return this.parameters[e]}setParameter(e,t){let n=this.parameters;return t&&t.isScriptableNode?(this.deleteParameter(e),n[e]=t,n[e].getDefaultOutput().events.addEventListener(`refresh`,this.onRefresh)):t&&t.isScriptableValueNode?(this.deleteParameter(e),n[e]=t,n[e].events.addEventListener(`refresh`,this.onRefresh)):n[e]===void 0?(n[e]=VA(t),n[e].events.addEventListener(`refresh`,this.onRefresh)):n[e].value=t,this}getValue(){return this.getDefaultOutput().getValue()}deleteParameter(e){let t=this.parameters[e];return t&&(t.isScriptableNode&&(t=t.getDefaultOutput()),t.events.removeEventListener(`refresh`,this.onRefresh)),this}clearParameters(){for(let e of Object.keys(this.parameters))this.deleteParameter(e);return this.needsUpdate=!0,this}call(e,...t){let n=this.getObject()[e];if(typeof n==`function`)return n(...t)}async callAsync(e,...t){let n=this.getObject()[e];if(typeof n==`function`)return n.constructor.name===`AsyncFunction`?await n(...t):n(...t)}getNodeType(e){return this.getDefaultOutputNode().getNodeType(e)}refresh(e=null){e===null?this._refresh():this.getOutput(e).refresh()}getObject(){if(this.needsUpdate&&this.dispose(),this._object!==null)return this._object;let e=()=>this.refresh(),t=(e,t)=>this.setOutput(e,t),n=new UA(this),r=WA.get(`THREE`),i=WA.get(`TSL`);this._object=this.getMethod(this.codeNode)(n,this._local,WA,e,t,r,i);let a=this._object.layout;if(a&&(a.cache===!1&&this._local.clear(),this._output.outputType=a.outputType||null,Array.isArray(a.elements)))for(let e of a.elements){let t=e.id||e.name;e.inputType&&(this.getParameter(t)===void 0&&this.setParameter(t,null),this.getParameter(t).inputType=e.inputType),e.outputType&&(this.getOutput(t)===void 0&&this.setOutput(t,null),this.getOutput(t).outputType=e.outputType)}return this._object}deserialize(e){super.deserialize(e);for(let e in this.parameters){let t=this.parameters[e];t.isScriptableNode&&(t=t.getDefaultOutput()),t.events.addEventListener(`refresh`,this.onRefresh)}}getLayout(){return this.getObject().layout}getDefaultOutputNode(){let e=this.getDefaultOutput().value;return e&&e.isNode?e:G()}getDefaultOutput(){return this._exec()._output}getMethod(){if(this.needsUpdate&&this.dispose(),this._method!==null)return this._method;let e=[`parameters`,`local`,`global`,`refresh`,`setOutput`,`THREE`,`TSL`],t=[`layout`,`init`,`main`,`dispose`].join(`, `),n=`var `+t+`; var output = {}; -`,r=` -return { ...output, `+t+` };`,i=n+this.codeNode.code+r;return this._method=Function(...e,i),this._method}dispose(){this._method!==null&&(this._object&&typeof this._object.dispose==`function`&&this._object.dispose(),this._method=null,this._object=null,this._source=null,this._value=null,this._needsOutputUpdate=!0,this._output.value=null,this._outputs={})}setup(){return this.getDefaultOutputNode()}getCacheKey(e){let t=[bh(this.source),this.getDefaultOutputNode().getCacheKey(e)];for(let n in this.parameters)t.push(this.parameters[n].getCacheKey(e));return xh(t)}set needsUpdate(e){e===!0&&this.dispose()}get needsUpdate(){return this.source!==this._source}_exec(){return this.codeNode===null?this:(this._needsOutputUpdate===!0&&(this._value=this.call(`main`),this._needsOutputUpdate=!1),this._output.value=this._value,this)}_refresh(){this.needsUpdate=!0,this._exec(),this._output.refresh()}},KA=V(GA),qA=class extends R{static get type(){return`FogNode`}constructor(e,t){super(`float`),this.isFogNode=!0,this.colorNode=e,this.factorNode=t}getViewZNode(e){let t,n=e.context.getViewZ;return n!==void 0&&(t=n(this)),(t||Xb.z).negate()}setup(){return this.factorNode}},JA=V(qA),YA=class extends qA{static get type(){return`FogRangeNode`}constructor(e,t,n){super(e),this.isFogRangeNode=!0,this.nearNode=t,this.farNode=n}setup(e){let t=this.getViewZNode(e);return uy(this.nearNode,this.farNode,t)}},XA=V(YA),ZA=class extends qA{static get type(){return`FogExp2Node`}constructor(e,t){super(e),this.isFogExp2Node=!0,this.densityNode=t}setup(e){let t=this.getViewZNode(e),n=this.densityNode;return n.mul(n,t,t).negate().exp().oneMinus()}},QA=V(ZA),$A=null,ej=null,tj=class extends R{static get type(){return`RangeNode`}constructor(e=G(),t=G()){super(),this.minNode=e,this.maxNode=t}getVectorLength(e){let t=e.getTypeLength(Th(this.minNode.value)),n=e.getTypeLength(Th(this.maxNode.value));return t>n?t:n}getNodeType(e){return e.object.count>1?e.getTypeFromLength(this.getVectorLength(e)):`float`}setup(e){let t=e.object,n=null;if(t.count>1){let r=this.minNode.value,i=this.maxNode.value,a=e.getTypeLength(Th(r)),o=e.getTypeLength(Th(i));$A||=new Fn,ej||=new Fn,$A.setScalar(0),ej.setScalar(0),a===1?$A.setScalar(r):r.isColor?$A.set(r.r,r.g,r.b):$A.set(r.x,r.y,r.z||0,r.w||0),o===1?ej.setScalar(i):i.isColor?ej.set(i.r,i.g,i.b):ej.set(i.x,i.y,i.z||0,i.w||0);let s=4*t.count,c=new Float32Array(s);for(let e=0;egb(e,t.xy).compare(t.z)),ij=U(({depthTexture:e,shadowCoord:t,shadow:n})=>{let r=(t,n)=>gb(e,t).compare(n),i=Ex(`mapSize`,`vec2`,n).setGroup(Qg),a=Ex(`radius`,`float`,n).setGroup(Qg),o=J(1).div(i),s=o.x.negate().mul(a),c=o.y.negate().mul(a),l=o.x.mul(a),u=o.y.mul(a),d=s.div(2),f=c.div(2),p=l.div(2),m=u.div(2);return L_(r(t.xy.add(J(s,c)),t.z),r(t.xy.add(J(0,c)),t.z),r(t.xy.add(J(l,c)),t.z),r(t.xy.add(J(d,f)),t.z),r(t.xy.add(J(0,f)),t.z),r(t.xy.add(J(p,f)),t.z),r(t.xy.add(J(s,0)),t.z),r(t.xy.add(J(d,0)),t.z),r(t.xy,t.z),r(t.xy.add(J(p,0)),t.z),r(t.xy.add(J(l,0)),t.z),r(t.xy.add(J(d,m)),t.z),r(t.xy.add(J(0,m)),t.z),r(t.xy.add(J(p,m)),t.z),r(t.xy.add(J(s,u)),t.z),r(t.xy.add(J(0,u)),t.z),r(t.xy.add(J(l,u)),t.z)).mul(1/17)}),aj=U(({depthTexture:e,shadowCoord:t,shadow:n})=>{let r=(t,n)=>gb(e,t).compare(n),i=Ex(`mapSize`,`vec2`,n).setGroup(Qg),a=J(1).div(i),o=a.x,s=a.y,c=t.xy,l=Cv(c.mul(i).add(.5));return c.subAssign(l.mul(a)),L_(r(c,t.z),r(c.add(J(o,0)),t.z),r(c.add(J(0,s)),t.z),r(c.add(a),t.z),oy(r(c.add(J(o.negate(),0)),t.z),r(c.add(J(o.mul(2),0)),t.z),l.x),oy(r(c.add(J(o.negate(),s)),t.z),r(c.add(J(o.mul(2),s)),t.z),l.x),oy(r(c.add(J(0,s.negate())),t.z),r(c.add(J(0,s.mul(2))),t.z),l.y),oy(r(c.add(J(o,s.negate())),t.z),r(c.add(J(o,s.mul(2))),t.z),l.y),oy(oy(r(c.add(J(o.negate(),s.negate())),t.z),r(c.add(J(o.mul(2),s.negate())),t.z),l.x),oy(r(c.add(J(o.negate(),s.mul(2))),t.z),r(c.add(J(o.mul(2),s.mul(2))),t.z),l.x),l.y)).mul(1/9)}),oj=U(({depthTexture:e,shadowCoord:t})=>{let n=G(1).toVar(),r=gb(e).uv(t.xy).rg,i=qv(t.z,r.x);return W(i.notEqual(G(1)),()=>{let e=t.z.sub(r.x),a=Gv(0,r.y.mul(r.y)),o=a.div(a.add(e.mul(e)));o=sy(R_(o,.3).div(.6499999999999999)),n.assign(sy(Gv(i,o)))}),n}),sj=U(({samples:e,radius:t,size:n,shadowPass:r})=>{let i=G(0).toVar(),a=G(0).toVar(),o=e.lessThanEqual(G(1)).select(G(0),G(2).div(e.sub(1))),s=e.lessThanEqual(G(1)).select(G(0),G(-1));return rC({start:K(0),end:K(e),type:`int`,condition:`<`},({i:e})=>{let c=s.add(G(e).mul(o)),l=r.uv(L_(OC.xy,J(0,c).mul(t)).div(n)).x;i.addAssign(l),a.addAssign(l.mul(l))}),i.divAssign(e),a.divAssign(e),J(i,vv(a.sub(i.mul(i))))}),cj=U(({samples:e,radius:t,size:n,shadowPass:r})=>{let i=G(0).toVar(),a=G(0).toVar(),o=e.lessThanEqual(G(1)).select(G(0),G(2).div(e.sub(1))),s=e.lessThanEqual(G(1)).select(G(0),G(-1));return rC({start:K(0),end:K(e),type:`int`,condition:`<`},({i:e})=>{let c=s.add(G(e).mul(o)),l=r.uv(L_(OC.xy,J(c,0).mul(t)).div(n));i.addAssign(l.x),a.addAssign(L_(l.y.mul(l.y),l.x.mul(l.x)))}),i.divAssign(e),a.divAssign(e),J(i,vv(a.sub(i.mul(i))))}),lj=[rj,ij,aj,oj],uj=null,dj=new VO,fj=class extends vC{static get type(){return`AnalyticLightNode`}constructor(e=null){super(),this.updateType=L.FRAME,this.light=e,this.color=new P,this.colorNode=Z(this.color).setGroup(Qg),this.baseColorNode=null,this.shadowMap=null,this.shadowNode=null,this.shadowColorNode=null,this.vsmShadowMapVertical=null,this.vsmShadowMapHorizontal=null,this.vsmMaterialVertical=null,this.vsmMaterialHorizontal=null,this.isAnalyticLightNode=!0}getCacheKey(){return Sh(super.getCacheKey(),this.light.id,+!!this.light.castShadow)}getHash(){return this.light.uuid}setupShadow(e){let{object:t,renderer:n}=e;if(n.shadowMap.enabled===!1)return;let r=this.shadowColorNode;if(r===null){uj===null&&(uj=new tw,uj.fragmentNode=X(0,0,0,1),uj.isShadowNodeMaterial=!0,uj.name=`ShadowMaterial`);let i=n.shadowMap.type,a=this.light.shadow,o=new ho;o.compareFunction=513;let s=e.createRenderTarget(a.mapSize.width,a.mapSize.height);if(s.depthTexture=o,a.camera.updateProjectionMatrix(),i===3){o.compareFunction=null,this.vsmShadowMapVertical=e.createRenderTarget(a.mapSize.width,a.mapSize.height,{format:pe,type:D}),this.vsmShadowMapHorizontal=e.createRenderTarget(a.mapSize.width,a.mapSize.height,{format:pe,type:D});let t=gb(o),n=gb(this.vsmShadowMapVertical.texture),r=Ex(`blurSamples`,`float`,a).setGroup(Qg),i=Ex(`radius`,`float`,a).setGroup(Qg),s=Ex(`mapSize`,`vec2`,a).setGroup(Qg),c=this.vsmMaterialVertical||=new tw;c.fragmentNode=sj({samples:r,radius:i,size:s,shadowPass:t}).context(e.getSharedContext()),c.name=`VSMVertical`,c=this.vsmMaterialHorizontal||=new tw,c.fragmentNode=cj({samples:r,radius:i,size:s,shadowPass:n}).context(e.getSharedContext()),c.name=`VSMHorizontal`}let c=Ex(`intensity`,`float`,a).setGroup(Qg),l=Ex(`bias`,`float`,a).setGroup(Qg),u=Ex(`normalBias`,`float`,a).setGroup(Qg),d=t.material.shadowPositionNode||Jb,f=Z(a.matrix).setGroup(Qg).mul(d.add(ax.mul(u)));f=f.xyz.div(f.w);let p=f.z.add(l);n.coordinateSystem===2001&&(p=p.mul(2).sub(1)),f=Y(f.x,f.y.oneMinus(),p);let m=f.x.greaterThanEqual(0).and(f.x.lessThanEqual(1)).and(f.y.greaterThanEqual(0)).and(f.y.lessThanEqual(1)).and(f.z.lessThanEqual(1)),h=a.filterNode||lj[n.shadowMap.type]||null;if(h===null)throw Error(`THREE.WebGPURenderer: Shadow map type not supported yet.`);let g=gb(s.texture,f),_=m.select(h({depthTexture:i===3?this.vsmShadowMapHorizontal.texture:o,shadowCoord:f,shadow:a}),G(1));this.shadowMap=s,this.light.shadow.map=s,this.shadowNode=_,this.shadowColorNode=r=this.colorNode.mul(oy(1,_.rgb.mix(g,1),c.mul(g.a))),this.baseColorNode=this.colorNode}this.colorNode=r,this.updateBeforeType=L.RENDER}setup(e){this.colorNode=this.baseColorNode||this.colorNode,this.light.castShadow?e.object.receiveShadow&&this.setupShadow(e):this.shadowNode!==null&&this.disposeShadow()}updateShadow(e){let{shadowMap:t,light:n}=this,{renderer:r,scene:i,camera:a}=e,o=r.shadowMap.type;this._depthVersionCached=t.depthTexture.version;let s=i.overrideMaterial;i.overrideMaterial=uj,t.setSize(n.shadow.mapSize.width,n.shadow.mapSize.height),n.shadow.updateMatrices(n),n.shadow.camera.layers.mask=a.layers.mask;let c=r.getRenderTarget(),l=r.getRenderObjectFunction();r.setRenderObjectFunction((e,...t)=>{(e.castShadow===!0||e.receiveShadow&&o===3)&&r.renderObject(e,...t)}),r.setRenderTarget(t),r.render(i,n.shadow.camera),r.setRenderObjectFunction(l),n.isPointLight!==!0&&o===3&&this.vsmPass(e,n),r.setRenderTarget(c),i.overrideMaterial=s}vsmPass(e,t){let{renderer:n}=e;this.vsmShadowMapVertical.setSize(t.shadow.mapSize.width,t.shadow.mapSize.height),this.vsmShadowMapHorizontal.setSize(t.shadow.mapSize.width,t.shadow.mapSize.height),n.setRenderTarget(this.vsmShadowMapVertical),dj.material=this.vsmMaterialVertical,dj.render(n),n.setRenderTarget(this.vsmShadowMapHorizontal),dj.material=this.vsmMaterialHorizontal,dj.render(n)}disposeShadow(){this.shadowMap.dispose(),this.shadowMap=null,this.vsmShadowMapVertical!==null&&(this.vsmShadowMapVertical.dispose(),this.vsmShadowMapVertical=null,this.vsmMaterialVertical.dispose(),this.vsmMaterialVertical=null),this.vsmShadowMapHorizontal!==null&&(this.vsmShadowMapHorizontal.dispose(),this.vsmShadowMapHorizontal=null,this.vsmMaterialHorizontal.dispose(),this.vsmMaterialHorizontal=null),this.shadowNode=null,this.shadowColorNode=null,this.baseColorNode=null,this.updateBeforeType=L.NONE}updateBefore(e){let t=this.light.shadow;(t.needsUpdate||t.autoUpdate)&&(this.updateShadow(e),this.shadowMap.depthTexture.version===this._depthVersionCached&&(t.needsUpdate=!1))}update(){let{light:e}=this;this.color.copy(e.color).multiplyScalar(e.intensity)}},pj=U(e=>{let{lightDistance:t,cutoffDistance:n,decayExponent:r}=e,i=t.pow(r).max(.01).reciprocal();return n.greaterThan(0).select(i.mul(t.div(n).pow4().oneMinus().clamp().pow2()),i)}),mj;function hj(e){mj||=new WeakMap;let t=mj.get(e);return t===void 0&&mj.set(e,t={}),t}function gj(e){let t=hj(e);return t.position||=Z(new M).setGroup(Qg).onRenderUpdate((t,n)=>n.value.setFromMatrixPosition(e.matrixWorld))}function _j(e){let t=hj(e);return t.targetPosition||=Z(new M).setGroup(Qg).onRenderUpdate((t,n)=>n.value.setFromMatrixPosition(e.target.matrixWorld))}function vj(e){let t=hj(e);return t.viewPosition||=Z(new M).setGroup(Qg).onRenderUpdate(({camera:t},n)=>{n.value=n.value||new M,n.value.setFromMatrixPosition(e.matrixWorld),n.value.applyMatrix4(t.matrixWorldInverse)})}var yj=e=>wb.transformDirection(gj(e).sub(_j(e))),bj=U(([e])=>{let t=e.toUint().mul(747796405).add(2891336453),n=t.shiftRight(t.shiftRight(28).add(4)).bitXor(t).mul(277803737);return n.shiftRight(22).bitXor(n).toFloat().mul(1/2**32)}),xj=(e,t)=>$v(z_(4,e.mul(R_(1,e))),t),Sj=(e,t)=>e.lessThan(.5)?xj(e.mul(2),t).div(2):R_(1,xj(z_(R_(1,e),2),t).div(2)),Cj=(e,t,n)=>$v(B_($v(e,t),L_($v(e,t),$v(R_(1,e),n))),1/t),wj=(e,t)=>wv(sv.mul(t.mul(e).sub(1))).div(sv.mul(t.mul(e).sub(1))),Tj=U(([e])=>e.fract().sub(.5).abs()).setLayout({name:`tri`,type:`float`,inputs:[{name:`x`,type:`float`}]}),Ej=U(([e])=>Y(Tj(e.z.add(Tj(e.y.mul(1)))),Tj(e.z.add(Tj(e.x.mul(1)))),Tj(e.y.add(Tj(e.x.mul(1)))))).setLayout({name:`tri3`,type:`vec3`,inputs:[{name:`p`,type:`vec3`}]}),Dj=U(([e,t,n])=>{let r=Y(e).toVar(),i=G(1.4).toVar(),a=G(0).toVar(),o=Y(r).toVar();return rC({start:G(0),end:G(3),type:`float`,condition:`<=`},()=>{let e=Y(Ej(o.mul(2))).toVar();r.addAssign(e.add(n.mul(G(.1).mul(t)))),o.mulAssign(1.8),i.mulAssign(1.5),r.mulAssign(1.2);let s=G(Tj(r.z.add(Tj(r.x.add(Tj(r.y)))))).toVar();a.addAssign(s.div(i)),o.addAssign(.14)}),a}).setLayout({name:`triNoise3D`,type:`float`,inputs:[{name:`p`,type:`vec3`},{name:`spd`,type:`float`},{name:`time`,type:`float`}]}),Oj=U(([e,t,n=J(.5)])=>wE(e.sub(n),t).add(n)),kj=U(([e,t,n=J(.5)])=>{let r=e.sub(n),i=r.dot(r),a=i.mul(i).mul(t);return e.add(r.mul(a))}),Aj=U(({position:e=null,horizontal:t=!0,vertical:n=!1})=>{let r;e===null?r=Ib:(r=Ib.toVar(),r[3][0]=e.x,r[3][1]=e.y,r[3][2]=e.z);let i=wb.mul(r);return bg(t)&&(i[0][0]=Ib[0].length(),i[0][1]=0,i[0][2]=0),bg(n)&&(i[1][0]=0,i[1][1]=Ib[1].length(),i[1][2]=0),i[2][0]=0,i[2][1]=0,i[2][2]=1,Sb.mul(i).mul(Kb)}),jj=U(([e=null])=>{let t=XC();return XC(HC(e)).sub(t).lessThan(0).select(EC,e)}),Mj=new WeakMap,Nj=class extends zh{static get type(){return`VelocityNode`}constructor(){super(`vec2`),this.updateType=L.OBJECT,this.updateAfterType=L.OBJECT,this.previousModelWorldMatrix=Z(new N),this.previousProjectionMatrix=Z(new N).setGroup(Qg),this.previousCameraViewMatrix=Z(new N)}update({frameId:e,camera:t,object:n}){let r=Fj(n);this.previousModelWorldMatrix.value.copy(r);let i=Pj(t);i.frameId!==e&&(i.frameId=e,i.previousProjectionMatrix===void 0?(i.previousProjectionMatrix=new N,i.previousCameraViewMatrix=new N,i.currentProjectionMatrix=new N,i.currentCameraViewMatrix=new N,i.previousProjectionMatrix.copy(t.projectionMatrix),i.previousCameraViewMatrix.copy(t.matrixWorldInverse)):(i.previousProjectionMatrix.copy(i.currentProjectionMatrix),i.previousCameraViewMatrix.copy(i.currentCameraViewMatrix)),i.currentProjectionMatrix.copy(t.projectionMatrix),i.currentCameraViewMatrix.copy(t.matrixWorldInverse),this.previousProjectionMatrix.value.copy(i.previousProjectionMatrix),this.previousCameraViewMatrix.value.copy(i.previousCameraViewMatrix))}updateAfter({object:e}){Fj(e).copy(e.matrixWorld)}setup(){let e=this.previousCameraViewMatrix.mul(this.previousModelWorldMatrix),t=Sb.mul(Hb).mul(Kb),n=this.previousProjectionMatrix.mul(e).mul(qb);return R_(t.xy.div(t.w),n.xy.div(n.w))}};function Pj(e){let t=Mj.get(e);return t===void 0&&(t={},Mj.set(e,t)),t}function Fj(e,t=0){let n=Pj(e),r=n[t];return r===void 0&&(n[t]=r=new N),r}var Ij=H(Nj),Lj=U(([e,t])=>Wv(1,e.oneMinus().div(t)).oneMinus()).setLayout({name:`burnBlend`,type:`vec3`,inputs:[{name:`base`,type:`vec3`},{name:`blend`,type:`vec3`}]}),Rj=U(([e,t])=>Wv(e.div(t.oneMinus()),1)).setLayout({name:`dodgeBlend`,type:`vec3`,inputs:[{name:`base`,type:`vec3`},{name:`blend`,type:`vec3`}]}),zj=U(([e,t])=>e.oneMinus().mul(t.oneMinus()).oneMinus()).setLayout({name:`screenBlend`,type:`vec3`,inputs:[{name:`base`,type:`vec3`},{name:`blend`,type:`vec3`}]}),Bj=U(([e,t])=>oy(e.mul(2).mul(t),e.oneMinus().mul(2).mul(t.oneMinus()).oneMinus(),qv(.5,e))).setLayout({name:`overlayBlend`,type:`vec3`,inputs:[{name:`base`,type:`vec3`},{name:`blend`,type:`vec3`}]}),Vj=U(([e,t,n=K(16)])=>{let r=t=>e.uv(t),i=ub(),a=r(i).toVar(),o=G(n);return rC({start:K(1),end:n,type:`int`,condition:`<=`},({i:e})=>{let n=t.mul(G(e).div(o.sub(1)).sub(.5));a.addAssign(r(i.add(n)))}),a.divAssign(o),a}),Hj=U(([e,t=1])=>{let n=e,r=Pk(n.rgb),i=Y(r),a=Wv(1,Gv(0,G(10).mul(r.sub(.45)))),o=oy(i.mul(n.rgb).mul(2),G(2).mul(i.oneMinus()).mul(n.rgb.oneMinus()).oneMinus(),a),s=n.a.mul(t),c=s.mul(o.rgb);return c.addAssign(n.rgb.mul(s.oneMinus())),X(c,n.a)}),Uj=U(([e])=>{let t=Y(e);return X(Zv(t,Y(.393,.769,.189)),Zv(t,Y(.349,.686,.168)),Zv(t,Y(.272,.534,.131)),e.a)}),Wj=U(([e])=>oy(e.mul(.9478672986).add(.0521327014).pow(2.4),e.mul(.0773993808),e.lessThanEqual(.04045))).setLayout({name:`sRGBToLinearSRGB`,type:`vec3`,inputs:[{name:`color`,type:`vec3`}]}),Gj=U(([e])=>oy(e.pow(.41666).mul(1.055).sub(.055),e.mul(12.92),e.lessThanEqual(.0031308))).setLayout({name:`linearSRGBTosRGB`,type:`vec3`,inputs:[{name:`color`,type:`vec3`}]}),Kj=U(([e,t])=>e.mul(t).clamp()).setLayout({name:`linearToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),qj=U(([e,t])=>(e=e.mul(t),e.div(e.add(1)).clamp())).setLayout({name:`reinhardToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),Jj=U(([e,t])=>{e=e.mul(t),e=e.sub(.004).max(0);let n=e.mul(e.mul(6.2).add(.5)),r=e.mul(e.mul(6.2).add(1.7)).add(.06);return n.div(r).pow(2.2)}).setLayout({name:`cineonToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),Yj=U(([e])=>{let t=e.mul(e.add(.0245786)).sub(90537e-9),n=e.mul(e.add(.432951).mul(.983729)).add(.238081);return t.div(n)}),Xj=U(([e,t])=>{let n=Vg(.59719,.35458,.04823,.076,.90834,.01566,.0284,.13383,.83777),r=Vg(1.60475,-.53108,-.07367,-.10208,1.10813,-.00605,-.00327,-.07276,1.07602);return e=e.mul(t).div(.6),e=n.mul(e),e=Yj(e),e=r.mul(e),e.clamp()}).setLayout({name:`acesFilmicToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),Zj=Vg(Y(1.6605,-.1246,-.0182),Y(-.5876,1.1329,-.1006),Y(-.0728,-.0083,1.1187)),Qj=Vg(Y(.6274,.0691,.0164),Y(.3293,.9195,.088),Y(.0433,.0113,.8956)),$j=U(([e])=>{let t=Y(e).toVar(),n=Y(t.mul(t)).toVar(),r=Y(n.mul(n)).toVar();return G(15.5).mul(r.mul(n)).sub(z_(40.14,r.mul(t))).add(z_(31.96,r).sub(z_(6.868,n.mul(t))).add(z_(.4298,n).add(z_(.1191,t).sub(.00232))))}),eM=U(([e,t])=>{let n=Y(e).toVar(),r=Vg(Y(.856627153315983,.137318972929847,.11189821299995),Y(.0951212405381588,.761241990602591,.0767994186031903),Y(.0482516061458583,.101439036467562,.811302368396859)),i=Vg(Y(1.1271005818144368,-.1413297634984383,-.14132976349843826),Y(-.11060664309660323,1.157823702216272,-.11060664309660294),Y(-.016493938717834573,-.016493938717834257,1.2519364065950405)),a=G(-12.47393),o=G(4.026069);return n.mulAssign(t),n.assign(Qj.mul(n)),n.assign(r.mul(n)),n.assign(Gv(n,1e-10)),n.assign(_v(n)),n.assign(n.sub(a).div(o.sub(a))),n.assign(sy(n,0,1)),n.assign($j(n)),n.assign(i.mul(n)),n.assign($v(Gv(Y(0),n),Y(2.2))),n.assign(Zj.mul(n)),n.assign(sy(n,0,1)),n}).setLayout({name:`agxToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),tM=U(([e,t])=>{let n=G(.76),r=G(.15);e=e.mul(t);let i=Wv(e.r,Wv(e.g,e.b)),a=hy(i.lessThan(.08),i.sub(z_(6.25,i.mul(i))),.04);e.subAssign(a);let o=Gv(e.r,Gv(e.g,e.b));W(o.lessThan(n),()=>e);let s=R_(1,n),c=R_(1,s.mul(s).div(o.add(s.sub(n))));e.mulAssign(c.div(o));let l=R_(1,B_(1,r.mul(o.sub(c)).add(1)));return oy(e,Y(c),l)}).setLayout({name:`neutralToneMapping`,type:`vec3`,inputs:[{name:`color`,type:`vec3`},{name:`exposure`,type:`float`}]}),nM=class extends R{static get type(){return`ComputeBuiltinNode`}constructor(e,t){super(t),this._builtinName=e}getHash(e){return this.getBuiltinName(e)}getNodeType(){return this.nodeType}setBuiltinName(e){return this._builtinName=e,this}getBuiltinName(){return this._builtinName}hasBuiltin(e){e.hasBuiltin(this._builtinName)}generate(e,t){let n=this.getBuiltinName(e),r=this.getNodeType(e);return e.shaderStage===`compute`?e.format(n,r,t):(console.warn(`ComputeBuiltinNode: Compute built-in value ${n} can not be accessed in the ${e.shaderStage} stage`),e.generateConst(r))}serialize(e){super.serialize(e),e.global=this.global,e._builtinName=this._builtinName}deserialize(e){super.deserialize(e),this.global=e.global,this._builtinName=e._builtinName}},rM=(e,t)=>B(new nM(e,t)),iM=rM(`numWorkgroups`,`uvec3`),aM=rM(`workgroupId`,`uvec3`),oM=rM(`localId`,`uvec3`),sM=rM(`subgroupSize`,`uint`),cM=V(class extends R{constructor(e){super(),this.scope=e}generate(e){let{scope:t}=this,{renderer:n}=e;n.backend.isWebGLBackend===!0?e.addFlowCode(`\t// ${t}Barrier \n`):e.addLineFlowCode(`${t}Barrier()`,this)}}),lM=()=>cM(`workgroup`).append(),uM=()=>cM(`storage`).append(),dM=()=>cM(`texture`).append(),fM=class extends Lh{constructor(e,t){super(e,t),this.isWorkgroupInfoElementNode=!0}generate(e,t){let n,r=e.context.assign;if(n=super.generate(e),r!==!0){let r=this.getNodeType(e);n=e.format(n,r,t)}return n}},pM=class extends R{constructor(e,t,n=0){super(t),this.bufferType=t,this.bufferCount=n,this.isWorkgroupInfoNode=!0,this.scope=e}label(e){return this.name=e,this}getHash(){return this.uuid}setScope(e){return this.scope=e,this}getInputType(){return`${this.scope}Array`}element(e){return B(new fM(this,e))}generate(e){return e.getScopedArray(this.name||`${this.scope}Array_${this.id}`,this.scope.toLowerCase(),this.bufferType,this.bufferCount)}},mM=(e,t)=>B(new pM(`Workgroup`,e,t)),hM=class extends zh{static get type(){return`AtomicFunctionNode`}constructor(e,t,n,r=null){super(`uint`),this.method=e,this.pointerNode=t,this.valueNode=n,this.storeNode=r}getInputType(e){return this.pointerNode.getNodeType(e)}getNodeType(e){return this.getInputType(e)}generate(e){let t=this.method,n=this.getNodeType(e),r=this.getInputType(e),i=this.pointerNode,a=this.valueNode,o=[];o.push(`&${i.build(e,r)}`),o.push(a.build(e,r));let s=`${e.getMethod(t,n)}( ${o.join(`, `)} )`;if(this.storeNode!==null){let t=this.storeNode.build(e,r);e.addLineFlowCode(`${t} = ${s}`,this)}else e.addLineFlowCode(s,this)}};hM.ATOMIC_LOAD=`atomicLoad`,hM.ATOMIC_STORE=`atomicStore`,hM.ATOMIC_ADD=`atomicAdd`,hM.ATOMIC_SUB=`atomicSub`,hM.ATOMIC_MAX=`atomicMax`,hM.ATOMIC_MIN=`atomicMin`,hM.ATOMIC_AND=`atomicAnd`,hM.ATOMIC_OR=`atomicOr`,hM.ATOMIC_XOR=`atomicXor`;var gM=V(hM),_M=(e,t,n,r)=>{let i=gM(e,t,n,r);return i.append(),i},vM=(e,t,n=null)=>_M(hM.ATOMIC_STORE,e,t,n),yM=(e,t,n=null)=>_M(hM.ATOMIC_ADD,e,t,n),bM=(e,t,n=null)=>_M(hM.ATOMIC_SUB,e,t,n),xM=(e,t,n=null)=>_M(hM.ATOMIC_MAX,e,t,n),SM=(e,t,n=null)=>_M(hM.ATOMIC_MIN,e,t,n),CM=(e,t,n=null)=>_M(hM.ATOMIC_AND,e,t,n),wM=(e,t,n=null)=>_M(hM.ATOMIC_OR,e,t,n),TM=(e,t,n=null)=>_M(hM.ATOMIC_XOR,e,t,n),EM=U(([e=ub()])=>{let t=e.mul(2),n=t.x.floor(),r=t.y.floor();return n.add(r).mod(2).sign()}),DM=U(([e,t,n])=>{let r=G(n).toVar(),i=G(t).toVar();return hy(Ag(e).toVar(),i,r)}).setLayout({name:`mx_select`,type:`float`,inputs:[{name:`b`,type:`bool`},{name:`t`,type:`float`},{name:`f`,type:`float`}]}),OM=U(([e,t])=>{let n=Ag(t).toVar(),r=G(e).toVar();return hy(n,r.negate(),r)}).setLayout({name:`mx_negate_if`,type:`float`,inputs:[{name:`val`,type:`float`},{name:`b`,type:`bool`}]}),kM=U(([e])=>K(bv(G(e).toVar()))).setLayout({name:`mx_floor`,type:`int`,inputs:[{name:`x`,type:`float`}]}),AM=U(([e,t])=>{let n=G(e).toVar();return t.assign(kM(n)),n.sub(G(t))}),jM=aO([U(([e,t,n,r,i,a])=>{let o=G(a).toVar(),s=G(i).toVar(),c=G(r).toVar(),l=G(n).toVar(),u=G(t).toVar(),d=G(e).toVar(),f=G(R_(1,s)).toVar();return R_(1,o).mul(d.mul(f).add(u.mul(s))).add(o.mul(l.mul(f).add(c.mul(s))))}).setLayout({name:`mx_bilerp_0`,type:`float`,inputs:[{name:`v0`,type:`float`},{name:`v1`,type:`float`},{name:`v2`,type:`float`},{name:`v3`,type:`float`},{name:`s`,type:`float`},{name:`t`,type:`float`}]}),U(([e,t,n,r,i,a])=>{let o=G(a).toVar(),s=G(i).toVar(),c=Y(r).toVar(),l=Y(n).toVar(),u=Y(t).toVar(),d=Y(e).toVar(),f=G(R_(1,s)).toVar();return R_(1,o).mul(d.mul(f).add(u.mul(s))).add(o.mul(l.mul(f).add(c.mul(s))))}).setLayout({name:`mx_bilerp_1`,type:`vec3`,inputs:[{name:`v0`,type:`vec3`},{name:`v1`,type:`vec3`},{name:`v2`,type:`vec3`},{name:`v3`,type:`vec3`},{name:`s`,type:`float`},{name:`t`,type:`float`}]})]),MM=aO([U(([e,t,n,r,i,a,o,s,c,l,u])=>{let d=G(u).toVar(),f=G(l).toVar(),p=G(c).toVar(),m=G(s).toVar(),h=G(o).toVar(),g=G(a).toVar(),_=G(i).toVar(),v=G(r).toVar(),y=G(n).toVar(),b=G(t).toVar(),x=G(e).toVar(),S=G(R_(1,p)).toVar(),C=G(R_(1,f)).toVar();return G(R_(1,d)).toVar().mul(C.mul(x.mul(S).add(b.mul(p))).add(f.mul(y.mul(S).add(v.mul(p))))).add(d.mul(C.mul(_.mul(S).add(g.mul(p))).add(f.mul(h.mul(S).add(m.mul(p))))))}).setLayout({name:`mx_trilerp_0`,type:`float`,inputs:[{name:`v0`,type:`float`},{name:`v1`,type:`float`},{name:`v2`,type:`float`},{name:`v3`,type:`float`},{name:`v4`,type:`float`},{name:`v5`,type:`float`},{name:`v6`,type:`float`},{name:`v7`,type:`float`},{name:`s`,type:`float`},{name:`t`,type:`float`},{name:`r`,type:`float`}]}),U(([e,t,n,r,i,a,o,s,c,l,u])=>{let d=G(u).toVar(),f=G(l).toVar(),p=G(c).toVar(),m=Y(s).toVar(),h=Y(o).toVar(),g=Y(a).toVar(),_=Y(i).toVar(),v=Y(r).toVar(),y=Y(n).toVar(),b=Y(t).toVar(),x=Y(e).toVar(),S=G(R_(1,p)).toVar(),C=G(R_(1,f)).toVar();return G(R_(1,d)).toVar().mul(C.mul(x.mul(S).add(b.mul(p))).add(f.mul(y.mul(S).add(v.mul(p))))).add(d.mul(C.mul(_.mul(S).add(g.mul(p))).add(f.mul(h.mul(S).add(m.mul(p))))))}).setLayout({name:`mx_trilerp_1`,type:`vec3`,inputs:[{name:`v0`,type:`vec3`},{name:`v1`,type:`vec3`},{name:`v2`,type:`vec3`},{name:`v3`,type:`vec3`},{name:`v4`,type:`vec3`},{name:`v5`,type:`vec3`},{name:`v6`,type:`vec3`},{name:`v7`,type:`vec3`},{name:`s`,type:`float`},{name:`t`,type:`float`},{name:`r`,type:`float`}]})]),NM=aO([U(([e,t,n])=>{let r=G(n).toVar(),i=G(t).toVar(),a=q(q(e).toVar().bitAnd(q(7))).toVar(),o=G(DM(a.lessThan(q(4)),i,r)).toVar(),s=G(z_(2,DM(a.lessThan(q(4)),r,i))).toVar();return OM(o,Ag(a.bitAnd(q(1)))).add(OM(s,Ag(a.bitAnd(q(2)))))}).setLayout({name:`mx_gradient_float_0`,type:`float`,inputs:[{name:`hash`,type:`uint`},{name:`x`,type:`float`},{name:`y`,type:`float`}]}),U(([e,t,n,r])=>{let i=G(r).toVar(),a=G(n).toVar(),o=G(t).toVar(),s=q(q(e).toVar().bitAnd(q(15))).toVar(),c=G(DM(s.lessThan(q(8)),o,a)).toVar(),l=G(DM(s.lessThan(q(4)),a,DM(s.equal(q(12)).or(s.equal(q(14))),o,i))).toVar();return OM(c,Ag(s.bitAnd(q(1)))).add(OM(l,Ag(s.bitAnd(q(2)))))}).setLayout({name:`mx_gradient_float_1`,type:`float`,inputs:[{name:`hash`,type:`uint`},{name:`x`,type:`float`},{name:`y`,type:`float`},{name:`z`,type:`float`}]})]),PM=aO([U(([e,t,n])=>{let r=G(n).toVar(),i=G(t).toVar(),a=Fg(e).toVar();return Y(NM(a.x,i,r),NM(a.y,i,r),NM(a.z,i,r))}).setLayout({name:`mx_gradient_vec3_0`,type:`vec3`,inputs:[{name:`hash`,type:`uvec3`},{name:`x`,type:`float`},{name:`y`,type:`float`}]}),U(([e,t,n,r])=>{let i=G(r).toVar(),a=G(n).toVar(),o=G(t).toVar(),s=Fg(e).toVar();return Y(NM(s.x,o,a,i),NM(s.y,o,a,i),NM(s.z,o,a,i))}).setLayout({name:`mx_gradient_vec3_1`,type:`vec3`,inputs:[{name:`hash`,type:`uvec3`},{name:`x`,type:`float`},{name:`y`,type:`float`},{name:`z`,type:`float`}]})]),FM=U(([e])=>z_(.6616,G(e).toVar())).setLayout({name:`mx_gradient_scale2d_0`,type:`float`,inputs:[{name:`v`,type:`float`}]}),IM=U(([e])=>z_(.982,G(e).toVar())).setLayout({name:`mx_gradient_scale3d_0`,type:`float`,inputs:[{name:`v`,type:`float`}]}),LM=aO([FM,U(([e])=>z_(.6616,Y(e).toVar())).setLayout({name:`mx_gradient_scale2d_1`,type:`vec3`,inputs:[{name:`v`,type:`vec3`}]})]),RM=aO([IM,U(([e])=>z_(.982,Y(e).toVar())).setLayout({name:`mx_gradient_scale3d_1`,type:`vec3`,inputs:[{name:`v`,type:`vec3`}]})]),zM=U(([e,t])=>{let n=K(t).toVar(),r=q(e).toVar();return r.shiftLeft(n).bitOr(r.shiftRight(K(32).sub(n)))}).setLayout({name:`mx_rotl32`,type:`uint`,inputs:[{name:`x`,type:`uint`},{name:`k`,type:`int`}]}),BM=U(([e,t,n])=>{e.subAssign(n),e.bitXorAssign(zM(n,K(4))),n.addAssign(t),t.subAssign(e),t.bitXorAssign(zM(e,K(6))),e.addAssign(n),n.subAssign(t),n.bitXorAssign(zM(t,K(8))),t.addAssign(e),e.subAssign(n),e.bitXorAssign(zM(n,K(16))),n.addAssign(t),t.subAssign(e),t.bitXorAssign(zM(e,K(19))),e.addAssign(n),n.subAssign(t),n.bitXorAssign(zM(t,K(4))),t.addAssign(e)}),VM=U(([e,t,n])=>{let r=q(n).toVar(),i=q(t).toVar(),a=q(e).toVar();return r.bitXorAssign(i),r.subAssign(zM(i,K(14))),a.bitXorAssign(r),a.subAssign(zM(r,K(11))),i.bitXorAssign(a),i.subAssign(zM(a,K(25))),r.bitXorAssign(i),r.subAssign(zM(i,K(16))),a.bitXorAssign(r),a.subAssign(zM(r,K(4))),i.bitXorAssign(a),i.subAssign(zM(a,K(14))),r.bitXorAssign(i),r.subAssign(zM(i,K(24))),r}).setLayout({name:`mx_bjfinal`,type:`uint`,inputs:[{name:`a`,type:`uint`},{name:`b`,type:`uint`},{name:`c`,type:`uint`}]}),HM=U(([e])=>G(q(e).toVar()).div(G(q(K(4294967295))))).setLayout({name:`mx_bits_to_01`,type:`float`,inputs:[{name:`bits`,type:`uint`}]}),UM=U(([e])=>{let t=G(e).toVar();return t.mul(t).mul(t).mul(t.mul(t.mul(6).sub(15)).add(10))}).setLayout({name:`mx_fade`,type:`float`,inputs:[{name:`t`,type:`float`}]}),WM=aO([U(([e])=>{let t=K(e).toVar(),n=q(q(1)).toVar(),r=q(q(K(3735928559)).add(n.shiftLeft(q(2))).add(q(13))).toVar();return VM(r.add(q(t)),r,r)}).setLayout({name:`mx_hash_int_0`,type:`uint`,inputs:[{name:`x`,type:`int`}]}),U(([e,t])=>{let n=K(t).toVar(),r=K(e).toVar(),i=q(q(2)).toVar(),a=q().toVar(),o=q().toVar(),s=q().toVar();return a.assign(o.assign(s.assign(q(K(3735928559)).add(i.shiftLeft(q(2))).add(q(13))))),a.addAssign(q(r)),o.addAssign(q(n)),VM(a,o,s)}).setLayout({name:`mx_hash_int_1`,type:`uint`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`}]}),U(([e,t,n])=>{let r=K(n).toVar(),i=K(t).toVar(),a=K(e).toVar(),o=q(q(3)).toVar(),s=q().toVar(),c=q().toVar(),l=q().toVar();return s.assign(c.assign(l.assign(q(K(3735928559)).add(o.shiftLeft(q(2))).add(q(13))))),s.addAssign(q(a)),c.addAssign(q(i)),l.addAssign(q(r)),VM(s,c,l)}).setLayout({name:`mx_hash_int_2`,type:`uint`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`z`,type:`int`}]}),U(([e,t,n,r])=>{let i=K(r).toVar(),a=K(n).toVar(),o=K(t).toVar(),s=K(e).toVar(),c=q(q(4)).toVar(),l=q().toVar(),u=q().toVar(),d=q().toVar();return l.assign(u.assign(d.assign(q(K(3735928559)).add(c.shiftLeft(q(2))).add(q(13))))),l.addAssign(q(s)),u.addAssign(q(o)),d.addAssign(q(a)),BM(l,u,d),l.addAssign(q(i)),VM(l,u,d)}).setLayout({name:`mx_hash_int_3`,type:`uint`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`z`,type:`int`},{name:`xx`,type:`int`}]}),U(([e,t,n,r,i])=>{let a=K(i).toVar(),o=K(r).toVar(),s=K(n).toVar(),c=K(t).toVar(),l=K(e).toVar(),u=q(q(5)).toVar(),d=q().toVar(),f=q().toVar(),p=q().toVar();return d.assign(f.assign(p.assign(q(K(3735928559)).add(u.shiftLeft(q(2))).add(q(13))))),d.addAssign(q(l)),f.addAssign(q(c)),p.addAssign(q(s)),BM(d,f,p),d.addAssign(q(o)),f.addAssign(q(a)),VM(d,f,p)}).setLayout({name:`mx_hash_int_4`,type:`uint`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`z`,type:`int`},{name:`xx`,type:`int`},{name:`yy`,type:`int`}]})]),GM=aO([U(([e,t])=>{let n=K(t).toVar(),r=q(WM(K(e).toVar(),n)).toVar(),i=Fg().toVar();return i.x.assign(r.bitAnd(K(255))),i.y.assign(r.shiftRight(K(8)).bitAnd(K(255))),i.z.assign(r.shiftRight(K(16)).bitAnd(K(255))),i}).setLayout({name:`mx_hash_vec3_0`,type:`uvec3`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`}]}),U(([e,t,n])=>{let r=K(n).toVar(),i=K(t).toVar(),a=q(WM(K(e).toVar(),i,r)).toVar(),o=Fg().toVar();return o.x.assign(a.bitAnd(K(255))),o.y.assign(a.shiftRight(K(8)).bitAnd(K(255))),o.z.assign(a.shiftRight(K(16)).bitAnd(K(255))),o}).setLayout({name:`mx_hash_vec3_1`,type:`uvec3`,inputs:[{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`z`,type:`int`}]})]),KM=aO([U(([e])=>{let t=J(e).toVar(),n=K().toVar(),r=K().toVar(),i=G(AM(t.x,n)).toVar(),a=G(AM(t.y,r)).toVar(),o=G(UM(i)).toVar(),s=G(UM(a)).toVar();return LM(G(jM(NM(WM(n,r),i,a),NM(WM(n.add(K(1)),r),i.sub(1),a),NM(WM(n,r.add(K(1))),i,a.sub(1)),NM(WM(n.add(K(1)),r.add(K(1))),i.sub(1),a.sub(1)),o,s)).toVar())}).setLayout({name:`mx_perlin_noise_float_0`,type:`float`,inputs:[{name:`p`,type:`vec2`}]}),U(([e])=>{let t=Y(e).toVar(),n=K().toVar(),r=K().toVar(),i=K().toVar(),a=G(AM(t.x,n)).toVar(),o=G(AM(t.y,r)).toVar(),s=G(AM(t.z,i)).toVar(),c=G(UM(a)).toVar(),l=G(UM(o)).toVar(),u=G(UM(s)).toVar();return RM(G(MM(NM(WM(n,r,i),a,o,s),NM(WM(n.add(K(1)),r,i),a.sub(1),o,s),NM(WM(n,r.add(K(1)),i),a,o.sub(1),s),NM(WM(n.add(K(1)),r.add(K(1)),i),a.sub(1),o.sub(1),s),NM(WM(n,r,i.add(K(1))),a,o,s.sub(1)),NM(WM(n.add(K(1)),r,i.add(K(1))),a.sub(1),o,s.sub(1)),NM(WM(n,r.add(K(1)),i.add(K(1))),a,o.sub(1),s.sub(1)),NM(WM(n.add(K(1)),r.add(K(1)),i.add(K(1))),a.sub(1),o.sub(1),s.sub(1)),c,l,u)).toVar())}).setLayout({name:`mx_perlin_noise_float_1`,type:`float`,inputs:[{name:`p`,type:`vec3`}]})]),qM=aO([U(([e])=>{let t=J(e).toVar(),n=K().toVar(),r=K().toVar(),i=G(AM(t.x,n)).toVar(),a=G(AM(t.y,r)).toVar(),o=G(UM(i)).toVar(),s=G(UM(a)).toVar();return LM(Y(jM(PM(GM(n,r),i,a),PM(GM(n.add(K(1)),r),i.sub(1),a),PM(GM(n,r.add(K(1))),i,a.sub(1)),PM(GM(n.add(K(1)),r.add(K(1))),i.sub(1),a.sub(1)),o,s)).toVar())}).setLayout({name:`mx_perlin_noise_vec3_0`,type:`vec3`,inputs:[{name:`p`,type:`vec2`}]}),U(([e])=>{let t=Y(e).toVar(),n=K().toVar(),r=K().toVar(),i=K().toVar(),a=G(AM(t.x,n)).toVar(),o=G(AM(t.y,r)).toVar(),s=G(AM(t.z,i)).toVar(),c=G(UM(a)).toVar(),l=G(UM(o)).toVar(),u=G(UM(s)).toVar();return RM(Y(MM(PM(GM(n,r,i),a,o,s),PM(GM(n.add(K(1)),r,i),a.sub(1),o,s),PM(GM(n,r.add(K(1)),i),a,o.sub(1),s),PM(GM(n.add(K(1)),r.add(K(1)),i),a.sub(1),o.sub(1),s),PM(GM(n,r,i.add(K(1))),a,o,s.sub(1)),PM(GM(n.add(K(1)),r,i.add(K(1))),a.sub(1),o,s.sub(1)),PM(GM(n,r.add(K(1)),i.add(K(1))),a,o.sub(1),s.sub(1)),PM(GM(n.add(K(1)),r.add(K(1)),i.add(K(1))),a.sub(1),o.sub(1),s.sub(1)),c,l,u)).toVar())}).setLayout({name:`mx_perlin_noise_vec3_1`,type:`vec3`,inputs:[{name:`p`,type:`vec3`}]})]),JM=aO([U(([e])=>HM(WM(K(kM(G(e).toVar())).toVar()))).setLayout({name:`mx_cell_noise_float_0`,type:`float`,inputs:[{name:`p`,type:`float`}]}),U(([e])=>{let t=J(e).toVar();return HM(WM(K(kM(t.x)).toVar(),K(kM(t.y)).toVar()))}).setLayout({name:`mx_cell_noise_float_1`,type:`float`,inputs:[{name:`p`,type:`vec2`}]}),U(([e])=>{let t=Y(e).toVar();return HM(WM(K(kM(t.x)).toVar(),K(kM(t.y)).toVar(),K(kM(t.z)).toVar()))}).setLayout({name:`mx_cell_noise_float_2`,type:`float`,inputs:[{name:`p`,type:`vec3`}]}),U(([e])=>{let t=X(e).toVar();return HM(WM(K(kM(t.x)).toVar(),K(kM(t.y)).toVar(),K(kM(t.z)).toVar(),K(kM(t.w)).toVar()))}).setLayout({name:`mx_cell_noise_float_3`,type:`float`,inputs:[{name:`p`,type:`vec4`}]})]),YM=aO([U(([e])=>{let t=K(kM(G(e).toVar())).toVar();return Y(HM(WM(t,K(0))),HM(WM(t,K(1))),HM(WM(t,K(2))))}).setLayout({name:`mx_cell_noise_vec3_0`,type:`vec3`,inputs:[{name:`p`,type:`float`}]}),U(([e])=>{let t=J(e).toVar(),n=K(kM(t.x)).toVar(),r=K(kM(t.y)).toVar();return Y(HM(WM(n,r,K(0))),HM(WM(n,r,K(1))),HM(WM(n,r,K(2))))}).setLayout({name:`mx_cell_noise_vec3_1`,type:`vec3`,inputs:[{name:`p`,type:`vec2`}]}),U(([e])=>{let t=Y(e).toVar(),n=K(kM(t.x)).toVar(),r=K(kM(t.y)).toVar(),i=K(kM(t.z)).toVar();return Y(HM(WM(n,r,i,K(0))),HM(WM(n,r,i,K(1))),HM(WM(n,r,i,K(2))))}).setLayout({name:`mx_cell_noise_vec3_2`,type:`vec3`,inputs:[{name:`p`,type:`vec3`}]}),U(([e])=>{let t=X(e).toVar(),n=K(kM(t.x)).toVar(),r=K(kM(t.y)).toVar(),i=K(kM(t.z)).toVar(),a=K(kM(t.w)).toVar();return Y(HM(WM(n,r,i,a,K(0))),HM(WM(n,r,i,a,K(1))),HM(WM(n,r,i,a,K(2))))}).setLayout({name:`mx_cell_noise_vec3_3`,type:`vec3`,inputs:[{name:`p`,type:`vec4`}]})]),XM=U(([e,t,n,r])=>{let i=G(r).toVar(),a=G(n).toVar(),o=K(t).toVar(),s=Y(e).toVar(),c=G(0).toVar(),l=G(1).toVar();return rC(o,()=>{c.addAssign(l.mul(KM(s))),l.mulAssign(i),s.mulAssign(a)}),c}).setLayout({name:`mx_fractal_noise_float`,type:`float`,inputs:[{name:`p`,type:`vec3`},{name:`octaves`,type:`int`},{name:`lacunarity`,type:`float`},{name:`diminish`,type:`float`}]}),ZM=U(([e,t,n,r])=>{let i=G(r).toVar(),a=G(n).toVar(),o=K(t).toVar(),s=Y(e).toVar(),c=Y(0).toVar(),l=G(1).toVar();return rC(o,()=>{c.addAssign(l.mul(qM(s))),l.mulAssign(i),s.mulAssign(a)}),c}).setLayout({name:`mx_fractal_noise_vec3`,type:`vec3`,inputs:[{name:`p`,type:`vec3`},{name:`octaves`,type:`int`},{name:`lacunarity`,type:`float`},{name:`diminish`,type:`float`}]}),QM=U(([e,t,n,r])=>{let i=G(r).toVar(),a=G(n).toVar(),o=K(t).toVar(),s=Y(e).toVar();return J(XM(s,o,a,i),XM(s.add(Y(K(19),K(193),K(17))),o,a,i))}).setLayout({name:`mx_fractal_noise_vec2`,type:`vec2`,inputs:[{name:`p`,type:`vec3`},{name:`octaves`,type:`int`},{name:`lacunarity`,type:`float`},{name:`diminish`,type:`float`}]}),$M=U(([e,t,n,r])=>{let i=G(r).toVar(),a=G(n).toVar(),o=K(t).toVar(),s=Y(e).toVar();return X(Y(ZM(s,o,a,i)).toVar(),G(XM(s.add(Y(K(19),K(193),K(17))),o,a,i)).toVar())}).setLayout({name:`mx_fractal_noise_vec4`,type:`vec4`,inputs:[{name:`p`,type:`vec3`},{name:`octaves`,type:`int`},{name:`lacunarity`,type:`float`},{name:`diminish`,type:`float`}]}),eN=aO([U(([e,t,n,r,i,a,o])=>{let s=K(o).toVar(),c=G(a).toVar(),l=K(i).toVar(),u=K(r).toVar(),d=K(n).toVar(),f=K(t).toVar(),p=J(e).toVar(),m=Y(YM(J(f.add(u),d.add(l)))).toVar(),h=J(m.x,m.y).toVar();h.subAssign(.5),h.mulAssign(c),h.addAssign(.5);let g=J(J(J(G(f),G(d)).add(h)).toVar().sub(p)).toVar();return W(s.equal(K(2)),()=>Av(g.x).add(Av(g.y))),W(s.equal(K(3)),()=>Gv(Av(g.x),Av(g.y))),Zv(g,g)}).setLayout({name:`mx_worley_distance_0`,type:`float`,inputs:[{name:`p`,type:`vec2`},{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`xoff`,type:`int`},{name:`yoff`,type:`int`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]}),U(([e,t,n,r,i,a,o,s,c])=>{let l=K(c).toVar(),u=G(s).toVar(),d=K(o).toVar(),f=K(a).toVar(),p=K(i).toVar(),m=K(r).toVar(),h=K(n).toVar(),g=K(t).toVar(),_=Y(e).toVar(),v=Y(YM(Y(g.add(p),h.add(f),m.add(d)))).toVar();v.subAssign(.5),v.mulAssign(u),v.addAssign(.5);let y=Y(Y(Y(G(g),G(h),G(m)).add(v)).toVar().sub(_)).toVar();return W(l.equal(K(2)),()=>Av(y.x).add(Av(y.y)).add(Av(y.z))),W(l.equal(K(3)),()=>Gv(Gv(Av(y.x),Av(y.y)),Av(y.z))),Zv(y,y)}).setLayout({name:`mx_worley_distance_1`,type:`float`,inputs:[{name:`p`,type:`vec3`},{name:`x`,type:`int`},{name:`y`,type:`int`},{name:`z`,type:`int`},{name:`xoff`,type:`int`},{name:`yoff`,type:`int`},{name:`zoff`,type:`int`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]})]),tN=U(([e,t,n])=>{let r=K(n).toVar(),i=G(t).toVar(),a=J(e).toVar(),o=K().toVar(),s=K().toVar(),c=J(AM(a.x,o),AM(a.y,s)).toVar(),l=G(1e6).toVar();return rC({start:-1,end:K(1),name:`x`,condition:`<=`},({x:e})=>{rC({start:-1,end:K(1),name:`y`,condition:`<=`},({y:t})=>{let n=G(eN(c,e,t,o,s,i,r)).toVar();l.assign(Wv(l,n))})}),W(r.equal(K(0)),()=>{l.assign(vv(l))}),l}).setLayout({name:`mx_worley_noise_float_0`,type:`float`,inputs:[{name:`p`,type:`vec2`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]}),nN=U(([e,t,n])=>{let r=K(n).toVar(),i=G(t).toVar(),a=J(e).toVar(),o=K().toVar(),s=K().toVar(),c=J(AM(a.x,o),AM(a.y,s)).toVar(),l=J(1e6,1e6).toVar();return rC({start:-1,end:K(1),name:`x`,condition:`<=`},({x:e})=>{rC({start:-1,end:K(1),name:`y`,condition:`<=`},({y:t})=>{let n=G(eN(c,e,t,o,s,i,r)).toVar();W(n.lessThan(l.x),()=>{l.y.assign(l.x),l.x.assign(n)}).ElseIf(n.lessThan(l.y),()=>{l.y.assign(n)})})}),W(r.equal(K(0)),()=>{l.assign(vv(l))}),l}).setLayout({name:`mx_worley_noise_vec2_0`,type:`vec2`,inputs:[{name:`p`,type:`vec2`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]}),rN=U(([e,t,n])=>{let r=K(n).toVar(),i=G(t).toVar(),a=J(e).toVar(),o=K().toVar(),s=K().toVar(),c=J(AM(a.x,o),AM(a.y,s)).toVar(),l=Y(1e6,1e6,1e6).toVar();return rC({start:-1,end:K(1),name:`x`,condition:`<=`},({x:e})=>{rC({start:-1,end:K(1),name:`y`,condition:`<=`},({y:t})=>{let n=G(eN(c,e,t,o,s,i,r)).toVar();W(n.lessThan(l.x),()=>{l.z.assign(l.y),l.y.assign(l.x),l.x.assign(n)}).ElseIf(n.lessThan(l.y),()=>{l.z.assign(l.y),l.y.assign(n)}).ElseIf(n.lessThan(l.z),()=>{l.z.assign(n)})})}),W(r.equal(K(0)),()=>{l.assign(vv(l))}),l}).setLayout({name:`mx_worley_noise_vec3_0`,type:`vec3`,inputs:[{name:`p`,type:`vec2`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]}),iN=aO([tN,U(([e,t,n])=>{let r=K(n).toVar(),i=G(t).toVar(),a=Y(e).toVar(),o=K().toVar(),s=K().toVar(),c=K().toVar(),l=Y(AM(a.x,o),AM(a.y,s),AM(a.z,c)).toVar(),u=G(1e6).toVar();return rC({start:-1,end:K(1),name:`x`,condition:`<=`},({x:e})=>{rC({start:-1,end:K(1),name:`y`,condition:`<=`},({y:t})=>{rC({start:-1,end:K(1),name:`z`,condition:`<=`},({z:n})=>{let a=G(eN(l,e,t,n,o,s,c,i,r)).toVar();u.assign(Wv(u,a))})})}),W(r.equal(K(0)),()=>{u.assign(vv(u))}),u}).setLayout({name:`mx_worley_noise_float_1`,type:`float`,inputs:[{name:`p`,type:`vec3`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]})]),aN=aO([nN,U(([e,t,n])=>{let r=K(n).toVar(),i=G(t).toVar(),a=Y(e).toVar(),o=K().toVar(),s=K().toVar(),c=K().toVar(),l=Y(AM(a.x,o),AM(a.y,s),AM(a.z,c)).toVar(),u=J(1e6,1e6).toVar();return rC({start:-1,end:K(1),name:`x`,condition:`<=`},({x:e})=>{rC({start:-1,end:K(1),name:`y`,condition:`<=`},({y:t})=>{rC({start:-1,end:K(1),name:`z`,condition:`<=`},({z:n})=>{let a=G(eN(l,e,t,n,o,s,c,i,r)).toVar();W(a.lessThan(u.x),()=>{u.y.assign(u.x),u.x.assign(a)}).ElseIf(a.lessThan(u.y),()=>{u.y.assign(a)})})})}),W(r.equal(K(0)),()=>{u.assign(vv(u))}),u}).setLayout({name:`mx_worley_noise_vec2_1`,type:`vec2`,inputs:[{name:`p`,type:`vec3`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]})]),oN=aO([rN,U(([e,t,n])=>{let r=K(n).toVar(),i=G(t).toVar(),a=Y(e).toVar(),o=K().toVar(),s=K().toVar(),c=K().toVar(),l=Y(AM(a.x,o),AM(a.y,s),AM(a.z,c)).toVar(),u=Y(1e6,1e6,1e6).toVar();return rC({start:-1,end:K(1),name:`x`,condition:`<=`},({x:e})=>{rC({start:-1,end:K(1),name:`y`,condition:`<=`},({y:t})=>{rC({start:-1,end:K(1),name:`z`,condition:`<=`},({z:n})=>{let a=G(eN(l,e,t,n,o,s,c,i,r)).toVar();W(a.lessThan(u.x),()=>{u.z.assign(u.y),u.y.assign(u.x),u.x.assign(a)}).ElseIf(a.lessThan(u.y),()=>{u.z.assign(u.y),u.y.assign(a)}).ElseIf(a.lessThan(u.z),()=>{u.z.assign(a)})})})}),W(r.equal(K(0)),()=>{u.assign(vv(u))}),u}).setLayout({name:`mx_worley_noise_vec3_1`,type:`vec3`,inputs:[{name:`p`,type:`vec3`},{name:`jitter`,type:`float`},{name:`metric`,type:`int`}]})]),sN=U(([e])=>{let t=e.y,n=e.z,r=Y().toVar();return W(t.lessThan(1e-4),()=>{r.assign(Y(n,n,n))}).Else(()=>{let i=e.x;i=i.sub(bv(i)).mul(6).toVar();let a=K(zv(i)),o=i.sub(G(a)),s=n.mul(t.oneMinus()),c=n.mul(t.mul(o).oneMinus()),l=n.mul(t.mul(o.oneMinus()).oneMinus());W(a.equal(K(0)),()=>{r.assign(Y(n,l,s))}).ElseIf(a.equal(K(1)),()=>{r.assign(Y(c,n,s))}).ElseIf(a.equal(K(2)),()=>{r.assign(Y(s,n,l))}).ElseIf(a.equal(K(3)),()=>{r.assign(Y(s,c,n))}).ElseIf(a.equal(K(4)),()=>{r.assign(Y(l,s,n))}).Else(()=>{r.assign(Y(n,s,c))})}),r}).setLayout({name:`mx_hsvtorgb`,type:`vec3`,inputs:[{name:`hsv`,type:`vec3`}]}),cN=U(([e])=>{let t=Y(e).toVar(),n=G(t.x).toVar(),r=G(t.y).toVar(),i=G(t.z).toVar(),a=G(Wv(n,Wv(r,i))).toVar(),o=G(Gv(n,Gv(r,i))).toVar(),s=G(o.sub(a)).toVar(),c=G().toVar(),l=G().toVar(),u=G().toVar();return u.assign(o),W(o.greaterThan(0),()=>{l.assign(s.div(o))}).Else(()=>{l.assign(0)}),W(l.lessThanEqual(0),()=>{c.assign(0)}).Else(()=>{W(n.greaterThanEqual(o),()=>{c.assign(r.sub(i).div(s))}).ElseIf(r.greaterThanEqual(o),()=>{c.assign(L_(2,i.sub(n).div(s)))}).Else(()=>{c.assign(L_(4,n.sub(r).div(s)))}),c.mulAssign(1/6),W(c.lessThan(0),()=>{c.addAssign(1)})}),Y(c,l,u)}).setLayout({name:`mx_rgbtohsv`,type:`vec3`,inputs:[{name:`c`,type:`vec3`}]}),lN=U(([e])=>{let t=Y(e).toVar(),n=Ig(G_(t,Y(.04045))).toVar();return oy(Y(t.div(12.92)).toVar(),Y($v(Gv(t.add(Y(.055)),Y(0)).div(1.055),Y(2.4))).toVar(),n)}).setLayout({name:`mx_srgb_texture_to_lin_rec709`,type:`vec3`,inputs:[{name:`color`,type:`vec3`}]}),uN=(e,t)=>{e=G(e),t=G(t);let n=J(t.dFdx(),t.dFdy()).length().mul(.7071067811865476);return uy(e.sub(n),e.add(n),t)},dN=(e,t,n,r)=>oy(e,t,n[r].clamp()),fN=(e,t,n=ub())=>dN(e,t,n,`x`),pN=(e,t,n=ub())=>dN(e,t,n,`y`),mN=(e,t,n,r,i)=>oy(e,t,uN(n,r[i])),hN=(e,t,n,r=ub())=>mN(e,t,n,r,`x`),gN=(e,t,n,r=ub())=>mN(e,t,n,r,`y`),_N=(e=1,t=0,n=ub())=>n.mul(e).add(t),vN=(e,t=1)=>(e=G(e),e.abs().pow(t).mul(e.sign())),yN=(e,t=1,n=.5)=>G(e).sub(n).mul(t).add(n),bN=(e=ub(),t=1,n=0)=>KM(e.convert(`vec2|vec3`)).mul(t).add(n),xN=(e=ub(),t=1,n=0)=>qM(e.convert(`vec2|vec3`)).mul(t).add(n),SN=(e=ub(),t=1,n=0)=>(e=e.convert(`vec2|vec3`),X(qM(e),KM(e.add(J(19,73)))).mul(t).add(n)),CN=(e=ub(),t=1)=>iN(e.convert(`vec2|vec3`),t,K(1)),wN=(e=ub(),t=1)=>aN(e.convert(`vec2|vec3`),t,K(1)),TN=(e=ub(),t=1)=>oN(e.convert(`vec2|vec3`),t,K(1)),EN=(e=ub())=>JM(e.convert(`vec2|vec3`)),DN=(e=ub(),t=3,n=2,r=.5,i=1)=>XM(e,K(t),n,r).mul(i),ON=(e=ub(),t=3,n=2,r=.5,i=1)=>QM(e,K(t),n,r).mul(i),kN=(e=ub(),t=3,n=2,r=.5,i=1)=>ZM(e,K(t),n,r).mul(i),AN=(e=ub(),t=3,n=2,r=.5,i=1)=>$M(e,K(t),n,r).mul(i),jN=U(([e,t])=>{let n=e.x,r=e.y,i=e.z,a=t.element(0).mul(.886227);return a=a.add(t.element(1).mul(2*.511664).mul(r)),a=a.add(t.element(2).mul(2*.511664).mul(i)),a=a.add(t.element(3).mul(2*.511664).mul(n)),a=a.add(t.element(4).mul(2*.429043).mul(n).mul(r)),a=a.add(t.element(5).mul(2*.429043).mul(r).mul(i)),a=a.add(t.element(6).mul(i.mul(i).mul(.743125).sub(.247708))),a=a.add(t.element(7).mul(2*.429043).mul(n).mul(i)),a=a.add(t.element(8).mul(.429043).mul(z_(n,n).sub(z_(r,r)))),a}),MN=class extends fj{static get type(){return`PointLightNode`}constructor(e=null){super(e),this.cutoffDistanceNode=Z(0).setGroup(Qg),this.decayExponentNode=Z(0).setGroup(Qg)}update(e){let{light:t}=this;super.update(e),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}setup(e){let{colorNode:t,cutoffDistanceNode:n,decayExponentNode:r,light:i}=this,a=e.context.lightingModel,o=vj(i).sub(Xb),s=o.normalize(),c=pj({lightDistance:o.length(),cutoffDistance:n,decayExponent:r}),l=t.mul(c),u=e.context.reflectedLight;a.direct({lightDirection:s,lightColor:l,reflectedLight:u},e.stack,e)}},NN=class extends fj{static get type(){return`DirectionalLightNode`}constructor(e=null){super(e)}setup(e){super.setup(e);let t=e.context.lightingModel,n=this.colorNode,r=yj(this.light),i=e.context.reflectedLight;t.direct({lightDirection:r,lightColor:n,reflectedLight:i},e.stack,e)}},PN=new N,FN=new N,IN=null,LN=class extends fj{static get type(){return`RectAreaLightNode`}constructor(e=null){super(e),this.halfHeight=Z(new M).setGroup(Qg),this.halfWidth=Z(new M).setGroup(Qg)}update(e){super.update(e);let{light:t}=this,n=e.camera.matrixWorldInverse;FN.identity(),PN.copy(t.matrixWorld),PN.premultiply(n),FN.extractRotation(PN),this.halfWidth.value.set(t.width*.5,0,0),this.halfHeight.value.set(0,t.height*.5,0),this.halfWidth.value.applyMatrix4(FN),this.halfHeight.value.applyMatrix4(FN)}setup(e){super.setup(e);let t,n;e.isAvailable(`float32Filterable`)?(t=gb(IN.LTC_FLOAT_1),n=gb(IN.LTC_FLOAT_2)):(t=gb(IN.LTC_HALF_1),n=gb(IN.LTC_HALF_2));let{colorNode:r,light:i}=this,a=e.context.lightingModel,o=vj(i),s=e.context.reflectedLight;a.directRectArea({lightColor:r,lightPosition:o,halfWidth:this.halfWidth,halfHeight:this.halfHeight,reflectedLight:s,ltc_1:t,ltc_2:n},e.stack,e)}static setLTC(e){IN=e}},RN=class extends fj{static get type(){return`SpotLightNode`}constructor(e=null){super(e),this.coneCosNode=Z(0).setGroup(Qg),this.penumbraCosNode=Z(0).setGroup(Qg),this.cutoffDistanceNode=Z(0).setGroup(Qg),this.decayExponentNode=Z(0).setGroup(Qg)}update(e){super.update(e);let{light:t}=this;this.coneCosNode.value=Math.cos(t.angle),this.penumbraCosNode.value=Math.cos(t.angle*(1-t.penumbra)),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}getSpotAttenuation(e){let{coneCosNode:t,penumbraCosNode:n}=this;return uy(t,n,e)}setup(e){super.setup(e);let t=e.context.lightingModel,{colorNode:n,cutoffDistanceNode:r,decayExponentNode:i,light:a}=this,o=vj(a).sub(Xb),s=o.normalize(),c=s.dot(yj(a)),l=this.getSpotAttenuation(c),u=pj({lightDistance:o.length(),cutoffDistance:r,decayExponent:i}),d=n.mul(l).mul(u),f=e.context.reflectedLight;t.direct({lightDirection:s,lightColor:d,reflectedLight:f},e.stack,e)}},zN=class extends RN{static get type(){return`IESSpotLightNode`}getSpotAttenuation(e){let t=this.light.iesMap,n=null;return n=t&&t.isTexture===!0?gb(t,J(e.acos().mul(1/Math.PI),0),0).r:super.getSpotAttenuation(e),n}},BN=class extends fj{static get type(){return`AmbientLightNode`}constructor(e=null){super(e)}setup({context:e}){e.irradiance.addAssign(this.colorNode)}},VN=class extends fj{static get type(){return`HemisphereLightNode`}constructor(e=null){super(e),this.lightPositionNode=gj(e),this.lightDirectionNode=this.lightPositionNode.normalize(),this.groundColorNode=Z(new P).setGroup(Qg)}update(e){let{light:t}=this;super.update(e),this.lightPositionNode.object3d=t,this.groundColorNode.value.copy(t.groundColor).multiplyScalar(t.intensity)}setup(e){let{colorNode:t,groundColorNode:n,lightDirectionNode:r}=this,i=oy(n,t,ix.dot(r).mul(.5).add(.5));e.context.irradiance.addAssign(i)}},HN=class extends fj{static get type(){return`LightProbeNode`}constructor(e=null){super(e);let t=[];for(let e=0;e<9;e++)t.push(new M);this.lightProbe=Sx(t)}update(e){let{light:t}=this;super.update(e);for(let e=0;e<9;e++)this.lightProbe.array[e].copy(t.sh.coefficients[e]).multiplyScalar(t.intensity)}setup(e){let t=jN(ax,this.lightProbe);e.context.irradiance.addAssign(t)}},UN=class{parseFunction(){console.warn(`Abstract function.`)}},WN=class{constructor(e,t,n=``,r=``){this.type=e,this.inputs=t,this.name=n,this.precision=r}getCode(){console.warn(`Abstract function.`)}};WN.isNodeFunction=!0;var GN=/^\s*(highp|mediump|lowp)?\s*([a-z_0-9]+)\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)/i,KN=/[a-z_0-9]+/gi,qN=`#pragma main`,JN=e=>{e=e.trim();let t=e.indexOf(qN),n=t===-1?e:e.slice(t+12),r=n.match(GN);if(r!==null&&r.length===5){let i=r[4],a=[],o=null;for(;(o=KN.exec(i))!==null;)a.push(o);let s=[],c=0;for(;c - +

-