@bloopjs/toodle 0.0.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +44 -0
- package/dist/Toodle.d.ts +304 -0
- package/dist/Toodle.d.ts.map +1 -0
- package/dist/colors/mod.d.ts +872 -0
- package/dist/colors/mod.d.ts.map +1 -0
- package/dist/coreTypes/Color.d.ts +7 -0
- package/dist/coreTypes/Color.d.ts.map +1 -0
- package/dist/coreTypes/Point.d.ts +8 -0
- package/dist/coreTypes/Point.d.ts.map +1 -0
- package/dist/coreTypes/Size.d.ts +5 -0
- package/dist/coreTypes/Size.d.ts.map +1 -0
- package/dist/coreTypes/Transform.d.ts +16 -0
- package/dist/coreTypes/Transform.d.ts.map +1 -0
- package/dist/coreTypes/Vec2.d.ts +8 -0
- package/dist/coreTypes/Vec2.d.ts.map +1 -0
- package/dist/coreTypes/mod.d.ts +6 -0
- package/dist/coreTypes/mod.d.ts.map +1 -0
- package/dist/docs/snippets/add-remove-children.d.ts +1 -0
- package/dist/docs/snippets/basic-quad.d.ts +1 -0
- package/dist/docs/snippets/filter-linear.d.ts +1 -0
- package/dist/docs/snippets/filter-nearest.d.ts +1 -0
- package/dist/docs/snippets/flipxy.d.ts +1 -0
- package/dist/docs/snippets/hello-text.d.ts +1 -0
- package/dist/docs/snippets/jumbo-textures.d.ts +1 -0
- package/dist/docs/snippets/layer.d.ts +1 -0
- package/dist/docs/snippets/layout-edges.d.ts +1 -0
- package/dist/docs/snippets/layout-screen-and-world-space.d.ts +1 -0
- package/dist/docs/snippets/postprocess.d.ts +1 -0
- package/dist/docs/snippets/quad-size-scale.d.ts +1 -0
- package/dist/docs/snippets/quickstart.d.ts +1 -0
- package/dist/docs/snippets/repeat-texture-loading.d.ts +1 -0
- package/dist/docs/snippets/screen-shaders.d.ts +1 -0
- package/dist/docs/snippets/shader-color-flash.d.ts +1 -0
- package/dist/docs/snippets/shader-default.d.ts +1 -0
- package/dist/docs/snippets/shader-fill.d.ts +1 -0
- package/dist/docs/snippets/shapes-line.d.ts +1 -0
- package/dist/docs/snippets/sprite-region.d.ts +1 -0
- package/dist/docs/snippets/text-alignment.d.ts +1 -0
- package/dist/docs/snippets/text-shrink-to-fit.d.ts +1 -0
- package/dist/docs/snippets/text-word-wrap.d.ts +1 -0
- package/dist/docs/snippets/texture-bundles-prebaked.d.ts +1 -0
- package/dist/docs/snippets/texture-bundles.d.ts +1 -0
- package/dist/docs/snippets/transforms.d.ts +1 -0
- package/dist/docs/snippets/transparent-cropping.d.ts +1 -0
- package/dist/examples/0-hello.d.ts +1 -0
- package/dist/examples/1-hello.d.ts +1 -0
- package/dist/examples/1-hello.d.ts.map +1 -0
- package/dist/examples/1-quad.d.ts +1 -0
- package/dist/examples/10-resize.d.ts +1 -0
- package/dist/examples/10-resize.d.ts.map +1 -0
- package/dist/examples/11-bundle-test.d.ts +1 -0
- package/dist/examples/11-bundle-test.d.ts.map +1 -0
- package/dist/examples/12-transparent-pixel-cropping.d.ts +1 -0
- package/dist/examples/12-transparent-pixel-cropping.d.ts.map +1 -0
- package/dist/examples/13-crop.d.ts +1 -0
- package/dist/examples/13-crop.d.ts.map +1 -0
- package/dist/examples/14-bundle-bench.d.ts +1 -0
- package/dist/examples/14-bundle-bench.d.ts.map +1 -0
- package/dist/examples/15-text-layer.d.ts +1 -0
- package/dist/examples/15-text-layer.d.ts.map +1 -0
- package/dist/examples/16-jumbo-texture.d.ts +1 -0
- package/dist/examples/16-jumbo-textures.d.ts +1 -0
- package/dist/examples/16-screen-shader.d.ts +1 -0
- package/dist/examples/16-screen-shader.d.ts.map +1 -0
- package/dist/examples/17-lighting.d.ts +1 -0
- package/dist/examples/17-lighting.d.ts.map +1 -0
- package/dist/examples/17-translations.d.ts +1 -0
- package/dist/examples/18-blur.d.ts +1 -0
- package/dist/examples/19-postprocess.d.ts +1 -0
- package/dist/examples/19-screenshader.d.ts +1 -0
- package/dist/examples/2-shapes.d.ts +1 -0
- package/dist/examples/2-shapes.d.ts.map +1 -0
- package/dist/examples/3-shader.d.ts +1 -0
- package/dist/examples/3-shader.d.ts.map +1 -0
- package/dist/examples/4-shader-bench.d.ts +1 -0
- package/dist/examples/4-shader-bench.d.ts.map +1 -0
- package/dist/examples/5-z.d.ts +1 -0
- package/dist/examples/5-z.d.ts.map +1 -0
- package/dist/examples/6-atlas.d.ts +1 -0
- package/dist/examples/6-atlas.d.ts.map +1 -0
- package/dist/examples/7-text.d.ts +1 -0
- package/dist/examples/7-text.d.ts.map +1 -0
- package/dist/examples/8-text-bench.d.ts +1 -0
- package/dist/examples/8-text-bench.d.ts.map +1 -0
- package/dist/examples/9-alignment.d.ts +1 -0
- package/dist/examples/9-alignment.d.ts.map +1 -0
- package/dist/examples/main.d.ts +1 -0
- package/dist/examples/main.d.ts.map +1 -0
- package/dist/examples/util.d.ts +82 -0
- package/dist/examples/util.d.ts.map +1 -0
- package/dist/limits.d.ts +23 -0
- package/dist/limits.d.ts.map +1 -0
- package/dist/math/angle.d.ts +13 -0
- package/dist/math/angle.d.ts.map +1 -0
- package/dist/math/matrix.d.ts +26 -0
- package/dist/math/matrix.d.ts.map +1 -0
- package/dist/math/mod.d.ts +3 -0
- package/dist/math/mod.d.ts.map +1 -0
- package/dist/mod.d.ts +17 -0
- package/dist/mod.d.ts.map +1 -0
- package/dist/mod.js +19665 -0
- package/dist/mod.js.map +41 -0
- package/dist/postprocess.d.ts +10 -0
- package/dist/postprocess.d.ts.map +1 -0
- package/dist/scene/Batcher.d.ts +20 -0
- package/dist/scene/Batcher.d.ts.map +1 -0
- package/dist/scene/Camera.d.ts +16 -0
- package/dist/scene/Camera.d.ts.map +1 -0
- package/dist/scene/JumboQuadNode.d.ts +29 -0
- package/dist/scene/JumboQuadNode.d.ts.map +1 -0
- package/dist/scene/QuadNode.d.ts +159 -0
- package/dist/scene/QuadNode.d.ts.map +1 -0
- package/dist/scene/RenderComponent.d.ts +11 -0
- package/dist/scene/RenderComponent.d.ts.map +1 -0
- package/dist/scene/SceneNode.d.ts +300 -0
- package/dist/scene/SceneNode.d.ts.map +1 -0
- package/dist/scene/mod.d.ts +5 -0
- package/dist/scene/mod.d.ts.map +1 -0
- package/dist/screen/mod.d.ts +2 -0
- package/dist/screen/mod.d.ts.map +1 -0
- package/dist/screen/resolution.d.ts +5 -0
- package/dist/screen/resolution.d.ts.map +1 -0
- package/dist/shaders/EngineUniform.d.ts +9 -0
- package/dist/shaders/EngineUniform.d.ts.map +1 -0
- package/dist/shaders/IShader.d.ts +15 -0
- package/dist/shaders/IShader.d.ts.map +1 -0
- package/dist/shaders/QuadShader.d.ts +18 -0
- package/dist/shaders/QuadShader.d.ts.map +1 -0
- package/dist/shaders/ShaderDescriptor.d.ts +7 -0
- package/dist/shaders/ShaderDescriptor.d.ts.map +1 -0
- package/dist/shaders/mod.d.ts +6 -0
- package/dist/shaders/mod.d.ts.map +1 -0
- package/dist/shaders/parser.d.ts +8 -0
- package/dist/shaders/parser.d.ts.map +1 -0
- package/dist/shaders/postprocess/blur.d.ts +3 -0
- package/dist/shaders/postprocess/blur.d.ts.map +1 -0
- package/dist/shaders/postprocess/mod.d.ts +17 -0
- package/dist/shaders/postprocess/mod.d.ts.map +1 -0
- package/dist/shaders/samplers.d.ts +3 -0
- package/dist/shaders/samplers.d.ts.map +1 -0
- package/dist/shaders/wgsl/example.wgsl.d.ts +3 -0
- package/dist/shaders/wgsl/example.wgsl.d.ts.map +1 -0
- package/dist/shaders/wgsl/hello.wgsl.d.ts +3 -0
- package/dist/shaders/wgsl/hello.wgsl.d.ts.map +1 -0
- package/dist/shaders/wgsl/helloInstanced.wgsl.d.ts +3 -0
- package/dist/shaders/wgsl/helloInstanced.wgsl.d.ts.map +1 -0
- package/dist/shaders/wgsl/quad.wgsl.d.ts +3 -0
- package/dist/shaders/wgsl/quad.wgsl.d.ts.map +1 -0
- package/dist/src/Toodle.d.ts +303 -0
- package/dist/src/Toodle.d.ts.map +1 -0
- package/dist/src/colors/mod.d.ts +871 -0
- package/dist/src/coreTypes/Color.d.ts +6 -0
- package/dist/src/coreTypes/Color.d.ts.map +1 -0
- package/dist/src/coreTypes/Point.d.ts +7 -0
- package/dist/src/coreTypes/Point.d.ts.map +1 -0
- package/dist/src/coreTypes/Size.d.ts +4 -0
- package/dist/src/coreTypes/Size.d.ts.map +1 -0
- package/dist/src/coreTypes/Transform.d.ts +15 -0
- package/dist/src/coreTypes/Transform.d.ts.map +1 -0
- package/dist/src/coreTypes/Vec2.d.ts +7 -0
- package/dist/src/coreTypes/Vec2.d.ts.map +1 -0
- package/dist/src/coreTypes/mod.d.ts +5 -0
- package/dist/src/coreTypes/mod.d.ts.map +1 -0
- package/dist/src/limits.d.ts +22 -0
- package/dist/src/limits.d.ts.map +1 -0
- package/dist/src/math/angle.d.ts +12 -0
- package/dist/src/math/angle.d.ts.map +1 -0
- package/dist/src/math/matrix.d.ts +25 -0
- package/dist/src/math/matrix.d.ts.map +1 -0
- package/dist/src/math/mod.d.ts +2 -0
- package/dist/src/math/mod.d.ts.map +1 -0
- package/dist/src/mod.d.ts +16 -0
- package/dist/src/mod.d.ts.map +1 -0
- package/dist/src/postprocess.d.ts +10 -0
- package/dist/src/postprocess.d.ts.map +1 -0
- package/dist/src/scene/Batcher.d.ts +19 -0
- package/dist/src/scene/Batcher.d.ts.map +1 -0
- package/dist/src/scene/Camera.d.ts +15 -0
- package/dist/src/scene/Camera.d.ts.map +1 -0
- package/dist/src/scene/JumboQuadNode.d.ts +28 -0
- package/dist/src/scene/QuadNode.d.ts +158 -0
- package/dist/src/scene/QuadNode.d.ts.map +1 -0
- package/dist/src/scene/RenderComponent.d.ts +10 -0
- package/dist/src/scene/RenderComponent.d.ts.map +1 -0
- package/dist/src/scene/SceneNode.d.ts +299 -0
- package/dist/src/scene/SceneNode.d.ts.map +1 -0
- package/dist/src/scene/mod.d.ts +4 -0
- package/dist/src/scene/mod.d.ts.map +1 -0
- package/dist/src/screen/mod.d.ts +1 -0
- package/dist/src/screen/mod.d.ts.map +1 -0
- package/dist/src/screen/resolution.d.ts +4 -0
- package/dist/src/screen/resolution.d.ts.map +1 -0
- package/dist/src/shaders/EngineUniform.d.ts +8 -0
- package/dist/src/shaders/EngineUniform.d.ts.map +1 -0
- package/dist/src/shaders/IShader.d.ts +14 -0
- package/dist/src/shaders/IShader.d.ts.map +1 -0
- package/dist/src/shaders/QuadShader.d.ts +17 -0
- package/dist/src/shaders/QuadShader.d.ts.map +1 -0
- package/dist/src/shaders/ShaderDescriptor.d.ts +6 -0
- package/dist/src/shaders/ShaderDescriptor.d.ts.map +1 -0
- package/dist/src/shaders/mod.d.ts +5 -0
- package/dist/src/shaders/mod.d.ts.map +1 -0
- package/dist/src/shaders/parser.d.ts +7 -0
- package/dist/src/shaders/parser.d.ts.map +1 -0
- package/dist/src/shaders/postprocess/blur.d.ts +2 -0
- package/dist/src/shaders/postprocess/mod.d.ts +16 -0
- package/dist/src/shaders/postprocess/postprocess.d.ts +8 -0
- package/dist/src/shaders/postprocess/util.d.ts +2 -0
- package/dist/src/shaders/samplers.d.ts +2 -0
- package/dist/src/shaders/samplers.d.ts.map +1 -0
- package/dist/src/shaders/wgsl/example.wgsl.d.ts +2 -0
- package/dist/src/shaders/wgsl/example.wgsl.d.ts.map +1 -0
- package/dist/src/shaders/wgsl/hello.wgsl.d.ts +2 -0
- package/dist/src/shaders/wgsl/hello.wgsl.d.ts.map +1 -0
- package/dist/src/shaders/wgsl/helloInstanced.wgsl.d.ts +2 -0
- package/dist/src/shaders/wgsl/helloInstanced.wgsl.d.ts.map +1 -0
- package/dist/src/shaders/wgsl/quad.wgsl.d.ts +2 -0
- package/dist/src/shaders/wgsl/quad.wgsl.d.ts.map +1 -0
- package/dist/src/text/FontPipeline.d.ts +13 -0
- package/dist/src/text/FontPipeline.d.ts.map +1 -0
- package/dist/src/text/MsdfFont.d.ts +81 -0
- package/dist/src/text/MsdfFont.d.ts.map +1 -0
- package/dist/src/text/TextFormatting.d.ts +18 -0
- package/dist/src/text/TextFormatting.d.ts.map +1 -0
- package/dist/src/text/TextNode.d.ts +18 -0
- package/dist/src/text/TextNode.d.ts.map +1 -0
- package/dist/src/text/TextShader.d.ts +14 -0
- package/dist/src/text/TextShader.d.ts.map +1 -0
- package/dist/src/text/mod.d.ts +3 -0
- package/dist/src/text/mod.d.ts.map +1 -0
- package/dist/src/text/shaping.d.ts +38 -0
- package/dist/src/text/shaping.d.ts.map +1 -0
- package/dist/src/text/text.wgsl.d.ts +2 -0
- package/dist/src/text/text.wgsl.d.ts.map +1 -0
- package/dist/src/textures/AssetManager.d.ts +181 -0
- package/dist/src/textures/AssetManager.d.ts.map +1 -0
- package/dist/src/textures/NewTextureComputeShader.d.ts +28 -0
- package/dist/src/textures/TextureComputeShader.d.ts +20 -0
- package/dist/src/textures/TextureComputeShader.d.ts.map +1 -0
- package/dist/src/textures/crop.wgsl.d.ts +2 -0
- package/dist/src/textures/mod.d.ts +1 -0
- package/dist/src/textures/mod.d.ts.map +1 -0
- package/dist/src/textures/pixel-scraping.wgsl.d.ts +2 -0
- package/dist/src/textures/pixel-scraping.wgsl.d.ts.map +1 -0
- package/dist/src/textures/texture-processing.wgsl.d.ts +2 -0
- package/dist/src/textures/types.d.ts +176 -0
- package/dist/src/textures/types.d.ts.map +1 -0
- package/dist/src/textures/util.d.ts +7 -0
- package/dist/src/textures/util.d.ts.map +1 -0
- package/dist/src/utils/assert.d.ts +1 -0
- package/dist/src/utils/assert.d.ts.map +1 -0
- package/dist/src/utils/boilerplate.d.ts +10 -0
- package/dist/src/utils/boilerplate.d.ts.map +1 -0
- package/dist/src/utils/error.d.ts +7 -0
- package/dist/src/utils/error.d.ts.map +1 -0
- package/dist/src/utils/mod.d.ts +2 -0
- package/dist/src/utils/mod.d.ts.map +1 -0
- package/dist/src/utils/pool.d.ts +22 -0
- package/dist/src/utils/pool.d.ts.map +1 -0
- package/dist/test/math/matrix.test.d.ts +1 -0
- package/dist/test/scene/Batcher.test.d.ts +1 -0
- package/dist/test/scene/SceneNode.test.d.ts +1 -0
- package/dist/test/shader/parser.test.d.ts +1 -0
- package/dist/text/FontPipeline.d.ts +14 -0
- package/dist/text/FontPipeline.d.ts.map +1 -0
- package/dist/text/MsdfFont.d.ts +82 -0
- package/dist/text/MsdfFont.d.ts.map +1 -0
- package/dist/text/TextFormatting.d.ts +19 -0
- package/dist/text/TextFormatting.d.ts.map +1 -0
- package/dist/text/TextNode.d.ts +19 -0
- package/dist/text/TextNode.d.ts.map +1 -0
- package/dist/text/TextShader.d.ts +15 -0
- package/dist/text/TextShader.d.ts.map +1 -0
- package/dist/text/mod.d.ts +4 -0
- package/dist/text/mod.d.ts.map +1 -0
- package/dist/text/shaping.d.ts +39 -0
- package/dist/text/shaping.d.ts.map +1 -0
- package/dist/text/text.wgsl.d.ts +3 -0
- package/dist/text/text.wgsl.d.ts.map +1 -0
- package/dist/textures/AssetManager.d.ts +182 -0
- package/dist/textures/AssetManager.d.ts.map +1 -0
- package/dist/textures/TextureComputeShader.d.ts +21 -0
- package/dist/textures/TextureComputeShader.d.ts.map +1 -0
- package/dist/textures/mod.d.ts +2 -0
- package/dist/textures/mod.d.ts.map +1 -0
- package/dist/textures/pixel-scraping.wgsl.d.ts +3 -0
- package/dist/textures/pixel-scraping.wgsl.d.ts.map +1 -0
- package/dist/textures/types.d.ts +177 -0
- package/dist/textures/types.d.ts.map +1 -0
- package/dist/textures/util.d.ts +8 -0
- package/dist/textures/util.d.ts.map +1 -0
- package/dist/utils/assert.d.ts +2 -0
- package/dist/utils/assert.d.ts.map +1 -0
- package/dist/utils/boilerplate.d.ts +11 -0
- package/dist/utils/boilerplate.d.ts.map +1 -0
- package/dist/utils/error.d.ts +8 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/mod.d.ts +3 -0
- package/dist/utils/mod.d.ts.map +1 -0
- package/dist/utils/pool.d.ts +23 -0
- package/dist/utils/pool.d.ts.map +1 -0
- package/package.json +47 -0
- package/src/Toodle.ts +853 -0
- package/src/colors/mod.ts +151 -0
- package/src/coreTypes/Color.ts +1 -0
- package/src/coreTypes/Point.ts +7 -0
- package/src/coreTypes/Size.ts +4 -0
- package/src/coreTypes/Transform.ts +16 -0
- package/src/coreTypes/Vec2.ts +7 -0
- package/src/coreTypes/mod.ts +5 -0
- package/src/globals.d.ts +4 -0
- package/src/limits.ts +23 -0
- package/src/math/angle.ts +17 -0
- package/src/math/matrix.ts +99 -0
- package/src/math/mod.ts +2 -0
- package/src/mod.ts +22 -0
- package/src/scene/Batcher.ts +61 -0
- package/src/scene/Camera.ts +69 -0
- package/src/scene/JumboQuadNode.ts +219 -0
- package/src/scene/QuadNode.ts +403 -0
- package/src/scene/RenderComponent.ts +12 -0
- package/src/scene/SceneNode.ts +668 -0
- package/src/scene/mod.ts +4 -0
- package/src/screen/mod.ts +1 -0
- package/src/screen/resolution.ts +1 -0
- package/src/shaders/EngineUniform.ts +11 -0
- package/src/shaders/IShader.ts +20 -0
- package/src/shaders/QuadShader.ts +288 -0
- package/src/shaders/ShaderDescriptor.ts +6 -0
- package/src/shaders/mod.ts +5 -0
- package/src/shaders/parser.ts +221 -0
- package/src/shaders/postprocess/blur.ts +245 -0
- package/src/shaders/postprocess/mod.ts +71 -0
- package/src/shaders/samplers.ts +13 -0
- package/src/shaders/wgsl/example.wgsl.ts +24 -0
- package/src/shaders/wgsl/hello.wgsl.ts +62 -0
- package/src/shaders/wgsl/helloInstanced.wgsl.ts +46 -0
- package/src/shaders/wgsl/quad.wgsl.ts +140 -0
- package/src/text/FontPipeline.ts +212 -0
- package/src/text/MsdfFont.ts +190 -0
- package/src/text/TextFormatting.ts +28 -0
- package/src/text/TextNode.ts +82 -0
- package/src/text/TextShader.ts +223 -0
- package/src/text/mod.ts +8 -0
- package/src/text/shaping.ts +280 -0
- package/src/text/text.wgsl.ts +149 -0
- package/src/textures/AssetManager.ts +746 -0
- package/src/textures/TextureComputeShader.ts +434 -0
- package/src/textures/mod.ts +1 -0
- package/src/textures/pixel-scraping.wgsl.ts +131 -0
- package/src/textures/types.ts +182 -0
- package/src/textures/util.ts +352 -0
- package/src/utils/assert.ts +5 -0
- package/src/utils/boilerplate.ts +110 -0
- package/src/utils/error.ts +14 -0
- package/src/utils/mod.ts +2 -0
- package/src/utils/pool.ts +42 -0
package/dist/mod.js.map
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/limits.ts", "../node_modules/wgpu-matrix/dist/3.x/wgpu-matrix.module.js", "../src/math/matrix.ts", "../src/scene/Batcher.ts", "../src/math/angle.ts", "../src/scene/Camera.ts", "../src/utils/assert.ts", "../src/scene/SceneNode.ts", "../src/scene/QuadNode.ts", "../src/scene/JumboQuadNode.ts", "../node_modules/webgpu-utils/dist/1.x/webgpu-utils.module.js", "../node_modules/wgsl_reflect/wgsl_reflect.module.js", "../src/utils/boilerplate.ts", "../src/shaders/parser.ts", "../src/shaders/samplers.ts", "../src/shaders/wgsl/quad.wgsl.ts", "../src/shaders/QuadShader.ts", "../src/utils/error.ts", "../src/text/MsdfFont.ts", "../src/text/shaping.ts", "../src/text/TextNode.ts", "../src/text/text.wgsl.ts", "../src/text/FontPipeline.ts", "../src/text/TextShader.ts", "../src/utils/pool.ts", "../src/textures/pixel-scraping.wgsl.ts", "../src/textures/TextureComputeShader.ts", "../src/textures/util.ts", "../src/textures/AssetManager.ts", "../src/Toodle.ts", "../src/colors/mod.ts", "../src/shaders/postprocess/mod.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export const DEFAULT_LIMITS = {\n /** Maximum number of rendered instances in the scene per frame */\n instanceCount: 1024 * 2,\n /** Maximum number of unique z-indexes in the scene */\n zIndex: 32,\n /** Maximum number of vfx shaders */\n shaderCount: 32,\n /** Maximum dimensions of a single texture */\n textureSize: 1024 * 4,\n /** Maximum number of layers in a texture array */\n textureArrayLayers: 64,\n /** Maximum size of uniforms buffer */\n uniformBufferSize: 1024 * 64,\n /** Maximum number of instance buffer fields - 16 minus the vertex locations used by the engine */\n instanceBufferFields: 16 - 6,\n /** Maximum size of instance buffer */\n instanceBufferSize: Float32Array.BYTES_PER_ELEMENT * 4 * (16 - 6),\n /** Maximum length of a single piece of text */\n maxTextLength: 256,\n};\n\nexport type Limits = typeof DEFAULT_LIMITS;\nexport type LimitsOptions = Partial<Limits>;\n",
|
|
6
|
+
"/* wgpu-matrix@3.4.0, license MIT */\nfunction wrapConstructor(OriginalConstructor, modifier) {\n return class extends OriginalConstructor {\n constructor(...args) {\n super(...args);\n modifier(this);\n }\n }; // Type assertion is necessary here\n}\nconst ZeroArray = wrapConstructor((Array), a => a.fill(0));\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nlet EPSILON = 0.000001;\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nfunction setEpsilon(v) {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n}\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nfunction lerp(a, b, t) {\n return a + (b - a) * t;\n}\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nfunction inverseLerp(a, b, v) {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nfunction euclideanModulo(n, m) {\n return ((n % m) + m) % m;\n}\n\nvar utils = {\n __proto__: null,\n get EPSILON () { return EPSILON; },\n degToRad: degToRad,\n euclideanModulo: euclideanModulo,\n inverseLerp: inverseLerp,\n lerp: lerp,\n radToDeg: radToDeg,\n setEpsilon: setEpsilon\n};\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Generates am typed API for Vec3\n */\nfunction getAPIImpl$5(Ctor) {\n /**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\n function create(x = 0, y = 0) {\n const newDst = new Ctor(2);\n if (x !== undefined) {\n newDst[0] = x;\n if (y !== undefined) {\n newDst[1] = y;\n }\n }\n return newDst;\n }\n /**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\n const fromValues = create;\n /**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\n function set(x, y, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = x;\n newDst[1] = y;\n return newDst;\n }\n /**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\n function ceil(v, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = Math.ceil(v[0]);\n newDst[1] = Math.ceil(v[1]);\n return newDst;\n }\n /**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\n function floor(v, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = Math.floor(v[0]);\n newDst[1] = Math.floor(v[1]);\n return newDst;\n }\n /**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\n function round(v, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = Math.round(v[0]);\n newDst[1] = Math.round(v[1]);\n return newDst;\n }\n /**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\n function clamp(v, min = 0, max = 1, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = Math.min(max, Math.max(min, v[0]));\n newDst[1] = Math.min(max, Math.max(min, v[1]));\n return newDst;\n }\n /**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\n function add(a, b, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = a[0] + b[0];\n newDst[1] = a[1] + b[1];\n return newDst;\n }\n /**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\n function addScaled(a, b, scale, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = a[0] + b[0] * scale;\n newDst[1] = a[1] + b[1] * scale;\n return newDst;\n }\n /**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\n function angle(a, b) {\n const ax = a[0];\n const ay = a[1];\n const bx = b[0];\n const by = b[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(cosine);\n }\n /**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\n function subtract(a, b, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = a[0] - b[0];\n newDst[1] = a[1] - b[1];\n return newDst;\n }\n /**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\n const sub = subtract;\n /**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\n function equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON;\n }\n /**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\n function equals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n }\n /**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\n function lerp(a, b, t, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = a[0] + t * (b[0] - a[0]);\n newDst[1] = a[1] + t * (b[1] - a[1]);\n return newDst;\n }\n /**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\n function lerpV(a, b, t, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = a[0] + t[0] * (b[0] - a[0]);\n newDst[1] = a[1] + t[1] * (b[1] - a[1]);\n return newDst;\n }\n /**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\n function max(a, b, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = Math.max(a[0], b[0]);\n newDst[1] = Math.max(a[1], b[1]);\n return newDst;\n }\n /**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\n function min(a, b, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = Math.min(a[0], b[0]);\n newDst[1] = Math.min(a[1], b[1]);\n return newDst;\n }\n /**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\n function mulScalar(v, k, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = v[0] * k;\n newDst[1] = v[1] * k;\n return newDst;\n }\n /**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\n const scale = mulScalar;\n /**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\n function divScalar(v, k, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = v[0] / k;\n newDst[1] = v[1] / k;\n return newDst;\n }\n /**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\n function inverse(v, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = 1 / v[0];\n newDst[1] = 1 / v[1];\n return newDst;\n }\n /**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\n const invert = inverse;\n /**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\n function cross(a, b, dst) {\n const newDst = (dst ?? new Ctor(3));\n const z = a[0] * b[1] - a[1] * b[0];\n newDst[0] = 0;\n newDst[1] = 0;\n newDst[2] = z;\n return newDst;\n }\n /**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\n function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n }\n /**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\n function length(v) {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n }\n /**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\n const len = length;\n /**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\n function lengthSq(v) {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n }\n /**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\n const lenSq = lengthSq;\n /**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\n function distance(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n /**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\n const dist = distance;\n /**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\n function distanceSq(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n }\n /**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\n const distSq = distanceSq;\n /**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\n function normalize(v, dst) {\n const newDst = (dst ?? new Ctor(2));\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n if (len > 0.00001) {\n newDst[0] = v0 / len;\n newDst[1] = v1 / len;\n }\n else {\n newDst[0] = 0;\n newDst[1] = 0;\n }\n return newDst;\n }\n /**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\n function negate(v, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = -v[0];\n newDst[1] = -v[1];\n return newDst;\n }\n /**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\n function copy(v, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = v[0];\n newDst[1] = v[1];\n return newDst;\n }\n /**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\n const clone = copy;\n /**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\n function multiply(a, b, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = a[0] * b[0];\n newDst[1] = a[1] * b[1];\n return newDst;\n }\n /**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\n const mul = multiply;\n /**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\n function divide(a, b, dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = a[0] / b[0];\n newDst[1] = a[1] / b[1];\n return newDst;\n }\n /**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\n const div = divide;\n /**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\n function random(scale = 1, dst) {\n const newDst = (dst ?? new Ctor(2));\n const angle = Math.random() * 2 * Math.PI;\n newDst[0] = Math.cos(angle) * scale;\n newDst[1] = Math.sin(angle) * scale;\n return newDst;\n }\n /**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\n function zero(dst) {\n const newDst = (dst ?? new Ctor(2));\n newDst[0] = 0;\n newDst[1] = 0;\n return newDst;\n }\n /**\n * Transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\n function transformMat4(v, m, dst) {\n const newDst = (dst ?? new Ctor(2));\n const x = v[0];\n const y = v[1];\n newDst[0] = x * m[0] + y * m[4] + m[12];\n newDst[1] = x * m[1] + y * m[5] + m[13];\n return newDst;\n }\n /**\n * Transform Vec2 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\n function transformMat3(v, m, dst) {\n const newDst = (dst ?? new Ctor(2));\n const x = v[0];\n const y = v[1];\n newDst[0] = m[0] * x + m[4] * y + m[8];\n newDst[1] = m[1] * x + m[5] * y + m[9];\n return newDst;\n }\n /**\n * Rotate a 2D vector\n *\n * @param a The vec2 point to rotate\n * @param b The origin of the rotation\n * @param rad The angle of rotation in radians\n * @returns the rotated vector\n */\n function rotate(a, b, rad, dst) {\n const newDst = (dst ?? new Ctor(2));\n // Translate point to the origin\n const p0 = a[0] - b[0];\n const p1 = a[1] - b[1];\n const sinC = Math.sin(rad);\n const cosC = Math.cos(rad);\n //perform rotation and translate to correct position\n newDst[0] = p0 * cosC - p1 * sinC + b[0];\n newDst[1] = p0 * sinC + p1 * cosC + b[1];\n return newDst;\n }\n /**\n * Treat a 2D vector as a direction and set it's length\n *\n * @param a The vec2 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\n function setLength(a, len, dst) {\n const newDst = (dst ?? new Ctor(2));\n normalize(a, newDst);\n return mulScalar(newDst, len, newDst);\n }\n /**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec2 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\n function truncate(a, maxLen, dst) {\n const newDst = (dst ?? new Ctor(2));\n if (length(a) > maxLen) {\n return setLength(a, maxLen, newDst);\n }\n return copy(a, newDst);\n }\n /**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\n function midpoint(a, b, dst) {\n const newDst = (dst ?? new Ctor(2));\n return lerp(a, b, 0.5, newDst);\n }\n return {\n create,\n fromValues,\n set,\n ceil,\n floor,\n round,\n clamp,\n add,\n addScaled,\n angle,\n subtract,\n sub,\n equalsApproximately,\n equals,\n lerp,\n lerpV,\n max,\n min,\n mulScalar,\n scale,\n divScalar,\n inverse,\n invert,\n cross,\n dot,\n length,\n len,\n lengthSq,\n lenSq,\n distance,\n dist,\n distanceSq,\n distSq,\n normalize,\n negate,\n copy,\n clone,\n multiply,\n mul,\n divide,\n div,\n random,\n zero,\n transformMat4,\n transformMat3,\n rotate,\n setLength,\n truncate,\n midpoint,\n };\n}\nconst cache$5 = new Map();\nfunction getAPI$5(Ctor) {\n let api = cache$5.get(Ctor);\n if (!api) {\n api = getAPIImpl$5(Ctor);\n cache$5.set(Ctor, api);\n }\n return api;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Generates am typed API for Vec3\n * */\nfunction getAPIImpl$4(Ctor) {\n /**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\n function create(x, y, z) {\n const newDst = new Ctor(3);\n if (x !== undefined) {\n newDst[0] = x;\n if (y !== undefined) {\n newDst[1] = y;\n if (z !== undefined) {\n newDst[2] = z;\n }\n }\n }\n return newDst;\n }\n /**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\n const fromValues = create;\n /**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\n function set(x, y, z, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = x;\n newDst[1] = y;\n newDst[2] = z;\n return newDst;\n }\n /**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\n function ceil(v, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = Math.ceil(v[0]);\n newDst[1] = Math.ceil(v[1]);\n newDst[2] = Math.ceil(v[2]);\n return newDst;\n }\n /**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\n function floor(v, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = Math.floor(v[0]);\n newDst[1] = Math.floor(v[1]);\n newDst[2] = Math.floor(v[2]);\n return newDst;\n }\n /**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\n function round(v, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = Math.round(v[0]);\n newDst[1] = Math.round(v[1]);\n newDst[2] = Math.round(v[2]);\n return newDst;\n }\n /**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\n function clamp(v, min = 0, max = 1, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = Math.min(max, Math.max(min, v[0]));\n newDst[1] = Math.min(max, Math.max(min, v[1]));\n newDst[2] = Math.min(max, Math.max(min, v[2]));\n return newDst;\n }\n /**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\n function add(a, b, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = a[0] + b[0];\n newDst[1] = a[1] + b[1];\n newDst[2] = a[2] + b[2];\n return newDst;\n }\n /**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\n function addScaled(a, b, scale, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = a[0] + b[0] * scale;\n newDst[1] = a[1] + b[1] * scale;\n newDst[2] = a[2] + b[2] * scale;\n return newDst;\n }\n /**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\n function angle(a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(cosine);\n }\n /**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\n function subtract(a, b, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = a[0] - b[0];\n newDst[1] = a[1] - b[1];\n newDst[2] = a[2] - b[2];\n return newDst;\n }\n /**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\n const sub = subtract;\n /**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\n function equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON;\n }\n /**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\n function equals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n }\n /**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\n function lerp(a, b, t, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = a[0] + t * (b[0] - a[0]);\n newDst[1] = a[1] + t * (b[1] - a[1]);\n newDst[2] = a[2] + t * (b[2] - a[2]);\n return newDst;\n }\n /**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\n function lerpV(a, b, t, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = a[0] + t[0] * (b[0] - a[0]);\n newDst[1] = a[1] + t[1] * (b[1] - a[1]);\n newDst[2] = a[2] + t[2] * (b[2] - a[2]);\n return newDst;\n }\n /**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\n function max(a, b, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = Math.max(a[0], b[0]);\n newDst[1] = Math.max(a[1], b[1]);\n newDst[2] = Math.max(a[2], b[2]);\n return newDst;\n }\n /**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\n function min(a, b, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = Math.min(a[0], b[0]);\n newDst[1] = Math.min(a[1], b[1]);\n newDst[2] = Math.min(a[2], b[2]);\n return newDst;\n }\n /**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\n function mulScalar(v, k, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = v[0] * k;\n newDst[1] = v[1] * k;\n newDst[2] = v[2] * k;\n return newDst;\n }\n /**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\n const scale = mulScalar;\n /**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\n function divScalar(v, k, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = v[0] / k;\n newDst[1] = v[1] / k;\n newDst[2] = v[2] / k;\n return newDst;\n }\n /**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\n function inverse(v, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = 1 / v[0];\n newDst[1] = 1 / v[1];\n newDst[2] = 1 / v[2];\n return newDst;\n }\n /**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\n const invert = inverse;\n /**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\n function cross(a, b, dst) {\n const newDst = (dst ?? new Ctor(3));\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n newDst[0] = a[1] * b[2] - a[2] * b[1];\n newDst[1] = t1;\n newDst[2] = t2;\n return newDst;\n }\n /**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\n function dot(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n }\n /**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\n function length(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n }\n /**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\n const len = length;\n /**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\n function lengthSq(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n }\n /**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\n const lenSq = lengthSq;\n /**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\n function distance(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n }\n /**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\n const dist = distance;\n /**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\n function distanceSq(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n }\n /**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\n const distSq = distanceSq;\n /**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\n function normalize(v, dst) {\n const newDst = (dst ?? new Ctor(3));\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n if (len > 0.00001) {\n newDst[0] = v0 / len;\n newDst[1] = v1 / len;\n newDst[2] = v2 / len;\n }\n else {\n newDst[0] = 0;\n newDst[1] = 0;\n newDst[2] = 0;\n }\n return newDst;\n }\n /**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\n function negate(v, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = -v[0];\n newDst[1] = -v[1];\n newDst[2] = -v[2];\n return newDst;\n }\n /**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\n function copy(v, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = v[0];\n newDst[1] = v[1];\n newDst[2] = v[2];\n return newDst;\n }\n /**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\n const clone = copy;\n /**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\n function multiply(a, b, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = a[0] * b[0];\n newDst[1] = a[1] * b[1];\n newDst[2] = a[2] * b[2];\n return newDst;\n }\n /**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\n const mul = multiply;\n /**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\n function divide(a, b, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = a[0] / b[0];\n newDst[1] = a[1] / b[1];\n newDst[2] = a[2] / b[2];\n return newDst;\n }\n /**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\n const div = divide;\n /**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\n function random(scale = 1, dst) {\n const newDst = (dst ?? new Ctor(3));\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n newDst[0] = Math.cos(angle) * zScale;\n newDst[1] = Math.sin(angle) * zScale;\n newDst[2] = z * scale;\n return newDst;\n }\n /**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\n function zero(dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = 0;\n newDst[1] = 0;\n newDst[2] = 0;\n return newDst;\n }\n /**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\n function transformMat4(v, m, dst) {\n const newDst = (dst ?? new Ctor(3));\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n newDst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n newDst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n newDst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return newDst;\n }\n /**\n * Transform vec3 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\n function transformMat4Upper3x3(v, m, dst) {\n const newDst = (dst ?? new Ctor(3));\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n newDst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n newDst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n newDst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n return newDst;\n }\n /**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\n function transformMat3(v, m, dst) {\n const newDst = (dst ?? new Ctor(3));\n const x = v[0];\n const y = v[1];\n const z = v[2];\n newDst[0] = x * m[0] + y * m[4] + z * m[8];\n newDst[1] = x * m[1] + y * m[5] + z * m[9];\n newDst[2] = x * m[2] + y * m[6] + z * m[10];\n return newDst;\n }\n /**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\n function transformQuat(v, q, dst) {\n const newDst = (dst ?? new Ctor(3));\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n newDst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n newDst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n newDst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n return newDst;\n }\n /**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\n function getTranslation(m, dst) {\n const newDst = (dst ?? new Ctor(3));\n newDst[0] = m[12];\n newDst[1] = m[13];\n newDst[2] = m[14];\n return newDst;\n }\n /**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\n function getAxis(m, axis, dst) {\n const newDst = (dst ?? new Ctor(3));\n const off = axis * 4;\n newDst[0] = m[off + 0];\n newDst[1] = m[off + 1];\n newDst[2] = m[off + 2];\n return newDst;\n }\n /**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\n function getScaling(m, dst) {\n const newDst = (dst ?? new Ctor(3));\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n newDst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n newDst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n newDst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return newDst;\n }\n /**\n * Rotate a 3D vector around the x-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\n function rotateX(a, b, rad, dst) {\n const newDst = (dst ?? new Ctor(3));\n const p = [];\n const r = [];\n //Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n //perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n //translate to correct position\n newDst[0] = r[0] + b[0];\n newDst[1] = r[1] + b[1];\n newDst[2] = r[2] + b[2];\n return newDst;\n }\n /**\n * Rotate a 3D vector around the y-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns the rotated vector\n */\n function rotateY(a, b, rad, dst) {\n const newDst = (dst ?? new Ctor(3));\n const p = [];\n const r = [];\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n // perform rotation\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n // translate to correct position\n newDst[0] = r[0] + b[0];\n newDst[1] = r[1] + b[1];\n newDst[2] = r[2] + b[2];\n return newDst;\n }\n /**\n * Rotate a 3D vector around the z-axis\n *\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @param dst - The vector to set. If not passed a new one is created.\n * @returns {vec3} out\n */\n function rotateZ(a, b, rad, dst) {\n const newDst = (dst ?? new Ctor(3));\n const p = [];\n const r = [];\n // translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n // perform rotation\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2];\n // translate to correct position\n newDst[0] = r[0] + b[0];\n newDst[1] = r[1] + b[1];\n newDst[2] = r[2] + b[2];\n return newDst;\n }\n /**\n * Treat a 3D vector as a direction and set it's length\n *\n * @param a The vec3 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\n function setLength(a, len, dst) {\n const newDst = (dst ?? new Ctor(3));\n normalize(a, newDst);\n return mulScalar(newDst, len, newDst);\n }\n /**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec3 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\n function truncate(a, maxLen, dst) {\n const newDst = (dst ?? new Ctor(3));\n if (length(a) > maxLen) {\n return setLength(a, maxLen, newDst);\n }\n return copy(a, newDst);\n }\n /**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\n function midpoint(a, b, dst) {\n const newDst = (dst ?? new Ctor(3));\n return lerp(a, b, 0.5, newDst);\n }\n return {\n create,\n fromValues,\n set,\n ceil,\n floor,\n round,\n clamp,\n add,\n addScaled,\n angle,\n subtract,\n sub,\n equalsApproximately,\n equals,\n lerp,\n lerpV,\n max,\n min,\n mulScalar,\n scale,\n divScalar,\n inverse,\n invert,\n cross,\n dot,\n length,\n len,\n lengthSq,\n lenSq,\n distance,\n dist,\n distanceSq,\n distSq,\n normalize,\n negate,\n copy,\n clone,\n multiply,\n mul,\n divide,\n div,\n random,\n zero,\n transformMat4,\n transformMat4Upper3x3,\n transformMat3,\n transformQuat,\n getTranslation,\n getAxis,\n getScaling,\n rotateX,\n rotateY,\n rotateZ,\n setLength,\n truncate,\n midpoint,\n };\n}\nconst cache$4 = new Map();\nfunction getAPI$4(Ctor) {\n let api = cache$4.get(Ctor);\n if (!api) {\n api = getAPIImpl$4(Ctor);\n cache$4.set(Ctor, api);\n }\n return api;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Generates a typed API for Mat3\n * */\nfunction getAPIImpl$3(Ctor) {\n const vec2 = getAPI$5(Ctor);\n const vec3 = getAPI$4(Ctor);\n /**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\n function create(v0, v1, v2, v3, v4, v5, v6, v7, v8) {\n const newDst = new Ctor(12);\n // to make the array homogenous\n newDst[3] = 0;\n newDst[7] = 0;\n newDst[11] = 0;\n if (v0 !== undefined) {\n newDst[0] = v0;\n if (v1 !== undefined) {\n newDst[1] = v1;\n if (v2 !== undefined) {\n newDst[2] = v2;\n if (v3 !== undefined) {\n newDst[4] = v3;\n if (v4 !== undefined) {\n newDst[5] = v4;\n if (v5 !== undefined) {\n newDst[6] = v5;\n if (v6 !== undefined) {\n newDst[8] = v6;\n if (v7 !== undefined) {\n newDst[9] = v7;\n if (v8 !== undefined) {\n newDst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return newDst;\n }\n /**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\n function set(v0, v1, v2, v3, v4, v5, v6, v7, v8, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = v0;\n newDst[1] = v1;\n newDst[2] = v2;\n newDst[3] = 0;\n newDst[4] = v3;\n newDst[5] = v4;\n newDst[6] = v5;\n newDst[7] = 0;\n newDst[8] = v6;\n newDst[9] = v7;\n newDst[10] = v8;\n newDst[11] = 0;\n return newDst;\n }\n /**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\n function fromMat4(m4, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = m4[0];\n newDst[1] = m4[1];\n newDst[2] = m4[2];\n newDst[3] = 0;\n newDst[4] = m4[4];\n newDst[5] = m4[5];\n newDst[6] = m4[6];\n newDst[7] = 0;\n newDst[8] = m4[8];\n newDst[9] = m4[9];\n newDst[10] = m4[10];\n newDst[11] = 0;\n return newDst;\n }\n /**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\n function fromQuat(q, dst) {\n const newDst = (dst ?? new Ctor(12));\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n newDst[0] = 1 - yy - zz;\n newDst[1] = yx + wz;\n newDst[2] = zx - wy;\n newDst[3] = 0;\n newDst[4] = yx - wz;\n newDst[5] = 1 - xx - zz;\n newDst[6] = zy + wx;\n newDst[7] = 0;\n newDst[8] = zx + wy;\n newDst[9] = zy - wx;\n newDst[10] = 1 - xx - yy;\n newDst[11] = 0;\n return newDst;\n }\n /**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\n function negate(m, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = -m[0];\n newDst[1] = -m[1];\n newDst[2] = -m[2];\n newDst[4] = -m[4];\n newDst[5] = -m[5];\n newDst[6] = -m[6];\n newDst[8] = -m[8];\n newDst[9] = -m[9];\n newDst[10] = -m[10];\n return newDst;\n }\n /**\n * multiply a matrix by a scalar matrix.\n * @param m - The matrix.\n * @param s - the scalar\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns m * s.\n */\n function multiplyScalar(m, s, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = m[0] * s;\n newDst[1] = m[1] * s;\n newDst[2] = m[2] * s;\n newDst[4] = m[4] * s;\n newDst[5] = m[5] * s;\n newDst[6] = m[6] * s;\n newDst[8] = m[8] * s;\n newDst[9] = m[9] * s;\n newDst[10] = m[10] * s;\n return newDst;\n }\n /**\n * multiply a matrix by a scalar matrix.\n * @param m - The matrix.\n * @param s - the scalar\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns m * s.\n */\n const mulScalar = multiplyScalar;\n /**\n * add 2 matrices.\n * @param a - matrix 1.\n * @param b - matrix 2.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns a + b.\n */\n function add(a, b, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = a[0] + b[0];\n newDst[1] = a[1] + b[1];\n newDst[2] = a[2] + b[2];\n newDst[4] = a[4] + b[4];\n newDst[5] = a[5] + b[5];\n newDst[6] = a[6] + b[6];\n newDst[8] = a[8] + b[8];\n newDst[9] = a[9] + b[9];\n newDst[10] = a[10] + b[10];\n return newDst;\n }\n /**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\n function copy(m, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = m[0];\n newDst[1] = m[1];\n newDst[2] = m[2];\n newDst[4] = m[4];\n newDst[5] = m[5];\n newDst[6] = m[6];\n newDst[8] = m[8];\n newDst[9] = m[9];\n newDst[10] = m[10];\n return newDst;\n }\n /**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\n const clone = copy;\n /**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\n function equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON;\n }\n /**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\n function equals(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10];\n }\n /**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\n function identity(dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = 1;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[4] = 0;\n newDst[5] = 1;\n newDst[6] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = 1;\n return newDst;\n }\n /**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\n function transpose(m, dst) {\n const newDst = (dst ?? new Ctor(12));\n if (newDst === m) {\n let t;\n // 0 1 2\n // 4 5 6\n // 8 9 10\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n return newDst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n newDst[0] = m00;\n newDst[1] = m10;\n newDst[2] = m20;\n newDst[4] = m01;\n newDst[5] = m11;\n newDst[6] = m21;\n newDst[8] = m02;\n newDst[9] = m12;\n newDst[10] = m22;\n return newDst;\n }\n /**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\n function inverse(m, dst) {\n const newDst = (dst ?? new Ctor(12));\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n newDst[0] = b01 * invDet;\n newDst[1] = (-m22 * m01 + m02 * m21) * invDet;\n newDst[2] = (m12 * m01 - m02 * m11) * invDet;\n newDst[4] = b11 * invDet;\n newDst[5] = (m22 * m00 - m02 * m20) * invDet;\n newDst[6] = (-m12 * m00 + m02 * m10) * invDet;\n newDst[8] = b21 * invDet;\n newDst[9] = (-m21 * m00 + m01 * m20) * invDet;\n newDst[10] = (m11 * m00 - m01 * m10) * invDet;\n return newDst;\n }\n /**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\n function determinant(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n }\n /**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\n const invert = inverse;\n /**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\n function multiply(a, b, dst) {\n const newDst = (dst ?? new Ctor(12));\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n newDst[0] = a00 * b00 + a10 * b01 + a20 * b02;\n newDst[1] = a01 * b00 + a11 * b01 + a21 * b02;\n newDst[2] = a02 * b00 + a12 * b01 + a22 * b02;\n newDst[4] = a00 * b10 + a10 * b11 + a20 * b12;\n newDst[5] = a01 * b10 + a11 * b11 + a21 * b12;\n newDst[6] = a02 * b10 + a12 * b11 + a22 * b12;\n newDst[8] = a00 * b20 + a10 * b21 + a20 * b22;\n newDst[9] = a01 * b20 + a11 * b21 + a21 * b22;\n newDst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n return newDst;\n }\n /**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\n const mul = multiply;\n /**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\n function setTranslation(a, v, dst) {\n const newDst = (dst ?? identity());\n if (a !== newDst) {\n newDst[0] = a[0];\n newDst[1] = a[1];\n newDst[2] = a[2];\n newDst[4] = a[4];\n newDst[5] = a[5];\n newDst[6] = a[6];\n }\n newDst[8] = v[0];\n newDst[9] = v[1];\n newDst[10] = 1;\n return newDst;\n }\n /**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\n function getTranslation(m, dst) {\n const newDst = (dst ?? vec2.create());\n newDst[0] = m[8];\n newDst[1] = m[9];\n return newDst;\n }\n /**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\n function getAxis(m, axis, dst) {\n const newDst = (dst ?? vec2.create());\n const off = axis * 4;\n newDst[0] = m[off + 0];\n newDst[1] = m[off + 1];\n return newDst;\n }\n /**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\n function setAxis(m, v, axis, dst) {\n const newDst = (dst === m ? m : copy(m, dst));\n const off = axis * 4;\n newDst[off + 0] = v[0];\n newDst[off + 1] = v[1];\n return newDst;\n }\n /**\n * Returns the \"2d\" scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\n function getScaling(m, dst) {\n const newDst = (dst ?? vec2.create());\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n newDst[0] = Math.sqrt(xx * xx + xy * xy);\n newDst[1] = Math.sqrt(yx * yx + yy * yy);\n return newDst;\n }\n /**\n * Returns the \"3d\" scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\n function get3DScaling(m, dst) {\n const newDst = (dst ?? vec3.create());\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n newDst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n newDst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n newDst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return newDst;\n }\n /**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\n function translation(v, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = 1;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[4] = 0;\n newDst[5] = 1;\n newDst[6] = 0;\n newDst[8] = v[0];\n newDst[9] = v[1];\n newDst[10] = 1;\n return newDst;\n }\n /**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\n function translate(m, v, dst) {\n const newDst = (dst ?? new Ctor(12));\n const v0 = v[0];\n const v1 = v[1];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n if (m !== newDst) {\n newDst[0] = m00;\n newDst[1] = m01;\n newDst[2] = m02;\n newDst[4] = m10;\n newDst[5] = m11;\n newDst[6] = m12;\n }\n newDst[8] = m00 * v0 + m10 * v1 + m20;\n newDst[9] = m01 * v0 + m11 * v1 + m21;\n newDst[10] = m02 * v0 + m12 * v1 + m22;\n return newDst;\n }\n /**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\n function rotation(angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(12));\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[0] = c;\n newDst[1] = s;\n newDst[2] = 0;\n newDst[4] = -s;\n newDst[5] = c;\n newDst[6] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = 1;\n return newDst;\n }\n /**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\n function rotate(m, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(12));\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[0] = c * m00 + s * m10;\n newDst[1] = c * m01 + s * m11;\n newDst[2] = c * m02 + s * m12;\n newDst[4] = c * m10 - s * m00;\n newDst[5] = c * m11 - s * m01;\n newDst[6] = c * m12 - s * m02;\n if (m !== newDst) {\n newDst[8] = m[8];\n newDst[9] = m[9];\n newDst[10] = m[10];\n }\n return newDst;\n }\n /**\n * Creates a 3-by-3 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\n function rotationX(angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(12));\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[0] = 1;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[4] = 0;\n newDst[5] = c;\n newDst[6] = s;\n newDst[8] = 0;\n newDst[9] = -s;\n newDst[10] = c;\n return newDst;\n }\n /**\n * Rotates the given 3-by-3 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\n function rotateX(m, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(12));\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[4] = c * m10 + s * m20;\n newDst[5] = c * m11 + s * m21;\n newDst[6] = c * m12 + s * m22;\n newDst[8] = c * m20 - s * m10;\n newDst[9] = c * m21 - s * m11;\n newDst[10] = c * m22 - s * m12;\n if (m !== newDst) {\n newDst[0] = m[0];\n newDst[1] = m[1];\n newDst[2] = m[2];\n }\n return newDst;\n }\n /**\n * Creates a 3-by-3 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\n function rotationY(angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(12));\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[0] = c;\n newDst[1] = 0;\n newDst[2] = -s;\n newDst[4] = 0;\n newDst[5] = 1;\n newDst[6] = 0;\n newDst[8] = s;\n newDst[9] = 0;\n newDst[10] = c;\n return newDst;\n }\n /**\n * Rotates the given 3-by-3 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\n function rotateY(m, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(12));\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[0] = c * m00 - s * m20;\n newDst[1] = c * m01 - s * m21;\n newDst[2] = c * m02 - s * m22;\n newDst[8] = c * m20 + s * m00;\n newDst[9] = c * m21 + s * m01;\n newDst[10] = c * m22 + s * m02;\n if (m !== newDst) {\n newDst[4] = m[4];\n newDst[5] = m[5];\n newDst[6] = m[6];\n }\n return newDst;\n }\n /**\n * Creates a 3-by-3 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\n const rotationZ = rotation;\n /**\n * Rotates the given 3-by-3 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\n const rotateZ = rotate;\n /**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has two\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\n function scaling(v, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = v[0];\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[4] = 0;\n newDst[5] = v[1];\n newDst[6] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = 1;\n return newDst;\n }\n /**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * two entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\n function scale(m, v, dst) {\n const newDst = (dst ?? new Ctor(12));\n const v0 = v[0];\n const v1 = v[1];\n newDst[0] = v0 * m[0 * 4 + 0];\n newDst[1] = v0 * m[0 * 4 + 1];\n newDst[2] = v0 * m[0 * 4 + 2];\n newDst[4] = v1 * m[1 * 4 + 0];\n newDst[5] = v1 * m[1 * 4 + 1];\n newDst[6] = v1 * m[1 * 4 + 2];\n if (m !== newDst) {\n newDst[8] = m[8];\n newDst[9] = m[9];\n newDst[10] = m[10];\n }\n return newDst;\n }\n /**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 3 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\n function scaling3D(v, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = v[0];\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[4] = 0;\n newDst[5] = v[1];\n newDst[6] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = v[2];\n return newDst;\n }\n /**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 3 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\n function scale3D(m, v, dst) {\n const newDst = (dst ?? new Ctor(12));\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n newDst[0] = v0 * m[0 * 4 + 0];\n newDst[1] = v0 * m[0 * 4 + 1];\n newDst[2] = v0 * m[0 * 4 + 2];\n newDst[4] = v1 * m[1 * 4 + 0];\n newDst[5] = v1 * m[1 * 4 + 1];\n newDst[6] = v1 * m[1 * 4 + 2];\n newDst[8] = v2 * m[2 * 4 + 0];\n newDst[9] = v2 * m[2 * 4 + 1];\n newDst[10] = v2 * m[2 * 4 + 2];\n return newDst;\n }\n /**\n * Creates a 3-by-3 matrix which scales uniformly in the X and Y dimensions\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\n function uniformScaling(s, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = s;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[4] = 0;\n newDst[5] = s;\n newDst[6] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = 1;\n return newDst;\n }\n /**\n * Scales the given 3-by-3 matrix in the X and Y dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\n function uniformScale(m, s, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = s * m[0 * 4 + 0];\n newDst[1] = s * m[0 * 4 + 1];\n newDst[2] = s * m[0 * 4 + 2];\n newDst[4] = s * m[1 * 4 + 0];\n newDst[5] = s * m[1 * 4 + 1];\n newDst[6] = s * m[1 * 4 + 2];\n if (m !== newDst) {\n newDst[8] = m[8];\n newDst[9] = m[9];\n newDst[10] = m[10];\n }\n return newDst;\n }\n /**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\n function uniformScaling3D(s, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = s;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[4] = 0;\n newDst[5] = s;\n newDst[6] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = s;\n return newDst;\n }\n /**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\n function uniformScale3D(m, s, dst) {\n const newDst = (dst ?? new Ctor(12));\n newDst[0] = s * m[0 * 4 + 0];\n newDst[1] = s * m[0 * 4 + 1];\n newDst[2] = s * m[0 * 4 + 2];\n newDst[4] = s * m[1 * 4 + 0];\n newDst[5] = s * m[1 * 4 + 1];\n newDst[6] = s * m[1 * 4 + 2];\n newDst[8] = s * m[2 * 4 + 0];\n newDst[9] = s * m[2 * 4 + 1];\n newDst[10] = s * m[2 * 4 + 2];\n return newDst;\n }\n return {\n add,\n clone,\n copy,\n create,\n determinant,\n equals,\n equalsApproximately,\n fromMat4,\n fromQuat,\n get3DScaling,\n getAxis,\n getScaling,\n getTranslation,\n identity,\n inverse,\n invert,\n mul,\n mulScalar,\n multiply,\n multiplyScalar,\n negate,\n rotate,\n rotateX,\n rotateY,\n rotateZ,\n rotation,\n rotationX,\n rotationY,\n rotationZ,\n scale,\n scale3D,\n scaling,\n scaling3D,\n set,\n setAxis,\n setTranslation,\n translate,\n translation,\n transpose,\n uniformScale,\n uniformScale3D,\n uniformScaling,\n uniformScaling3D,\n };\n}\nconst cache$3 = new Map();\nfunction getAPI$3(Ctor) {\n let api = cache$3.get(Ctor);\n if (!api) {\n api = getAPIImpl$3(Ctor);\n cache$3.set(Ctor, api);\n }\n return api;\n}\n\n/**\n * Generates a typed API for Mat4\n * */\nfunction getAPIImpl$2(Ctor) {\n const vec3 = getAPI$4(Ctor);\n /**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `newDst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\n /**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\n function create(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n const newDst = new Ctor(16);\n if (v0 !== undefined) {\n newDst[0] = v0;\n if (v1 !== undefined) {\n newDst[1] = v1;\n if (v2 !== undefined) {\n newDst[2] = v2;\n if (v3 !== undefined) {\n newDst[3] = v3;\n if (v4 !== undefined) {\n newDst[4] = v4;\n if (v5 !== undefined) {\n newDst[5] = v5;\n if (v6 !== undefined) {\n newDst[6] = v6;\n if (v7 !== undefined) {\n newDst[7] = v7;\n if (v8 !== undefined) {\n newDst[8] = v8;\n if (v9 !== undefined) {\n newDst[9] = v9;\n if (v10 !== undefined) {\n newDst[10] = v10;\n if (v11 !== undefined) {\n newDst[11] = v11;\n if (v12 !== undefined) {\n newDst[12] = v12;\n if (v13 !== undefined) {\n newDst[13] = v13;\n if (v14 !== undefined) {\n newDst[14] = v14;\n if (v15 !== undefined) {\n newDst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return newDst;\n }\n /**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\n function set(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = v0;\n newDst[1] = v1;\n newDst[2] = v2;\n newDst[3] = v3;\n newDst[4] = v4;\n newDst[5] = v5;\n newDst[6] = v6;\n newDst[7] = v7;\n newDst[8] = v8;\n newDst[9] = v9;\n newDst[10] = v10;\n newDst[11] = v11;\n newDst[12] = v12;\n newDst[13] = v13;\n newDst[14] = v14;\n newDst[15] = v15;\n return newDst;\n }\n /**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\n function fromMat3(m3, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = m3[0];\n newDst[1] = m3[1];\n newDst[2] = m3[2];\n newDst[3] = 0;\n newDst[4] = m3[4];\n newDst[5] = m3[5];\n newDst[6] = m3[6];\n newDst[7] = 0;\n newDst[8] = m3[8];\n newDst[9] = m3[9];\n newDst[10] = m3[10];\n newDst[11] = 0;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[14] = 0;\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\n function fromQuat(q, dst) {\n const newDst = (dst ?? new Ctor(16));\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n newDst[0] = 1 - yy - zz;\n newDst[1] = yx + wz;\n newDst[2] = zx - wy;\n newDst[3] = 0;\n newDst[4] = yx - wz;\n newDst[5] = 1 - xx - zz;\n newDst[6] = zy + wx;\n newDst[7] = 0;\n newDst[8] = zx + wy;\n newDst[9] = zy - wx;\n newDst[10] = 1 - xx - yy;\n newDst[11] = 0;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[14] = 0;\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\n function negate(m, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = -m[0];\n newDst[1] = -m[1];\n newDst[2] = -m[2];\n newDst[3] = -m[3];\n newDst[4] = -m[4];\n newDst[5] = -m[5];\n newDst[6] = -m[6];\n newDst[7] = -m[7];\n newDst[8] = -m[8];\n newDst[9] = -m[9];\n newDst[10] = -m[10];\n newDst[11] = -m[11];\n newDst[12] = -m[12];\n newDst[13] = -m[13];\n newDst[14] = -m[14];\n newDst[15] = -m[15];\n return newDst;\n }\n /**\n * add 2 matrices.\n * @param a - matrix 1.\n * @param b - matrix 2.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns a + b.\n */\n function add(a, b, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = a[0] + b[0];\n newDst[1] = a[1] + b[1];\n newDst[2] = a[2] + b[2];\n newDst[3] = a[3] + b[3];\n newDst[4] = a[4] + b[4];\n newDst[5] = a[5] + b[5];\n newDst[6] = a[6] + b[6];\n newDst[7] = a[7] + b[7];\n newDst[8] = a[8] + b[8];\n newDst[9] = a[9] + b[9];\n newDst[10] = a[10] + b[10];\n newDst[11] = a[11] + b[11];\n newDst[12] = a[12] + b[12];\n newDst[13] = a[13] + b[13];\n newDst[14] = a[14] + b[14];\n newDst[15] = a[15] + b[15];\n return newDst;\n }\n /**\n * Multiplies a matrix by a scalar\n * @param m - The matrix.\n * @param s - The scalar\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns m * s.\n */\n function multiplyScalar(m, s, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = m[0] * s;\n newDst[1] = m[1] * s;\n newDst[2] = m[2] * s;\n newDst[3] = m[3] * s;\n newDst[4] = m[4] * s;\n newDst[5] = m[5] * s;\n newDst[6] = m[6] * s;\n newDst[7] = m[7] * s;\n newDst[8] = m[8] * s;\n newDst[9] = m[9] * s;\n newDst[10] = m[10] * s;\n newDst[11] = m[11] * s;\n newDst[12] = m[12] * s;\n newDst[13] = m[13] * s;\n newDst[14] = m[14] * s;\n newDst[15] = m[15] * s;\n return newDst;\n }\n /**\n * Multiplies a matrix by a scalar\n * @param m - The matrix.\n * @param s - The scalar\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns m * s.\n */\n const mulScalar = multiplyScalar;\n /**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\n function copy(m, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = m[0];\n newDst[1] = m[1];\n newDst[2] = m[2];\n newDst[3] = m[3];\n newDst[4] = m[4];\n newDst[5] = m[5];\n newDst[6] = m[6];\n newDst[7] = m[7];\n newDst[8] = m[8];\n newDst[9] = m[9];\n newDst[10] = m[10];\n newDst[11] = m[11];\n newDst[12] = m[12];\n newDst[13] = m[13];\n newDst[14] = m[14];\n newDst[15] = m[15];\n return newDst;\n }\n /**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\n const clone = copy;\n /**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\n function equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[7] - b[7]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON &&\n Math.abs(a[11] - b[11]) < EPSILON &&\n Math.abs(a[12] - b[12]) < EPSILON &&\n Math.abs(a[13] - b[13]) < EPSILON &&\n Math.abs(a[14] - b[14]) < EPSILON &&\n Math.abs(a[15] - b[15]) < EPSILON;\n }\n /**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\n function equals(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[7] === b[7] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n }\n /**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\n function identity(dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = 1;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = 1;\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = 1;\n newDst[11] = 0;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[14] = 0;\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\n function transpose(m, dst) {\n const newDst = (dst ?? new Ctor(16));\n if (newDst === m) {\n let t;\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return newDst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n newDst[0] = m00;\n newDst[1] = m10;\n newDst[2] = m20;\n newDst[3] = m30;\n newDst[4] = m01;\n newDst[5] = m11;\n newDst[6] = m21;\n newDst[7] = m31;\n newDst[8] = m02;\n newDst[9] = m12;\n newDst[10] = m22;\n newDst[11] = m32;\n newDst[12] = m03;\n newDst[13] = m13;\n newDst[14] = m23;\n newDst[15] = m33;\n return newDst;\n }\n /**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\n function inverse(m, dst) {\n const newDst = (dst ?? new Ctor(16));\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n newDst[0] = d * t0;\n newDst[1] = d * t1;\n newDst[2] = d * t2;\n newDst[3] = d * t3;\n newDst[4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n newDst[5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n newDst[6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n newDst[7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n newDst[8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n newDst[9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n newDst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n newDst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n newDst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n newDst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n newDst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n newDst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n return newDst;\n }\n /**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\n function determinant(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n }\n /**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\n const invert = inverse;\n /**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\n function multiply(a, b, dst) {\n const newDst = (dst ?? new Ctor(16));\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a13 = a[4 + 3];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const a23 = a[8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b13 = b[4 + 3];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n const b23 = b[8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n newDst[0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n newDst[1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n newDst[2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n newDst[3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n newDst[4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n newDst[5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n newDst[6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n newDst[7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n newDst[8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n newDst[9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n newDst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n newDst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n newDst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n newDst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n newDst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n newDst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n return newDst;\n }\n /**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\n const mul = multiply;\n /**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\n function setTranslation(a, v, dst) {\n const newDst = (dst ?? identity());\n if (a !== newDst) {\n newDst[0] = a[0];\n newDst[1] = a[1];\n newDst[2] = a[2];\n newDst[3] = a[3];\n newDst[4] = a[4];\n newDst[5] = a[5];\n newDst[6] = a[6];\n newDst[7] = a[7];\n newDst[8] = a[8];\n newDst[9] = a[9];\n newDst[10] = a[10];\n newDst[11] = a[11];\n }\n newDst[12] = v[0];\n newDst[13] = v[1];\n newDst[14] = v[2];\n newDst[15] = 1;\n return newDst;\n }\n ///**\n // * Returns the translation component of a 4-by-4 matrix as a vector with 3\n // * entries.\n // * @param m - The matrix.\n // * @param dst - vector to hold result. If not passed a new one is created.\n // * @returns The translation component of m.\n // */\n function getTranslation(m, dst) {\n const newDst = (dst ?? vec3.create());\n newDst[0] = m[12];\n newDst[1] = m[13];\n newDst[2] = m[14];\n return newDst;\n }\n /**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\n function getAxis(m, axis, dst) {\n const newDst = (dst ?? vec3.create());\n const off = axis * 4;\n newDst[0] = m[off + 0];\n newDst[1] = m[off + 1];\n newDst[2] = m[off + 2];\n return newDst;\n }\n /**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\n function setAxis(m, v, axis, dst) {\n const newDst = (dst === m) ? dst : copy(m, dst);\n const off = axis * 4;\n newDst[off + 0] = v[0];\n newDst[off + 1] = v[1];\n newDst[off + 2] = v[2];\n return newDst;\n }\n /**\n * Returns the \"3d\" scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\n function getScaling(m, dst) {\n const newDst = (dst ?? vec3.create());\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n newDst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n newDst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n newDst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return newDst;\n }\n /**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\n function perspective(fieldOfViewYInRadians, aspect, zNear, zFar, dst) {\n const newDst = (dst ?? new Ctor(16));\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n newDst[0] = f / aspect;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = f;\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[11] = -1;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[15] = 0;\n if (Number.isFinite(zFar)) {\n const rangeInv = 1 / (zNear - zFar);\n newDst[10] = zFar * rangeInv;\n newDst[14] = zFar * zNear * rangeInv;\n }\n else {\n newDst[10] = -1;\n newDst[14] = -zNear;\n }\n return newDst;\n }\n /**\n * Computes a 4-by-4 reverse-z perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 1 (at -zNear) to 0 (at -zFar) in the z dimension.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane. (default = Infinity)\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */ function perspectiveReverseZ(fieldOfViewYInRadians, aspect, zNear, zFar = Infinity, dst) {\n const newDst = (dst ?? new Ctor(16));\n const f = 1 / Math.tan(fieldOfViewYInRadians * 0.5);\n newDst[0] = f / aspect;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = f;\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[11] = -1;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[15] = 0;\n if (zFar === Infinity) {\n newDst[10] = 0;\n newDst[14] = zNear;\n }\n else {\n const rangeInv = 1 / (zFar - zNear);\n newDst[10] = zNear * rangeInv;\n newDst[14] = zFar * zNear * rangeInv;\n }\n return newDst;\n }\n /**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\n function ortho(left, right, bottom, top, near, far, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = 2 / (right - left);\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = 2 / (top - bottom);\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = 1 / (near - far);\n newDst[11] = 0;\n newDst[12] = (right + left) / (left - right);\n newDst[13] = (top + bottom) / (bottom - top);\n newDst[14] = near / (near - far);\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\n function frustum(left, right, bottom, top, near, far, dst) {\n const newDst = (dst ?? new Ctor(16));\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n newDst[0] = 2 * near / dx;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = 2 * near / dy;\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = (left + right) / dx;\n newDst[9] = (top + bottom) / dy;\n newDst[10] = far / dz;\n newDst[11] = -1;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[14] = near * far / dz;\n newDst[15] = 0;\n return newDst;\n }\n /**\n * Computes a 4-by-4 reverse-z perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 1 (-near) to 0 (-far) in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\n function frustumReverseZ(left, right, bottom, top, near, far = Infinity, dst) {\n const newDst = (dst ?? new Ctor(16));\n const dx = (right - left);\n const dy = (top - bottom);\n newDst[0] = 2 * near / dx;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = 2 * near / dy;\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = (left + right) / dx;\n newDst[9] = (top + bottom) / dy;\n newDst[11] = -1;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[15] = 0;\n if (far === Infinity) {\n newDst[10] = 0;\n newDst[14] = near;\n }\n else {\n const rangeInv = 1 / (far - near);\n newDst[10] = near * rangeInv;\n newDst[14] = far * near * rangeInv;\n }\n return newDst;\n }\n const xAxis = vec3.create();\n const yAxis = vec3.create();\n const zAxis = vec3.create();\n /**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\n function aim(position, target, up, dst) {\n const newDst = (dst ?? new Ctor(16));\n vec3.normalize(vec3.subtract(target, position, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n newDst[0] = xAxis[0];\n newDst[1] = xAxis[1];\n newDst[2] = xAxis[2];\n newDst[3] = 0;\n newDst[4] = yAxis[0];\n newDst[5] = yAxis[1];\n newDst[6] = yAxis[2];\n newDst[7] = 0;\n newDst[8] = zAxis[0];\n newDst[9] = zAxis[1];\n newDst[10] = zAxis[2];\n newDst[11] = 0;\n newDst[12] = position[0];\n newDst[13] = position[1];\n newDst[14] = position[2];\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\n function cameraAim(eye, target, up, dst) {\n const newDst = (dst ?? new Ctor(16));\n vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n newDst[0] = xAxis[0];\n newDst[1] = xAxis[1];\n newDst[2] = xAxis[2];\n newDst[3] = 0;\n newDst[4] = yAxis[0];\n newDst[5] = yAxis[1];\n newDst[6] = yAxis[2];\n newDst[7] = 0;\n newDst[8] = zAxis[0];\n newDst[9] = zAxis[1];\n newDst[10] = zAxis[2];\n newDst[11] = 0;\n newDst[12] = eye[0];\n newDst[13] = eye[1];\n newDst[14] = eye[2];\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\n function lookAt(eye, target, up, dst) {\n const newDst = (dst ?? new Ctor(16));\n vec3.normalize(vec3.subtract(eye, target, zAxis), zAxis);\n vec3.normalize(vec3.cross(up, zAxis, xAxis), xAxis);\n vec3.normalize(vec3.cross(zAxis, xAxis, yAxis), yAxis);\n newDst[0] = xAxis[0];\n newDst[1] = yAxis[0];\n newDst[2] = zAxis[0];\n newDst[3] = 0;\n newDst[4] = xAxis[1];\n newDst[5] = yAxis[1];\n newDst[6] = zAxis[1];\n newDst[7] = 0;\n newDst[8] = xAxis[2];\n newDst[9] = yAxis[2];\n newDst[10] = zAxis[2];\n newDst[11] = 0;\n newDst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n newDst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n newDst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\n function translation(v, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = 1;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = 1;\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = 1;\n newDst[11] = 0;\n newDst[12] = v[0];\n newDst[13] = v[1];\n newDst[14] = v[2];\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\n function translate(m, v, dst) {\n const newDst = (dst ?? new Ctor(16));\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n if (m !== newDst) {\n newDst[0] = m00;\n newDst[1] = m01;\n newDst[2] = m02;\n newDst[3] = m03;\n newDst[4] = m10;\n newDst[5] = m11;\n newDst[6] = m12;\n newDst[7] = m13;\n newDst[8] = m20;\n newDst[9] = m21;\n newDst[10] = m22;\n newDst[11] = m23;\n }\n newDst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n newDst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n newDst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n newDst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n return newDst;\n }\n /**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\n function rotationX(angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(16));\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[0] = 1;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = c;\n newDst[6] = s;\n newDst[7] = 0;\n newDst[8] = 0;\n newDst[9] = -s;\n newDst[10] = c;\n newDst[11] = 0;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[14] = 0;\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\n function rotateX(m, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(16));\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[4] = c * m10 + s * m20;\n newDst[5] = c * m11 + s * m21;\n newDst[6] = c * m12 + s * m22;\n newDst[7] = c * m13 + s * m23;\n newDst[8] = c * m20 - s * m10;\n newDst[9] = c * m21 - s * m11;\n newDst[10] = c * m22 - s * m12;\n newDst[11] = c * m23 - s * m13;\n if (m !== newDst) {\n newDst[0] = m[0];\n newDst[1] = m[1];\n newDst[2] = m[2];\n newDst[3] = m[3];\n newDst[12] = m[12];\n newDst[13] = m[13];\n newDst[14] = m[14];\n newDst[15] = m[15];\n }\n return newDst;\n }\n /**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\n function rotationY(angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(16));\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[0] = c;\n newDst[1] = 0;\n newDst[2] = -s;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = 1;\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = s;\n newDst[9] = 0;\n newDst[10] = c;\n newDst[11] = 0;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[14] = 0;\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\n function rotateY(m, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(16));\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[0] = c * m00 - s * m20;\n newDst[1] = c * m01 - s * m21;\n newDst[2] = c * m02 - s * m22;\n newDst[3] = c * m03 - s * m23;\n newDst[8] = c * m20 + s * m00;\n newDst[9] = c * m21 + s * m01;\n newDst[10] = c * m22 + s * m02;\n newDst[11] = c * m23 + s * m03;\n if (m !== newDst) {\n newDst[4] = m[4];\n newDst[5] = m[5];\n newDst[6] = m[6];\n newDst[7] = m[7];\n newDst[12] = m[12];\n newDst[13] = m[13];\n newDst[14] = m[14];\n newDst[15] = m[15];\n }\n return newDst;\n }\n /**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\n function rotationZ(angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(16));\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[0] = c;\n newDst[1] = s;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = -s;\n newDst[5] = c;\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = 1;\n newDst[11] = 0;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[14] = 0;\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\n function rotateZ(m, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(16));\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n newDst[0] = c * m00 + s * m10;\n newDst[1] = c * m01 + s * m11;\n newDst[2] = c * m02 + s * m12;\n newDst[3] = c * m03 + s * m13;\n newDst[4] = c * m10 - s * m00;\n newDst[5] = c * m11 - s * m01;\n newDst[6] = c * m12 - s * m02;\n newDst[7] = c * m13 - s * m03;\n if (m !== newDst) {\n newDst[8] = m[8];\n newDst[9] = m[9];\n newDst[10] = m[10];\n newDst[11] = m[11];\n newDst[12] = m[12];\n newDst[13] = m[13];\n newDst[14] = m[14];\n newDst[15] = m[15];\n }\n return newDst;\n }\n /**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\n function axisRotation(axis, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(16));\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n newDst[0] = xx + (1 - xx) * c;\n newDst[1] = x * y * oneMinusCosine + z * s;\n newDst[2] = x * z * oneMinusCosine - y * s;\n newDst[3] = 0;\n newDst[4] = x * y * oneMinusCosine - z * s;\n newDst[5] = yy + (1 - yy) * c;\n newDst[6] = y * z * oneMinusCosine + x * s;\n newDst[7] = 0;\n newDst[8] = x * z * oneMinusCosine + y * s;\n newDst[9] = y * z * oneMinusCosine - x * s;\n newDst[10] = zz + (1 - zz) * c;\n newDst[11] = 0;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[14] = 0;\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\n const rotation = axisRotation;\n /**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\n function axisRotate(m, axis, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(16));\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n newDst[0] = r00 * m00 + r01 * m10 + r02 * m20;\n newDst[1] = r00 * m01 + r01 * m11 + r02 * m21;\n newDst[2] = r00 * m02 + r01 * m12 + r02 * m22;\n newDst[3] = r00 * m03 + r01 * m13 + r02 * m23;\n newDst[4] = r10 * m00 + r11 * m10 + r12 * m20;\n newDst[5] = r10 * m01 + r11 * m11 + r12 * m21;\n newDst[6] = r10 * m02 + r11 * m12 + r12 * m22;\n newDst[7] = r10 * m03 + r11 * m13 + r12 * m23;\n newDst[8] = r20 * m00 + r21 * m10 + r22 * m20;\n newDst[9] = r20 * m01 + r21 * m11 + r22 * m21;\n newDst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n newDst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n if (m !== newDst) {\n newDst[12] = m[12];\n newDst[13] = m[13];\n newDst[14] = m[14];\n newDst[15] = m[15];\n }\n return newDst;\n }\n /**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\n const rotate = axisRotate;\n /**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\n function scaling(v, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = v[0];\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = v[1];\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = v[2];\n newDst[11] = 0;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[14] = 0;\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\n function scale(m, v, dst) {\n const newDst = (dst ?? new Ctor(16));\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n newDst[0] = v0 * m[0 * 4 + 0];\n newDst[1] = v0 * m[0 * 4 + 1];\n newDst[2] = v0 * m[0 * 4 + 2];\n newDst[3] = v0 * m[0 * 4 + 3];\n newDst[4] = v1 * m[1 * 4 + 0];\n newDst[5] = v1 * m[1 * 4 + 1];\n newDst[6] = v1 * m[1 * 4 + 2];\n newDst[7] = v1 * m[1 * 4 + 3];\n newDst[8] = v2 * m[2 * 4 + 0];\n newDst[9] = v2 * m[2 * 4 + 1];\n newDst[10] = v2 * m[2 * 4 + 2];\n newDst[11] = v2 * m[2 * 4 + 3];\n if (m !== newDst) {\n newDst[12] = m[12];\n newDst[13] = m[13];\n newDst[14] = m[14];\n newDst[15] = m[15];\n }\n return newDst;\n }\n /**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\n function uniformScaling(s, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = s;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n newDst[4] = 0;\n newDst[5] = s;\n newDst[6] = 0;\n newDst[7] = 0;\n newDst[8] = 0;\n newDst[9] = 0;\n newDst[10] = s;\n newDst[11] = 0;\n newDst[12] = 0;\n newDst[13] = 0;\n newDst[14] = 0;\n newDst[15] = 1;\n return newDst;\n }\n /**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\n function uniformScale(m, s, dst) {\n const newDst = (dst ?? new Ctor(16));\n newDst[0] = s * m[0 * 4 + 0];\n newDst[1] = s * m[0 * 4 + 1];\n newDst[2] = s * m[0 * 4 + 2];\n newDst[3] = s * m[0 * 4 + 3];\n newDst[4] = s * m[1 * 4 + 0];\n newDst[5] = s * m[1 * 4 + 1];\n newDst[6] = s * m[1 * 4 + 2];\n newDst[7] = s * m[1 * 4 + 3];\n newDst[8] = s * m[2 * 4 + 0];\n newDst[9] = s * m[2 * 4 + 1];\n newDst[10] = s * m[2 * 4 + 2];\n newDst[11] = s * m[2 * 4 + 3];\n if (m !== newDst) {\n newDst[12] = m[12];\n newDst[13] = m[13];\n newDst[14] = m[14];\n newDst[15] = m[15];\n }\n return newDst;\n }\n return {\n add,\n aim,\n axisRotate,\n axisRotation,\n cameraAim,\n clone,\n copy,\n create,\n determinant,\n equals,\n equalsApproximately,\n fromMat3,\n fromQuat,\n frustum,\n frustumReverseZ,\n getAxis,\n getScaling,\n getTranslation,\n identity,\n inverse,\n invert,\n lookAt,\n mul,\n mulScalar,\n multiply,\n multiplyScalar,\n negate,\n ortho,\n perspective,\n perspectiveReverseZ,\n rotate,\n rotateX,\n rotateY,\n rotateZ,\n rotation,\n rotationX,\n rotationY,\n rotationZ,\n scale,\n scaling,\n set,\n setAxis,\n setTranslation,\n translate,\n translation,\n transpose,\n uniformScale,\n uniformScaling,\n };\n}\nconst cache$2 = new Map();\nfunction getAPI$2(Ctor) {\n let api = cache$2.get(Ctor);\n if (!api) {\n api = getAPIImpl$2(Ctor);\n cache$2.set(Ctor, api);\n }\n return api;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Generates am typed API for Qud\n * */\nfunction getAPIImpl$1(Ctor) {\n const vec3 = getAPI$4(Ctor);\n /**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\n function create(x, y, z, w) {\n const newDst = new Ctor(4);\n if (x !== undefined) {\n newDst[0] = x;\n if (y !== undefined) {\n newDst[1] = y;\n if (z !== undefined) {\n newDst[2] = z;\n if (w !== undefined) {\n newDst[3] = w;\n }\n }\n }\n }\n return newDst;\n }\n /**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\n const fromValues = create;\n /**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\n function set(x, y, z, w, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = x;\n newDst[1] = y;\n newDst[2] = z;\n newDst[3] = w;\n return newDst;\n }\n /**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\n function fromAxisAngle(axis, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(4));\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n newDst[0] = s * axis[0];\n newDst[1] = s * axis[1];\n newDst[2] = s * axis[2];\n newDst[3] = Math.cos(halfAngle);\n return newDst;\n }\n /**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\n function toAxisAngle(q, dst) {\n const newDst = (dst ?? vec3.create(3));\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > EPSILON) {\n newDst[0] = q[0] / s;\n newDst[1] = q[1] / s;\n newDst[2] = q[2] / s;\n }\n else {\n newDst[0] = 1;\n newDst[1] = 0;\n newDst[2] = 0;\n }\n return { angle, axis: newDst };\n }\n /**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\n function angle(a, b) {\n const d = dot(a, b);\n return Math.acos(2 * d * d - 1);\n }\n /**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\n function multiply(a, b, dst) {\n const newDst = (dst ?? new Ctor(4));\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n newDst[0] = ax * bw + aw * bx + ay * bz - az * by;\n newDst[1] = ay * bw + aw * by + az * bx - ax * bz;\n newDst[2] = az * bw + aw * bz + ax * by - ay * bx;\n newDst[3] = aw * bw - ax * bx - ay * by - az * bz;\n return newDst;\n }\n /**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\n const mul = multiply;\n /**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\n function rotateX(q, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(4));\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n newDst[0] = qx * bw + qw * bx;\n newDst[1] = qy * bw + qz * bx;\n newDst[2] = qz * bw - qy * bx;\n newDst[3] = qw * bw - qx * bx;\n return newDst;\n }\n /**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\n function rotateY(q, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(4));\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n newDst[0] = qx * bw - qz * by;\n newDst[1] = qy * bw + qw * by;\n newDst[2] = qz * bw + qx * by;\n newDst[3] = qw * bw - qy * by;\n return newDst;\n }\n /**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\n function rotateZ(q, angleInRadians, dst) {\n const newDst = (dst ?? new Ctor(4));\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n newDst[0] = qx * bw + qy * bz;\n newDst[1] = qy * bw - qx * bz;\n newDst[2] = qz * bw + qw * bz;\n newDst[3] = qw * bw - qz * bz;\n return newDst;\n }\n /**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\n function slerp(a, b, t, dst) {\n const newDst = (dst ?? new Ctor(4));\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n let scale0;\n let scale1;\n if (1.0 - cosOmega > EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n }\n else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n newDst[0] = scale0 * ax + scale1 * bx;\n newDst[1] = scale0 * ay + scale1 * by;\n newDst[2] = scale0 * az + scale1 * bz;\n newDst[3] = scale0 * aw + scale1 * bw;\n return newDst;\n }\n /**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\n function inverse(q, dst) {\n const newDst = (dst ?? new Ctor(4));\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n newDst[0] = -a0 * invDot;\n newDst[1] = -a1 * invDot;\n newDst[2] = -a2 * invDot;\n newDst[3] = a3 * invDot;\n return newDst;\n }\n /**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\n function conjugate(q, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = -q[0];\n newDst[1] = -q[1];\n newDst[2] = -q[2];\n newDst[3] = q[3];\n return newDst;\n }\n /**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\n function fromMat(m, dst) {\n const newDst = (dst ?? new Ctor(4));\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n \n 0 1 2\n 4 5 6\n 8 9 10\n */\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n newDst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n newDst[0] = (m[6] - m[9]) * invRoot;\n newDst[1] = (m[8] - m[2]) * invRoot;\n newDst[2] = (m[1] - m[4]) * invRoot;\n }\n else {\n // |w| <= 1/2\n let i = 0;\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n newDst[i] = 0.5 * root;\n const invRoot = 0.5 / root;\n newDst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n newDst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n newDst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n return newDst;\n }\n /**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\n function fromEuler(xAngleInRadians, yAngleInRadians, zAngleInRadians, order, dst) {\n const newDst = (dst ?? new Ctor(4));\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n switch (order) {\n case 'xyz':\n newDst[0] = sx * cy * cz + cx * sy * sz;\n newDst[1] = cx * sy * cz - sx * cy * sz;\n newDst[2] = cx * cy * sz + sx * sy * cz;\n newDst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'xzy':\n newDst[0] = sx * cy * cz - cx * sy * sz;\n newDst[1] = cx * sy * cz - sx * cy * sz;\n newDst[2] = cx * cy * sz + sx * sy * cz;\n newDst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yxz':\n newDst[0] = sx * cy * cz + cx * sy * sz;\n newDst[1] = cx * sy * cz - sx * cy * sz;\n newDst[2] = cx * cy * sz - sx * sy * cz;\n newDst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yzx':\n newDst[0] = sx * cy * cz + cx * sy * sz;\n newDst[1] = cx * sy * cz + sx * cy * sz;\n newDst[2] = cx * cy * sz - sx * sy * cz;\n newDst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zxy':\n newDst[0] = sx * cy * cz - cx * sy * sz;\n newDst[1] = cx * sy * cz + sx * cy * sz;\n newDst[2] = cx * cy * sz + sx * sy * cz;\n newDst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zyx':\n newDst[0] = sx * cy * cz - cx * sy * sz;\n newDst[1] = cx * sy * cz + sx * cy * sz;\n newDst[2] = cx * cy * sz - sx * sy * cz;\n newDst[3] = cx * cy * cz + sx * sy * sz;\n break;\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n return newDst;\n }\n /**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\n function copy(q, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = q[0];\n newDst[1] = q[1];\n newDst[2] = q[2];\n newDst[3] = q[3];\n return newDst;\n }\n /**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\n const clone = copy;\n /**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\n function add(a, b, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = a[0] + b[0];\n newDst[1] = a[1] + b[1];\n newDst[2] = a[2] + b[2];\n newDst[3] = a[3] + b[3];\n return newDst;\n }\n /**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\n function subtract(a, b, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = a[0] - b[0];\n newDst[1] = a[1] - b[1];\n newDst[2] = a[2] - b[2];\n newDst[3] = a[3] - b[3];\n return newDst;\n }\n /**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\n const sub = subtract;\n /**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\n function mulScalar(v, k, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = v[0] * k;\n newDst[1] = v[1] * k;\n newDst[2] = v[2] * k;\n newDst[3] = v[3] * k;\n return newDst;\n }\n /**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\n const scale = mulScalar;\n /**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\n function divScalar(v, k, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = v[0] / k;\n newDst[1] = v[1] / k;\n newDst[2] = v[2] / k;\n newDst[3] = v[3] / k;\n return newDst;\n }\n /**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\n function dot(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n }\n /**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\n function lerp(a, b, t, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = a[0] + t * (b[0] - a[0]);\n newDst[1] = a[1] + t * (b[1] - a[1]);\n newDst[2] = a[2] + t * (b[2] - a[2]);\n newDst[3] = a[3] + t * (b[3] - a[3]);\n return newDst;\n }\n /**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\n function length(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n }\n /**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\n const len = length;\n /**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\n function lengthSq(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n }\n /**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\n const lenSq = lengthSq;\n /**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\n function normalize(v, dst) {\n const newDst = (dst ?? new Ctor(4));\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n newDst[0] = v0 / len;\n newDst[1] = v1 / len;\n newDst[2] = v2 / len;\n newDst[3] = v3 / len;\n }\n else {\n newDst[0] = 0;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 1;\n }\n return newDst;\n }\n /**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\n function equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n }\n /**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\n function equals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n }\n /**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\n function identity(dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = 0;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 1;\n return newDst;\n }\n const tempVec3 = vec3.create();\n const xUnitVec3 = vec3.create();\n const yUnitVec3 = vec3.create();\n /**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\n function rotationTo(aUnit, bUnit, dst) {\n const newDst = (dst ?? new Ctor(4));\n const dot = vec3.dot(aUnit, bUnit);\n if (dot < -0.999999) {\n vec3.cross(xUnitVec3, aUnit, tempVec3);\n if (vec3.len(tempVec3) < 0.000001) {\n vec3.cross(yUnitVec3, aUnit, tempVec3);\n }\n vec3.normalize(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, newDst);\n return newDst;\n }\n else if (dot > 0.999999) {\n newDst[0] = 0;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 1;\n return newDst;\n }\n else {\n vec3.cross(aUnit, bUnit, tempVec3);\n newDst[0] = tempVec3[0];\n newDst[1] = tempVec3[1];\n newDst[2] = tempVec3[2];\n newDst[3] = 1 + dot;\n return normalize(newDst, newDst);\n }\n }\n const tempQuat1 = new Ctor(4);\n const tempQuat2 = new Ctor(4);\n /**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\n function sqlerp(a, b, c, d, t, dst) {\n const newDst = (dst ?? new Ctor(4));\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), newDst);\n return newDst;\n }\n return {\n create,\n fromValues,\n set,\n fromAxisAngle,\n toAxisAngle,\n angle,\n multiply,\n mul,\n rotateX,\n rotateY,\n rotateZ,\n slerp,\n inverse,\n conjugate,\n fromMat,\n fromEuler,\n copy,\n clone,\n add,\n subtract,\n sub,\n mulScalar,\n scale,\n divScalar,\n dot,\n lerp,\n length,\n len,\n lengthSq,\n lenSq,\n normalize,\n equalsApproximately,\n equals,\n identity,\n rotationTo,\n sqlerp,\n };\n}\nconst cache$1 = new Map();\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `newDst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nfunction getAPI$1(Ctor) {\n let api = cache$1.get(Ctor);\n if (!api) {\n api = getAPIImpl$1(Ctor);\n cache$1.set(Ctor, api);\n }\n return api;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Generates am typed API for Vec4\n * */\nfunction getAPIImpl(Ctor) {\n /**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\n function create(x, y, z, w) {\n const newDst = new Ctor(4);\n if (x !== undefined) {\n newDst[0] = x;\n if (y !== undefined) {\n newDst[1] = y;\n if (z !== undefined) {\n newDst[2] = z;\n if (w !== undefined) {\n newDst[3] = w;\n }\n }\n }\n }\n return newDst;\n }\n /**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\n const fromValues = create;\n /**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\n function set(x, y, z, w, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = x;\n newDst[1] = y;\n newDst[2] = z;\n newDst[3] = w;\n return newDst;\n }\n /**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\n function ceil(v, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = Math.ceil(v[0]);\n newDst[1] = Math.ceil(v[1]);\n newDst[2] = Math.ceil(v[2]);\n newDst[3] = Math.ceil(v[3]);\n return newDst;\n }\n /**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\n function floor(v, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = Math.floor(v[0]);\n newDst[1] = Math.floor(v[1]);\n newDst[2] = Math.floor(v[2]);\n newDst[3] = Math.floor(v[3]);\n return newDst;\n }\n /**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\n function round(v, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = Math.round(v[0]);\n newDst[1] = Math.round(v[1]);\n newDst[2] = Math.round(v[2]);\n newDst[3] = Math.round(v[3]);\n return newDst;\n }\n /**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\n function clamp(v, min = 0, max = 1, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = Math.min(max, Math.max(min, v[0]));\n newDst[1] = Math.min(max, Math.max(min, v[1]));\n newDst[2] = Math.min(max, Math.max(min, v[2]));\n newDst[3] = Math.min(max, Math.max(min, v[3]));\n return newDst;\n }\n /**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\n function add(a, b, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = a[0] + b[0];\n newDst[1] = a[1] + b[1];\n newDst[2] = a[2] + b[2];\n newDst[3] = a[3] + b[3];\n return newDst;\n }\n /**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\n function addScaled(a, b, scale, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = a[0] + b[0] * scale;\n newDst[1] = a[1] + b[1] * scale;\n newDst[2] = a[2] + b[2] * scale;\n newDst[3] = a[3] + b[3] * scale;\n return newDst;\n }\n /**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\n function subtract(a, b, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = a[0] - b[0];\n newDst[1] = a[1] - b[1];\n newDst[2] = a[2] - b[2];\n newDst[3] = a[3] - b[3];\n return newDst;\n }\n /**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\n const sub = subtract;\n /**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\n function equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n }\n /**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\n function equals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n }\n /**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\n function lerp(a, b, t, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = a[0] + t * (b[0] - a[0]);\n newDst[1] = a[1] + t * (b[1] - a[1]);\n newDst[2] = a[2] + t * (b[2] - a[2]);\n newDst[3] = a[3] + t * (b[3] - a[3]);\n return newDst;\n }\n /**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\n function lerpV(a, b, t, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = a[0] + t[0] * (b[0] - a[0]);\n newDst[1] = a[1] + t[1] * (b[1] - a[1]);\n newDst[2] = a[2] + t[2] * (b[2] - a[2]);\n newDst[3] = a[3] + t[3] * (b[3] - a[3]);\n return newDst;\n }\n /**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\n function max(a, b, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = Math.max(a[0], b[0]);\n newDst[1] = Math.max(a[1], b[1]);\n newDst[2] = Math.max(a[2], b[2]);\n newDst[3] = Math.max(a[3], b[3]);\n return newDst;\n }\n /**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\n function min(a, b, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = Math.min(a[0], b[0]);\n newDst[1] = Math.min(a[1], b[1]);\n newDst[2] = Math.min(a[2], b[2]);\n newDst[3] = Math.min(a[3], b[3]);\n return newDst;\n }\n /**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\n function mulScalar(v, k, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = v[0] * k;\n newDst[1] = v[1] * k;\n newDst[2] = v[2] * k;\n newDst[3] = v[3] * k;\n return newDst;\n }\n /**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\n const scale = mulScalar;\n /**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\n function divScalar(v, k, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = v[0] / k;\n newDst[1] = v[1] / k;\n newDst[2] = v[2] / k;\n newDst[3] = v[3] / k;\n return newDst;\n }\n /**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\n function inverse(v, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = 1 / v[0];\n newDst[1] = 1 / v[1];\n newDst[2] = 1 / v[2];\n newDst[3] = 1 / v[3];\n return newDst;\n }\n /**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\n const invert = inverse;\n /**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\n function dot(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n }\n /**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\n function length(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n }\n /**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\n const len = length;\n /**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\n function lengthSq(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n }\n /**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\n const lenSq = lengthSq;\n /**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\n function distance(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n }\n /**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\n const dist = distance;\n /**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\n function distanceSq(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n }\n /**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\n const distSq = distanceSq;\n /**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\n function normalize(v, dst) {\n const newDst = (dst ?? new Ctor(4));\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n newDst[0] = v0 / len;\n newDst[1] = v1 / len;\n newDst[2] = v2 / len;\n newDst[3] = v3 / len;\n }\n else {\n newDst[0] = 0;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n }\n return newDst;\n }\n /**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\n function negate(v, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = -v[0];\n newDst[1] = -v[1];\n newDst[2] = -v[2];\n newDst[3] = -v[3];\n return newDst;\n }\n /**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\n function copy(v, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = v[0];\n newDst[1] = v[1];\n newDst[2] = v[2];\n newDst[3] = v[3];\n return newDst;\n }\n /**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\n const clone = copy;\n /**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\n function multiply(a, b, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = a[0] * b[0];\n newDst[1] = a[1] * b[1];\n newDst[2] = a[2] * b[2];\n newDst[3] = a[3] * b[3];\n return newDst;\n }\n /**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\n const mul = multiply;\n /**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\n function divide(a, b, dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = a[0] / b[0];\n newDst[1] = a[1] / b[1];\n newDst[2] = a[2] / b[2];\n newDst[3] = a[3] / b[3];\n return newDst;\n }\n /**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\n const div = divide;\n /**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\n function zero(dst) {\n const newDst = (dst ?? new Ctor(4));\n newDst[0] = 0;\n newDst[1] = 0;\n newDst[2] = 0;\n newDst[3] = 0;\n return newDst;\n }\n /**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\n function transformMat4(v, m, dst) {\n const newDst = (dst ?? new Ctor(4));\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n newDst[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n newDst[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n newDst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n newDst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return newDst;\n }\n /**\n * Treat a 4D vector as a direction and set it's length\n *\n * @param a The vec4 to lengthen\n * @param len The length of the resulting vector\n * @returns The lengthened vector\n */\n function setLength(a, len, dst) {\n const newDst = (dst ?? new Ctor(4));\n normalize(a, newDst);\n return mulScalar(newDst, len, newDst);\n }\n /**\n * Ensure a vector is not longer than a max length\n *\n * @param a The vec4 to limit\n * @param maxLen The longest length of the resulting vector\n * @returns The vector, shortened to maxLen if it's too long\n */\n function truncate(a, maxLen, dst) {\n const newDst = (dst ?? new Ctor(4));\n if (length(a) > maxLen) {\n return setLength(a, maxLen, newDst);\n }\n return copy(a, newDst);\n }\n /**\n * Return the vector exactly between 2 endpoint vectors\n *\n * @param a Endpoint 1\n * @param b Endpoint 2\n * @returns The vector exactly residing between endpoints 1 and 2\n */\n function midpoint(a, b, dst) {\n const newDst = (dst ?? new Ctor(4));\n return lerp(a, b, 0.5, newDst);\n }\n return {\n create,\n fromValues,\n set,\n ceil,\n floor,\n round,\n clamp,\n add,\n addScaled,\n subtract,\n sub,\n equalsApproximately,\n equals,\n lerp,\n lerpV,\n max,\n min,\n mulScalar,\n scale,\n divScalar,\n inverse,\n invert,\n dot,\n length,\n len,\n lengthSq,\n lenSq,\n distance,\n dist,\n distanceSq,\n distSq,\n normalize,\n negate,\n copy,\n clone,\n multiply,\n mul,\n divide,\n div,\n zero,\n transformMat4,\n setLength,\n truncate,\n midpoint,\n };\n}\nconst cache = new Map();\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `newDst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nfunction getAPI(Ctor) {\n let api = cache.get(Ctor);\n if (!api) {\n api = getAPIImpl(Ctor);\n cache.set(Ctor, api);\n }\n return api;\n}\n\n/**\n * Some docs\n * @namespace wgpu-matrix\n */\n/**\n * Generate wgpu-matrix API for type\n */\nfunction wgpuMatrixAPI(Mat3Ctor, Mat4Ctor, QuatCtor, Vec2Ctor, Vec3Ctor, Vec4Ctor) {\n return {\n /** @namespace mat3 */\n mat3: getAPI$3(Mat3Ctor),\n /** @namespace mat4 */\n mat4: getAPI$2(Mat4Ctor),\n /** @namespace quat */\n quat: getAPI$1(QuatCtor),\n /** @namespace vec2 */\n vec2: getAPI$5(Vec2Ctor),\n /** @namespace vec3 */\n vec3: getAPI$4(Vec3Ctor),\n /** @namespace vec4 */\n vec4: getAPI(Vec4Ctor),\n };\n}\nconst { \n/**\n * 3x3 Matrix functions that default to returning `Float32Array`\n * @namespace\n */\nmat3, \n/**\n * 4x4 Matrix functions that default to returning `Float32Array`\n * @namespace\n */\nmat4, \n/**\n * Quaternion functions that default to returning `Float32Array`\n * @namespace\n */\nquat, \n/**\n * Vec2 functions that default to returning `Float32Array`\n * @namespace\n */\nvec2, \n/**\n * Vec3 functions that default to returning `Float32Array`\n * @namespace\n */\nvec3, \n/**\n * Vec3 functions that default to returning `Float32Array`\n * @namespace\n */\nvec4, } = wgpuMatrixAPI(Float32Array, Float32Array, Float32Array, Float32Array, Float32Array, Float32Array);\nconst { \n/**\n * 3x3 Matrix functions that default to returning `Float64Array`\n * @namespace\n */\nmat3: mat3d, \n/**\n * 4x4 Matrix functions that default to returning `Float64Array`\n * @namespace\n */\nmat4: mat4d, \n/**\n * Quaternion functions that default to returning `Float64Array`\n * @namespace\n */\nquat: quatd, \n/**\n * Vec2 functions that default to returning `Float64Array`\n * @namespace\n */\nvec2: vec2d, \n/**\n * Vec3 functions that default to returning `Float64Array`\n * @namespace\n */\nvec3: vec3d, \n/**\n * Vec3 functions that default to returning `Float64Array`\n * @namespace\n */\nvec4: vec4d, } = wgpuMatrixAPI(Float64Array, Float64Array, Float64Array, Float64Array, Float64Array, Float64Array);\nconst { \n/**\n * 3x3 Matrix functions that default to returning `number[]`\n * @namespace\n */\nmat3: mat3n, \n/**\n * 4x4 Matrix functions that default to returning `number[]`\n * @namespace\n */\nmat4: mat4n, \n/**\n * Quaternion functions that default to returning `number[]`\n * @namespace\n */\nquat: quatn, \n/**\n * Vec2 functions that default to returning `number[]`\n * @namespace\n */\nvec2: vec2n, \n/**\n * Vec3 functions that default to returning `number[]`\n * @namespace\n */\nvec3: vec3n, \n/**\n * Vec3 functions that default to returning `number[]`\n * @namespace\n */\nvec4: vec4n, } = wgpuMatrixAPI(ZeroArray, Array, Array, Array, Array, Array);\n\nexport { mat3, mat3d, mat3n, mat4, mat4d, mat4n, quat, quatd, quatn, utils, vec2, vec2d, vec2n, vec3, vec3d, vec3n, vec4, vec4d, vec4n };\n//# sourceMappingURL=wgpu-matrix.module.js.map\n",
|
|
7
|
+
"import { type Mat3, mat3, vec2 } from \"wgpu-matrix\";\nimport type { Point } from \"../coreTypes/Point\";\nimport type { Transform } from \"../coreTypes/Transform\";\nimport type { Camera } from \"../scene/Camera\";\nimport type { Resolution } from \"../screen/resolution\";\n\n/**\n * Creates a projection matrix for the given resolution.\n * The matrix is a 3x3 matrix that converts screen coordinates centered at the origin ranging from:\n *\n * (-resolution.width / 2, resolution.height / 2) = top left corner to (resolution.width / 2, -resolution.height / 2) = bottom right corner\n *\n * into clip space centered at the originranging from:\n *\n * (-1, 1) = top left corner to (1, -1) = bottom right corner\n *\n * @param resolution - The resolution of the screen in logical pixels.\n * @param dst - The destination matrix.\n * @returns The projection matrix.\n */\nexport function createProjectionMatrix(resolution: Resolution, dst?: Mat3) {\n const { width, height } = resolution;\n\n // origin is always the same\n // (0,0) => (0 * 2 / 1920, 0 * 2 / 1080) => (0,0)\n //\n // top left corner is (-1, 1) in clip space, (-width / 2, height / 2) in screen space e.g.\n // (-960, 540) => (-960 * 2 / 1920, 540 * 2 / 1080) => (-1, 1)\n return mat3.scaling([2 / width, 2 / height], dst);\n}\n\nexport function createViewMatrix(camera: Camera, target: Mat3) {\n const matrix = mat3.identity(target);\n\n // Apply scaling\n mat3.scale(matrix, [camera.zoom, camera.zoom], matrix);\n\n // Apply rotation\n mat3.rotate(matrix, camera.rotationRadians, matrix);\n\n // Apply translation\n mat3.translate(matrix, [-camera.x, -camera.y], matrix);\n\n return matrix;\n}\n\nexport function createModelMatrix(transform: Transform, base: Mat3) {\n // Apply translation\n mat3.translate(base, [transform.position.x, transform.position.y], base);\n // Apply rotation\n mat3.rotate(base, transform.rotation, base);\n\n // Apply scaling\n mat3.scale(base, [transform.scale.x, transform.scale.y], base);\n\n return base;\n}\n\nexport function convertScreenToWorld(\n screenCoordinates: Point,\n camera: Camera,\n projectionMatrix: Mat3,\n resolution: Resolution,\n): Point {\n const inverseViewProjectionMatrix = mat3.mul(\n mat3.inverse(camera.matrix),\n mat3.inverse(projectionMatrix),\n );\n const normalizedDeviceCoordinates = {\n x: (2 * screenCoordinates.x) / resolution.width - 1,\n y: 1 - (2 * screenCoordinates.y) / resolution.height,\n };\n return transformPoint(\n normalizedDeviceCoordinates,\n inverseViewProjectionMatrix,\n );\n}\n\nexport function convertWorldToScreen(\n worldCoordinates: Point,\n camera: Camera,\n projectionMatrix: Mat3,\n resolution: Resolution,\n): Point {\n const viewProjectionMatrix = mat3.mul(projectionMatrix, camera.matrix);\n const ndcPoint = transformPoint(worldCoordinates, viewProjectionMatrix);\n return {\n x: ((ndcPoint.x + 1) * resolution.width) / 2,\n y: ((1 - ndcPoint.y) * resolution.height) / 2,\n };\n}\n\nexport function transformPoint(point: Point, matrix: Mat3): Point {\n const result = vec2.transformMat3([point.x, point.y], matrix);\n return {\n x: result[0],\n y: result[1],\n };\n}\n",
|
|
8
|
+
"import type { IShader } from \"../shaders/IShader\";\nimport type { SceneNode } from \"./SceneNode\";\n\ntype Layer = {\n z: number;\n pipelines: Pipeline[];\n};\n\nexport type Pipeline<TNode extends SceneNode = SceneNode> = {\n shader: IShader;\n nodes: TNode[];\n};\n\nexport class Batcher {\n nodes: SceneNode[] = [];\n layers: Layer[] = [];\n pipelines: Pipeline[] = [];\n\n enqueue(node: SceneNode) {\n if (node.renderComponent && node.isActive) {\n this.nodes.push(node);\n const z = node.layer;\n const layer = this.#findOrCreateLayer(z);\n const pipeline = this.#findOrCreatePipeline(\n layer,\n node.renderComponent.shader,\n );\n pipeline.nodes.push(node);\n }\n\n for (const kid of node.kids) {\n this.enqueue(kid);\n }\n }\n\n flush() {\n this.nodes = [];\n this.layers = [];\n this.pipelines = [];\n }\n\n #findOrCreateLayer(z: number) {\n let layer = this.layers.find((l) => l.z === z);\n if (!layer) {\n layer = { z, pipelines: [] };\n this.layers.push(layer);\n this.layers.sort((a, b) => a.z - b.z);\n }\n return layer;\n }\n\n #findOrCreatePipeline(layer: Layer, shader: IShader) {\n let pipeline = layer.pipelines.find((p) => p.shader === shader);\n if (!pipeline) {\n pipeline = { shader, nodes: [] };\n layer.pipelines.push(pipeline);\n this.pipelines.push(pipeline);\n }\n return pipeline;\n }\n}\n",
|
|
9
|
+
"/**\n * Convert degrees to radians\n * @param degrees Angle in degrees\n * @returns Angle in radians\n */\nexport function deg2rad(degrees: number): number {\n return degrees * (Math.PI / 180);\n}\n\n/**\n * Convert radians to degrees\n * @param radians Angle in radians\n * @returns Angle in degrees\n */\nexport function rad2deg(radians: number): number {\n return radians * (180 / Math.PI);\n}\n",
|
|
10
|
+
"import { mat3 } from \"wgpu-matrix\";\nimport type { Vec2 } from \"../coreTypes/Vec2\";\nimport { deg2rad, rad2deg } from \"../math/angle\";\nimport { createViewMatrix } from \"../math/matrix\";\n\nexport class Camera {\n #position: Vec2 = { x: 0, y: 0 };\n #zoom = 1;\n #rotation = 0;\n #isDirty = true;\n #matrix = mat3.create();\n\n get zoom() {\n return this.#zoom;\n }\n\n set zoom(value: number) {\n this.#zoom = value;\n this.setDirty();\n }\n\n get rotation() {\n return rad2deg(this.#rotation);\n }\n\n set rotation(value: number) {\n this.#rotation = deg2rad(value);\n this.setDirty();\n }\n\n get rotationRadians() {\n return this.#rotation;\n }\n\n set rotationRadians(value: number) {\n this.#rotation = value;\n this.setDirty();\n }\n\n get x() {\n return this.#position.x;\n }\n\n get y() {\n return this.#position.y;\n }\n\n set x(value: number) {\n this.#position.x = value;\n this.setDirty();\n }\n\n set y(value: number) {\n this.#position.y = value;\n this.setDirty();\n }\n\n get matrix() {\n if (this.#isDirty) {\n this.#isDirty = false;\n this.#matrix = createViewMatrix(this, this.#matrix);\n }\n return this.#matrix;\n }\n\n setDirty() {\n this.#isDirty = true;\n }\n}\n",
|
|
11
|
+
"export function assert(condition: any, message: string): asserts condition {\n if (!condition) {\n throw new Error(message);\n }\n}\n",
|
|
12
|
+
"import { type Mat3, mat3, vec2 } from \"wgpu-matrix\";\nimport type { Point } from \"../coreTypes/Point\";\nimport type { Size } from \"../coreTypes/Size\";\nimport type { Transform } from \"../coreTypes/Transform\";\nimport type { Vec2 } from \"../coreTypes/Vec2\";\nimport { deg2rad, rad2deg } from \"../math/angle\";\nimport { createModelMatrix } from \"../math/matrix\";\nimport type { RenderComponent } from \"./RenderComponent\";\n\n/**\n * A node in the scene graph.\n *\n * This is a base class and is fairly low level. You will probably want to interact with\n * the wrapper classes {@link Toodle['Node']} or {@link Toodle['Quad']} instead.\n */\nexport class SceneNode {\n static nextId = 1;\n\n id: number;\n label?: string;\n\n #isActive = true;\n #layer: null | number = null;\n #parent: SceneNode | null = null;\n #key: string | null = null;\n #kids: SceneNode[] = [];\n #transform: Transform;\n #matrix: Mat3 = mat3.identity();\n #renderComponent: RenderComponent | null = null;\n #idealSize: Size | null = null;\n #positionProxy: Point;\n #scaleProxy: Vec2;\n\n #cache: RenderLayoutCache | null = null;\n\n constructor(opts?: NodeOptions) {\n this.id = opts?.id ?? SceneNode.nextId++;\n\n if (opts?.rotation && opts?.rotationRadians) {\n throw new Error(\n `Cannot set both rotation and rotationRadians for node ${opts?.label ?? this.id}`,\n );\n }\n\n this.#transform = {\n position: opts?.position ?? { x: 0, y: 0 },\n scale: { x: 1, y: 1 },\n size: opts?.idealSize ?? { width: 1, height: 1 },\n rotation: opts?.rotationRadians ?? 0,\n };\n if (opts?.scale) this.scale = opts.scale;\n if (opts?.rotation) this.rotation = opts.rotation;\n\n this.#matrix = mat3.identity();\n this.#renderComponent = opts?.render ?? null;\n this.#layer = opts?.layer ?? null;\n this.#isActive = opts?.isActive ?? true;\n this.label = opts?.label ?? undefined;\n this.#idealSize = opts?.idealSize ?? null;\n this.#key = opts?.key ?? null;\n\n for (const kid of opts?.kids ?? []) {\n this.add(kid);\n }\n\n const self = this;\n this.#positionProxy = {\n get x() {\n return self.#transform.position.x;\n },\n set x(value: number) {\n self.#transform.position.x = value;\n self.setDirty();\n },\n get y() {\n return self.#transform.position.y;\n },\n set y(value: number) {\n self.#transform.position.y = value;\n self.setDirty();\n },\n };\n\n this.#scaleProxy = {\n get x() {\n return self.#transform.scale.x;\n },\n set x(value: number) {\n self.#transform.scale.x = value;\n self.setDirty();\n },\n get y() {\n return self.#transform.scale.y;\n },\n set y(value: number) {\n self.#transform.scale.y = value;\n self.setDirty();\n },\n };\n }\n\n /**\n * Add a child node and return the child node with this node set as its parent.\n */\n add<T extends SceneNode>(kid: T, index?: number) {\n kid.#parent = this;\n if (index === undefined) {\n this.#kids.push(kid);\n } else {\n this.#kids.splice(index, 0, kid);\n }\n kid.setDirty();\n return kid;\n }\n\n /**\n * Returns an array of the node's immediate kids.\n *\n * Note that these will be returned with a `SceneNode` type, but can be narrowed if you know the type of them,\n * for eg:\n *\n * ```ts\n * for (const kid of node.kids) {\n * if (kid instanceof Scene.QuadNode) {\n * console.log(kid.color)\n * }\n *\n * if (kid instanceof Text.TextNode) {\n * console.log(kid.text)\n * }\n * }\n * ```\n */\n get kids() {\n return this.#kids;\n }\n\n /**\n * The children of the node. Alias for {@link SceneNode.kids}.\n */\n get children() {\n return this.#kids;\n }\n\n /**\n * Returns a reference to the node's transform.\n *\n * Do not edit this transform directly as it won't invalidate cache's correctly.\n * Instead, use convenience properties {@link SceneNode.position}, {@link SceneNode.scale}, and {@link SceneNode.rotation}.\n */\n get transform(): Transform {\n return this.#transform;\n }\n\n /**\n * Returns the key of the node as set when the node was created.\n *\n * This key can be used to reference the node from an external lookup system.\n */\n get key() {\n return this.#key ?? \"\";\n }\n\n /**\n * Returns the parent node. See https://toodle.gg/f849595b3ed13fc956fc1459a5cb5f0228f9d259/examples/transforms.html\n */\n get parent() {\n return this.#parent;\n }\n\n set position(value: Point) {\n this.#transform.position = value;\n this.setDirty();\n }\n\n /**\n * Position of the node in local space. For world space, use {@link SceneNode.bounds}.\n */\n get position() {\n return this.#positionProxy;\n }\n\n set x(value: number) {\n this.#transform.position.x = value;\n this.setDirty();\n }\n\n /**\n * The local x coordinate of the node.\n */\n get x() {\n return this.#transform.position.x;\n }\n\n set y(value: number) {\n this.#transform.position.y = value;\n this.setDirty();\n }\n\n /**\n * The local y coordinate of the node.\n */\n get y() {\n return this.#transform.position.y;\n }\n\n set rotation(value: number) {\n this.#transform.rotation = deg2rad(value);\n this.setDirty();\n }\n\n /**\n * The rotation of the node in degrees.\n * For radians, see {@link SceneNode.rotationRadians}.\n */\n get rotation() {\n return rad2deg(this.#transform.rotation);\n }\n\n /**\n * The rotation of the node in radians.\n * For degrees, see {@link SceneNode.rotation}.\n */\n get rotationRadians() {\n return this.#transform.rotation;\n }\n\n set rotationRadians(value: number) {\n this.#transform.rotation = value;\n this.setDirty();\n }\n\n /**\n * The scale of the node. See https://toodle.gg/f849595b3ed13fc956fc1459a5cb5f0228f9d259/examples/quad-size-scale.html\n */\n get scale(): Vec2 {\n return this.#scaleProxy;\n }\n\n set scale(value: Vec2 | number) {\n if (typeof value === \"number\") {\n this.#transform.scale = { x: value, y: value };\n } else {\n this.#transform.scale = value;\n }\n this.setDirty();\n }\n\n set idealSize(value: Size | null) {\n this.#idealSize = value;\n this.setDirty();\n }\n\n /**\n * The size of the node. See https://toodle.gg/f849595b3ed13fc956fc1459a5cb5f0228f9d259/examples/quad-size-scale.html\n */\n\n get size() {\n return this.#idealSize;\n }\n\n /**\n * The aspect ratio of the node.\n * If the node has no defined size, the aspect ratio will be 1.\n */\n get aspectRatio() {\n if (!this.#idealSize) {\n console.warn(\n \"Attempted to get aspect ratio of a node with no ideal size\",\n );\n return 1;\n }\n return this.#idealSize.width / this.#idealSize.height;\n }\n\n /**\n * isActive is a boolean that determines if the node is active.\n * If a node is not active, it will not be drawn.\n * If any of a node's ancestors are not active, the node will not be active.\n */\n get isActive() {\n if (!this.#cache?.isActive) {\n this.#cache ??= {};\n\n let parent = this as SceneNode;\n let isActive = this.#isActive;\n while (isActive && parent.#parent) {\n parent = parent.#parent;\n isActive = isActive && parent.#isActive;\n }\n this.#cache.isActive = isActive;\n }\n return this.#cache.isActive;\n }\n\n set isActive(value: boolean) {\n this.#isActive = value;\n this.setDirty();\n }\n\n /**\n * Nodes are batched for drawing based on their layer. Each layer will submit a separate draw call.\n * Nodes with the same layer will be drawn in the order they are drawn with toodle.Draw\n * Nodes with a higher layer will be drawn on top of nodes with a lower layer.\n */\n get layer() {\n if (this.#layer != null) {\n return this.#layer;\n }\n\n if (!this.#cache?.layer) {\n this.#cache ??= {};\n\n let parent = this as SceneNode;\n while (parent.#parent) {\n parent = parent.#parent;\n if (parent.hasExplicitLayer) {\n this.#cache.layer = parent.#layer!;\n return this.#cache.layer;\n }\n }\n\n this.#cache.layer = 0;\n }\n\n return this.#cache.layer;\n }\n\n /**\n * Returns true if the node has an explicit layer set.\n *\n * If the node does not have an explicit layer but one of its ancestors does,\n * its layer will be inherited from its parent.\n */\n get hasExplicitLayer() {\n return this.#layer != null;\n }\n\n set layer(value: number) {\n this.#layer = value;\n this.setDirty();\n }\n\n get renderComponent() {\n return this.#renderComponent;\n }\n\n /**\n * This is the model matrix of the node. See https://webgpufundamentals.org/webgpu/lessons/webgpu-matrix-math.html for more information.\n *\n * Do not edit this matrix directly as it is derived from the node's transform and will be overwritten.\n */\n get matrix(): Float32Array {\n if (!this.#cache?.matrix) {\n this.#cache ??= {};\n\n if (this.#parent) {\n mat3.clone(this.#parent.matrix, this.#matrix);\n } else {\n mat3.identity(this.#matrix);\n }\n this.#cache.matrix = createModelMatrix(this.transform, this.#matrix);\n }\n return this.#cache.matrix;\n }\n\n /**\n * Get the bounds of the node in world space\n */\n get bounds(): Bounds {\n if (!this.#cache?.bounds) {\n this.#cache ??= {};\n\n const height = this.size?.height ?? 0;\n const width = this.size?.width ?? 0;\n\n // we don't need to add the node's position to the points\n // because the points are relative to the node's center\n // and the matrix already applies the node's position\n const corners = [\n vec2.transformMat3([-width / 2, height / 2], this.matrix),\n vec2.transformMat3([width / 2, height / 2], this.matrix),\n vec2.transformMat3([-width / 2, -height / 2], this.matrix),\n vec2.transformMat3([width / 2, -height / 2], this.matrix),\n ];\n const center = vec2.transformMat3([0, 0], this.matrix);\n\n const xValues = corners.map((c) => c[0]);\n const yValues = corners.map((c) => c[1]);\n\n this.#cache.bounds = {\n x: center[0],\n y: center[1],\n left: Math.min(xValues[0], xValues[1], xValues[2], xValues[3]),\n right: Math.max(xValues[0], xValues[1], xValues[2], xValues[3]),\n top: Math.max(yValues[0], yValues[1], yValues[2], yValues[3]),\n bottom: Math.min(yValues[0], yValues[1], yValues[2], yValues[3]),\n };\n }\n return this.#cache.bounds;\n }\n\n /**\n * Set the bounds of the node in world space.\n */\n setBounds(bounds: Partial<Bounds>) {\n if (bounds.left !== undefined) this.left = bounds.left;\n if (bounds.right !== undefined) this.right = bounds.right;\n if (bounds.top !== undefined) this.top = bounds.top;\n if (bounds.bottom !== undefined) this.bottom = bounds.bottom;\n if (bounds.x !== undefined) this.centerX = bounds.x;\n if (bounds.y !== undefined) this.centerY = bounds.y;\n\n return this;\n }\n\n /**\n * Set the left edge of the node in world space.\n */\n set left(value: number) {\n this.#adjustWorldPosition([value - this.bounds.left, 0]);\n }\n\n /**\n * Set the bottom edge of the node in world space.\n */\n set bottom(value: number) {\n this.#adjustWorldPosition([0, value - this.bounds.bottom]);\n }\n\n /**\n * Set the top edge of the node in world space.\n */\n set top(value: number) {\n this.#adjustWorldPosition([0, value - this.bounds.top]);\n }\n\n /**\n * Set the right edge of the node in world space.\n */\n set right(value: number) {\n this.#adjustWorldPosition([value - this.bounds.right, 0]);\n }\n\n /**\n * Set the center x of the node in world space.\n */\n set centerX(value: number) {\n this.#adjustWorldPosition([value - this.bounds.x, 0]);\n }\n\n /**\n * Set the center y of the node in world space.\n */\n set centerY(value: number) {\n this.#adjustWorldPosition([0, value - this.bounds.y]);\n }\n\n /**\n * Removes references to this node and all of its children.\n *\n * Call this to remove a node from a parent's tree and before garbage collection to prevent a node from being retained.\n *\n * @example\n *\n * const parent = toodle.Node();\n * const child = toodle.Quad();\n * const grandchild = toodle.Quad();\n *\n * parent.add(child);\n * child.add(grandchild);\n *\n * // Will delete `child` and `grandchild`\n * child.delete();\n */\n delete() {\n this.#parent?.remove(this);\n for (const child of this.#kids) {\n child.delete();\n }\n this.#kids = [];\n this.#isActive = false;\n this.#layer = null;\n this.#renderComponent = null;\n }\n\n /**\n * Remove any child node from this node. Warns if the child is not found.\n *\n * The node will still exist as an orphaned node and can still be passed to toodle.Draw or added to another parent.\n *\n * Alternatively, calling `node.delete()` on the child will remove it and set it to inactive.\n *\n * @example\n * const parent = toodle.Node();\n * const child = toodle.Quad();\n * const grandchild = toodle.Quad();\n *\n * parent.add(child);\n * child.add(grandchild);\n *\n * parent.remove(child);\n */\n remove(kid: SceneNode) {\n const childIndex = this.#kids.findIndex((child) => child.id === kid.id);\n if (childIndex <= -1) {\n throw new Error(\n `${kid.label ?? kid.id} is not a child of ${this.label ?? this.id}`,\n );\n }\n this.#kids.splice(childIndex, 1);\n kid.#parent = null;\n kid.setDirty();\n }\n\n #adjustWorldPosition(delta: [number, number]) {\n const inverseMatrix = mat3.inverse(this.#parent?.matrix ?? mat3.identity());\n\n // zero out the translation part of the matrix since we're transforming a delta\n // and not a point in space\n inverseMatrix[8] = inverseMatrix[9] = 0;\n\n const localDelta = vec2.transformMat3(delta, inverseMatrix);\n\n this.#transform.position.x += localDelta[0];\n this.#transform.position.y += localDelta[1];\n\n this.setDirty();\n }\n\n /**\n * This marks the node as dirty, invalidating its cache and causing its matrix to be recalculated.\n * This should not be necessary to call directly, but is available for advanced use cases.\n */\n setDirty() {\n this.#cache = null;\n this.#kids.forEach((kid) => kid.setDirty());\n }\n\n /**\n * Parse a node and its descendants from a JSON string.\n * Can be used for deserialization from a file or other source.\n *\n * @example\n *\n * const node = new Node();\n * const json = JSON.stringify(node);\n * const clonedNode = Node.parse(json);\n */\n static parse(json: string) {\n const obj = JSON.parse(json, reviver);\n return new SceneNode(obj);\n }\n\n /**\n * This method usually is not called directly. It will be called automatically by `JSON.stringify`,\n * see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description\n * and {@link SceneNode.parse}.\n *\n * @example\n *\n * const node = new Node();\n * const json = JSON.stringify(node); // calls toJSON()\n * console.log(json)\n */\n toJSON() {\n return {\n id: this.id,\n label: this.label,\n transform: this.#transform,\n layer: this.#layer,\n isActive: this.#isActive,\n kids: this.#kids,\n render: this.#renderComponent,\n };\n }\n}\n\nexport type NodeOptions = {\n /** The unique identifier for the node. */\n id?: number;\n /** The label for the node. */\n label?: string;\n /** The layer for the node. */\n layer?: number;\n /** The rotation for the node in degrees. Cannot be used with `rotationRadians`. */\n rotation?: number;\n /** The rotation for the node in radians. Cannot be used with `rotation`. */\n rotationRadians?: number;\n /** The position for the node. */\n position?: Point;\n /** The scale for the node. */\n scale?: Vec2 | number;\n /** The desired size for the node. */\n idealSize?: Size;\n /** The active state for the node. */\n isActive?: boolean;\n /** The kids for the node. */\n kids?: SceneNode[];\n /** The render component for the node. */\n render?: RenderComponent;\n /** Flip the node horizontally. */\n flipX?: boolean;\n /** Flip the node vertically. */\n flipY?: boolean;\n /** A string key for the node - can be used to reference the node from an external lookup system */\n key?: string;\n};\n\nfunction reviver(key: string, value: any) {\n if (key === \"kids\") {\n return value.map((kid: any) => new SceneNode(kid));\n }\n\n if (Array.isArray(value) && value.every((v) => typeof v === \"number\")) {\n if (value.length === 2) {\n return value as [number, number];\n }\n if (value.length === 3) {\n return value as [number, number, number];\n }\n if (value.length === 4) {\n return value as [number, number, number, number];\n }\n }\n return value;\n}\n\ntype RenderLayoutCache = {\n layer?: number;\n isActive?: boolean;\n matrix?: Mat3;\n bounds?: Bounds;\n};\n\n/**\n * Bounds represent a bounding box of a rectangle in world space\n */\nexport type Bounds = {\n /**\n * for an axis-aligned rectangle, top is the top edge.\n * for a rotated rectangle, it is the topmost point\n */\n top: number;\n /**\n * for an axis-aligned rectangle, left is the left edge.\n * for a rotated rectangle, it is the leftmost point\n */\n left: number;\n /**\n * for an axis-aligned rectangle, right is the right edge.\n * for a rotated rectangle, it is the rightmost point\n */\n right: number;\n /**\n * for an axis-aligned rectangle, bottom is the bottom edge.\n * for a rotated rectangle, it is the bottommost point\n */\n bottom: number;\n /**\n * the center x of the node in world space\n */\n x: number;\n /**\n * the center y of the node in world space\n */\n y: number;\n};\n",
|
|
13
|
+
"import { type Mat3, mat3 } from \"wgpu-matrix\";\nimport type { Color } from \"../coreTypes/Color\";\nimport type { Size } from \"../coreTypes/Size\";\nimport type { Vec2 } from \"../coreTypes/Vec2\";\nimport type { IShader } from \"../shaders/IShader\";\nimport type { Toodle } from \"../Toodle\";\nimport type { AssetManager, TextureId } from \"../textures/AssetManager\";\nimport type { AtlasCoords, TexelRegion } from \"../textures/types\";\nimport { assert } from \"../utils/assert\";\nimport type { Pool } from \"../utils/pool\";\nimport { type NodeOptions, SceneNode } from \"./SceneNode\";\n\nconst PRIMITIVE_TEXTURE = \"__primitive__\";\nconst RESERVED_PRIMITIVE_INDEX_START = 1000;\n// this must match the circle index in the default fragment shader of quad.wgsl.ts\nconst CIRCLE_INDEX = 1001;\n\n// a default region used for shapes\nconst DEFAULT_REGION: TexelRegion = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n};\n\n/**\n * A node in the scene graph that renders a textured quad.\n *\n * This is a base class and is fairly low level. You will probably want to interact with\n * the wrapper class {@link Toodle.Quad} instead.\n */\nexport class QuadNode extends SceneNode {\n assetManager: AssetManager;\n\n #color: Color;\n #atlasCoords: AtlasCoords;\n #region: TexelRegion;\n #matrixPool: Pool<Mat3>;\n #flip: Vec2;\n /**\n * The offset of the cropped texture from the original texture\n * If uncropped, this will be 0,0\n */\n #cropOffset: Vec2;\n /**\n * The ratio of the cropped texture width and height to the original texture width and height\n * If uncropped, this will be 1,1\n */\n #cropRatio: Size;\n #atlasSize: Size;\n\n #textureId: TextureId;\n #writeInstance?: (array: Float32Array, offset: number) => void;\n\n constructor(options: QuadOptions, matrixPool: Pool<Mat3>) {\n assert(\n options.shader,\n \"QuadNode requires a shader to be explicitly provided\",\n );\n assert(\n options.idealSize,\n \"QuadNode requires an ideal size to be explicitly provided\",\n );\n\n assert(\n options.atlasCoords,\n \"QuadNode requires atlas coords to be explicitly provided\",\n );\n\n options.render ??= {\n shader: options.shader,\n writeInstance: writeQuadInstance,\n };\n\n super(options);\n\n assert(options.assetManager, \"QuadNode requires an asset manager\");\n this.assetManager = options.assetManager;\n\n if (\n options.atlasCoords &&\n options.atlasCoords.atlasIndex >= RESERVED_PRIMITIVE_INDEX_START\n ) {\n this.#textureId = PRIMITIVE_TEXTURE;\n this.#region = DEFAULT_REGION;\n this.#atlasSize = DEFAULT_REGION;\n } else {\n assert(\n options.textureId,\n \"QuadNode requires texture id to be explicitly provided\",\n );\n this.#textureId = options.textureId;\n\n assert(\n options.region,\n \"QuadNode requires a region to be explicitly provided\",\n );\n this.#region = options.region;\n\n assert(\n options.atlasSize,\n \"QuadNode requires atlas size to be explicitly provided\",\n );\n this.#atlasSize = options.atlasSize;\n }\n\n this.#atlasCoords = options.atlasCoords;\n this.#color = options.color ?? { r: 1, g: 1, b: 1, a: 1 };\n this.#matrixPool = matrixPool;\n this.#flip = { x: options.flipX ? -1 : 1, y: options.flipY ? -1 : 1 };\n this.#cropOffset = options.cropOffset ?? { x: 0, y: 0 };\n this.#cropRatio = !this.#atlasCoords.uvScaleCropped\n ? { width: 1, height: 1 }\n : {\n width:\n this.#atlasCoords.uvScaleCropped.width /\n this.#atlasCoords.uvScale.width,\n height:\n this.#atlasCoords.uvScaleCropped.height /\n this.#atlasCoords.uvScale.height,\n };\n this.#writeInstance = options.writeInstance;\n }\n\n /**\n * The tint color of the quad.\n * When drawing shapes, this will be the fill color.\n * When drawing textures, this will be the color multiplier by default.\n * You can also use this value in fragment shaders by referencing `vertex.engine_tint`\n */\n get color() {\n return this.#color;\n }\n\n set color(value: Color) {\n this.#color = value;\n }\n\n /**\n * The size of the quad. See https://toodle.gg/f849595b3ed13fc956fc1459a5cb5f0228f9d259/examples/quad-size-scale.html\n */\n get size() {\n const size = super.size;\n if (!size) {\n throw new Error(\"QuadNode requires a size\");\n }\n return size;\n }\n\n /**\n * This is the final model matrix used to render the quad, which\n * may differ from the matrix passed down to the node's children.\n * Properties like `flipX` and `flipY` or `size` are applied here but not inherited by children.\n */\n get matrixWithSize() {\n const matrix = mat3.clone(this.matrix, this.#matrixPool.get());\n mat3.scale(\n matrix,\n [this.size.width * this.#flip.x, this.size.height * this.#flip.y],\n matrix,\n );\n\n return matrix;\n }\n\n /**\n * The atlas coordinates for the quad. These determine the region in the texture atlas\n * that is sampled for rendering in normalized uv space.\n */\n get atlasCoords() {\n return this.#atlasCoords;\n }\n\n /**\n * A subregion of the texture to render.\n * This is useful for rendering a single sprite from a spritesheet for instance.\n * It defaults to the full texture.\n */\n get region() {\n return this.#region;\n }\n\n get writeInstance() {\n return this.#writeInstance;\n }\n\n /**\n * Whether the image is mirrored horizontally.\n *\n * `true` means the image is mirrored (equivalent to a scale.x of -1),\n * `false` means it is not mirrored.\n */\n get flipX(): boolean {\n return this.#flip.x === -1;\n }\n\n /**\n * Sets whether the image is mirrored horizontally.\n *\n * `true` mirrors the image (equivalent to a scale.x of -1),\n * `false` restores normal orientation.\n */\n set flipX(value: boolean) {\n this.#flip.x = value ? -1 : 1;\n this.setDirty();\n }\n\n /**\n * Whether the image is mirrored vertically.\n *\n * `true` means the image is mirrored (equivalent to a scale.y of -1),\n * `false` means it is not mirrored.\n */\n get flipY(): boolean {\n return this.#flip.y === -1;\n }\n\n /**\n * Sets whether the image is mirrored vertically.\n *\n * `true` mirrors the image (equivalent to a scale.y of -1),\n * `false` restores normal orientation.\n */\n set flipY(value: boolean) {\n this.#flip.y = value ? -1 : 1;\n this.setDirty();\n }\n\n /**\n * The drawing offset of the texture.\n * This can be used to offset the texture from the origin of the quad.\n */\n get cropOffset(): Vec2 {\n return this.#cropOffset;\n }\n\n /**\n * The drawing offset of the texture.\n * This can be used to offset the texture from the origin of the quad.\n */\n set cropOffset(value: Vec2) {\n this.#cropOffset = value;\n }\n\n get textureId() {\n return this.#textureId;\n }\n\n /**\n * Whether this quad is rendering a primitive shape like a line or a circle/rect.\n */\n get isPrimitive() {\n return this.#textureId === PRIMITIVE_TEXTURE;\n }\n\n /**\n * Whether this quad is rendering a circle.\n */\n get isCircle() {\n return this.#atlasCoords.atlasIndex === CIRCLE_INDEX;\n }\n\n extra = {\n /**\n * Sets the atlas coords for the quad. This is for advanced use cases and by default these are\n * set automatically to reference the right texture atlas region.\n * @param value - The new atlas coords.\n */\n setAtlasCoords: (value: AtlasCoords) => {\n this.#atlasCoords = value;\n },\n\n /**\n * Returns the crop ratio for the quad. This is the relative difference in size\n * between the cropped and uncropped texture, and will be 1 if the quad has no transparent pixels\n * or if it is loaded without cropping..\n */\n cropRatio: () => {\n return this.#cropRatio;\n },\n\n /**\n * Returns the size of the texture atlas in texels, by default this is 4096x4096\n */\n atlasSize: () => {\n return this.#atlasSize;\n },\n };\n}\n\nexport type QuadOptions = NodeOptions & {\n textureId?: TextureId;\n /**\n * A subregion of the texture to render.\n * This is useful for rendering a single sprite from a spritesheet for instance.\n * It defaults to the full texture.\n */\n region?: TexelRegion;\n /**\n * Atlas coordinates are almost always set by toodle and the asset manager.\n * For advanced use cases, you can set these yourself to control what uvs are sampled\n * from the texture atlas.\n */\n atlasCoords?: AtlasCoords;\n\n assetManager?: AssetManager;\n\n shader?: IShader;\n writeInstance?: (array: Float32Array, offset: number) => void;\n color?: Color;\n /**\n * flipX mirrors the image horizontally (equivalent to a scale.x multiplication\n * by -1) but allows for independent scaling\n */\n flipX?: boolean;\n /**\n * flipY mirrors the image vertically (equivalent to a scale.y multiplication\n * by -1) but allows for independent scaling\n */\n flipY?: boolean;\n /**\n * The offset of the cropped texture from the original texture\n * If uncropped, this will be 0,0\n */\n cropOffset?: Vec2;\n\n /**\n * The size of the texture atlas in texels. This is almost always set by toodle.\n */\n atlasSize?: Size;\n\n /**\n * The matrix pool to use for the quad.\n * This is used to avoid creating new matrices for each quad.\n */\n matrixPool?: Pool<Mat3>;\n};\n\nfunction writeQuadInstance(\n node: SceneNode,\n array: Float32Array,\n offset: number,\n) {\n if (!(node instanceof QuadNode)) {\n throw new Error(\"QuadNode.writeInstance can only be called on QuadNodes\");\n }\n\n array.set(node.matrixWithSize, offset);\n\n array.set(\n [node.color.r, node.color.g, node.color.b, node.color.a],\n offset + 12,\n );\n\n const region = node.region;\n if (node.textureId === PRIMITIVE_TEXTURE) {\n array.set(\n [\n node.atlasCoords.uvOffset.x,\n node.atlasCoords.uvOffset.y,\n node.atlasCoords.uvScale.width,\n node.atlasCoords.uvScale.height,\n ],\n offset + 16,\n );\n } else {\n const atlasSize = node.extra.atlasSize();\n array.set(\n [\n node.atlasCoords.uvOffset.x + region.x / atlasSize.width,\n node.atlasCoords.uvOffset.y + region.y / atlasSize.height,\n region.width / atlasSize.width,\n region.height / atlasSize.height,\n ],\n offset + 16,\n );\n }\n\n array.set(\n [\n // convert the offset in world space to the offset in the local space of the quad\n // this offset is applied to the unit quad _before_ the model matrix is applied\n // we divide by 2 because we want the center of the remaining region and not the full shift.\n // for example, if we crop the leftmost 90px of a 100px wide texture\n // we want the offset to be 45px and not 90px\n node.cropOffset.x / 2 / (node.atlasCoords.originalSize.width || 1),\n node.cropOffset.y / 2 / (node.atlasCoords.originalSize.height || 1),\n node.extra.cropRatio().width,\n node.extra.cropRatio().height,\n ],\n offset + 20,\n );\n\n new DataView(array.buffer).setUint32(\n array.byteOffset + (offset + 24) * Float32Array.BYTES_PER_ELEMENT,\n node.atlasCoords.atlasIndex,\n true,\n );\n\n node.writeInstance?.(array, offset + 28);\n\n return 1;\n}\n",
|
|
14
|
+
"import { type Mat3, mat3 } from \"wgpu-matrix\";\nimport type { Size } from \"../coreTypes/Size\";\nimport type { Vec2 } from \"../coreTypes/Vec2\";\nimport type { TextureId } from \"../textures/AssetManager\";\nimport type { AtlasCoords } from \"../textures/types\";\nimport { assert } from \"../utils/assert\";\nimport type { Pool } from \"../utils/pool\";\nimport { QuadNode, type QuadOptions } from \"./QuadNode\";\nimport type { SceneNode } from \"./SceneNode\";\n\nconst MAT3_SIZE = 12;\nconst VEC4F_SIZE = 4;\n\nexport type JumboTileDef = Required<JumboTileOptions>;\n\nexport type JumboTileOptions = {\n /** Texture id of the tile */\n textureId: TextureId;\n /** The offset of this tile in texels from the top left of the full texture */\n offset: Vec2;\n /** The size of the tile in texels. If not provided, the size will be inferred from the texture atlas. */\n size?: Size;\n /** The coordinates of the tile in the texture atlas. If not provided, the size will be read from the loaded texture. */\n atlasCoords?: AtlasCoords;\n};\n\nexport type JumboQuadOptions = Omit<QuadOptions, \"atlasCoords\"> & {\n tiles: JumboTileOptions[];\n};\n\nexport class JumboQuadNode extends QuadNode {\n #tiles: Required<JumboTileOptions>[];\n #matrixPool: Pool<Mat3>;\n\n constructor(options: JumboQuadOptions, matrixPool: Pool<Mat3>) {\n assert(\n options.shader,\n \"JumboQuadNode requires a shader to be explicitly provided\",\n );\n\n assert(\n options.tiles && options.tiles.length > 0,\n \"JumboQuadNode requires at least one tile to be provided\",\n );\n\n options.render ??= {\n shader: options.shader,\n writeInstance: writeJumboQuadInstance,\n };\n\n super(\n {\n ...options,\n atlasCoords: options.tiles[0].atlasCoords,\n },\n matrixPool,\n );\n\n this.#matrixPool = matrixPool;\n\n this.#tiles = [];\n\n for (const tile of options.tiles) {\n assert(\n tile.atlasCoords,\n \"JumboQuadNode requires atlas coords to be provided\",\n );\n\n assert(tile.size, \"JumboQuadNode requires a size to be provided\");\n\n this.#tiles.push({\n textureId: tile.textureId,\n offset: tile.offset,\n size: tile.size,\n atlasCoords: tile.atlasCoords,\n });\n }\n }\n\n get atlasCoords(): AtlasCoords {\n throw new Error(\"JumboQuadNode does not have a single atlas coords\");\n }\n\n get tiles(): JumboTileDef[] {\n return this.#tiles;\n }\n\n getTileMatrix(tile: JumboTileDef) {\n const matrix = mat3.clone(this.matrix, this.#matrixPool.get());\n\n // Find maximum dimensions across all tiles\n const originalSize = {\n width: Math.max(...this.#tiles.map((t) => t.offset.x + t.size.width)),\n height: Math.max(...this.#tiles.map((t) => t.offset.y + t.size.height)),\n };\n\n const proportionalSize = {\n width: this.size.width / originalSize.width,\n height: this.size.height / originalSize.height,\n };\n\n // Apply translation\n // calculate the offset of the tile's center from the center of the jumbo quad\n // eg if the tile is at (0,0) in texels and is 4000x4000 and the whole texture is 5000x5000 this would give us\n // (2000 - 2500) / 2 = -250, -(2000 - 2500) / 2 = 250\n const centerOffset = {\n x: tile.offset.x + tile.size.width / 2 - originalSize.width / 2,\n y: -(tile.offset.y + tile.size.height / 2 - originalSize.height / 2),\n };\n mat3.translate(\n matrix,\n [\n centerOffset.x * proportionalSize.width,\n centerOffset.y * proportionalSize.height,\n ],\n matrix,\n );\n\n // Scale proportionally by size of the jumbo quad\n mat3.scale(\n matrix,\n [\n tile.size.width * proportionalSize.width * (this.flipX ? -1 : 1),\n tile.size.height * proportionalSize.height * (this.flipY ? -1 : 1),\n ],\n matrix,\n );\n\n return matrix;\n }\n}\n\nfunction writeJumboQuadInstance(\n node: SceneNode,\n array: Float32Array,\n offset: number,\n): number {\n if (!(node instanceof JumboQuadNode)) {\n throw new Error(\n \"JumboQuadNode.writeJumboQuadInstance can only be called on JumboQuadNodes\",\n );\n }\n\n // Initialize the local offset for each tile to render...\n let tileOffset = 0;\n\n // Iterate through each AtlasCoords found in the coords...\n for (const tile of node.tiles) {\n const coord = tile.atlasCoords;\n\n // write model matrix\n const matrix = node.getTileMatrix(tile);\n array.set(matrix, offset + tileOffset);\n tileOffset += MAT3_SIZE;\n\n // write tint color\n array.set(\n [node.color.r, node.color.g, node.color.b, node.color.a],\n offset + tileOffset,\n );\n //...increment the local offset by the size of our color vector\n tileOffset += VEC4F_SIZE;\n\n // write uv offset and scale\n // location 4 are the uv offset and scale used to sample the texture atlas. these are in normalized texel coordinates.\n // @location(4) uvOffsetAndScale: vec4<f32>,\n array.set(\n [\n coord.uvOffset.x,\n coord.uvOffset.y,\n coord.uvScale.width,\n coord.uvScale.height,\n ],\n offset + tileOffset,\n );\n tileOffset += VEC4F_SIZE;\n\n const cropRatio = !coord.uvScaleCropped\n ? { width: 1, height: 1 }\n : {\n width: coord.uvScaleCropped.width / coord.uvScale.width,\n height: coord.uvScaleCropped.height / coord.uvScale.height,\n };\n // write crop offset and scale\n // location 5 is the crop offset from center and scale. These are ratios applied to the unit quad.\n // @location(5) cropOffsetAndScale: vec4<f32>,\n array.set(\n [\n // convert the offset in world space to the offset in the local space of the quad\n // this offset is applied to the unit quad _before_ the model matrix is applied\n // we divide by 2 because we want the center of the remaining region and not the full shift.\n // for example, if we crop the leftmost 90px of a 100px wide texture\n // we want the offset to be 45px and not 90px\n tile.atlasCoords.cropOffset.x /\n 2 /\n (tile.atlasCoords.originalSize.width || 1),\n tile.atlasCoords.cropOffset.y /\n 2 /\n (tile.atlasCoords.originalSize.height || 1),\n cropRatio.width,\n cropRatio.height,\n ],\n offset + tileOffset,\n );\n tileOffset += VEC4F_SIZE;\n\n // write atlas index\n new DataView(array.buffer).setUint32(\n array.byteOffset + (offset + tileOffset) * Float32Array.BYTES_PER_ELEMENT,\n coord.atlasIndex,\n true,\n );\n tileOffset += VEC4F_SIZE;\n }\n\n // Write our instance and return the number of sprites added to the buffer...\n node.writeInstance?.(array, offset + tileOffset);\n return node.tiles.length;\n}\n",
|
|
15
|
+
"/* webgpu-utils@1.10.3, license MIT */\nconst roundUpToMultipleOf = (v, multiple) => (((v + multiple - 1) / multiple) | 0) * multiple;\nfunction keysOf(obj) {\n return Object.keys(obj);\n}\nfunction range(count, fn) {\n return new Array(count).fill(0).map((_, i) => fn(i));\n}\n\nclass TypedArrayViewGenerator {\n arrayBuffer;\n byteOffset;\n constructor(sizeInBytes) {\n this.arrayBuffer = new ArrayBuffer(sizeInBytes);\n this.byteOffset = 0;\n }\n align(alignment) {\n this.byteOffset = roundUpToMultipleOf(this.byteOffset, alignment);\n }\n pad(numBytes) {\n this.byteOffset += numBytes;\n }\n getView(Ctor, numElements) {\n const view = new Ctor(this.arrayBuffer, this.byteOffset, numElements);\n this.byteOffset += view.byteLength;\n return view;\n }\n}\nfunction subarray(arr, offset, length) {\n return arr.subarray(offset, offset + length);\n}\n// TODO: fix better?\nconst isTypedArray = (arr) => arr && typeof arr.length === 'number' && arr.buffer instanceof ArrayBuffer && typeof arr.byteLength === 'number';\n\nconst createTypeDefs = (defs) => defs;\nconst b$1 = createTypeDefs({\n i32: { numElements: 1, align: 4, size: 4, type: 'i32', View: Int32Array },\n u32: { numElements: 1, align: 4, size: 4, type: 'u32', View: Uint32Array },\n f32: { numElements: 1, align: 4, size: 4, type: 'f32', View: Float32Array },\n f16: { numElements: 1, align: 2, size: 2, type: 'u16', View: Uint16Array },\n vec2f: { numElements: 2, align: 8, size: 8, type: 'f32', View: Float32Array },\n vec2i: { numElements: 2, align: 8, size: 8, type: 'i32', View: Int32Array },\n vec2u: { numElements: 2, align: 8, size: 8, type: 'u32', View: Uint32Array },\n vec2h: { numElements: 2, align: 4, size: 4, type: 'u16', View: Uint16Array },\n vec3i: { numElements: 3, align: 16, size: 12, type: 'i32', View: Int32Array },\n vec3u: { numElements: 3, align: 16, size: 12, type: 'u32', View: Uint32Array },\n vec3f: { numElements: 3, align: 16, size: 12, type: 'f32', View: Float32Array },\n vec3h: { numElements: 3, align: 8, size: 6, type: 'u16', View: Uint16Array },\n vec4i: { numElements: 4, align: 16, size: 16, type: 'i32', View: Int32Array },\n vec4u: { numElements: 4, align: 16, size: 16, type: 'u32', View: Uint32Array },\n vec4f: { numElements: 4, align: 16, size: 16, type: 'f32', View: Float32Array },\n vec4h: { numElements: 4, align: 8, size: 8, type: 'u16', View: Uint16Array },\n // AlignOf(vecR)\tSizeOf(array<vecR, C>)\n mat2x2f: { numElements: 4, align: 8, size: 16, type: 'f32', View: Float32Array },\n mat2x2h: { numElements: 4, align: 4, size: 8, type: 'u16', View: Uint16Array },\n mat3x2f: { numElements: 6, align: 8, size: 24, type: 'f32', View: Float32Array },\n mat3x2h: { numElements: 6, align: 4, size: 12, type: 'u16', View: Uint16Array },\n mat4x2f: { numElements: 8, align: 8, size: 32, type: 'f32', View: Float32Array },\n mat4x2h: { numElements: 8, align: 4, size: 16, type: 'u16', View: Uint16Array },\n mat2x3f: { numElements: 8, align: 16, size: 32, pad: [3, 1], type: 'f32', View: Float32Array },\n mat2x3h: { numElements: 8, align: 8, size: 16, pad: [3, 1], type: 'u16', View: Uint16Array },\n mat3x3f: { numElements: 12, align: 16, size: 48, pad: [3, 1], type: 'f32', View: Float32Array },\n mat3x3h: { numElements: 12, align: 8, size: 24, pad: [3, 1], type: 'u16', View: Uint16Array },\n mat4x3f: { numElements: 16, align: 16, size: 64, pad: [3, 1], type: 'f32', View: Float32Array },\n mat4x3h: { numElements: 16, align: 8, size: 32, pad: [3, 1], type: 'u16', View: Uint16Array },\n mat2x4f: { numElements: 8, align: 16, size: 32, type: 'f32', View: Float32Array },\n mat2x4h: { numElements: 8, align: 8, size: 16, type: 'u16', View: Uint16Array },\n mat3x4f: { numElements: 12, align: 16, size: 48, pad: [3, 1], type: 'f32', View: Float32Array },\n mat3x4h: { numElements: 12, align: 8, size: 24, pad: [3, 1], type: 'u16', View: Uint16Array },\n mat4x4f: { numElements: 16, align: 16, size: 64, type: 'f32', View: Float32Array },\n mat4x4h: { numElements: 16, align: 8, size: 32, type: 'u16', View: Uint16Array },\n // Note: At least as of WGSL V1 you can not create a bool for uniform or storage.\n // You can only create one in an internal struct. But, this code generates\n // views of structs and it needs to not fail if the struct has a bool\n bool: { numElements: 0, align: 1, size: 0, type: 'bool', View: Uint32Array },\n});\nconst kWGSLTypeInfo = createTypeDefs({\n ...b$1,\n 'atomic<i32>': b$1.i32,\n 'atomic<u32>': b$1.u32,\n 'vec2<i32>': b$1.vec2i,\n 'vec2<u32>': b$1.vec2u,\n 'vec2<f32>': b$1.vec2f,\n 'vec2<f16>': b$1.vec2h,\n 'vec3<i32>': b$1.vec3i,\n 'vec3<u32>': b$1.vec3u,\n 'vec3<f32>': b$1.vec3f,\n 'vec3<f16>': b$1.vec3h,\n 'vec4<i32>': b$1.vec4i,\n 'vec4<u32>': b$1.vec4u,\n 'vec4<f32>': b$1.vec4f,\n 'vec4<f16>': b$1.vec4h,\n 'mat2x2<f32>': b$1.mat2x2f,\n 'mat2x2<f16>': b$1.mat2x2h,\n 'mat3x2<f32>': b$1.mat3x2f,\n 'mat3x2<f16>': b$1.mat3x2h,\n 'mat4x2<f32>': b$1.mat4x2f,\n 'mat4x2<f16>': b$1.mat4x2h,\n 'mat2x3<f32>': b$1.mat2x3f,\n 'mat2x3<f16>': b$1.mat2x3h,\n 'mat3x3<f32>': b$1.mat3x3f,\n 'mat3x3<f16>': b$1.mat3x3h,\n 'mat4x3<f32>': b$1.mat4x3f,\n 'mat4x3<f16>': b$1.mat4x3h,\n 'mat2x4<f32>': b$1.mat2x4f,\n 'mat2x4<f16>': b$1.mat2x4h,\n 'mat3x4<f32>': b$1.mat3x4f,\n 'mat3x4<f16>': b$1.mat3x4h,\n 'mat4x4<f32>': b$1.mat4x4f,\n 'mat4x4<f16>': b$1.mat4x4h,\n});\nconst kWGSLTypes = keysOf(kWGSLTypeInfo);\n\n/**\n * Set which intrinsic types to make views for.\n *\n * Example:\n *\n * Given a an array of intrinsics like this\n * `array<vec3, 200>`\n *\n * The default is to create a single `Float32Array(4 * 200)`\n * because creating 200 `Float32Array` views is not usually\n * what you want.\n *\n * If you do want individual views then you'd call\n * `setIntrinsicsToView(['vec3f'])` and now you get\n * an array of 200 `Float32Array`s.\n *\n * Note: `setIntrinsicsToView` always sets ALL types. The list you\n * pass it is the types you want views created for, all other types\n * will be reset to do the default. In other words\n *\n * ```js\n * setIntrinsicsToView(['vec3f'])\n * setIntrinsicsToView(['vec2f'])\n * ```\n *\n * Only `vec2f` will have views created. `vec3f` has been reset to the default by\n * the second call\n *\n * You can pass in `true` as the 2nd parameter to make it set which types\n * to flatten and all others will be set to have views created. For example\n * to expand all types would be `setIntrinsicsToView([], true)`. To expand\n * all except `f32` would be `setIntrinsicsToView(['f32'], true)`.\n *\n * To reset all types to the default call it with no arguments\n *\n * @param types array of types to make views for\n * @param flatten whether to flatten or expand the specified types.\n */\nfunction setIntrinsicsToView(types = [], flatten) {\n // we need to track what we've viewed because for example `vec3f` references\n // the same info as `vec3<f32>` so we'd set one and reset the other.\n const visited = new Set();\n for (const type of kWGSLTypes) {\n const info = kWGSLTypeInfo[type];\n if (!visited.has(info)) {\n visited.add(info);\n info.flatten = types.includes(type) ? flatten : !flatten;\n }\n }\n}\nsetIntrinsicsToView();\n// This needs to be fixed! 😱\nfunction getSizeOfTypeDef(typeDef) {\n const asArrayDef = typeDef;\n const elementType = asArrayDef.elementType;\n if (elementType) {\n return asArrayDef.size;\n /*\n if (isIntrinsic(elementType)) {\n const asIntrinsicDef = elementType as IntrinsicDefinition;\n const { align } = typeInfo[asIntrinsicDef.type];\n return roundUpToMultipleOf(typeDef.size, align) * asArrayDef.numElements;\n } else {\n return asArrayDef.numElements * getSizeOfTypeDef(elementType);\n }\n */\n }\n else {\n const asStructDef = typeDef;\n const numElements = asArrayDef.numElements || 1;\n if (asStructDef.fields) {\n return typeDef.size * numElements;\n }\n else {\n const asIntrinsicDef = typeDef;\n const { align } = kWGSLTypeInfo[asIntrinsicDef.type];\n return numElements > 1\n ? roundUpToMultipleOf(typeDef.size, align) * numElements\n : typeDef.size;\n }\n }\n}\n// If numElements is undefined this is NOT an array. If it is defined then it IS an array\n// Sizes for arrays are different than sizes for non-arrays. Example\n// a vec3f non array is Float32Array(3)\n// a vec3f array of 2 is Float32Array(4 * 2)\n// a vec3f array of 1 is Float32Array(4 * 1)\nfunction makeIntrinsicTypedArrayView(typeDef, buffer, baseOffset, numElements) {\n const { size, type } = typeDef;\n try {\n const { View, align, size: intrinsicSize } = kWGSLTypeInfo[type];\n const isArray = numElements !== undefined;\n const sizeInBytes = isArray\n ? roundUpToMultipleOf(size, align)\n : intrinsicSize;\n const baseNumElements = sizeInBytes / View.BYTES_PER_ELEMENT;\n const effectiveNumElements = isArray\n ? (numElements === 0\n ? (buffer.byteLength - baseOffset) / sizeInBytes\n : numElements)\n : 1;\n return new View(buffer, baseOffset, baseNumElements * effectiveNumElements);\n }\n catch {\n throw new Error(`unknown type: ${type}`);\n }\n}\nfunction isIntrinsic(typeDef) {\n return !typeDef.fields &&\n !typeDef.elementType;\n}\n/**\n * Creates a set of named TypedArray views on an ArrayBuffer. If you don't\n * pass in an ArrayBuffer, one will be created. If you're using an unsized\n * array then you must pass in your own arraybuffer\n *\n * Example:\n *\n * ```js\n * const code = `\n * struct Stuff {\n * direction: vec3f,\n * strength: f32,\n * matrix: mat4x4f,\n * };\n * @group(0) @binding(0) var<uniform> uni: Stuff;\n * `;\n * const defs = makeShaderDataDefinitions(code);\n * const views = makeTypedArrayViews(devs.uniforms.uni.typeDefinition);\n * ```\n *\n * views would effectively be\n *\n * ```js\n * views = {\n * direction: Float32Array(arrayBuffer, 0, 3),\n * strength: Float32Array(arrayBuffer, 3, 4),\n * matrix: Float32Array(arraybuffer, 4, 20),\n * };\n * ```\n *\n * You can use the views directly or you can use {@link setStructuredView}\n *\n * @param typeDef Definition of the various types of views.\n * @param arrayBuffer Optional ArrayBuffer to use (if one provided one will be created)\n * @param offset Optional offset in existing ArrayBuffer to start the views.\n * @returns A bunch of named TypedArray views and the ArrayBuffer\n */\nfunction makeTypedArrayViews(typeDef, arrayBuffer, offset) {\n const baseOffset = offset || 0;\n const buffer = arrayBuffer || new ArrayBuffer(getSizeOfTypeDef(typeDef));\n const makeViews = (typeDef, baseOffset) => {\n const asArrayDef = typeDef;\n const elementType = asArrayDef.elementType;\n if (elementType) {\n // TODO: Should be optional? Per Type? Depth set? Per field?\n // The issue is, if we have `array<vec4, 1000>` we don't likely\n // want 1000 `Float32Array(4)` views. We want 1 `Float32Array(1000 * 4)` view.\n // On the other hand, if we have `array<mat4x4, 10>` the maybe we do want\n // 10 `Float32Array(16)` views since you might want to do\n // `mat4.perspective(fov, aspect, near, far, foo.bar.arrayOf10Mat4s[3])`;\n if (isIntrinsic(elementType) && kWGSLTypeInfo[elementType.type].flatten) {\n return makeIntrinsicTypedArrayView(elementType, buffer, baseOffset, asArrayDef.numElements);\n }\n else {\n const { size } = getSizeAndAlignmentOfUnsizedArrayElementOfTypeDef(typeDef);\n const effectiveNumElements = asArrayDef.numElements === 0\n ? (buffer.byteLength - baseOffset) / size\n : asArrayDef.numElements;\n return range(effectiveNumElements, i => makeViews(elementType, baseOffset + size * i));\n }\n }\n else if (typeof typeDef === 'string') {\n throw Error('unreachable');\n }\n else {\n const fields = typeDef.fields;\n if (fields) {\n const views = {};\n for (const [name, { type, offset }] of Object.entries(fields)) {\n views[name] = makeViews(type, baseOffset + offset);\n }\n return views;\n }\n else {\n return makeIntrinsicTypedArrayView(typeDef, buffer, baseOffset);\n }\n }\n };\n return { views: makeViews(typeDef, baseOffset), arrayBuffer: buffer };\n}\n/**\n * Given a set of TypeArrayViews and matching JavaScript data\n * sets the content of the views.\n *\n * Example:\n *\n * ```js\n * const code = `\n * struct Stuff {\n * direction: vec3f,\n * strength: f32,\n * matrix: mat4x4f,\n * };\n * @group(0) @binding(0) var<uniform> uni: Stuff;\n * `;\n * const defs = makeShaderDataDefinitions(code);\n * const views = makeTypedArrayViews(devs.uniforms.uni.typeDefinition);\n *\n * setStructuredViews({\n * direction: [1, 2, 3],\n * strength: 45,\n * matrix: [\n * 1, 0, 0, 0,\n * 0, 1, 0, 0,\n * 0, 0, 1, 0,\n * 0, 0, 0, 1,\n * ],\n * });\n * ```\n *\n * The code above will set the various views, which all point to different\n * locations within the same array buffer.\n *\n * See {@link makeTypedArrayViews}.\n *\n * @param data The new values\n * @param views TypedArray views as returned from {@link makeTypedArrayViews}\n */\nfunction setStructuredView(data, views) {\n if (data === undefined) {\n return;\n }\n else if (isTypedArray(views)) {\n const view = views;\n if (view.length === 1 && typeof data === 'number') {\n view[0] = data;\n }\n else {\n if (Array.isArray(data[0]) || isTypedArray(data[0])) {\n // complete hack!\n // there's no type data here so let's guess based on the user's data\n const dataLen = data[0].length;\n const stride = dataLen === 3 ? 4 : dataLen;\n for (let i = 0; i < data.length; ++i) {\n const offset = i * stride;\n view.set(data[i], offset);\n }\n }\n else {\n view.set(data);\n }\n }\n }\n else if (Array.isArray(views)) {\n const asArray = views;\n data.forEach((newValue, ndx) => {\n setStructuredView(newValue, asArray[ndx]);\n });\n }\n else {\n const asViews = views;\n for (const [key, newValue] of Object.entries(data)) {\n const view = asViews[key];\n if (view) {\n setStructuredView(newValue, view);\n }\n }\n }\n}\n/**\n * Given a VariableDefinition, create matching TypedArray views\n *\n * @param varDef A VariableDefinition as returned from {@link makeShaderDataDefinitions}\n * @param arrayBuffer Optional ArrayBuffer for the views\n * @param offset Optional offset into the ArrayBuffer for the views\n * @returns TypedArray views for the various named fields of the structure as well\n * as a `set` function to make them easy to set, and the arrayBuffer\n *\n * ```js\n * const code = `\n * struct HSL {\n * hue: f32,\n * sat: f32,\n * lum: f32,\n * };\n * struct MyStorage {\n * colors: array<HSL, 4>,\n * brightness: f32,\n * kernel: array<f32, 9>,\n * };\n * @group(0) @binding(0) var<storage> myStorage: MyStorage;\n * `;\n * const defs = makeShaderDataDefinitions(code);\n * const myUniformValues = makeStructuredView(defs.storages.myStorage);\n *\n * myUniformValues.set({\n * colors: [\n * ,\n * ,\n * { hue: 0.5, sat: 1.0, lum: 0.5 }, // only set the 3rd color\n * ],\n * brightness: 0.8,\n * kernel: [\n * 1, 0, -1,\n * 2, 0, -2,\n * 1, 0, -1,\n * ],\n * });\n * ```\n *\n * data definition can come from `defs.uniforms.<nameOfUniform>`, `defs.storages.<nameOfStorage>`\n * and `defs.structs.<nameOfStruct>`.\n *\n * What this function does:\n *\n * 1. It creates an `ArrayBuffer` of the size equal to the definition passed in (unless you pass in an existing ArrayBuffer)\n *\n * 2. It makes `TypedArray` views of to match the definition.\n *\n * 3. It returns an object with the the `ArrayBuffer`, the TypedArray views, and a `set` function which is just a wrapper\n * for `setStructView` that passes in the views.\n *\n * For example: Given a data definition created by makeShaderDataDefinitions for this WGSL\n *\n * ```wgsl\n * struct Light {\n * lightWorldPosition: vec3f,\n * shininess: f32,\n * lightDirection: vec3f,\n * innerLimit: f32,\n * outerLimit: f32,\n * };\n * struct Uniforms {\n * normalMatrix: mat3x3f,\n * worldViewProjection: mat4x4f,\n * world: mat4x4f,\n * color: vec4f,\n * viewWorldPosition: vec3f,\n * lights: array<Light, 3>,\n * };\n * @group(0) @binding(0) var<uniform> myUniforms: Uniforms;\n * ```\n *\n * `makeStructuredView(defs.uniforms.myUniforms)` would return this\n *\n * ```js\n * const arrayBuffer = new ArrayBuffer(368)\n * const views = {\n * normalMatrix: new Float32Array(arrayBuffer, 0, 12),\n * worldViewProjection: new Float32Array(arrayBuffer, 48, 16),\n * world: new Float32Array(arrayBuffer, 112, 16),\n * color: new Float32Array(arrayBuffer, 176, 4),\n * viewWorldPosition: new Float32Array(arrayBuffer, 192, 3),\n * lights: [\n * {\n * lightWorldPosition: new Float32Array(arrayBuffer, 208, 3),\n * shininess: new Float32Array(arrayBuffer, 220, 1),\n * lightDirection: new Float32Array(arrayBuffer, 224, 3),\n * innerLimit: new Float32Array(arrayBuffer, 236, 1),\n * outerLimit: new Float32Array(arrayBuffer, 240, 1),\n * },\n * {\n * lightWorldPosition: new Float32Array(arrayBuffer, 256, 3),\n * shininess: new Float32Array(arrayBuffer, 268, 1),\n * lightDirection: new Float32Array(arrayBuffer, 272, 3),\n * innerLimit: new Float32Array(arrayBuffer, 284, 1),\n * outerLimit: new Float32Array(arrayBuffer, 288, 1),\n * },\n * {\n * lightWorldPosition: new Float32Array(arrayBuffer, 304, 3),\n * shininess: new Float32Array(arrayBuffer, 316, 1),\n * lightDirection: new Float32Array(arrayBuffer, 320, 3),\n * innerLimit: new Float32Array(arrayBuffer, 332, 1),\n * outerLimit: new Float32Array(arrayBuffer, 336, 1),\n * },\n * ],\n * mode: new Uint32Array(UniformsValues, 352, 1),\n * };\n * result = {\n * arrayBuffer,\n * views,\n * set(data: any) {\n * setStructuredView(data, views.views);\n * },\n * }\n * ```\n *\n * From this, you can see you can set the value in the array buffer for any field/member/property\n * directly. Example\n *\n * ```js\n * result.views.lights[2].lightDirection.set([7, 8, 9]);\n * result.views.lights[2].innerLimit[0] = 4;\n * ```\n *\n * `set` just takes a JS object and matches property names to the view names.\n *\n * ```js\n * result.set({\n * color: [1, 1, 0, 1],\n * viewWorldPosition: [12, 34, 56],\n * mode: 8,\n * });\n * ```\n *\n * Is equivalent to\n *\n * ```js\n * result.views.color.set([1, 1, 0, 1]);\n * result.views.worldViewPosition.set([12, 34, 56]);\n * result.views.mode[0] = 8;\n * ```\n *\n * Further, `set` is just a short cut for `setStructuredView` passing in the root\n * `result'views`.\n *\n * So, for example, if you want to set the light at index 2, this would work.\n *\n * ```js\n * setStructuredView({\n * lightWorldPosition: [1, 2, 3],\n * shininess: 4,\n * lightDirection: [5, 6, 7],\n * innerLimit: 8,\n * outerLimit: 9,\n * }, result.views.lights[2]);\n * ```\n */\nfunction makeStructuredView(varDef, arrayBuffer, offset = 0) {\n const asVarDef = varDef;\n const typeDef = asVarDef.group === undefined ? varDef : asVarDef.typeDefinition;\n const views = makeTypedArrayViews(typeDef, arrayBuffer, offset);\n return {\n ...views,\n set(data) {\n setStructuredView(data, views.views);\n },\n };\n}\nconst s_views = new WeakMap();\nfunction getViewsByCtor(arrayBuffer) {\n let viewsByCtor = s_views.get(arrayBuffer);\n if (!viewsByCtor) {\n viewsByCtor = new Map();\n s_views.set(arrayBuffer, viewsByCtor);\n }\n return viewsByCtor;\n}\nfunction getView(arrayBuffer, Ctor) {\n const viewsByCtor = getViewsByCtor(arrayBuffer);\n let view = viewsByCtor.get(Ctor);\n if (!view) {\n view = new Ctor(arrayBuffer);\n viewsByCtor.set(Ctor, view);\n }\n return view;\n}\n// Is this something like [1,2,3]?\nfunction isArrayLikeOfNumber(data) {\n return isTypedArray(data) || Array.isArray(data) && typeof data[0] === 'number';\n}\nfunction setIntrinsicFromArrayLikeOfNumber(typeDef, data, arrayBuffer, offset) {\n const asIntrinsicDefinition = typeDef;\n const type = kWGSLTypeInfo[asIntrinsicDefinition.type];\n const view = getView(arrayBuffer, type.View);\n const index = offset / view.BYTES_PER_ELEMENT;\n if (typeof data === 'number') {\n view[index] = data;\n }\n else {\n view.set(data, index);\n }\n}\n/**\n * Sets values on an existing array buffer from a TypeDefinition\n * @param typeDef A type definition provided by {@link makeShaderDataDefinitions}\n * @param data The source data\n * @param arrayBuffer The arrayBuffer who's data to set.\n * @param offset An offset in the arrayBuffer to start at.\n */\nfunction setTypedValues(typeDef, data, arrayBuffer, offset = 0) {\n const asArrayDef = typeDef;\n const elementType = asArrayDef.elementType;\n if (elementType) {\n // It's ArrayDefinition\n if (isIntrinsic(elementType)) {\n const asIntrinsicDef = elementType;\n if (isArrayLikeOfNumber(data)) {\n setIntrinsicFromArrayLikeOfNumber(asIntrinsicDef, data, arrayBuffer, offset);\n return;\n }\n }\n data.forEach((newValue, ndx) => {\n setTypedValues(elementType, newValue, arrayBuffer, offset + elementType.size * ndx);\n });\n return;\n }\n const asStructDef = typeDef;\n const fields = asStructDef.fields;\n if (fields) {\n // It's StructDefinition\n for (const [key, newValue] of Object.entries(data)) {\n const fieldDef = fields[key];\n if (fieldDef) {\n setTypedValues(fieldDef.type, newValue, arrayBuffer, offset + fieldDef.offset);\n }\n }\n }\n else {\n // It's IntrinsicDefinition\n setIntrinsicFromArrayLikeOfNumber(typeDef, data, arrayBuffer, offset);\n }\n}\n/**\n * Same as {@link setTypedValues} except it takes a {@link VariableDefinition}.\n * @param varDef A variable definition provided by {@link makeShaderDataDefinitions}\n * @param data The source data\n * @param arrayBuffer The arrayBuffer who's data to set.\n * @param offset An offset in the arrayBuffer to start at.\n */\nfunction setStructuredValues(varDef, data, arrayBuffer, offset = 0) {\n setTypedValues(varDef.typeDefinition, data, arrayBuffer, offset);\n}\nfunction getAlignmentOfTypeDef(typeDef) {\n const asArrayDef = typeDef;\n const elementType = asArrayDef.elementType;\n if (elementType) {\n return getAlignmentOfTypeDef(elementType);\n }\n const asStructDef = typeDef;\n const fields = asStructDef.fields;\n if (fields) {\n return Object.values(fields).reduce((max, { type }) => Math.max(max, getAlignmentOfTypeDef(type)), 0);\n }\n const { type } = typeDef;\n const { align } = kWGSLTypeInfo[type];\n return align;\n}\nfunction getSizeAndAlignmentOfUnsizedArrayElementOfTypeDef(typeDef) {\n const asArrayDef = typeDef;\n const elementType = asArrayDef.elementType;\n if (elementType) {\n const unalignedSize = elementType.size;\n const align = getAlignmentOfTypeDef(elementType);\n return {\n unalignedSize,\n align,\n size: roundUpToMultipleOf(unalignedSize, align),\n };\n }\n const asStructDef = typeDef;\n const fields = asStructDef.fields;\n if (fields) {\n const lastField = Object.values(fields).pop();\n if (lastField.type.size === 0) {\n return getSizeAndAlignmentOfUnsizedArrayElementOfTypeDef(lastField.type);\n }\n }\n return {\n size: 0,\n unalignedSize: 0,\n align: 1,\n };\n}\n/**\n * Returns the size, align, and unalignedSize of \"the\" unsized array element. Unsized arrays are only\n * allowed at the outer most level or the last member of a top level struct.\n *\n * Example:\n *\n * ```js\n * const code = `\n * struct Foo {\n * a: u32,\n * b: array<vec3f>,\n * };\n * @group(0) @binding(0) var<storage> f: Foo;\n * `;\n * const defs = makeShaderDataDefinitions(code);\n * const { size, align, unalignedSize } = getSizeAndAlignmentOfUnsizedArrayElement(\n * defs.storages.f);\n * // size = 16 (since you need to allocate 16 bytes per element)\n * // align = 16 (since vec3f needs to be aligned to 16 bytes)\n * // unalignedSize = 12 (since only 12 bytes are used for a vec3f)\n * ```\n *\n * Generally you only need size. Example:\n *\n * ```js\n * const code = `\n * struct Foo {\n * a: u32,\n * b: array<vec3f>,\n * };\n * @group(0) @binding(0) var<storage> f: Foo;\n * `;\n * const defs = makeShaderDataDefinitions(code);\n * const { size } = getSizeAndAlignmentOfUnsizedArrayElement(defs.storages.f);\n * const numElements = 10;\n * const views = makeStructuredViews(\n * defs.storages.f,\n * new ArrayBuffer(defs.storages.f.size + size * numElements));\n * ```\n *\n * @param varDef A variable definition provided by {@link makeShaderDataDefinitions}\n * @returns the size, align, and unalignedSize in bytes of the unsized array element in this type definition.\n * If there is no unsized array, size = 0.\n */\nfunction getSizeAndAlignmentOfUnsizedArrayElement(varDef) {\n const asVarDef = varDef;\n const typeDef = asVarDef.group === undefined ? varDef : asVarDef.typeDefinition;\n return getSizeAndAlignmentOfUnsizedArrayElementOfTypeDef(typeDef);\n}\n\nclass e{constructor(e,t){this.name=e,this.attributes=t,this.size=0;}get isArray(){return false}get isStruct(){return false}get isTemplate(){return false}get isPointer(){return false}getTypeName(){return this.name}}class t{constructor(e,t,n){this.name=e,this.type=t,this.attributes=n,this.offset=0,this.size=0;}get isArray(){return this.type.isArray}get isStruct(){return this.type.isStruct}get isTemplate(){return this.type.isTemplate}get align(){return this.type.isStruct?this.type.align:0}get members(){return this.type.isStruct?this.type.members:null}get format(){return this.type.isArray||this.type.isTemplate?this.type.format:null}get count(){return this.type.isArray?this.type.count:0}get stride(){return this.type.isArray?this.type.stride:this.size}}class n extends e{constructor(e,t){super(e,t),this.members=[],this.align=0,this.startLine=-1,this.endLine=-1,this.inUse=false;}get isStruct(){return true}}class s extends e{constructor(e,t){super(e,t),this.count=0,this.stride=0;}get isArray(){return true}getTypeName(){return `array<${this.format.getTypeName()}, ${this.count}>`}}class r extends e{constructor(e,t,n){super(e,n),this.format=t;}get isPointer(){return true}getTypeName(){return `&${this.format.getTypeName()}`}}class a extends e{constructor(e,t,n,s){super(e,n),this.format=t,this.access=s;}get isTemplate(){return true}getTypeName(){let e=this.name;if(null!==this.format){if('vec2'===e||'vec3'===e||'vec4'===e||'mat2x2'===e||'mat2x3'===e||'mat2x4'===e||'mat3x2'===e||'mat3x3'===e||'mat3x4'===e||'mat4x2'===e||'mat4x3'===e||'mat4x4'===e){if('f32'===this.format.name)return e+='f',e;if('i32'===this.format.name)return e+='i',e;if('u32'===this.format.name)return e+='u',e;if('bool'===this.format.name)return e+='b',e;if('f16'===this.format.name)return e+='h',e}e+=`<${this.format.name}>`;}else if('vec2'===e||'vec3'===e||'vec4'===e)return e;return e}}var i;(e=>{e[e.Uniform=0]='Uniform',e[e.Storage=1]='Storage',e[e.Texture=2]='Texture',e[e.Sampler=3]='Sampler',e[e.StorageTexture=4]='StorageTexture';})(i||(i={}));class o{constructor(e,t,n,s,r,a,i){this.name=e,this.type=t,this.group=n,this.binding=s,this.attributes=r,this.resourceType=a,this.access=i;}get isArray(){return this.type.isArray}get isStruct(){return this.type.isStruct}get isTemplate(){return this.type.isTemplate}get size(){return this.type.size}get align(){return this.type.isStruct?this.type.align:0}get members(){return this.type.isStruct?this.type.members:null}get format(){return this.type.isArray||this.type.isTemplate?this.type.format:null}get count(){return this.type.isArray?this.type.count:0}get stride(){return this.type.isArray?this.type.stride:this.size}}class l{constructor(e,t){this.name=e,this.type=t;}}class c{constructor(e,t,n,s){this.name=e,this.type=t,this.locationType=n,this.location=s,this.interpolation=null;}}class u{constructor(e,t,n,s){this.name=e,this.type=t,this.locationType=n,this.location=s;}}class h{constructor(e,t,n,s){this.name=e,this.type=t,this.attributes=n,this.id=s;}}class f{constructor(e,t,n){this.name=e,this.type=t,this.attributes=n;}}class p{constructor(e,t=null,n){this.stage=null,this.inputs=[],this.outputs=[],this.arguments=[],this.returnType=null,this.resources=[],this.overrides=[],this.startLine=-1,this.endLine=-1,this.inUse=false,this.calls=new Set,this.name=e,this.stage=t,this.attributes=n;}}class d{constructor(){this.vertex=[],this.fragment=[],this.compute=[];}}const m=new Float32Array(1),_=new Int32Array(m.buffer),g=new Uint16Array(1);function x(e){m[0]=e;const t=_[0],n=t>>31&1;let s=t>>23&255,r=8388607&t;if(255===s)return g[0]=n<<15|31744|(0!==r?512:0),g[0];if(0===s){if(0===r)return g[0]=n<<15,g[0];r|=8388608;let e=113;for(;!(8388608&r);)r<<=1,e--;return s=127-e,r&=8388607,s>0?(r=(r>>126-s)+(r>>127-s&1),g[0]=n<<15|s<<10|r>>13,g[0]):(g[0]=n<<15,g[0])}return s=s-127+15,s>=31?(g[0]=n<<15|31744,g[0]):s<=0?s<-10?(g[0]=n<<15,g[0]):(r=(8388608|r)>>1-s,g[0]=n<<15|r>>13,g[0]):(r>>=13,g[0]=n<<15|s<<10|r,g[0])}const y=new Uint32Array(1),b=new Float32Array(y.buffer,0,1);function v(e){const t=112+(e>>6&31)<<23|(63&e)<<17;return y[0]=t,b[0]}function w(e,t,n,s,r,a,i,o,l){const c=s*(i>>=r)*(a>>=r)+n*i+t*o;switch(l){case 'r8unorm':return [k(e,c,'8unorm',1)[0]];case 'r8snorm':return [k(e,c,'8snorm',1)[0]];case 'r8uint':return [k(e,c,'8uint',1)[0]];case 'r8sint':return [k(e,c,'8sint',1)[0]];case 'rg8unorm':{const t=k(e,c,'8unorm',2);return [t[0],t[1]]}case 'rg8snorm':{const t=k(e,c,'8snorm',2);return [t[0],t[1]]}case 'rg8uint':{const t=k(e,c,'8uint',2);return [t[0],t[1]]}case 'rg8sint':{const t=k(e,c,'8sint',2);return [t[0],t[1]]}case 'rgba8unorm-srgb':case 'rgba8unorm':{const t=k(e,c,'8unorm',4);return [t[0],t[1],t[2],t[3]]}case 'rgba8snorm':{const t=k(e,c,'8snorm',4);return [t[0],t[1],t[2],t[3]]}case 'rgba8uint':{const t=k(e,c,'8uint',4);return [t[0],t[1],t[2],t[3]]}case 'rgba8sint':{const t=k(e,c,'8sint',4);return [t[0],t[1],t[2],t[3]]}case 'bgra8unorm-srgb':case 'bgra8unorm':{const t=k(e,c,'8unorm',4);return [t[2],t[1],t[0],t[3]]}case 'r16uint':return [k(e,c,'16uint',1)[0]];case 'r16sint':return [k(e,c,'16sint',1)[0]];case 'r16float':return [k(e,c,'16float',1)[0]];case 'rg16uint':{const t=k(e,c,'16uint',2);return [t[0],t[1]]}case 'rg16sint':{const t=k(e,c,'16sint',2);return [t[0],t[1]]}case 'rg16float':{const t=k(e,c,'16float',2);return [t[0],t[1]]}case 'rgba16uint':{const t=k(e,c,'16uint',4);return [t[0],t[1],t[2],t[3]]}case 'rgba16sint':{const t=k(e,c,'16sint',4);return [t[0],t[1],t[2],t[3]]}case 'rgba16float':{const t=k(e,c,'16float',4);return [t[0],t[1],t[2],t[3]]}case 'r32uint':return [k(e,c,'32uint',1)[0]];case 'r32sint':return [k(e,c,'32sint',1)[0]];case 'depth16unorm':case 'depth24plus':case 'depth24plus-stencil8':case 'depth32float':case 'depth32float-stencil8':case 'r32float':return [k(e,c,'32float',1)[0]];case 'rg32uint':{const t=k(e,c,'32uint',2);return [t[0],t[1]]}case 'rg32sint':{const t=k(e,c,'32sint',2);return [t[0],t[1]]}case 'rg32float':{const t=k(e,c,'32float',2);return [t[0],t[1]]}case 'rgba32uint':{const t=k(e,c,'32uint',4);return [t[0],t[1],t[2],t[3]]}case 'rgba32sint':{const t=k(e,c,'32sint',4);return [t[0],t[1],t[2],t[3]]}case 'rgba32float':{const t=k(e,c,'32float',4);return [t[0],t[1],t[2],t[3]]}case 'rg11b10ufloat':{const t=new Uint32Array(e.buffer,c,1)[0],n=(4192256&t)>>11,s=(4290772992&t)>>22;return [v(2047&t),v(n),function(e){const t=112+(e>>5&31)<<23|(31&e)<<18;return y[0]=t,b[0]}(s),1]}}return null}function k(e,t,n,s){const r=[0,0,0,0];for(let c=0;c<s;++c)switch(n){case '8unorm':r[c]=e[t]/255,t++;break;case '8snorm':r[c]=e[t]/255*2-1,t++;break;case '8uint':r[c]=e[t],t++;break;case '8sint':r[c]=e[t]-127,t++;break;case '16uint':r[c]=e[t]|e[t+1]<<8,t+=2;break;case '16sint':r[c]=(e[t]|e[t+1]<<8)-32768,t+=2;break;case '16float':r[c]=(a=e[t]|e[t+1]<<8,i=undefined,o=undefined,l=undefined,i=(32768&a)>>15,l=1023&a,0==(o=(31744&a)>>10)?(i?-1:1)*Math.pow(2,-14)*(l/Math.pow(2,10)):31==o?l?NaN:1/0*(i?-1:1):(i?-1:1)*Math.pow(2,o-15)*(1+l/Math.pow(2,10))),t+=2;break;case '32uint':case '32sint':r[c]=e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24,t+=4;break;case '32float':r[c]=new Float32Array(e.buffer,t,1)[0],t+=4;}var a,i,o,l;return r}function I(e,t,n,s,r){for(let a=0;a<s;++a)switch(n){case '8unorm':e[t]=255*r[a],t++;break;case '8snorm':e[t]=.5*(r[a]+1)*255,t++;break;case '8uint':e[t]=r[a],t++;break;case '8sint':e[t]=r[a]+127,t++;break;case '16uint':new Uint16Array(e.buffer,t,1)[0]=r[a],t+=2;break;case '16sint':new Int16Array(e.buffer,t,1)[0]=r[a],t+=2;break;case '16float':{const n=x(r[a]);new Uint16Array(e.buffer,t,1)[0]=n,t+=2;break}case '32uint':new Uint32Array(e.buffer,t,1)[0]=r[a],t+=4;break;case '32sint':new Int32Array(e.buffer,t,1)[0]=r[a],t+=4;break;case '32float':new Float32Array(e.buffer,t,1)[0]=r[a],t+=4;}return r}const T={r8unorm:{bytesPerBlock:1,blockWidth:1,blockHeight:1,isCompressed:false,channels:1},r8snorm:{bytesPerBlock:1,blockWidth:1,blockHeight:1,isCompressed:false,channels:1},r8uint:{bytesPerBlock:1,blockWidth:1,blockHeight:1,isCompressed:false,channels:1},r8sint:{bytesPerBlock:1,blockWidth:1,blockHeight:1,isCompressed:false,channels:1},rg8unorm:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:false,channels:2},rg8snorm:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:false,channels:2},rg8uint:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:false,channels:2},rg8sint:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:false,channels:2},rgba8unorm:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},'rgba8unorm-srgb':{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},rgba8snorm:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},rgba8uint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},rgba8sint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},bgra8unorm:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},'bgra8unorm-srgb':{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},r16uint:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:false,channels:1},r16sint:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:false,channels:1},r16float:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:false,channels:1},rg16uint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:2},rg16sint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:2},rg16float:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:2},rgba16uint:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},rgba16sint:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},rgba16float:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},r32uint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:1},r32sint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:1},r32float:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:1},rg32uint:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:false,channels:2},rg32sint:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:false,channels:2},rg32float:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:false,channels:2},rgba32uint:{bytesPerBlock:16,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},rgba32sint:{bytesPerBlock:16,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},rgba32float:{bytesPerBlock:16,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},rgb10a2uint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},rgb10a2unorm:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},rg11b10ufloat:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},stencil8:{bytesPerBlock:1,blockWidth:1,blockHeight:1,isCompressed:false,isDepthStencil:true,hasDepth:false,hasStencil:true,channels:1},depth16unorm:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:false,isDepthStencil:true,hasDepth:true,hasStencil:false,channels:1},depth24plus:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,isDepthStencil:true,hasDepth:true,hasStencil:false,depthOnlyFormat:'depth32float',channels:1},'depth24plus-stencil8':{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:false,isDepthStencil:true,hasDepth:true,hasStencil:true,depthOnlyFormat:'depth32float',channels:1},depth32float:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,isDepthStencil:true,hasDepth:true,hasStencil:false,channels:1},'depth32float-stencil8':{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:false,isDepthStencil:true,hasDepth:true,hasStencil:true,stencilOnlyFormat:'depth32float',channels:1},rgb9e5ufloat:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:false,channels:4},'bc1-rgba-unorm':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'bc1-rgba-unorm-srgb':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'bc2-rgba-unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'bc2-rgba-unorm-srgb':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'bc3-rgba-unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'bc3-rgba-unorm-srgb':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'bc4-r-unorm':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:true,channels:1},'bc4-r-snorm':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:true,channels:1},'bc5-rg-unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:2},'bc5-rg-snorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:2},'bc6h-rgb-ufloat':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'bc6h-rgb-float':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'bc7-rgba-unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'bc7-rgba-unorm-srgb':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'etc2-rgb8unorm':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'etc2-rgb8unorm-srgb':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'etc2-rgb8a1unorm':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'etc2-rgb8a1unorm-srgb':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'etc2-rgba8unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'etc2-rgba8unorm-srgb':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'eac-r11unorm':{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:true,channels:1},'eac-r11snorm':{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:true,channels:1},'eac-rg11unorm':{bytesPerBlock:16,blockWidth:1,blockHeight:1,isCompressed:true,channels:2},'eac-rg11snorm':{bytesPerBlock:16,blockWidth:1,blockHeight:1,isCompressed:true,channels:2},'astc-4x4-unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'astc-4x4-unorm-srgb':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:true,channels:4},'astc-5x4-unorm':{bytesPerBlock:16,blockWidth:5,blockHeight:4,isCompressed:true,channels:4},'astc-5x4-unorm-srgb':{bytesPerBlock:16,blockWidth:5,blockHeight:4,isCompressed:true,channels:4},'astc-5x5-unorm':{bytesPerBlock:16,blockWidth:5,blockHeight:5,isCompressed:true,channels:4},'astc-5x5-unorm-srgb':{bytesPerBlock:16,blockWidth:5,blockHeight:5,isCompressed:true,channels:4},'astc-6x5-unorm':{bytesPerBlock:16,blockWidth:6,blockHeight:5,isCompressed:true,channels:4},'astc-6x5-unorm-srgb':{bytesPerBlock:16,blockWidth:6,blockHeight:5,isCompressed:true,channels:4},'astc-6x6-unorm':{bytesPerBlock:16,blockWidth:6,blockHeight:6,isCompressed:true,channels:4},'astc-6x6-unorm-srgb':{bytesPerBlock:16,blockWidth:6,blockHeight:6,isCompressed:true,channels:4},'astc-8x5-unorm':{bytesPerBlock:16,blockWidth:8,blockHeight:5,isCompressed:true,channels:4},'astc-8x5-unorm-srgb':{bytesPerBlock:16,blockWidth:8,blockHeight:5,isCompressed:true,channels:4},'astc-8x6-unorm':{bytesPerBlock:16,blockWidth:8,blockHeight:6,isCompressed:true,channels:4},'astc-8x6-unorm-srgb':{bytesPerBlock:16,blockWidth:8,blockHeight:6,isCompressed:true,channels:4},'astc-8x8-unorm':{bytesPerBlock:16,blockWidth:8,blockHeight:8,isCompressed:true,channels:4},'astc-8x8-unorm-srgb':{bytesPerBlock:16,blockWidth:8,blockHeight:8,isCompressed:true,channels:4},'astc-10x5-unorm':{bytesPerBlock:16,blockWidth:10,blockHeight:5,isCompressed:true,channels:4},'astc-10x5-unorm-srgb':{bytesPerBlock:16,blockWidth:10,blockHeight:5,isCompressed:true,channels:4},'astc-10x6-unorm':{bytesPerBlock:16,blockWidth:10,blockHeight:6,isCompressed:true,channels:4},'astc-10x6-unorm-srgb':{bytesPerBlock:16,blockWidth:10,blockHeight:6,isCompressed:true,channels:4},'astc-10x8-unorm':{bytesPerBlock:16,blockWidth:10,blockHeight:8,isCompressed:true,channels:4},'astc-10x8-unorm-srgb':{bytesPerBlock:16,blockWidth:10,blockHeight:8,isCompressed:true,channels:4},'astc-10x10-unorm':{bytesPerBlock:16,blockWidth:10,blockHeight:10,isCompressed:true,channels:4},'astc-10x10-unorm-srgb':{bytesPerBlock:16,blockWidth:10,blockHeight:10,isCompressed:true,channels:4},'astc-12x10-unorm':{bytesPerBlock:16,blockWidth:12,blockHeight:10,isCompressed:true,channels:4},'astc-12x10-unorm-srgb':{bytesPerBlock:16,blockWidth:12,blockHeight:10,isCompressed:true,channels:4},'astc-12x12-unorm':{bytesPerBlock:16,blockWidth:12,blockHeight:12,isCompressed:true,channels:4},'astc-12x12-unorm-srgb':{bytesPerBlock:16,blockWidth:12,blockHeight:12,isCompressed:true,channels:4}};class S{constructor(){this.id=S._id++,this.line=0;}get isAstNode(){return true}get astNodeType(){return ''}search(e){e(this);}searchBlock(e,t){if(e){t(A.instance);for(const n of e)n instanceof Array?this.searchBlock(n,t):n.search(t);t(E.instance);}}constEvaluate(e,t){throw new Error('Cannot evaluate node')}constEvaluateString(e){return this.constEvaluate(e).toString()}}S._id=0;class A extends S{}A.instance=new A;class E extends S{}E.instance=new E;const $=new Set(['all','all','any','select','arrayLength','abs','acos','acosh','asin','asinh','atan','atanh','atan2','ceil','clamp','cos','cosh','countLeadingZeros','countOneBits','countTrailingZeros','cross','degrees','determinant','distance','dot','dot4U8Packed','dot4I8Packed','exp','exp2','extractBits','faceForward','firstLeadingBit','firstTrailingBit','floor','fma','fract','frexp','insertBits','inverseSqrt','ldexp','length','log','log2','max','min','mix','modf','normalize','pow','quantizeToF16','radians','reflect','refract','reverseBits','round','saturate','sign','sin','sinh','smoothStep','sqrt','step','tan','tanh','transpose','trunc','dpdx','dpdxCoarse','dpdxFine','dpdy','dpdyCoarse','dpdyFine','fwidth','fwidthCoarse','fwidthFine','textureDimensions','textureGather','textureGatherCompare','textureLoad','textureNumLayers','textureNumLevels','textureNumSamples','textureSample','textureSampleBias','textureSampleCompare','textureSampleCompareLevel','textureSampleGrad','textureSampleLevel','textureSampleBaseClampToEdge','textureStore','atomicLoad','atomicStore','atomicAdd','atomicSub','atomicMax','atomicMin','atomicAnd','atomicOr','atomicXor','atomicExchange','atomicCompareExchangeWeak','pack4x8snorm','pack4x8unorm','pack4xI8','pack4xU8','pack4x8Clamp','pack4xU8Clamp','pack2x16snorm','pack2x16unorm','pack2x16float','unpack4x8snorm','unpack4x8unorm','unpack4xI8','unpack4xU8','unpack2x16snorm','unpack2x16unorm','unpack2x16float','storageBarrier','textureBarrier','workgroupBarrier','workgroupUniformLoad','subgroupAdd','subgroupExclusiveAdd','subgroupInclusiveAdd','subgroupAll','subgroupAnd','subgroupAny','subgroupBallot','subgroupBroadcast','subgroupBroadcastFirst','subgroupElect','subgroupMax','subgroupMin','subgroupMul','subgroupExclusiveMul','subgroupInclusiveMul','subgroupOr','subgroupShuffle','subgroupShuffleDown','subgroupShuffleUp','subgroupShuffleXor','subgroupXor','quadBroadcast','quadSwapDiagonal','quadSwapX','quadSwapY']);class L extends S{constructor(){super();}}class C extends L{constructor(e,t,n,s,r,a){super(),this.calls=new Set,this.name=e,this.args=t,this.returnType=n,this.body=s,this.startLine=r,this.endLine=a;}get astNodeType(){return 'function'}search(e){if(this.attributes)for(const t of this.attributes)e(t);e(this);for(const t of this.args)e(t);this.searchBlock(this.body,e);}}class D extends L{constructor(e){super(),this.expression=e;}get astNodeType(){return 'staticAssert'}search(e){this.expression.search(e);}}class N extends L{constructor(e,t){super(),this.condition=e,this.body=t;}get astNodeType(){return 'while'}search(e){this.condition.search(e),this.searchBlock(this.body,e);}}class V extends L{constructor(e,t){super(),this.body=e,this.loopId=t;}get astNodeType(){return 'continuing'}search(e){this.searchBlock(this.body,e);}}class O extends L{constructor(e,t,n,s){super(),this.init=e,this.condition=t,this.increment=n,this.body=s;}get astNodeType(){return 'for'}search(e){var t,n,s;null===(t=this.init)||undefined===t||t.search(e),null===(n=this.condition)||undefined===n||n.search(e),null===(s=this.increment)||undefined===s||s.search(e),this.searchBlock(this.body,e);}}class B extends L{constructor(e,t,n,s,r){super(),this.attributes=null,this.name=e,this.type=t,this.storage=n,this.access=s,this.value=r;}get astNodeType(){return 'var'}search(e){var t;e(this),null===(t=this.value)||undefined===t||t.search(e);}}class F extends L{constructor(e,t,n){super(),this.attributes=null,this.name=e,this.type=t,this.value=n;}get astNodeType(){return 'override'}search(e){var t;null===(t=this.value)||undefined===t||t.search(e);}}class M extends L{constructor(e,t,n,s,r){super(),this.attributes=null,this.name=e,this.type=t,this.storage=n,this.access=s,this.value=r;}get astNodeType(){return 'let'}search(e){var t;e(this),null===(t=this.value)||undefined===t||t.search(e);}}class U extends L{constructor(e,t,n,s,r){super(),this.attributes=null,this.name=e,this.type=t,this.storage=n,this.access=s,this.value=r;}get astNodeType(){return 'const'}constEvaluate(e,t){return this.value.constEvaluate(e,t)}search(e){var t;e(this),null===(t=this.value)||undefined===t||t.search(e);}}var P,W,q,H;(e=>{e.increment='++',e.decrement='--';})(P||(P={})),(e=>{e.parse=function(t){const n=t;if('parse'==n)throw new Error('Invalid value for IncrementOperator');return e[n]};})(P||(P={}));class z extends L{constructor(e,t){super(),this.operator=e,this.variable=t;}get astNodeType(){return 'increment'}search(e){this.variable.search(e);}}(e=>{e.assign='=',e.addAssign='+=',e.subtractAssin='-=',e.multiplyAssign='*=',e.divideAssign='/=',e.moduloAssign='%=',e.andAssign='&=',e.orAssign='|=',e.xorAssign='^=',e.shiftLeftAssign='<<=',e.shiftRightAssign='>>=';})(W||(W={})),(e=>{e.parse=function(e){const t=e;if('parse'==t)throw new Error('Invalid value for AssignOperator');return t};})(W||(W={}));class R extends L{constructor(e,t,n){super(),this.operator=e,this.variable=t,this.value=n;}get astNodeType(){return 'assign'}search(e){this.variable.search(e),this.value.search(e);}}class G extends L{constructor(e,t){super(),this.name=e,this.args=t;}get astNodeType(){return 'call'}isBuiltin(){return $.has(this.name)}search(e){for(const t of this.args)t.search(e);e(this);}}class X extends L{constructor(e,t){super(),this.body=e,this.continuing=t;}get astNodeType(){return 'loop'}}class j extends L{constructor(e,t){super(),this.condition=e,this.cases=t;}get astNodeType(){return 'switch'}}class Z extends L{constructor(e,t,n,s){super(),this.condition=e,this.body=t,this.elseif=n,this.else=s;}get astNodeType(){return 'if'}search(e){this.condition.search(e),this.searchBlock(this.body,e),this.searchBlock(this.elseif,e),this.searchBlock(this.else,e);}}class Q extends L{constructor(e){super(),this.value=e;}get astNodeType(){return 'return'}search(e){var t;null===(t=this.value)||undefined===t||t.search(e);}}class Y extends L{constructor(e){super(),this.name=e;}get astNodeType(){return 'enable'}}class K extends L{constructor(e){super(),this.extensions=e;}get astNodeType(){return 'requires'}}class J extends L{constructor(e,t){super(),this.severity=e,this.rule=t;}get astNodeType(){return 'diagnostic'}}class ee extends L{constructor(e,t){super(),this.name=e,this.type=t;}get astNodeType(){return 'alias'}}class te extends L{constructor(){super();}get astNodeType(){return 'discard'}}class ne extends L{constructor(){super(),this.condition=null,this.loopId=-1;}get astNodeType(){return 'break'}}class se extends L{constructor(){super(),this.loopId=-1;}get astNodeType(){return 'continue'}}class re extends L{constructor(e){super(),this.attributes=null,this.name=e;}get astNodeType(){return 'type'}get isStruct(){return false}get isArray(){return false}static maxFormatType(e){let t=e[0];if('f32'===t.name)return t;for(let n=1;n<e.length;++n){const s=re._priority.get(t.name);re._priority.get(e[n].name)<s&&(t=e[n]);}return 'x32'===t.name?re.i32:t}getTypeName(){return this.name}}re.x32=new re('x32'),re.f32=new re('f32'),re.i32=new re('i32'),re.u32=new re('u32'),re.f16=new re('f16'),re.bool=new re('bool'),re.void=new re('void'),re._priority=new Map([['f32',0],['f16',1],['u32',2],['i32',3],['x32',3]]);class ae extends re{constructor(e){super(e);}}class ie extends re{constructor(e,t,n,s){super(e),this.members=t,this.startLine=n,this.endLine=s;}get astNodeType(){return 'struct'}get isStruct(){return true}getMemberIndex(e){for(let t=0;t<this.members.length;t++)if(this.members[t].name==e)return t;return -1}search(e){for(const t of this.members)e(t);}}class oe extends re{constructor(e,t,n){super(e),this.format=t,this.access=n;}get astNodeType(){return 'template'}getTypeName(){let e=this.name;if(null!==this.format){if('vec2'===e||'vec3'===e||'vec4'===e||'mat2x2'===e||'mat2x3'===e||'mat2x4'===e||'mat3x2'===e||'mat3x3'===e||'mat3x4'===e||'mat4x2'===e||'mat4x3'===e||'mat4x4'===e){if('f32'===this.format.name)return e+='f',e;if('i32'===this.format.name)return e+='i',e;if('u32'===this.format.name)return e+='u',e;if('bool'===this.format.name)return e+='b',e;if('f16'===this.format.name)return e+='h',e}e+=`<${this.format.name}>`;}else if('vec2'===e||'vec3'===e||'vec4'===e)return e;return e}}oe.vec2f=new oe('vec2',re.f32,null),oe.vec3f=new oe('vec3',re.f32,null),oe.vec4f=new oe('vec4',re.f32,null),oe.vec2i=new oe('vec2',re.i32,null),oe.vec3i=new oe('vec3',re.i32,null),oe.vec4i=new oe('vec4',re.i32,null),oe.vec2u=new oe('vec2',re.u32,null),oe.vec3u=new oe('vec3',re.u32,null),oe.vec4u=new oe('vec4',re.u32,null),oe.vec2h=new oe('vec2',re.f16,null),oe.vec3h=new oe('vec3',re.f16,null),oe.vec4h=new oe('vec4',re.f16,null),oe.vec2b=new oe('vec2',re.bool,null),oe.vec3b=new oe('vec3',re.bool,null),oe.vec4b=new oe('vec4',re.bool,null),oe.mat2x2f=new oe('mat2x2',re.f32,null),oe.mat2x3f=new oe('mat2x3',re.f32,null),oe.mat2x4f=new oe('mat2x4',re.f32,null),oe.mat3x2f=new oe('mat3x2',re.f32,null),oe.mat3x3f=new oe('mat3x3',re.f32,null),oe.mat3x4f=new oe('mat3x4',re.f32,null),oe.mat4x2f=new oe('mat4x2',re.f32,null),oe.mat4x3f=new oe('mat4x3',re.f32,null),oe.mat4x4f=new oe('mat4x4',re.f32,null),oe.mat2x2h=new oe('mat2x2',re.f16,null),oe.mat2x3h=new oe('mat2x3',re.f16,null),oe.mat2x4h=new oe('mat2x4',re.f16,null),oe.mat3x2h=new oe('mat3x2',re.f16,null),oe.mat3x3h=new oe('mat3x3',re.f16,null),oe.mat3x4h=new oe('mat3x4',re.f16,null),oe.mat4x2h=new oe('mat4x2',re.f16,null),oe.mat4x3h=new oe('mat4x3',re.f16,null),oe.mat4x4h=new oe('mat4x4',re.f16,null),oe.mat2x2i=new oe('mat2x2',re.i32,null),oe.mat2x3i=new oe('mat2x3',re.i32,null),oe.mat2x4i=new oe('mat2x4',re.i32,null),oe.mat3x2i=new oe('mat3x2',re.i32,null),oe.mat3x3i=new oe('mat3x3',re.i32,null),oe.mat3x4i=new oe('mat3x4',re.i32,null),oe.mat4x2i=new oe('mat4x2',re.i32,null),oe.mat4x3i=new oe('mat4x3',re.i32,null),oe.mat4x4i=new oe('mat4x4',re.i32,null),oe.mat2x2u=new oe('mat2x2',re.u32,null),oe.mat2x3u=new oe('mat2x3',re.u32,null),oe.mat2x4u=new oe('mat2x4',re.u32,null),oe.mat3x2u=new oe('mat3x2',re.u32,null),oe.mat3x3u=new oe('mat3x3',re.u32,null),oe.mat3x4u=new oe('mat3x4',re.u32,null),oe.mat4x2u=new oe('mat4x2',re.u32,null),oe.mat4x3u=new oe('mat4x3',re.u32,null),oe.mat4x4u=new oe('mat4x4',re.u32,null);class le extends re{constructor(e,t,n,s){super(e),this.storage=t,this.type=n,this.access=s;}get astNodeType(){return 'pointer'}}class ce extends re{constructor(e,t,n,s){super(e),this.attributes=t,this.format=n,this.count=s;}get astNodeType(){return 'array'}get isArray(){return true}}class ue extends re{constructor(e,t,n){super(e),this.format=t,this.access=n;}get astNodeType(){return 'sampler'}}class he extends S{constructor(){super(),this.postfix=null;}}class fe extends he{constructor(e){super(),this.value=e;}get astNodeType(){return 'stringExpr'}toString(){return this.value}constEvaluateString(){return this.value}}class pe extends he{constructor(e,t){super(),this.type=e,this.args=t;}get astNodeType(){return 'createExpr'}search(e){if(e(this),this.args)for(const t of this.args)t.search(e);}constEvaluate(e,t){return t&&(t[0]=this.type),e.evalExpression(this,e.context)}}class de extends he{constructor(e,t){super(),this.cachedReturnValue=null,this.name=e,this.args=t;}get astNodeType(){return 'callExpr'}setCachedReturnValue(e){this.cachedReturnValue=e;}get isBuiltin(){return $.has(this.name)}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){for(const t of this.args)t.search(e);e(this);}}class me extends he{constructor(e){super(),this.name=e;}get astNodeType(){return 'varExpr'}search(e){e(this),this.postfix&&this.postfix.search(e);}constEvaluate(e,t){return e.evalExpression(this,e.context)}}class _e extends he{constructor(e,t){super(),this.name=e,this.initializer=t;}get astNodeType(){return 'constExpr'}constEvaluate(e,t){if(this.initializer){const t=e.evalExpression(this.initializer,e.context);return null!==t&&this.postfix?t.getSubData(e,this.postfix,e.context):t}return null}search(e){this.initializer.search(e);}}class ge extends he{constructor(e,t){super(),this.value=e,this.type=t;}get astNodeType(){return 'literalExpr'}constEvaluate(e,t){return undefined!==t&&(t[0]=this.type),this.value}get isScalar(){return this.value instanceof Oe}get isVector(){return this.value instanceof Fe||this.value instanceof Me}get scalarValue(){return this.value instanceof Oe?this.value.value:(console.error('Value is not scalar.'),0)}get vectorValue(){return this.value instanceof Fe||this.value instanceof Me?this.value.data:(console.error('Value is not a vector or matrix.'),new Float32Array(0))}}class xe extends he{constructor(e,t){super(),this.type=e,this.value=t;}get astNodeType(){return 'bitcastExpr'}search(e){this.value.search(e);}}class be extends he{constructor(e){super(),this.index=e;}search(e){this.index.search(e);}}class ve extends he{constructor(){super();}}class we extends ve{constructor(e,t){super(),this.operator=e,this.right=t;}get astNodeType(){return 'unaryOp'}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){this.right.search(e);}}class ke extends ve{constructor(e,t,n){super(),this.operator=e,this.left=t,this.right=n;}get astNodeType(){return 'binaryOp'}_getPromotedType(e,t){return e.name===t.name?e:'f32'===e.name||'f32'===t.name?re.f32:'u32'===e.name||'u32'===t.name?re.u32:re.i32}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){this.left.search(e),this.right.search(e);}}class Ie extends S{constructor(e){super(),this.body=e;}}class Te extends he{constructor(){super();}get astNodeType(){return 'default'}}class Se extends Ie{constructor(e,t){super(t),this.selectors=e;}get astNodeType(){return 'case'}search(e){this.searchBlock(this.body,e);}}class Ae extends Ie{constructor(e){super(e);}get astNodeType(){return 'default'}search(e){this.searchBlock(this.body,e);}}class Ee extends S{constructor(e,t,n){super(),this.name=e,this.type=t,this.attributes=n;}get astNodeType(){return 'argument'}}class $e extends S{constructor(e,t){super(),this.condition=e,this.body=t;}get astNodeType(){return 'elseif'}search(e){this.condition.search(e),this.searchBlock(this.body,e);}}class Le extends S{constructor(e,t,n){super(),this.name=e,this.type=t,this.attributes=n;}get astNodeType(){return 'member'}}class Ce extends S{constructor(e,t){super(),this.name=e,this.value=t;}get astNodeType(){return 'attribute'}}class De{constructor(e,t){this.parent=null,this.typeInfo=e,this.parent=t,this.id=De._id++;}clone(){throw `Clone: Not implemented for ${this.constructor.name}`}setDataValue(e,t,n,s){console.error(`SetDataValue: Not implemented for ${this.constructor.name}`);}getSubData(e,t,n){return console.error(`GetDataValue: Not implemented for ${this.constructor.name}`),null}toString(){return `<${this.typeInfo.getTypeName()}>`}}De._id=0;class Ne extends De{constructor(){super(new e('void',null),null);}toString(){return 'void'}}Ne.void=new Ne;class Ve extends De{constructor(e){super(new r('pointer',e.typeInfo,null),null),this.reference=e;}clone(){return this}setDataValue(e,t,n,s){this.reference.setDataValue(e,t,n,s);}getSubData(e,t,n){return t?this.reference.getSubData(e,t,n):this}toString(){return `&${this.reference.toString()}`}}class Oe extends De{constructor(e,t,n=null){super(t,n),e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array?this.data=e:'x32'===this.typeInfo.name?e-Math.floor(e)!=0?this.data=new Float32Array([e]):this.data=e>=0?new Uint32Array([e]):new Int32Array([e]):'i32'===this.typeInfo.name||'bool'===this.typeInfo.name?this.data=new Int32Array([e]):'u32'===this.typeInfo.name?this.data=new Uint32Array([e]):'f32'===this.typeInfo.name||'f16'===this.typeInfo.name?this.data=new Float32Array([e]):console.error('ScalarData2: Invalid type',t);}clone(){if(this.data instanceof Float32Array)return new Oe(new Float32Array(this.data),this.typeInfo,null);if(this.data instanceof Int32Array)return new Oe(new Int32Array(this.data),this.typeInfo,null);if(this.data instanceof Uint32Array)return new Oe(new Uint32Array(this.data),this.typeInfo,null);throw 'ScalarData: Invalid data type'}get value(){return this.data[0]}set value(e){this.data[0]=e;}setDataValue(e,t,n,s){if(n)return void console.error('SetDataValue: Scalar data does not support postfix',n);if(!(t instanceof Oe))return void console.error('SetDataValue: Invalid value',t);let r=t.data[0];'i32'===this.typeInfo.name||'u32'===this.typeInfo.name?r=Math.floor(r):'bool'===this.typeInfo.name&&(r=r?1:0),this.data[0]=r;}getSubData(e,t,n){return t?(console.error('getSubData: Scalar data does not support postfix',t),null):this}toString(){return `${this.value}`}}function Be(e,t,n){const s=t.length;return 2===s?'f32'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec2f')):'i32'===n||'bool'===n?new Fe(new Int32Array(t),e.getTypeInfo('vec2i')):'u32'===n?new Fe(new Uint32Array(t),e.getTypeInfo('vec2u')):'f16'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec2h')):(console.error(`getSubData: Unknown format ${n}`),null):3===s?'f32'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec3f')):'i32'===n||'bool'===n?new Fe(new Int32Array(t),e.getTypeInfo('vec3i')):'u32'===n?new Fe(new Uint32Array(t),e.getTypeInfo('vec3u')):'f16'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec3h')):(console.error(`getSubData: Unknown format ${n}`),null):4===s?'f32'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec4f')):'i32'===n||'bool'===n?new Fe(new Int32Array(t),e.getTypeInfo('vec4i')):'u32'===n?new Fe(new Uint32Array(t),e.getTypeInfo('vec4u')):'f16'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec4h')):(console.error(`getSubData: Unknown format ${n}`),null):(console.error(`getSubData: Invalid vector size ${t.length}`),null)}class Fe extends De{constructor(e,t,n=null){if(super(t,n),e instanceof Float32Array||e instanceof Uint32Array||e instanceof Int32Array)this.data=e;else {const t=this.typeInfo.name;'vec2f'===t||'vec3f'===t||'vec4f'===t?this.data=new Float32Array(e):'vec2i'===t||'vec3i'===t||'vec4i'===t?this.data=new Int32Array(e):'vec2u'===t||'vec3u'===t||'vec4u'===t?this.data=new Uint32Array(e):'vec2h'===t||'vec3h'===t||'vec4h'===t?this.data=new Float32Array(e):'vec2b'===t||'vec3b'===t||'vec4b'===t?this.data=new Int32Array(e):'vec2'===t||'vec3'===t||'vec4'===t?this.data=new Float32Array(e):console.error(`VectorData: Invalid type ${t}`);}}clone(){if(this.data instanceof Float32Array)return new Fe(new Float32Array(this.data),this.typeInfo,null);if(this.data instanceof Int32Array)return new Fe(new Int32Array(this.data),this.typeInfo,null);if(this.data instanceof Uint32Array)return new Fe(new Uint32Array(this.data),this.typeInfo,null);throw 'VectorData: Invalid data type'}setDataValue(e,t,n,s){n instanceof fe?console.error('TODO: Set vector postfix'):t instanceof Fe?this.data=t.data:console.error('SetDataValue: Invalid value',t);}getSubData(e,t,n){if(null===t)return this;let s=e.getTypeInfo('f32');if(this.typeInfo instanceof a)s=this.typeInfo.format||s;else {const t=this.typeInfo.name;'vec2f'===t||'vec3f'===t||'vec4f'===t?s=e.getTypeInfo('f32'):'vec2i'===t||'vec3i'===t||'vec4i'===t?s=e.getTypeInfo('i32'):'vec2b'===t||'vec3b'===t||'vec4b'===t?s=e.getTypeInfo('bool'):'vec2u'===t||'vec3u'===t||'vec4u'===t?s=e.getTypeInfo('u32'):'vec2h'===t||'vec3h'===t||'vec4h'===t?s=e.getTypeInfo('f16'):console.error(`GetSubData: Unknown type ${t}`);}let r=this;for(;null!==t&&null!==r;){if(t instanceof be){const a=t.index;let i=-1;if(a instanceof ge){if(!(a.value instanceof Oe))return console.error(`GetSubData: Invalid array index ${a.value}`),null;i=a.value.value;}else {const t=e.evalExpression(a,n);if(!(t instanceof Oe))return console.error('GetSubData: Unknown index type',a),null;i=t.value;}if(i<0||i>=r.data.length)return console.error('GetSubData: Index out of range',i),null;if(r.data instanceof Float32Array){const e=new Float32Array(r.data.buffer,r.data.byteOffset+4*i,1);return new Oe(e,s)}if(r.data instanceof Int32Array){const e=new Int32Array(r.data.buffer,r.data.byteOffset+4*i,1);return new Oe(e,s)}if(r.data instanceof Uint32Array){const e=new Uint32Array(r.data.buffer,r.data.byteOffset+4*i,1);return new Oe(e,s)}throw 'GetSubData: Invalid data type'}if(!(t instanceof fe))return console.error('GetSubData: Unknown postfix',t),null;{const n=t.value.toLowerCase();if(1===n.length){let e=0;if('x'===n||'r'===n)e=0;else if('y'===n||'g'===n)e=1;else if('z'===n||'b'===n)e=2;else {if('w'!==n&&'a'!==n)return console.error(`GetSubData: Unknown member ${n}`),null;e=3;}if(this.data instanceof Float32Array){let t=new Float32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new Oe(t,s,this)}if(this.data instanceof Int32Array){let t=new Int32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new Oe(t,s,this)}if(this.data instanceof Uint32Array){let t=new Uint32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new Oe(t,s,this)}}const a=[];for(const e of n)'x'===e||'r'===e?a.push(this.data[0]):'y'===e||'g'===e?a.push(this.data[1]):'z'===e||'b'===e?a.push(this.data[2]):'w'===e||'a'===e?a.push(this.data[3]):console.error(`GetDataValue: Unknown member ${e}`);r=Be(e,a,s.name);}t=t.postfix;}return r}toString(){let e=`${this.data[0]}`;for(let t=1;t<this.data.length;++t)e+=`, ${this.data[t]}`;return e}}class Me extends De{constructor(e,t,n=null){super(t,n),e instanceof Float32Array?this.data=e:this.data=new Float32Array(e);}clone(){return new Me(new Float32Array(this.data),this.typeInfo,null)}setDataValue(e,t,n,s){n instanceof fe?console.error('TODO: Set matrix postfix'):t instanceof Me?this.data=t.data:console.error('SetDataValue: Invalid value',t);}getSubData(e,t,n){if(null===t)return this;const s=this.typeInfo.name;if(e.getTypeInfo('f32'),this.typeInfo instanceof a)this.typeInfo.format;else if(s.endsWith('f'))e.getTypeInfo('f32');else if(s.endsWith('i'))e.getTypeInfo('i32');else if(s.endsWith('u'))e.getTypeInfo('u32');else {if(!s.endsWith('h'))return console.error(`GetDataValue: Unknown type ${s}`),null;e.getTypeInfo('f16');}if(t instanceof be){const r=t.index;let a=-1;if(r instanceof ge){if(!(r.value instanceof Oe))return console.error(`GetDataValue: Invalid array index ${r.value}`),null;a=r.value.value;}else {const t=e.evalExpression(r,n);if(!(t instanceof Oe))return console.error('GetDataValue: Unknown index type',r),null;a=t.value;}if(a<0||a>=this.data.length)return console.error('GetDataValue: Index out of range',a),null;const i=s.endsWith('h')?'h':'f';let o;if('mat2x2'===s||'mat2x2f'===s||'mat2x2h'===s||'mat3x2'===s||'mat3x2f'===s||'mat3x2h'===s||'mat4x2'===s||'mat4x2f'===s||'mat4x2h'===s)o=new Fe(new Float32Array(this.data.buffer,this.data.byteOffset+2*a*4,2),e.getTypeInfo(`vec2${i}`));else if('mat2x3'===s||'mat2x3f'===s||'mat2x3h'===s||'mat3x3'===s||'mat3x3f'===s||'mat3x3h'===s||'mat4x3'===s||'mat4x3f'===s||'mat4x3h'===s)o=new Fe(new Float32Array(this.data.buffer,this.data.byteOffset+3*a*4,3),e.getTypeInfo(`vec3${i}`));else {if('mat2x4'!==s&&'mat2x4f'!==s&&'mat2x4h'!==s&&'mat3x4'!==s&&'mat3x4f'!==s&&'mat3x4h'!==s&&'mat4x4'!==s&&'mat4x4f'!==s&&'mat4x4h'!==s)return console.error(`GetDataValue: Unknown type ${s}`),null;o=new Fe(new Float32Array(this.data.buffer,this.data.byteOffset+4*a*4,4),e.getTypeInfo(`vec4${i}`));}return t.postfix?o.getSubData(e,t.postfix,n):o}return console.error('GetDataValue: Invalid postfix',t),null}toString(){let e=`${this.data[0]}`;for(let t=1;t<this.data.length;++t)e+=`, ${this.data[t]}`;return e}}class Ue extends De{constructor(e,t,n=0,s=null){super(t,s),this.buffer=e instanceof ArrayBuffer?e:e.buffer,this.offset=n;}clone(){const e=new Uint8Array(new Uint8Array(this.buffer,this.offset,this.typeInfo.size));return new Ue(e.buffer,this.typeInfo,0,null)}setDataValue(t,r,a,i){if(null===r)return void console.log('setDataValue: NULL data.');let o=this.offset,l=this.typeInfo;for(;a;){if(a instanceof be)if(l instanceof s){const e=a.index;if(e instanceof ge){if(!(e.value instanceof Oe))return void console.error(`SetDataValue: Invalid index type ${e.value}`);o+=e.value.value*l.stride;}else {const n=t.evalExpression(e,i);if(!(n instanceof Oe))return void console.error('SetDataValue: Unknown index type',e);o+=n.value*l.stride;}l=l.format;}else console.error(`SetDataValue: Type ${l.getTypeName()} is not an array`);else {if(!(a instanceof fe))return void console.error('SetDataValue: Unknown postfix type',a);{const t=a.value;if(l instanceof n){let e=false;for(const n of l.members)if(n.name===t){o+=n.offset,l=n.type,e=true;break}if(!e)return void console.error(`SetDataValue: Member ${t} not found`)}else if(l instanceof e){const e=l.getTypeName();let n=0;if('x'===t||'r'===t)n=0;else if('y'===t||'g'===t)n=1;else if('z'===t||'b'===t)n=2;else {if('w'!==t&&'a'!==t)return void console.error(`SetDataValue: Unknown member ${t}`);n=3;}if(!(r instanceof Oe))return void console.error('SetDataValue: Invalid value',r);const s=r.value;return 'vec2f'===e?void(new Float32Array(this.buffer,o,2)[n]=s):'vec3f'===e?void(new Float32Array(this.buffer,o,3)[n]=s):'vec4f'===e?void(new Float32Array(this.buffer,o,4)[n]=s):'vec2i'===e?void(new Int32Array(this.buffer,o,2)[n]=s):'vec3i'===e?void(new Int32Array(this.buffer,o,3)[n]=s):'vec4i'===e?void(new Int32Array(this.buffer,o,4)[n]=s):'vec2u'===e?void(new Uint32Array(this.buffer,o,2)[n]=s):'vec3u'===e?void(new Uint32Array(this.buffer,o,3)[n]=s):'vec4u'===e?void(new Uint32Array(this.buffer,o,4)[n]=s):void console.error(`SetDataValue: Type ${e} is not a struct`)}}}a=a.postfix;}this.setData(t,r,l,o,i);}setData(e,t,n,s,r){const a=n.getTypeName();if('f32'!==a&&'f16'!==a)if('i32'!==a&&'atomic<i32>'!==a&&'x32'!==a)if('u32'!==a&&'atomic<u32>'!==a)if('bool'!==a)if('vec2f'!==a&&'vec2h'!==a)if('vec3f'!==a&&'vec3h'!==a)if('vec4f'!==a&&'vec4h'!==a)if('vec2i'!==a)if('vec3i'!==a)if('vec4i'!==a)if('vec2u'!==a)if('vec3u'!==a)if('vec4u'!==a)if('vec2b'!==a)if('vec3b'!==a)if('vec4b'!==a)if('mat2x2f'!==a&&'mat2x2h'!==a)if('mat2x3f'!==a&&'mat2x3h'!==a)if('mat2x4f'!==a&&'mat2x4h'!==a)if('mat3x2f'!==a&&'mat3x2h'!==a)if('mat3x3f'!==a&&'mat3x3h'!==a)if('mat3x4f'!==a&&'mat3x4h'!==a)if('mat4x2f'!==a&&'mat4x2h'!==a)if('mat4x3f'!==a&&'mat4x3h'!==a)if('mat4x4f'!==a&&'mat4x4h'!==a)if(t instanceof Ue){if(n===t.typeInfo){return void new Uint8Array(this.buffer,s,t.buffer.byteLength).set(new Uint8Array(t.buffer))}console.error('SetDataValue: Type mismatch',a,t.typeInfo.getTypeName());}else console.error(`SetData: Unknown type ${a}`);else {const e=new Float32Array(this.buffer,s,16);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11],e[12]=t.data[12],e[13]=t.data[13],e[14]=t.data[14],e[15]=t.data[15]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]);}else {const e=new Float32Array(this.buffer,s,12);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11]);}else {const e=new Float32Array(this.buffer,s,8);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7]);}else {const e=new Float32Array(this.buffer,s,12);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11]);}else {const e=new Float32Array(this.buffer,s,9);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8]);}else {const e=new Float32Array(this.buffer,s,6);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5]);}else {const e=new Float32Array(this.buffer,s,8);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7]);}else {const e=new Float32Array(this.buffer,s,6);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5]);}else {const e=new Float32Array(this.buffer,s,4);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]);}else {const e=new Uint32Array(this.buffer,s,4);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]);}else {const e=new Uint32Array(this.buffer,s,3);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]);}else {const e=new Uint32Array(this.buffer,s,2);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]);}else {const e=new Uint32Array(this.buffer,s,4);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]);}else {const e=new Uint32Array(this.buffer,s,3);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]);}else {const e=new Uint32Array(this.buffer,s,2);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]);}else {const e=new Int32Array(this.buffer,s,4);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]);}else {const e=new Int32Array(this.buffer,s,3);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]);}else {const e=new Int32Array(this.buffer,s,2);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]);}else {const e=new Float32Array(this.buffer,s,4);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]);}else {const e=new Float32Array(this.buffer,s,3);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]);}else {const e=new Float32Array(this.buffer,s,2);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]);}else t instanceof Oe&&(new Int32Array(this.buffer,s,1)[0]=t.value);else t instanceof Oe&&(new Uint32Array(this.buffer,s,1)[0]=t.value);else t instanceof Oe&&(new Int32Array(this.buffer,s,1)[0]=t.value);else t instanceof Oe&&(new Float32Array(this.buffer,s,1)[0]=t.value);}getSubData(t,r,i){var o,l,c;if(null===r)return this;let u=this.offset,h=this.typeInfo;for(;r;){if(r instanceof be){const e=r.index,n=e instanceof he?t.evalExpression(e,i):e;let a=0;if(n instanceof Oe?a=n.value:'number'==typeof n?a=n:console.error('GetDataValue: Invalid index type',e),h instanceof s)u+=a*h.stride,h=h.format;else {const e=h.getTypeName();'mat4x4'===e||'mat4x4f'===e||'mat4x4h'===e?(u+=16*a,h=t.getTypeInfo('vec4f')):console.error(`getDataValue: Type ${h.getTypeName()} is not an array`);}}else {if(!(r instanceof fe))return console.error('GetDataValue: Unknown postfix type',r),null;{const s=r.value;if(h instanceof n){let e=false;for(const t of h.members)if(t.name===s){u+=t.offset,h=t.type,e=true;break}if(!e)return console.error(`GetDataValue: Member ${s} not found`),null}else if(h instanceof e){const e=h.getTypeName();if('vec2f'===e||'vec3f'===e||'vec4f'===e||'vec2i'===e||'vec3i'===e||'vec4i'===e||'vec2u'===e||'vec3u'===e||'vec4u'===e||'vec2b'===e||'vec3b'===e||'vec4b'===e||'vec2h'===e||'vec3h'===e||'vec4h'===e||'vec2'===e||'vec3'===e||'vec4'===e){if(s.length>0&&s.length<5){let n='f';const r=[];for(let a=0;a<s.length;++a){const i=s[a].toLowerCase();let o=0;if('x'===i||'r'===i)o=0;else if('y'===i||'g'===i)o=1;else if('z'===i||'b'===i)o=2;else {if('w'!==i&&'a'!==i)return console.error(`Unknown member ${s}`),null;o=3;}if(1===s.length){if(e.endsWith('f'))return this.buffer.byteLength<u+4*o+4?(console.log('Insufficient buffer data'),null):new Oe(new Float32Array(this.buffer,u+4*o,1),t.getTypeInfo('f32'),this);if(e.endsWith('h'))return new Oe(new Float32Array(this.buffer,u+4*o,1),t.getTypeInfo('f16'),this);if(e.endsWith('i'))return new Oe(new Int32Array(this.buffer,u+4*o,1),t.getTypeInfo('i32'),this);if(e.endsWith('b'))return new Oe(new Int32Array(this.buffer,u+4*o,1),t.getTypeInfo('bool'),this);if(e.endsWith('u'))return new Oe(new Uint32Array(this.buffer,u+4*o,1),t.getTypeInfo('i32'),this)}if('vec2f'===e)r.push(new Float32Array(this.buffer,u,2)[o]);else if('vec3f'===e){if(u+12>=this.buffer.byteLength)return console.log('Insufficient buffer data'),null;const e=new Float32Array(this.buffer,u,3);r.push(e[o]);}else if('vec4f'===e)r.push(new Float32Array(this.buffer,u,4)[o]);else if('vec2i'===e)n='i',r.push(new Int32Array(this.buffer,u,2)[o]);else if('vec3i'===e)n='i',r.push(new Int32Array(this.buffer,u,3)[o]);else if('vec4i'===e)n='i',r.push(new Int32Array(this.buffer,u,4)[o]);else if('vec2u'===e){n='u';const e=new Uint32Array(this.buffer,u,2);r.push(e[o]);}else 'vec3u'===e?(n='u',r.push(new Uint32Array(this.buffer,u,3)[o])):'vec4u'===e&&(n='u',r.push(new Uint32Array(this.buffer,u,4)[o]));}return 2===r.length?h=t.getTypeInfo(`vec2${n}`):3===r.length?h=t.getTypeInfo(`vec3${n}`):4===r.length?h=t.getTypeInfo(`vec4${n}`):console.error(`GetDataValue: Invalid vector length ${r.length}`),new Fe(r,h,null)}return console.error(`GetDataValue: Unknown member ${s}`),null}return console.error(`GetDataValue: Type ${e} is not a struct`),null}}}r=r.postfix;}const f=h.getTypeName();return 'f32'===f?new Oe(new Float32Array(this.buffer,u,1),h,this):'i32'===f?new Oe(new Int32Array(this.buffer,u,1),h,this):'u32'===f?new Oe(new Uint32Array(this.buffer,u,1),h,this):'vec2f'===f?new Fe(new Float32Array(this.buffer,u,2),h,this):'vec3f'===f?new Fe(new Float32Array(this.buffer,u,3),h,this):'vec4f'===f?new Fe(new Float32Array(this.buffer,u,4),h,this):'vec2i'===f?new Fe(new Int32Array(this.buffer,u,2),h,this):'vec3i'===f?new Fe(new Int32Array(this.buffer,u,3),h,this):'vec4i'===f?new Fe(new Int32Array(this.buffer,u,4),h,this):'vec2u'===f?new Fe(new Uint32Array(this.buffer,u,2),h,this):'vec3u'===f?new Fe(new Uint32Array(this.buffer,u,3),h,this):'vec4u'===f?new Fe(new Uint32Array(this.buffer,u,4),h,this):h instanceof a&&'atomic'===h.name?'u32'===(null===(o=h.format)||undefined===o?undefined:o.name)?new Oe(new Uint32Array(this.buffer,u,1)[0],h.format,this):'i32'===(null===(l=h.format)||undefined===l?undefined:l.name)?new Oe(new Int32Array(this.buffer,u,1)[0],h.format,this):(console.error(`GetDataValue: Invalid atomic format ${null===(c=h.format)||undefined===c?undefined:c.name}`),null):new Ue(this.buffer,h,u,this)}toString(){let e='';if(this.typeInfo instanceof s)if('f32'===this.typeInfo.format.name){const t=new Float32Array(this.buffer,this.offset);e=`[${t[0]}`;for(let n=1;n<t.length;++n)e+=`, ${t[n]}`;}else if('i32'===this.typeInfo.format.name){const t=new Int32Array(this.buffer,this.offset);e=`[${t[0]}`;for(let n=1;n<t.length;++n)e+=`, ${t[n]}`;}else if('u32'===this.typeInfo.format.name){const t=new Uint32Array(this.buffer,this.offset);e=`[${t[0]}`;for(let n=1;n<t.length;++n)e+=`, ${t[n]}`;}else if('vec2f'===this.typeInfo.format.name){const t=new Float32Array(this.buffer,this.offset);e=`[${t[0]}, ${t[1]}]`;for(let n=1;n<t.length/2;++n)e+=`, [${t[2*n]}, ${t[2*n+1]}]`;}else if('vec3f'===this.typeInfo.format.name){const t=new Float32Array(this.buffer,this.offset);e=`[${t[0]}, ${t[1]}, ${t[2]}]`;for(let n=4;n<t.length;n+=4)e+=`, [${t[n]}, ${t[n+1]}, ${t[n+2]}]`;}else if('vec4f'===this.typeInfo.format.name){const t=new Float32Array(this.buffer,this.offset);e=`[${t[0]}, ${t[1]}, ${t[2]}, ${t[3]}]`;for(let n=4;n<t.length;n+=4)e+=`, [${t[n]}, ${t[n+1]}, ${t[n+2]}, ${t[n+3]}]`;}else e='[...]';else this.typeInfo instanceof n?e+='{...}':e='[...]';return e}}class Pe extends De{constructor(e,t,n,s){super(t,null),this.data=e,this.descriptor=n,this.view=s;}clone(){return new Pe(this.data,this.typeInfo,this.descriptor,this.view)}get width(){var e,t;const n=this.descriptor.size;return n instanceof Array&&n.length>0?null!==(e=n[0])&&undefined!==e?e:0:n instanceof Object&&null!==(t=n.width)&&undefined!==t?t:0}get height(){var e,t;const n=this.descriptor.size;return n instanceof Array&&n.length>1?null!==(e=n[1])&&undefined!==e?e:0:n instanceof Object&&null!==(t=n.height)&&undefined!==t?t:0}get depthOrArrayLayers(){var e,t;const n=this.descriptor.size;return n instanceof Array&&n.length>2?null!==(e=n[2])&&undefined!==e?e:0:n instanceof Object&&null!==(t=n.depthOrArrayLayers)&&undefined!==t?t:0}get format(){var e;return this.descriptor&&null!==(e=this.descriptor.format)&&undefined!==e?e:'rgba8unorm'}get sampleCount(){var e;return this.descriptor&&null!==(e=this.descriptor.sampleCount)&&undefined!==e?e:1}get mipLevelCount(){var e;return this.descriptor&&null!==(e=this.descriptor.mipLevelCount)&&undefined!==e?e:1}get dimension(){var e;return this.descriptor&&null!==(e=this.descriptor.dimension)&&undefined!==e?e:'2d'}getMipLevelSize(e){if(e>=this.mipLevelCount)return [0,0,0];const t=[this.width,this.height,this.depthOrArrayLayers];for(let n=0;n<t.length;++n)t[n]=Math.max(1,t[n]>>e);return t}get texelByteSize(){const e=this.format,t=T[e];return t?t.isDepthStencil?4:t.bytesPerBlock:0}get bytesPerRow(){return this.width*this.texelByteSize}get isDepthStencil(){const e=this.format,t=T[e];return !!t&&t.isDepthStencil}getGpuSize(){const e=this.format,t=T[e],n=this.width;if(!e||n<=0||!t)return -1;const s=this.height,r=this.depthOrArrayLayers,a=this.dimension;return n/t.blockWidth*('1d'===a?1:s/t.blockHeight)*t.bytesPerBlock*r}getPixel(e,t,n=0,s=0){const r=this.texelByteSize,a=this.bytesPerRow,i=this.height,o=this.data[s];return w(new Uint8Array(o),e,t,n,s,i,a,r,this.format)}setPixel(e,t,n,s,r){const a=this.texelByteSize,i=this.bytesPerRow,o=this.height,l=this.data[s];!function(e,t,n,s,r,a,i,o,l,c){const u=s*(i>>=r)*(a>>=r)+n*i+t*o;switch(l){case 'r8unorm':return void I(e,u,'8unorm',1,c);case 'r8snorm':return void I(e,u,'8snorm',1,c);case 'r8uint':return void I(e,u,'8uint',1,c);case 'r8sint':return void I(e,u,'8sint',1,c);case 'rg8unorm':return void I(e,u,'8unorm',2,c);case 'rg8snorm':return void I(e,u,'8snorm',2,c);case 'rg8uint':return void I(e,u,'8uint',2,c);case 'rg8sint':return void I(e,u,'8sint',2,c);case 'rgba8unorm-srgb':case 'rgba8unorm':case 'bgra8unorm-srgb':case 'bgra8unorm':return void I(e,u,'8unorm',4,c);case 'rgba8snorm':return void I(e,u,'8snorm',4,c);case 'rgba8uint':return void I(e,u,'8uint',4,c);case 'rgba8sint':return void I(e,u,'8sint',4,c);case 'r16uint':return void I(e,u,'16uint',1,c);case 'r16sint':return void I(e,u,'16sint',1,c);case 'r16float':return void I(e,u,'16float',1,c);case 'rg16uint':return void I(e,u,'16uint',2,c);case 'rg16sint':return void I(e,u,'16sint',2,c);case 'rg16float':return void I(e,u,'16float',2,c);case 'rgba16uint':return void I(e,u,'16uint',4,c);case 'rgba16sint':return void I(e,u,'16sint',4,c);case 'rgba16float':return void I(e,u,'16float',4,c);case 'r32uint':return void I(e,u,'32uint',1,c);case 'r32sint':return void I(e,u,'32sint',1,c);case 'depth16unorm':case 'depth24plus':case 'depth24plus-stencil8':case 'depth32float':case 'depth32float-stencil8':case 'r32float':return void I(e,u,'32float',1,c);case 'rg32uint':return void I(e,u,'32uint',2,c);case 'rg32sint':return void I(e,u,'32sint',2,c);case 'rg32float':return void I(e,u,'32float',2,c);case 'rgba32uint':return void I(e,u,'32uint',4,c);case 'rgba32sint':return void I(e,u,'32sint',4,c);case 'rgba32float':return void I(e,u,'32float',4,c);case 'rg11b10ufloat':console.error('TODO: rg11b10ufloat not supported for writing');}}(new Uint8Array(l),e,t,n,s,o,i,a,this.format,r);}}(e=>{e[e.token=0]='token',e[e.keyword=1]='keyword',e[e.reserved=2]='reserved';})(H||(H={}));class We{constructor(e,t,n){this.name=e,this.type=t,this.rule=n;}toString(){return this.name}}class qe{}q=qe,qe.none=new We('',H.reserved,''),qe.eof=new We('EOF',H.token,''),qe.reserved={asm:new We('asm',H.reserved,'asm'),bf16:new We('bf16',H.reserved,'bf16'),do:new We('do',H.reserved,'do'),enum:new We('enum',H.reserved,'enum'),f16:new We('f16',H.reserved,'f16'),f64:new We('f64',H.reserved,'f64'),handle:new We('handle',H.reserved,'handle'),i8:new We('i8',H.reserved,'i8'),i16:new We('i16',H.reserved,'i16'),i64:new We('i64',H.reserved,'i64'),mat:new We('mat',H.reserved,'mat'),premerge:new We('premerge',H.reserved,'premerge'),regardless:new We('regardless',H.reserved,'regardless'),typedef:new We('typedef',H.reserved,'typedef'),u8:new We('u8',H.reserved,'u8'),u16:new We('u16',H.reserved,'u16'),u64:new We('u64',H.reserved,'u64'),unless:new We('unless',H.reserved,'unless'),using:new We('using',H.reserved,'using'),vec:new We('vec',H.reserved,'vec'),void:new We('void',H.reserved,'void')},qe.keywords={array:new We('array',H.keyword,'array'),atomic:new We('atomic',H.keyword,'atomic'),bool:new We('bool',H.keyword,'bool'),f32:new We('f32',H.keyword,'f32'),i32:new We('i32',H.keyword,'i32'),mat2x2:new We('mat2x2',H.keyword,'mat2x2'),mat2x3:new We('mat2x3',H.keyword,'mat2x3'),mat2x4:new We('mat2x4',H.keyword,'mat2x4'),mat3x2:new We('mat3x2',H.keyword,'mat3x2'),mat3x3:new We('mat3x3',H.keyword,'mat3x3'),mat3x4:new We('mat3x4',H.keyword,'mat3x4'),mat4x2:new We('mat4x2',H.keyword,'mat4x2'),mat4x3:new We('mat4x3',H.keyword,'mat4x3'),mat4x4:new We('mat4x4',H.keyword,'mat4x4'),ptr:new We('ptr',H.keyword,'ptr'),sampler:new We('sampler',H.keyword,'sampler'),sampler_comparison:new We('sampler_comparison',H.keyword,'sampler_comparison'),struct:new We('struct',H.keyword,'struct'),texture_1d:new We('texture_1d',H.keyword,'texture_1d'),texture_2d:new We('texture_2d',H.keyword,'texture_2d'),texture_2d_array:new We('texture_2d_array',H.keyword,'texture_2d_array'),texture_3d:new We('texture_3d',H.keyword,'texture_3d'),texture_cube:new We('texture_cube',H.keyword,'texture_cube'),texture_cube_array:new We('texture_cube_array',H.keyword,'texture_cube_array'),texture_multisampled_2d:new We('texture_multisampled_2d',H.keyword,'texture_multisampled_2d'),texture_storage_1d:new We('texture_storage_1d',H.keyword,'texture_storage_1d'),texture_storage_2d:new We('texture_storage_2d',H.keyword,'texture_storage_2d'),texture_storage_2d_array:new We('texture_storage_2d_array',H.keyword,'texture_storage_2d_array'),texture_storage_3d:new We('texture_storage_3d',H.keyword,'texture_storage_3d'),texture_depth_2d:new We('texture_depth_2d',H.keyword,'texture_depth_2d'),texture_depth_2d_array:new We('texture_depth_2d_array',H.keyword,'texture_depth_2d_array'),texture_depth_cube:new We('texture_depth_cube',H.keyword,'texture_depth_cube'),texture_depth_cube_array:new We('texture_depth_cube_array',H.keyword,'texture_depth_cube_array'),texture_depth_multisampled_2d:new We('texture_depth_multisampled_2d',H.keyword,'texture_depth_multisampled_2d'),texture_external:new We('texture_external',H.keyword,'texture_external'),u32:new We('u32',H.keyword,'u32'),vec2:new We('vec2',H.keyword,'vec2'),vec3:new We('vec3',H.keyword,'vec3'),vec4:new We('vec4',H.keyword,'vec4'),bitcast:new We('bitcast',H.keyword,'bitcast'),block:new We('block',H.keyword,'block'),break:new We('break',H.keyword,'break'),case:new We('case',H.keyword,'case'),continue:new We('continue',H.keyword,'continue'),continuing:new We('continuing',H.keyword,'continuing'),default:new We('default',H.keyword,'default'),diagnostic:new We('diagnostic',H.keyword,'diagnostic'),discard:new We('discard',H.keyword,'discard'),else:new We('else',H.keyword,'else'),enable:new We('enable',H.keyword,'enable'),fallthrough:new We('fallthrough',H.keyword,'fallthrough'),false:new We('false',H.keyword,'false'),fn:new We('fn',H.keyword,'fn'),for:new We('for',H.keyword,'for'),function:new We('function',H.keyword,'function'),if:new We('if',H.keyword,'if'),let:new We('let',H.keyword,'let'),const:new We('const',H.keyword,'const'),loop:new We('loop',H.keyword,'loop'),while:new We('while',H.keyword,'while'),private:new We('private',H.keyword,'private'),read:new We('read',H.keyword,'read'),read_write:new We('read_write',H.keyword,'read_write'),return:new We('return',H.keyword,'return'),requires:new We('requires',H.keyword,'requires'),storage:new We('storage',H.keyword,'storage'),switch:new We('switch',H.keyword,'switch'),true:new We('true',H.keyword,'true'),alias:new We('alias',H.keyword,'alias'),type:new We('type',H.keyword,'type'),uniform:new We('uniform',H.keyword,'uniform'),var:new We('var',H.keyword,'var'),override:new We('override',H.keyword,'override'),workgroup:new We('workgroup',H.keyword,'workgroup'),write:new We('write',H.keyword,'write'),r8unorm:new We('r8unorm',H.keyword,'r8unorm'),r8snorm:new We('r8snorm',H.keyword,'r8snorm'),r8uint:new We('r8uint',H.keyword,'r8uint'),r8sint:new We('r8sint',H.keyword,'r8sint'),r16uint:new We('r16uint',H.keyword,'r16uint'),r16sint:new We('r16sint',H.keyword,'r16sint'),r16float:new We('r16float',H.keyword,'r16float'),rg8unorm:new We('rg8unorm',H.keyword,'rg8unorm'),rg8snorm:new We('rg8snorm',H.keyword,'rg8snorm'),rg8uint:new We('rg8uint',H.keyword,'rg8uint'),rg8sint:new We('rg8sint',H.keyword,'rg8sint'),r32uint:new We('r32uint',H.keyword,'r32uint'),r32sint:new We('r32sint',H.keyword,'r32sint'),r32float:new We('r32float',H.keyword,'r32float'),rg16uint:new We('rg16uint',H.keyword,'rg16uint'),rg16sint:new We('rg16sint',H.keyword,'rg16sint'),rg16float:new We('rg16float',H.keyword,'rg16float'),rgba8unorm:new We('rgba8unorm',H.keyword,'rgba8unorm'),rgba8unorm_srgb:new We('rgba8unorm_srgb',H.keyword,'rgba8unorm_srgb'),rgba8snorm:new We('rgba8snorm',H.keyword,'rgba8snorm'),rgba8uint:new We('rgba8uint',H.keyword,'rgba8uint'),rgba8sint:new We('rgba8sint',H.keyword,'rgba8sint'),bgra8unorm:new We('bgra8unorm',H.keyword,'bgra8unorm'),bgra8unorm_srgb:new We('bgra8unorm_srgb',H.keyword,'bgra8unorm_srgb'),rgb10a2unorm:new We('rgb10a2unorm',H.keyword,'rgb10a2unorm'),rg11b10float:new We('rg11b10float',H.keyword,'rg11b10float'),rg32uint:new We('rg32uint',H.keyword,'rg32uint'),rg32sint:new We('rg32sint',H.keyword,'rg32sint'),rg32float:new We('rg32float',H.keyword,'rg32float'),rgba16uint:new We('rgba16uint',H.keyword,'rgba16uint'),rgba16sint:new We('rgba16sint',H.keyword,'rgba16sint'),rgba16float:new We('rgba16float',H.keyword,'rgba16float'),rgba32uint:new We('rgba32uint',H.keyword,'rgba32uint'),rgba32sint:new We('rgba32sint',H.keyword,'rgba32sint'),rgba32float:new We('rgba32float',H.keyword,'rgba32float'),static_assert:new We('static_assert',H.keyword,'static_assert')},qe.tokens={decimal_float_literal:new We('decimal_float_literal',H.token,/((-?[0-9]*\\.[0-9]+|-?[0-9]+\\.[0-9]*)((e|E)(\\+|-)?[0-9]+)?[fh]?)|(-?[0-9]+(e|E)(\\+|-)?[0-9]+[fh]?)|(-?[0-9]+[fh])/),hex_float_literal:new We('hex_float_literal',H.token,/-?0x((([0-9a-fA-F]*\\.[0-9a-fA-F]+|[0-9a-fA-F]+\\.[0-9a-fA-F]*)((p|P)(\\+|-)?[0-9]+[fh]?)?)|([0-9a-fA-F]+(p|P)(\\+|-)?[0-9]+[fh]?))/),int_literal:new We('int_literal',H.token,/-?0x[0-9a-fA-F]+|0i?|-?[1-9][0-9]*i?/),uint_literal:new We('uint_literal',H.token,/0x[0-9a-fA-F]+u|0u|[1-9][0-9]*u/),name:new We('name',H.token,/([_\\p{XID_Start}][\\p{XID_Continue}]+)|([\\p{XID_Start}])/u),ident:new We('ident',H.token,/[_a-zA-Z][0-9a-zA-Z_]*/),and:new We('and',H.token,'&'),and_and:new We('and_and',H.token,'&&'),arrow:new We('arrow ',H.token,'->'),attr:new We('attr',H.token,'@'),forward_slash:new We('forward_slash',H.token,'/'),bang:new We('bang',H.token,'!'),bracket_left:new We('bracket_left',H.token,'['),bracket_right:new We('bracket_right',H.token,']'),brace_left:new We('brace_left',H.token,'{'),brace_right:new We('brace_right',H.token,'}'),colon:new We('colon',H.token,':'),comma:new We('comma',H.token,','),equal:new We('equal',H.token,'='),equal_equal:new We('equal_equal',H.token,'=='),not_equal:new We('not_equal',H.token,'!='),greater_than:new We('greater_than',H.token,'>'),greater_than_equal:new We('greater_than_equal',H.token,'>='),shift_right:new We('shift_right',H.token,'>>'),less_than:new We('less_than',H.token,'<'),less_than_equal:new We('less_than_equal',H.token,'<='),shift_left:new We('shift_left',H.token,'<<'),modulo:new We('modulo',H.token,'%'),minus:new We('minus',H.token,'-'),minus_minus:new We('minus_minus',H.token,'--'),period:new We('period',H.token,'.'),plus:new We('plus',H.token,'+'),plus_plus:new We('plus_plus',H.token,'++'),or:new We('or',H.token,'|'),or_or:new We('or_or',H.token,'||'),paren_left:new We('paren_left',H.token,'('),paren_right:new We('paren_right',H.token,')'),semicolon:new We('semicolon',H.token,';'),star:new We('star',H.token,'*'),tilde:new We('tilde',H.token,'~'),underscore:new We('underscore',H.token,'_'),xor:new We('xor',H.token,'^'),plus_equal:new We('plus_equal',H.token,'+='),minus_equal:new We('minus_equal',H.token,'-='),times_equal:new We('times_equal',H.token,'*='),division_equal:new We('division_equal',H.token,'/='),modulo_equal:new We('modulo_equal',H.token,'%='),and_equal:new We('and_equal',H.token,'&='),or_equal:new We('or_equal',H.token,'|='),xor_equal:new We('xor_equal',H.token,'^='),shift_right_equal:new We('shift_right_equal',H.token,'>>='),shift_left_equal:new We('shift_left_equal',H.token,'<<=')},qe.simpleTokens={'@':q.tokens.attr,'{':q.tokens.brace_left,'}':q.tokens.brace_right,':':q.tokens.colon,',':q.tokens.comma,'(':q.tokens.paren_left,')':q.tokens.paren_right,';':q.tokens.semicolon},qe.literalTokens={'&':q.tokens.and,'&&':q.tokens.and_and,'->':q.tokens.arrow,'/':q.tokens.forward_slash,'!':q.tokens.bang,'[':q.tokens.bracket_left,']':q.tokens.bracket_right,'=':q.tokens.equal,'==':q.tokens.equal_equal,'!=':q.tokens.not_equal,'>':q.tokens.greater_than,'>=':q.tokens.greater_than_equal,'>>':q.tokens.shift_right,'<':q.tokens.less_than,'<=':q.tokens.less_than_equal,'<<':q.tokens.shift_left,'%':q.tokens.modulo,'-':q.tokens.minus,'--':q.tokens.minus_minus,'.':q.tokens.period,'+':q.tokens.plus,'++':q.tokens.plus_plus,'|':q.tokens.or,'||':q.tokens.or_or,'*':q.tokens.star,'~':q.tokens.tilde,_:q.tokens.underscore,'^':q.tokens.xor,'+=':q.tokens.plus_equal,'-=':q.tokens.minus_equal,'*=':q.tokens.times_equal,'/=':q.tokens.division_equal,'%=':q.tokens.modulo_equal,'&=':q.tokens.and_equal,'|=':q.tokens.or_equal,'^=':q.tokens.xor_equal,'>>=':q.tokens.shift_right_equal,'<<=':q.tokens.shift_left_equal},qe.regexTokens={decimal_float_literal:q.tokens.decimal_float_literal,hex_float_literal:q.tokens.hex_float_literal,int_literal:q.tokens.int_literal,uint_literal:q.tokens.uint_literal,ident:q.tokens.ident},qe.storage_class=[q.keywords.function,q.keywords.private,q.keywords.workgroup,q.keywords.uniform,q.keywords.storage],qe.access_mode=[q.keywords.read,q.keywords.write,q.keywords.read_write],qe.sampler_type=[q.keywords.sampler,q.keywords.sampler_comparison],qe.sampled_texture_type=[q.keywords.texture_1d,q.keywords.texture_2d,q.keywords.texture_2d_array,q.keywords.texture_3d,q.keywords.texture_cube,q.keywords.texture_cube_array],qe.multisampled_texture_type=[q.keywords.texture_multisampled_2d],qe.storage_texture_type=[q.keywords.texture_storage_1d,q.keywords.texture_storage_2d,q.keywords.texture_storage_2d_array,q.keywords.texture_storage_3d],qe.depth_texture_type=[q.keywords.texture_depth_2d,q.keywords.texture_depth_2d_array,q.keywords.texture_depth_cube,q.keywords.texture_depth_cube_array,q.keywords.texture_depth_multisampled_2d],qe.texture_external_type=[q.keywords.texture_external],qe.any_texture_type=[...q.sampled_texture_type,...q.multisampled_texture_type,...q.storage_texture_type,...q.depth_texture_type,...q.texture_external_type],qe.texel_format=[q.keywords.r8unorm,q.keywords.r8snorm,q.keywords.r8uint,q.keywords.r8sint,q.keywords.r16uint,q.keywords.r16sint,q.keywords.r16float,q.keywords.rg8unorm,q.keywords.rg8snorm,q.keywords.rg8uint,q.keywords.rg8sint,q.keywords.r32uint,q.keywords.r32sint,q.keywords.r32float,q.keywords.rg16uint,q.keywords.rg16sint,q.keywords.rg16float,q.keywords.rgba8unorm,q.keywords.rgba8unorm_srgb,q.keywords.rgba8snorm,q.keywords.rgba8uint,q.keywords.rgba8sint,q.keywords.bgra8unorm,q.keywords.bgra8unorm_srgb,q.keywords.rgb10a2unorm,q.keywords.rg11b10float,q.keywords.rg32uint,q.keywords.rg32sint,q.keywords.rg32float,q.keywords.rgba16uint,q.keywords.rgba16sint,q.keywords.rgba16float,q.keywords.rgba32uint,q.keywords.rgba32sint,q.keywords.rgba32float],qe.const_literal=[q.tokens.int_literal,q.tokens.uint_literal,q.tokens.decimal_float_literal,q.tokens.hex_float_literal,q.keywords.true,q.keywords.false],qe.literal_or_ident=[q.tokens.ident,q.tokens.int_literal,q.tokens.uint_literal,q.tokens.decimal_float_literal,q.tokens.hex_float_literal,q.tokens.name],qe.element_count_expression=[q.tokens.int_literal,q.tokens.uint_literal,q.tokens.ident],qe.template_types=[q.keywords.vec2,q.keywords.vec3,q.keywords.vec4,q.keywords.mat2x2,q.keywords.mat2x3,q.keywords.mat2x4,q.keywords.mat3x2,q.keywords.mat3x3,q.keywords.mat3x4,q.keywords.mat4x2,q.keywords.mat4x3,q.keywords.mat4x4,q.keywords.atomic,q.keywords.bitcast,...q.any_texture_type],qe.attribute_name=[q.tokens.ident,q.keywords.block,q.keywords.diagnostic],qe.assignment_operators=[q.tokens.equal,q.tokens.plus_equal,q.tokens.minus_equal,q.tokens.times_equal,q.tokens.division_equal,q.tokens.modulo_equal,q.tokens.and_equal,q.tokens.or_equal,q.tokens.xor_equal,q.tokens.shift_right_equal,q.tokens.shift_left_equal],qe.increment_operators=[q.tokens.plus_plus,q.tokens.minus_minus];class He{constructor(e,t,n,s,r){this.type=e,this.lexeme=t,this.line=n,this.start=s,this.end=r;}toString(){return this.lexeme}isTemplateType(){return -1!=qe.template_types.indexOf(this.type)}isArrayType(){return this.type==qe.keywords.array}isArrayOrTemplateType(){return this.isArrayType()||this.isTemplateType()}}class ze{constructor(e){this._tokens=[],this._start=0,this._current=0,this._line=1,this._source=null!=e?e:'';}scanTokens(){for(;!this._isAtEnd();)if(this._start=this._current,!this.scanToken())throw `Invalid syntax at line ${this._line}`;return this._tokens.push(new He(qe.eof,'',this._line,this._current,this._current)),this._tokens}scanToken(){let e=this._advance();if('\\n'==e)return this._line++,true;if(this._isWhitespace(e))return true;if('/'==e){if('/'==this._peekAhead()){for(;'\\n'!=e;){if(this._isAtEnd())return true;e=this._advance();}return this._line++,true}if('*'==this._peekAhead()){this._advance();let t=1;for(;t>0;){if(this._isAtEnd())return true;if(e=this._advance(),'\\n'==e)this._line++;else if('*'==e){if('/'==this._peekAhead()&&(this._advance(),t--,0==t))return true}else '/'==e&&'*'==this._peekAhead()&&(this._advance(),t++);}return true}}const t=qe.simpleTokens[e];if(t)return this._addToken(t),true;let n=qe.none;const s=this._isAlpha(e),r='_'===e;if(this._isAlphaNumeric(e)){let t=this._peekAhead();for(;this._isAlphaNumeric(t);)e+=this._advance(),t=this._peekAhead();}if(s){const t=qe.keywords[e];if(t)return this._addToken(t),true}if(s||r)return this._addToken(qe.tokens.ident),true;for(;;){let t=this._findType(e);const s=this._peekAhead();if('-'==e&&this._tokens.length>0){if('='==s)return this._current++,e+=s,this._addToken(qe.tokens.minus_equal),true;if('-'==s)return this._current++,e+=s,this._addToken(qe.tokens.minus_minus),true;const n=this._tokens.length-1;if((-1!=qe.literal_or_ident.indexOf(this._tokens[n].type)||this._tokens[n].type==qe.tokens.paren_right)&&'>'!=s)return this._addToken(t),true}if('>'==e&&('>'==s||'='==s)){let e=false,n=this._tokens.length-1;for(let t=0;t<5&&n>=0&&-1===qe.assignment_operators.indexOf(this._tokens[n].type);++t,--n)if(this._tokens[n].type===qe.tokens.less_than){n>0&&this._tokens[n-1].isArrayOrTemplateType()&&(e=true);break}if(e)return this._addToken(t),true}if(t===qe.none){let s=e,r=0;const a=2;for(let e=0;e<a;++e)if(s+=this._peekAhead(e),t=this._findType(s),t!==qe.none){r=e;break}if(t===qe.none)return n!==qe.none&&(this._current--,this._addToken(n),true);e=s,this._current+=r+1;}if(n=t,this._isAtEnd())break;e+=this._advance();}return n!==qe.none&&(this._addToken(n),true)}_findType(e){for(const t in qe.regexTokens){const n=qe.regexTokens[t];if(this._match(e,n.rule))return n}const t=qe.literalTokens[e];return t||qe.none}_match(e,t){const n=t.exec(e);return n&&0==n.index&&n[0]==e}_isAtEnd(){return this._current>=this._source.length}_isAlpha(e){return !this._isNumeric(e)&&!this._isWhitespace(e)&&'_'!==e&&'.'!==e&&'('!==e&&')'!==e&&'['!==e&&']'!==e&&'{'!==e&&'}'!==e&&','!==e&&';'!==e&&':'!==e&&'='!==e&&'!'!==e&&'<'!==e&&'>'!==e&&'+'!==e&&'-'!==e&&'*'!==e&&'/'!==e&&'%'!==e&&'&'!==e&&'|'!==e&&'^'!==e&&'~'!==e&&'@'!==e&&'#'!==e&&'?'!==e&&'\\''!==e&&'`'!==e&&'\"'!==e&&'\\\\'!==e&&'\\n'!==e&&'\\r'!==e&&'\\t'!==e&&'\\0'!==e}_isNumeric(e){return e>='0'&&e<='9'}_isAlphaNumeric(e){return this._isAlpha(e)||this._isNumeric(e)||'_'===e}_isWhitespace(e){return ' '==e||'\\t'==e||'\\r'==e}_advance(e=0){let t=this._source[this._current];return e=e||0,e++,this._current+=e,t}_peekAhead(e=0){return e=e||0,this._current+e>=this._source.length?'\\0':this._source[this._current+e]}_addToken(e){const t=this._source.substring(this._start,this._current);this._tokens.push(new He(e,t,this._line,this._start,this._current));}}function Re(e){return Array.isArray(e)||(null==e?undefined:e.buffer)instanceof ArrayBuffer}const Ge=new Float32Array(1),Xe=new Uint32Array(Ge.buffer),je=new Uint32Array(Ge.buffer),Ze=new Int32Array(1),Qe=new Float32Array(Ze.buffer),Ye=new Uint32Array(Ze.buffer),Ke=new Uint32Array(1),Je=new Float32Array(Ke.buffer),et=new Int32Array(Ke.buffer);function tt(e,t,n){if(t===n)return e;if('f32'===t){if('i32'===n||'x32'===n)return Ge[0]=e,Xe[0];if('u32'===n)return Ge[0]=e,je[0]}else if('i32'===t||'x32'===t){if('f32'===n)return Ze[0]=e,Qe[0];if('u32'===n)return Ze[0]=e,Ye[0]}else if('u32'===t){if('f32'===n)return Ke[0]=e,Je[0];if('i32'===n||'x32'===n)return Ke[0]=e,et[0]}return console.error(`Unsupported cast from ${t} to ${n}`),e}class nt{constructor(e){this.resources=null,this.inUse=false,this.info=null,this.node=e;}}class st{constructor(e,t){this.align=e,this.size=t;}}class rt{constructor(){this.uniforms=[],this.storage=[],this.textures=[],this.samplers=[],this.aliases=[],this.overrides=[],this.structs=[],this.entry=new d,this.functions=[],this._types=new Map,this._functions=new Map;}_isStorageTexture(e){return 'texture_storage_1d'==e.name||'texture_storage_2d'==e.name||'texture_storage_2d_array'==e.name||'texture_storage_3d'==e.name}updateAST(e){for(const t of e)t instanceof C&&this._functions.set(t.name,new nt(t));for(const t of e)if(t instanceof ie){const e=this.getTypeInfo(t,null);e instanceof n&&this.structs.push(e);}for(const t of e)if(t instanceof ee)this.aliases.push(this._getAliasInfo(t));else if(t instanceof F){const e=t,n=this._getAttributeNum(e.attributes,'id',0),s=null!=e.type?this.getTypeInfo(e.type,e.attributes):null;this.overrides.push(new h(e.name,s,e.attributes,n));}else if(this._isUniformVar(t)){const e=t,n=this._getAttributeNum(e.attributes,'group',0),s=this._getAttributeNum(e.attributes,'binding',0),r=this.getTypeInfo(e.type,e.attributes),a=new o(e.name,r,n,s,e.attributes,i.Uniform,e.access);a.access||(a.access='read'),this.uniforms.push(a);}else if(this._isStorageVar(t)){const e=t,n=this._getAttributeNum(e.attributes,'group',0),s=this._getAttributeNum(e.attributes,'binding',0),r=this.getTypeInfo(e.type,e.attributes),a=this._isStorageTexture(r),l=new o(e.name,r,n,s,e.attributes,a?i.StorageTexture:i.Storage,e.access);l.access||(l.access='read'),this.storage.push(l);}else if(this._isTextureVar(t)){const e=t,n=this._getAttributeNum(e.attributes,'group',0),s=this._getAttributeNum(e.attributes,'binding',0),r=this.getTypeInfo(e.type,e.attributes),a=this._isStorageTexture(r),l=new o(e.name,r,n,s,e.attributes,a?i.StorageTexture:i.Texture,e.access);l.access||(l.access='read'),a?this.storage.push(l):this.textures.push(l);}else if(this._isSamplerVar(t)){const e=t,n=this._getAttributeNum(e.attributes,'group',0),s=this._getAttributeNum(e.attributes,'binding',0),r=this.getTypeInfo(e.type,e.attributes),a=new o(e.name,r,n,s,e.attributes,i.Sampler,e.access);this.samplers.push(a);}else;for(const t of e)if(t instanceof C){const e=this._getAttribute(t,'vertex'),n=this._getAttribute(t,'fragment'),s=this._getAttribute(t,'compute'),r=e||n||s,a=new p(t.name,null==r?undefined:r.name,t.attributes);a.attributes=t.attributes,a.startLine=t.startLine,a.endLine=t.endLine,this.functions.push(a),this._functions.get(t.name).info=a,r&&(this._functions.get(t.name).inUse=true,a.inUse=true,a.resources=this._findResources(t,!!r),a.inputs=this._getInputs(t.args),a.outputs=this._getOutputs(t.returnType),this.entry[r.name].push(a)),a.arguments=t.args.map((e=>new f(e.name,this.getTypeInfo(e.type,e.attributes),e.attributes))),a.returnType=t.returnType?this.getTypeInfo(t.returnType,t.attributes):null;}for(const e of this._functions.values())e.info&&(e.info.inUse=e.inUse,this._addCalls(e.node,e.info.calls));for(const e of this._functions.values())e.node.search((t=>{var n,s,r;if(t instanceof Ce){if(t.value)if(Re(t.value))for(const s of t.value)for(const t of this.overrides)s===t.name&&(null===(n=e.info)||undefined===n||n.overrides.push(t));else for(const n of this.overrides)t.value===n.name&&(null===(s=e.info)||undefined===s||s.overrides.push(n));}else if(t instanceof me)for(const n of this.overrides)t.name===n.name&&(null===(r=e.info)||undefined===r||r.overrides.push(n));}));for(const e of this.uniforms)this._markStructsInUse(e.type);for(const e of this.storage)this._markStructsInUse(e.type);}getStructInfo(e){for(const t of this.structs)if(t.name==e)return t;return null}getOverrideInfo(e){for(const t of this.overrides)if(t.name==e)return t;return null}_markStructsInUse(e){if(e)if(e.isStruct){if(e.inUse=true,e.members)for(const t of e.members)this._markStructsInUse(t.type);}else if(e.isArray)this._markStructsInUse(e.format);else if(e.isTemplate)e.format&&this._markStructsInUse(e.format);else {const t=this._getAlias(e.name);t&&this._markStructsInUse(t);}}_addCalls(e,t){var n;for(const s of e.calls){const e=null===(n=this._functions.get(s.name))||undefined===n?undefined:n.info;e&&t.add(e);}}findResource(e,t,n){if(n){for(const s of this.entry.compute)if(s.name===n)for(const n of s.resources)if(n.group==e&&n.binding==t)return n;for(const s of this.entry.vertex)if(s.name===n)for(const n of s.resources)if(n.group==e&&n.binding==t)return n;for(const s of this.entry.fragment)if(s.name===n)for(const n of s.resources)if(n.group==e&&n.binding==t)return n}for(const n of this.uniforms)if(n.group==e&&n.binding==t)return n;for(const n of this.storage)if(n.group==e&&n.binding==t)return n;for(const n of this.textures)if(n.group==e&&n.binding==t)return n;for(const n of this.samplers)if(n.group==e&&n.binding==t)return n;return null}_findResource(e){for(const t of this.uniforms)if(t.name==e)return t;for(const t of this.storage)if(t.name==e)return t;for(const t of this.textures)if(t.name==e)return t;for(const t of this.samplers)if(t.name==e)return t;return null}_markStructsFromAST(e){const t=this.getTypeInfo(e,null);this._markStructsInUse(t);}_findResources(e,t){const n=[],s=this,r=[];return e.search((a=>{if(a instanceof A)r.push({});else if(a instanceof E)r.pop();else if(a instanceof B){const e=a;t&&null!==e.type&&this._markStructsFromAST(e.type),r.length>0&&(r[r.length-1][e.name]=e);}else if(a instanceof pe){const e=a;t&&null!==e.type&&this._markStructsFromAST(e.type);}else if(a instanceof M){const e=a;t&&null!==e.type&&this._markStructsFromAST(e.type),r.length>0&&(r[r.length-1][e.name]=e);}else if(a instanceof me){const e=a;if(r.length>0){if(r[r.length-1][e.name])return}const t=s._findResource(e.name);t&&n.push(t);}else if(a instanceof de){const r=a,i=s._functions.get(r.name);i&&(t&&(i.inUse=true),e.calls.add(i.node),null===i.resources&&(i.resources=s._findResources(i.node,t)),n.push(...i.resources));}else if(a instanceof G){const r=a,i=s._functions.get(r.name);i&&(t&&(i.inUse=true),e.calls.add(i.node),null===i.resources&&(i.resources=s._findResources(i.node,t)),n.push(...i.resources));}})),[...new Map(n.map((e=>[e.name,e]))).values()]}getBindGroups(){const e=[];function t(t,n){t>=e.length&&(e.length=t+1),undefined===e[t]&&(e[t]=[]),n>=e[t].length&&(e[t].length=n+1);}for(const n of this.uniforms){t(n.group,n.binding);e[n.group][n.binding]=n;}for(const n of this.storage){t(n.group,n.binding);e[n.group][n.binding]=n;}for(const n of this.textures){t(n.group,n.binding);e[n.group][n.binding]=n;}for(const n of this.samplers){t(n.group,n.binding);e[n.group][n.binding]=n;}return e}_getOutputs(e,t=undefined){if(undefined===t&&(t=[]),e instanceof ie)this._getStructOutputs(e,t);else {const n=this._getOutputInfo(e);null!==n&&t.push(n);}return t}_getStructOutputs(e,t){for(const n of e.members)if(n.type instanceof ie)this._getStructOutputs(n.type,t);else {const e=this._getAttribute(n,'location')||this._getAttribute(n,'builtin');if(null!==e){const s=this.getTypeInfo(n.type,n.type.attributes),r=this._parseInt(e.value),a=new u(n.name,s,e.name,r);t.push(a);}}}_getOutputInfo(e){const t=this._getAttribute(e,'location')||this._getAttribute(e,'builtin');if(null!==t){const n=this.getTypeInfo(e,e.attributes),s=this._parseInt(t.value);return new u('',n,t.name,s)}return null}_getInputs(e,t=undefined){ undefined===t&&(t=[]);for(const n of e)if(n.type instanceof ie)this._getStructInputs(n.type,t);else {const e=this._getInputInfo(n);null!==e&&t.push(e);}return t}_getStructInputs(e,t){for(const n of e.members)if(n.type instanceof ie)this._getStructInputs(n.type,t);else {const e=this._getInputInfo(n);null!==e&&t.push(e);}}_getInputInfo(e){const t=this._getAttribute(e,'location')||this._getAttribute(e,'builtin');if(null!==t){const n=this._getAttribute(e,'interpolation'),s=this.getTypeInfo(e.type,e.attributes),r=this._parseInt(t.value),a=new c(e.name,s,t.name,r);return null!==n&&(a.interpolation=this._parseString(n.value)),a}return null}_parseString(e){return e instanceof Array&&(e=e[0]),e}_parseInt(e){e instanceof Array&&(e=e[0]);const t=parseInt(e);return isNaN(t)?e:t}_getAlias(e){for(const t of this.aliases)if(t.name==e)return t.type;return null}_getAliasInfo(e){return new l(e.name,this.getTypeInfo(e.type,null))}getTypeInfoByName(e){for(const t of this.structs)if(t.name==e)return t;for(const t of this.aliases)if(t.name==e)return t.type;return null}getTypeInfo(i,o=null){if(this._types.has(i))return this._types.get(i);if(i instanceof le){const e=i.type?this.getTypeInfo(i.type,i.attributes):null,t=new r(i.name,e,o);return this._types.set(i,t),this._updateTypeInfo(t),t}if(i instanceof ce){const e=i,t=e.format?this.getTypeInfo(e.format,e.attributes):null,n=new s(e.name,o);return n.format=t,n.count=e.count,this._types.set(i,n),this._updateTypeInfo(n),n}if(i instanceof ie){const e=i,s=new n(e.name,o);s.startLine=e.startLine,s.endLine=e.endLine;for(const n of e.members){const e=this.getTypeInfo(n.type,n.attributes);s.members.push(new t(n.name,e,n.attributes));}return this._types.set(i,s),this._updateTypeInfo(s),s}if(i instanceof ue){const t=i,n=t.format instanceof re,s=t.format?n?this.getTypeInfo(t.format,null):new e(t.format,null):null,r=new a(t.name,s,o,t.access);return this._types.set(i,r),this._updateTypeInfo(r),r}if(i instanceof oe){const e=i,t=e.format?this.getTypeInfo(e.format,null):null,n=new a(e.name,t,o,e.access);return this._types.set(i,n),this._updateTypeInfo(n),n}const l=new e(i.name,o);return this._types.set(i,l),this._updateTypeInfo(l),l}_updateTypeInfo(e){var t,a,i;const o=this._getTypeSize(e);if(e.size=null!==(t=null==o?undefined:o.size)&&undefined!==t?t:0,e instanceof s&&e.format){const t=this._getTypeSize(e.format);e.stride=Math.max(null!==(a=null==t?undefined:t.size)&&undefined!==a?a:0,null!==(i=null==t?undefined:t.align)&&undefined!==i?i:0),this._updateTypeInfo(e.format);}e instanceof r&&this._updateTypeInfo(e.format),e instanceof n&&this._updateStructInfo(e);}_updateStructInfo(e){var t;let n=0,s=0,r=0,a=0;for(let i=0,o=e.members.length;i<o;++i){const o=e.members[i],l=this._getTypeSize(o);if(!l)continue;null!==(t=this._getAlias(o.type.name))&&undefined!==t||o.type;const c=l.align,u=l.size;n=this._roundUp(c,n+s),s=u,r=n,a=Math.max(a,c),o.offset=n,o.size=u,this._updateTypeInfo(o.type);}e.size=this._roundUp(a,r+s),e.align=a;}_getTypeSize(r){var a,i;if(null==r)return null;const o=this._getAttributeNum(r.attributes,'size',0),l=this._getAttributeNum(r.attributes,'align',0);if(r instanceof t&&(r=r.type),r instanceof e){const e=this._getAlias(r.name);null!==e&&(r=e);}{const e=rt._typeInfo[r.name];if(undefined!==e){const t='f16'===(null===(a=r.format)||undefined===a?undefined:a.name)?2:1;return new st(Math.max(l,e.align/t),Math.max(o,e.size/t))}}{const e=rt._typeInfo[r.name.substring(0,r.name.length-1)];if(e){const t='h'===r.name[r.name.length-1]?2:1;return new st(Math.max(l,e.align/t),Math.max(o,e.size/t))}}if(r instanceof s){let e=r,t=8,n=8;const s=this._getTypeSize(e.format);null!==s&&(n=s.size,t=s.align);return n=e.count*this._getAttributeNum(null!==(i=null==r?undefined:r.attributes)&&undefined!==i?i:null,'stride',this._roundUp(t,n)),o&&(n=o),new st(Math.max(l,t),Math.max(o,n))}if(r instanceof n){let e=0,t=0,n=0,s=0,a=0;for(const t of r.members){const r=this._getTypeSize(t.type);null!==r&&(e=Math.max(r.align,e),n=this._roundUp(r.align,n+s),s=r.size,a=n);}return t=this._roundUp(e,a+s),new st(Math.max(l,e),Math.max(o,t))}return null}_isUniformVar(e){return e instanceof B&&'uniform'==e.storage}_isStorageVar(e){return e instanceof B&&'storage'==e.storage}_isTextureVar(e){return e instanceof B&&null!==e.type&&-1!=rt._textureTypes.indexOf(e.type.name)}_isSamplerVar(e){return e instanceof B&&null!==e.type&&-1!=rt._samplerTypes.indexOf(e.type.name)}_getAttribute(e,t){const n=e;if(!n||!n.attributes)return null;const s=n.attributes;for(let e of s)if(e.name==t)return e;return null}_getAttributeNum(e,t,n){if(null===e)return n;for(let s of e)if(s.name==t){let e=null!==s&&null!==s.value?s.value:n;return e instanceof Array&&(e=e[0]),'number'==typeof e?e:'string'==typeof e?parseInt(e):n}return n}_roundUp(e,t){return Math.ceil(t/e)*e}}rt._typeInfo={f16:{align:2,size:2},i32:{align:4,size:4},u32:{align:4,size:4},f32:{align:4,size:4},atomic:{align:4,size:4},vec2:{align:8,size:8},vec3:{align:16,size:12},vec4:{align:16,size:16},mat2x2:{align:8,size:16},mat3x2:{align:8,size:24},mat4x2:{align:8,size:32},mat2x3:{align:16,size:32},mat3x3:{align:16,size:48},mat4x3:{align:16,size:64},mat2x4:{align:16,size:32},mat3x4:{align:16,size:48},mat4x4:{align:16,size:64}},rt._textureTypes=qe.any_texture_type.map((e=>e.name)),rt._samplerTypes=qe.sampler_type.map((e=>e.name));let at=0;class it{constructor(e,t,n){this.id=at++,this.name=e,this.value=t,this.node=n;}clone(){return new it(this.name,this.value,this.node)}}class ot{constructor(e){this.id=at++,this.name=e.name,this.node=e;}clone(){return new ot(this.node)}}class lt{constructor(e){this.parent=null,this.variables=new Map,this.functions=new Map,this.currentFunctionName='',this.id=at++,e&&(this.parent=e,this.currentFunctionName=e.currentFunctionName);}getVariable(e){var t;return this.variables.has(e)?null!==(t=this.variables.get(e))&&undefined!==t?t:null:this.parent?this.parent.getVariable(e):null}getFunction(e){var t;return this.functions.has(e)?null!==(t=this.functions.get(e))&&undefined!==t?t:null:this.parent?this.parent.getFunction(e):null}createVariable(e,t,n){this.variables.set(e,new it(e,t,null!=n?n:null));}setVariable(e,t,n){const s=this.getVariable(e);null!==s?s.value=t:this.createVariable(e,t,n);}getVariableValue(e){var t;const n=this.getVariable(e);return null!==(t=null==n?undefined:n.value)&&undefined!==t?t:null}clone(){return new lt(this)}}class ct{evalExpression(e,t){return null}getTypeInfo(e){return null}getVariableName(e,t){return ''}}class ut{constructor(e){this.exec=e;}getTypeInfo(e){return this.exec.getTypeInfo(e)}All(e,t){const n=this.exec.evalExpression(e.args[0],t);let s=true;if(n instanceof Fe)return n.data.forEach((e=>{e||(s=false);})),new Oe(s?1:0,this.getTypeInfo('bool'));throw new Error(`All() expects a vector argument. Line ${e.line}`)}Any(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe){const e=n.data.some((e=>e));return new Oe(e?1:0,this.getTypeInfo('bool'))}throw new Error(`Any() expects a vector argument. Line ${e.line}`)}Select(e,t){const n=this.exec.evalExpression(e.args[2],t);if(!(n instanceof Oe))throw new Error(`Select() expects a bool condition. Line ${e.line}`);return n.value?this.exec.evalExpression(e.args[1],t):this.exec.evalExpression(e.args[0],t)}ArrayLength(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.evalExpression(n,t);if(s instanceof Ue&&0===s.typeInfo.size){const e=s.typeInfo,t=s.buffer.byteLength/e.stride;return new Oe(t,this.getTypeInfo('u32'))}return new Oe(s.typeInfo.size,this.getTypeInfo('u32'))}Abs(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.abs(e))),n.typeInfo);const s=n;return new Oe(Math.abs(s.value),s.typeInfo)}Acos(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.acos(e))),n.typeInfo);const s=n;return new Oe(Math.acos(s.value),n.typeInfo)}Acosh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.acosh(e))),n.typeInfo);const s=n;return new Oe(Math.acosh(s.value),n.typeInfo)}Asin(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.asin(e))),n.typeInfo);const s=n;return new Oe(Math.asin(s.value),n.typeInfo)}Asinh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.asinh(e))),n.typeInfo);const s=n;return new Oe(Math.asinh(s.value),n.typeInfo)}Atan(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.atan(e))),n.typeInfo);const s=n;return new Oe(Math.atan(s.value),n.typeInfo)}Atanh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.atanh(e))),n.typeInfo);const s=n;return new Oe(Math.atanh(s.value),n.typeInfo)}Atan2(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>Math.atan2(e,s.data[t]))),n.typeInfo);const r=n,a=s;return new Oe(Math.atan2(r.value,a.value),n.typeInfo)}Ceil(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.ceil(e))),n.typeInfo);const s=n;return new Oe(Math.ceil(s.value),n.typeInfo)}_clamp(e,t,n){return Math.min(Math.max(e,t),n)}Clamp(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(n instanceof Fe&&s instanceof Fe&&r instanceof Fe)return new Fe(n.data.map(((e,t)=>this._clamp(e,s.data[t],r.data[t]))),n.typeInfo);const a=n,i=s,o=r;return new Oe(this._clamp(a.value,i.value,o.value),n.typeInfo)}Cos(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.cos(e))),n.typeInfo);const s=n;return new Oe(Math.cos(s.value),n.typeInfo)}Cosh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.cosh(e))),n.typeInfo);const s=n;return new Oe(Math.cos(s.value),n.typeInfo)}CountLeadingZeros(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.clz32(e))),n.typeInfo);const s=n;return new Oe(Math.clz32(s.value),n.typeInfo)}_countOneBits(e){let t=0;for(;0!==e;)1&e&&t++,e>>=1;return t}CountOneBits(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>this._countOneBits(e))),n.typeInfo);const s=n;return new Oe(this._countOneBits(s.value),n.typeInfo)}_countTrailingZeros(e){if(0===e)return 32;let t=0;for(;!(1&e);)e>>=1,t++;return t}CountTrailingZeros(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>this._countTrailingZeros(e))),n.typeInfo);const s=n;return new Oe(this._countTrailingZeros(s.value),n.typeInfo)}Cross(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe){if(3!==n.data.length||3!==s.data.length)return console.error(`Cross() expects 3D vectors. Line ${e.line}`),null;const t=n.data,r=s.data;return new Fe([t[1]*r[2]-r[1]*t[2],t[2]*r[0]-r[2]*t[0],t[0]*r[1]-r[0]*t[1]],n.typeInfo)}return console.error(`Cross() expects vector arguments. Line ${e.line}`),null}Degrees(e,t){const n=this.exec.evalExpression(e.args[0],t),s=180/Math.PI;if(n instanceof Fe)return new Fe(n.data.map((e=>e*s)),n.typeInfo);return new Oe(n.value*s,this.getTypeInfo('f32'))}Determinant(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Me){const e=n.data,t=n.typeInfo.getTypeName(),s=t.endsWith('h')?this.getTypeInfo('f16'):this.getTypeInfo('f32');if('mat2x2'===t||'mat2x2f'===t||'mat2x2h'===t)return new Oe(e[0]*e[3]-e[1]*e[2],s);if('mat2x3'===t||'mat2x3f'===t||'mat2x3h'===t)return new Oe(e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6]),s);if('mat2x4'===t||'mat2x4f'===t||'mat2x4h'===t)console.error(`TODO: Determinant for ${t}`);else if('mat3x2'===t||'mat3x2f'===t||'mat3x2h'===t)console.error(`TODO: Determinant for ${t}`);else {if('mat3x3'===t||'mat3x3f'===t||'mat3x3h'===t)return new Oe(e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6]),s);'mat3x4'===t||'mat3x4f'===t||'mat3x4h'===t||'mat4x2'===t||'mat4x2f'===t||'mat4x2h'===t||'mat4x3'===t||'mat4x3f'===t||'mat4x3h'===t?console.error(`TODO: Determinant for ${t}`):'mat4x4'!==t&&'mat4x4f'!==t&&'mat4x4h'!==t||console.error(`TODO: Determinant for ${t}`);}}return console.error(`Determinant expects a matrix argument. Line ${e.line}`),null}Distance(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe){let e=0;for(let t=0;t<n.data.length;++t)e+=(n.data[t]-s.data[t])*(n.data[t]-s.data[t]);return new Oe(Math.sqrt(e),this.getTypeInfo('f32'))}const r=n,a=s;return new Oe(Math.abs(r.value-a.value),n.typeInfo)}_dot(e,t){let n=0;for(let s=0;s<e.length;++s)n+=t[s]*e[s];return n}Dot(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);return n instanceof Fe&&s instanceof Fe?new Oe(this._dot(n.data,s.data),this.getTypeInfo('f32')):(console.error(`Dot() expects vector arguments. Line ${e.line}`),null)}Dot4U8Packed(e,t){return console.error(`TODO: dot4U8Packed. Line ${e.line}`),null}Dot4I8Packed(e,t){return console.error(`TODO: dot4I8Packed. Line ${e.line}`),null}Exp(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.exp(e))),n.typeInfo);const s=n;return new Oe(Math.exp(s.value),n.typeInfo)}Exp2(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.pow(2,e))),n.typeInfo);const s=n;return new Oe(Math.pow(2,s.value),n.typeInfo)}ExtractBits(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if('u32'!==s.typeInfo.name&&'x32'!==s.typeInfo.name)return console.error(`ExtractBits() expects an i32 offset argument. Line ${e.line}`),null;if('u32'!==r.typeInfo.name&&'x32'!==r.typeInfo.name)return console.error(`ExtractBits() expects an i32 count argument. Line ${e.line}`),null;const a=s.value,i=r.value;if(n instanceof Fe)return new Fe(n.data.map((e=>e>>a&(1<<i)-1)),n.typeInfo);if('i32'!==n.typeInfo.name&&'x32'!==n.typeInfo.name)return console.error(`ExtractBits() expects an i32 argument. Line ${e.line}`),null;const o=n.value;return new Oe(o>>a&(1<<i)-1,this.getTypeInfo('i32'))}FaceForward(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(n instanceof Fe&&s instanceof Fe&&r instanceof Fe){const e=this._dot(s.data,r.data);return new Fe(e<0?Array.from(n.data):n.data.map((e=>-e)),n.typeInfo)}return console.error(`FaceForward() expects vector arguments. Line ${e.line}`),null}_firstLeadingBit(e){return 0===e?-1:31-Math.clz32(e)}FirstLeadingBit(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>this._firstLeadingBit(e))),n.typeInfo);const s=n;return new Oe(this._firstLeadingBit(s.value),n.typeInfo)}_firstTrailingBit(e){return 0===e?-1:Math.log2(e&-e)}FirstTrailingBit(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>this._firstTrailingBit(e))),n.typeInfo);const s=n;return new Oe(this._firstTrailingBit(s.value),n.typeInfo)}Floor(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.floor(e))),n.typeInfo);const s=n;return new Oe(Math.floor(s.value),n.typeInfo)}Fma(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(n instanceof Fe&&s instanceof Fe&&r instanceof Fe)return n.data.length!==s.data.length||n.data.length!==r.data.length?(console.error(`Fma() expects vectors of the same length. Line ${e.line}`),null):new Fe(n.data.map(((e,t)=>e*s.data[t]+r.data[t])),n.typeInfo);const a=n,i=s,o=r;return new Oe(a.value*i.value+o.value,a.typeInfo)}Fract(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>e-Math.floor(e))),n.typeInfo);const s=n;return new Oe(s.value-Math.floor(s.value),n.typeInfo)}Frexp(e,t){return console.error(`TODO: frexp. Line ${e.line}`),null}InsertBits(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t),a=this.exec.evalExpression(e.args[3],t);if('u32'!==r.typeInfo.name&&'x32'!==r.typeInfo.name)return console.error(`InsertBits() expects an i32 offset argument. Line ${e.line}`),null;const i=r.value,o=(1<<a.value)-1<<i,l=~o;if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>e&l|s.data[t]<<i&o)),n.typeInfo);const c=n.value,u=s.value;return new Oe(c&l|u<<i&o,n.typeInfo)}InverseSqrt(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>1/Math.sqrt(e))),n.typeInfo);const s=n;return new Oe(1/Math.sqrt(s.value),n.typeInfo)}Ldexp(e,t){return console.error(`TODO: ldexp. Line ${e.line}`),null}Length(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe){let e=0;return n.data.forEach((t=>{e+=t*t;})),new Oe(Math.sqrt(e),this.getTypeInfo('f32'))}const s=n;return new Oe(Math.abs(s.value),n.typeInfo)}Log(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.log(e))),n.typeInfo);const s=n;return new Oe(Math.log(s.value),n.typeInfo)}Log2(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.log2(e))),n.typeInfo);const s=n;return new Oe(Math.log2(s.value),n.typeInfo)}Max(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>Math.max(e,s.data[t]))),n.typeInfo);const r=n,a=s;return new Oe(Math.max(r.value,a.value),n.typeInfo)}Min(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>Math.min(e,s.data[t]))),n.typeInfo);const r=n,a=s;return new Oe(Math.min(r.value,a.value),n.typeInfo)}Mix(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(n instanceof Fe&&s instanceof Fe&&r instanceof Fe)return new Fe(n.data.map(((e,t)=>n.data[t]*(1-r.data[t])+s.data[t]*r.data[t])),n.typeInfo);const a=s,i=r;return new Oe(n.value*(1-i.value)+a.value*i.value,n.typeInfo)}Modf(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>e%s.data[t])),n.typeInfo);const r=s;return new Oe(n.value%r.value,n.typeInfo)}Normalize(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe){const s=this.Length(e,t).value;return new Fe(n.data.map((e=>e/s)),n.typeInfo)}return console.error(`Normalize() expects a vector argument. Line ${e.line}`),null}Pow(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>Math.pow(e,s.data[t]))),n.typeInfo);const r=n,a=s;return new Oe(Math.pow(r.value,a.value),n.typeInfo)}QuantizeToF16(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>e)),n.typeInfo);return new Oe(n.value,n.typeInfo)}Radians(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>e*Math.PI/180)),n.typeInfo);return new Oe(n.value*Math.PI/180,this.getTypeInfo('f32'))}Reflect(e,t){let n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe){const e=this._dot(n.data,s.data);return new Fe(n.data.map(((t,n)=>t-2*e*s.data[n])),n.typeInfo)}return console.error(`Reflect() expects vector arguments. Line ${e.line}`),null}Refract(e,t){let n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(n instanceof Fe&&s instanceof Fe&&r instanceof Oe){const e=this._dot(s.data,n.data);return new Fe(n.data.map(((t,n)=>{const a=1-r.value*r.value*(1-e*e);if(a<0)return 0;const i=Math.sqrt(a);return r.value*t-(r.value*e+i)*s.data[n]})),n.typeInfo)}return console.error(`Refract() expects vector arguments and a scalar argument. Line ${e.line}`),null}ReverseBits(e,t){return console.error(`TODO: reverseBits. Line ${e.line}`),null}Round(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.round(e))),n.typeInfo);const s=n;return new Oe(Math.round(s.value),n.typeInfo)}Saturate(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.min(Math.max(e,0),1))),n.typeInfo);const s=n;return new Oe(Math.min(Math.max(s.value,0),1),n.typeInfo)}Sign(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.sign(e))),n.typeInfo);const s=n;return new Oe(Math.sign(s.value),n.typeInfo)}Sin(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.sin(e))),n.typeInfo);const s=n;return new Oe(Math.sin(s.value),n.typeInfo)}Sinh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.sinh(e))),n.typeInfo);const s=n;return new Oe(Math.sinh(s.value),n.typeInfo)}_smoothstep(e,t,n){const s=Math.min(Math.max((n-e)/(t-e),0),1);return s*s*(3-2*s)}SmoothStep(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(r instanceof Fe&&n instanceof Fe&&s instanceof Fe)return new Fe(r.data.map(((e,t)=>this._smoothstep(n.data[t],s.data[t],e))),r.typeInfo);const a=n,i=s,o=r;return new Oe(this._smoothstep(a.value,i.value,o.value),r.typeInfo)}Sqrt(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.sqrt(e))),n.typeInfo);const s=n;return new Oe(Math.sqrt(s.value),n.typeInfo)}Step(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(s instanceof Fe&&n instanceof Fe)return new Fe(s.data.map(((e,t)=>e<n.data[t]?0:1)),s.typeInfo);const r=n;return new Oe(s.value<r.value?0:1,r.typeInfo)}Tan(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.tan(e))),n.typeInfo);const s=n;return new Oe(Math.tan(s.value),n.typeInfo)}Tanh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.tanh(e))),n.typeInfo);const s=n;return new Oe(Math.tanh(s.value),n.typeInfo)}_getTransposeType(e){const t=e.getTypeName();return 'mat2x2f'===t||'mat2x2h'===t?e:'mat2x3f'===t?this.getTypeInfo('mat3x2f'):'mat2x3h'===t?this.getTypeInfo('mat3x2h'):'mat2x4f'===t?this.getTypeInfo('mat4x2f'):'mat2x4h'===t?this.getTypeInfo('mat4x2h'):'mat3x2f'===t?this.getTypeInfo('mat2x3f'):'mat3x2h'===t?this.getTypeInfo('mat2x3h'):'mat3x3f'===t||'mat3x3h'===t?e:'mat3x4f'===t?this.getTypeInfo('mat4x3f'):'mat3x4h'===t?this.getTypeInfo('mat4x3h'):'mat4x2f'===t?this.getTypeInfo('mat2x4f'):'mat4x2h'===t?this.getTypeInfo('mat2x4h'):'mat4x3f'===t?this.getTypeInfo('mat3x4f'):'mat4x3h'===t?this.getTypeInfo('mat3x4h'):('mat4x4f'===t||'mat4x4h'===t||console.error(`Invalid matrix type ${t}`),e)}Transpose(e,t){const n=this.exec.evalExpression(e.args[0],t);if(!(n instanceof Me))return console.error(`Transpose() expects a matrix argument. Line ${e.line}`),null;const s=this._getTransposeType(n.typeInfo);if('mat2x2'===n.typeInfo.name||'mat2x2f'===n.typeInfo.name||'mat2x2h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[2],e[1],e[3]],s)}if('mat2x3'===n.typeInfo.name||'mat2x3f'===n.typeInfo.name||'mat2x3h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[3],e[6],e[1],e[4],e[7]],s)}if('mat2x4'===n.typeInfo.name||'mat2x4f'===n.typeInfo.name||'mat2x4h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13]],s)}if('mat3x2'===n.typeInfo.name||'mat3x2f'===n.typeInfo.name||'mat3x2h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[3],e[1],e[4],e[2],e[5]],s)}if('mat3x3'===n.typeInfo.name||'mat3x3f'===n.typeInfo.name||'mat3x3h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8]],s)}if('mat3x4'===n.typeInfo.name||'mat3x4f'===n.typeInfo.name||'mat3x4h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14]],s)}if('mat4x2'===n.typeInfo.name||'mat4x2f'===n.typeInfo.name||'mat4x2h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[4],e[1],e[5],e[2],e[6]],s)}if('mat4x3'===n.typeInfo.name||'mat4x3f'===n.typeInfo.name||'mat4x3h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]],s)}if('mat4x4'===n.typeInfo.name||'mat4x4f'===n.typeInfo.name||'mat4x4h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15]],s)}return console.error(`Invalid matrix type ${n.typeInfo.name}`),null}Trunc(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.trunc(e))),n.typeInfo);const s=n;return new Oe(Math.trunc(s.value),n.typeInfo)}Dpdx(e,t){return console.error(`TODO: dpdx. Line ${e.line}`),null}DpdxCoarse(e,t){return console.error(`TODO: dpdxCoarse. Line ${e.line}`),null}DpdxFine(e,t){return console.error('TODO: dpdxFine'),null}Dpdy(e,t){return console.error('TODO: dpdy'),null}DpdyCoarse(e,t){return console.error('TODO: dpdyCoarse'),null}DpdyFine(e,t){return console.error('TODO: dpdyFine'),null}Fwidth(e,t){return console.error('TODO: fwidth'),null}FwidthCoarse(e,t){return console.error('TODO: fwidthCoarse'),null}FwidthFine(e,t){return console.error('TODO: fwidthFine'),null}TextureDimensions(e,t){const n=e.args[0],s=e.args.length>1?this.exec.evalExpression(e.args[1],t).value:0;if(n instanceof me){const r=n.name,a=t.getVariableValue(r);if(a instanceof Pe){if(s<0||s>=a.mipLevelCount)return console.error(`Invalid mip level for textureDimensions. Line ${e.line}`),null;const t=a.getMipLevelSize(s),n=a.dimension;return '1d'===n?new Oe(t[0],this.getTypeInfo('u32')):'3d'===n?new Fe(t,this.getTypeInfo('vec3u')):'2d'===n?new Fe(t.slice(0,2),this.getTypeInfo('vec2u')):(console.error(`Invalid texture dimension ${n} not found. Line ${e.line}`),null)}return console.error(`Texture ${r} not found. Line ${e.line}`),null}return console.error(`Invalid texture argument for textureDimensions. Line ${e.line}`),null}TextureGather(e,t){return console.error('TODO: textureGather'),null}TextureGatherCompare(e,t){return console.error('TODO: textureGatherCompare'),null}TextureLoad(e,t){const n=e.args[0],s=this.exec.evalExpression(e.args[1],t),r=e.args.length>2?this.exec.evalExpression(e.args[2],t).value:0;if(!(s instanceof Fe)||2!==s.data.length)return console.error(`Invalid UV argument for textureLoad. Line ${e.line}`),null;if(n instanceof me){const a=n.name,i=t.getVariableValue(a);if(i instanceof Pe){const t=Math.floor(s.data[0]),n=Math.floor(s.data[1]);if(t<0||t>=i.width||n<0||n>=i.height)return console.error(`Texture ${a} out of bounds. Line ${e.line}`),null;const o=i.getPixel(t,n,0,r);return null===o?(console.error(`Invalid texture format for textureLoad. Line ${e.line}`),null):new Fe(o,this.getTypeInfo('vec4f'))}return console.error(`Texture ${a} not found. Line ${e.line}`),null}return console.error(`Invalid texture argument for textureLoad. Line ${e.line}`),null}TextureNumLayers(e,t){const n=e.args[0];if(n instanceof me){const s=n.name,r=t.getVariableValue(s);return r instanceof Pe?new Oe(r.depthOrArrayLayers,this.getTypeInfo('u32')):(console.error(`Texture ${s} not found. Line ${e.line}`),null)}return console.error(`Invalid texture argument for textureNumLayers. Line ${e.line}`),null}TextureNumLevels(e,t){const n=e.args[0];if(n instanceof me){const s=n.name,r=t.getVariableValue(s);return r instanceof Pe?new Oe(r.mipLevelCount,this.getTypeInfo('u32')):(console.error(`Texture ${s} not found. Line ${e.line}`),null)}return console.error(`Invalid texture argument for textureNumLevels. Line ${e.line}`),null}TextureNumSamples(e,t){const n=e.args[0];if(n instanceof me){const s=n.name,r=t.getVariableValue(s);return r instanceof Pe?new Oe(r.sampleCount,this.getTypeInfo('u32')):(console.error(`Texture ${s} not found. Line ${e.line}`),null)}return console.error(`Invalid texture argument for textureNumSamples. Line ${e.line}`),null}TextureSample(e,t){return console.error('TODO: textureSample'),null}TextureSampleBias(e,t){return console.error('TODO: textureSampleBias'),null}TextureSampleCompare(e,t){return console.error('TODO: textureSampleCompare'),null}TextureSampleCompareLevel(e,t){return console.error('TODO: textureSampleCompareLevel'),null}TextureSampleGrad(e,t){return console.error('TODO: textureSampleGrad'),null}TextureSampleLevel(e,t){return console.error('TODO: textureSampleLevel'),null}TextureSampleBaseClampToEdge(e,t){return console.error('TODO: textureSampleBaseClampToEdge'),null}TextureStore(e,t){const n=e.args[0],s=this.exec.evalExpression(e.args[1],t),r=4===e.args.length?this.exec.evalExpression(e.args[2],t).value:0,a=4===e.args.length?this.exec.evalExpression(e.args[3],t).data:this.exec.evalExpression(e.args[2],t).data;if(4!==a.length)return console.error(`Invalid value argument for textureStore. Line ${e.line}`),null;if(!(s instanceof Fe)||2!==s.data.length)return console.error(`Invalid UV argument for textureStore. Line ${e.line}`),null;if(n instanceof me){const i=n.name,o=t.getVariableValue(i);if(o instanceof Pe){const t=o.getMipLevelSize(0),n=Math.floor(s.data[0]),l=Math.floor(s.data[1]);return n<0||n>=t[0]||l<0||l>=t[1]?(console.error(`Texture ${i} out of bounds. Line ${e.line}`),null):(o.setPixel(n,l,0,r,Array.from(a)),null)}return console.error(`Texture ${i} not found. Line ${e.line}`),null}return console.error(`Invalid texture argument for textureStore. Line ${e.line}`),null}AtomicLoad(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t);return t.getVariable(s).value.getSubData(this.exec,n.postfix,t)}AtomicStore(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t);return o instanceof Oe&&i instanceof Oe&&(o.value=i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),null}AtomicAdd(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value+=i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicSub(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value-=i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicMax(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=Math.max(o.value,i.value)),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicMin(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=Math.min(o.value,i.value)),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicAnd(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=o.value&i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicOr(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=o.value|i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicXor(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=o.value^i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicExchange(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicCompareExchangeWeak(e,t){return console.error('TODO: atomicCompareExchangeWeak'),null}Pack4x8snorm(e,t){return console.error('TODO: pack4x8snorm'),null}Pack4x8unorm(e,t){return console.error('TODO: pack4x8unorm'),null}Pack4xI8(e,t){return console.error('TODO: pack4xI8'),null}Pack4xU8(e,t){return console.error('TODO: pack4xU8'),null}Pack4x8Clamp(e,t){return console.error('TODO: pack4x8Clamp'),null}Pack4xU8Clamp(e,t){return console.error('TODO: pack4xU8Clamp'),null}Pack2x16snorm(e,t){return console.error('TODO: pack2x16snorm'),null}Pack2x16unorm(e,t){return console.error('TODO: pack2x16unorm'),null}Pack2x16float(e,t){return console.error('TODO: pack2x16float'),null}Unpack4x8snorm(e,t){return console.error('TODO: unpack4x8snorm'),null}Unpack4x8unorm(e,t){return console.error('TODO: unpack4x8unorm'),null}Unpack4xI8(e,t){return console.error('TODO: unpack4xI8'),null}Unpack4xU8(e,t){return console.error('TODO: unpack4xU8'),null}Unpack2x16snorm(e,t){return console.error('TODO: unpack2x16snorm'),null}Unpack2x16unorm(e,t){return console.error('TODO: unpack2x16unorm'),null}Unpack2x16float(e,t){return console.error('TODO: unpack2x16float'),null}StorageBarrier(e,t){return null}TextureBarrier(e,t){return null}WorkgroupBarrier(e,t){return null}WorkgroupUniformLoad(e,t){return null}SubgroupAdd(e,t){return console.error('TODO: subgroupAdd'),null}SubgroupExclusiveAdd(e,t){return console.error('TODO: subgroupExclusiveAdd'),null}SubgroupInclusiveAdd(e,t){return console.error('TODO: subgroupInclusiveAdd'),null}SubgroupAll(e,t){return console.error('TODO: subgroupAll'),null}SubgroupAnd(e,t){return console.error('TODO: subgroupAnd'),null}SubgroupAny(e,t){return console.error('TODO: subgroupAny'),null}SubgroupBallot(e,t){return console.error('TODO: subgroupBallot'),null}SubgroupBroadcast(e,t){return console.error('TODO: subgroupBroadcast'),null}SubgroupBroadcastFirst(e,t){return console.error('TODO: subgroupBroadcastFirst'),null}SubgroupElect(e,t){return console.error('TODO: subgroupElect'),null}SubgroupMax(e,t){return console.error('TODO: subgroupMax'),null}SubgroupMin(e,t){return console.error('TODO: subgroupMin'),null}SubgroupMul(e,t){return console.error('TODO: subgroupMul'),null}SubgroupExclusiveMul(e,t){return console.error('TODO: subgroupExclusiveMul'),null}SubgroupInclusiveMul(e,t){return console.error('TODO: subgroupInclusiveMul'),null}SubgroupOr(e,t){return console.error('TODO: subgroupOr'),null}SubgroupShuffle(e,t){return console.error('TODO: subgroupShuffle'),null}SubgroupShuffleDown(e,t){return console.error('TODO: subgroupShuffleDown'),null}SubgroupShuffleUp(e,t){return console.error('TODO: subgroupShuffleUp'),null}SubgroupShuffleXor(e,t){return console.error('TODO: subgroupShuffleXor'),null}SubgroupXor(e,t){return console.error('TODO: subgroupXor'),null}QuadBroadcast(e,t){return console.error('TODO: quadBroadcast'),null}QuadSwapDiagonal(e,t){return console.error('TODO: quadSwapDiagonal'),null}QuadSwapX(e,t){return console.error('TODO: quadSwapX'),null}QuadSwapY(e,t){return console.error('TODO: quadSwapY'),null}}const ht={vec2:2,vec2f:2,vec2i:2,vec2u:2,vec2b:2,vec2h:2,vec3:3,vec3f:3,vec3i:3,vec3u:3,vec3b:3,vec3h:3,vec4:4,vec4f:4,vec4i:4,vec4u:4,vec4b:4,vec4h:4},ft={mat2x2:[2,2,4],mat2x2f:[2,2,4],mat2x2h:[2,2,4],mat2x3:[2,3,6],mat2x3f:[2,3,6],mat2x3h:[2,3,6],mat2x4:[2,4,8],mat2x4f:[2,4,8],mat2x4h:[2,4,8],mat3x2:[3,2,6],mat3x2f:[3,2,6],mat3x2h:[3,2,6],mat3x3:[3,3,9],mat3x3f:[3,3,9],mat3x3h:[3,3,9],mat3x4:[3,4,12],mat3x4f:[3,4,12],mat3x4h:[3,4,12],mat4x2:[4,2,8],mat4x2f:[4,2,8],mat4x2h:[4,2,8],mat4x3:[4,3,12],mat4x3f:[4,3,12],mat4x3h:[4,3,12],mat4x4:[4,4,16],mat4x4f:[4,4,16],mat4x4h:[4,4,16]};class pt extends ct{constructor(e,t){var n;super(),this.ast=null!=e?e:[],this.reflection=new rt,this.reflection.updateAST(this.ast),this.context=null!==(n=null==t?undefined:t.clone())&&undefined!==n?n:new lt,this.builtins=new ut(this),this.typeInfo={bool:this.getTypeInfo(re.bool),i32:this.getTypeInfo(re.i32),u32:this.getTypeInfo(re.u32),f32:this.getTypeInfo(re.f32),f16:this.getTypeInfo(re.f16),vec2f:this.getTypeInfo(oe.vec2f),vec2u:this.getTypeInfo(oe.vec2u),vec2i:this.getTypeInfo(oe.vec2i),vec2h:this.getTypeInfo(oe.vec2h),vec3f:this.getTypeInfo(oe.vec3f),vec3u:this.getTypeInfo(oe.vec3u),vec3i:this.getTypeInfo(oe.vec3i),vec3h:this.getTypeInfo(oe.vec3h),vec4f:this.getTypeInfo(oe.vec4f),vec4u:this.getTypeInfo(oe.vec4u),vec4i:this.getTypeInfo(oe.vec4i),vec4h:this.getTypeInfo(oe.vec4h),mat2x2f:this.getTypeInfo(oe.mat2x2f),mat2x3f:this.getTypeInfo(oe.mat2x3f),mat2x4f:this.getTypeInfo(oe.mat2x4f),mat3x2f:this.getTypeInfo(oe.mat3x2f),mat3x3f:this.getTypeInfo(oe.mat3x3f),mat3x4f:this.getTypeInfo(oe.mat3x4f),mat4x2f:this.getTypeInfo(oe.mat4x2f),mat4x3f:this.getTypeInfo(oe.mat4x3f),mat4x4f:this.getTypeInfo(oe.mat4x4f)};}getVariableValue(e){var t,n;const r=null!==(n=null===(t=this.context.getVariable(e))||undefined===t?undefined:t.value)&&undefined!==n?n:null;if(null===r)return null;if(r instanceof Oe)return r.value;if(r instanceof Fe)return Array.from(r.data);if(r instanceof Me)return Array.from(r.data);if(r instanceof Ue&&r.typeInfo instanceof s){if('u32'===r.typeInfo.format.name)return Array.from(new Uint32Array(r.buffer,r.offset,r.typeInfo.count));if('i32'===r.typeInfo.format.name)return Array.from(new Int32Array(r.buffer,r.offset,r.typeInfo.count));if('f32'===r.typeInfo.format.name)return Array.from(new Float32Array(r.buffer,r.offset,r.typeInfo.count))}return console.error(`Unsupported return variable type ${r.typeInfo.name}`),null}execute(e){(e=null!=e?e:{}).constants&&this._setOverrides(e.constants,this.context),this._execStatements(this.ast,this.context);}dispatchWorkgroups(e,t,n,s){const r=this.context.clone();(s=null!=s?s:{}).constants&&this._setOverrides(s.constants,r),this._execStatements(this.ast,r);const a=r.getFunction(e);if(!a)return void console.error(`Function ${e} not found`);if('number'==typeof t)t=[t,1,1];else {if(0===t.length)return void console.error('Invalid dispatch count');1===t.length?t=[t[0],1,1]:2===t.length?t=[t[0],t[1],1]:t.length>3&&(t=[t[0],t[1],t[2]]);}const i=t[0],o=t[1],l=t[2],c=this.getTypeInfo('vec3u');r.setVariable('@num_workgroups',new Fe(t,c));for(const e in n)for(const t in n[e]){const s=n[e][t];r.variables.forEach((n=>{var r;const a=n.node;if(null==a?undefined:a.attributes){let i=null,o=null;for(const e of a.attributes)'binding'===e.name?i=e.value:'group'===e.name&&(o=e.value);if(t==i&&e==o)if(undefined!==s.texture&&undefined!==s.descriptor){const e=new Pe(s.texture,this.getTypeInfo(a.type),s.descriptor,null!==(r=s.texture.view)&&undefined!==r?r:null);n.value=e;}else undefined!==s.uniform?n.value=new Ue(s.uniform,this.getTypeInfo(a.type)):n.value=new Ue(s,this.getTypeInfo(a.type));}}));}for(let e=0;e<l;++e)for(let t=0;t<o;++t)for(let n=0;n<i;++n)r.setVariable('@workgroup_id',new Fe([n,t,e],this.getTypeInfo('vec3u'))),this._dispatchWorkgroup(a,[n,t,e],r);}execStatement(e,t){if(e instanceof Q)return this.evalExpression(e.value,t);if(e instanceof ne){if(e.condition){const n=this.evalExpression(e.condition,t);if(!(n instanceof Oe))throw new Error('Invalid break-if condition');if(!n.value)return null}return pt._breakObj}if(e instanceof se)return pt._continueObj;if(e instanceof M)this._let(e,t);else if(e instanceof B)this._var(e,t);else if(e instanceof U)this._const(e,t);else if(e instanceof C)this._function(e,t);else {if(e instanceof Z)return this._if(e,t);if(e instanceof j)return this._switch(e,t);if(e instanceof O)return this._for(e,t);if(e instanceof N)return this._while(e,t);if(e instanceof X)return this._loop(e,t);if(e instanceof V){const n=t.clone();return n.currentFunctionName=t.currentFunctionName,this._execStatements(e.body,n)}if(e instanceof R)this._assign(e,t);else if(e instanceof z)this._increment(e,t);else {if(e instanceof ie)return null;if(e instanceof F){const n=e.name;null===t.getVariable(n)&&t.setVariable(n,new Oe(0,this.getTypeInfo('u32')));}else if(e instanceof G)this._call(e,t);else {if(e instanceof J)return null;if(e instanceof ee)return null;console.error('Invalid statement type.',e,`Line ${e.line}`);}}}return null}evalExpression(e,t){return e instanceof ke?this._evalBinaryOp(e,t):e instanceof ge?this._evalLiteral(e,t):e instanceof me?this._evalVariable(e,t):e instanceof de?this._evalCall(e,t):e instanceof pe?this._evalCreate(e,t):e instanceof _e?this._evalConst(e,t):e instanceof xe?this._evalBitcast(e,t):e instanceof we?this._evalUnaryOp(e,t):(console.error('Invalid expression type',e,`Line ${e.line}`),null)}getTypeInfo(e){var t;if(e instanceof re){const t=this.reflection.getTypeInfo(e);if(null!==t)return t}let n=null!==(t=this.typeInfo[e])&&undefined!==t?t:null;return null!==n||(n=this.reflection.getTypeInfoByName(e)),n}_setOverrides(e,t){for(const n in e){const s=e[n],r=this.reflection.getOverrideInfo(n);null!==r?(null===r.type&&(r.type=this.getTypeInfo('u32')),'u32'===r.type.name||'i32'===r.type.name||'f32'===r.type.name||'f16'===r.type.name?t.setVariable(n,new Oe(s,r.type)):'bool'===r.type.name?t.setVariable(n,new Oe(s?1:0,r.type)):'vec2'===r.type.name||'vec3'===r.type.name||'vec4'===r.type.name||'vec2f'===r.type.name||'vec3f'===r.type.name||'vec4f'===r.type.name||'vec2i'===r.type.name||'vec3i'===r.type.name||'vec4i'===r.type.name||'vec2u'===r.type.name||'vec3u'===r.type.name||'vec4u'===r.type.name||'vec2h'===r.type.name||'vec3h'===r.type.name||'vec4h'===r.type.name?t.setVariable(n,new Fe(s,r.type)):console.error(`Invalid constant type for ${n}`)):console.error(`Override ${n} does not exist in the shader.`);}}_dispatchWorkgroup(e,t,n){const s=[1,1,1];for(const t of e.node.attributes)if('workgroup_size'===t.name){if(t.value.length>0){const e=n.getVariableValue(t.value[0]);s[0]=e instanceof Oe?e.value:parseInt(t.value[0]);}if(t.value.length>1){const e=n.getVariableValue(t.value[1]);s[1]=e instanceof Oe?e.value:parseInt(t.value[1]);}if(t.value.length>2){const e=n.getVariableValue(t.value[2]);s[2]=e instanceof Oe?e.value:parseInt(t.value[2]);}}const r=this.getTypeInfo('vec3u'),a=this.getTypeInfo('u32');n.setVariable('@workgroup_size',new Fe(s,r));const i=s[0],o=s[1],l=s[2];for(let c=0,u=0;c<l;++c)for(let l=0;l<o;++l)for(let o=0;o<i;++o,++u){const i=[o,l,c],h=[o+t[0]*s[0],l+t[1]*s[1],c+t[2]*s[2]];n.setVariable('@local_invocation_id',new Fe(i,r)),n.setVariable('@global_invocation_id',new Fe(h,r)),n.setVariable('@local_invocation_index',new Oe(u,a)),this._dispatchExec(e,n);}}_dispatchExec(e,t){for(const n of e.node.args)for(const e of n.attributes)if('builtin'===e.name){const s=`@${e.value}`,r=t.getVariable(s);undefined!==r&&t.variables.set(n.name,r);}this._execStatements(e.node.body,t);}getVariableName(e,t){for(;e instanceof we;)e=e.right;return e instanceof me?e.name:(console.error('Unknown variable type',e,'Line',e.line),null)}_execStatements(e,t){for(const n of e){if(n instanceof Array){const e=t.clone(),s=this._execStatements(n,e);if(s)return s;continue}const e=this.execStatement(n,t);if(e)return e}return null}_call(e,t){const n=t.clone();n.currentFunctionName=e.name;const s=t.getFunction(e.name);if(s){for(let t=0;t<s.node.args.length;++t){const r=s.node.args[t],a=this.evalExpression(e.args[t],n);n.setVariable(r.name,a,r);}this._execStatements(s.node.body,n);}else if(e.isBuiltin)this._callBuiltinFunction(e,n);else {this.getTypeInfo(e.name)&&this._evalCreate(e,t);}}_increment(e,t){const n=this.getVariableName(e.variable,t),s=t.getVariable(n);s?'++'===e.operator?s.value instanceof Oe?s.value.value++:console.error(`Variable ${n} is not a scalar. Line ${e.line}`):'--'===e.operator?s.value instanceof Oe?s.value.value--:console.error(`Variable ${n} is not a scalar. Line ${e.line}`):console.error(`Unknown increment operator ${e.operator}. Line ${e.line}`):console.error(`Variable ${n} not found. Line ${e.line}`);}_getVariableData(e,t){if(e instanceof me){const n=this.getVariableName(e,t),s=t.getVariable(n);return null===s?(console.error(`Variable ${n} not found. Line ${e.line}`),null):s.value.getSubData(this,e.postfix,t)}if(e instanceof we){if('*'===e.operator){const n=this._getVariableData(e.right,t);return n instanceof Ve?n.reference.getSubData(this,e.postfix,t):(console.error(`Variable ${e.right} is not a pointer. Line ${e.line}`),null)}if('&'===e.operator){const n=this._getVariableData(e.right,t);return new Ve(n)}}return null}_assign(e,t){let n=null,s='<var>',r=null;if(e.variable instanceof we){const n=this._getVariableData(e.variable,t),s=this.evalExpression(e.value,t),r=e.operator;if('='===r){if(n instanceof Oe||n instanceof Fe||n instanceof Me){if(s instanceof Oe||s instanceof Fe||s instanceof Me&&n.data.length===s.data.length)return void n.data.set(s.data);console.error(`Invalid assignment. Line ${e.line}`);}else if(n instanceof Ue&&s instanceof Ue&&n.buffer.byteLength-n.offset>=s.buffer.byteLength-s.offset)return void(n.buffer.byteLength%4==0?new Uint32Array(n.buffer,n.offset,n.typeInfo.size/4).set(new Uint32Array(s.buffer,s.offset,s.typeInfo.size/4)):new Uint8Array(n.buffer,n.offset,n.typeInfo.size).set(new Uint8Array(s.buffer,s.offset,s.typeInfo.size)));return console.error(`Invalid assignment. Line ${e.line}`),null}if('+='===r)return n instanceof Oe||n instanceof Fe||n instanceof Me?s instanceof Oe||s instanceof Fe||s instanceof Me?void n.data.set(s.data.map(((e,t)=>n.data[t]+e))):void console.error(`Invalid assignment . Line ${e.line}`):void console.error(`Invalid assignment. Line ${e.line}`);if('-='===r)return (n instanceof Oe||n instanceof Fe||n instanceof Me)&&(s instanceof Oe||s instanceof Fe||s instanceof Me)?void n.data.set(s.data.map(((e,t)=>n.data[t]-e))):void console.error(`Invalid assignment. Line ${e.line}`)}if(e.variable instanceof we){if('*'===e.variable.operator){s=this.getVariableName(e.variable.right,t);const r=t.getVariable(s);if(!(r&&r.value instanceof Ve))return void console.error(`Variable ${s} is not a pointer. Line ${e.line}`);n=r.value.reference;let a=e.variable.postfix;if(!a){let t=e.variable.right;for(;t instanceof we;){if(t.postfix){a=t.postfix;break}t=t.right;}}a&&(n=n.getSubData(this,a,t));}}else {r=e.variable.postfix,s=this.getVariableName(e.variable,t);const a=t.getVariable(s);if(null===a)return void console.error(`Variable ${s} not found. Line ${e.line}`);n=a.value;}if(n instanceof Ve&&(n=n.reference),null===n)return void console.error(`Variable ${s} not found. Line ${e.line}`);const a=this.evalExpression(e.value,t),i=e.operator;if('='===i)if(n instanceof Ue)n.setDataValue(this,a,r,t);else if(r){if(!(n instanceof Fe||n instanceof Me))return void console.error(`Variable ${s} is not a vector or matrix. Line ${e.line}`);if(r instanceof be){const i=this.evalExpression(r.index,t).value;if(n instanceof Fe){if(!(a instanceof Oe))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[i]=a.value;}else {if(!(n instanceof Me))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);{const i=this.evalExpression(r.index,t).value;if(i<0)return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);if(!(a instanceof Fe))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);{const t=n.typeInfo.getTypeName();if('mat2x2'===t||'mat2x2f'===t||'mat2x2h'===t){if(!(i<2&&2===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[2*i]=a.data[0],n.data[2*i+1]=a.data[1];}else if('mat2x3'===t||'mat2x3f'===t||'mat2x3h'===t){if(!(i<2&&3===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[3*i]=a.data[0],n.data[3*i+1]=a.data[1],n.data[3*i+2]=a.data[2];}else if('mat2x4'===t||'mat2x4f'===t||'mat2x4h'===t){if(!(i<2&&4===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[4*i]=a.data[0],n.data[4*i+1]=a.data[1],n.data[4*i+2]=a.data[2],n.data[4*i+3]=a.data[3];}else if('mat3x2'===t||'mat3x2f'===t||'mat3x2h'===t){if(!(i<3&&2===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[2*i]=a.data[0],n.data[2*i+1]=a.data[1];}else if('mat3x3'===t||'mat3x3f'===t||'mat3x3h'===t){if(!(i<3&&3===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[3*i]=a.data[0],n.data[3*i+1]=a.data[1],n.data[3*i+2]=a.data[2];}else if('mat3x4'===t||'mat3x4f'===t||'mat3x4h'===t){if(!(i<3&&4===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[4*i]=a.data[0],n.data[4*i+1]=a.data[1],n.data[4*i+2]=a.data[2],n.data[4*i+3]=a.data[3];}else if('mat4x2'===t||'mat4x2f'===t||'mat4x2h'===t){if(!(i<4&&2===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[2*i]=a.data[0],n.data[2*i+1]=a.data[1];}else if('mat4x3'===t||'mat4x3f'===t||'mat4x3h'===t){if(!(i<4&&3===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[3*i]=a.data[0],n.data[3*i+1]=a.data[1],n.data[3*i+2]=a.data[2];}else {if('mat4x4'!==t&&'mat4x4f'!==t&&'mat4x4h'!==t)return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);if(!(i<4&&4===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[4*i]=a.data[0],n.data[4*i+1]=a.data[1],n.data[4*i+2]=a.data[2],n.data[4*i+3]=a.data[3];}}}}}else if(r instanceof fe){const t=r.value;if(!(n instanceof Fe))return void console.error(`Invalid assignment to ${t}. Variable ${s} is not a vector. Line ${e.line}`);if(a instanceof Oe){if(t.length>1)return void console.error(`Invalid assignment to ${t} for variable ${s}. Line ${e.line}`);if('x'===t)n.data[0]=a.value;else if('y'===t){if(n.data.length<2)return void console.error(`Invalid assignment to ${t} for variable ${s}. Line ${e.line}`);n.data[1]=a.value;}else if('z'===t){if(n.data.length<3)return void console.error(`Invalid assignment to ${t} for variable ${s}. Line ${e.line}`);n.data[2]=a.value;}else if('w'===t){if(n.data.length<4)return void console.error(`Invalid assignment to ${t} for variable ${s}. Line ${e.line}`);n.data[3]=a.value;}}else {if(!(a instanceof Fe))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);if(t.length!==a.data.length)return void console.error(`Invalid assignment to ${t} for variable ${s}. Line ${e.line}`);for(let r=0;r<t.length;++r){const i=t[r];if('x'===i||'r'===i)n.data[0]=a.data[r];else if('y'===i||'g'===i){if(a.data.length<2)return void console.error(`Invalid assignment to ${i} for variable ${s}. Line ${e.line}`);n.data[1]=a.data[r];}else if('z'===i||'b'===i){if(a.data.length<3)return void console.error(`Invalid assignment to ${i} for variable ${s}. Line ${e.line}`);n.data[2]=a.data[r];}else {if('w'!==i&&'a'!==i)return void console.error(`Invalid assignment to ${i} for variable ${s}. Line ${e.line}`);if(a.data.length<4)return void console.error(`Invalid assignment to ${i} for variable ${s}. Line ${e.line}`);n.data[3]=a.data[r];}}}}}else n instanceof Oe&&a instanceof Oe?n.value=a.value:n instanceof Fe&&a instanceof Fe||n instanceof Me&&a instanceof Me?n.data.set(a.data):console.error(`Invalid assignment to ${s}. Line ${e.line}`);else {const s=n.getSubData(this,r,t);if(s instanceof Fe&&a instanceof Oe){const t=s.data,n=a.value;if('+='===i)for(let e=0;e<t.length;++e)t[e]+=n;else if('-='===i)for(let e=0;e<t.length;++e)t[e]-=n;else if('*='===i)for(let e=0;e<t.length;++e)t[e]*=n;else if('/='===i)for(let e=0;e<t.length;++e)t[e]/=n;else if('%='===i)for(let e=0;e<t.length;++e)t[e]%=n;else if('&='===i)for(let e=0;e<t.length;++e)t[e]&=n;else if('|='===i)for(let e=0;e<t.length;++e)t[e]|=n;else if('^='===i)for(let e=0;e<t.length;++e)t[e]^=n;else if('<<='===i)for(let e=0;e<t.length;++e)t[e]<<=n;else if('>>='===i)for(let e=0;e<t.length;++e)t[e]>>=n;else console.error(`Invalid operator ${i}. Line ${e.line}`);}else if(s instanceof Fe&&a instanceof Fe){const t=s.data,n=a.data;if(t.length!==n.length)return void console.error(`Vector length mismatch. Line ${e.line}`);if('+='===i)for(let e=0;e<t.length;++e)t[e]+=n[e];else if('-='===i)for(let e=0;e<t.length;++e)t[e]-=n[e];else if('*='===i)for(let e=0;e<t.length;++e)t[e]*=n[e];else if('/='===i)for(let e=0;e<t.length;++e)t[e]/=n[e];else if('%='===i)for(let e=0;e<t.length;++e)t[e]%=n[e];else if('&='===i)for(let e=0;e<t.length;++e)t[e]&=n[e];else if('|='===i)for(let e=0;e<t.length;++e)t[e]|=n[e];else if('^='===i)for(let e=0;e<t.length;++e)t[e]^=n[e];else if('<<='===i)for(let e=0;e<t.length;++e)t[e]<<=n[e];else if('>>='===i)for(let e=0;e<t.length;++e)t[e]>>=n[e];else console.error(`Invalid operator ${i}. Line ${e.line}`);}else {if(!(s instanceof Oe&&a instanceof Oe))return void console.error(`Invalid type for ${e.operator} operator. Line ${e.line}`);'+='===i?s.value+=a.value:'-='===i?s.value-=a.value:'*='===i?s.value*=a.value:'/='===i?s.value/=a.value:'%='===i?s.value%=a.value:'&='===i?s.value&=a.value:'|='===i?s.value|=a.value:'^='===i?s.value^=a.value:'<<='===i?s.value<<=a.value:'>>='===i?s.value>>=a.value:console.error(`Invalid operator ${i}. Line ${e.line}`);}n instanceof Ue&&n.setDataValue(this,s,r,t);}}_function(e,t){const n=new ot(e);t.functions.set(e.name,n);}_const(e,t){let n=null;null!==e.value&&(n=this.evalExpression(e.value,t)),t.createVariable(e.name,n,e);}_let(e,t){let n=null;if(null!==e.value){if(n=this.evalExpression(e.value,t),null===n)return void console.error(`Invalid value for variable ${e.name}. Line ${e.line}`);e.value instanceof we||(n=n.clone());}else {const s=e.type.name;if('f32'===s||'i32'===s||'u32'===s||'bool'===s||'f16'===s||'vec2'===s||'vec3'===s||'vec4'===s||'vec2f'===s||'vec3f'===s||'vec4f'===s||'vec2i'===s||'vec3i'===s||'vec4i'===s||'vec2u'===s||'vec3u'===s||'vec4u'===s||'vec2h'===s||'vec3h'===s||'vec4h'===s||'vec2b'===s||'vec3b'===s||'vec4b'===s||'mat2x2'===s||'mat2x3'===s||'mat2x4'===s||'mat3x2'===s||'mat3x3'===s||'mat3x4'===s||'mat4x2'===s||'mat4x3'===s||'mat4x4'===s||'mat2x2f'===s||'mat2x3f'===s||'mat2x4f'===s||'mat3x2f'===s||'mat3x3f'===s||'mat3x4f'===s||'mat4x2f'===s||'mat4x3f'===s||'mat4x4f'===s||'mat2x2h'===s||'mat2x3h'===s||'mat2x4h'===s||'mat3x2h'===s||'mat3x3h'===s||'mat3x4h'===s||'mat4x2h'===s||'mat4x3h'===s||'mat4x4h'===s||'array'===s){const s=new pe(e.type,[]);n=this._evalCreate(s,t);}}t.createVariable(e.name,n,e);}_var(e,t){let n=null;if(null!==e.value){if(n=this.evalExpression(e.value,t),null===n)return void console.error(`Invalid value for variable ${e.name}. Line ${e.line}`);e.value instanceof we||(n=n.clone());}else {if(null===e.type)return void console.error(`Variable ${e.name} has no type. Line ${e.line}`);const s=e.type.name;if('f32'===s||'i32'===s||'u32'===s||'bool'===s||'f16'===s||'vec2'===s||'vec3'===s||'vec4'===s||'vec2f'===s||'vec3f'===s||'vec4f'===s||'vec2i'===s||'vec3i'===s||'vec4i'===s||'vec2u'===s||'vec3u'===s||'vec4u'===s||'vec2h'===s||'vec3h'===s||'vec4h'===s||'vec2b'===s||'vec3b'===s||'vec4b'===s||'mat2x2'===s||'mat2x3'===s||'mat2x4'===s||'mat3x2'===s||'mat3x3'===s||'mat3x4'===s||'mat4x2'===s||'mat4x3'===s||'mat4x4'===s||'mat2x2f'===s||'mat2x3f'===s||'mat2x4f'===s||'mat3x2f'===s||'mat3x3f'===s||'mat3x4f'===s||'mat4x2f'===s||'mat4x3f'===s||'mat4x4f'===s||'mat2x2h'===s||'mat2x3h'===s||'mat2x4h'===s||'mat3x2h'===s||'mat3x3h'===s||'mat3x4h'===s||'mat4x2h'===s||'mat4x3h'===s||'mat4x4h'===s||e.type instanceof ce||e.type instanceof ie||e.type instanceof oe){const s=new pe(e.type,[]);n=this._evalCreate(s,t);}}t.createVariable(e.name,n,e);}_switch(e,t){t=t.clone();const n=this.evalExpression(e.condition,t);if(!(n instanceof Oe))return console.error(`Invalid if condition. Line ${e.line}`),null;let s=null;for(const r of e.cases)if(r instanceof Se)for(const a of r.selectors){if(a instanceof Te){s=r;continue}const i=this.evalExpression(a,t);if(!(i instanceof Oe))return console.error(`Invalid case selector. Line ${e.line}`),null;if(i.value===n.value)return this._execStatements(r.body,t)}else r instanceof Ae&&(s=r);return s?this._execStatements(s.body,t):null}_if(e,t){t=t.clone();const n=this.evalExpression(e.condition,t);if(!(n instanceof Oe))return console.error(`Invalid if condition. Line ${e.line}`),null;if(n.value)return this._execStatements(e.body,t);for(const n of e.elseif){const s=this.evalExpression(n.condition,t);if(!(s instanceof Oe))return console.error(`Invalid if condition. Line ${e.line}`),null;if(s.value)return this._execStatements(n.body,t)}return e.else?this._execStatements(e.else,t):null}_getScalarValue(e){return e instanceof Oe?e.value:(console.error('Expected scalar value.',e),0)}_for(e,t){for(t=t.clone(),this.execStatement(e.init,t);this._getScalarValue(this.evalExpression(e.condition,t));){const n=this._execStatements(e.body,t);if(n===pt._breakObj)break;if(null!==n&&n!==pt._continueObj)return n;this.execStatement(e.increment,t);}return null}_loop(e,t){for(t=t.clone();;){const n=this._execStatements(e.body,t);if(n===pt._breakObj)break;if(n===pt._continueObj){if(e.continuing){if(this._execStatements(e.continuing.body,t)===pt._breakObj)break}}else if(null!==n)return n}return null}_while(e,t){for(t=t.clone();this._getScalarValue(this.evalExpression(e.condition,t));){const n=this._execStatements(e.body,t);if(n===pt._breakObj)break;if(n!==pt._continueObj&&null!==n)return n}return null}_evalBitcast(e,t){const n=this.evalExpression(e.value,t),s=e.type;if(n instanceof Oe){const e=tt(n.value,n.typeInfo.name,s.name);return new Oe(e,this.getTypeInfo(s))}if(n instanceof Fe){const t=n.typeInfo.getTypeName();let r='';if(t.endsWith('f'))r='f32';else if(t.endsWith('i'))r='i32';else if(t.endsWith('u'))r='u32';else if(t.endsWith('b'))r='bool';else {if(!t.endsWith('h'))return console.error(`Unknown vector type ${t}. Line ${e.line}`),null;r='f16';}const a=s.getTypeName();let i='';if(a.endsWith('f'))i='f32';else if(a.endsWith('i'))i='i32';else if(a.endsWith('u'))i='u32';else if(a.endsWith('b'))i='bool';else {if(!a.endsWith('h'))return console.error(`Unknown vector type ${i}. Line ${e.line}`),null;i='f16';}const o=function(e,t,n){if(t===n)return e;const s=new Array(e.length);for(let r=0;r<e.length;r++)s[r]=tt(e[r],t,n);return s}(Array.from(n.data),r,i);return new Fe(o,this.getTypeInfo(s))}return console.error(`TODO: bitcast for ${n.typeInfo.name}. Line ${e.line}`),null}_evalConst(e,t){return t.getVariableValue(e.name).clone().getSubData(this,e.postfix,t)}_evalCreate(e,t){var r;if(e instanceof pe){if(null===e.type)return Ne.void;switch(e.type.getTypeName()){case 'bool':case 'i32':case 'u32':case 'f32':case 'f16':return this._callConstructorValue(e,t);case 'vec2':case 'vec3':case 'vec4':case 'vec2f':case 'vec3f':case 'vec4f':case 'vec2h':case 'vec3h':case 'vec4h':case 'vec2i':case 'vec3i':case 'vec4i':case 'vec2u':case 'vec3u':case 'vec4u':case 'vec2b':case 'vec3b':case 'vec4b':return this._callConstructorVec(e,t);case 'mat2x2':case 'mat2x2f':case 'mat2x2h':case 'mat2x3':case 'mat2x3f':case 'mat2x3h':case 'mat2x4':case 'mat2x4f':case 'mat2x4h':case 'mat3x2':case 'mat3x2f':case 'mat3x2h':case 'mat3x3':case 'mat3x3f':case 'mat3x3h':case 'mat3x4':case 'mat3x4f':case 'mat3x4h':case 'mat4x2':case 'mat4x2f':case 'mat4x2h':case 'mat4x3':case 'mat4x3f':case 'mat4x3h':case 'mat4x4':case 'mat4x4f':case 'mat4x4h':return this._callConstructorMatrix(e,t)}}const a=e instanceof pe?e.type.name:e.name,i=e instanceof pe?this.getTypeInfo(e.type):this.getTypeInfo(e.name);if(null===i)return console.error(`Unknown type ${a}. Line ${e.line}`),null;if(0===i.size)return null;const o=new Ue(new ArrayBuffer(i.size),i,0);if(i instanceof n){if(e.args)for(let n=0;n<e.args.length;++n){const s=i.members[n],r=e.args[n],a=this.evalExpression(r,t);o.setData(this,a,s.type,s.offset,t);}}else if(i instanceof s){let n=0;if(e.args)for(let s=0;s<e.args.length;++s){const a=e.args[s],l=this.evalExpression(a,t);null===i.format&&('x32'===(null===(r=l.typeInfo)||undefined===r?undefined:r.name)?i.format=this.getTypeInfo('i32'):i.format=l.typeInfo),o.setData(this,l,i.format,n,t),n+=i.stride;}}else console.error(`Unknown type \"${a}\". Line ${e.line}`);return e instanceof pe?o.getSubData(this,e.postfix,t):o}_evalLiteral(e,t){const n=this.getTypeInfo(e.type),s=n.name;if('x32'===s||'u32'===s||'f32'===s||'f16'===s||'i32'===s||'bool'===s){return new Oe(e.scalarValue,n)}return 'vec2'===s||'vec3'===s||'vec4'===s||'vec2f'===s||'vec3f'===s||'vec4f'===s||'vec2h'===s||'vec3h'===s||'vec4h'===s||'vec2i'===s||'vec3i'===s||'vec4i'===s||'vec2u'===s||'vec3u'===s||'vec4u'===s?this._callConstructorVec(e,t):'mat2x2'===s||'mat2x3'===s||'mat2x4'===s||'mat3x2'===s||'mat3x3'===s||'mat3x4'===s||'mat4x2'===s||'mat4x3'===s||'mat4x4'===s||'mat2x2f'===s||'mat2x3f'===s||'mat2x4f'===s||'mat3x2f'===s||'mat3x3f'===s||'mat3x4f'===s||'mat4x2f'===s||'mat4x3f'===s||'mat4x4f'===s||'mat2x2h'===s||'mat2x3h'===s||'mat2x4h'===s||'mat3x2h'===s||'mat3x3h'===s||'mat3x4h'===s||'mat4x2h'===s||'mat4x3h'===s||'mat4x4h'===s?this._callConstructorMatrix(e,t):e.value}_evalVariable(e,t){const n=t.getVariableValue(e.name);return null===n?n:n.getSubData(this,e.postfix,t)}_maxFormatTypeInfo(e){let t=e[0];if('f32'===t.name)return t;for(let n=1;n<e.length;++n){const s=pt._priority.get(t.name);pt._priority.get(e[n].name)<s&&(t=e[n]);}return 'x32'===t.name?this.getTypeInfo('i32'):t}_evalUnaryOp(e,t){const n=this.evalExpression(e.right,t);if('&'===e.operator)return new Ve(n);if('*'===e.operator)return n instanceof Ve?n.reference.getSubData(this,e.postfix,t):(console.error(`Invalid dereference. Line ${e.line}`),null);const s=n instanceof Oe?n.value:n instanceof Fe?Array.from(n.data):null;switch(e.operator){case '+':{if(Re(s)){const e=s.map(((e,t)=>+e));return new Fe(e,n.typeInfo)}const e=s,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Oe(+e,t)}case '-':{if(Re(s)){const e=s.map(((e,t)=>-e));return new Fe(e,n.typeInfo)}const e=s,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Oe(-e,t)}case '!':{if(Re(s)){const e=s.map(((e,t)=>e?0:1));return new Fe(e,n.typeInfo)}const e=s,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Oe(e?0:1,t)}case '~':{if(Re(s)){const e=s.map(((e,t)=>~e));return new Fe(e,n.typeInfo)}const e=s,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Oe(~e,t)}}return console.error(`Invalid unary operator ${e.operator}. Line ${e.line}`),null}_evalBinaryOp(e,t){const n=this.evalExpression(e.left,t),s=this.evalExpression(e.right,t),r=n instanceof Oe?n.value:n instanceof Fe||n instanceof Me?Array.from(n.data):null,a=s instanceof Oe?s.value:s instanceof Fe||s instanceof Me?Array.from(s.data):null;switch(e.operator){case '+':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e+s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t+e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e+t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t+i,o)}case '-':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e-s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t-e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e-t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t-i,o)}case '*':{if(Re(r)&&Re(a)){const t=r,i=a;if(n instanceof Me&&s instanceof Me){const r=function(e,t,n,s){if(undefined===ft[t.name]||undefined===ft[s.name])return null;const r=ft[t.name][0],a=ft[t.name][1],i=ft[s.name][0];if(r!==ft[s.name][1])return null;const o=new Array(i*a);for(let t=0;t<a;t++)for(let s=0;s<i;s++){let l=0;for(let i=0;i<r;i++)l+=e[i*a+t]*n[s*r+i];o[t*i+s]=l;}return o}(t,n.typeInfo,i,s.typeInfo);if(null===r)return console.error(`Matrix multiplication failed. Line ${e.line}.`),null;const a=ft[s.typeInfo.name][0],o=ft[n.typeInfo.name][1],l=this.getTypeInfo(`mat${a}x${o}f`);return new Me(r,l)}if(n instanceof Me&&s instanceof Fe){const r=function(e,t,n,s){if(undefined===ft[t.name]||undefined===ht[s.name])return null;const r=ft[t.name][0],a=ft[t.name][1];if(r!==n.length)return null;const i=new Array(a);for(let t=0;t<a;t++){let s=0;for(let i=0;i<r;i++)s+=e[i*a+t]*n[i];i[t]=s;}return i}(t,n.typeInfo,i,s.typeInfo);return null===r?(console.error(`Matrix vector multiplication failed. Line ${e.line}.`),null):new Fe(r,s.typeInfo)}if(n instanceof Fe&&s instanceof Me){const r=function(e,t,n,s){if(undefined===ht[t.name]||undefined===ft[s.name])return null;const r=ft[s.name][0],a=ft[s.name][1];if(a!==e.length)return null;const i=[];for(let t=0;t<r;t++){let s=0;for(let i=0;i<a;i++)s+=e[i]*n[i*r+t];i[t]=s;}return i}(t,n.typeInfo,i,s.typeInfo);return null===r?(console.error(`Matrix vector multiplication failed. Line ${e.line}.`),null):new Fe(r,n.typeInfo)}{if(t.length!==i.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const s=t.map(((e,t)=>e*i[t]));return new Fe(s,n.typeInfo)}}if(Re(r)){const e=a,t=r.map(((t,n)=>t*e));return n instanceof Me?new Me(t,n.typeInfo):new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e*t));return s instanceof Me?new Me(t,s.typeInfo):new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t*i,o)}case '%':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e%s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t%e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e%t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t%i,o)}case '/':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e/s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t/e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e/t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t/i,o)}case '&':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e&s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t&e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e&t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t&i,o)}case '|':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e|s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t|e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e|t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t|i,o)}case '^':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e^s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t^e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e^t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t^i,o)}case '<<':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e<<s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t<<e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e<<t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t<<i,o)}case '>>':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e>>s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t>>e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e>>t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t>>i,o)}case '>':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e>s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t>e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e>t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r>a?1:0,this.getTypeInfo('bool'));case '<':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e<s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t<e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e<t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r<a?1:0,this.getTypeInfo('bool'));case '==':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e===s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t==e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e==t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r===a?1:0,this.getTypeInfo('bool'));case '!=':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e!==s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t!==e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e!==t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r!==a?1:0,this.getTypeInfo('bool'));case '>=':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e>=s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t>=e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e>=t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r>=a?1:0,this.getTypeInfo('bool'));case '<=':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e<=s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t<=e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e<=t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r<=a?1:0,this.getTypeInfo('bool'));case '&&':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e&&s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t&&e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e&&t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r&&a?1:0,this.getTypeInfo('bool'));case '||':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e||s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t||e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e||t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r||a?1:0,this.getTypeInfo('bool'))}return console.error(`Unknown operator ${e.operator}. Line ${e.line}`),null}_evalCall(e,t){if(null!==e.cachedReturnValue)return e.cachedReturnValue;const n=t.clone();n.currentFunctionName=e.name;const s=t.getFunction(e.name);if(!s){if(e.isBuiltin)return this._callBuiltinFunction(e,n);return this.getTypeInfo(e.name)?this._evalCreate(e,t):(console.error(`Unknown function \"${e.name}\". Line ${e.line}`),null)}for(let t=0;t<s.node.args.length;++t){const r=s.node.args[t],a=this.evalExpression(e.args[t],n);n.createVariable(r.name,a,r);}return this._execStatements(s.node.body,n)}_callBuiltinFunction(e,t){switch(e.name){case 'all':return this.builtins.All(e,t);case 'any':return this.builtins.Any(e,t);case 'select':return this.builtins.Select(e,t);case 'arrayLength':return this.builtins.ArrayLength(e,t);case 'abs':return this.builtins.Abs(e,t);case 'acos':return this.builtins.Acos(e,t);case 'acosh':return this.builtins.Acosh(e,t);case 'asin':return this.builtins.Asin(e,t);case 'asinh':return this.builtins.Asinh(e,t);case 'atan':return this.builtins.Atan(e,t);case 'atanh':return this.builtins.Atanh(e,t);case 'atan2':return this.builtins.Atan2(e,t);case 'ceil':return this.builtins.Ceil(e,t);case 'clamp':return this.builtins.Clamp(e,t);case 'cos':return this.builtins.Cos(e,t);case 'cosh':return this.builtins.Cosh(e,t);case 'countLeadingZeros':return this.builtins.CountLeadingZeros(e,t);case 'countOneBits':return this.builtins.CountOneBits(e,t);case 'countTrailingZeros':return this.builtins.CountTrailingZeros(e,t);case 'cross':return this.builtins.Cross(e,t);case 'degrees':return this.builtins.Degrees(e,t);case 'determinant':return this.builtins.Determinant(e,t);case 'distance':return this.builtins.Distance(e,t);case 'dot':return this.builtins.Dot(e,t);case 'dot4U8Packed':return this.builtins.Dot4U8Packed(e,t);case 'dot4I8Packed':return this.builtins.Dot4I8Packed(e,t);case 'exp':return this.builtins.Exp(e,t);case 'exp2':return this.builtins.Exp2(e,t);case 'extractBits':return this.builtins.ExtractBits(e,t);case 'faceForward':return this.builtins.FaceForward(e,t);case 'firstLeadingBit':return this.builtins.FirstLeadingBit(e,t);case 'firstTrailingBit':return this.builtins.FirstTrailingBit(e,t);case 'floor':return this.builtins.Floor(e,t);case 'fma':return this.builtins.Fma(e,t);case 'fract':return this.builtins.Fract(e,t);case 'frexp':return this.builtins.Frexp(e,t);case 'insertBits':return this.builtins.InsertBits(e,t);case 'inverseSqrt':return this.builtins.InverseSqrt(e,t);case 'ldexp':return this.builtins.Ldexp(e,t);case 'length':return this.builtins.Length(e,t);case 'log':return this.builtins.Log(e,t);case 'log2':return this.builtins.Log2(e,t);case 'max':return this.builtins.Max(e,t);case 'min':return this.builtins.Min(e,t);case 'mix':return this.builtins.Mix(e,t);case 'modf':return this.builtins.Modf(e,t);case 'normalize':return this.builtins.Normalize(e,t);case 'pow':return this.builtins.Pow(e,t);case 'quantizeToF16':return this.builtins.QuantizeToF16(e,t);case 'radians':return this.builtins.Radians(e,t);case 'reflect':return this.builtins.Reflect(e,t);case 'refract':return this.builtins.Refract(e,t);case 'reverseBits':return this.builtins.ReverseBits(e,t);case 'round':return this.builtins.Round(e,t);case 'saturate':return this.builtins.Saturate(e,t);case 'sign':return this.builtins.Sign(e,t);case 'sin':return this.builtins.Sin(e,t);case 'sinh':return this.builtins.Sinh(e,t);case 'smoothStep':return this.builtins.SmoothStep(e,t);case 'sqrt':return this.builtins.Sqrt(e,t);case 'step':return this.builtins.Step(e,t);case 'tan':return this.builtins.Tan(e,t);case 'tanh':return this.builtins.Tanh(e,t);case 'transpose':return this.builtins.Transpose(e,t);case 'trunc':return this.builtins.Trunc(e,t);case 'dpdx':return this.builtins.Dpdx(e,t);case 'dpdxCoarse':return this.builtins.DpdxCoarse(e,t);case 'dpdxFine':return this.builtins.DpdxFine(e,t);case 'dpdy':return this.builtins.Dpdy(e,t);case 'dpdyCoarse':return this.builtins.DpdyCoarse(e,t);case 'dpdyFine':return this.builtins.DpdyFine(e,t);case 'fwidth':return this.builtins.Fwidth(e,t);case 'fwidthCoarse':return this.builtins.FwidthCoarse(e,t);case 'fwidthFine':return this.builtins.FwidthFine(e,t);case 'textureDimensions':return this.builtins.TextureDimensions(e,t);case 'textureGather':return this.builtins.TextureGather(e,t);case 'textureGatherCompare':return this.builtins.TextureGatherCompare(e,t);case 'textureLoad':return this.builtins.TextureLoad(e,t);case 'textureNumLayers':return this.builtins.TextureNumLayers(e,t);case 'textureNumLevels':return this.builtins.TextureNumLevels(e,t);case 'textureNumSamples':return this.builtins.TextureNumSamples(e,t);case 'textureSample':return this.builtins.TextureSample(e,t);case 'textureSampleBias':return this.builtins.TextureSampleBias(e,t);case 'textureSampleCompare':return this.builtins.TextureSampleCompare(e,t);case 'textureSampleCompareLevel':return this.builtins.TextureSampleCompareLevel(e,t);case 'textureSampleGrad':return this.builtins.TextureSampleGrad(e,t);case 'textureSampleLevel':return this.builtins.TextureSampleLevel(e,t);case 'textureSampleBaseClampToEdge':return this.builtins.TextureSampleBaseClampToEdge(e,t);case 'textureStore':return this.builtins.TextureStore(e,t);case 'atomicLoad':return this.builtins.AtomicLoad(e,t);case 'atomicStore':return this.builtins.AtomicStore(e,t);case 'atomicAdd':return this.builtins.AtomicAdd(e,t);case 'atomicSub':return this.builtins.AtomicSub(e,t);case 'atomicMax':return this.builtins.AtomicMax(e,t);case 'atomicMin':return this.builtins.AtomicMin(e,t);case 'atomicAnd':return this.builtins.AtomicAnd(e,t);case 'atomicOr':return this.builtins.AtomicOr(e,t);case 'atomicXor':return this.builtins.AtomicXor(e,t);case 'atomicExchange':return this.builtins.AtomicExchange(e,t);case 'atomicCompareExchangeWeak':return this.builtins.AtomicCompareExchangeWeak(e,t);case 'pack4x8snorm':return this.builtins.Pack4x8snorm(e,t);case 'pack4x8unorm':return this.builtins.Pack4x8unorm(e,t);case 'pack4xI8':return this.builtins.Pack4xI8(e,t);case 'pack4xU8':return this.builtins.Pack4xU8(e,t);case 'pack4x8Clamp':return this.builtins.Pack4x8Clamp(e,t);case 'pack4xU8Clamp':return this.builtins.Pack4xU8Clamp(e,t);case 'pack2x16snorm':return this.builtins.Pack2x16snorm(e,t);case 'pack2x16unorm':return this.builtins.Pack2x16unorm(e,t);case 'pack2x16float':return this.builtins.Pack2x16float(e,t);case 'unpack4x8snorm':return this.builtins.Unpack4x8snorm(e,t);case 'unpack4x8unorm':return this.builtins.Unpack4x8unorm(e,t);case 'unpack4xI8':return this.builtins.Unpack4xI8(e,t);case 'unpack4xU8':return this.builtins.Unpack4xU8(e,t);case 'unpack2x16snorm':return this.builtins.Unpack2x16snorm(e,t);case 'unpack2x16unorm':return this.builtins.Unpack2x16unorm(e,t);case 'unpack2x16float':return this.builtins.Unpack2x16float(e,t);case 'storageBarrier':return this.builtins.StorageBarrier(e,t);case 'textureBarrier':return this.builtins.TextureBarrier(e,t);case 'workgroupBarrier':return this.builtins.WorkgroupBarrier(e,t);case 'workgroupUniformLoad':return this.builtins.WorkgroupUniformLoad(e,t);case 'subgroupAdd':return this.builtins.SubgroupAdd(e,t);case 'subgroupExclusiveAdd':return this.builtins.SubgroupExclusiveAdd(e,t);case 'subgroupInclusiveAdd':return this.builtins.SubgroupInclusiveAdd(e,t);case 'subgroupAll':return this.builtins.SubgroupAll(e,t);case 'subgroupAnd':return this.builtins.SubgroupAnd(e,t);case 'subgroupAny':return this.builtins.SubgroupAny(e,t);case 'subgroupBallot':return this.builtins.SubgroupBallot(e,t);case 'subgroupBroadcast':return this.builtins.SubgroupBroadcast(e,t);case 'subgroupBroadcastFirst':return this.builtins.SubgroupBroadcastFirst(e,t);case 'subgroupElect':return this.builtins.SubgroupElect(e,t);case 'subgroupMax':return this.builtins.SubgroupMax(e,t);case 'subgroupMin':return this.builtins.SubgroupMin(e,t);case 'subgroupMul':return this.builtins.SubgroupMul(e,t);case 'subgroupExclusiveMul':return this.builtins.SubgroupExclusiveMul(e,t);case 'subgroupInclusiveMul':return this.builtins.SubgroupInclusiveMul(e,t);case 'subgroupOr':return this.builtins.SubgroupOr(e,t);case 'subgroupShuffle':return this.builtins.SubgroupShuffle(e,t);case 'subgroupShuffleDown':return this.builtins.SubgroupShuffleDown(e,t);case 'subgroupShuffleUp':return this.builtins.SubgroupShuffleUp(e,t);case 'subgroupShuffleXor':return this.builtins.SubgroupShuffleXor(e,t);case 'subgroupXor':return this.builtins.SubgroupXor(e,t);case 'quadBroadcast':return this.builtins.QuadBroadcast(e,t);case 'quadSwapDiagonal':return this.builtins.QuadSwapDiagonal(e,t);case 'quadSwapX':return this.builtins.QuadSwapX(e,t);case 'quadSwapY':return this.builtins.QuadSwapY(e,t)}const n=t.getFunction(e.name);if(n){const s=t.clone();for(let t=0;t<n.node.args.length;++t){const r=n.node.args[t],a=this.evalExpression(e.args[t],s);s.setVariable(r.name,a,r);}return this._execStatements(n.node.body,s)}return null}_callConstructorValue(e,t){if(!e.args||0===e.args.length)return new Oe(0,this.getTypeInfo(e.type));const n=this.evalExpression(e.args[0],t);return n.typeInfo=this.getTypeInfo(e.type),n.getSubData(this,e.postfix,t).clone()}_callConstructorVec(e,t){const n=this.getTypeInfo(e.type),s=e.type.getTypeName(),r=ht[s];if(undefined===r)return console.error(`Invalid vec constructor ${s}. Line ${e.line}`),null;const a=[];if(e instanceof ge)if(e.isVector){const t=e.vectorValue;for(const e of t)a.push(e);}else a.push(e.scalarValue);else if(e.args)for(const n of e.args){const e=this.evalExpression(n,t);if(e instanceof Fe){const t=e.data;for(let e=0;e<t.length;++e){let n=t[e];a.push(n);}}else if(e instanceof Oe){let t=e.value;a.push(t);}}if(e.type instanceof oe&&null===e.type.format&&(e.type.format=oe.f32),0===a.length){const s=new Array(r).fill(0);return new Fe(s,n).getSubData(this,e.postfix,t)}if(1===a.length)for(;a.length<r;)a.push(a[0]);if(a.length<r)return console.error(`Invalid vec constructor. Line ${e.line}`),null;return new Fe(a.length>r?a.slice(0,r):a,n).getSubData(this,e.postfix,t)}_callConstructorMatrix(e,t){const n=this.getTypeInfo(e.type),s=e.type.getTypeName(),r=ft[s];if(undefined===r)return console.error(`Invalid matrix constructor ${s}. Line ${e.line}`),null;const i=[];if(e instanceof ge)if(e.isVector){const t=e.vectorValue;for(const e of t)i.push(e);}else i.push(e.scalarValue);else if(e.args)for(const n of e.args){const e=this.evalExpression(n,t);e instanceof Fe?i.push(...e.data):e instanceof Oe?i.push(e.value):e instanceof Me&&i.push(...e.data);}if(n instanceof a&&null===n.format&&(n.format=this.getTypeInfo('f32')),0===i.length){const s=new Array(r[2]).fill(0);return new Me(s,n).getSubData(this,e.postfix,t)}return i.length!==r[2]?(console.error(`Invalid matrix constructor. Line ${e.line}`),null):new Me(i,n).getSubData(this,e.postfix,t)}}pt._breakObj=new De(new e('BREAK',null),null),pt._continueObj=new De(new e('CONTINUE',null),null),pt._priority=new Map([['f32',0],['f16',1],['u32',2],['i32',3],['x32',3]]);class dt{constructor(){this.constants=new Map,this.aliases=new Map,this.structs=new Map;}}class mt{constructor(){this._tokens=[],this._current=0,this._currentLine=1,this._deferArrayCountEval=[],this._currentLoop=[],this._context=new dt,this._exec=new pt,this._forwardTypeCount=0;}parse(e){this._initialize(e),this._deferArrayCountEval.length=0;const t=[];for(;!this._isAtEnd();){const e=this._global_decl_or_directive();if(!e)break;t.push(e);}if(this._deferArrayCountEval.length>0){for(const e of this._deferArrayCountEval){const t=e.arrayType,n=e.countNode;if(n instanceof me){const e=n.name,s=this._context.constants.get(e);if(s)try{const e=s.constEvaluate(this._exec);t.count=e;}catch(e){}}}this._deferArrayCountEval.length=0;}if(this._forwardTypeCount>0)for(const e of t)e.search((e=>{e instanceof Le||e instanceof le?e.type=this._forwardType(e.type):e instanceof ce?e.format=this._forwardType(e.format):e instanceof B||e instanceof M||e instanceof U?e.type=this._forwardType(e.type):e instanceof C?e.returnType=this._forwardType(e.returnType):e instanceof Ee&&(e.type=this._forwardType(e.type));}));return t}_forwardType(e){if(e instanceof ae){const t=this._getType(e.name);if(t)return t}else e instanceof le?e.type=this._forwardType(e.type):e instanceof ce&&(e.format=this._forwardType(e.format));return e}_initialize(e){if(e)if('string'==typeof e){const t=new ze(e);this._tokens=t.scanTokens();}else this._tokens=e;else this._tokens=[];this._current=0;}_updateNode(e,t){return e.line=null!=t?t:this._currentLine,e}_error(e,t){return {token:e,message:t,toString:()=>`${t}`}}_isAtEnd(){return this._current>=this._tokens.length||this._peek().type==qe.eof}_match(e){if(e instanceof We)return !!this._check(e)&&(this._advance(),true);for(let t=0,n=e.length;t<n;++t){const n=e[t];if(this._check(n))return this._advance(),true}return false}_consume(e,t){if(this._check(e))return this._advance();throw this._error(this._peek(),`${t}. Line:${this._currentLine}`)}_check(e){if(this._isAtEnd())return false;const t=this._peek();if(e instanceof Array){const n=t.type;let s=false;for(const t of e){if(n===t)return true;t===qe.tokens.name&&(s=true);}if(s){const e=qe.tokens.name.rule.exec(t.lexeme);if(e&&0==e.index&&e[0]==t.lexeme)return true}return false}if(t.type===e)return true;if(e===qe.tokens.name){const e=qe.tokens.name.rule.exec(t.lexeme);return e&&0==e.index&&e[0]==t.lexeme}return false}_advance(){var e,t;return this._currentLine=null!==(t=null===(e=this._peek())||undefined===e?undefined:e.line)&&undefined!==t?t:-1,this._isAtEnd()||this._current++,this._previous()}_peek(){return this._tokens[this._current]}_previous(){return this._tokens[this._current-1]}_global_decl_or_directive(){for(;this._match(qe.tokens.semicolon)&&!this._isAtEnd(););if(this._match(qe.keywords.alias)){const e=this._type_alias();return this._consume(qe.tokens.semicolon,'Expected \\';\\''),this._exec.reflection.updateAST([e]),e}if(this._match(qe.keywords.diagnostic)){const e=this._diagnostic();return this._consume(qe.tokens.semicolon,'Expected \\';\\''),this._exec.reflection.updateAST([e]),e}if(this._match(qe.keywords.requires)){const e=this._requires_directive();return this._consume(qe.tokens.semicolon,'Expected \\';\\''),this._exec.reflection.updateAST([e]),e}if(this._match(qe.keywords.enable)){const e=this._enable_directive();return this._consume(qe.tokens.semicolon,'Expected \\';\\''),this._exec.reflection.updateAST([e]),e}const e=this._attribute();if(this._check(qe.keywords.var)){const t=this._global_variable_decl();return null!=t&&(t.attributes=e),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),this._exec.reflection.updateAST([t]),t}if(this._check(qe.keywords.override)){const t=this._override_variable_decl();return null!=t&&(t.attributes=e),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),this._exec.reflection.updateAST([t]),t}if(this._check(qe.keywords.let)){const t=this._global_let_decl();return null!=t&&(t.attributes=e),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),this._exec.reflection.updateAST([t]),t}if(this._check(qe.keywords.const)){const t=this._global_const_decl();return null!=t&&(t.attributes=e),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),this._exec.reflection.updateAST([t]),t}if(this._check(qe.keywords.struct)){const t=this._struct_decl();return null!=t&&(t.attributes=e),this._exec.reflection.updateAST([t]),t}if(this._check(qe.keywords.fn)){const t=this._function_decl();return null!=t&&(t.attributes=e),this._exec.reflection.updateAST([t]),t}return null}_function_decl(){if(!this._match(qe.keywords.fn))return null;const e=this._currentLine,t=this._consume(qe.tokens.ident,'Expected function name.').toString();this._consume(qe.tokens.paren_left,'Expected \\'(\\' for function arguments.');const n=[];if(!this._check(qe.tokens.paren_right))do{if(this._check(qe.tokens.paren_right))break;const e=this._attribute(),t=this._consume(qe.tokens.name,'Expected argument name.').toString();this._consume(qe.tokens.colon,'Expected \\':\\' for argument type.');const s=this._attribute(),r=this._type_decl();null!=r&&(r.attributes=s,n.push(this._updateNode(new Ee(t,r,e))));}while(this._match(qe.tokens.comma));this._consume(qe.tokens.paren_right,'Expected \\')\\' after function arguments.');let s=null;if(this._match(qe.tokens.arrow)){const e=this._attribute();s=this._type_decl(),null!=s&&(s.attributes=e);}const r=this._compound_statement(),a=this._currentLine;return this._updateNode(new C(t,n,s,r,e,a),e)}_compound_statement(){const e=[];for(this._consume(qe.tokens.brace_left,'Expected \\'{\\' for block.');!this._check(qe.tokens.brace_right);){const t=this._statement();null!==t&&e.push(t);}return this._consume(qe.tokens.brace_right,'Expected \\'}\\' for block.'),e}_statement(){for(;this._match(qe.tokens.semicolon)&&!this._isAtEnd(););if(this._check(qe.tokens.attr)&&this._attribute(),this._check(qe.keywords.if))return this._if_statement();if(this._check(qe.keywords.switch))return this._switch_statement();if(this._check(qe.keywords.loop))return this._loop_statement();if(this._check(qe.keywords.for))return this._for_statement();if(this._check(qe.keywords.while))return this._while_statement();if(this._check(qe.keywords.continuing))return this._continuing_statement();if(this._check(qe.keywords.static_assert))return this._static_assert_statement();if(this._check(qe.tokens.brace_left))return this._compound_statement();let e=null;if(this._check(qe.keywords.return))e=this._return_statement();else if(this._check([qe.keywords.var,qe.keywords.let,qe.keywords.const]))e=this._variable_statement();else if(this._match(qe.keywords.discard))e=this._updateNode(new te);else if(this._match(qe.keywords.break)){const t=this._updateNode(new ne);if(this._currentLoop.length>0){const e=this._currentLoop[this._currentLoop.length-1];t.loopId=e.id;}e=t,this._check(qe.keywords.if)&&(this._advance(),t.condition=this._optional_paren_expression());}else if(this._match(qe.keywords.continue)){const t=this._updateNode(new se);if(!(this._currentLoop.length>0))throw this._error(this._peek(),`Continue statement must be inside a loop. Line: ${t.line}`);{const e=this._currentLoop[this._currentLoop.length-1];t.loopId=e.id;}e=t;}else e=this._increment_decrement_statement()||this._func_call_statement()||this._assignment_statement();return null!=e&&this._consume(qe.tokens.semicolon,'Expected \\';\\' after statement.'),e}_static_assert_statement(){if(!this._match(qe.keywords.static_assert))return null;const e=this._currentLine,t=this._optional_paren_expression();return this._updateNode(new D(t),e)}_while_statement(){if(!this._match(qe.keywords.while))return null;const e=this._updateNode(new N(null,null));return this._currentLoop.push(e),e.condition=this._optional_paren_expression(),this._check(qe.tokens.attr)&&this._attribute(),e.body=this._compound_statement(),this._currentLoop.pop(),e}_continuing_statement(){const e=this._currentLoop.length>0?this._currentLoop[this._currentLoop.length-1].id:-1;if(!this._match(qe.keywords.continuing))return null;const t=this._currentLine,n=this._compound_statement();return this._updateNode(new V(n,e),t)}_for_statement(){if(!this._match(qe.keywords.for))return null;this._consume(qe.tokens.paren_left,'Expected \\'(\\'.');const e=this._updateNode(new O(null,null,null,null));return this._currentLoop.push(e),e.init=this._check(qe.tokens.semicolon)?null:this._for_init(),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),e.condition=this._check(qe.tokens.semicolon)?null:this._short_circuit_or_expression(),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),e.increment=this._check(qe.tokens.paren_right)?null:this._for_increment(),this._consume(qe.tokens.paren_right,'Expected \\')\\'.'),this._check(qe.tokens.attr)&&this._attribute(),e.body=this._compound_statement(),this._currentLoop.pop(),e}_for_init(){return this._variable_statement()||this._func_call_statement()||this._assignment_statement()}_for_increment(){return this._func_call_statement()||this._increment_decrement_statement()||this._assignment_statement()}_variable_statement(){if(this._check(qe.keywords.var)){const e=this._variable_decl();if(null===e)throw this._error(this._peek(),'Variable declaration expected.');let t=null;return this._match(qe.tokens.equal)&&(t=this._short_circuit_or_expression()),this._updateNode(new B(e.name,e.type,e.storage,e.access,t),e.line)}if(this._match(qe.keywords.let)){const e=this._currentLine,t=this._consume(qe.tokens.name,'Expected name for let.').toString();let n=null;if(this._match(qe.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e);}this._consume(qe.tokens.equal,'Expected \\'=\\' for let.');const s=this._short_circuit_or_expression();return this._updateNode(new M(t,n,null,null,s),e)}if(this._match(qe.keywords.const)){const e=this._currentLine,t=this._consume(qe.tokens.name,'Expected name for const.').toString();let n=null;if(this._match(qe.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e);}this._consume(qe.tokens.equal,'Expected \\'=\\' for const.');const s=this._short_circuit_or_expression();return null===n&&s instanceof ge&&(n=s.type),this._updateNode(new U(t,n,null,null,s),e)}return null}_increment_decrement_statement(){const e=this._current,t=this._unary_expression();if(null==t)return null;if(!this._check(qe.increment_operators))return this._current=e,null;const n=this._consume(qe.increment_operators,'Expected increment operator');return this._updateNode(new z(n.type===qe.tokens.plus_plus?P.increment:P.decrement,t))}_assignment_statement(){let e=null;const t=this._currentLine;if(this._check(qe.tokens.brace_right))return null;let n=this._match(qe.tokens.underscore);if(n||(e=this._unary_expression()),!n&&null==e)return null;const s=this._consume(qe.assignment_operators,'Expected assignment operator.'),r=this._short_circuit_or_expression();return this._updateNode(new R(W.parse(s.lexeme),e,r),t)}_func_call_statement(){if(!this._check(qe.tokens.ident))return null;const e=this._currentLine,t=this._current,n=this._consume(qe.tokens.ident,'Expected function name.'),s=this._argument_expression_list();return null===s?(this._current=t,null):this._updateNode(new G(n.lexeme,s),e)}_loop_statement(){if(!this._match(qe.keywords.loop))return null;this._check(qe.tokens.attr)&&this._attribute(),this._consume(qe.tokens.brace_left,'Expected \\'{\\' for loop.');const e=this._updateNode(new X([],null));this._currentLoop.push(e);let t=this._statement();for(;null!==t;){if(Array.isArray(t))for(let n of t)e.body.push(n);else e.body.push(t);if(t instanceof V){e.continuing=t;break}t=this._statement();}return this._currentLoop.pop(),this._consume(qe.tokens.brace_right,'Expected \\'}\\' for loop.'),e}_switch_statement(){if(!this._match(qe.keywords.switch))return null;const e=this._updateNode(new j(null,[]));if(this._currentLoop.push(e),e.condition=this._optional_paren_expression(),this._check(qe.tokens.attr)&&this._attribute(),this._consume(qe.tokens.brace_left,'Expected \\'{\\' for switch.'),e.cases=this._switch_body(),null==e.cases||0==e.cases.length)throw this._error(this._previous(),'Expected \\'case\\' or \\'default\\'.');return this._consume(qe.tokens.brace_right,'Expected \\'}\\' for switch.'),this._currentLoop.pop(),e}_switch_body(){const e=[];let t=false;for(;this._check([qe.keywords.default,qe.keywords.case]);){if(this._match(qe.keywords.case)){const n=this._case_selectors();for(const e of n)if(e instanceof Te){if(t)throw this._error(this._previous(),'Multiple default cases in switch statement.');t=true;break}this._match(qe.tokens.colon),this._check(qe.tokens.attr)&&this._attribute(),this._consume(qe.tokens.brace_left,'Exected \\'{\\' for switch case.');const s=this._case_body();this._consume(qe.tokens.brace_right,'Exected \\'}\\' for switch case.'),e.push(this._updateNode(new Se(n,s)));}if(this._match(qe.keywords.default)){if(t)throw this._error(this._previous(),'Multiple default cases in switch statement.');this._match(qe.tokens.colon),this._check(qe.tokens.attr)&&this._attribute(),this._consume(qe.tokens.brace_left,'Exected \\'{\\' for switch default.');const n=this._case_body();this._consume(qe.tokens.brace_right,'Exected \\'}\\' for switch default.'),e.push(this._updateNode(new Ae(n)));}}return e}_case_selectors(){const e=[];for(this._match(qe.keywords.default)?e.push(this._updateNode(new Te)):e.push(this._shift_expression());this._match(qe.tokens.comma);)this._match(qe.keywords.default)?e.push(this._updateNode(new Te)):e.push(this._shift_expression());return e}_case_body(){if(this._match(qe.keywords.fallthrough))return this._consume(qe.tokens.semicolon,'Expected \\';\\''),[];let e=this._statement();if(null==e)return [];e instanceof Array||(e=[e]);const t=this._case_body();return 0==t.length?e:[...e,t[0]]}_if_statement(){if(!this._match(qe.keywords.if))return null;const e=this._currentLine,t=this._optional_paren_expression();this._check(qe.tokens.attr)&&this._attribute();const n=this._compound_statement();let s=[];this._match_elseif()&&(this._check(qe.tokens.attr)&&this._attribute(),s=this._elseif_statement(s));let r=null;return this._match(qe.keywords.else)&&(this._check(qe.tokens.attr)&&this._attribute(),r=this._compound_statement()),this._updateNode(new Z(t,n,s,r),e)}_match_elseif(){return this._tokens[this._current].type===qe.keywords.else&&this._tokens[this._current+1].type===qe.keywords.if&&(this._advance(),this._advance(),true)}_elseif_statement(e=[]){const t=this._optional_paren_expression(),n=this._compound_statement();return e.push(this._updateNode(new $e(t,n))),this._match_elseif()&&(this._check(qe.tokens.attr)&&this._attribute(),this._elseif_statement(e)),e}_return_statement(){if(!this._match(qe.keywords.return))return null;const e=this._short_circuit_or_expression();return this._updateNode(new Q(e))}_short_circuit_or_expression(){let e=this._short_circuit_and_expr();for(;this._match(qe.tokens.or_or);)e=this._updateNode(new ke(this._previous().toString(),e,this._short_circuit_and_expr()));return e}_short_circuit_and_expr(){let e=this._inclusive_or_expression();for(;this._match(qe.tokens.and_and);)e=this._updateNode(new ke(this._previous().toString(),e,this._inclusive_or_expression()));return e}_inclusive_or_expression(){let e=this._exclusive_or_expression();for(;this._match(qe.tokens.or);)e=this._updateNode(new ke(this._previous().toString(),e,this._exclusive_or_expression()));return e}_exclusive_or_expression(){let e=this._and_expression();for(;this._match(qe.tokens.xor);)e=this._updateNode(new ke(this._previous().toString(),e,this._and_expression()));return e}_and_expression(){let e=this._equality_expression();for(;this._match(qe.tokens.and);)e=this._updateNode(new ke(this._previous().toString(),e,this._equality_expression()));return e}_equality_expression(){const e=this._relational_expression();return this._match([qe.tokens.equal_equal,qe.tokens.not_equal])?this._updateNode(new ke(this._previous().toString(),e,this._relational_expression())):e}_relational_expression(){let e=this._shift_expression();for(;this._match([qe.tokens.less_than,qe.tokens.greater_than,qe.tokens.less_than_equal,qe.tokens.greater_than_equal]);)e=this._updateNode(new ke(this._previous().toString(),e,this._shift_expression()));return e}_shift_expression(){let e=this._additive_expression();for(;this._match([qe.tokens.shift_left,qe.tokens.shift_right]);)e=this._updateNode(new ke(this._previous().toString(),e,this._additive_expression()));return e}_additive_expression(){let e=this._multiplicative_expression();for(;this._match([qe.tokens.plus,qe.tokens.minus]);)e=this._updateNode(new ke(this._previous().toString(),e,this._multiplicative_expression()));return e}_multiplicative_expression(){let e=this._unary_expression();for(;this._match([qe.tokens.star,qe.tokens.forward_slash,qe.tokens.modulo]);)e=this._updateNode(new ke(this._previous().toString(),e,this._unary_expression()));return e}_unary_expression(){return this._match([qe.tokens.minus,qe.tokens.bang,qe.tokens.tilde,qe.tokens.star,qe.tokens.and])?this._updateNode(new we(this._previous().toString(),this._unary_expression())):this._singular_expression()}_singular_expression(){const e=this._primary_expression(),t=this._postfix_expression();return t&&(e.postfix=t),e}_postfix_expression(){if(this._match(qe.tokens.bracket_left)){const e=this._short_circuit_or_expression();this._consume(qe.tokens.bracket_right,'Expected \\']\\'.');const t=this._updateNode(new be(e)),n=this._postfix_expression();return n&&(t.postfix=n),t}if(this._match(qe.tokens.period)){const e=this._consume(qe.tokens.name,'Expected member name.'),t=this._postfix_expression(),n=this._updateNode(new fe(e.lexeme));return t&&(n.postfix=t),n}return null}_getStruct(e){if(this._context.aliases.has(e)){return this._context.aliases.get(e).type}if(this._context.structs.has(e)){return this._context.structs.get(e)}return null}_getType(e){const t=this._getStruct(e);if(null!==t)return t;switch(e){case 'void':return re.void;case 'bool':return re.bool;case 'i32':return re.i32;case 'u32':return re.u32;case 'f32':return re.f32;case 'f16':return re.f16;case 'vec2f':return oe.vec2f;case 'vec3f':return oe.vec3f;case 'vec4f':return oe.vec4f;case 'vec2i':return oe.vec2i;case 'vec3i':return oe.vec3i;case 'vec4i':return oe.vec4i;case 'vec2u':return oe.vec2u;case 'vec3u':return oe.vec3u;case 'vec4u':return oe.vec4u;case 'vec2h':return oe.vec2h;case 'vec3h':return oe.vec3h;case 'vec4h':return oe.vec4h;case 'mat2x2f':return oe.mat2x2f;case 'mat2x3f':return oe.mat2x3f;case 'mat2x4f':return oe.mat2x4f;case 'mat3x2f':return oe.mat3x2f;case 'mat3x3f':return oe.mat3x3f;case 'mat3x4f':return oe.mat3x4f;case 'mat4x2f':return oe.mat4x2f;case 'mat4x3f':return oe.mat4x3f;case 'mat4x4f':return oe.mat4x4f;case 'mat2x2h':return oe.mat2x2h;case 'mat2x3h':return oe.mat2x3h;case 'mat2x4h':return oe.mat2x4h;case 'mat3x2h':return oe.mat3x2h;case 'mat3x3h':return oe.mat3x3h;case 'mat3x4h':return oe.mat3x4h;case 'mat4x2h':return oe.mat4x2h;case 'mat4x3h':return oe.mat4x3h;case 'mat4x4h':return oe.mat4x4h;case 'mat2x2i':return oe.mat2x2i;case 'mat2x3i':return oe.mat2x3i;case 'mat2x4i':return oe.mat2x4i;case 'mat3x2i':return oe.mat3x2i;case 'mat3x3i':return oe.mat3x3i;case 'mat3x4i':return oe.mat3x4i;case 'mat4x2i':return oe.mat4x2i;case 'mat4x3i':return oe.mat4x3i;case 'mat4x4i':return oe.mat4x4i;case 'mat2x2u':return oe.mat2x2u;case 'mat2x3u':return oe.mat2x3u;case 'mat2x4u':return oe.mat2x4u;case 'mat3x2u':return oe.mat3x2u;case 'mat3x3u':return oe.mat3x3u;case 'mat3x4u':return oe.mat3x4u;case 'mat4x2u':return oe.mat4x2u;case 'mat4x3u':return oe.mat4x3u;case 'mat4x4u':return oe.mat4x4u}return null}_validateTypeRange(e,t){if('i32'===t.name){if(e<-2147483648||e>2147483647)throw this._error(this._previous(),`Value out of range for i32: ${e}. Line: ${this._currentLine}.`)}else if('u32'===t.name&&(e<0||e>4294967295))throw this._error(this._previous(),`Value out of range for u32: ${e}. Line: ${this._currentLine}.`)}_primary_expression(){if(this._match(qe.tokens.ident)){const e=this._previous().toString();if(this._check(qe.tokens.paren_left)){const t=this._argument_expression_list(),n=this._getType(e);return null!==n?this._updateNode(new pe(n,t)):this._updateNode(new de(e,t))}if(this._context.constants.has(e)){const t=this._context.constants.get(e);return this._updateNode(new _e(e,t.value))}return this._updateNode(new me(e))}if(this._match(qe.tokens.int_literal)){const e=this._previous().toString();let t=e.endsWith('i')||e.endsWith('i')?re.i32:e.endsWith('u')||e.endsWith('U')?re.u32:re.x32;const n=parseInt(e);return this._validateTypeRange(n,t),this._updateNode(new ge(new Oe(n,this._exec.getTypeInfo(t)),t))}if(this._match(qe.tokens.uint_literal)){const e=parseInt(this._previous().toString());return this._validateTypeRange(e,re.u32),this._updateNode(new ge(new Oe(e,this._exec.getTypeInfo(re.u32)),re.u32))}if(this._match([qe.tokens.decimal_float_literal,qe.tokens.hex_float_literal])){let e=this._previous().toString(),t=e.endsWith('h');t&&(e=e.substring(0,e.length-1));const n=parseFloat(e);this._validateTypeRange(n,t?re.f16:re.f32);const s=t?re.f16:re.f32;return this._updateNode(new ge(new Oe(n,this._exec.getTypeInfo(s)),s))}if(this._match([qe.keywords.true,qe.keywords.false])){let e=this._previous().toString()===qe.keywords.true.rule;return this._updateNode(new ge(new Oe(e?1:0,this._exec.getTypeInfo(re.bool)),re.bool))}if(this._check(qe.tokens.paren_left))return this._paren_expression();if(this._match(qe.keywords.bitcast)){this._consume(qe.tokens.less_than,'Expected \\'<\\'.');const e=this._type_decl();this._consume(qe.tokens.greater_than,'Expected \\'>\\'.');const t=this._paren_expression();return this._updateNode(new xe(e,t))}const e=this._type_decl(),t=this._argument_expression_list();return this._updateNode(new pe(e,t))}_argument_expression_list(){if(!this._match(qe.tokens.paren_left))return null;const e=[];do{if(this._check(qe.tokens.paren_right))break;const t=this._short_circuit_or_expression();e.push(t);}while(this._match(qe.tokens.comma));return this._consume(qe.tokens.paren_right,'Expected \\')\\' for agument list'),e}_optional_paren_expression(){this._match(qe.tokens.paren_left);const e=this._short_circuit_or_expression();return this._match(qe.tokens.paren_right),e}_paren_expression(){this._consume(qe.tokens.paren_left,'Expected \\'(\\'.');const e=this._short_circuit_or_expression();return this._consume(qe.tokens.paren_right,'Expected \\')\\'.'),e}_struct_decl(){if(!this._match(qe.keywords.struct))return null;const e=this._currentLine,t=this._consume(qe.tokens.ident,'Expected name for struct.').toString();this._consume(qe.tokens.brace_left,'Expected \\'{\\' for struct body.');const n=[];for(;!this._check(qe.tokens.brace_right);){const e=this._attribute(),t=this._consume(qe.tokens.name,'Expected variable name.').toString();this._consume(qe.tokens.colon,'Expected \\':\\' for struct member type.');const s=this._attribute(),r=this._type_decl();null!=r&&(r.attributes=s),this._check(qe.tokens.brace_right)?this._match(qe.tokens.comma):this._consume(qe.tokens.comma,'Expected \\',\\' for struct member.'),n.push(this._updateNode(new Le(t,r,e)));}this._consume(qe.tokens.brace_right,'Expected \\'}\\' after struct body.');const s=this._currentLine,r=this._updateNode(new ie(t,n,e,s),e);return this._context.structs.set(t,r),r}_global_variable_decl(){const e=this._variable_decl();if(!e)return null;if(this._match(qe.tokens.equal)){const t=this._const_expression();e.value=t;}if(null!==e.type&&e.value instanceof ge){if('x32'!==e.value.type.name){if(e.type.getTypeName()!==e.value.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${e.value.type.name} to ${e.type.name}. Line:${this._currentLine}`)}e.value.isScalar&&this._validateTypeRange(e.value.scalarValue,e.type),e.value.type=e.type;}else null===e.type&&e.value instanceof ge&&(e.type='x32'===e.value.type.name?re.i32:e.value.type,e.value.isScalar&&this._validateTypeRange(e.value.scalarValue,e.type));return e}_override_variable_decl(){const e=this._override_decl();return e&&this._match(qe.tokens.equal)&&(e.value=this._const_expression()),e}_global_const_decl(){var e;if(!this._match(qe.keywords.const))return null;const t=this._consume(qe.tokens.name,'Expected variable name'),n=this._currentLine;let s=null;if(this._match(qe.tokens.colon)){const e=this._attribute();s=this._type_decl(),null!=s&&(s.attributes=e);}let r=null;this._consume(qe.tokens.equal,'const declarations require an assignment');const i=this._short_circuit_or_expression();try{let e=[re.f32],n=i.constEvaluate(this._exec,e);n instanceof Oe&&this._validateTypeRange(n.value,e[0]),e[0]instanceof oe&&null===e[0].format&&n.typeInfo instanceof a&&null!==n.typeInfo.format&&('f16'===n.typeInfo.format.name?e[0].format=re.f16:'f32'===n.typeInfo.format.name?e[0].format=re.f32:'i32'===n.typeInfo.format.name?e[0].format=re.i32:'u32'===n.typeInfo.format.name?e[0].format=re.u32:'bool'===n.typeInfo.format.name?e[0].format=re.bool:console.error(`TODO: impelement template format type ${n.typeInfo.format.name}`)),r=this._updateNode(new ge(n,e[0])),this._exec.context.setVariable(t.toString(),n);}catch(e){r=i;}if(null!==s&&r instanceof ge){if('x32'!==r.type.name){if(s.getTypeName()!==r.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${r.type.name} to ${s.name}. Line:${this._currentLine}`)}r.type=s,r.isScalar&&this._validateTypeRange(r.scalarValue,r.type);}else null===s&&r instanceof ge&&(s=null!==(e=null==r?undefined:r.type)&&undefined!==e?e:re.f32,s===re.x32&&(s=re.i32));const o=this._updateNode(new U(t.toString(),s,'','',r),n);return this._context.constants.set(o.name,o),o}_global_let_decl(){if(!this._match(qe.keywords.let))return null;const e=this._currentLine,t=this._consume(qe.tokens.name,'Expected variable name');let n=null;if(this._match(qe.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e);}let s=null;if(this._match(qe.tokens.equal)&&(s=this._const_expression()),null!==n&&s instanceof ge){if('x32'!==s.type.name){if(n.getTypeName()!==s.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${s.type.name} to ${n.name}. Line:${this._currentLine}`)}s.type=n;}else null===n&&s instanceof ge&&(n='x32'===s.type.name?re.i32:s.type);return s instanceof ge&&s.isScalar&&this._validateTypeRange(s.scalarValue,n),this._updateNode(new M(t.toString(),n,'','',s),e)}_const_expression(){return this._short_circuit_or_expression()}_variable_decl(){if(!this._match(qe.keywords.var))return null;const e=this._currentLine;let t='',n='';this._match(qe.tokens.less_than)&&(t=this._consume(qe.storage_class,'Expected storage_class.').toString(),this._match(qe.tokens.comma)&&(n=this._consume(qe.access_mode,'Expected access_mode.').toString()),this._consume(qe.tokens.greater_than,'Expected \\'>\\'.'));const s=this._consume(qe.tokens.name,'Expected variable name');let r=null;if(this._match(qe.tokens.colon)){const e=this._attribute();r=this._type_decl(),null!=r&&(r.attributes=e);}return this._updateNode(new B(s.toString(),r,t,n,null),e)}_override_decl(){if(!this._match(qe.keywords.override))return null;const e=this._consume(qe.tokens.name,'Expected variable name');let t=null;if(this._match(qe.tokens.colon)){const e=this._attribute();t=this._type_decl(),null!=t&&(t.attributes=e);}return this._updateNode(new F(e.toString(),t,null))}_diagnostic(){this._consume(qe.tokens.paren_left,'Expected \\'(\\'');const e=this._consume(qe.tokens.ident,'Expected severity control name.');this._consume(qe.tokens.comma,'Expected \\',\\'');let t=this._consume(qe.tokens.ident,'Expected diagnostic rule name.').toString();if(this._match(qe.tokens.period)){t+=`.${this._consume(qe.tokens.ident,'Expected diagnostic message.').toString()}`;}return this._consume(qe.tokens.paren_right,'Expected \\')\\''),this._updateNode(new J(e.toString(),t))}_enable_directive(){const e=this._consume(qe.tokens.ident,'identity expected.');return this._updateNode(new Y(e.toString()))}_requires_directive(){const e=[this._consume(qe.tokens.ident,'identity expected.').toString()];for(;this._match(qe.tokens.comma);){const t=this._consume(qe.tokens.ident,'identity expected.');e.push(t.toString());}return this._updateNode(new K(e))}_type_alias(){const e=this._consume(qe.tokens.ident,'identity expected.');this._consume(qe.tokens.equal,'Expected \\'=\\' for type alias.');let t=this._type_decl();if(null===t)throw this._error(this._peek(),'Expected Type for Alias.');this._context.aliases.has(t.name)&&(t=this._context.aliases.get(t.name).type);const n=this._updateNode(new ee(e.toString(),t));return this._context.aliases.set(n.name,n),n}_type_decl(){if(this._check([qe.tokens.ident,...qe.texel_format,qe.keywords.bool,qe.keywords.f32,qe.keywords.i32,qe.keywords.u32])){const e=this._advance().toString();if(this._context.structs.has(e))return this._context.structs.get(e);if(this._context.aliases.has(e))return this._context.aliases.get(e).type;if(!this._getType(e)){const t=this._updateNode(new ae(e));return this._forwardTypeCount++,t}return this._updateNode(new re(e))}let e=this._texture_sampler_types();if(e)return e;if(this._check(qe.template_types)){let e=this._advance().toString(),t=null,n=null;this._match(qe.tokens.less_than)&&(t=this._type_decl(),n=null,this._match(qe.tokens.comma)&&(n=this._consume(qe.access_mode,'Expected access_mode for pointer').toString()),this._consume(qe.tokens.greater_than,'Expected \\'>\\' for type.'));return this._updateNode(new oe(e,t,n))}if(this._match(qe.keywords.ptr)){let e=this._previous().toString();this._consume(qe.tokens.less_than,'Expected \\'<\\' for pointer.');const t=this._consume(qe.storage_class,'Expected storage_class for pointer');this._consume(qe.tokens.comma,'Expected \\',\\' for pointer.');const n=this._type_decl();let s=null;this._match(qe.tokens.comma)&&(s=this._consume(qe.access_mode,'Expected access_mode for pointer').toString()),this._consume(qe.tokens.greater_than,'Expected \\'>\\' for pointer.');return this._updateNode(new le(e,t.toString(),n,s))}const t=this._attribute();if(this._match(qe.keywords.array)){let e=null,n=-1;const s=this._previous();let r=null;if(this._match(qe.tokens.less_than)){e=this._type_decl(),this._context.aliases.has(e.name)&&(e=this._context.aliases.get(e.name).type);let t='';if(this._match(qe.tokens.comma)){r=this._shift_expression();try{t=r.constEvaluate(this._exec).toString(),r=null;}catch(e){t='1';}}this._consume(qe.tokens.greater_than,'Expected \\'>\\' for array.'),n=t?parseInt(t):0;}const a=this._updateNode(new ce(s.toString(),t,e,n));return r&&this._deferArrayCountEval.push({arrayType:a,countNode:r}),a}return null}_texture_sampler_types(){if(this._match(qe.sampler_type))return this._updateNode(new ue(this._previous().toString(),null,null));if(this._match(qe.depth_texture_type))return this._updateNode(new ue(this._previous().toString(),null,null));if(this._match(qe.sampled_texture_type)||this._match(qe.multisampled_texture_type)){const e=this._previous();this._consume(qe.tokens.less_than,'Expected \\'<\\' for sampler type.');const t=this._type_decl();return this._consume(qe.tokens.greater_than,'Expected \\'>\\' for sampler type.'),this._updateNode(new ue(e.toString(),t,null))}if(this._match(qe.storage_texture_type)){const e=this._previous();this._consume(qe.tokens.less_than,'Expected \\'<\\' for sampler type.');const t=this._consume(qe.texel_format,'Invalid texel format.').toString();this._consume(qe.tokens.comma,'Expected \\',\\' after texel format.');const n=this._consume(qe.access_mode,'Expected access mode for storage texture type.').toString();return this._consume(qe.tokens.greater_than,'Expected \\'>\\' for sampler type.'),this._updateNode(new ue(e.toString(),t,n))}return null}_attribute(){let e=[];for(;this._match(qe.tokens.attr);){const t=this._consume(qe.attribute_name,'Expected attribute name'),n=this._updateNode(new Ce(t.toString(),null));if(this._match(qe.tokens.paren_left)){if(n.value=this._consume(qe.literal_or_ident,'Expected attribute value').toString(),this._check(qe.tokens.comma)){this._advance();do{const e=this._consume(qe.literal_or_ident,'Expected attribute value').toString();n.value instanceof Array||(n.value=[n.value]),n.value.push(e);}while(this._match(qe.tokens.comma))}this._consume(qe.tokens.paren_right,'Expected \\')\\'');}e.push(n);}return 0==e.length?null:e}}class _t extends rt{constructor(e){super(),e&&this.update(e);}update(e){const t=(new mt).parse(e);this.updateAST(t);}}\n\nfunction getEntryPointForStage(defs, stage, stageFlags) {\n const { entryPoint: entryPointName } = stage;\n if (entryPointName) {\n const ep = defs.entryPoints[entryPointName];\n return (ep && ep.stage === stageFlags) ? ep : undefined;\n }\n return Object.values(defs.entryPoints).filter(ep => ep.stage === stageFlags)[0];\n}\nfunction getStageResources(defs, stage, stageFlags) {\n if (!stage) {\n return [];\n }\n const entryPoint = getEntryPointForStage(defs, stage, stageFlags);\n return entryPoint?.resources || [];\n}\nconst byBinding = (a, b) => Math.sign(a.binding - b.binding);\n/**\n * Gets GPUBindGroupLayoutDescriptors for the given pipeline.\n *\n * Important: Assumes you pipeline is valid (it doesn't check for errors).\n *\n * Note: In WebGPU some layouts must be specified manually. For example an unfiltered-float\n * sampler can not be derived since it is unknown at compile time pipeline creation time\n * which texture you'll use.\n *\n * MAINTENANCE_TODO: Add example\n *\n * @param defs ShaderDataDefinitions or an array of ShaderDataDefinitions as\n * returned from {@link makeShaderDataDefinitions}. If an array more than 1\n * definition it's assumed the vertex shader is in the first and the fragment\n * shader in the second.\n * @param desc A PipelineDescriptor. You should be able to pass in the same object you passed\n * to `createRenderPipeline` or `createComputePipeline`.\n * @returns An array of GPUBindGroupLayoutDescriptors which you can pass, one at a time, to\n * `createBindGroupLayout`. Note: the array will be sparse if there are gaps in group\n * numbers. Note: Each GPUBindGroupLayoutDescriptor.entries will be sorted by binding.\n */\nfunction makeBindGroupLayoutDescriptors(defs, desc) {\n defs = Array.isArray(defs) ? defs : [defs];\n const resources = [\n ...getStageResources(defs[0], desc.vertex, GPUShaderStage.VERTEX),\n ...getStageResources(defs[defs.length - 1], desc.fragment, GPUShaderStage.FRAGMENT),\n ...getStageResources(defs[0], desc.compute, GPUShaderStage.COMPUTE),\n ];\n const bindGroupLayoutDescriptorsByGroupByBinding = [];\n for (const resource of resources) {\n const bindingsToBindGroupEntry = bindGroupLayoutDescriptorsByGroupByBinding[resource.group] || new Map();\n bindGroupLayoutDescriptorsByGroupByBinding[resource.group] = bindingsToBindGroupEntry;\n // Should we error here if the 2 don't match?\n const entry = bindingsToBindGroupEntry.get(resource.entry.binding);\n bindingsToBindGroupEntry.set(resource.entry.binding, {\n ...resource.entry,\n visibility: resource.entry.visibility | (entry?.visibility || 0),\n });\n }\n const descriptors = bindGroupLayoutDescriptorsByGroupByBinding.map(v => ({ entries: [...v.values()].sort(byBinding) }));\n for (let i = 0; i < descriptors.length; ++i) {\n if (!descriptors[i]) {\n descriptors[i] = { entries: [] };\n }\n }\n return descriptors;\n}\nfunction getNamedVariables(reflect, variables) {\n return Object.fromEntries(variables.map(v => {\n const typeDefinition = addVariableType(reflect, v, 0);\n return [\n v.name,\n {\n typeDefinition,\n group: v.group,\n binding: v.binding,\n size: typeDefinition.size,\n },\n ];\n }));\n}\nfunction makeStructDefinition(reflect, structInfo, offset) {\n // StructDefinition\n const fields = Object.fromEntries(structInfo.members.map(m => {\n return [\n m.name,\n {\n offset: m.offset,\n type: addType(reflect, m.type, 0),\n },\n ];\n }));\n return {\n fields,\n size: structInfo.size,\n offset,\n };\n}\nfunction getTextureSampleType(type) {\n if (type.name.includes('depth')) {\n return 'depth';\n }\n // unfiltered-float\n switch (type.format?.name) {\n case 'f32': return 'float';\n case 'i32': return 'sint';\n case 'u32': return 'uint';\n default:\n throw new Error('unknown texture sample type');\n }\n}\nfunction getViewDimension(type) {\n if (type.name.includes('2d_array')) {\n return '2d-array';\n }\n if (type.name.includes('cube_array')) {\n return 'cube-array';\n }\n if (type.name.includes('3d')) {\n return '3d';\n }\n if (type.name.includes('1d')) {\n return '1d';\n }\n if (type.name.includes('cube')) {\n return 'cube';\n }\n return '2d';\n}\nfunction getStorageTextureAccess(type) {\n switch (type.access) {\n case 'read': return 'read-only';\n case 'write': return 'write-only';\n case 'read_write': return 'read-write';\n default:\n throw new Error('unknonw storage texture access');\n }\n}\nfunction getSamplerType(type) {\n // \"non-filtering\" can only be specified manually.\n return type.name.endsWith('_comparison')\n ? 'comparison'\n : 'filtering';\n}\nfunction getBindGroupLayoutEntry(resource, visibility) {\n const { binding, access, type } = resource;\n switch (resource.resourceType) {\n case i.Uniform:\n return {\n binding,\n visibility,\n buffer: {\n ...(resource.size && { minBindingSize: resource.size }),\n },\n };\n case i.Storage:\n return {\n binding,\n visibility,\n buffer: {\n type: (access === '' || access === 'read') ? 'read-only-storage' : 'storage',\n ...(resource.size && { minBindingSize: resource.size }),\n },\n };\n case i.Texture: {\n if (type.name === 'texture_external') {\n return {\n binding,\n visibility,\n externalTexture: {},\n };\n }\n const multisampled = type.name.includes('multisampled');\n return {\n binding,\n visibility,\n texture: {\n sampleType: getTextureSampleType(type),\n viewDimension: getViewDimension(type),\n multisampled,\n },\n };\n }\n case i.Sampler:\n return {\n binding,\n visibility,\n sampler: {\n type: getSamplerType(type),\n },\n };\n case i.StorageTexture:\n return {\n binding,\n visibility,\n storageTexture: {\n access: getStorageTextureAccess(type),\n format: type.format.name,\n viewDimension: getViewDimension(type),\n },\n };\n default:\n throw new Error('unknown resource type');\n }\n}\nfunction addEntryPoints(funcInfos, stage) {\n const entryPoints = {};\n for (const info of funcInfos) {\n entryPoints[info.name] = {\n stage,\n resources: info.resources.map(resource => {\n const { name, group } = resource;\n return {\n name,\n group,\n entry: getBindGroupLayoutEntry(resource, stage),\n };\n }),\n };\n }\n return entryPoints;\n}\n/**\n * Given a WGSL shader, returns data definitions for structures,\n * uniforms, and storage buffers\n *\n * Example:\n *\n * ```js\n * const code = `\n * struct MyStruct {\n * color: vec4f,\n * brightness: f32,\n * kernel: array<f32, 9>,\n * };\n * @group(0) @binding(0) var<uniform> myUniforms: MyUniforms;\n * `;\n * const defs = makeShaderDataDefinitions(code);\n * const myUniformValues = makeStructuredView(defs.uniforms.myUniforms);\n *\n * myUniformValues.set({\n * color: [1, 0, 1, 1],\n * brightness: 0.8,\n * kernel: [\n * 1, 0, -1,\n * 2, 0, -2,\n * 1, 0, -1,\n * ],\n * });\n * device.queue.writeBuffer(uniformBuffer, 0, myUniformValues.arrayBuffer);\n * ```\n *\n * @param code WGSL shader. Note: it is not required for this to be a complete shader\n * @returns definitions of the structures by name. Useful for passing to {@link makeStructuredView}\n */\nfunction makeShaderDataDefinitions(code) {\n const reflect = new _t(code);\n const structs = Object.fromEntries(reflect.structs.map(structInfo => {\n return [structInfo.name, makeStructDefinition(reflect, structInfo, 0)];\n }));\n const uniforms = getNamedVariables(reflect, reflect.uniforms);\n const storages = getNamedVariables(reflect, reflect.storage.filter(v => v.resourceType === i.Storage));\n const storageTextures = getNamedVariables(reflect, reflect.storage.filter(v => v.resourceType === i.StorageTexture));\n const textures = getNamedVariables(reflect, reflect.textures.filter(v => v.type.name !== 'texture_external'));\n const externalTextures = getNamedVariables(reflect, reflect.textures.filter(v => v.type.name === 'texture_external'));\n const samplers = getNamedVariables(reflect, reflect.samplers);\n const entryPoints = {\n ...addEntryPoints(reflect.entry.vertex, GPUShaderStage.VERTEX),\n ...addEntryPoints(reflect.entry.fragment, GPUShaderStage.FRAGMENT),\n ...addEntryPoints(reflect.entry.compute, GPUShaderStage.COMPUTE),\n };\n return {\n externalTextures,\n samplers,\n structs,\n storages,\n storageTextures,\n textures,\n uniforms,\n entryPoints,\n };\n}\nfunction assert(cond, msg = '') {\n if (!cond) {\n throw new Error(msg);\n }\n}\n/*\n write down what I want for a given type\n\n struct VSUniforms {\n foo: u32,\n };\n @group(4) @binding(1) var<uniform> uni1: f32;\n @group(3) @binding(2) var<uniform> uni2: array<f32, 5>;\n @group(2) @binding(3) var<uniform> uni3: VSUniforms;\n @group(1) @binding(4) var<uniform> uni4: array<VSUniforms, 6>;\n\n uni1: {\n type: 'f32',\n numElements: undefined\n },\n uni2: {\n type: 'array',\n elementType: 'f32'\n numElements: 5,\n },\n uni3: {\n type: 'struct',\n fields: {\n foo: {\n type: 'f32',\n numElements: undefined\n }\n },\n },\n uni4: {\n type: 'array',\n elementType:\n fields: {\n foo: {\n type: 'f32',\n numElements: undefined\n }\n },\n fields: {\n foo: {\n type: 'f32',\n numElements: undefined\n }\n },\n ...\n ]\n\n */\nfunction addVariableType(reflect, v, offset) {\n switch (v.resourceType) {\n case i.Uniform:\n case i.Storage:\n case i.StorageTexture:\n return addType(reflect, v.type, offset);\n default:\n return {\n size: 0,\n type: v.type.name,\n };\n }\n}\nfunction addType(reflect, typeInfo, offset) {\n if (typeInfo.isArray) {\n assert(!typeInfo.isStruct, 'struct array is invalid');\n assert(!typeInfo.isStruct, 'template array is invalid');\n const arrayInfo = typeInfo;\n // ArrayDefinition\n return {\n size: arrayInfo.size,\n elementType: addType(reflect, arrayInfo.format, offset),\n numElements: arrayInfo.count,\n };\n }\n else if (typeInfo.isStruct) {\n assert(!typeInfo.isTemplate, 'template struct is invalid');\n const structInfo = typeInfo;\n return makeStructDefinition(reflect, structInfo, offset);\n }\n else {\n // template is like vec4<f32> or mat4x4<f16>\n const asTemplateInfo = typeInfo;\n const type = typeInfo.isTemplate\n ? `${asTemplateInfo.name}<${asTemplateInfo.format.name}>`\n : typeInfo.name;\n // IntrinsicDefinition\n return {\n size: typeInfo.size,\n type: type,\n };\n }\n}\n\nfunction guessTextureBindingViewDimensionForTexture(dimension, depthOrArrayLayers) {\n switch (dimension) {\n case '1d': return '1d';\n case '3d': return '3d';\n default: return depthOrArrayLayers > 1 ? '2d-array' : '2d';\n }\n}\nfunction normalizeGPUExtent3Dict(size) {\n return [size.width, size.height || 1, size.depthOrArrayLayers || 1];\n}\n/**\n * Converts a `GPUExtent3D` into an array of numbers\n *\n * `GPUExtent3D` has two forms `[width, height?, depth?]` or\n * `{width: number, height?: number, depthOrArrayLayers?: number}`\n *\n * You pass one of those in here and it returns an array of 3 numbers\n * so that your code doesn't have to deal with multiple forms.\n *\n * @param size\n * @returns an array of 3 numbers, [width, height, depthOrArrayLayers]\n */\nfunction normalizeGPUExtent3D(size) {\n return (Array.isArray(size) || isTypedArray(size))\n ? [...size, 1, 1].slice(0, 3)\n : normalizeGPUExtent3Dict(size);\n}\n/**\n * Given a GPUExtent3D returns the number of mip levels needed\n *\n * @param size\n * @returns number of mip levels needed for the given size\n */\nfunction numMipLevels(size, dimension) {\n const sizes = normalizeGPUExtent3D(size);\n const maxSize = Math.max(...sizes.slice(0, dimension === '3d' ? 3 : 2));\n return 1 + Math.log2(maxSize) | 0;\n}\n// Use a WeakMap so the device can be destroyed and/or lost\nconst byDevice = new WeakMap();\n/**\n * Generates mip levels from level 0 to the last mip for an existing texture\n *\n * The texture must have been created with TEXTURE_BINDING and RENDER_ATTACHMENT\n * and been created with mip levels\n *\n * @param device A GPUDevice\n * @param texture The texture to create mips for\n * @param textureBindingViewDimension This is only needed in compatibility mode\n * and it is only needed when the texture is going to be used as a cube map.\n */\nfunction generateMipmap(device, texture, textureBindingViewDimension) {\n let perDeviceInfo = byDevice.get(device);\n if (!perDeviceInfo) {\n perDeviceInfo = {\n pipelineByFormatAndViewDimension: {},\n moduleByViewDimension: {},\n };\n byDevice.set(device, perDeviceInfo);\n }\n let { sampler, module, } = perDeviceInfo;\n const { pipelineByFormatAndViewDimension, } = perDeviceInfo;\n textureBindingViewDimension = device.features.has('core-features-and-limits')\n ? '2d-array'\n : textureBindingViewDimension ?? guessTextureBindingViewDimensionForTexture(texture.dimension, texture.depthOrArrayLayers);\n if (!module) {\n module = device.createShaderModule({\n label: `mip level generation for ${textureBindingViewDimension}`,\n code: `\n const faceMat = array(\n mat3x3f( 0, 0, -2, 0, -2, 0, 1, 1, 1), // pos-x\n mat3x3f( 0, 0, 2, 0, -2, 0, -1, 1, -1), // neg-x\n mat3x3f( 2, 0, 0, 0, 0, 2, -1, 1, -1), // pos-y\n mat3x3f( 2, 0, 0, 0, 0, -2, -1, -1, 1), // neg-y\n mat3x3f( 2, 0, 0, 0, -2, 0, -1, 1, 1), // pos-z\n mat3x3f(-2, 0, 0, 0, -2, 0, 1, 1, -1)); // neg-z\n\n struct VSOutput {\n @builtin(position) position: vec4f,\n @location(0) texcoord: vec2f,\n @location(1) @interpolate(flat, either) baseArrayLayer: u32,\n };\n\n @vertex fn vs(\n @builtin(vertex_index) vertexIndex : u32,\n @builtin(instance_index) baseArrayLayer: u32,\n ) -> VSOutput {\n var pos = array<vec2f, 3>(\n vec2f(-1.0, -1.0),\n vec2f(-1.0, 3.0),\n vec2f( 3.0, -1.0),\n );\n\n var vsOutput: VSOutput;\n let xy = pos[vertexIndex];\n vsOutput.position = vec4f(xy, 0.0, 1.0);\n vsOutput.texcoord = xy * vec2f(0.5, -0.5) + vec2f(0.5);\n vsOutput.baseArrayLayer = baseArrayLayer;\n return vsOutput;\n }\n\n @group(0) @binding(0) var ourSampler: sampler;\n\n @group(0) @binding(1) var ourTexture2d: texture_2d<f32>;\n @fragment fn fs2d(fsInput: VSOutput) -> @location(0) vec4f {\n return textureSample(ourTexture2d, ourSampler, fsInput.texcoord);\n }\n\n @group(0) @binding(1) var ourTexture2dArray: texture_2d_array<f32>;\n @fragment fn fs2darray(fsInput: VSOutput) -> @location(0) vec4f {\n return textureSample(\n ourTexture2dArray,\n ourSampler,\n fsInput.texcoord,\n fsInput.baseArrayLayer);\n }\n\n @group(0) @binding(1) var ourTextureCube: texture_cube<f32>;\n @fragment fn fscube(fsInput: VSOutput) -> @location(0) vec4f {\n return textureSample(\n ourTextureCube,\n ourSampler,\n faceMat[fsInput.baseArrayLayer] * vec3f(fract(fsInput.texcoord), 1));\n }\n\n @group(0) @binding(1) var ourTextureCubeArray: texture_cube_array<f32>;\n @fragment fn fscubearray(fsInput: VSOutput) -> @location(0) vec4f {\n return textureSample(\n ourTextureCubeArray,\n ourSampler,\n faceMat[fsInput.baseArrayLayer] * vec3f(fract(fsInput.texcoord), 1), fsInput.baseArrayLayer);\n }\n `,\n });\n sampler = device.createSampler({\n minFilter: 'linear',\n magFilter: 'linear',\n });\n Object.assign(perDeviceInfo, { sampler, module });\n }\n const id = `${texture.format}.${textureBindingViewDimension}`;\n if (!pipelineByFormatAndViewDimension[id]) {\n const entryPoint = `fs${textureBindingViewDimension.replace(/[\\W]/, '')}`;\n pipelineByFormatAndViewDimension[id] = device.createRenderPipeline({\n label: `mip level generator pipeline for ${textureBindingViewDimension}`,\n layout: 'auto',\n vertex: {\n module,\n },\n fragment: {\n module,\n entryPoint,\n targets: [{ format: texture.format }],\n },\n });\n }\n const pipeline = pipelineByFormatAndViewDimension[id];\n const encoder = device.createCommandEncoder({\n label: 'mip gen encoder',\n });\n for (let baseMipLevel = 1; baseMipLevel < texture.mipLevelCount; ++baseMipLevel) {\n for (let baseArrayLayer = 0; baseArrayLayer < texture.depthOrArrayLayers; ++baseArrayLayer) {\n const bindGroup = device.createBindGroup({\n layout: pipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: sampler },\n {\n binding: 1,\n resource: texture.createView({\n dimension: textureBindingViewDimension,\n baseMipLevel: baseMipLevel - 1,\n mipLevelCount: 1,\n }),\n },\n ],\n });\n const renderPassDescriptor = {\n label: 'mip gen renderPass',\n colorAttachments: [\n {\n view: texture.createView({\n dimension: '2d',\n baseMipLevel,\n mipLevelCount: 1,\n baseArrayLayer,\n arrayLayerCount: 1,\n }),\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n };\n const pass = encoder.beginRenderPass(renderPassDescriptor);\n pass.setPipeline(pipeline);\n pass.setBindGroup(0, bindGroup);\n pass.draw(3, 1, 0, baseArrayLayer);\n pass.end();\n }\n }\n const commandBuffer = encoder.finish();\n device.queue.submit([commandBuffer]);\n}\n\nconst kTypedArrayToAttribFormat = new Map([\n [Int8Array, { formats: ['sint8', 'snorm8'], defaultForType: 1 }],\n [Uint8Array, { formats: ['uint8', 'unorm8'], defaultForType: 1 }],\n [Int16Array, { formats: ['sint16', 'snorm16'], defaultForType: 1 }],\n [Uint16Array, { formats: ['uint16', 'unorm16'], defaultForType: 1 }],\n [Int32Array, { formats: ['sint32', 'snorm32'], defaultForType: 0 }],\n [Uint32Array, { formats: ['uint32', 'unorm32'], defaultForType: 0 }],\n [Float32Array, { formats: ['float32', 'float32'], defaultForType: 0 }],\n // TODO: Add Float16Array\n]);\nconst kVertexFormatPrefixToType = new Map([...kTypedArrayToAttribFormat.entries()].map(([Type, { formats: [s1, s2] }]) => [[s1, Type], [s2, Type]]).flat());\nfunction isIndices(name) {\n return name === \"indices\";\n}\nfunction makeTypedArrayFromArrayUnion(array, name) {\n if (isTypedArray(array)) {\n return array;\n }\n let asFullSpec = array;\n if (isTypedArray(asFullSpec.data)) {\n return asFullSpec.data;\n }\n if (Array.isArray(array) || typeof array === 'number') {\n asFullSpec = {\n data: array,\n };\n }\n let Type = asFullSpec.type;\n if (!Type) {\n if (isIndices(name)) {\n Type = Uint32Array;\n }\n else {\n Type = Float32Array;\n }\n }\n return new Type(asFullSpec.data); // ugh!\n}\nfunction getArray(array) {\n const arr = array.length ? array : array.data;\n return arr;\n}\nconst kNameToNumComponents = [\n { re: /coord|texture|uv/i, numComponents: 2 },\n { re: /color|colour/i, numComponents: 4 },\n];\nfunction guessNumComponentsFromNameImpl(name) {\n for (const { re, numComponents } of kNameToNumComponents) {\n if (re.test(name)) {\n return numComponents;\n }\n }\n return 3;\n}\nfunction guessNumComponentsFromName(name, length) {\n const numComponents = guessNumComponentsFromNameImpl(name);\n if (length % numComponents > 0) {\n throw new Error(`Can not guess numComponents for attribute '${name}'. Tried ${numComponents} but ${length} values is not evenly divisible by ${numComponents}. You should specify it.`);\n }\n return numComponents;\n}\nfunction getNumComponents(array, arrayName) {\n return array.numComponents || guessNumComponentsFromName(arrayName, getArray(array).length);\n}\nconst kVertexFormatRE = /(\\w+)(?:x(\\d))$/;\nfunction numComponentsAndTypeFromVertexFormat(format) {\n const m = kVertexFormatRE.exec(format);\n const [prefix, numComponents] = m ? [m[1], parseInt(m[2])] : [format, 1];\n return {\n Type: kVertexFormatPrefixToType.get(prefix),\n numComponents,\n };\n}\nfunction createTypedArrayOfSameType(typedArray, arrayBuffer) {\n const Ctor = Object.getPrototypeOf(typedArray).constructor;\n return new Ctor(arrayBuffer);\n}\n/**\n * Given a set of named arrays, generates an array `GPUBufferLayout`s\n *\n * Examples:\n *\n * ```js\n * const arrays = {\n * position: [1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1],\n * normal: [1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1],\n * texcoord: [1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1],\n * };\n *\n * const { bufferLayouts, typedArrays } = createBufferLayoutsFromArrays(arrays);\n * ```\n *\n * results in `bufferLayouts` being\n *\n * ```js\n * [\n * {\n * stepMode: 'vertex',\n * arrayStride: 32,\n * attributes: [\n * { shaderLocation: 0, offset: 0, format: 'float32x3' },\n * { shaderLocation: 1, offset: 12, format: 'float32x3' },\n * { shaderLocation: 2, offset: 24, format: 'float32x2' },\n * ],\n * },\n * ]\n * ```\n *\n * and `typedArrays` being\n *\n * ```\n * [\n * someFloat32Array0,\n * someFloat32Array1,\n * someFloat32Array2,\n * ]\n * ```\n *\n * See {@link Arrays} for details on the various types of arrays.\n *\n * Note: If typed arrays are passed in the same typed arrays will come out (copies will not be made)\n */\nfunction createBufferLayoutsFromArrays(arrays, options = {}) {\n const interleave = options.interleave === undefined ? true : options.interleave;\n const stepMode = options.stepMode || 'vertex';\n const shaderLocations = options.shaderLocation\n ? (Array.isArray(options.shaderLocation) ? options.shaderLocation : [options.shaderLocation])\n : [0];\n let currentOffset = 0;\n const bufferLayouts = [];\n const attributes = [];\n const typedArrays = [];\n Object.keys(arrays)\n .filter(arrayName => !isIndices(arrayName))\n .forEach(arrayName => {\n const array = arrays[arrayName];\n const data = makeTypedArrayFromArrayUnion(array, arrayName);\n const totalNumComponents = getNumComponents(array, arrayName);\n // if totalNumComponents > 4 then we clearly need to split this into multiple\n // attributes\n // (a) <= 4 doesn't mean don't split and\n // (b) how to split? We could divide by 4 and if it's not even then divide by 3\n // as a guess?\n // 5 is error? or 1x4 + 1x1?\n // 6 is 2x3\n // 7 is error? or 1x4 + 1x3?\n // 8 is 2x4\n // 9 is 3x3\n // 10 is error? or 2x4 + 1x2?\n // 11 is error? or 2x4 + 1x3?\n // 12 is 3x4 or 4x3?\n // 13 is error? or 3x4 + 1x1 or 4x3 + 1x1?\n // 14 is error? or 3x4 + 1x2 or 4x3 + 1x2?\n // 15 is error? or 3x4 + 1x3 or 4x3 + 1x3?\n // 16 is 4x4\n const by4 = totalNumComponents / 4;\n const by3 = totalNumComponents / 3;\n const step = by4 % 1 === 0 ? 4 : (by3 % 1 === 0 ? 3 : 4);\n for (let component = 0; component < totalNumComponents; component += step) {\n const numComponents = Math.min(step, totalNumComponents - component);\n const offset = currentOffset;\n currentOffset += numComponents * data.BYTES_PER_ELEMENT;\n const { defaultForType, formats } = kTypedArrayToAttribFormat.get(Object.getPrototypeOf(data).constructor);\n const normalize = array.normalize;\n const formatNdx = typeof normalize === 'undefined' ? defaultForType : (normalize ? 1 : 0);\n const format = `${formats[formatNdx]}${numComponents > 1 ? `x${numComponents}` : ''}`;\n // TODO: cleanup with generator?\n const shaderLocation = shaderLocations.shift();\n if (shaderLocations.length === 0) {\n shaderLocations.push(shaderLocation + 1);\n }\n attributes.push({\n offset,\n format,\n shaderLocation,\n });\n typedArrays.push({\n data,\n offset: component,\n stride: totalNumComponents,\n });\n }\n if (!interleave) {\n bufferLayouts.push({\n stepMode,\n arrayStride: currentOffset,\n attributes: attributes.slice(),\n });\n currentOffset = 0;\n attributes.length = 0;\n }\n });\n if (attributes.length) {\n bufferLayouts.push({\n stepMode,\n arrayStride: currentOffset,\n attributes: attributes,\n });\n }\n return {\n bufferLayouts,\n typedArrays,\n };\n}\nfunction getTypedArrayWithOffsetAndStride(ta, numComponents) {\n return (isTypedArray(ta)\n ? { data: ta, offset: 0, stride: numComponents }\n : ta);\n}\n/**\n * Given an array of `GPUVertexAttribute`s and a corresponding array\n * of TypedArrays, interleaves the contents of the typed arrays\n * into the given ArrayBuffer\n *\n * example:\n *\n * ```js\n * const attributes: GPUVertexAttribute[] = [\n * { shaderLocation: 0, offset: 0, format: 'float32x3' },\n * { shaderLocation: 1, offset: 12, format: 'float32x3' },\n * { shaderLocation: 2, offset: 24, format: 'float32x2' },\n * ];\n * const typedArrays = [\n * new Float32Array([1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1]),\n * new Float32Array([1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1]),\n * new Float32Array([1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1]),\n * ];\n * const arrayStride = (3 + 3 + 2) * 4; // pos + nrm + uv\n * const arrayBuffer = new ArrayBuffer(arrayStride * 24)\n * interleaveVertexData(attributes, typedArrays, arrayStride, arrayBuffer)\n * ```\n *\n * results in the contents of `arrayBuffer` to be the 3 TypedArrays interleaved\n *\n * See {@link Arrays} for details on the various types of arrays.\n *\n * Note: You can generate `attributes` and `typedArrays` above by calling\n * {@link createBufferLayoutsFromArrays}\n */\nfunction interleaveVertexData(attributes, typedArrays, arrayStride, arrayBuffer) {\n const views = new Map();\n const getView = (typedArray) => {\n const Ctor = Object.getPrototypeOf(typedArray).constructor;\n const view = views.get(Ctor);\n if (view) {\n return view;\n }\n const newView = new Ctor(arrayBuffer);\n views.set(Ctor, newView);\n return newView;\n };\n attributes.forEach((attribute, ndx) => {\n const { offset, format } = attribute;\n const { numComponents } = numComponentsAndTypeFromVertexFormat(format);\n const { data, offset: srcOffset, stride, } = getTypedArrayWithOffsetAndStride(typedArrays[ndx], numComponents);\n const view = getView(data);\n for (let i = 0; i < data.length; i += stride) {\n const ndx = i / stride;\n const dstOffset = (offset + ndx * arrayStride) / view.BYTES_PER_ELEMENT;\n const srcOff = i + srcOffset;\n const s = data.subarray(srcOff, srcOff + numComponents);\n view.set(s, dstOffset);\n }\n });\n}\n/**\n * Given arrays, create buffers, fills the buffers with data if provided, optionally\n * interleaves the data (the default).\n *\n * Example:\n *\n * ```js\n * const {\n * buffers,\n * bufferLayouts,\n * indexBuffer,\n * indexFormat,\n * numElements,\n * } = createBuffersAndAttributesFromArrays(device, {\n * position: [1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1],\n * normal: [1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1],\n * texcoord: [1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1],\n * indices: [0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23],\n * });\n * ```\n *\n * Where `bufferLayouts` will be\n *\n * ```js\n * [\n * {\n * stepMode: 'vertex',\n * arrayStride: 32,\n * attributes: [\n * { shaderLocation: 0, offset: 0, format: 'float32x3' },\n * { shaderLocation: 1, offset: 12, format: 'float32x3' },\n * { shaderLocation: 2, offset: 24, format: 'float32x2' },\n * ],\n * },\n * ]\n * ```\n *\n * * `buffers` will have one `GPUBuffer` of usage `GPUBufferUsage.VERTEX`\n * * `indexBuffer` will be `GPUBuffer` of usage `GPUBufferUsage.INDEX`\n * * `indexFormat` will be `uint32` (use a full spec or a typedarray of `Uint16Array` if you want 16bit indices)\n * * `numElements` will be 36 (this is either the number entries in the array named `indices` or if no\n * indices are provided then it's the length of the first array divided by numComponents. See {@link Arrays})\n *\n * See {@link Arrays} for details on the various types of arrays.\n * Also see the cube and instancing examples.\n */\nfunction createBuffersAndAttributesFromArrays(device, arrays, options = {}) {\n const usage = (options.usage || 0);\n const { bufferLayouts, typedArrays, } = createBufferLayoutsFromArrays(arrays, options);\n const buffers = [];\n let numElements = -1;\n let bufferNdx = 0;\n for (const { attributes, arrayStride } of bufferLayouts) {\n const attribs = attributes;\n const attrib0 = attribs[0];\n const { numComponents } = numComponentsAndTypeFromVertexFormat(attrib0.format);\n const { data: data0, stride, } = getTypedArrayWithOffsetAndStride(typedArrays[bufferNdx], numComponents);\n if (numElements < 0) {\n numElements = data0.length / stride;\n }\n const size = arrayStride * numElements;\n const buffer = device.createBuffer({\n usage: usage | GPUBufferUsage.VERTEX,\n size,\n mappedAtCreation: true,\n });\n const arrayBuffer = buffer.getMappedRange();\n if (attribs.length === 1 && arrayStride === data0.BYTES_PER_ELEMENT * numComponents) {\n const view = createTypedArrayOfSameType(data0, arrayBuffer);\n view.set(data0);\n }\n else {\n interleaveVertexData(attribs, typedArrays.slice(bufferNdx), arrayStride, arrayBuffer);\n }\n buffer.unmap();\n buffers.push(buffer);\n bufferNdx += attribs.length;\n }\n const buffersAndAttributes = {\n numElements,\n bufferLayouts,\n buffers,\n };\n const indicesEntry = Object.entries(arrays).find(([arrayName]) => isIndices(arrayName));\n if (indicesEntry) {\n const indices = makeTypedArrayFromArrayUnion(indicesEntry[1], 'indices');\n const indexBuffer = device.createBuffer({\n size: indices.byteLength,\n usage: GPUBufferUsage.INDEX | usage,\n mappedAtCreation: true,\n });\n const dst = createTypedArrayOfSameType(indices, indexBuffer.getMappedRange());\n dst.set(indices);\n indexBuffer.unmap();\n buffersAndAttributes.indexBuffer = indexBuffer;\n buffersAndAttributes.indexFormat = indices instanceof Uint16Array ? 'uint16' : 'uint32';\n buffersAndAttributes.numElements = indices.length;\n }\n return buffersAndAttributes;\n}\n/**\n * Calls `passEncoder.setVertexBuffer` and optionally `passEncoder.setIndexBuffer`\n * for the buffers specified in `buffersAndAttributes`.\n *\n * This is extremely simple function. It is equivalent to\n *\n * ```js\n * buffersAndAttributes.buffers.forEach((buffer, i) => {\n * passEncoder.setVertexBuffer(firstVertexBufferIndex + i, buffer);\n * });\n*\n * if (buffersAndAttributes.indexBuffer) {\n * passEncoder.setIndexBuffer(buffersAndAttributes.indexBuffer, buffersAndAttributes.indexFormat!);\n * }\n * ```\n *\n * It exists solely for simple cases. If you have a complex case, call the passEncoder\n * yourself as appropriate.\n *\n * @param passEncoder a render pass encoder\n * @param buffersAndAttributes As returned from {@link createBuffersAndAttributesFromArrays}\n * @param firstVertexBufferIndex The first vertex buffer index. default = 0.\n */\nfunction setVertexAndIndexBuffers(passEncoder, buffersAndAttributes, firstVertexBufferIndex = 0) {\n buffersAndAttributes.buffers.forEach((buffer, i) => {\n passEncoder.setVertexBuffer(firstVertexBufferIndex + i, buffer);\n });\n if (buffersAndAttributes.indexBuffer) {\n passEncoder.setIndexBuffer(buffersAndAttributes.indexBuffer, buffersAndAttributes.indexFormat);\n }\n}\n/**\n * Calls {@link setVertexAndIndexBuffers} and then calls either `draw` or `drawIndexed`\n *\n * This is an extremely simple function. See {@link setVertexAndIndexBuffers}.\n * If you need something more complex, call pass encoder functions yourself as appropriate.\n *\n * @param passEncoder a render pass encoder\n * @param buffersAndAttributes As returned from {@link createBuffersAndAttributesFromArrays}\n */\nfunction drawArrays(passEncoder, buffersAndAttributes) {\n setVertexAndIndexBuffers(passEncoder, buffersAndAttributes);\n if (buffersAndAttributes.indexBuffer) {\n passEncoder.drawIndexed(buffersAndAttributes.numElements);\n }\n else {\n passEncoder.draw(buffersAndAttributes.numElements);\n }\n}\n\nfunction isTextureData(source) {\n const src = source;\n return isTypedArray(src.data) || Array.isArray(src.data);\n}\nfunction isTextureRawDataSource(source) {\n return isTypedArray(source) || Array.isArray(source) || isTextureData(source);\n}\nfunction toTypedArray(v, format) {\n if (isTypedArray(v)) {\n return v;\n }\n const { Type } = getTextureFormatInfo(format);\n return new Type(v);\n}\nfunction guessDimensions(width, height, numElements, dimension = '2d') {\n if (numElements % 1 !== 0) {\n throw new Error(\"can't guess dimensions\");\n }\n if (!width && !height) {\n const size = Math.sqrt(numElements / (dimension === 'cube' ? 6 : 1));\n if (size % 1 === 0) {\n width = size;\n height = size;\n }\n else {\n width = numElements;\n height = 1;\n }\n }\n else if (!height) {\n height = numElements / width;\n if (height % 1) {\n throw new Error(\"can't guess dimensions\");\n }\n }\n else if (!width) {\n width = numElements / height;\n if (width % 1) {\n throw new Error(\"can't guess dimensions\");\n }\n }\n const depth = numElements / width / height;\n if (depth % 1) {\n throw new Error(\"can't guess dimensions\");\n }\n return [width, height, depth];\n}\nfunction textureViewDimensionToDimension(viewDimension) {\n switch (viewDimension) {\n case '1d': return '1d';\n case '3d': return '3d';\n default: return '2d';\n }\n}\nconst kFormatToTypedArray = {\n '8snorm': Int8Array,\n '8unorm': Uint8Array,\n '8sint': Int8Array,\n '8uint': Uint8Array,\n '16snorm': Int16Array,\n '16unorm': Uint16Array,\n '16sint': Int16Array,\n '16uint': Uint16Array,\n '32snorm': Int32Array,\n '32unorm': Uint32Array,\n '32sint': Int32Array,\n '32uint': Uint32Array,\n '16float': Uint16Array, // TODO: change to Float16Array\n '32float': Float32Array,\n};\nconst kTextureFormatRE = /([a-z]+)(\\d+)([a-z]+)/;\nfunction getTextureFormatInfo(format) {\n // this is a hack! It will only work for common formats\n const [, channels, bits, typeName] = kTextureFormatRE.exec(format);\n // TODO: if the regex fails, use table for other formats?\n const numChannels = channels.length;\n const bytesPerChannel = parseInt(bits) / 8;\n const bytesPerElement = numChannels * bytesPerChannel;\n const Type = kFormatToTypedArray[`${bits}${typeName}`];\n return {\n channels,\n numChannels,\n bytesPerChannel,\n bytesPerElement,\n Type,\n };\n}\n/**\n * Gets the size of a mipLevel. Returns an array of 3 numbers [width, height, depthOrArrayLayers]\n */\nfunction getSizeForMipFromTexture(texture, mipLevel) {\n return [\n texture.width,\n texture.height,\n texture.depthOrArrayLayers,\n ].map(v => Math.max(1, Math.floor(v / 2 ** mipLevel)));\n}\n/**\n * Uploads Data to a texture\n */\nfunction uploadDataToTexture(device, texture, source, options) {\n const data = toTypedArray(source.data || source, texture.format);\n const mipLevel = 0;\n const size = getSizeForMipFromTexture(texture, mipLevel);\n const { bytesPerElement } = getTextureFormatInfo(texture.format);\n const origin = options.origin || [0, 0, 0];\n device.queue.writeTexture({ texture, origin }, data, { bytesPerRow: bytesPerElement * size[0], rowsPerImage: size[1] }, size);\n}\n/**\n * Copies a an array of \"sources\" (Video, Canvas, OffscreenCanvas, ImageBitmap)\n * to a texture and then optionally generates mip levels\n */\nfunction copySourcesToTexture(device, texture, sources, options = {}) {\n let tempTexture;\n sources.forEach((source, layer) => {\n const origin = [0, 0, layer + (options.baseArrayLayer || 0)];\n if (isTextureRawDataSource(source)) {\n uploadDataToTexture(device, texture, source, { origin });\n }\n else {\n const s = source;\n // work around limit that you can't call copyExternalImageToTexture for 3d texture.\n // sse https://github.com/gpuweb/gpuweb/issues/4697 for if we can remove this\n let dstTexture = texture;\n let copyOrigin = origin;\n if (texture.dimension === '3d') {\n tempTexture = tempTexture ?? device.createTexture({\n format: texture.format,\n usage: texture.usage | GPUTextureUsage.COPY_SRC,\n size: [texture.width, texture.height, 1],\n });\n dstTexture = tempTexture;\n copyOrigin = [0, 0, 0];\n }\n const { flipY, premultipliedAlpha, colorSpace } = options;\n device.queue.copyExternalImageToTexture({ source: s, flipY, }, { texture: dstTexture, premultipliedAlpha, colorSpace, origin: copyOrigin }, getSizeFromSource(s, options));\n if (tempTexture) {\n const encoder = device.createCommandEncoder();\n encoder.copyTextureToTexture({ texture: tempTexture }, { texture, origin }, tempTexture);\n device.queue.submit([encoder.finish()]);\n }\n }\n });\n if (tempTexture) {\n tempTexture.destroy();\n }\n if (texture.mipLevelCount > 1) {\n const viewDimension = options.viewDimension ?? guessTextureBindingViewDimensionForTexture(texture.dimension, texture.depthOrArrayLayers);\n generateMipmap(device, texture, viewDimension);\n }\n}\n/**\n * Copies a \"source\" (Video, Canvas, OffscreenCanvas, ImageBitmap)\n * to a texture and then optionally generates mip levels\n */\nfunction copySourceToTexture(device, texture, source, options = {}) {\n copySourcesToTexture(device, texture, [source], options);\n}\n/**\n * Gets the size from a source. This is to smooth out the fact that different\n * sources have a different way to get their size.\n */\nfunction getSizeFromSource(source, options) {\n if ('videoWidth' in source && 'videoHeight' in source) {\n return [source.videoWidth, source.videoHeight, 1];\n }\n else {\n const maybeHasWidthAndHeight = source;\n const { width, height } = maybeHasWidthAndHeight;\n if (width > 0 && height > 0 && !isTextureRawDataSource(source)) {\n // this should cover Canvas, Image, ImageData, ImageBitmap, TextureCreationData\n return [width, height, 1];\n }\n const format = options.format || 'rgba8unorm';\n const { bytesPerElement, bytesPerChannel } = getTextureFormatInfo(format);\n const data = isTypedArray(source) || Array.isArray(source)\n ? source\n : source.data;\n const numBytes = isTypedArray(data)\n ? data.byteLength\n : (data.length * bytesPerChannel);\n const numElements = numBytes / bytesPerElement;\n return guessDimensions(width, height, numElements);\n }\n}\n/**\n * Create a texture from an array of sources (Video, Canvas, OffscreenCanvas, ImageBitmap)\n * and optionally create mip levels. If you set `mips: true` and don't set a mipLevelCount\n * then it will automatically make the correct number of mip levels.\n *\n * Example:\n *\n * ```js\n * const texture = createTextureFromSource(\n * device,\n * [\n * someCanvasOrVideoOrImageImageBitmap0,\n * someCanvasOrVideoOrImageImageBitmap1,\n * ],\n * {\n * usage: GPUTextureUsage.TEXTURE_BINDING |\n * GPUTextureUsage.RENDER_ATTACHMENT |\n * GPUTextureUsage.COPY_DST,\n * mips: true,\n * }\n * );\n * ```\n *\n * Note: If you are supporting compatibility mode you will need to pass in your\n * intended view dimension for cubemaps. Example:\n *\n * ```js\n * const texture = createTextureFromSource(\n * device,\n * [\n * someCanvasOrVideoOrImageImageBitmapPosX,\n * someCanvasOrVideoOrImageImageBitmapNegY,\n * someCanvasOrVideoOrImageImageBitmapPosY,\n * someCanvasOrVideoOrImageImageBitmapNegY,\n * someCanvasOrVideoOrImageImageBitmapPosZ,\n * someCanvasOrVideoOrImageImageBitmapNegZ,\n * ],\n * {\n * usage: GPUTextureUsage.TEXTURE_BINDING |\n * GPUTextureUsage.RENDER_ATTACHMENT |\n * GPUTextureUsage.COPY_DST,\n * mips: true,\n * viewDimension: 'cube', // <=- Required for compatibility mode\n * }\n * );\n * ```\n */\nfunction createTextureFromSources(device, sources, options = {}) {\n // NOTE: We assume all the sizes are the same. If they are not you'll get\n // an error.\n const size = getSizeFromSource(sources[0], options);\n size[2] = size[2] > 1 ? size[2] : sources.length;\n const viewDimension = options.viewDimension ?? guessTextureBindingViewDimensionForTexture(options.dimension, size[2]);\n const dimension = textureViewDimensionToDimension(viewDimension);\n const texture = device.createTexture({\n dimension,\n textureBindingViewDimension: viewDimension,\n format: options.format || 'rgba8unorm',\n mipLevelCount: options.mipLevelCount\n ? options.mipLevelCount\n : options.mips ? numMipLevels(size) : 1,\n size,\n usage: (options.usage ?? 0) |\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n });\n copySourcesToTexture(device, texture, sources, options);\n return texture;\n}\n/**\n * Create a texture from a source (Video, Canvas, OffscreenCanvas, ImageBitmap)\n * and optionally create mip levels. If you set `mips: true` and don't set a mipLevelCount\n * then it will automatically make the correct number of mip levels.\n *\n * Example:\n *\n * ```js\n * const texture = createTextureFromSource(\n * device,\n * someCanvasOrVideoOrImageImageBitmap,\n * {\n * usage: GPUTextureUsage.TEXTURE_BINDING |\n * GPUTextureUsage.RENDER_ATTACHMENT |\n * GPUTextureUsage.COPY_DST,\n * mips: true,\n * }\n * );\n * ```\n */\nfunction createTextureFromSource(device, source, options = {}) {\n return createTextureFromSources(device, [source], options);\n}\n/**\n * Load an ImageBitmap\n * @param url\n * @param options\n * @returns the loaded ImageBitmap\n */\nasync function loadImageBitmap(url, options = {}) {\n const res = await fetch(url);\n const blob = await res.blob();\n const opt = {\n ...options,\n ...(options.colorSpaceConversion !== undefined && { colorSpaceConversion: 'none' }),\n };\n return await createImageBitmap(blob, opt);\n}\n/**\n * Load images and create a texture from them, optionally generating mip levels\n *\n * Assumes all the urls reference images of the same size.\n *\n * Example:\n *\n * ```js\n * const texture = await createTextureFromImage(\n * device,\n * [\n * 'https://someimage1.url',\n * 'https://someimage2.url',\n * ],\n * {\n * mips: true,\n * flipY: true,\n * },\n * );\n * ```\n */\nasync function createTextureFromImages(device, urls, options = {}) {\n // TODO: start once we've loaded one?\n // We need at least 1 to know the size of the texture to create\n const imgBitmaps = await Promise.all(urls.map(url => loadImageBitmap(url)));\n return createTextureFromSources(device, imgBitmaps, options);\n}\n/**\n * Load an image and create a texture from it, optionally generating mip levels\n *\n * Example:\n *\n * ```js\n * const texture = await createTextureFromImage(device, 'https://someimage.url', {\n * mips: true,\n * flipY: true,\n * });\n * ```\n */\nasync function createTextureFromImage(device, url, options = {}) {\n return createTextureFromImages(device, [url], options);\n}\n\n/*\n * Copyright 2023 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * A class to provide `push` on a typed array.\n *\n * example:\n *\n * ```js\n * const positions = new TypedArrayWrapper(new Float32Array(300), 3);\n * positions.push(1, 2, 3); // add a position\n * positions.push([4, 5, 6]); // add a position\n * positions.push(new Float32Array(6)); // add 2 positions\n * const data = positions.typedArray;\n * ```\n */\nclass TypedArrayWrapper {\n typedArray;\n cursor = 0;\n numComponents;\n constructor(arr, numComponents) {\n this.typedArray = arr;\n this.numComponents = numComponents;\n }\n get numElements() {\n return this.typedArray.length / this.numComponents;\n }\n push(...data) {\n for (const value of data) {\n if (Array.isArray(value) || isTypedArray(value)) {\n const asArray = data;\n this.typedArray.set(asArray, this.cursor);\n this.cursor += asArray.length;\n }\n else {\n this.typedArray[this.cursor++] = value;\n }\n }\n }\n reset(index = 0) {\n this.cursor = index;\n }\n}\n/**\n * creates a typed array with a `push` function attached\n * so that you can easily *push* values.\n *\n * `push` can take multiple arguments. If an argument is an array each element\n * of the array will be added to the typed array.\n *\n * Example:\n *\n * const array = createAugmentedTypedArray(3, 2, Float32Array);\n * array.push(1, 2, 3);\n * array.push([4, 5, 6]);\n * // array now contains [1, 2, 3, 4, 5, 6]\n *\n * Also has `numComponents` and `numElements` properties.\n *\n * @param numComponents number of components\n * @param numElements number of elements. The total size of the array will be `numComponents * numElements`.\n * @param Type A constructor for the type. Default = `Float32Array`.\n */\nfunction createAugmentedTypedArray(numComponents, numElements, Type) {\n return new TypedArrayWrapper(new Type(numComponents * numElements), numComponents);\n}\n// I couldn't figure out how to make this because TypedArrayWrapper wants a type\n// but this is explicity kind of type-less.\nfunction createAugmentedTypedArrayFromExisting(numComponents, numElements, existingArray) {\n const Ctor = existingArray.constructor;\n const array = new Ctor(numComponents * numElements);\n return new TypedArrayWrapper(array, numComponents);\n}\n/**\n * Creates XY quad vertices\n *\n * The default with no parameters will return a 2x2 quad with values from -1 to +1.\n * If you want a unit quad with that goes from 0 to 1 you'd call it with\n *\n * createXYQuadVertices(1, 0.5, 0.5);\n *\n * If you want a unit quad centered above 0,0 you'd call it with\n *\n * primitives.createXYQuadVertices(1, 0, 0.5);\n *\n * @param params\n * @param params.size the size across the quad. Defaults to 2 which means vertices will go from -1 to +1\n * @param params.xOffset the amount to offset the quad in X. Default = 0\n * @param params.yOffset the amount to offset the quad in Y. Default = 0\n * @return the created XY Quad vertices\n */\nfunction createXYQuadVertices({ size: inSize = 2, xOffset = 0, yOffset = 0 } = {}) {\n const size = inSize * 0.5;\n return {\n position: {\n numComponents: 2,\n data: [\n xOffset + -1 * size, yOffset + -1 * size,\n xOffset + 1 * size, yOffset + -1 * size,\n xOffset + -1 * size, yOffset + 1 * size,\n xOffset + 1 * size, yOffset + 1 * size,\n ],\n },\n normal: [\n 0, 0, 1,\n 0, 0, 1,\n 0, 0, 1,\n 0, 0, 1,\n ],\n texcoord: [\n 0, 0,\n 1, 0,\n 0, 1,\n 1, 1,\n ],\n indices: [0, 1, 2, 2, 1, 3],\n };\n}\n/**\n * Creates XZ plane vertices.\n *\n * The created plane has position, normal, and texcoord data\n *\n * @param params\n * @param params.width Width of the plane. Default = 1\n * @param params.depth Depth of the plane. Default = 1\n * @param params.subdivisionsWidth Number of steps across the plane. Default = 1\n * @param params.subdivisionsDepth Number of steps down the plane. Default = 1\n * @return The created plane vertices.\n */\nfunction createPlaneVertices({ width = 1, depth = 1, subdivisionsWidth = 1, subdivisionsDepth = 1, } = {}) {\n const numVertices = (subdivisionsWidth + 1) * (subdivisionsDepth + 1);\n const positions = createAugmentedTypedArray(3, numVertices, Float32Array);\n const normals = createAugmentedTypedArray(3, numVertices, Float32Array);\n const texcoords = createAugmentedTypedArray(2, numVertices, Float32Array);\n for (let z = 0; z <= subdivisionsDepth; z++) {\n for (let x = 0; x <= subdivisionsWidth; x++) {\n const u = x / subdivisionsWidth;\n const v = z / subdivisionsDepth;\n positions.push(width * u - width * 0.5, 0, depth * v - depth * 0.5);\n normals.push(0, 1, 0);\n texcoords.push(u, v);\n }\n }\n const numVertsAcross = subdivisionsWidth + 1;\n const indices = createAugmentedTypedArray(3, subdivisionsWidth * subdivisionsDepth * 2, Uint16Array);\n for (let z = 0; z < subdivisionsDepth; z++) { // eslint-disable-line\n for (let x = 0; x < subdivisionsWidth; x++) { // eslint-disable-line\n // Make triangle 1 of quad.\n indices.push((z + 0) * numVertsAcross + x, (z + 1) * numVertsAcross + x, (z + 0) * numVertsAcross + x + 1);\n // Make triangle 2 of quad.\n indices.push((z + 1) * numVertsAcross + x, (z + 1) * numVertsAcross + x + 1, (z + 0) * numVertsAcross + x + 1);\n }\n }\n return {\n position: positions.typedArray,\n normal: normals.typedArray,\n texcoord: texcoords.typedArray,\n indices: indices.typedArray,\n };\n}\n/**\n * Creates sphere vertices.\n *\n * The created sphere has position, normal, and texcoord data\n *\n * @param params\n * @param params.radius radius of the sphere. Default = 1\n * @param params.subdivisionsAxis number of steps around the sphere. Default = 24\n * @param params.subdivisionsHeight number of vertically on the sphere. Default = 12\n * @param params.startLatitudeInRadians where to start the\n * top of the sphere. Default = 0\n * @param params.endLatitudeInRadians Where to end the\n * bottom of the sphere. Default = π\n * @param params.startLongitudeInRadians where to start\n * wrapping the sphere. Default = 0\n * @param params.endLongitudeInRadians where to end\n * wrapping the sphere. Default = 2π\n * @return The created sphere vertices.\n */\nfunction createSphereVertices({ radius = 1, subdivisionsAxis = 24, subdivisionsHeight = 12, startLatitudeInRadians = 0, endLatitudeInRadians = Math.PI, startLongitudeInRadians = 0, endLongitudeInRadians = Math.PI * 2, } = {}) {\n if (subdivisionsAxis <= 0 || subdivisionsHeight <= 0) {\n throw new Error('subdivisionAxis and subdivisionHeight must be > 0');\n }\n const latRange = endLatitudeInRadians - startLatitudeInRadians;\n const longRange = endLongitudeInRadians - startLongitudeInRadians;\n // We are going to generate our sphere by iterating through its\n // spherical coordinates and generating 2 triangles for each quad on a\n // ring of the sphere.\n const numVertices = (subdivisionsAxis + 1) * (subdivisionsHeight + 1);\n const positions = createAugmentedTypedArray(3, numVertices, Float32Array);\n const normals = createAugmentedTypedArray(3, numVertices, Float32Array);\n const texcoords = createAugmentedTypedArray(2, numVertices, Float32Array);\n // Generate the individual vertices in our vertex buffer.\n for (let y = 0; y <= subdivisionsHeight; y++) {\n for (let x = 0; x <= subdivisionsAxis; x++) {\n // Generate a vertex based on its spherical coordinates\n const u = x / subdivisionsAxis;\n const v = y / subdivisionsHeight;\n const theta = longRange * u + startLongitudeInRadians;\n const phi = latRange * v + startLatitudeInRadians;\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n const ux = cosTheta * sinPhi;\n const uy = cosPhi;\n const uz = sinTheta * sinPhi;\n positions.push(radius * ux, radius * uy, radius * uz);\n normals.push(ux, uy, uz);\n texcoords.push(1 - u, v);\n }\n }\n const numVertsAround = subdivisionsAxis + 1;\n const indices = createAugmentedTypedArray(3, subdivisionsAxis * subdivisionsHeight * 2, Uint16Array);\n for (let x = 0; x < subdivisionsAxis; x++) { // eslint-disable-line\n for (let y = 0; y < subdivisionsHeight; y++) { // eslint-disable-line\n // Make triangle 1 of quad.\n indices.push((y + 0) * numVertsAround + x, (y + 0) * numVertsAround + x + 1, (y + 1) * numVertsAround + x);\n // Make triangle 2 of quad.\n indices.push((y + 1) * numVertsAround + x, (y + 0) * numVertsAround + x + 1, (y + 1) * numVertsAround + x + 1);\n }\n }\n return {\n position: positions.typedArray,\n normal: normals.typedArray,\n texcoord: texcoords.typedArray,\n indices: indices.typedArray,\n };\n}\n/**\n * Array of the indices of corners of each face of a cube.\n */\nconst CUBE_FACE_INDICES = [\n [3, 7, 5, 1], // right\n [6, 2, 0, 4], // left\n [6, 7, 3, 2], // ??\n [0, 1, 5, 4], // ??\n [7, 6, 4, 5], // front\n [2, 3, 1, 0], // back\n];\n/**\n * Creates the vertices and indices for a cube.\n *\n * The cube is created around the origin. (-size / 2, size / 2).\n *\n * @param params\n * @param params.size width, height and depth of the cube. Default = 1\n * @return The created vertices.\n */\nfunction createCubeVertices({ size = 1 } = {}) {\n const k = size / 2;\n const cornerVertices = [\n [-k, -k, -k],\n [+k, -k, -k],\n [-k, +k, -k],\n [+k, +k, -k],\n [-k, -k, +k],\n [+k, -k, +k],\n [-k, +k, +k],\n [+k, +k, +k],\n ];\n const faceNormals = [\n [1, 0, 0],\n [-1, 0, 0],\n [0, 1, 0],\n [0, -1, 0],\n [0, 0, 1],\n [0, 0, -1],\n ];\n const uvCoords = [\n [1, 0],\n [0, 0],\n [0, 1],\n [1, 1],\n ];\n const numVertices = 6 * 4;\n const positions = createAugmentedTypedArray(3, numVertices, Float32Array);\n const normals = createAugmentedTypedArray(3, numVertices, Float32Array);\n const texcoords = createAugmentedTypedArray(2, numVertices, Float32Array);\n const indices = createAugmentedTypedArray(3, 6 * 2, Uint16Array);\n for (let f = 0; f < 6; ++f) {\n const faceIndices = CUBE_FACE_INDICES[f];\n for (let v = 0; v < 4; ++v) {\n const position = cornerVertices[faceIndices[v]];\n const normal = faceNormals[f];\n const uv = uvCoords[v];\n // Each face needs all four vertices because the normals and texture\n // coordinates are not all the same.\n positions.push(...position);\n normals.push(...normal);\n texcoords.push(...uv);\n }\n // Two triangles make a square face.\n const offset = 4 * f;\n indices.push(offset + 0, offset + 1, offset + 2);\n indices.push(offset + 0, offset + 2, offset + 3);\n }\n return {\n position: positions.typedArray,\n normal: normals.typedArray,\n texcoord: texcoords.typedArray,\n indices: indices.typedArray,\n };\n}\n/**\n * Creates vertices for a truncated cone, which is like a cylinder\n * except that it has different top and bottom radii. A truncated cone\n * can also be used to create cylinders and regular cones. The\n * truncated cone will be created centered about the origin, with the\n * y axis as its vertical axis. .\n *\n * @param params\n * @param params.bottomRadius Bottom radius of truncated cone. Default = 1\n * @param params.topRadius Top radius of truncated cone. Default = 0\n * @param params.height Height of truncated cone. Default = 1\n * @param params.radialSubdivisions The number of subdivisions around the\n * truncated cone. Default = 24\n * @param params.verticalSubdivisions The number of subdivisions down the\n * truncated cone. Default = 1\n * @param params.topCap Create top cap. Default = true.\n * @param params.bottomCap Create bottom cap. Default = true.\n * @return The created cone vertices.\n */\nfunction createTruncatedConeVertices({ bottomRadius = 1, topRadius = 0, height = 1, radialSubdivisions = 24, verticalSubdivisions = 1, topCap = true, bottomCap = true, } = {}) {\n if (radialSubdivisions < 3) {\n throw new Error('radialSubdivisions must be 3 or greater');\n }\n if (verticalSubdivisions < 1) {\n throw new Error('verticalSubdivisions must be 1 or greater');\n }\n const extra = (topCap ? 2 : 0) + (bottomCap ? 2 : 0);\n const numVertices = (radialSubdivisions + 1) * (verticalSubdivisions + 1 + extra);\n const positions = createAugmentedTypedArray(3, numVertices, Float32Array);\n const normals = createAugmentedTypedArray(3, numVertices, Float32Array);\n const texcoords = createAugmentedTypedArray(2, numVertices, Float32Array);\n const indices = createAugmentedTypedArray(3, radialSubdivisions * (verticalSubdivisions + extra / 2) * 2, Uint16Array);\n const vertsAroundEdge = radialSubdivisions + 1;\n // The slant of the cone is constant across its surface\n const slant = Math.atan2(bottomRadius - topRadius, height);\n const cosSlant = Math.cos(slant);\n const sinSlant = Math.sin(slant);\n const start = topCap ? -2 : 0;\n const end = verticalSubdivisions + (bottomCap ? 2 : 0);\n for (let yy = start; yy <= end; ++yy) {\n let v = yy / verticalSubdivisions;\n let y = height * v;\n let ringRadius;\n if (yy < 0) {\n y = 0;\n v = 1;\n ringRadius = bottomRadius;\n }\n else if (yy > verticalSubdivisions) {\n y = height;\n v = 1;\n ringRadius = topRadius;\n }\n else {\n ringRadius = bottomRadius +\n (topRadius - bottomRadius) * (yy / verticalSubdivisions);\n }\n if (yy === -2 || yy === verticalSubdivisions + 2) {\n ringRadius = 0;\n v = 0;\n }\n y -= height / 2;\n for (let ii = 0; ii < vertsAroundEdge; ++ii) {\n const sin = Math.sin(ii * Math.PI * 2 / radialSubdivisions);\n const cos = Math.cos(ii * Math.PI * 2 / radialSubdivisions);\n positions.push(sin * ringRadius, y, cos * ringRadius);\n if (yy < 0) {\n normals.push(0, -1, 0);\n }\n else if (yy > verticalSubdivisions) {\n normals.push(0, 1, 0);\n }\n else if (ringRadius === 0.0) {\n normals.push(0, 0, 0);\n }\n else {\n normals.push(sin * cosSlant, sinSlant, cos * cosSlant);\n }\n texcoords.push((ii / radialSubdivisions), 1 - v);\n }\n }\n for (let yy = 0; yy < verticalSubdivisions + extra; ++yy) { // eslint-disable-line\n if (yy === 1 && topCap || yy === verticalSubdivisions + extra - 2 && bottomCap) {\n continue;\n }\n for (let ii = 0; ii < radialSubdivisions; ++ii) { // eslint-disable-line\n indices.push(vertsAroundEdge * (yy + 0) + 0 + ii, vertsAroundEdge * (yy + 0) + 1 + ii, vertsAroundEdge * (yy + 1) + 1 + ii);\n indices.push(vertsAroundEdge * (yy + 0) + 0 + ii, vertsAroundEdge * (yy + 1) + 1 + ii, vertsAroundEdge * (yy + 1) + 0 + ii);\n }\n }\n return {\n position: positions.typedArray,\n normal: normals.typedArray,\n texcoord: texcoords.typedArray,\n indices: indices.typedArray,\n };\n}\n/**\n * Expands RLE data\n * @param rleData data in format of run-length, x, y, z, run-length, x, y, z\n * @param padding value to add each entry with.\n * @return the expanded rleData\n */\nfunction expandRLEData(rleData, padding = []) {\n padding = padding || [];\n const data = [];\n for (let ii = 0; ii < rleData.length; ii += 4) {\n const runLength = rleData[ii];\n const element = rleData.slice(ii + 1, ii + 4);\n element.push(...padding);\n for (let jj = 0; jj < runLength; ++jj) {\n data.push(...element);\n }\n }\n return data;\n}\n/**\n * Creates 3D 'F' vertices.\n * An 'F' is useful because you can easily tell which way it is oriented.\n * The created 'F' has position, normal, texcoord, and color arrays.\n *\n * @return The created vertices.\n */\nfunction create3DFVertices() {\n const positions = [\n // left column front\n 0, 0, 0,\n 0, 150, 0,\n 30, 0, 0,\n 0, 150, 0,\n 30, 150, 0,\n 30, 0, 0,\n // top rung front\n 30, 0, 0,\n 30, 30, 0,\n 100, 0, 0,\n 30, 30, 0,\n 100, 30, 0,\n 100, 0, 0,\n // middle rung front\n 30, 60, 0,\n 30, 90, 0,\n 67, 60, 0,\n 30, 90, 0,\n 67, 90, 0,\n 67, 60, 0,\n // left column back\n 0, 0, 30,\n 30, 0, 30,\n 0, 150, 30,\n 0, 150, 30,\n 30, 0, 30,\n 30, 150, 30,\n // top rung back\n 30, 0, 30,\n 100, 0, 30,\n 30, 30, 30,\n 30, 30, 30,\n 100, 0, 30,\n 100, 30, 30,\n // middle rung back\n 30, 60, 30,\n 67, 60, 30,\n 30, 90, 30,\n 30, 90, 30,\n 67, 60, 30,\n 67, 90, 30,\n // top\n 0, 0, 0,\n 100, 0, 0,\n 100, 0, 30,\n 0, 0, 0,\n 100, 0, 30,\n 0, 0, 30,\n // top rung front\n 100, 0, 0,\n 100, 30, 0,\n 100, 30, 30,\n 100, 0, 0,\n 100, 30, 30,\n 100, 0, 30,\n // under top rung\n 30, 30, 0,\n 30, 30, 30,\n 100, 30, 30,\n 30, 30, 0,\n 100, 30, 30,\n 100, 30, 0,\n // between top rung and middle\n 30, 30, 0,\n 30, 60, 30,\n 30, 30, 30,\n 30, 30, 0,\n 30, 60, 0,\n 30, 60, 30,\n // top of middle rung\n 30, 60, 0,\n 67, 60, 30,\n 30, 60, 30,\n 30, 60, 0,\n 67, 60, 0,\n 67, 60, 30,\n // front of middle rung\n 67, 60, 0,\n 67, 90, 30,\n 67, 60, 30,\n 67, 60, 0,\n 67, 90, 0,\n 67, 90, 30,\n // bottom of middle rung.\n 30, 90, 0,\n 30, 90, 30,\n 67, 90, 30,\n 30, 90, 0,\n 67, 90, 30,\n 67, 90, 0,\n // front of bottom\n 30, 90, 0,\n 30, 150, 30,\n 30, 90, 30,\n 30, 90, 0,\n 30, 150, 0,\n 30, 150, 30,\n // bottom\n 0, 150, 0,\n 0, 150, 30,\n 30, 150, 30,\n 0, 150, 0,\n 30, 150, 30,\n 30, 150, 0,\n // left side\n 0, 0, 0,\n 0, 0, 30,\n 0, 150, 30,\n 0, 0, 0,\n 0, 150, 30,\n 0, 150, 0,\n ];\n const texcoords = [\n // left column front\n 0.22, 0.19,\n 0.22, 0.79,\n 0.34, 0.19,\n 0.22, 0.79,\n 0.34, 0.79,\n 0.34, 0.19,\n // top rung front\n 0.34, 0.19,\n 0.34, 0.31,\n 0.62, 0.19,\n 0.34, 0.31,\n 0.62, 0.31,\n 0.62, 0.19,\n // middle rung front\n 0.34, 0.43,\n 0.34, 0.55,\n 0.49, 0.43,\n 0.34, 0.55,\n 0.49, 0.55,\n 0.49, 0.43,\n // left column back\n 0, 0,\n 1, 0,\n 0, 1,\n 0, 1,\n 1, 0,\n 1, 1,\n // top rung back\n 0, 0,\n 1, 0,\n 0, 1,\n 0, 1,\n 1, 0,\n 1, 1,\n // middle rung back\n 0, 0,\n 1, 0,\n 0, 1,\n 0, 1,\n 1, 0,\n 1, 1,\n // top\n 0, 0,\n 1, 0,\n 1, 1,\n 0, 0,\n 1, 1,\n 0, 1,\n // top rung front\n 0, 0,\n 1, 0,\n 1, 1,\n 0, 0,\n 1, 1,\n 0, 1,\n // under top rung\n 0, 0,\n 0, 1,\n 1, 1,\n 0, 0,\n 1, 1,\n 1, 0,\n // between top rung and middle\n 0, 0,\n 1, 1,\n 0, 1,\n 0, 0,\n 1, 0,\n 1, 1,\n // top of middle rung\n 0, 0,\n 1, 1,\n 0, 1,\n 0, 0,\n 1, 0,\n 1, 1,\n // front of middle rung\n 0, 0,\n 1, 1,\n 0, 1,\n 0, 0,\n 1, 0,\n 1, 1,\n // bottom of middle rung.\n 0, 0,\n 0, 1,\n 1, 1,\n 0, 0,\n 1, 1,\n 1, 0,\n // front of bottom\n 0, 0,\n 1, 1,\n 0, 1,\n 0, 0,\n 1, 0,\n 1, 1,\n // bottom\n 0, 0,\n 0, 1,\n 1, 1,\n 0, 0,\n 1, 1,\n 1, 0,\n // left side\n 0, 0,\n 0, 1,\n 1, 1,\n 0, 0,\n 1, 1,\n 1, 0,\n ];\n const normals = expandRLEData([\n // left column front\n // top rung front\n // middle rung front\n 18, 0, 0, 1,\n // left column back\n // top rung back\n // middle rung back\n 18, 0, 0, -1,\n // top\n 6, 0, 1, 0,\n // top rung front\n 6, 1, 0, 0,\n // under top rung\n 6, 0, -1, 0,\n // between top rung and middle\n 6, 1, 0, 0,\n // top of middle rung\n 6, 0, 1, 0,\n // front of middle rung\n 6, 1, 0, 0,\n // bottom of middle rung.\n 6, 0, -1, 0,\n // front of bottom\n 6, 1, 0, 0,\n // bottom\n 6, 0, -1, 0,\n // left side\n 6, -1, 0, 0,\n ]);\n const colors = expandRLEData([\n // left column front\n // top rung front\n // middle rung front\n 18, 200, 70, 120,\n // left column back\n // top rung back\n // middle rung back\n 18, 80, 70, 200,\n // top\n 6, 70, 200, 210,\n // top rung front\n 6, 200, 200, 70,\n // under top rung\n 6, 210, 100, 70,\n // between top rung and middle\n 6, 210, 160, 70,\n // top of middle rung\n 6, 70, 180, 210,\n // front of middle rung\n 6, 100, 70, 210,\n // bottom of middle rung.\n 6, 76, 210, 100,\n // front of bottom\n 6, 140, 210, 80,\n // bottom\n 6, 90, 130, 110,\n // left side\n 6, 160, 160, 220,\n ], [255]);\n const numVerts = positions.length / 3;\n const arrays = {\n position: createAugmentedTypedArray(3, numVerts, Float32Array),\n texcoord: createAugmentedTypedArray(2, numVerts, Float32Array),\n normal: createAugmentedTypedArray(3, numVerts, Float32Array),\n color: createAugmentedTypedArray(4, numVerts, Uint8Array),\n indices: createAugmentedTypedArray(3, numVerts / 3, Uint16Array),\n };\n arrays.position.push(positions);\n arrays.texcoord.push(texcoords);\n arrays.normal.push(normals);\n arrays.color.push(colors);\n for (let ii = 0; ii < numVerts; ++ii) {\n arrays.indices.push(ii);\n }\n return Object.fromEntries(Object.entries(arrays).map(([k, v]) => [k, v.typedArray]));\n}\n/**\n * Creates cylinder vertices. The cylinder will be created around the origin\n * along the y-axis.\n *\n * @param params\n * @param params.radius Radius of cylinder. Default = 1\n * @param params.height Height of cylinder. Default = 1\n * @param params.radialSubdivisions The number of subdivisions around the cylinder. Default = 24\n * @param params.verticalSubdivisions The number of subdivisions down the cylinder. Default = 1\n * @param params.topCap Create top cap. Default = true.\n * @param params.bottomCap Create bottom cap. Default = true.\n * @return The created vertices.\n */\nfunction createCylinderVertices({ radius = 1, height = 1, radialSubdivisions = 24, verticalSubdivisions = 1, topCap = true, bottomCap = true, } = {}) {\n return createTruncatedConeVertices({\n bottomRadius: radius,\n topRadius: radius,\n height,\n radialSubdivisions,\n verticalSubdivisions,\n topCap,\n bottomCap,\n });\n}\n/**\n * Creates vertices for a torus\n *\n * @param params\n * @param params.radius radius of center of torus circle. Default = 1\n * @param params.thickness radius of torus ring. Default = 0.24\n * @param params.radialSubdivisions The number of subdivisions around the torus. Default = 24\n * @param params.bodySubdivisions The number of subdivisions around the body torus. Default = 12\n * @param params.startAngle start angle in radians. Default = 0.\n * @param params.endAngle end angle in radians. Default = Math.PI * 2.\n * @return The created vertices.\n */\nfunction createTorusVertices({ radius = 1, thickness = 0.24, radialSubdivisions = 24, bodySubdivisions = 12, startAngle = 0, endAngle = Math.PI * 2, } = {}) {\n if (radialSubdivisions < 3) {\n throw new Error('radialSubdivisions must be 3 or greater');\n }\n if (bodySubdivisions < 3) {\n throw new Error('verticalSubdivisions must be 3 or greater');\n }\n const range = endAngle - startAngle;\n const radialParts = radialSubdivisions + 1;\n const bodyParts = bodySubdivisions + 1;\n const numVertices = radialParts * bodyParts;\n const positions = createAugmentedTypedArray(3, numVertices, Float32Array);\n const normals = createAugmentedTypedArray(3, numVertices, Float32Array);\n const texcoords = createAugmentedTypedArray(2, numVertices, Float32Array);\n const indices = createAugmentedTypedArray(3, (radialSubdivisions) * (bodySubdivisions) * 2, Uint16Array);\n for (let slice = 0; slice < bodyParts; ++slice) {\n const v = slice / bodySubdivisions;\n const sliceAngle = v * Math.PI * 2;\n const sliceSin = Math.sin(sliceAngle);\n const ringRadius = radius + sliceSin * thickness;\n const ny = Math.cos(sliceAngle);\n const y = ny * thickness;\n for (let ring = 0; ring < radialParts; ++ring) {\n const u = ring / radialSubdivisions;\n const ringAngle = startAngle + u * range;\n const xSin = Math.sin(ringAngle);\n const zCos = Math.cos(ringAngle);\n const x = xSin * ringRadius;\n const z = zCos * ringRadius;\n const nx = xSin * sliceSin;\n const nz = zCos * sliceSin;\n positions.push(x, y, z);\n normals.push(nx, ny, nz);\n texcoords.push(u, 1 - v);\n }\n }\n for (let slice = 0; slice < bodySubdivisions; ++slice) { // eslint-disable-line\n for (let ring = 0; ring < radialSubdivisions; ++ring) { // eslint-disable-line\n const nextRingIndex = 1 + ring;\n const nextSliceIndex = 1 + slice;\n indices.push(radialParts * slice + ring, radialParts * nextSliceIndex + ring, radialParts * slice + nextRingIndex);\n indices.push(radialParts * nextSliceIndex + ring, radialParts * nextSliceIndex + nextRingIndex, radialParts * slice + nextRingIndex);\n }\n }\n return {\n position: positions.typedArray,\n normal: normals.typedArray,\n texcoord: texcoords.typedArray,\n indices: indices.typedArray,\n };\n}\n/**\n * Creates disc vertices. The disc will be in the xz plane, centered at\n * the origin. When creating, at least 3 divisions, or pie\n * pieces, need to be specified, otherwise the triangles making\n * up the disc will be degenerate. You can also specify the\n * number of radial pieces `stacks`. A value of 1 for\n * stacks will give you a simple disc of pie pieces. If you\n * want to create an annulus you can set `innerRadius` to a\n * value > 0. Finally, `stackPower` allows you to have the widths\n * increase or decrease as you move away from the center. This\n * is particularly useful when using the disc as a ground plane\n * with a fixed camera such that you don't need the resolution\n * of small triangles near the perimeter. For example, a value\n * of 2 will produce stacks whose outside radius increases with\n * the square of the stack index. A value of 1 will give uniform\n * stacks.\n *\n * @param params\n * @param params.radius Radius of the ground plane. Default = 1\n * @param params.divisions Number of triangles in the ground plane (at least 3). Default = 24\n * @param params.stacks Number of radial divisions. Default = 1\n * @param params.innerRadius Default = 0\n * @param params.stackPower Power to raise stack size to for decreasing width. Default = 1\n * @return The created vertices.\n */\nfunction createDiscVertices({ radius = 1, divisions = 24, stacks = 1, innerRadius = 0, stackPower = 1, } = {}) {\n if (divisions < 3) {\n throw new Error('divisions must be at least 3');\n }\n // Note: We don't share the center vertex because that would\n // mess up texture coordinates.\n const numVertices = (divisions + 1) * (stacks + 1);\n const positions = createAugmentedTypedArray(3, numVertices, Float32Array);\n const normals = createAugmentedTypedArray(3, numVertices, Float32Array);\n const texcoords = createAugmentedTypedArray(2, numVertices, Float32Array);\n const indices = createAugmentedTypedArray(3, stacks * divisions * 2, Uint16Array);\n let firstIndex = 0;\n const radiusSpan = radius - innerRadius;\n const pointsPerStack = divisions + 1;\n // Build the disk one stack at a time.\n for (let stack = 0; stack <= stacks; ++stack) {\n const stackRadius = innerRadius + radiusSpan * Math.pow(stack / stacks, stackPower);\n for (let i = 0; i <= divisions; ++i) {\n const theta = 2.0 * Math.PI * i / divisions;\n const x = stackRadius * Math.cos(theta);\n const z = stackRadius * Math.sin(theta);\n positions.push(x, 0, z);\n normals.push(0, 1, 0);\n texcoords.push(1 - (i / divisions), stack / stacks);\n if (stack > 0 && i !== divisions) {\n // a, b, c and d are the indices of the vertices of a quad. unless\n // the current stack is the one closest to the center, in which case\n // the vertices a and b connect to the center vertex.\n const a = firstIndex + (i + 1);\n const b = firstIndex + i;\n const c = firstIndex + i - pointsPerStack;\n const d = firstIndex + (i + 1) - pointsPerStack;\n // Make a quad of the vertices a, b, c, d.\n indices.push(a, b, c);\n indices.push(a, c, d);\n }\n }\n firstIndex += divisions + 1;\n }\n return {\n position: positions.typedArray,\n normal: normals.typedArray,\n texcoord: texcoords.typedArray,\n indices: indices.typedArray,\n };\n}\nfunction allButIndices(name) {\n return name !== \"indices\";\n}\n/**\n * Given indexed vertices creates a new set of vertices un-indexed by expanding the vertices by index.\n */\nfunction deindex(arrays) {\n const indicesP = arrays.indices;\n const newVertices = {};\n const indices = makeTypedArrayFromArrayUnion(indicesP, 'indices');\n const numElements = indices.length;\n function expandToUnindexed(channel) {\n const srcBuffer = makeTypedArrayFromArrayUnion(arrays[channel], channel);\n const numComponents = getNumComponents(srcBuffer, channel);\n const dstBuffer = createAugmentedTypedArrayFromExisting(numComponents, numElements, srcBuffer);\n for (let ii = 0; ii < numElements; ++ii) {\n const ndx = indices[ii];\n const offset = ndx * numComponents;\n for (let jj = 0; jj < numComponents; ++jj) {\n dstBuffer.push(srcBuffer[offset + jj]);\n }\n }\n newVertices[channel] = dstBuffer.typedArray;\n }\n Object.keys(arrays).filter(allButIndices).forEach(expandToUnindexed);\n return newVertices;\n}\n// I don't want to pull in a whole math library\nconst normalize = ([x, y, z]) => {\n const len = x * x + y * y + z * z;\n return new Float32Array([x / len, y / len, z / len]);\n};\nconst subtract = (a, b) => {\n const r = new Float32Array(a.length);\n for (let i = 0; i < a.length; ++i) {\n r[i] = a[i] - b[i];\n }\n return r;\n};\nconst cross = (a, b) => {\n const r = new Float32Array(a.length);\n r[0] = a[1] * b[2] - a[2] * b[1];\n r[1] = a[2] * b[0] - a[0] * b[2];\n r[2] = a[0] * b[1] - a[1] * b[0];\n return r;\n};\n/**\n * Generate triangle normals from positions.\n * Assumes every 3 values is a position and every 3 positions come from the same triangle\n */\nfunction generateTriangleNormals(positions) {\n const normals = new Float32Array(positions.length);\n for (let ii = 0; ii < positions.length; ii += 9) {\n // pull out the 3 positions for this triangle\n const p0 = positions.subarray(ii, ii + 3);\n const p1 = positions.subarray(ii + 3, ii + 6);\n const p2 = positions.subarray(ii + 6, ii + 9);\n const n0 = normalize(subtract(p0, p1));\n const n1 = normalize(subtract(p0, p2));\n const n = cross(n0, n1);\n // copy them back in\n normals.set(n, ii);\n normals.set(n, ii + 3);\n normals.set(n, ii + 6);\n }\n return normals;\n}\n\nvar primitives = {\n __proto__: null,\n TypedArrayWrapper: TypedArrayWrapper,\n create3DFVertices: create3DFVertices,\n createCubeVertices: createCubeVertices,\n createCylinderVertices: createCylinderVertices,\n createDiscVertices: createDiscVertices,\n createPlaneVertices: createPlaneVertices,\n createSphereVertices: createSphereVertices,\n createTorusVertices: createTorusVertices,\n createTruncatedConeVertices: createTruncatedConeVertices,\n createXYQuadVertices: createXYQuadVertices,\n deindex: deindex,\n generateTriangleNormals: generateTriangleNormals\n};\n\nexport { TypedArrayViewGenerator, copySourceToTexture, copySourcesToTexture, createBufferLayoutsFromArrays, createBuffersAndAttributesFromArrays, createTextureFromImage, createTextureFromImages, createTextureFromSource, createTextureFromSources, drawArrays, generateMipmap, getNumComponents, getSizeAndAlignmentOfUnsizedArrayElement, getSizeForMipFromTexture, getSizeFromSource, guessTextureBindingViewDimensionForTexture, interleaveVertexData, isTypedArray, loadImageBitmap, makeBindGroupLayoutDescriptors, makeShaderDataDefinitions, makeStructuredView, makeTypedArrayFromArrayUnion, makeTypedArrayViews, normalizeGPUExtent3D, numMipLevels, primitives, setIntrinsicsToView, setStructuredValues, setStructuredView, setTypedValues, setVertexAndIndexBuffers, subarray };\n//# sourceMappingURL=webgpu-utils.module.js.map\n",
|
|
16
|
+
"class e{constructor(e,t){this.name=e,this.attributes=t,this.size=0}get isArray(){return!1}get isStruct(){return!1}get isTemplate(){return!1}get isPointer(){return!1}getTypeName(){return this.name}}class t{constructor(e,t,n){this.name=e,this.type=t,this.attributes=n,this.offset=0,this.size=0}get isArray(){return this.type.isArray}get isStruct(){return this.type.isStruct}get isTemplate(){return this.type.isTemplate}get align(){return this.type.isStruct?this.type.align:0}get members(){return this.type.isStruct?this.type.members:null}get format(){return this.type.isArray||this.type.isTemplate?this.type.format:null}get count(){return this.type.isArray?this.type.count:0}get stride(){return this.type.isArray?this.type.stride:this.size}}class n extends e{constructor(e,t){super(e,t),this.members=[],this.align=0,this.startLine=-1,this.endLine=-1,this.inUse=!1}get isStruct(){return!0}}class s extends e{constructor(e,t){super(e,t),this.count=0,this.stride=0}get isArray(){return!0}getTypeName(){return`array<${this.format.getTypeName()}, ${this.count}>`}}class r extends e{constructor(e,t,n){super(e,n),this.format=t}get isPointer(){return!0}getTypeName(){return`&${this.format.getTypeName()}`}}class a extends e{constructor(e,t,n,s){super(e,n),this.format=t,this.access=s}get isTemplate(){return!0}getTypeName(){let e=this.name;if(null!==this.format){if('vec2'===e||'vec3'===e||'vec4'===e||'mat2x2'===e||'mat2x3'===e||'mat2x4'===e||'mat3x2'===e||'mat3x3'===e||'mat3x4'===e||'mat4x2'===e||'mat4x3'===e||'mat4x4'===e){if('f32'===this.format.name)return e+='f',e;if('i32'===this.format.name)return e+='i',e;if('u32'===this.format.name)return e+='u',e;if('bool'===this.format.name)return e+='b',e;if('f16'===this.format.name)return e+='h',e}e+=`<${this.format.name}>`}else if('vec2'===e||'vec3'===e||'vec4'===e)return e;return e}}var i;(e=>{e[e.Uniform=0]='Uniform',e[e.Storage=1]='Storage',e[e.Texture=2]='Texture',e[e.Sampler=3]='Sampler',e[e.StorageTexture=4]='StorageTexture'})(i||(i={}));class o{constructor(e,t,n,s,r,a,i){this.name=e,this.type=t,this.group=n,this.binding=s,this.attributes=r,this.resourceType=a,this.access=i}get isArray(){return this.type.isArray}get isStruct(){return this.type.isStruct}get isTemplate(){return this.type.isTemplate}get size(){return this.type.size}get align(){return this.type.isStruct?this.type.align:0}get members(){return this.type.isStruct?this.type.members:null}get format(){return this.type.isArray||this.type.isTemplate?this.type.format:null}get count(){return this.type.isArray?this.type.count:0}get stride(){return this.type.isArray?this.type.stride:this.size}}class l{constructor(e,t){this.name=e,this.type=t}}class c{constructor(e,t,n,s){this.name=e,this.type=t,this.locationType=n,this.location=s,this.interpolation=null}}class u{constructor(e,t,n,s){this.name=e,this.type=t,this.locationType=n,this.location=s}}class h{constructor(e,t,n,s){this.name=e,this.type=t,this.attributes=n,this.id=s}}class f{constructor(e,t,n){this.name=e,this.type=t,this.attributes=n}}class p{constructor(e,t=null,n){this.stage=null,this.inputs=[],this.outputs=[],this.arguments=[],this.returnType=null,this.resources=[],this.overrides=[],this.startLine=-1,this.endLine=-1,this.inUse=!1,this.calls=new Set,this.name=e,this.stage=t,this.attributes=n}}class d{constructor(){this.vertex=[],this.fragment=[],this.compute=[]}}const m=new Float32Array(1),_=new Int32Array(m.buffer),g=new Uint16Array(1);function x(e){m[0]=e;const t=_[0],n=t>>31&1;let s=t>>23&255,r=8388607&t;if(255===s)return g[0]=n<<15|31744|(0!==r?512:0),g[0];if(0===s){if(0===r)return g[0]=n<<15,g[0];r|=8388608;let e=113;for(;!(8388608&r);)r<<=1,e--;return s=127-e,r&=8388607,s>0?(r=(r>>126-s)+(r>>127-s&1),g[0]=n<<15|s<<10|r>>13,g[0]):(g[0]=n<<15,g[0])}return s=s-127+15,s>=31?(g[0]=n<<15|31744,g[0]):s<=0?s<-10?(g[0]=n<<15,g[0]):(r=(8388608|r)>>1-s,g[0]=n<<15|r>>13,g[0]):(r>>=13,g[0]=n<<15|s<<10|r,g[0])}const y=new Uint32Array(1),b=new Float32Array(y.buffer,0,1);function v(e){const t=112+(e>>6&31)<<23|(63&e)<<17;return y[0]=t,b[0]}function w(e,t,n,s,r,a,i,o,l){const c=s*(i>>=r)*(a>>=r)+n*i+t*o;switch(l){case'r8unorm':return[k(e,c,'8unorm',1)[0]];case'r8snorm':return[k(e,c,'8snorm',1)[0]];case'r8uint':return[k(e,c,'8uint',1)[0]];case'r8sint':return[k(e,c,'8sint',1)[0]];case'rg8unorm':{const t=k(e,c,'8unorm',2);return[t[0],t[1]]}case'rg8snorm':{const t=k(e,c,'8snorm',2);return[t[0],t[1]]}case'rg8uint':{const t=k(e,c,'8uint',2);return[t[0],t[1]]}case'rg8sint':{const t=k(e,c,'8sint',2);return[t[0],t[1]]}case'rgba8unorm-srgb':case'rgba8unorm':{const t=k(e,c,'8unorm',4);return[t[0],t[1],t[2],t[3]]}case'rgba8snorm':{const t=k(e,c,'8snorm',4);return[t[0],t[1],t[2],t[3]]}case'rgba8uint':{const t=k(e,c,'8uint',4);return[t[0],t[1],t[2],t[3]]}case'rgba8sint':{const t=k(e,c,'8sint',4);return[t[0],t[1],t[2],t[3]]}case'bgra8unorm-srgb':case'bgra8unorm':{const t=k(e,c,'8unorm',4);return[t[2],t[1],t[0],t[3]]}case'r16uint':return[k(e,c,'16uint',1)[0]];case'r16sint':return[k(e,c,'16sint',1)[0]];case'r16float':return[k(e,c,'16float',1)[0]];case'rg16uint':{const t=k(e,c,'16uint',2);return[t[0],t[1]]}case'rg16sint':{const t=k(e,c,'16sint',2);return[t[0],t[1]]}case'rg16float':{const t=k(e,c,'16float',2);return[t[0],t[1]]}case'rgba16uint':{const t=k(e,c,'16uint',4);return[t[0],t[1],t[2],t[3]]}case'rgba16sint':{const t=k(e,c,'16sint',4);return[t[0],t[1],t[2],t[3]]}case'rgba16float':{const t=k(e,c,'16float',4);return[t[0],t[1],t[2],t[3]]}case'r32uint':return[k(e,c,'32uint',1)[0]];case'r32sint':return[k(e,c,'32sint',1)[0]];case'depth16unorm':case'depth24plus':case'depth24plus-stencil8':case'depth32float':case'depth32float-stencil8':case'r32float':return[k(e,c,'32float',1)[0]];case'rg32uint':{const t=k(e,c,'32uint',2);return[t[0],t[1]]}case'rg32sint':{const t=k(e,c,'32sint',2);return[t[0],t[1]]}case'rg32float':{const t=k(e,c,'32float',2);return[t[0],t[1]]}case'rgba32uint':{const t=k(e,c,'32uint',4);return[t[0],t[1],t[2],t[3]]}case'rgba32sint':{const t=k(e,c,'32sint',4);return[t[0],t[1],t[2],t[3]]}case'rgba32float':{const t=k(e,c,'32float',4);return[t[0],t[1],t[2],t[3]]}case'rg11b10ufloat':{const t=new Uint32Array(e.buffer,c,1)[0],n=(4192256&t)>>11,s=(4290772992&t)>>22;return[v(2047&t),v(n),function(e){const t=112+(e>>5&31)<<23|(31&e)<<18;return y[0]=t,b[0]}(s),1]}}return null}function k(e,t,n,s){const r=[0,0,0,0];for(let c=0;c<s;++c)switch(n){case'8unorm':r[c]=e[t]/255,t++;break;case'8snorm':r[c]=e[t]/255*2-1,t++;break;case'8uint':r[c]=e[t],t++;break;case'8sint':r[c]=e[t]-127,t++;break;case'16uint':r[c]=e[t]|e[t+1]<<8,t+=2;break;case'16sint':r[c]=(e[t]|e[t+1]<<8)-32768,t+=2;break;case'16float':r[c]=(a=e[t]|e[t+1]<<8,i=void 0,o=void 0,l=void 0,i=(32768&a)>>15,l=1023&a,0==(o=(31744&a)>>10)?(i?-1:1)*Math.pow(2,-14)*(l/Math.pow(2,10)):31==o?l?NaN:1/0*(i?-1:1):(i?-1:1)*Math.pow(2,o-15)*(1+l/Math.pow(2,10))),t+=2;break;case'32uint':case'32sint':r[c]=e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24,t+=4;break;case'32float':r[c]=new Float32Array(e.buffer,t,1)[0],t+=4}var a,i,o,l;return r}function I(e,t,n,s,r){for(let a=0;a<s;++a)switch(n){case'8unorm':e[t]=255*r[a],t++;break;case'8snorm':e[t]=.5*(r[a]+1)*255,t++;break;case'8uint':e[t]=r[a],t++;break;case'8sint':e[t]=r[a]+127,t++;break;case'16uint':new Uint16Array(e.buffer,t,1)[0]=r[a],t+=2;break;case'16sint':new Int16Array(e.buffer,t,1)[0]=r[a],t+=2;break;case'16float':{const n=x(r[a]);new Uint16Array(e.buffer,t,1)[0]=n,t+=2;break}case'32uint':new Uint32Array(e.buffer,t,1)[0]=r[a],t+=4;break;case'32sint':new Int32Array(e.buffer,t,1)[0]=r[a],t+=4;break;case'32float':new Float32Array(e.buffer,t,1)[0]=r[a],t+=4}return r}const T={r8unorm:{bytesPerBlock:1,blockWidth:1,blockHeight:1,isCompressed:!1,channels:1},r8snorm:{bytesPerBlock:1,blockWidth:1,blockHeight:1,isCompressed:!1,channels:1},r8uint:{bytesPerBlock:1,blockWidth:1,blockHeight:1,isCompressed:!1,channels:1},r8sint:{bytesPerBlock:1,blockWidth:1,blockHeight:1,isCompressed:!1,channels:1},rg8unorm:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:!1,channels:2},rg8snorm:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:!1,channels:2},rg8uint:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:!1,channels:2},rg8sint:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:!1,channels:2},rgba8unorm:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},'rgba8unorm-srgb':{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},rgba8snorm:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},rgba8uint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},rgba8sint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},bgra8unorm:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},'bgra8unorm-srgb':{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},r16uint:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:!1,channels:1},r16sint:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:!1,channels:1},r16float:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:!1,channels:1},rg16uint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:2},rg16sint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:2},rg16float:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:2},rgba16uint:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},rgba16sint:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},rgba16float:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},r32uint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:1},r32sint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:1},r32float:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:1},rg32uint:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:!1,channels:2},rg32sint:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:!1,channels:2},rg32float:{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:!1,channels:2},rgba32uint:{bytesPerBlock:16,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},rgba32sint:{bytesPerBlock:16,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},rgba32float:{bytesPerBlock:16,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},rgb10a2uint:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},rgb10a2unorm:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},rg11b10ufloat:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},stencil8:{bytesPerBlock:1,blockWidth:1,blockHeight:1,isCompressed:!1,isDepthStencil:!0,hasDepth:!1,hasStencil:!0,channels:1},depth16unorm:{bytesPerBlock:2,blockWidth:1,blockHeight:1,isCompressed:!1,isDepthStencil:!0,hasDepth:!0,hasStencil:!1,channels:1},depth24plus:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,isDepthStencil:!0,hasDepth:!0,hasStencil:!1,depthOnlyFormat:'depth32float',channels:1},'depth24plus-stencil8':{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:!1,isDepthStencil:!0,hasDepth:!0,hasStencil:!0,depthOnlyFormat:'depth32float',channels:1},depth32float:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,isDepthStencil:!0,hasDepth:!0,hasStencil:!1,channels:1},'depth32float-stencil8':{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:!1,isDepthStencil:!0,hasDepth:!0,hasStencil:!0,stencilOnlyFormat:'depth32float',channels:1},rgb9e5ufloat:{bytesPerBlock:4,blockWidth:1,blockHeight:1,isCompressed:!1,channels:4},'bc1-rgba-unorm':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'bc1-rgba-unorm-srgb':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'bc2-rgba-unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'bc2-rgba-unorm-srgb':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'bc3-rgba-unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'bc3-rgba-unorm-srgb':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'bc4-r-unorm':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:!0,channels:1},'bc4-r-snorm':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:!0,channels:1},'bc5-rg-unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:2},'bc5-rg-snorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:2},'bc6h-rgb-ufloat':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'bc6h-rgb-float':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'bc7-rgba-unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'bc7-rgba-unorm-srgb':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'etc2-rgb8unorm':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'etc2-rgb8unorm-srgb':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'etc2-rgb8a1unorm':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'etc2-rgb8a1unorm-srgb':{bytesPerBlock:8,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'etc2-rgba8unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'etc2-rgba8unorm-srgb':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'eac-r11unorm':{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:!0,channels:1},'eac-r11snorm':{bytesPerBlock:8,blockWidth:1,blockHeight:1,isCompressed:!0,channels:1},'eac-rg11unorm':{bytesPerBlock:16,blockWidth:1,blockHeight:1,isCompressed:!0,channels:2},'eac-rg11snorm':{bytesPerBlock:16,blockWidth:1,blockHeight:1,isCompressed:!0,channels:2},'astc-4x4-unorm':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'astc-4x4-unorm-srgb':{bytesPerBlock:16,blockWidth:4,blockHeight:4,isCompressed:!0,channels:4},'astc-5x4-unorm':{bytesPerBlock:16,blockWidth:5,blockHeight:4,isCompressed:!0,channels:4},'astc-5x4-unorm-srgb':{bytesPerBlock:16,blockWidth:5,blockHeight:4,isCompressed:!0,channels:4},'astc-5x5-unorm':{bytesPerBlock:16,blockWidth:5,blockHeight:5,isCompressed:!0,channels:4},'astc-5x5-unorm-srgb':{bytesPerBlock:16,blockWidth:5,blockHeight:5,isCompressed:!0,channels:4},'astc-6x5-unorm':{bytesPerBlock:16,blockWidth:6,blockHeight:5,isCompressed:!0,channels:4},'astc-6x5-unorm-srgb':{bytesPerBlock:16,blockWidth:6,blockHeight:5,isCompressed:!0,channels:4},'astc-6x6-unorm':{bytesPerBlock:16,blockWidth:6,blockHeight:6,isCompressed:!0,channels:4},'astc-6x6-unorm-srgb':{bytesPerBlock:16,blockWidth:6,blockHeight:6,isCompressed:!0,channels:4},'astc-8x5-unorm':{bytesPerBlock:16,blockWidth:8,blockHeight:5,isCompressed:!0,channels:4},'astc-8x5-unorm-srgb':{bytesPerBlock:16,blockWidth:8,blockHeight:5,isCompressed:!0,channels:4},'astc-8x6-unorm':{bytesPerBlock:16,blockWidth:8,blockHeight:6,isCompressed:!0,channels:4},'astc-8x6-unorm-srgb':{bytesPerBlock:16,blockWidth:8,blockHeight:6,isCompressed:!0,channels:4},'astc-8x8-unorm':{bytesPerBlock:16,blockWidth:8,blockHeight:8,isCompressed:!0,channels:4},'astc-8x8-unorm-srgb':{bytesPerBlock:16,blockWidth:8,blockHeight:8,isCompressed:!0,channels:4},'astc-10x5-unorm':{bytesPerBlock:16,blockWidth:10,blockHeight:5,isCompressed:!0,channels:4},'astc-10x5-unorm-srgb':{bytesPerBlock:16,blockWidth:10,blockHeight:5,isCompressed:!0,channels:4},'astc-10x6-unorm':{bytesPerBlock:16,blockWidth:10,blockHeight:6,isCompressed:!0,channels:4},'astc-10x6-unorm-srgb':{bytesPerBlock:16,blockWidth:10,blockHeight:6,isCompressed:!0,channels:4},'astc-10x8-unorm':{bytesPerBlock:16,blockWidth:10,blockHeight:8,isCompressed:!0,channels:4},'astc-10x8-unorm-srgb':{bytesPerBlock:16,blockWidth:10,blockHeight:8,isCompressed:!0,channels:4},'astc-10x10-unorm':{bytesPerBlock:16,blockWidth:10,blockHeight:10,isCompressed:!0,channels:4},'astc-10x10-unorm-srgb':{bytesPerBlock:16,blockWidth:10,blockHeight:10,isCompressed:!0,channels:4},'astc-12x10-unorm':{bytesPerBlock:16,blockWidth:12,blockHeight:10,isCompressed:!0,channels:4},'astc-12x10-unorm-srgb':{bytesPerBlock:16,blockWidth:12,blockHeight:10,isCompressed:!0,channels:4},'astc-12x12-unorm':{bytesPerBlock:16,blockWidth:12,blockHeight:12,isCompressed:!0,channels:4},'astc-12x12-unorm-srgb':{bytesPerBlock:16,blockWidth:12,blockHeight:12,isCompressed:!0,channels:4}};class S{constructor(){this.id=S._id++,this.line=0}get isAstNode(){return!0}get astNodeType(){return''}search(e){e(this)}searchBlock(e,t){if(e){t(A.instance);for(const n of e)n instanceof Array?this.searchBlock(n,t):n.search(t);t(E.instance)}}constEvaluate(e,t){throw new Error('Cannot evaluate node')}constEvaluateString(e){return this.constEvaluate(e).toString()}}S._id=0;class A extends S{}A.instance=new A;class E extends S{}E.instance=new E;const $=new Set(['all','all','any','select','arrayLength','abs','acos','acosh','asin','asinh','atan','atanh','atan2','ceil','clamp','cos','cosh','countLeadingZeros','countOneBits','countTrailingZeros','cross','degrees','determinant','distance','dot','dot4U8Packed','dot4I8Packed','exp','exp2','extractBits','faceForward','firstLeadingBit','firstTrailingBit','floor','fma','fract','frexp','insertBits','inverseSqrt','ldexp','length','log','log2','max','min','mix','modf','normalize','pow','quantizeToF16','radians','reflect','refract','reverseBits','round','saturate','sign','sin','sinh','smoothStep','sqrt','step','tan','tanh','transpose','trunc','dpdx','dpdxCoarse','dpdxFine','dpdy','dpdyCoarse','dpdyFine','fwidth','fwidthCoarse','fwidthFine','textureDimensions','textureGather','textureGatherCompare','textureLoad','textureNumLayers','textureNumLevels','textureNumSamples','textureSample','textureSampleBias','textureSampleCompare','textureSampleCompareLevel','textureSampleGrad','textureSampleLevel','textureSampleBaseClampToEdge','textureStore','atomicLoad','atomicStore','atomicAdd','atomicSub','atomicMax','atomicMin','atomicAnd','atomicOr','atomicXor','atomicExchange','atomicCompareExchangeWeak','pack4x8snorm','pack4x8unorm','pack4xI8','pack4xU8','pack4x8Clamp','pack4xU8Clamp','pack2x16snorm','pack2x16unorm','pack2x16float','unpack4x8snorm','unpack4x8unorm','unpack4xI8','unpack4xU8','unpack2x16snorm','unpack2x16unorm','unpack2x16float','storageBarrier','textureBarrier','workgroupBarrier','workgroupUniformLoad','subgroupAdd','subgroupExclusiveAdd','subgroupInclusiveAdd','subgroupAll','subgroupAnd','subgroupAny','subgroupBallot','subgroupBroadcast','subgroupBroadcastFirst','subgroupElect','subgroupMax','subgroupMin','subgroupMul','subgroupExclusiveMul','subgroupInclusiveMul','subgroupOr','subgroupShuffle','subgroupShuffleDown','subgroupShuffleUp','subgroupShuffleXor','subgroupXor','quadBroadcast','quadSwapDiagonal','quadSwapX','quadSwapY']);class L extends S{constructor(){super()}}class C extends L{constructor(e,t,n,s,r,a){super(),this.calls=new Set,this.name=e,this.args=t,this.returnType=n,this.body=s,this.startLine=r,this.endLine=a}get astNodeType(){return'function'}search(e){if(this.attributes)for(const t of this.attributes)e(t);e(this);for(const t of this.args)e(t);this.searchBlock(this.body,e)}}class D extends L{constructor(e){super(),this.expression=e}get astNodeType(){return'staticAssert'}search(e){this.expression.search(e)}}class N extends L{constructor(e,t){super(),this.condition=e,this.body=t}get astNodeType(){return'while'}search(e){this.condition.search(e),this.searchBlock(this.body,e)}}class V extends L{constructor(e,t){super(),this.body=e,this.loopId=t}get astNodeType(){return'continuing'}search(e){this.searchBlock(this.body,e)}}class O extends L{constructor(e,t,n,s){super(),this.init=e,this.condition=t,this.increment=n,this.body=s}get astNodeType(){return'for'}search(e){var t,n,s;null===(t=this.init)||void 0===t||t.search(e),null===(n=this.condition)||void 0===n||n.search(e),null===(s=this.increment)||void 0===s||s.search(e),this.searchBlock(this.body,e)}}class B extends L{constructor(e,t,n,s,r){super(),this.attributes=null,this.name=e,this.type=t,this.storage=n,this.access=s,this.value=r}get astNodeType(){return'var'}search(e){var t;e(this),null===(t=this.value)||void 0===t||t.search(e)}}class F extends L{constructor(e,t,n){super(),this.attributes=null,this.name=e,this.type=t,this.value=n}get astNodeType(){return'override'}search(e){var t;null===(t=this.value)||void 0===t||t.search(e)}}class M extends L{constructor(e,t,n,s,r){super(),this.attributes=null,this.name=e,this.type=t,this.storage=n,this.access=s,this.value=r}get astNodeType(){return'let'}search(e){var t;e(this),null===(t=this.value)||void 0===t||t.search(e)}}class U extends L{constructor(e,t,n,s,r){super(),this.attributes=null,this.name=e,this.type=t,this.storage=n,this.access=s,this.value=r}get astNodeType(){return'const'}constEvaluate(e,t){return this.value.constEvaluate(e,t)}search(e){var t;e(this),null===(t=this.value)||void 0===t||t.search(e)}}var P,W,q,H;(e=>{e.increment='++',e.decrement='--'})(P||(P={})),(e=>{e.parse=function(t){const n=t;if('parse'==n)throw new Error('Invalid value for IncrementOperator');return e[n]}})(P||(P={}));class z extends L{constructor(e,t){super(),this.operator=e,this.variable=t}get astNodeType(){return'increment'}search(e){this.variable.search(e)}}(e=>{e.assign='=',e.addAssign='+=',e.subtractAssin='-=',e.multiplyAssign='*=',e.divideAssign='/=',e.moduloAssign='%=',e.andAssign='&=',e.orAssign='|=',e.xorAssign='^=',e.shiftLeftAssign='<<=',e.shiftRightAssign='>>='})(W||(W={})),(e=>{e.parse=function(e){const t=e;if('parse'==t)throw new Error('Invalid value for AssignOperator');return t}})(W||(W={}));class R extends L{constructor(e,t,n){super(),this.operator=e,this.variable=t,this.value=n}get astNodeType(){return'assign'}search(e){this.variable.search(e),this.value.search(e)}}class G extends L{constructor(e,t){super(),this.name=e,this.args=t}get astNodeType(){return'call'}isBuiltin(){return $.has(this.name)}search(e){for(const t of this.args)t.search(e);e(this)}}class X extends L{constructor(e,t){super(),this.body=e,this.continuing=t}get astNodeType(){return'loop'}}class j extends L{constructor(e,t){super(),this.condition=e,this.cases=t}get astNodeType(){return'switch'}search(e){e(this);for(const t of this.cases)t.search(e)}}class Z extends L{constructor(e,t,n,s){super(),this.condition=e,this.body=t,this.elseif=n,this.else=s}get astNodeType(){return'if'}search(e){this.condition.search(e),this.searchBlock(this.body,e),this.searchBlock(this.elseif,e),this.searchBlock(this.else,e)}}class Q extends L{constructor(e){super(),this.value=e}get astNodeType(){return'return'}search(e){var t;null===(t=this.value)||void 0===t||t.search(e)}}class Y extends L{constructor(e){super(),this.name=e}get astNodeType(){return'enable'}}class K extends L{constructor(e){super(),this.extensions=e}get astNodeType(){return'requires'}}class J extends L{constructor(e,t){super(),this.severity=e,this.rule=t}get astNodeType(){return'diagnostic'}}class ee extends L{constructor(e,t){super(),this.name=e,this.type=t}get astNodeType(){return'alias'}}class te extends L{constructor(){super()}get astNodeType(){return'discard'}}class ne extends L{constructor(){super(),this.condition=null,this.loopId=-1}get astNodeType(){return'break'}}class se extends L{constructor(){super(),this.loopId=-1}get astNodeType(){return'continue'}}class re extends L{constructor(e){super(),this.attributes=null,this.name=e}get astNodeType(){return'type'}get isStruct(){return!1}get isArray(){return!1}static maxFormatType(e){let t=e[0];if('f32'===t.name)return t;for(let n=1;n<e.length;++n){const s=re._priority.get(t.name);re._priority.get(e[n].name)<s&&(t=e[n])}return'x32'===t.name?re.i32:t}getTypeName(){return this.name}}re.x32=new re('x32'),re.f32=new re('f32'),re.i32=new re('i32'),re.u32=new re('u32'),re.f16=new re('f16'),re.bool=new re('bool'),re.void=new re('void'),re._priority=new Map([['f32',0],['f16',1],['u32',2],['i32',3],['x32',3]]);class ae extends re{constructor(e){super(e)}}class ie extends re{constructor(e,t,n,s){super(e),this.members=t,this.startLine=n,this.endLine=s}get astNodeType(){return'struct'}get isStruct(){return!0}getMemberIndex(e){for(let t=0;t<this.members.length;t++)if(this.members[t].name==e)return t;return-1}search(e){for(const t of this.members)e(t)}}class oe extends re{constructor(e,t,n){super(e),this.format=t,this.access=n}get astNodeType(){return'template'}getTypeName(){let e=this.name;if(null!==this.format){if('vec2'===e||'vec3'===e||'vec4'===e||'mat2x2'===e||'mat2x3'===e||'mat2x4'===e||'mat3x2'===e||'mat3x3'===e||'mat3x4'===e||'mat4x2'===e||'mat4x3'===e||'mat4x4'===e){if('f32'===this.format.name)return e+='f',e;if('i32'===this.format.name)return e+='i',e;if('u32'===this.format.name)return e+='u',e;if('bool'===this.format.name)return e+='b',e;if('f16'===this.format.name)return e+='h',e}e+=`<${this.format.name}>`}else if('vec2'===e||'vec3'===e||'vec4'===e)return e;return e}}oe.vec2f=new oe('vec2',re.f32,null),oe.vec3f=new oe('vec3',re.f32,null),oe.vec4f=new oe('vec4',re.f32,null),oe.vec2i=new oe('vec2',re.i32,null),oe.vec3i=new oe('vec3',re.i32,null),oe.vec4i=new oe('vec4',re.i32,null),oe.vec2u=new oe('vec2',re.u32,null),oe.vec3u=new oe('vec3',re.u32,null),oe.vec4u=new oe('vec4',re.u32,null),oe.vec2h=new oe('vec2',re.f16,null),oe.vec3h=new oe('vec3',re.f16,null),oe.vec4h=new oe('vec4',re.f16,null),oe.vec2b=new oe('vec2',re.bool,null),oe.vec3b=new oe('vec3',re.bool,null),oe.vec4b=new oe('vec4',re.bool,null),oe.mat2x2f=new oe('mat2x2',re.f32,null),oe.mat2x3f=new oe('mat2x3',re.f32,null),oe.mat2x4f=new oe('mat2x4',re.f32,null),oe.mat3x2f=new oe('mat3x2',re.f32,null),oe.mat3x3f=new oe('mat3x3',re.f32,null),oe.mat3x4f=new oe('mat3x4',re.f32,null),oe.mat4x2f=new oe('mat4x2',re.f32,null),oe.mat4x3f=new oe('mat4x3',re.f32,null),oe.mat4x4f=new oe('mat4x4',re.f32,null),oe.mat2x2h=new oe('mat2x2',re.f16,null),oe.mat2x3h=new oe('mat2x3',re.f16,null),oe.mat2x4h=new oe('mat2x4',re.f16,null),oe.mat3x2h=new oe('mat3x2',re.f16,null),oe.mat3x3h=new oe('mat3x3',re.f16,null),oe.mat3x4h=new oe('mat3x4',re.f16,null),oe.mat4x2h=new oe('mat4x2',re.f16,null),oe.mat4x3h=new oe('mat4x3',re.f16,null),oe.mat4x4h=new oe('mat4x4',re.f16,null),oe.mat2x2i=new oe('mat2x2',re.i32,null),oe.mat2x3i=new oe('mat2x3',re.i32,null),oe.mat2x4i=new oe('mat2x4',re.i32,null),oe.mat3x2i=new oe('mat3x2',re.i32,null),oe.mat3x3i=new oe('mat3x3',re.i32,null),oe.mat3x4i=new oe('mat3x4',re.i32,null),oe.mat4x2i=new oe('mat4x2',re.i32,null),oe.mat4x3i=new oe('mat4x3',re.i32,null),oe.mat4x4i=new oe('mat4x4',re.i32,null),oe.mat2x2u=new oe('mat2x2',re.u32,null),oe.mat2x3u=new oe('mat2x3',re.u32,null),oe.mat2x4u=new oe('mat2x4',re.u32,null),oe.mat3x2u=new oe('mat3x2',re.u32,null),oe.mat3x3u=new oe('mat3x3',re.u32,null),oe.mat3x4u=new oe('mat3x4',re.u32,null),oe.mat4x2u=new oe('mat4x2',re.u32,null),oe.mat4x3u=new oe('mat4x3',re.u32,null),oe.mat4x4u=new oe('mat4x4',re.u32,null);class le extends re{constructor(e,t,n,s){super(e),this.storage=t,this.type=n,this.access=s}get astNodeType(){return'pointer'}}class ce extends re{constructor(e,t,n,s){super(e),this.attributes=t,this.format=n,this.count=s}get astNodeType(){return'array'}get isArray(){return!0}}class ue extends re{constructor(e,t,n){super(e),this.format=t,this.access=n}get astNodeType(){return'sampler'}}class he extends S{constructor(){super(),this.postfix=null}}class fe extends he{constructor(e){super(),this.value=e}get astNodeType(){return'stringExpr'}toString(){return this.value}constEvaluateString(){return this.value}}class pe extends he{constructor(e,t){super(),this.type=e,this.args=t}get astNodeType(){return'createExpr'}search(e){if(e(this),this.args)for(const t of this.args)t.search(e)}constEvaluate(e,t){return t&&(t[0]=this.type),e.evalExpression(this,e.context)}}class de extends he{constructor(e,t){super(),this.cachedReturnValue=null,this.name=e,this.args=t}get astNodeType(){return'callExpr'}setCachedReturnValue(e){this.cachedReturnValue=e}get isBuiltin(){return $.has(this.name)}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){for(const t of this.args)t.search(e);e(this)}}class me extends he{constructor(e){super(),this.name=e}get astNodeType(){return'varExpr'}search(e){e(this),this.postfix&&this.postfix.search(e)}constEvaluate(e,t){return e.evalExpression(this,e.context)}}class _e extends he{constructor(e,t){super(),this.name=e,this.initializer=t}get astNodeType(){return'constExpr'}constEvaluate(e,t){if(this.initializer){const t=e.evalExpression(this.initializer,e.context);return null!==t&&this.postfix?t.getSubData(e,this.postfix,e.context):t}return null}search(e){this.initializer.search(e)}}class ge extends he{constructor(e,t){super(),this.value=e,this.type=t}get astNodeType(){return'literalExpr'}constEvaluate(e,t){return void 0!==t&&(t[0]=this.type),this.value}get isScalar(){return this.value instanceof Oe}get isVector(){return this.value instanceof Fe||this.value instanceof Me}get scalarValue(){return this.value instanceof Oe?this.value.value:(console.error('Value is not scalar.'),0)}get vectorValue(){return this.value instanceof Fe||this.value instanceof Me?this.value.data:(console.error('Value is not a vector or matrix.'),new Float32Array(0))}}class xe extends he{constructor(e,t){super(),this.type=e,this.value=t}get astNodeType(){return'bitcastExpr'}search(e){this.value.search(e)}}class ye extends he{constructor(e,t){super(),this.type=e,this.args=t}get astNodeType(){return'typecastExpr'}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){this.searchBlock(this.args,e)}}class be extends he{constructor(e){super(),this.index=e}search(e){this.index.search(e)}}class ve extends he{constructor(){super()}}class we extends ve{constructor(e,t){super(),this.operator=e,this.right=t}get astNodeType(){return'unaryOp'}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){this.right.search(e)}}class ke extends ve{constructor(e,t,n){super(),this.operator=e,this.left=t,this.right=n}get astNodeType(){return'binaryOp'}_getPromotedType(e,t){return e.name===t.name?e:'f32'===e.name||'f32'===t.name?re.f32:'u32'===e.name||'u32'===t.name?re.u32:re.i32}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){this.left.search(e),this.right.search(e)}}class Ie extends S{constructor(e){super(),this.body=e}search(e){e(this),this.searchBlock(this.body,e)}}class Te extends he{constructor(){super()}get astNodeType(){return'default'}}class Se extends Ie{constructor(e,t){super(t),this.selectors=e}get astNodeType(){return'case'}search(e){this.searchBlock(this.body,e)}}class Ae extends Ie{constructor(e){super(e)}get astNodeType(){return'default'}search(e){this.searchBlock(this.body,e)}}class Ee extends S{constructor(e,t,n){super(),this.name=e,this.type=t,this.attributes=n}get astNodeType(){return'argument'}}class $e extends S{constructor(e,t){super(),this.condition=e,this.body=t}get astNodeType(){return'elseif'}search(e){this.condition.search(e),this.searchBlock(this.body,e)}}class Le extends S{constructor(e,t,n){super(),this.name=e,this.type=t,this.attributes=n}get astNodeType(){return'member'}}class Ce extends S{constructor(e,t){super(),this.name=e,this.value=t}get astNodeType(){return'attribute'}}class De{constructor(e,t){this.parent=null,this.typeInfo=e,this.parent=t,this.id=De._id++}clone(){throw`Clone: Not implemented for ${this.constructor.name}`}setDataValue(e,t,n,s){console.error(`SetDataValue: Not implemented for ${this.constructor.name}`)}getSubData(e,t,n){return console.error(`GetDataValue: Not implemented for ${this.constructor.name}`),null}toString(){return`<${this.typeInfo.getTypeName()}>`}}De._id=0;class Ne extends De{constructor(){super(new e('void',null),null)}toString(){return'void'}}Ne.void=new Ne;class Ve extends De{constructor(e){super(new r('pointer',e.typeInfo,null),null),this.reference=e}clone(){return this}setDataValue(e,t,n,s){this.reference.setDataValue(e,t,n,s)}getSubData(e,t,n){return t?this.reference.getSubData(e,t,n):this}toString(){return`&${this.reference.toString()}`}}class Oe extends De{constructor(e,t,n=null){super(t,n),e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array?this.data=e:'x32'===this.typeInfo.name?e-Math.floor(e)!=0?this.data=new Float32Array([e]):this.data=e>=0?new Uint32Array([e]):new Int32Array([e]):'i32'===this.typeInfo.name||'bool'===this.typeInfo.name?this.data=new Int32Array([e]):'u32'===this.typeInfo.name?this.data=new Uint32Array([e]):'f32'===this.typeInfo.name||'f16'===this.typeInfo.name?this.data=new Float32Array([e]):console.error('ScalarData2: Invalid type',t)}clone(){if(this.data instanceof Float32Array)return new Oe(new Float32Array(this.data),this.typeInfo,null);if(this.data instanceof Int32Array)return new Oe(new Int32Array(this.data),this.typeInfo,null);if(this.data instanceof Uint32Array)return new Oe(new Uint32Array(this.data),this.typeInfo,null);throw'ScalarData: Invalid data type'}get value(){return this.data[0]}set value(e){this.data[0]=e}setDataValue(e,t,n,s){if(n)return void console.error('SetDataValue: Scalar data does not support postfix',n);if(!(t instanceof Oe))return void console.error('SetDataValue: Invalid value',t);let r=t.data[0];'i32'===this.typeInfo.name||'u32'===this.typeInfo.name?r=Math.floor(r):'bool'===this.typeInfo.name&&(r=r?1:0),this.data[0]=r}getSubData(e,t,n){return t?(console.error('getSubData: Scalar data does not support postfix',t),null):this}toString(){return`${this.value}`}}function Be(e,t,n){const s=t.length;return 2===s?'f32'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec2f')):'i32'===n||'bool'===n?new Fe(new Int32Array(t),e.getTypeInfo('vec2i')):'u32'===n?new Fe(new Uint32Array(t),e.getTypeInfo('vec2u')):'f16'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec2h')):(console.error(`getSubData: Unknown format ${n}`),null):3===s?'f32'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec3f')):'i32'===n||'bool'===n?new Fe(new Int32Array(t),e.getTypeInfo('vec3i')):'u32'===n?new Fe(new Uint32Array(t),e.getTypeInfo('vec3u')):'f16'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec3h')):(console.error(`getSubData: Unknown format ${n}`),null):4===s?'f32'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec4f')):'i32'===n||'bool'===n?new Fe(new Int32Array(t),e.getTypeInfo('vec4i')):'u32'===n?new Fe(new Uint32Array(t),e.getTypeInfo('vec4u')):'f16'===n?new Fe(new Float32Array(t),e.getTypeInfo('vec4h')):(console.error(`getSubData: Unknown format ${n}`),null):(console.error(`getSubData: Invalid vector size ${t.length}`),null)}class Fe extends De{constructor(e,t,n=null){if(super(t,n),e instanceof Float32Array||e instanceof Uint32Array||e instanceof Int32Array)this.data=e;else{const t=this.typeInfo.name;'vec2f'===t||'vec3f'===t||'vec4f'===t?this.data=new Float32Array(e):'vec2i'===t||'vec3i'===t||'vec4i'===t?this.data=new Int32Array(e):'vec2u'===t||'vec3u'===t||'vec4u'===t?this.data=new Uint32Array(e):'vec2h'===t||'vec3h'===t||'vec4h'===t?this.data=new Float32Array(e):'vec2b'===t||'vec3b'===t||'vec4b'===t?this.data=new Int32Array(e):'vec2'===t||'vec3'===t||'vec4'===t?this.data=new Float32Array(e):console.error(`VectorData: Invalid type ${t}`)}}clone(){if(this.data instanceof Float32Array)return new Fe(new Float32Array(this.data),this.typeInfo,null);if(this.data instanceof Int32Array)return new Fe(new Int32Array(this.data),this.typeInfo,null);if(this.data instanceof Uint32Array)return new Fe(new Uint32Array(this.data),this.typeInfo,null);throw'VectorData: Invalid data type'}setDataValue(e,t,n,s){n instanceof fe?console.error('TODO: Set vector postfix'):t instanceof Fe?this.data=t.data:console.error('SetDataValue: Invalid value',t)}getSubData(e,t,n){if(null===t)return this;let s=e.getTypeInfo('f32');if(this.typeInfo instanceof a)s=this.typeInfo.format||s;else{const t=this.typeInfo.name;'vec2f'===t||'vec3f'===t||'vec4f'===t?s=e.getTypeInfo('f32'):'vec2i'===t||'vec3i'===t||'vec4i'===t?s=e.getTypeInfo('i32'):'vec2b'===t||'vec3b'===t||'vec4b'===t?s=e.getTypeInfo('bool'):'vec2u'===t||'vec3u'===t||'vec4u'===t?s=e.getTypeInfo('u32'):'vec2h'===t||'vec3h'===t||'vec4h'===t?s=e.getTypeInfo('f16'):console.error(`GetSubData: Unknown type ${t}`)}let r=this;for(;null!==t&&null!==r;){if(t instanceof be){const a=t.index;let i=-1;if(a instanceof ge){if(!(a.value instanceof Oe))return console.error(`GetSubData: Invalid array index ${a.value}`),null;i=a.value.value}else{const t=e.evalExpression(a,n);if(!(t instanceof Oe))return console.error('GetSubData: Unknown index type',a),null;i=t.value}if(i<0||i>=r.data.length)return console.error('GetSubData: Index out of range',i),null;if(r.data instanceof Float32Array){const e=new Float32Array(r.data.buffer,r.data.byteOffset+4*i,1);return new Oe(e,s)}if(r.data instanceof Int32Array){const e=new Int32Array(r.data.buffer,r.data.byteOffset+4*i,1);return new Oe(e,s)}if(r.data instanceof Uint32Array){const e=new Uint32Array(r.data.buffer,r.data.byteOffset+4*i,1);return new Oe(e,s)}throw'GetSubData: Invalid data type'}if(!(t instanceof fe))return console.error('GetSubData: Unknown postfix',t),null;{const n=t.value.toLowerCase();if(1===n.length){let e=0;if('x'===n||'r'===n)e=0;else if('y'===n||'g'===n)e=1;else if('z'===n||'b'===n)e=2;else{if('w'!==n&&'a'!==n)return console.error(`GetSubData: Unknown member ${n}`),null;e=3}if(this.data instanceof Float32Array){let t=new Float32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new Oe(t,s,this)}if(this.data instanceof Int32Array){let t=new Int32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new Oe(t,s,this)}if(this.data instanceof Uint32Array){let t=new Uint32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new Oe(t,s,this)}}const a=[];for(const e of n)'x'===e||'r'===e?a.push(this.data[0]):'y'===e||'g'===e?a.push(this.data[1]):'z'===e||'b'===e?a.push(this.data[2]):'w'===e||'a'===e?a.push(this.data[3]):console.error(`GetDataValue: Unknown member ${e}`);r=Be(e,a,s.name)}t=t.postfix}return r}toString(){let e=`${this.data[0]}`;for(let t=1;t<this.data.length;++t)e+=`, ${this.data[t]}`;return e}}class Me extends De{constructor(e,t,n=null){super(t,n),e instanceof Float32Array?this.data=e:this.data=new Float32Array(e)}clone(){return new Me(new Float32Array(this.data),this.typeInfo,null)}setDataValue(e,t,n,s){n instanceof fe?console.error('TODO: Set matrix postfix'):t instanceof Me?this.data=t.data:console.error('SetDataValue: Invalid value',t)}getSubData(e,t,n){if(null===t)return this;const s=this.typeInfo.name;if(e.getTypeInfo('f32'),this.typeInfo instanceof a)this.typeInfo.format;else if(s.endsWith('f'))e.getTypeInfo('f32');else if(s.endsWith('i'))e.getTypeInfo('i32');else if(s.endsWith('u'))e.getTypeInfo('u32');else{if(!s.endsWith('h'))return console.error(`GetDataValue: Unknown type ${s}`),null;e.getTypeInfo('f16')}if(t instanceof be){const r=t.index;let a=-1;if(r instanceof ge){if(!(r.value instanceof Oe))return console.error(`GetDataValue: Invalid array index ${r.value}`),null;a=r.value.value}else{const t=e.evalExpression(r,n);if(!(t instanceof Oe))return console.error('GetDataValue: Unknown index type',r),null;a=t.value}if(a<0||a>=this.data.length)return console.error('GetDataValue: Index out of range',a),null;const i=s.endsWith('h')?'h':'f';let o;if('mat2x2'===s||'mat2x2f'===s||'mat2x2h'===s||'mat3x2'===s||'mat3x2f'===s||'mat3x2h'===s||'mat4x2'===s||'mat4x2f'===s||'mat4x2h'===s)o=new Fe(new Float32Array(this.data.buffer,this.data.byteOffset+2*a*4,2),e.getTypeInfo(`vec2${i}`));else if('mat2x3'===s||'mat2x3f'===s||'mat2x3h'===s||'mat3x3'===s||'mat3x3f'===s||'mat3x3h'===s||'mat4x3'===s||'mat4x3f'===s||'mat4x3h'===s)o=new Fe(new Float32Array(this.data.buffer,this.data.byteOffset+3*a*4,3),e.getTypeInfo(`vec3${i}`));else{if('mat2x4'!==s&&'mat2x4f'!==s&&'mat2x4h'!==s&&'mat3x4'!==s&&'mat3x4f'!==s&&'mat3x4h'!==s&&'mat4x4'!==s&&'mat4x4f'!==s&&'mat4x4h'!==s)return console.error(`GetDataValue: Unknown type ${s}`),null;o=new Fe(new Float32Array(this.data.buffer,this.data.byteOffset+4*a*4,4),e.getTypeInfo(`vec4${i}`))}return t.postfix?o.getSubData(e,t.postfix,n):o}return console.error('GetDataValue: Invalid postfix',t),null}toString(){let e=`${this.data[0]}`;for(let t=1;t<this.data.length;++t)e+=`, ${this.data[t]}`;return e}}class Ue extends De{constructor(e,t,n=0,s=null){super(t,s),this.buffer=e instanceof ArrayBuffer?e:e.buffer,this.offset=n}clone(){const e=new Uint8Array(new Uint8Array(this.buffer,this.offset,this.typeInfo.size));return new Ue(e.buffer,this.typeInfo,0,null)}setDataValue(t,r,a,i){if(null===r)return void console.log('setDataValue: NULL data.');let o=this.offset,l=this.typeInfo;for(;a;){if(a instanceof be)if(l instanceof s){const e=a.index;if(e instanceof ge){if(!(e.value instanceof Oe))return void console.error(`SetDataValue: Invalid index type ${e.value}`);o+=e.value.value*l.stride}else{const n=t.evalExpression(e,i);if(!(n instanceof Oe))return void console.error('SetDataValue: Unknown index type',e);o+=n.value*l.stride}l=l.format}else console.error(`SetDataValue: Type ${l.getTypeName()} is not an array`);else{if(!(a instanceof fe))return void console.error('SetDataValue: Unknown postfix type',a);{const t=a.value;if(l instanceof n){let e=!1;for(const n of l.members)if(n.name===t){o+=n.offset,l=n.type,e=!0;break}if(!e)return void console.error(`SetDataValue: Member ${t} not found`)}else if(l instanceof e){const e=l.getTypeName();let n=0;if('x'===t||'r'===t)n=0;else if('y'===t||'g'===t)n=1;else if('z'===t||'b'===t)n=2;else{if('w'!==t&&'a'!==t)return void console.error(`SetDataValue: Unknown member ${t}`);n=3}if(!(r instanceof Oe))return void console.error('SetDataValue: Invalid value',r);const s=r.value;return'vec2f'===e?void(new Float32Array(this.buffer,o,2)[n]=s):'vec3f'===e?void(new Float32Array(this.buffer,o,3)[n]=s):'vec4f'===e?void(new Float32Array(this.buffer,o,4)[n]=s):'vec2i'===e?void(new Int32Array(this.buffer,o,2)[n]=s):'vec3i'===e?void(new Int32Array(this.buffer,o,3)[n]=s):'vec4i'===e?void(new Int32Array(this.buffer,o,4)[n]=s):'vec2u'===e?void(new Uint32Array(this.buffer,o,2)[n]=s):'vec3u'===e?void(new Uint32Array(this.buffer,o,3)[n]=s):'vec4u'===e?void(new Uint32Array(this.buffer,o,4)[n]=s):void console.error(`SetDataValue: Type ${e} is not a struct`)}}}a=a.postfix}this.setData(t,r,l,o,i)}setData(e,t,n,s,r){const a=n.getTypeName();if('f32'!==a&&'f16'!==a)if('i32'!==a&&'atomic<i32>'!==a&&'x32'!==a)if('u32'!==a&&'atomic<u32>'!==a)if('bool'!==a)if('vec2f'!==a&&'vec2h'!==a)if('vec3f'!==a&&'vec3h'!==a)if('vec4f'!==a&&'vec4h'!==a)if('vec2i'!==a)if('vec3i'!==a)if('vec4i'!==a)if('vec2u'!==a)if('vec3u'!==a)if('vec4u'!==a)if('vec2b'!==a)if('vec3b'!==a)if('vec4b'!==a)if('mat2x2f'!==a&&'mat2x2h'!==a)if('mat2x3f'!==a&&'mat2x3h'!==a)if('mat2x4f'!==a&&'mat2x4h'!==a)if('mat3x2f'!==a&&'mat3x2h'!==a)if('mat3x3f'!==a&&'mat3x3h'!==a)if('mat3x4f'!==a&&'mat3x4h'!==a)if('mat4x2f'!==a&&'mat4x2h'!==a)if('mat4x3f'!==a&&'mat4x3h'!==a)if('mat4x4f'!==a&&'mat4x4h'!==a)if(t instanceof Ue){if(n===t.typeInfo){return void new Uint8Array(this.buffer,s,t.buffer.byteLength).set(new Uint8Array(t.buffer))}console.error('SetDataValue: Type mismatch',a,t.typeInfo.getTypeName())}else console.error(`SetData: Unknown type ${a}`);else{const e=new Float32Array(this.buffer,s,16);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11],e[12]=t.data[12],e[13]=t.data[13],e[14]=t.data[14],e[15]=t.data[15]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15])}else{const e=new Float32Array(this.buffer,s,12);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11])}else{const e=new Float32Array(this.buffer,s,8);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7])}else{const e=new Float32Array(this.buffer,s,12);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11])}else{const e=new Float32Array(this.buffer,s,9);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8])}else{const e=new Float32Array(this.buffer,s,6);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5])}else{const e=new Float32Array(this.buffer,s,8);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7])}else{const e=new Float32Array(this.buffer,s,6);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5])}else{const e=new Float32Array(this.buffer,s,4);t instanceof Me?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3])}else{const e=new Uint32Array(this.buffer,s,4);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3])}else{const e=new Uint32Array(this.buffer,s,3);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2])}else{const e=new Uint32Array(this.buffer,s,2);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1])}else{const e=new Uint32Array(this.buffer,s,4);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3])}else{const e=new Uint32Array(this.buffer,s,3);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2])}else{const e=new Uint32Array(this.buffer,s,2);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1])}else{const e=new Int32Array(this.buffer,s,4);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3])}else{const e=new Int32Array(this.buffer,s,3);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2])}else{const e=new Int32Array(this.buffer,s,2);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1])}else{const e=new Float32Array(this.buffer,s,4);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3])}else{const e=new Float32Array(this.buffer,s,3);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2])}else{const e=new Float32Array(this.buffer,s,2);t instanceof Fe?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1])}else t instanceof Oe&&(new Int32Array(this.buffer,s,1)[0]=t.value);else t instanceof Oe&&(new Uint32Array(this.buffer,s,1)[0]=t.value);else t instanceof Oe&&(new Int32Array(this.buffer,s,1)[0]=t.value);else t instanceof Oe&&(new Float32Array(this.buffer,s,1)[0]=t.value)}getSubData(t,r,i){var o,l,c;if(null===r)return this;let u=this.offset,h=this.typeInfo;for(;r;){if(r instanceof be){const e=r.index,n=e instanceof he?t.evalExpression(e,i):e;let a=0;if(n instanceof Oe?a=n.value:'number'==typeof n?a=n:console.error('GetDataValue: Invalid index type',e),h instanceof s)u+=a*h.stride,h=h.format;else{const e=h.getTypeName();'mat4x4'===e||'mat4x4f'===e||'mat4x4h'===e?(u+=16*a,h=t.getTypeInfo('vec4f')):console.error(`getDataValue: Type ${h.getTypeName()} is not an array`)}}else{if(!(r instanceof fe))return console.error('GetDataValue: Unknown postfix type',r),null;{const s=r.value;if(h instanceof n){let e=!1;for(const t of h.members)if(t.name===s){u+=t.offset,h=t.type,e=!0;break}if(!e)return console.error(`GetDataValue: Member ${s} not found`),null}else if(h instanceof e){const e=h.getTypeName();if('vec2f'===e||'vec3f'===e||'vec4f'===e||'vec2i'===e||'vec3i'===e||'vec4i'===e||'vec2u'===e||'vec3u'===e||'vec4u'===e||'vec2b'===e||'vec3b'===e||'vec4b'===e||'vec2h'===e||'vec3h'===e||'vec4h'===e||'vec2'===e||'vec3'===e||'vec4'===e){if(s.length>0&&s.length<5){let n='f';const r=[];for(let a=0;a<s.length;++a){const i=s[a].toLowerCase();let o=0;if('x'===i||'r'===i)o=0;else if('y'===i||'g'===i)o=1;else if('z'===i||'b'===i)o=2;else{if('w'!==i&&'a'!==i)return console.error(`Unknown member ${s}`),null;o=3}if(1===s.length){if(e.endsWith('f'))return this.buffer.byteLength<u+4*o+4?(console.log('Insufficient buffer data'),null):new Oe(new Float32Array(this.buffer,u+4*o,1),t.getTypeInfo('f32'),this);if(e.endsWith('h'))return new Oe(new Float32Array(this.buffer,u+4*o,1),t.getTypeInfo('f16'),this);if(e.endsWith('i'))return new Oe(new Int32Array(this.buffer,u+4*o,1),t.getTypeInfo('i32'),this);if(e.endsWith('b'))return new Oe(new Int32Array(this.buffer,u+4*o,1),t.getTypeInfo('bool'),this);if(e.endsWith('u'))return new Oe(new Uint32Array(this.buffer,u+4*o,1),t.getTypeInfo('i32'),this)}if('vec2f'===e)r.push(new Float32Array(this.buffer,u,2)[o]);else if('vec3f'===e){if(u+12>=this.buffer.byteLength)return console.log('Insufficient buffer data'),null;const e=new Float32Array(this.buffer,u,3);r.push(e[o])}else if('vec4f'===e)r.push(new Float32Array(this.buffer,u,4)[o]);else if('vec2i'===e)n='i',r.push(new Int32Array(this.buffer,u,2)[o]);else if('vec3i'===e)n='i',r.push(new Int32Array(this.buffer,u,3)[o]);else if('vec4i'===e)n='i',r.push(new Int32Array(this.buffer,u,4)[o]);else if('vec2u'===e){n='u';const e=new Uint32Array(this.buffer,u,2);r.push(e[o])}else'vec3u'===e?(n='u',r.push(new Uint32Array(this.buffer,u,3)[o])):'vec4u'===e&&(n='u',r.push(new Uint32Array(this.buffer,u,4)[o]))}return 2===r.length?h=t.getTypeInfo(`vec2${n}`):3===r.length?h=t.getTypeInfo(`vec3${n}`):4===r.length?h=t.getTypeInfo(`vec4${n}`):console.error(`GetDataValue: Invalid vector length ${r.length}`),new Fe(r,h,null)}return console.error(`GetDataValue: Unknown member ${s}`),null}return console.error(`GetDataValue: Type ${e} is not a struct`),null}}}r=r.postfix}const f=h.getTypeName();return'f32'===f?new Oe(new Float32Array(this.buffer,u,1),h,this):'i32'===f?new Oe(new Int32Array(this.buffer,u,1),h,this):'u32'===f?new Oe(new Uint32Array(this.buffer,u,1),h,this):'vec2f'===f?new Fe(new Float32Array(this.buffer,u,2),h,this):'vec3f'===f?new Fe(new Float32Array(this.buffer,u,3),h,this):'vec4f'===f?new Fe(new Float32Array(this.buffer,u,4),h,this):'vec2i'===f?new Fe(new Int32Array(this.buffer,u,2),h,this):'vec3i'===f?new Fe(new Int32Array(this.buffer,u,3),h,this):'vec4i'===f?new Fe(new Int32Array(this.buffer,u,4),h,this):'vec2u'===f?new Fe(new Uint32Array(this.buffer,u,2),h,this):'vec3u'===f?new Fe(new Uint32Array(this.buffer,u,3),h,this):'vec4u'===f?new Fe(new Uint32Array(this.buffer,u,4),h,this):h instanceof a&&'atomic'===h.name?'u32'===(null===(o=h.format)||void 0===o?void 0:o.name)?new Oe(new Uint32Array(this.buffer,u,1)[0],h.format,this):'i32'===(null===(l=h.format)||void 0===l?void 0:l.name)?new Oe(new Int32Array(this.buffer,u,1)[0],h.format,this):(console.error(`GetDataValue: Invalid atomic format ${null===(c=h.format)||void 0===c?void 0:c.name}`),null):new Ue(this.buffer,h,u,this)}toString(){let e='';if(this.typeInfo instanceof s)if('f32'===this.typeInfo.format.name){const t=new Float32Array(this.buffer,this.offset);e=`[${t[0]}`;for(let n=1;n<t.length;++n)e+=`, ${t[n]}`}else if('i32'===this.typeInfo.format.name){const t=new Int32Array(this.buffer,this.offset);e=`[${t[0]}`;for(let n=1;n<t.length;++n)e+=`, ${t[n]}`}else if('u32'===this.typeInfo.format.name){const t=new Uint32Array(this.buffer,this.offset);e=`[${t[0]}`;for(let n=1;n<t.length;++n)e+=`, ${t[n]}`}else if('vec2f'===this.typeInfo.format.name){const t=new Float32Array(this.buffer,this.offset);e=`[${t[0]}, ${t[1]}]`;for(let n=1;n<t.length/2;++n)e+=`, [${t[2*n]}, ${t[2*n+1]}]`}else if('vec3f'===this.typeInfo.format.name){const t=new Float32Array(this.buffer,this.offset);e=`[${t[0]}, ${t[1]}, ${t[2]}]`;for(let n=4;n<t.length;n+=4)e+=`, [${t[n]}, ${t[n+1]}, ${t[n+2]}]`}else if('vec4f'===this.typeInfo.format.name){const t=new Float32Array(this.buffer,this.offset);e=`[${t[0]}, ${t[1]}, ${t[2]}, ${t[3]}]`;for(let n=4;n<t.length;n+=4)e+=`, [${t[n]}, ${t[n+1]}, ${t[n+2]}, ${t[n+3]}]`}else e='[...]';else this.typeInfo instanceof n?e+='{...}':e='[...]';return e}}class Pe extends De{constructor(e,t,n,s){super(t,null),this.data=e,this.descriptor=n,this.view=s}clone(){return new Pe(this.data,this.typeInfo,this.descriptor,this.view)}get width(){var e,t;const n=this.descriptor.size;return n instanceof Array&&n.length>0?null!==(e=n[0])&&void 0!==e?e:0:n instanceof Object&&null!==(t=n.width)&&void 0!==t?t:0}get height(){var e,t;const n=this.descriptor.size;return n instanceof Array&&n.length>1?null!==(e=n[1])&&void 0!==e?e:0:n instanceof Object&&null!==(t=n.height)&&void 0!==t?t:0}get depthOrArrayLayers(){var e,t;const n=this.descriptor.size;return n instanceof Array&&n.length>2?null!==(e=n[2])&&void 0!==e?e:0:n instanceof Object&&null!==(t=n.depthOrArrayLayers)&&void 0!==t?t:0}get format(){var e;return this.descriptor&&null!==(e=this.descriptor.format)&&void 0!==e?e:'rgba8unorm'}get sampleCount(){var e;return this.descriptor&&null!==(e=this.descriptor.sampleCount)&&void 0!==e?e:1}get mipLevelCount(){var e;return this.descriptor&&null!==(e=this.descriptor.mipLevelCount)&&void 0!==e?e:1}get dimension(){var e;return this.descriptor&&null!==(e=this.descriptor.dimension)&&void 0!==e?e:'2d'}getMipLevelSize(e){if(e>=this.mipLevelCount)return[0,0,0];const t=[this.width,this.height,this.depthOrArrayLayers];for(let n=0;n<t.length;++n)t[n]=Math.max(1,t[n]>>e);return t}get texelByteSize(){const e=this.format,t=T[e];return t?t.isDepthStencil?4:t.bytesPerBlock:0}get bytesPerRow(){return this.width*this.texelByteSize}get isDepthStencil(){const e=this.format,t=T[e];return!!t&&t.isDepthStencil}getGpuSize(){const e=this.format,t=T[e],n=this.width;if(!e||n<=0||!t)return-1;const s=this.height,r=this.depthOrArrayLayers,a=this.dimension;return n/t.blockWidth*('1d'===a?1:s/t.blockHeight)*t.bytesPerBlock*r}getPixel(e,t,n=0,s=0){const r=this.texelByteSize,a=this.bytesPerRow,i=this.height,o=this.data[s];return w(new Uint8Array(o),e,t,n,s,i,a,r,this.format)}setPixel(e,t,n,s,r){const a=this.texelByteSize,i=this.bytesPerRow,o=this.height,l=this.data[s];!function(e,t,n,s,r,a,i,o,l,c){const u=s*(i>>=r)*(a>>=r)+n*i+t*o;switch(l){case'r8unorm':return void I(e,u,'8unorm',1,c);case'r8snorm':return void I(e,u,'8snorm',1,c);case'r8uint':return void I(e,u,'8uint',1,c);case'r8sint':return void I(e,u,'8sint',1,c);case'rg8unorm':return void I(e,u,'8unorm',2,c);case'rg8snorm':return void I(e,u,'8snorm',2,c);case'rg8uint':return void I(e,u,'8uint',2,c);case'rg8sint':return void I(e,u,'8sint',2,c);case'rgba8unorm-srgb':case'rgba8unorm':case'bgra8unorm-srgb':case'bgra8unorm':return void I(e,u,'8unorm',4,c);case'rgba8snorm':return void I(e,u,'8snorm',4,c);case'rgba8uint':return void I(e,u,'8uint',4,c);case'rgba8sint':return void I(e,u,'8sint',4,c);case'r16uint':return void I(e,u,'16uint',1,c);case'r16sint':return void I(e,u,'16sint',1,c);case'r16float':return void I(e,u,'16float',1,c);case'rg16uint':return void I(e,u,'16uint',2,c);case'rg16sint':return void I(e,u,'16sint',2,c);case'rg16float':return void I(e,u,'16float',2,c);case'rgba16uint':return void I(e,u,'16uint',4,c);case'rgba16sint':return void I(e,u,'16sint',4,c);case'rgba16float':return void I(e,u,'16float',4,c);case'r32uint':return void I(e,u,'32uint',1,c);case'r32sint':return void I(e,u,'32sint',1,c);case'depth16unorm':case'depth24plus':case'depth24plus-stencil8':case'depth32float':case'depth32float-stencil8':case'r32float':return void I(e,u,'32float',1,c);case'rg32uint':return void I(e,u,'32uint',2,c);case'rg32sint':return void I(e,u,'32sint',2,c);case'rg32float':return void I(e,u,'32float',2,c);case'rgba32uint':return void I(e,u,'32uint',4,c);case'rgba32sint':return void I(e,u,'32sint',4,c);case'rgba32float':return void I(e,u,'32float',4,c);case'rg11b10ufloat':console.error('TODO: rg11b10ufloat not supported for writing')}}(new Uint8Array(l),e,t,n,s,o,i,a,this.format,r)}}(e=>{e[e.token=0]='token',e[e.keyword=1]='keyword',e[e.reserved=2]='reserved'})(H||(H={}));class We{constructor(e,t,n){this.name=e,this.type=t,this.rule=n}toString(){return this.name}}class qe{}q=qe,qe.none=new We('',H.reserved,''),qe.eof=new We('EOF',H.token,''),qe.reserved={asm:new We('asm',H.reserved,'asm'),bf16:new We('bf16',H.reserved,'bf16'),do:new We('do',H.reserved,'do'),enum:new We('enum',H.reserved,'enum'),f16:new We('f16',H.reserved,'f16'),f64:new We('f64',H.reserved,'f64'),handle:new We('handle',H.reserved,'handle'),i8:new We('i8',H.reserved,'i8'),i16:new We('i16',H.reserved,'i16'),i64:new We('i64',H.reserved,'i64'),mat:new We('mat',H.reserved,'mat'),premerge:new We('premerge',H.reserved,'premerge'),regardless:new We('regardless',H.reserved,'regardless'),typedef:new We('typedef',H.reserved,'typedef'),u8:new We('u8',H.reserved,'u8'),u16:new We('u16',H.reserved,'u16'),u64:new We('u64',H.reserved,'u64'),unless:new We('unless',H.reserved,'unless'),using:new We('using',H.reserved,'using'),vec:new We('vec',H.reserved,'vec'),void:new We('void',H.reserved,'void')},qe.keywords={array:new We('array',H.keyword,'array'),atomic:new We('atomic',H.keyword,'atomic'),bool:new We('bool',H.keyword,'bool'),f32:new We('f32',H.keyword,'f32'),i32:new We('i32',H.keyword,'i32'),mat2x2:new We('mat2x2',H.keyword,'mat2x2'),mat2x3:new We('mat2x3',H.keyword,'mat2x3'),mat2x4:new We('mat2x4',H.keyword,'mat2x4'),mat3x2:new We('mat3x2',H.keyword,'mat3x2'),mat3x3:new We('mat3x3',H.keyword,'mat3x3'),mat3x4:new We('mat3x4',H.keyword,'mat3x4'),mat4x2:new We('mat4x2',H.keyword,'mat4x2'),mat4x3:new We('mat4x3',H.keyword,'mat4x3'),mat4x4:new We('mat4x4',H.keyword,'mat4x4'),ptr:new We('ptr',H.keyword,'ptr'),sampler:new We('sampler',H.keyword,'sampler'),sampler_comparison:new We('sampler_comparison',H.keyword,'sampler_comparison'),struct:new We('struct',H.keyword,'struct'),texture_1d:new We('texture_1d',H.keyword,'texture_1d'),texture_2d:new We('texture_2d',H.keyword,'texture_2d'),texture_2d_array:new We('texture_2d_array',H.keyword,'texture_2d_array'),texture_3d:new We('texture_3d',H.keyword,'texture_3d'),texture_cube:new We('texture_cube',H.keyword,'texture_cube'),texture_cube_array:new We('texture_cube_array',H.keyword,'texture_cube_array'),texture_multisampled_2d:new We('texture_multisampled_2d',H.keyword,'texture_multisampled_2d'),texture_storage_1d:new We('texture_storage_1d',H.keyword,'texture_storage_1d'),texture_storage_2d:new We('texture_storage_2d',H.keyword,'texture_storage_2d'),texture_storage_2d_array:new We('texture_storage_2d_array',H.keyword,'texture_storage_2d_array'),texture_storage_3d:new We('texture_storage_3d',H.keyword,'texture_storage_3d'),texture_depth_2d:new We('texture_depth_2d',H.keyword,'texture_depth_2d'),texture_depth_2d_array:new We('texture_depth_2d_array',H.keyword,'texture_depth_2d_array'),texture_depth_cube:new We('texture_depth_cube',H.keyword,'texture_depth_cube'),texture_depth_cube_array:new We('texture_depth_cube_array',H.keyword,'texture_depth_cube_array'),texture_depth_multisampled_2d:new We('texture_depth_multisampled_2d',H.keyword,'texture_depth_multisampled_2d'),texture_external:new We('texture_external',H.keyword,'texture_external'),u32:new We('u32',H.keyword,'u32'),vec2:new We('vec2',H.keyword,'vec2'),vec3:new We('vec3',H.keyword,'vec3'),vec4:new We('vec4',H.keyword,'vec4'),bitcast:new We('bitcast',H.keyword,'bitcast'),block:new We('block',H.keyword,'block'),break:new We('break',H.keyword,'break'),case:new We('case',H.keyword,'case'),continue:new We('continue',H.keyword,'continue'),continuing:new We('continuing',H.keyword,'continuing'),default:new We('default',H.keyword,'default'),diagnostic:new We('diagnostic',H.keyword,'diagnostic'),discard:new We('discard',H.keyword,'discard'),else:new We('else',H.keyword,'else'),enable:new We('enable',H.keyword,'enable'),fallthrough:new We('fallthrough',H.keyword,'fallthrough'),false:new We('false',H.keyword,'false'),fn:new We('fn',H.keyword,'fn'),for:new We('for',H.keyword,'for'),function:new We('function',H.keyword,'function'),if:new We('if',H.keyword,'if'),let:new We('let',H.keyword,'let'),const:new We('const',H.keyword,'const'),loop:new We('loop',H.keyword,'loop'),while:new We('while',H.keyword,'while'),private:new We('private',H.keyword,'private'),read:new We('read',H.keyword,'read'),read_write:new We('read_write',H.keyword,'read_write'),return:new We('return',H.keyword,'return'),requires:new We('requires',H.keyword,'requires'),storage:new We('storage',H.keyword,'storage'),switch:new We('switch',H.keyword,'switch'),true:new We('true',H.keyword,'true'),alias:new We('alias',H.keyword,'alias'),type:new We('type',H.keyword,'type'),uniform:new We('uniform',H.keyword,'uniform'),var:new We('var',H.keyword,'var'),override:new We('override',H.keyword,'override'),workgroup:new We('workgroup',H.keyword,'workgroup'),write:new We('write',H.keyword,'write'),r8unorm:new We('r8unorm',H.keyword,'r8unorm'),r8snorm:new We('r8snorm',H.keyword,'r8snorm'),r8uint:new We('r8uint',H.keyword,'r8uint'),r8sint:new We('r8sint',H.keyword,'r8sint'),r16uint:new We('r16uint',H.keyword,'r16uint'),r16sint:new We('r16sint',H.keyword,'r16sint'),r16float:new We('r16float',H.keyword,'r16float'),rg8unorm:new We('rg8unorm',H.keyword,'rg8unorm'),rg8snorm:new We('rg8snorm',H.keyword,'rg8snorm'),rg8uint:new We('rg8uint',H.keyword,'rg8uint'),rg8sint:new We('rg8sint',H.keyword,'rg8sint'),r32uint:new We('r32uint',H.keyword,'r32uint'),r32sint:new We('r32sint',H.keyword,'r32sint'),r32float:new We('r32float',H.keyword,'r32float'),rg16uint:new We('rg16uint',H.keyword,'rg16uint'),rg16sint:new We('rg16sint',H.keyword,'rg16sint'),rg16float:new We('rg16float',H.keyword,'rg16float'),rgba8unorm:new We('rgba8unorm',H.keyword,'rgba8unorm'),rgba8unorm_srgb:new We('rgba8unorm_srgb',H.keyword,'rgba8unorm_srgb'),rgba8snorm:new We('rgba8snorm',H.keyword,'rgba8snorm'),rgba8uint:new We('rgba8uint',H.keyword,'rgba8uint'),rgba8sint:new We('rgba8sint',H.keyword,'rgba8sint'),bgra8unorm:new We('bgra8unorm',H.keyword,'bgra8unorm'),bgra8unorm_srgb:new We('bgra8unorm_srgb',H.keyword,'bgra8unorm_srgb'),rgb10a2unorm:new We('rgb10a2unorm',H.keyword,'rgb10a2unorm'),rg11b10float:new We('rg11b10float',H.keyword,'rg11b10float'),rg32uint:new We('rg32uint',H.keyword,'rg32uint'),rg32sint:new We('rg32sint',H.keyword,'rg32sint'),rg32float:new We('rg32float',H.keyword,'rg32float'),rgba16uint:new We('rgba16uint',H.keyword,'rgba16uint'),rgba16sint:new We('rgba16sint',H.keyword,'rgba16sint'),rgba16float:new We('rgba16float',H.keyword,'rgba16float'),rgba32uint:new We('rgba32uint',H.keyword,'rgba32uint'),rgba32sint:new We('rgba32sint',H.keyword,'rgba32sint'),rgba32float:new We('rgba32float',H.keyword,'rgba32float'),static_assert:new We('static_assert',H.keyword,'static_assert')},qe.tokens={decimal_float_literal:new We('decimal_float_literal',H.token,/((-?[0-9]*\\.[0-9]+|-?[0-9]+\\.[0-9]*)((e|E)(\\+|-)?[0-9]+)?[fh]?)|(-?[0-9]+(e|E)(\\+|-)?[0-9]+[fh]?)|(-?[0-9]+[fh])/),hex_float_literal:new We('hex_float_literal',H.token,/-?0x((([0-9a-fA-F]*\\.[0-9a-fA-F]+|[0-9a-fA-F]+\\.[0-9a-fA-F]*)((p|P)(\\+|-)?[0-9]+[fh]?)?)|([0-9a-fA-F]+(p|P)(\\+|-)?[0-9]+[fh]?))/),int_literal:new We('int_literal',H.token,/-?0x[0-9a-fA-F]+|0i?|-?[1-9][0-9]*i?/),uint_literal:new We('uint_literal',H.token,/0x[0-9a-fA-F]+u|0u|[1-9][0-9]*u/),name:new We('name',H.token,/([_\\p{XID_Start}][\\p{XID_Continue}]+)|([\\p{XID_Start}])/u),ident:new We('ident',H.token,/[_a-zA-Z][0-9a-zA-Z_]*/),and:new We('and',H.token,'&'),and_and:new We('and_and',H.token,'&&'),arrow:new We('arrow ',H.token,'->'),attr:new We('attr',H.token,'@'),forward_slash:new We('forward_slash',H.token,'/'),bang:new We('bang',H.token,'!'),bracket_left:new We('bracket_left',H.token,'['),bracket_right:new We('bracket_right',H.token,']'),brace_left:new We('brace_left',H.token,'{'),brace_right:new We('brace_right',H.token,'}'),colon:new We('colon',H.token,':'),comma:new We('comma',H.token,','),equal:new We('equal',H.token,'='),equal_equal:new We('equal_equal',H.token,'=='),not_equal:new We('not_equal',H.token,'!='),greater_than:new We('greater_than',H.token,'>'),greater_than_equal:new We('greater_than_equal',H.token,'>='),shift_right:new We('shift_right',H.token,'>>'),less_than:new We('less_than',H.token,'<'),less_than_equal:new We('less_than_equal',H.token,'<='),shift_left:new We('shift_left',H.token,'<<'),modulo:new We('modulo',H.token,'%'),minus:new We('minus',H.token,'-'),minus_minus:new We('minus_minus',H.token,'--'),period:new We('period',H.token,'.'),plus:new We('plus',H.token,'+'),plus_plus:new We('plus_plus',H.token,'++'),or:new We('or',H.token,'|'),or_or:new We('or_or',H.token,'||'),paren_left:new We('paren_left',H.token,'('),paren_right:new We('paren_right',H.token,')'),semicolon:new We('semicolon',H.token,';'),star:new We('star',H.token,'*'),tilde:new We('tilde',H.token,'~'),underscore:new We('underscore',H.token,'_'),xor:new We('xor',H.token,'^'),plus_equal:new We('plus_equal',H.token,'+='),minus_equal:new We('minus_equal',H.token,'-='),times_equal:new We('times_equal',H.token,'*='),division_equal:new We('division_equal',H.token,'/='),modulo_equal:new We('modulo_equal',H.token,'%='),and_equal:new We('and_equal',H.token,'&='),or_equal:new We('or_equal',H.token,'|='),xor_equal:new We('xor_equal',H.token,'^='),shift_right_equal:new We('shift_right_equal',H.token,'>>='),shift_left_equal:new We('shift_left_equal',H.token,'<<=')},qe.simpleTokens={'@':q.tokens.attr,'{':q.tokens.brace_left,'}':q.tokens.brace_right,':':q.tokens.colon,',':q.tokens.comma,'(':q.tokens.paren_left,')':q.tokens.paren_right,';':q.tokens.semicolon},qe.literalTokens={'&':q.tokens.and,'&&':q.tokens.and_and,'->':q.tokens.arrow,'/':q.tokens.forward_slash,'!':q.tokens.bang,'[':q.tokens.bracket_left,']':q.tokens.bracket_right,'=':q.tokens.equal,'==':q.tokens.equal_equal,'!=':q.tokens.not_equal,'>':q.tokens.greater_than,'>=':q.tokens.greater_than_equal,'>>':q.tokens.shift_right,'<':q.tokens.less_than,'<=':q.tokens.less_than_equal,'<<':q.tokens.shift_left,'%':q.tokens.modulo,'-':q.tokens.minus,'--':q.tokens.minus_minus,'.':q.tokens.period,'+':q.tokens.plus,'++':q.tokens.plus_plus,'|':q.tokens.or,'||':q.tokens.or_or,'*':q.tokens.star,'~':q.tokens.tilde,_:q.tokens.underscore,'^':q.tokens.xor,'+=':q.tokens.plus_equal,'-=':q.tokens.minus_equal,'*=':q.tokens.times_equal,'/=':q.tokens.division_equal,'%=':q.tokens.modulo_equal,'&=':q.tokens.and_equal,'|=':q.tokens.or_equal,'^=':q.tokens.xor_equal,'>>=':q.tokens.shift_right_equal,'<<=':q.tokens.shift_left_equal},qe.regexTokens={decimal_float_literal:q.tokens.decimal_float_literal,hex_float_literal:q.tokens.hex_float_literal,int_literal:q.tokens.int_literal,uint_literal:q.tokens.uint_literal,ident:q.tokens.ident},qe.storage_class=[q.keywords.function,q.keywords.private,q.keywords.workgroup,q.keywords.uniform,q.keywords.storage],qe.access_mode=[q.keywords.read,q.keywords.write,q.keywords.read_write],qe.sampler_type=[q.keywords.sampler,q.keywords.sampler_comparison],qe.sampled_texture_type=[q.keywords.texture_1d,q.keywords.texture_2d,q.keywords.texture_2d_array,q.keywords.texture_3d,q.keywords.texture_cube,q.keywords.texture_cube_array],qe.multisampled_texture_type=[q.keywords.texture_multisampled_2d],qe.storage_texture_type=[q.keywords.texture_storage_1d,q.keywords.texture_storage_2d,q.keywords.texture_storage_2d_array,q.keywords.texture_storage_3d],qe.depth_texture_type=[q.keywords.texture_depth_2d,q.keywords.texture_depth_2d_array,q.keywords.texture_depth_cube,q.keywords.texture_depth_cube_array,q.keywords.texture_depth_multisampled_2d],qe.texture_external_type=[q.keywords.texture_external],qe.any_texture_type=[...q.sampled_texture_type,...q.multisampled_texture_type,...q.storage_texture_type,...q.depth_texture_type,...q.texture_external_type],qe.texel_format=[q.keywords.r8unorm,q.keywords.r8snorm,q.keywords.r8uint,q.keywords.r8sint,q.keywords.r16uint,q.keywords.r16sint,q.keywords.r16float,q.keywords.rg8unorm,q.keywords.rg8snorm,q.keywords.rg8uint,q.keywords.rg8sint,q.keywords.r32uint,q.keywords.r32sint,q.keywords.r32float,q.keywords.rg16uint,q.keywords.rg16sint,q.keywords.rg16float,q.keywords.rgba8unorm,q.keywords.rgba8unorm_srgb,q.keywords.rgba8snorm,q.keywords.rgba8uint,q.keywords.rgba8sint,q.keywords.bgra8unorm,q.keywords.bgra8unorm_srgb,q.keywords.rgb10a2unorm,q.keywords.rg11b10float,q.keywords.rg32uint,q.keywords.rg32sint,q.keywords.rg32float,q.keywords.rgba16uint,q.keywords.rgba16sint,q.keywords.rgba16float,q.keywords.rgba32uint,q.keywords.rgba32sint,q.keywords.rgba32float],qe.const_literal=[q.tokens.int_literal,q.tokens.uint_literal,q.tokens.decimal_float_literal,q.tokens.hex_float_literal,q.keywords.true,q.keywords.false],qe.literal_or_ident=[q.tokens.ident,q.tokens.int_literal,q.tokens.uint_literal,q.tokens.decimal_float_literal,q.tokens.hex_float_literal,q.tokens.name],qe.element_count_expression=[q.tokens.int_literal,q.tokens.uint_literal,q.tokens.ident],qe.template_types=[q.keywords.vec2,q.keywords.vec3,q.keywords.vec4,q.keywords.mat2x2,q.keywords.mat2x3,q.keywords.mat2x4,q.keywords.mat3x2,q.keywords.mat3x3,q.keywords.mat3x4,q.keywords.mat4x2,q.keywords.mat4x3,q.keywords.mat4x4,q.keywords.atomic,q.keywords.bitcast,...q.any_texture_type],qe.attribute_name=[q.tokens.ident,q.keywords.block,q.keywords.diagnostic],qe.assignment_operators=[q.tokens.equal,q.tokens.plus_equal,q.tokens.minus_equal,q.tokens.times_equal,q.tokens.division_equal,q.tokens.modulo_equal,q.tokens.and_equal,q.tokens.or_equal,q.tokens.xor_equal,q.tokens.shift_right_equal,q.tokens.shift_left_equal],qe.increment_operators=[q.tokens.plus_plus,q.tokens.minus_minus];class He{constructor(e,t,n,s,r){this.type=e,this.lexeme=t,this.line=n,this.start=s,this.end=r}toString(){return this.lexeme}isTemplateType(){return-1!=qe.template_types.indexOf(this.type)}isArrayType(){return this.type==qe.keywords.array}isArrayOrTemplateType(){return this.isArrayType()||this.isTemplateType()}}class ze{constructor(e){this._tokens=[],this._start=0,this._current=0,this._line=1,this._source=null!=e?e:''}scanTokens(){for(;!this._isAtEnd();)if(this._start=this._current,!this.scanToken())throw`Invalid syntax at line ${this._line}`;return this._tokens.push(new He(qe.eof,'',this._line,this._current,this._current)),this._tokens}scanToken(){let e=this._advance();if('\\n'==e)return this._line++,!0;if(this._isWhitespace(e))return!0;if('/'==e){if('/'==this._peekAhead()){for(;'\\n'!=e;){if(this._isAtEnd())return!0;e=this._advance()}return this._line++,!0}if('*'==this._peekAhead()){this._advance();let t=1;for(;t>0;){if(this._isAtEnd())return!0;if(e=this._advance(),'\\n'==e)this._line++;else if('*'==e){if('/'==this._peekAhead()&&(this._advance(),t--,0==t))return!0}else'/'==e&&'*'==this._peekAhead()&&(this._advance(),t++)}return!0}}const t=qe.simpleTokens[e];if(t)return this._addToken(t),!0;let n=qe.none;const s=this._isAlpha(e),r='_'===e;if(this._isAlphaNumeric(e)){let t=this._peekAhead();for(;this._isAlphaNumeric(t);)e+=this._advance(),t=this._peekAhead()}if(s){const t=qe.keywords[e];if(t)return this._addToken(t),!0}if(s||r)return this._addToken(qe.tokens.ident),!0;for(;;){let t=this._findType(e);const s=this._peekAhead();if('-'==e&&this._tokens.length>0){if('='==s)return this._current++,e+=s,this._addToken(qe.tokens.minus_equal),!0;if('-'==s)return this._current++,e+=s,this._addToken(qe.tokens.minus_minus),!0;const n=this._tokens.length-1;if((-1!=qe.literal_or_ident.indexOf(this._tokens[n].type)||this._tokens[n].type==qe.tokens.paren_right)&&'>'!=s)return this._addToken(t),!0}if('>'==e&&('>'==s||'='==s)){let e=!1,n=this._tokens.length-1;for(let t=0;t<5&&n>=0&&-1===qe.assignment_operators.indexOf(this._tokens[n].type);++t,--n)if(this._tokens[n].type===qe.tokens.less_than){n>0&&this._tokens[n-1].isArrayOrTemplateType()&&(e=!0);break}if(e)return this._addToken(t),!0}if(t===qe.none){let s=e,r=0;const a=2;for(let e=0;e<a;++e)if(s+=this._peekAhead(e),t=this._findType(s),t!==qe.none){r=e;break}if(t===qe.none)return n!==qe.none&&(this._current--,this._addToken(n),!0);e=s,this._current+=r+1}if(n=t,this._isAtEnd())break;e+=this._advance()}return n!==qe.none&&(this._addToken(n),!0)}_findType(e){for(const t in qe.regexTokens){const n=qe.regexTokens[t];if(this._match(e,n.rule))return n}const t=qe.literalTokens[e];return t||qe.none}_match(e,t){const n=t.exec(e);return n&&0==n.index&&n[0]==e}_isAtEnd(){return this._current>=this._source.length}_isAlpha(e){return!this._isNumeric(e)&&!this._isWhitespace(e)&&'_'!==e&&'.'!==e&&'('!==e&&')'!==e&&'['!==e&&']'!==e&&'{'!==e&&'}'!==e&&','!==e&&';'!==e&&':'!==e&&'='!==e&&'!'!==e&&'<'!==e&&'>'!==e&&'+'!==e&&'-'!==e&&'*'!==e&&'/'!==e&&'%'!==e&&'&'!==e&&'|'!==e&&'^'!==e&&'~'!==e&&'@'!==e&&'#'!==e&&'?'!==e&&'\\''!==e&&'`'!==e&&'\"'!==e&&'\\\\'!==e&&'\\n'!==e&&'\\r'!==e&&'\\t'!==e&&'\\0'!==e}_isNumeric(e){return e>='0'&&e<='9'}_isAlphaNumeric(e){return this._isAlpha(e)||this._isNumeric(e)||'_'===e}_isWhitespace(e){return' '==e||'\\t'==e||'\\r'==e}_advance(e=0){let t=this._source[this._current];return e=e||0,e++,this._current+=e,t}_peekAhead(e=0){return e=e||0,this._current+e>=this._source.length?'\\0':this._source[this._current+e]}_addToken(e){const t=this._source.substring(this._start,this._current);this._tokens.push(new He(e,t,this._line,this._start,this._current))}}function Re(e){return Array.isArray(e)||(null==e?void 0:e.buffer)instanceof ArrayBuffer}const Ge=new Float32Array(1),Xe=new Uint32Array(Ge.buffer),je=new Uint32Array(Ge.buffer),Ze=new Int32Array(1),Qe=new Float32Array(Ze.buffer),Ye=new Uint32Array(Ze.buffer),Ke=new Uint32Array(1),Je=new Float32Array(Ke.buffer),et=new Int32Array(Ke.buffer);function tt(e,t,n){if(t===n)return e;if('f32'===t){if('i32'===n||'x32'===n)return Ge[0]=e,Xe[0];if('u32'===n)return Ge[0]=e,je[0]}else if('i32'===t||'x32'===t){if('f32'===n)return Ze[0]=e,Qe[0];if('u32'===n)return Ze[0]=e,Ye[0]}else if('u32'===t){if('f32'===n)return Ke[0]=e,Je[0];if('i32'===n||'x32'===n)return Ke[0]=e,et[0]}return console.error(`Unsupported cast from ${t} to ${n}`),e}class nt{constructor(e){this.resources=null,this.inUse=!1,this.info=null,this.node=e}}class st{constructor(e,t){this.align=e,this.size=t}}class rt{constructor(){this.uniforms=[],this.storage=[],this.textures=[],this.samplers=[],this.aliases=[],this.overrides=[],this.structs=[],this.entry=new d,this.functions=[],this._types=new Map,this._functions=new Map}_isStorageTexture(e){return'texture_storage_1d'==e.name||'texture_storage_2d'==e.name||'texture_storage_2d_array'==e.name||'texture_storage_3d'==e.name}updateAST(e){for(const t of e)t instanceof C&&this._functions.set(t.name,new nt(t));for(const t of e)if(t instanceof ie){const e=this.getTypeInfo(t,null);e instanceof n&&this.structs.push(e)}for(const t of e)if(t instanceof ee)this.aliases.push(this._getAliasInfo(t));else if(t instanceof F){const e=t,n=this._getAttributeNum(e.attributes,'id',0),s=null!=e.type?this.getTypeInfo(e.type,e.attributes):null;this.overrides.push(new h(e.name,s,e.attributes,n))}else if(this._isUniformVar(t)){const e=t,n=this._getAttributeNum(e.attributes,'group',0),s=this._getAttributeNum(e.attributes,'binding',0),r=this.getTypeInfo(e.type,e.attributes),a=new o(e.name,r,n,s,e.attributes,i.Uniform,e.access);a.access||(a.access='read'),this.uniforms.push(a)}else if(this._isStorageVar(t)){const e=t,n=this._getAttributeNum(e.attributes,'group',0),s=this._getAttributeNum(e.attributes,'binding',0),r=this.getTypeInfo(e.type,e.attributes),a=this._isStorageTexture(r),l=new o(e.name,r,n,s,e.attributes,a?i.StorageTexture:i.Storage,e.access);l.access||(l.access='read'),this.storage.push(l)}else if(this._isTextureVar(t)){const e=t,n=this._getAttributeNum(e.attributes,'group',0),s=this._getAttributeNum(e.attributes,'binding',0),r=this.getTypeInfo(e.type,e.attributes),a=this._isStorageTexture(r),l=new o(e.name,r,n,s,e.attributes,a?i.StorageTexture:i.Texture,e.access);l.access||(l.access='read'),a?this.storage.push(l):this.textures.push(l)}else if(this._isSamplerVar(t)){const e=t,n=this._getAttributeNum(e.attributes,'group',0),s=this._getAttributeNum(e.attributes,'binding',0),r=this.getTypeInfo(e.type,e.attributes),a=new o(e.name,r,n,s,e.attributes,i.Sampler,e.access);this.samplers.push(a)}else;for(const t of e)if(t instanceof C){const e=this._getAttribute(t,'vertex'),n=this._getAttribute(t,'fragment'),s=this._getAttribute(t,'compute'),r=e||n||s,a=new p(t.name,null==r?void 0:r.name,t.attributes);a.attributes=t.attributes,a.startLine=t.startLine,a.endLine=t.endLine,this.functions.push(a),this._functions.get(t.name).info=a,r&&(this._functions.get(t.name).inUse=!0,a.inUse=!0,a.resources=this._findResources(t,!!r),a.inputs=this._getInputs(t.args),a.outputs=this._getOutputs(t.returnType),this.entry[r.name].push(a)),a.arguments=t.args.map((e=>new f(e.name,this.getTypeInfo(e.type,e.attributes),e.attributes))),a.returnType=t.returnType?this.getTypeInfo(t.returnType,t.attributes):null}else;for(const e of this._functions.values())e.info&&(e.info.inUse=e.inUse,this._addCalls(e.node,e.info.calls));for(const e of this._functions.values())e.node.search((t=>{var n,s,r;if(t instanceof Ce){if(t.value)if(Re(t.value))for(const s of t.value)for(const t of this.overrides)s===t.name&&(null===(n=e.info)||void 0===n||n.overrides.push(t));else for(const n of this.overrides)t.value===n.name&&(null===(s=e.info)||void 0===s||s.overrides.push(n))}else if(t instanceof me)for(const n of this.overrides)t.name===n.name&&(null===(r=e.info)||void 0===r||r.overrides.push(n))}));for(const e of this.uniforms)this._markStructsInUse(e.type);for(const e of this.storage)this._markStructsInUse(e.type)}getStructInfo(e){for(const t of this.structs)if(t.name==e)return t;return null}getOverrideInfo(e){for(const t of this.overrides)if(t.name==e)return t;return null}_markStructsInUse(e){if(e)if(e.isStruct){if(e.inUse=!0,e.members)for(const t of e.members)this._markStructsInUse(t.type)}else if(e.isArray)this._markStructsInUse(e.format);else if(e.isTemplate)e.format&&this._markStructsInUse(e.format);else{const t=this._getAlias(e.name);t&&this._markStructsInUse(t)}}_addCalls(e,t){var n;for(const s of e.calls){const e=null===(n=this._functions.get(s.name))||void 0===n?void 0:n.info;e&&t.add(e)}}findResource(e,t,n){if(n){for(const s of this.entry.compute)if(s.name===n)for(const n of s.resources)if(n.group==e&&n.binding==t)return n;for(const s of this.entry.vertex)if(s.name===n)for(const n of s.resources)if(n.group==e&&n.binding==t)return n;for(const s of this.entry.fragment)if(s.name===n)for(const n of s.resources)if(n.group==e&&n.binding==t)return n}for(const n of this.uniforms)if(n.group==e&&n.binding==t)return n;for(const n of this.storage)if(n.group==e&&n.binding==t)return n;for(const n of this.textures)if(n.group==e&&n.binding==t)return n;for(const n of this.samplers)if(n.group==e&&n.binding==t)return n;return null}_findResource(e){for(const t of this.uniforms)if(t.name==e)return t;for(const t of this.storage)if(t.name==e)return t;for(const t of this.textures)if(t.name==e)return t;for(const t of this.samplers)if(t.name==e)return t;return null}_markStructsFromAST(e){const t=this.getTypeInfo(e,null);this._markStructsInUse(t)}_findResources(e,t){const n=[],s=this,r=[];return e.search((a=>{if(a instanceof A)r.push({});else if(a instanceof E)r.pop();else if(a instanceof B){const e=a;t&&null!==e.type&&this._markStructsFromAST(e.type),r.length>0&&(r[r.length-1][e.name]=e)}else if(a instanceof pe){const e=a;t&&null!==e.type&&this._markStructsFromAST(e.type)}else if(a instanceof M){const e=a;t&&null!==e.type&&this._markStructsFromAST(e.type),r.length>0&&(r[r.length-1][e.name]=e)}else if(a instanceof me){const e=a;if(r.length>0){if(r[r.length-1][e.name])return}const t=s._findResource(e.name);t&&n.push(t)}else if(a instanceof de){const r=a,i=s._functions.get(r.name);i&&(t&&(i.inUse=!0),e.calls.add(i.node),null===i.resources&&(i.resources=s._findResources(i.node,t)),n.push(...i.resources))}else if(a instanceof G){const r=a,i=s._functions.get(r.name);i&&(t&&(i.inUse=!0),e.calls.add(i.node),null===i.resources&&(i.resources=s._findResources(i.node,t)),n.push(...i.resources))}})),[...new Map(n.map((e=>[e.name,e]))).values()]}getBindGroups(){const e=[];function t(t,n){t>=e.length&&(e.length=t+1),void 0===e[t]&&(e[t]=[]),n>=e[t].length&&(e[t].length=n+1)}for(const n of this.uniforms){t(n.group,n.binding);e[n.group][n.binding]=n}for(const n of this.storage){t(n.group,n.binding);e[n.group][n.binding]=n}for(const n of this.textures){t(n.group,n.binding);e[n.group][n.binding]=n}for(const n of this.samplers){t(n.group,n.binding);e[n.group][n.binding]=n}return e}_getOutputs(e,t=void 0){if(void 0===t&&(t=[]),e instanceof ie)this._getStructOutputs(e,t);else{const n=this._getOutputInfo(e);null!==n&&t.push(n)}return t}_getStructOutputs(e,t){for(const n of e.members)if(n.type instanceof ie)this._getStructOutputs(n.type,t);else{const e=this._getAttribute(n,'location')||this._getAttribute(n,'builtin');if(null!==e){const s=this.getTypeInfo(n.type,n.type.attributes),r=this._parseInt(e.value),a=new u(n.name,s,e.name,r);t.push(a)}}}_getOutputInfo(e){const t=this._getAttribute(e,'location')||this._getAttribute(e,'builtin');if(null!==t){const n=this.getTypeInfo(e,e.attributes),s=this._parseInt(t.value);return new u('',n,t.name,s)}return null}_getInputs(e,t=void 0){void 0===t&&(t=[]);for(const n of e)if(n.type instanceof ie)this._getStructInputs(n.type,t);else{const e=this._getInputInfo(n);null!==e&&t.push(e)}return t}_getStructInputs(e,t){for(const n of e.members)if(n.type instanceof ie)this._getStructInputs(n.type,t);else{const e=this._getInputInfo(n);null!==e&&t.push(e)}}_getInputInfo(e){const t=this._getAttribute(e,'location')||this._getAttribute(e,'builtin');if(null!==t){const n=this._getAttribute(e,'interpolation'),s=this.getTypeInfo(e.type,e.attributes),r=this._parseInt(t.value),a=new c(e.name,s,t.name,r);return null!==n&&(a.interpolation=this._parseString(n.value)),a}return null}_parseString(e){return e instanceof Array&&(e=e[0]),e}_parseInt(e){e instanceof Array&&(e=e[0]);const t=parseInt(e);return isNaN(t)?e:t}_getAlias(e){for(const t of this.aliases)if(t.name==e)return t.type;return null}_getAliasInfo(e){return new l(e.name,this.getTypeInfo(e.type,null))}getTypeInfoByName(e){for(const t of this.structs)if(t.name==e)return t;for(const t of this.aliases)if(t.name==e)return t.type;return null}getTypeInfo(i,o=null){if(this._types.has(i))return this._types.get(i);if(i instanceof le){const e=i.type?this.getTypeInfo(i.type,i.attributes):null,t=new r(i.name,e,o);return this._types.set(i,t),this._updateTypeInfo(t),t}if(i instanceof ce){const e=i,t=e.format?this.getTypeInfo(e.format,e.attributes):null,n=new s(e.name,o);return n.format=t,n.count=e.count,this._types.set(i,n),this._updateTypeInfo(n),n}if(i instanceof ie){const e=i,s=new n(e.name,o);s.startLine=e.startLine,s.endLine=e.endLine;for(const n of e.members){const e=this.getTypeInfo(n.type,n.attributes);s.members.push(new t(n.name,e,n.attributes))}return this._types.set(i,s),this._updateTypeInfo(s),s}if(i instanceof ue){const t=i,n=t.format instanceof re,s=t.format?n?this.getTypeInfo(t.format,null):new e(t.format,null):null,r=new a(t.name,s,o,t.access);return this._types.set(i,r),this._updateTypeInfo(r),r}if(i instanceof oe){const e=i,t=e.format?this.getTypeInfo(e.format,null):null,n=new a(e.name,t,o,e.access);return this._types.set(i,n),this._updateTypeInfo(n),n}const l=new e(i.name,o);return this._types.set(i,l),this._updateTypeInfo(l),l}_updateTypeInfo(e){var t,a,i;const o=this._getTypeSize(e);if(e.size=null!==(t=null==o?void 0:o.size)&&void 0!==t?t:0,e instanceof s&&e.format){const t=this._getTypeSize(e.format);e.stride=Math.max(null!==(a=null==t?void 0:t.size)&&void 0!==a?a:0,null!==(i=null==t?void 0:t.align)&&void 0!==i?i:0),this._updateTypeInfo(e.format)}e instanceof r&&this._updateTypeInfo(e.format),e instanceof n&&this._updateStructInfo(e)}_updateStructInfo(e){var t;let n=0,s=0,r=0,a=0;for(let i=0,o=e.members.length;i<o;++i){const o=e.members[i],l=this._getTypeSize(o);if(!l)continue;null!==(t=this._getAlias(o.type.name))&&void 0!==t||o.type;const c=l.align,u=l.size;n=this._roundUp(c,n+s),s=u,r=n,a=Math.max(a,c),o.offset=n,o.size=u,this._updateTypeInfo(o.type)}e.size=this._roundUp(a,r+s),e.align=a}_getTypeSize(r){var a,i;if(null==r)return null;const o=this._getAttributeNum(r.attributes,'size',0),l=this._getAttributeNum(r.attributes,'align',0);if(r instanceof t&&(r=r.type),r instanceof e){const e=this._getAlias(r.name);null!==e&&(r=e)}{const e=rt._typeInfo[r.name];if(void 0!==e){const t='f16'===(null===(a=r.format)||void 0===a?void 0:a.name)?2:1;return new st(Math.max(l,e.align/t),Math.max(o,e.size/t))}}{const e=rt._typeInfo[r.name.substring(0,r.name.length-1)];if(e){const t='h'===r.name[r.name.length-1]?2:1;return new st(Math.max(l,e.align/t),Math.max(o,e.size/t))}}if(r instanceof s){let e=r,t=8,n=8;const s=this._getTypeSize(e.format);null!==s&&(n=s.size,t=s.align);return n=e.count*this._getAttributeNum(null!==(i=null==r?void 0:r.attributes)&&void 0!==i?i:null,'stride',this._roundUp(t,n)),o&&(n=o),new st(Math.max(l,t),Math.max(o,n))}if(r instanceof n){let e=0,t=0,n=0,s=0,a=0;for(const t of r.members){const r=this._getTypeSize(t.type);null!==r&&(e=Math.max(r.align,e),n=this._roundUp(r.align,n+s),s=r.size,a=n)}return t=this._roundUp(e,a+s),new st(Math.max(l,e),Math.max(o,t))}return null}_isUniformVar(e){return e instanceof B&&'uniform'==e.storage}_isStorageVar(e){return e instanceof B&&'storage'==e.storage}_isTextureVar(e){return e instanceof B&&null!==e.type&&-1!=rt._textureTypes.indexOf(e.type.name)}_isSamplerVar(e){return e instanceof B&&null!==e.type&&-1!=rt._samplerTypes.indexOf(e.type.name)}_getAttribute(e,t){const n=e;if(!n||!n.attributes)return null;const s=n.attributes;for(let e of s)if(e.name==t)return e;return null}_getAttributeNum(e,t,n){if(null===e)return n;for(let s of e)if(s.name==t){let e=null!==s&&null!==s.value?s.value:n;return e instanceof Array&&(e=e[0]),'number'==typeof e?e:'string'==typeof e?parseInt(e):n}return n}_roundUp(e,t){return Math.ceil(t/e)*e}}rt._typeInfo={f16:{align:2,size:2},i32:{align:4,size:4},u32:{align:4,size:4},f32:{align:4,size:4},atomic:{align:4,size:4},vec2:{align:8,size:8},vec3:{align:16,size:12},vec4:{align:16,size:16},mat2x2:{align:8,size:16},mat3x2:{align:8,size:24},mat4x2:{align:8,size:32},mat2x3:{align:16,size:32},mat3x3:{align:16,size:48},mat4x3:{align:16,size:64},mat2x4:{align:16,size:32},mat3x4:{align:16,size:48},mat4x4:{align:16,size:64}},rt._textureTypes=qe.any_texture_type.map((e=>e.name)),rt._samplerTypes=qe.sampler_type.map((e=>e.name));let at=0;class it{constructor(e,t,n){this.id=at++,this.name=e,this.value=t,this.node=n}clone(){return new it(this.name,this.value,this.node)}}class ot{constructor(e){this.id=at++,this.name=e.name,this.node=e}clone(){return new ot(this.node)}}class lt{constructor(e){this.parent=null,this.variables=new Map,this.functions=new Map,this.currentFunctionName='',this.id=at++,e&&(this.parent=e,this.currentFunctionName=e.currentFunctionName)}getVariable(e){var t;return this.variables.has(e)?null!==(t=this.variables.get(e))&&void 0!==t?t:null:this.parent?this.parent.getVariable(e):null}getFunction(e){var t;return this.functions.has(e)?null!==(t=this.functions.get(e))&&void 0!==t?t:null:this.parent?this.parent.getFunction(e):null}createVariable(e,t,n){this.variables.set(e,new it(e,t,null!=n?n:null))}setVariable(e,t,n){const s=this.getVariable(e);null!==s?s.value=t:this.createVariable(e,t,n)}getVariableValue(e){var t;const n=this.getVariable(e);return null!==(t=null==n?void 0:n.value)&&void 0!==t?t:null}clone(){return new lt(this)}}class ct{evalExpression(e,t){return null}getTypeInfo(e){return null}getVariableName(e,t){return''}}class ut{constructor(e){this.exec=e}getTypeInfo(e){return this.exec.getTypeInfo(e)}All(e,t){const n=this.exec.evalExpression(e.args[0],t);let s=!0;if(n instanceof Fe)return n.data.forEach((e=>{e||(s=!1)})),new Oe(s?1:0,this.getTypeInfo('bool'));throw new Error(`All() expects a vector argument. Line ${e.line}`)}Any(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe){const e=n.data.some((e=>e));return new Oe(e?1:0,this.getTypeInfo('bool'))}throw new Error(`Any() expects a vector argument. Line ${e.line}`)}Select(e,t){const n=this.exec.evalExpression(e.args[2],t);if(!(n instanceof Oe))throw new Error(`Select() expects a bool condition. Line ${e.line}`);return n.value?this.exec.evalExpression(e.args[1],t):this.exec.evalExpression(e.args[0],t)}ArrayLength(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.evalExpression(n,t);if(s instanceof Ue&&0===s.typeInfo.size){const e=s.typeInfo,t=s.buffer.byteLength/e.stride;return new Oe(t,this.getTypeInfo('u32'))}return new Oe(s.typeInfo.size,this.getTypeInfo('u32'))}Abs(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.abs(e))),n.typeInfo);const s=n;return new Oe(Math.abs(s.value),s.typeInfo)}Acos(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.acos(e))),n.typeInfo);const s=n;return new Oe(Math.acos(s.value),n.typeInfo)}Acosh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.acosh(e))),n.typeInfo);const s=n;return new Oe(Math.acosh(s.value),n.typeInfo)}Asin(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.asin(e))),n.typeInfo);const s=n;return new Oe(Math.asin(s.value),n.typeInfo)}Asinh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.asinh(e))),n.typeInfo);const s=n;return new Oe(Math.asinh(s.value),n.typeInfo)}Atan(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.atan(e))),n.typeInfo);const s=n;return new Oe(Math.atan(s.value),n.typeInfo)}Atanh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.atanh(e))),n.typeInfo);const s=n;return new Oe(Math.atanh(s.value),n.typeInfo)}Atan2(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>Math.atan2(e,s.data[t]))),n.typeInfo);const r=n,a=s;return new Oe(Math.atan2(r.value,a.value),n.typeInfo)}Ceil(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.ceil(e))),n.typeInfo);const s=n;return new Oe(Math.ceil(s.value),n.typeInfo)}_clamp(e,t,n){return Math.min(Math.max(e,t),n)}Clamp(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(n instanceof Fe&&s instanceof Fe&&r instanceof Fe)return new Fe(n.data.map(((e,t)=>this._clamp(e,s.data[t],r.data[t]))),n.typeInfo);const a=n,i=s,o=r;return new Oe(this._clamp(a.value,i.value,o.value),n.typeInfo)}Cos(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.cos(e))),n.typeInfo);const s=n;return new Oe(Math.cos(s.value),n.typeInfo)}Cosh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.cosh(e))),n.typeInfo);const s=n;return new Oe(Math.cos(s.value),n.typeInfo)}CountLeadingZeros(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.clz32(e))),n.typeInfo);const s=n;return new Oe(Math.clz32(s.value),n.typeInfo)}_countOneBits(e){let t=0;for(;0!==e;)1&e&&t++,e>>=1;return t}CountOneBits(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>this._countOneBits(e))),n.typeInfo);const s=n;return new Oe(this._countOneBits(s.value),n.typeInfo)}_countTrailingZeros(e){if(0===e)return 32;let t=0;for(;!(1&e);)e>>=1,t++;return t}CountTrailingZeros(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>this._countTrailingZeros(e))),n.typeInfo);const s=n;return new Oe(this._countTrailingZeros(s.value),n.typeInfo)}Cross(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe){if(3!==n.data.length||3!==s.data.length)return console.error(`Cross() expects 3D vectors. Line ${e.line}`),null;const t=n.data,r=s.data;return new Fe([t[1]*r[2]-r[1]*t[2],t[2]*r[0]-r[2]*t[0],t[0]*r[1]-r[0]*t[1]],n.typeInfo)}return console.error(`Cross() expects vector arguments. Line ${e.line}`),null}Degrees(e,t){const n=this.exec.evalExpression(e.args[0],t),s=180/Math.PI;if(n instanceof Fe)return new Fe(n.data.map((e=>e*s)),n.typeInfo);return new Oe(n.value*s,this.getTypeInfo('f32'))}Determinant(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Me){const e=n.data,t=n.typeInfo.getTypeName(),s=t.endsWith('h')?this.getTypeInfo('f16'):this.getTypeInfo('f32');if('mat2x2'===t||'mat2x2f'===t||'mat2x2h'===t)return new Oe(e[0]*e[3]-e[1]*e[2],s);if('mat2x3'===t||'mat2x3f'===t||'mat2x3h'===t)return new Oe(e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6]),s);if('mat2x4'===t||'mat2x4f'===t||'mat2x4h'===t)console.error(`TODO: Determinant for ${t}`);else if('mat3x2'===t||'mat3x2f'===t||'mat3x2h'===t)console.error(`TODO: Determinant for ${t}`);else{if('mat3x3'===t||'mat3x3f'===t||'mat3x3h'===t)return new Oe(e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6]),s);'mat3x4'===t||'mat3x4f'===t||'mat3x4h'===t||'mat4x2'===t||'mat4x2f'===t||'mat4x2h'===t||'mat4x3'===t||'mat4x3f'===t||'mat4x3h'===t?console.error(`TODO: Determinant for ${t}`):'mat4x4'!==t&&'mat4x4f'!==t&&'mat4x4h'!==t||console.error(`TODO: Determinant for ${t}`)}}return console.error(`Determinant expects a matrix argument. Line ${e.line}`),null}Distance(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe){let e=0;for(let t=0;t<n.data.length;++t)e+=(n.data[t]-s.data[t])*(n.data[t]-s.data[t]);return new Oe(Math.sqrt(e),this.getTypeInfo('f32'))}const r=n,a=s;return new Oe(Math.abs(r.value-a.value),n.typeInfo)}_dot(e,t){let n=0;for(let s=0;s<e.length;++s)n+=t[s]*e[s];return n}Dot(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);return n instanceof Fe&&s instanceof Fe?new Oe(this._dot(n.data,s.data),this.getTypeInfo('f32')):(console.error(`Dot() expects vector arguments. Line ${e.line}`),null)}Dot4U8Packed(e,t){return console.error(`TODO: dot4U8Packed. Line ${e.line}`),null}Dot4I8Packed(e,t){return console.error(`TODO: dot4I8Packed. Line ${e.line}`),null}Exp(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.exp(e))),n.typeInfo);const s=n;return new Oe(Math.exp(s.value),n.typeInfo)}Exp2(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.pow(2,e))),n.typeInfo);const s=n;return new Oe(Math.pow(2,s.value),n.typeInfo)}ExtractBits(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if('u32'!==s.typeInfo.name&&'x32'!==s.typeInfo.name)return console.error(`ExtractBits() expects an i32 offset argument. Line ${e.line}`),null;if('u32'!==r.typeInfo.name&&'x32'!==r.typeInfo.name)return console.error(`ExtractBits() expects an i32 count argument. Line ${e.line}`),null;const a=s.value,i=r.value;if(n instanceof Fe)return new Fe(n.data.map((e=>e>>a&(1<<i)-1)),n.typeInfo);if('i32'!==n.typeInfo.name&&'x32'!==n.typeInfo.name)return console.error(`ExtractBits() expects an i32 argument. Line ${e.line}`),null;const o=n.value;return new Oe(o>>a&(1<<i)-1,this.getTypeInfo('i32'))}FaceForward(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(n instanceof Fe&&s instanceof Fe&&r instanceof Fe){const e=this._dot(s.data,r.data);return new Fe(e<0?Array.from(n.data):n.data.map((e=>-e)),n.typeInfo)}return console.error(`FaceForward() expects vector arguments. Line ${e.line}`),null}_firstLeadingBit(e){return 0===e?-1:31-Math.clz32(e)}FirstLeadingBit(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>this._firstLeadingBit(e))),n.typeInfo);const s=n;return new Oe(this._firstLeadingBit(s.value),n.typeInfo)}_firstTrailingBit(e){return 0===e?-1:Math.log2(e&-e)}FirstTrailingBit(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>this._firstTrailingBit(e))),n.typeInfo);const s=n;return new Oe(this._firstTrailingBit(s.value),n.typeInfo)}Floor(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.floor(e))),n.typeInfo);const s=n;return new Oe(Math.floor(s.value),n.typeInfo)}Fma(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(n instanceof Fe&&s instanceof Fe&&r instanceof Fe)return n.data.length!==s.data.length||n.data.length!==r.data.length?(console.error(`Fma() expects vectors of the same length. Line ${e.line}`),null):new Fe(n.data.map(((e,t)=>e*s.data[t]+r.data[t])),n.typeInfo);const a=n,i=s,o=r;return new Oe(a.value*i.value+o.value,a.typeInfo)}Fract(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>e-Math.floor(e))),n.typeInfo);const s=n;return new Oe(s.value-Math.floor(s.value),n.typeInfo)}Frexp(e,t){return console.error(`TODO: frexp. Line ${e.line}`),null}InsertBits(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t),a=this.exec.evalExpression(e.args[3],t);if('u32'!==r.typeInfo.name&&'x32'!==r.typeInfo.name)return console.error(`InsertBits() expects an i32 offset argument. Line ${e.line}`),null;const i=r.value,o=(1<<a.value)-1<<i,l=~o;if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>e&l|s.data[t]<<i&o)),n.typeInfo);const c=n.value,u=s.value;return new Oe(c&l|u<<i&o,n.typeInfo)}InverseSqrt(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>1/Math.sqrt(e))),n.typeInfo);const s=n;return new Oe(1/Math.sqrt(s.value),n.typeInfo)}Ldexp(e,t){return console.error(`TODO: ldexp. Line ${e.line}`),null}Length(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe){let e=0;return n.data.forEach((t=>{e+=t*t})),new Oe(Math.sqrt(e),this.getTypeInfo('f32'))}const s=n;return new Oe(Math.abs(s.value),n.typeInfo)}Log(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.log(e))),n.typeInfo);const s=n;return new Oe(Math.log(s.value),n.typeInfo)}Log2(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.log2(e))),n.typeInfo);const s=n;return new Oe(Math.log2(s.value),n.typeInfo)}Max(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>Math.max(e,s.data[t]))),n.typeInfo);const r=n,a=s;return new Oe(Math.max(r.value,a.value),n.typeInfo)}Min(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>Math.min(e,s.data[t]))),n.typeInfo);const r=n,a=s;return new Oe(Math.min(r.value,a.value),n.typeInfo)}Mix(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(n instanceof Fe&&s instanceof Fe&&r instanceof Fe)return new Fe(n.data.map(((e,t)=>n.data[t]*(1-r.data[t])+s.data[t]*r.data[t])),n.typeInfo);const a=s,i=r;return new Oe(n.value*(1-i.value)+a.value*i.value,n.typeInfo)}Modf(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>e%s.data[t])),n.typeInfo);const r=s;return new Oe(n.value%r.value,n.typeInfo)}Normalize(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe){const s=this.Length(e,t).value;return new Fe(n.data.map((e=>e/s)),n.typeInfo)}return console.error(`Normalize() expects a vector argument. Line ${e.line}`),null}Pow(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe)return new Fe(n.data.map(((e,t)=>Math.pow(e,s.data[t]))),n.typeInfo);const r=n,a=s;return new Oe(Math.pow(r.value,a.value),n.typeInfo)}QuantizeToF16(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>e)),n.typeInfo);return new Oe(n.value,n.typeInfo)}Radians(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>e*Math.PI/180)),n.typeInfo);return new Oe(n.value*Math.PI/180,this.getTypeInfo('f32'))}Reflect(e,t){let n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(n instanceof Fe&&s instanceof Fe){const e=this._dot(n.data,s.data);return new Fe(n.data.map(((t,n)=>t-2*e*s.data[n])),n.typeInfo)}return console.error(`Reflect() expects vector arguments. Line ${e.line}`),null}Refract(e,t){let n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(n instanceof Fe&&s instanceof Fe&&r instanceof Oe){const e=this._dot(s.data,n.data);return new Fe(n.data.map(((t,n)=>{const a=1-r.value*r.value*(1-e*e);if(a<0)return 0;const i=Math.sqrt(a);return r.value*t-(r.value*e+i)*s.data[n]})),n.typeInfo)}return console.error(`Refract() expects vector arguments and a scalar argument. Line ${e.line}`),null}ReverseBits(e,t){return console.error(`TODO: reverseBits. Line ${e.line}`),null}Round(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.round(e))),n.typeInfo);const s=n;return new Oe(Math.round(s.value),n.typeInfo)}Saturate(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.min(Math.max(e,0),1))),n.typeInfo);const s=n;return new Oe(Math.min(Math.max(s.value,0),1),n.typeInfo)}Sign(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.sign(e))),n.typeInfo);const s=n;return new Oe(Math.sign(s.value),n.typeInfo)}Sin(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.sin(e))),n.typeInfo);const s=n;return new Oe(Math.sin(s.value),n.typeInfo)}Sinh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.sinh(e))),n.typeInfo);const s=n;return new Oe(Math.sinh(s.value),n.typeInfo)}_smoothstep(e,t,n){const s=Math.min(Math.max((n-e)/(t-e),0),1);return s*s*(3-2*s)}SmoothStep(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t),r=this.exec.evalExpression(e.args[2],t);if(r instanceof Fe&&n instanceof Fe&&s instanceof Fe)return new Fe(r.data.map(((e,t)=>this._smoothstep(n.data[t],s.data[t],e))),r.typeInfo);const a=n,i=s,o=r;return new Oe(this._smoothstep(a.value,i.value,o.value),r.typeInfo)}Sqrt(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.sqrt(e))),n.typeInfo);const s=n;return new Oe(Math.sqrt(s.value),n.typeInfo)}Step(e,t){const n=this.exec.evalExpression(e.args[0],t),s=this.exec.evalExpression(e.args[1],t);if(s instanceof Fe&&n instanceof Fe)return new Fe(s.data.map(((e,t)=>e<n.data[t]?0:1)),s.typeInfo);const r=n;return new Oe(s.value<r.value?0:1,r.typeInfo)}Tan(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.tan(e))),n.typeInfo);const s=n;return new Oe(Math.tan(s.value),n.typeInfo)}Tanh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.tanh(e))),n.typeInfo);const s=n;return new Oe(Math.tanh(s.value),n.typeInfo)}_getTransposeType(e){const t=e.getTypeName();return'mat2x2f'===t||'mat2x2h'===t?e:'mat2x3f'===t?this.getTypeInfo('mat3x2f'):'mat2x3h'===t?this.getTypeInfo('mat3x2h'):'mat2x4f'===t?this.getTypeInfo('mat4x2f'):'mat2x4h'===t?this.getTypeInfo('mat4x2h'):'mat3x2f'===t?this.getTypeInfo('mat2x3f'):'mat3x2h'===t?this.getTypeInfo('mat2x3h'):'mat3x3f'===t||'mat3x3h'===t?e:'mat3x4f'===t?this.getTypeInfo('mat4x3f'):'mat3x4h'===t?this.getTypeInfo('mat4x3h'):'mat4x2f'===t?this.getTypeInfo('mat2x4f'):'mat4x2h'===t?this.getTypeInfo('mat2x4h'):'mat4x3f'===t?this.getTypeInfo('mat3x4f'):'mat4x3h'===t?this.getTypeInfo('mat3x4h'):('mat4x4f'===t||'mat4x4h'===t||console.error(`Invalid matrix type ${t}`),e)}Transpose(e,t){const n=this.exec.evalExpression(e.args[0],t);if(!(n instanceof Me))return console.error(`Transpose() expects a matrix argument. Line ${e.line}`),null;const s=this._getTransposeType(n.typeInfo);if('mat2x2'===n.typeInfo.name||'mat2x2f'===n.typeInfo.name||'mat2x2h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[2],e[1],e[3]],s)}if('mat2x3'===n.typeInfo.name||'mat2x3f'===n.typeInfo.name||'mat2x3h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[3],e[6],e[1],e[4],e[7]],s)}if('mat2x4'===n.typeInfo.name||'mat2x4f'===n.typeInfo.name||'mat2x4h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13]],s)}if('mat3x2'===n.typeInfo.name||'mat3x2f'===n.typeInfo.name||'mat3x2h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[3],e[1],e[4],e[2],e[5]],s)}if('mat3x3'===n.typeInfo.name||'mat3x3f'===n.typeInfo.name||'mat3x3h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8]],s)}if('mat3x4'===n.typeInfo.name||'mat3x4f'===n.typeInfo.name||'mat3x4h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14]],s)}if('mat4x2'===n.typeInfo.name||'mat4x2f'===n.typeInfo.name||'mat4x2h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[4],e[1],e[5],e[2],e[6]],s)}if('mat4x3'===n.typeInfo.name||'mat4x3f'===n.typeInfo.name||'mat4x3h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]],s)}if('mat4x4'===n.typeInfo.name||'mat4x4f'===n.typeInfo.name||'mat4x4h'===n.typeInfo.name){const e=n.data;return new Me([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15]],s)}return console.error(`Invalid matrix type ${n.typeInfo.name}`),null}Trunc(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Fe)return new Fe(n.data.map((e=>Math.trunc(e))),n.typeInfo);const s=n;return new Oe(Math.trunc(s.value),n.typeInfo)}Dpdx(e,t){return console.error(`TODO: dpdx. Line ${e.line}`),null}DpdxCoarse(e,t){return console.error(`TODO: dpdxCoarse. Line ${e.line}`),null}DpdxFine(e,t){return console.error('TODO: dpdxFine'),null}Dpdy(e,t){return console.error('TODO: dpdy'),null}DpdyCoarse(e,t){return console.error('TODO: dpdyCoarse'),null}DpdyFine(e,t){return console.error('TODO: dpdyFine'),null}Fwidth(e,t){return console.error('TODO: fwidth'),null}FwidthCoarse(e,t){return console.error('TODO: fwidthCoarse'),null}FwidthFine(e,t){return console.error('TODO: fwidthFine'),null}TextureDimensions(e,t){const n=e.args[0],s=e.args.length>1?this.exec.evalExpression(e.args[1],t).value:0;if(n instanceof me){const r=n.name,a=t.getVariableValue(r);if(a instanceof Pe){if(s<0||s>=a.mipLevelCount)return console.error(`Invalid mip level for textureDimensions. Line ${e.line}`),null;const t=a.getMipLevelSize(s),n=a.dimension;return'1d'===n?new Oe(t[0],this.getTypeInfo('u32')):'3d'===n?new Fe(t,this.getTypeInfo('vec3u')):'2d'===n?new Fe(t.slice(0,2),this.getTypeInfo('vec2u')):(console.error(`Invalid texture dimension ${n} not found. Line ${e.line}`),null)}return console.error(`Texture ${r} not found. Line ${e.line}`),null}return console.error(`Invalid texture argument for textureDimensions. Line ${e.line}`),null}TextureGather(e,t){return console.error('TODO: textureGather'),null}TextureGatherCompare(e,t){return console.error('TODO: textureGatherCompare'),null}TextureLoad(e,t){const n=e.args[0],s=this.exec.evalExpression(e.args[1],t),r=e.args.length>2?this.exec.evalExpression(e.args[2],t).value:0;if(!(s instanceof Fe)||2!==s.data.length)return console.error(`Invalid UV argument for textureLoad. Line ${e.line}`),null;if(n instanceof me){const a=n.name,i=t.getVariableValue(a);if(i instanceof Pe){const t=Math.floor(s.data[0]),n=Math.floor(s.data[1]);if(t<0||t>=i.width||n<0||n>=i.height)return console.error(`Texture ${a} out of bounds. Line ${e.line}`),null;const o=i.getPixel(t,n,0,r);return null===o?(console.error(`Invalid texture format for textureLoad. Line ${e.line}`),null):new Fe(o,this.getTypeInfo('vec4f'))}return console.error(`Texture ${a} not found. Line ${e.line}`),null}return console.error(`Invalid texture argument for textureLoad. Line ${e.line}`),null}TextureNumLayers(e,t){const n=e.args[0];if(n instanceof me){const s=n.name,r=t.getVariableValue(s);return r instanceof Pe?new Oe(r.depthOrArrayLayers,this.getTypeInfo('u32')):(console.error(`Texture ${s} not found. Line ${e.line}`),null)}return console.error(`Invalid texture argument for textureNumLayers. Line ${e.line}`),null}TextureNumLevels(e,t){const n=e.args[0];if(n instanceof me){const s=n.name,r=t.getVariableValue(s);return r instanceof Pe?new Oe(r.mipLevelCount,this.getTypeInfo('u32')):(console.error(`Texture ${s} not found. Line ${e.line}`),null)}return console.error(`Invalid texture argument for textureNumLevels. Line ${e.line}`),null}TextureNumSamples(e,t){const n=e.args[0];if(n instanceof me){const s=n.name,r=t.getVariableValue(s);return r instanceof Pe?new Oe(r.sampleCount,this.getTypeInfo('u32')):(console.error(`Texture ${s} not found. Line ${e.line}`),null)}return console.error(`Invalid texture argument for textureNumSamples. Line ${e.line}`),null}TextureSample(e,t){return console.error('TODO: textureSample'),null}TextureSampleBias(e,t){return console.error('TODO: textureSampleBias'),null}TextureSampleCompare(e,t){return console.error('TODO: textureSampleCompare'),null}TextureSampleCompareLevel(e,t){return console.error('TODO: textureSampleCompareLevel'),null}TextureSampleGrad(e,t){return console.error('TODO: textureSampleGrad'),null}TextureSampleLevel(e,t){return console.error('TODO: textureSampleLevel'),null}TextureSampleBaseClampToEdge(e,t){return console.error('TODO: textureSampleBaseClampToEdge'),null}TextureStore(e,t){const n=e.args[0],s=this.exec.evalExpression(e.args[1],t),r=4===e.args.length?this.exec.evalExpression(e.args[2],t).value:0,a=4===e.args.length?this.exec.evalExpression(e.args[3],t).data:this.exec.evalExpression(e.args[2],t).data;if(4!==a.length)return console.error(`Invalid value argument for textureStore. Line ${e.line}`),null;if(!(s instanceof Fe)||2!==s.data.length)return console.error(`Invalid UV argument for textureStore. Line ${e.line}`),null;if(n instanceof me){const i=n.name,o=t.getVariableValue(i);if(o instanceof Pe){const t=o.getMipLevelSize(0),n=Math.floor(s.data[0]),l=Math.floor(s.data[1]);return n<0||n>=t[0]||l<0||l>=t[1]?(console.error(`Texture ${i} out of bounds. Line ${e.line}`),null):(o.setPixel(n,l,0,r,Array.from(a)),null)}return console.error(`Texture ${i} not found. Line ${e.line}`),null}return console.error(`Invalid texture argument for textureStore. Line ${e.line}`),null}AtomicLoad(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t);return t.getVariable(s).value.getSubData(this.exec,n.postfix,t)}AtomicStore(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t);return o instanceof Oe&&i instanceof Oe&&(o.value=i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),null}AtomicAdd(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value+=i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicSub(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value-=i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicMax(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=Math.max(o.value,i.value)),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicMin(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=Math.min(o.value,i.value)),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicAnd(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=o.value&i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicOr(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=o.value|i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicXor(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=o.value^i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicExchange(e,t){let n=e.args[0];n instanceof we&&(n=n.right);const s=this.exec.getVariableName(n,t),r=t.getVariable(s);let a=e.args[1];const i=this.exec.evalExpression(a,t),o=r.value.getSubData(this.exec,n.postfix,t),l=new Oe(o.value,o.typeInfo);return o instanceof Oe&&i instanceof Oe&&(o.value=i.value),r.value instanceof Ue&&r.value.setDataValue(this.exec,o,n.postfix,t),l}AtomicCompareExchangeWeak(e,t){return console.error('TODO: atomicCompareExchangeWeak'),null}Pack4x8snorm(e,t){return console.error('TODO: pack4x8snorm'),null}Pack4x8unorm(e,t){return console.error('TODO: pack4x8unorm'),null}Pack4xI8(e,t){return console.error('TODO: pack4xI8'),null}Pack4xU8(e,t){return console.error('TODO: pack4xU8'),null}Pack4x8Clamp(e,t){return console.error('TODO: pack4x8Clamp'),null}Pack4xU8Clamp(e,t){return console.error('TODO: pack4xU8Clamp'),null}Pack2x16snorm(e,t){return console.error('TODO: pack2x16snorm'),null}Pack2x16unorm(e,t){return console.error('TODO: pack2x16unorm'),null}Pack2x16float(e,t){return console.error('TODO: pack2x16float'),null}Unpack4x8snorm(e,t){return console.error('TODO: unpack4x8snorm'),null}Unpack4x8unorm(e,t){return console.error('TODO: unpack4x8unorm'),null}Unpack4xI8(e,t){return console.error('TODO: unpack4xI8'),null}Unpack4xU8(e,t){return console.error('TODO: unpack4xU8'),null}Unpack2x16snorm(e,t){return console.error('TODO: unpack2x16snorm'),null}Unpack2x16unorm(e,t){return console.error('TODO: unpack2x16unorm'),null}Unpack2x16float(e,t){return console.error('TODO: unpack2x16float'),null}StorageBarrier(e,t){return null}TextureBarrier(e,t){return null}WorkgroupBarrier(e,t){return null}WorkgroupUniformLoad(e,t){return null}SubgroupAdd(e,t){return console.error('TODO: subgroupAdd'),null}SubgroupExclusiveAdd(e,t){return console.error('TODO: subgroupExclusiveAdd'),null}SubgroupInclusiveAdd(e,t){return console.error('TODO: subgroupInclusiveAdd'),null}SubgroupAll(e,t){return console.error('TODO: subgroupAll'),null}SubgroupAnd(e,t){return console.error('TODO: subgroupAnd'),null}SubgroupAny(e,t){return console.error('TODO: subgroupAny'),null}SubgroupBallot(e,t){return console.error('TODO: subgroupBallot'),null}SubgroupBroadcast(e,t){return console.error('TODO: subgroupBroadcast'),null}SubgroupBroadcastFirst(e,t){return console.error('TODO: subgroupBroadcastFirst'),null}SubgroupElect(e,t){return console.error('TODO: subgroupElect'),null}SubgroupMax(e,t){return console.error('TODO: subgroupMax'),null}SubgroupMin(e,t){return console.error('TODO: subgroupMin'),null}SubgroupMul(e,t){return console.error('TODO: subgroupMul'),null}SubgroupExclusiveMul(e,t){return console.error('TODO: subgroupExclusiveMul'),null}SubgroupInclusiveMul(e,t){return console.error('TODO: subgroupInclusiveMul'),null}SubgroupOr(e,t){return console.error('TODO: subgroupOr'),null}SubgroupShuffle(e,t){return console.error('TODO: subgroupShuffle'),null}SubgroupShuffleDown(e,t){return console.error('TODO: subgroupShuffleDown'),null}SubgroupShuffleUp(e,t){return console.error('TODO: subgroupShuffleUp'),null}SubgroupShuffleXor(e,t){return console.error('TODO: subgroupShuffleXor'),null}SubgroupXor(e,t){return console.error('TODO: subgroupXor'),null}QuadBroadcast(e,t){return console.error('TODO: quadBroadcast'),null}QuadSwapDiagonal(e,t){return console.error('TODO: quadSwapDiagonal'),null}QuadSwapX(e,t){return console.error('TODO: quadSwapX'),null}QuadSwapY(e,t){return console.error('TODO: quadSwapY'),null}}const ht={vec2:2,vec2f:2,vec2i:2,vec2u:2,vec2b:2,vec2h:2,vec3:3,vec3f:3,vec3i:3,vec3u:3,vec3b:3,vec3h:3,vec4:4,vec4f:4,vec4i:4,vec4u:4,vec4b:4,vec4h:4},ft={mat2x2:[2,2,4],mat2x2f:[2,2,4],mat2x2h:[2,2,4],mat2x3:[2,3,6],mat2x3f:[2,3,6],mat2x3h:[2,3,6],mat2x4:[2,4,8],mat2x4f:[2,4,8],mat2x4h:[2,4,8],mat3x2:[3,2,6],mat3x2f:[3,2,6],mat3x2h:[3,2,6],mat3x3:[3,3,9],mat3x3f:[3,3,9],mat3x3h:[3,3,9],mat3x4:[3,4,12],mat3x4f:[3,4,12],mat3x4h:[3,4,12],mat4x2:[4,2,8],mat4x2f:[4,2,8],mat4x2h:[4,2,8],mat4x3:[4,3,12],mat4x3f:[4,3,12],mat4x3h:[4,3,12],mat4x4:[4,4,16],mat4x4f:[4,4,16],mat4x4h:[4,4,16]};class pt extends ct{constructor(e,t){var n;super(),this.ast=null!=e?e:[],this.reflection=new rt,this.reflection.updateAST(this.ast),this.context=null!==(n=null==t?void 0:t.clone())&&void 0!==n?n:new lt,this.builtins=new ut(this),this.typeInfo={bool:this.getTypeInfo(re.bool),i32:this.getTypeInfo(re.i32),u32:this.getTypeInfo(re.u32),f32:this.getTypeInfo(re.f32),f16:this.getTypeInfo(re.f16),vec2f:this.getTypeInfo(oe.vec2f),vec2u:this.getTypeInfo(oe.vec2u),vec2i:this.getTypeInfo(oe.vec2i),vec2h:this.getTypeInfo(oe.vec2h),vec3f:this.getTypeInfo(oe.vec3f),vec3u:this.getTypeInfo(oe.vec3u),vec3i:this.getTypeInfo(oe.vec3i),vec3h:this.getTypeInfo(oe.vec3h),vec4f:this.getTypeInfo(oe.vec4f),vec4u:this.getTypeInfo(oe.vec4u),vec4i:this.getTypeInfo(oe.vec4i),vec4h:this.getTypeInfo(oe.vec4h),mat2x2f:this.getTypeInfo(oe.mat2x2f),mat2x3f:this.getTypeInfo(oe.mat2x3f),mat2x4f:this.getTypeInfo(oe.mat2x4f),mat3x2f:this.getTypeInfo(oe.mat3x2f),mat3x3f:this.getTypeInfo(oe.mat3x3f),mat3x4f:this.getTypeInfo(oe.mat3x4f),mat4x2f:this.getTypeInfo(oe.mat4x2f),mat4x3f:this.getTypeInfo(oe.mat4x3f),mat4x4f:this.getTypeInfo(oe.mat4x4f)}}getVariableValue(e){var t,n;const r=null!==(n=null===(t=this.context.getVariable(e))||void 0===t?void 0:t.value)&&void 0!==n?n:null;if(null===r)return null;if(r instanceof Oe)return r.value;if(r instanceof Fe)return Array.from(r.data);if(r instanceof Me)return Array.from(r.data);if(r instanceof Ue&&r.typeInfo instanceof s){if('u32'===r.typeInfo.format.name)return Array.from(new Uint32Array(r.buffer,r.offset,r.typeInfo.count));if('i32'===r.typeInfo.format.name)return Array.from(new Int32Array(r.buffer,r.offset,r.typeInfo.count));if('f32'===r.typeInfo.format.name)return Array.from(new Float32Array(r.buffer,r.offset,r.typeInfo.count))}return console.error(`Unsupported return variable type ${r.typeInfo.name}`),null}execute(e){(e=null!=e?e:{}).constants&&this._setOverrides(e.constants,this.context),this._execStatements(this.ast,this.context)}dispatchWorkgroups(e,t,n,s){const r=this.context.clone();(s=null!=s?s:{}).constants&&this._setOverrides(s.constants,r),this._execStatements(this.ast,r);const a=r.getFunction(e);if(!a)return void console.error(`Function ${e} not found`);if('number'==typeof t)t=[t,1,1];else{if(0===t.length)return void console.error('Invalid dispatch count');1===t.length?t=[t[0],1,1]:2===t.length?t=[t[0],t[1],1]:t.length>3&&(t=[t[0],t[1],t[2]])}const i=t[0],o=t[1],l=t[2],c=this.getTypeInfo('vec3u');r.setVariable('@num_workgroups',new Fe(t,c));for(const e in n)for(const t in n[e]){const s=n[e][t];r.variables.forEach((n=>{var r;const a=n.node;if(null==a?void 0:a.attributes){let i=null,o=null;for(const e of a.attributes)'binding'===e.name?i=e.value:'group'===e.name&&(o=e.value);if(t==i&&e==o)if(void 0!==s.texture&&void 0!==s.descriptor){const e=new Pe(s.texture,this.getTypeInfo(a.type),s.descriptor,null!==(r=s.texture.view)&&void 0!==r?r:null);n.value=e}else void 0!==s.uniform?n.value=new Ue(s.uniform,this.getTypeInfo(a.type)):n.value=new Ue(s,this.getTypeInfo(a.type))}}))}for(let e=0;e<l;++e)for(let t=0;t<o;++t)for(let n=0;n<i;++n)r.setVariable('@workgroup_id',new Fe([n,t,e],this.getTypeInfo('vec3u'))),this._dispatchWorkgroup(a,[n,t,e],r)}execStatement(e,t){if(e instanceof Q)return this.evalExpression(e.value,t);if(e instanceof ne){if(e.condition){const n=this.evalExpression(e.condition,t);if(!(n instanceof Oe))throw new Error('Invalid break-if condition');if(!n.value)return null}return pt._breakObj}if(e instanceof se)return pt._continueObj;if(e instanceof M)this._let(e,t);else if(e instanceof B)this._var(e,t);else if(e instanceof U)this._const(e,t);else if(e instanceof C)this._function(e,t);else{if(e instanceof Z)return this._if(e,t);if(e instanceof j)return this._switch(e,t);if(e instanceof O)return this._for(e,t);if(e instanceof N)return this._while(e,t);if(e instanceof X)return this._loop(e,t);if(e instanceof V){const n=t.clone();return n.currentFunctionName=t.currentFunctionName,this._execStatements(e.body,n)}if(e instanceof R)this._assign(e,t);else if(e instanceof z)this._increment(e,t);else{if(e instanceof ie)return null;if(e instanceof F){const n=e.name;null===t.getVariable(n)&&t.setVariable(n,new Oe(0,this.getTypeInfo('u32')))}else if(e instanceof G)this._call(e,t);else{if(e instanceof J)return null;if(e instanceof ee)return null;console.error('Invalid statement type.',e,`Line ${e.line}`)}}}return null}evalExpression(e,t){return e instanceof ke?this._evalBinaryOp(e,t):e instanceof ge?this._evalLiteral(e,t):e instanceof me?this._evalVariable(e,t):e instanceof de?this._evalCall(e,t):e instanceof pe?this._evalCreate(e,t):e instanceof _e?this._evalConst(e,t):e instanceof xe?this._evalBitcast(e,t):e instanceof we?this._evalUnaryOp(e,t):(console.error('Invalid expression type',e,`Line ${e.line}`),null)}getTypeInfo(e){var t;if(e instanceof re){const t=this.reflection.getTypeInfo(e);if(null!==t)return t}let n=null!==(t=this.typeInfo[e])&&void 0!==t?t:null;return null!==n||(n=this.reflection.getTypeInfoByName(e)),n}_setOverrides(e,t){for(const n in e){const s=e[n],r=this.reflection.getOverrideInfo(n);null!==r?(null===r.type&&(r.type=this.getTypeInfo('u32')),'u32'===r.type.name||'i32'===r.type.name||'f32'===r.type.name||'f16'===r.type.name?t.setVariable(n,new Oe(s,r.type)):'bool'===r.type.name?t.setVariable(n,new Oe(s?1:0,r.type)):'vec2'===r.type.name||'vec3'===r.type.name||'vec4'===r.type.name||'vec2f'===r.type.name||'vec3f'===r.type.name||'vec4f'===r.type.name||'vec2i'===r.type.name||'vec3i'===r.type.name||'vec4i'===r.type.name||'vec2u'===r.type.name||'vec3u'===r.type.name||'vec4u'===r.type.name||'vec2h'===r.type.name||'vec3h'===r.type.name||'vec4h'===r.type.name?t.setVariable(n,new Fe(s,r.type)):console.error(`Invalid constant type for ${n}`)):console.error(`Override ${n} does not exist in the shader.`)}}_dispatchWorkgroup(e,t,n){const s=[1,1,1];for(const t of e.node.attributes)if('workgroup_size'===t.name){if(t.value.length>0){const e=n.getVariableValue(t.value[0]);s[0]=e instanceof Oe?e.value:parseInt(t.value[0])}if(t.value.length>1){const e=n.getVariableValue(t.value[1]);s[1]=e instanceof Oe?e.value:parseInt(t.value[1])}if(t.value.length>2){const e=n.getVariableValue(t.value[2]);s[2]=e instanceof Oe?e.value:parseInt(t.value[2])}}const r=this.getTypeInfo('vec3u'),a=this.getTypeInfo('u32');n.setVariable('@workgroup_size',new Fe(s,r));const i=s[0],o=s[1],l=s[2];for(let c=0,u=0;c<l;++c)for(let l=0;l<o;++l)for(let o=0;o<i;++o,++u){const i=[o,l,c],h=[o+t[0]*s[0],l+t[1]*s[1],c+t[2]*s[2]];n.setVariable('@local_invocation_id',new Fe(i,r)),n.setVariable('@global_invocation_id',new Fe(h,r)),n.setVariable('@local_invocation_index',new Oe(u,a)),this._dispatchExec(e,n)}}_dispatchExec(e,t){for(const n of e.node.args)for(const e of n.attributes)if('builtin'===e.name){const s=`@${e.value}`,r=t.getVariable(s);void 0!==r&&t.variables.set(n.name,r)}this._execStatements(e.node.body,t)}getVariableName(e,t){for(;e instanceof we;)e=e.right;return e instanceof me?e.name:(console.error('Unknown variable type',e,'Line',e.line),null)}_execStatements(e,t){for(const n of e){if(n instanceof Array){const e=t.clone(),s=this._execStatements(n,e);if(s)return s;continue}const e=this.execStatement(n,t);if(e)return e}return null}_call(e,t){const n=t.clone();n.currentFunctionName=e.name;const s=t.getFunction(e.name);if(s){for(let t=0;t<s.node.args.length;++t){const r=s.node.args[t],a=this.evalExpression(e.args[t],n);n.setVariable(r.name,a,r)}this._execStatements(s.node.body,n)}else if(e.isBuiltin)this._callBuiltinFunction(e,n);else{this.getTypeInfo(e.name)&&this._evalCreate(e,t)}}_increment(e,t){const n=this.getVariableName(e.variable,t),s=t.getVariable(n);s?'++'===e.operator?s.value instanceof Oe?s.value.value++:console.error(`Variable ${n} is not a scalar. Line ${e.line}`):'--'===e.operator?s.value instanceof Oe?s.value.value--:console.error(`Variable ${n} is not a scalar. Line ${e.line}`):console.error(`Unknown increment operator ${e.operator}. Line ${e.line}`):console.error(`Variable ${n} not found. Line ${e.line}`)}_getVariableData(e,t){if(e instanceof me){const n=this.getVariableName(e,t),s=t.getVariable(n);return null===s?(console.error(`Variable ${n} not found. Line ${e.line}`),null):s.value.getSubData(this,e.postfix,t)}if(e instanceof we){if('*'===e.operator){const n=this._getVariableData(e.right,t);return n instanceof Ve?n.reference.getSubData(this,e.postfix,t):(console.error(`Variable ${e.right} is not a pointer. Line ${e.line}`),null)}if('&'===e.operator){const n=this._getVariableData(e.right,t);return new Ve(n)}}return null}_assign(e,t){let n=null,s='<var>',r=null;if(e.variable instanceof we){const n=this._getVariableData(e.variable,t),s=this.evalExpression(e.value,t),r=e.operator;if('='===r){if(n instanceof Oe||n instanceof Fe||n instanceof Me){if(s instanceof Oe||s instanceof Fe||s instanceof Me&&n.data.length===s.data.length)return void n.data.set(s.data);console.error(`Invalid assignment. Line ${e.line}`)}else if(n instanceof Ue&&s instanceof Ue&&n.buffer.byteLength-n.offset>=s.buffer.byteLength-s.offset)return void(n.buffer.byteLength%4==0?new Uint32Array(n.buffer,n.offset,n.typeInfo.size/4).set(new Uint32Array(s.buffer,s.offset,s.typeInfo.size/4)):new Uint8Array(n.buffer,n.offset,n.typeInfo.size).set(new Uint8Array(s.buffer,s.offset,s.typeInfo.size)));return console.error(`Invalid assignment. Line ${e.line}`),null}if('+='===r)return n instanceof Oe||n instanceof Fe||n instanceof Me?s instanceof Oe||s instanceof Fe||s instanceof Me?void n.data.set(s.data.map(((e,t)=>n.data[t]+e))):void console.error(`Invalid assignment . Line ${e.line}`):void console.error(`Invalid assignment. Line ${e.line}`);if('-='===r)return(n instanceof Oe||n instanceof Fe||n instanceof Me)&&(s instanceof Oe||s instanceof Fe||s instanceof Me)?void n.data.set(s.data.map(((e,t)=>n.data[t]-e))):void console.error(`Invalid assignment. Line ${e.line}`)}if(e.variable instanceof we){if('*'===e.variable.operator){s=this.getVariableName(e.variable.right,t);const r=t.getVariable(s);if(!(r&&r.value instanceof Ve))return void console.error(`Variable ${s} is not a pointer. Line ${e.line}`);n=r.value.reference;let a=e.variable.postfix;if(!a){let t=e.variable.right;for(;t instanceof we;){if(t.postfix){a=t.postfix;break}t=t.right}}a&&(n=n.getSubData(this,a,t))}}else{r=e.variable.postfix,s=this.getVariableName(e.variable,t);const a=t.getVariable(s);if(null===a)return void console.error(`Variable ${s} not found. Line ${e.line}`);n=a.value}if(n instanceof Ve&&(n=n.reference),null===n)return void console.error(`Variable ${s} not found. Line ${e.line}`);const a=this.evalExpression(e.value,t),i=e.operator;if('='===i)if(n instanceof Ue)n.setDataValue(this,a,r,t);else if(r){if(!(n instanceof Fe||n instanceof Me))return void console.error(`Variable ${s} is not a vector or matrix. Line ${e.line}`);if(r instanceof be){const i=this.evalExpression(r.index,t).value;if(n instanceof Fe){if(!(a instanceof Oe))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[i]=a.value}else{if(!(n instanceof Me))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);{const i=this.evalExpression(r.index,t).value;if(i<0)return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);if(!(a instanceof Fe))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);{const t=n.typeInfo.getTypeName();if('mat2x2'===t||'mat2x2f'===t||'mat2x2h'===t){if(!(i<2&&2===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[2*i]=a.data[0],n.data[2*i+1]=a.data[1]}else if('mat2x3'===t||'mat2x3f'===t||'mat2x3h'===t){if(!(i<2&&3===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[3*i]=a.data[0],n.data[3*i+1]=a.data[1],n.data[3*i+2]=a.data[2]}else if('mat2x4'===t||'mat2x4f'===t||'mat2x4h'===t){if(!(i<2&&4===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[4*i]=a.data[0],n.data[4*i+1]=a.data[1],n.data[4*i+2]=a.data[2],n.data[4*i+3]=a.data[3]}else if('mat3x2'===t||'mat3x2f'===t||'mat3x2h'===t){if(!(i<3&&2===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[2*i]=a.data[0],n.data[2*i+1]=a.data[1]}else if('mat3x3'===t||'mat3x3f'===t||'mat3x3h'===t){if(!(i<3&&3===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[3*i]=a.data[0],n.data[3*i+1]=a.data[1],n.data[3*i+2]=a.data[2]}else if('mat3x4'===t||'mat3x4f'===t||'mat3x4h'===t){if(!(i<3&&4===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[4*i]=a.data[0],n.data[4*i+1]=a.data[1],n.data[4*i+2]=a.data[2],n.data[4*i+3]=a.data[3]}else if('mat4x2'===t||'mat4x2f'===t||'mat4x2h'===t){if(!(i<4&&2===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[2*i]=a.data[0],n.data[2*i+1]=a.data[1]}else if('mat4x3'===t||'mat4x3f'===t||'mat4x3h'===t){if(!(i<4&&3===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[3*i]=a.data[0],n.data[3*i+1]=a.data[1],n.data[3*i+2]=a.data[2]}else{if('mat4x4'!==t&&'mat4x4f'!==t&&'mat4x4h'!==t)return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);if(!(i<4&&4===a.data.length))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);n.data[4*i]=a.data[0],n.data[4*i+1]=a.data[1],n.data[4*i+2]=a.data[2],n.data[4*i+3]=a.data[3]}}}}}else if(r instanceof fe){const t=r.value;if(!(n instanceof Fe))return void console.error(`Invalid assignment to ${t}. Variable ${s} is not a vector. Line ${e.line}`);if(a instanceof Oe){if(t.length>1)return void console.error(`Invalid assignment to ${t} for variable ${s}. Line ${e.line}`);if('x'===t)n.data[0]=a.value;else if('y'===t){if(n.data.length<2)return void console.error(`Invalid assignment to ${t} for variable ${s}. Line ${e.line}`);n.data[1]=a.value}else if('z'===t){if(n.data.length<3)return void console.error(`Invalid assignment to ${t} for variable ${s}. Line ${e.line}`);n.data[2]=a.value}else if('w'===t){if(n.data.length<4)return void console.error(`Invalid assignment to ${t} for variable ${s}. Line ${e.line}`);n.data[3]=a.value}}else{if(!(a instanceof Fe))return void console.error(`Invalid assignment to ${s}. Line ${e.line}`);if(t.length!==a.data.length)return void console.error(`Invalid assignment to ${t} for variable ${s}. Line ${e.line}`);for(let r=0;r<t.length;++r){const i=t[r];if('x'===i||'r'===i)n.data[0]=a.data[r];else if('y'===i||'g'===i){if(a.data.length<2)return void console.error(`Invalid assignment to ${i} for variable ${s}. Line ${e.line}`);n.data[1]=a.data[r]}else if('z'===i||'b'===i){if(a.data.length<3)return void console.error(`Invalid assignment to ${i} for variable ${s}. Line ${e.line}`);n.data[2]=a.data[r]}else{if('w'!==i&&'a'!==i)return void console.error(`Invalid assignment to ${i} for variable ${s}. Line ${e.line}`);if(a.data.length<4)return void console.error(`Invalid assignment to ${i} for variable ${s}. Line ${e.line}`);n.data[3]=a.data[r]}}}}}else n instanceof Oe&&a instanceof Oe?n.value=a.value:n instanceof Fe&&a instanceof Fe||n instanceof Me&&a instanceof Me?n.data.set(a.data):console.error(`Invalid assignment to ${s}. Line ${e.line}`);else{const s=n.getSubData(this,r,t);if(s instanceof Fe&&a instanceof Oe){const t=s.data,n=a.value;if('+='===i)for(let e=0;e<t.length;++e)t[e]+=n;else if('-='===i)for(let e=0;e<t.length;++e)t[e]-=n;else if('*='===i)for(let e=0;e<t.length;++e)t[e]*=n;else if('/='===i)for(let e=0;e<t.length;++e)t[e]/=n;else if('%='===i)for(let e=0;e<t.length;++e)t[e]%=n;else if('&='===i)for(let e=0;e<t.length;++e)t[e]&=n;else if('|='===i)for(let e=0;e<t.length;++e)t[e]|=n;else if('^='===i)for(let e=0;e<t.length;++e)t[e]^=n;else if('<<='===i)for(let e=0;e<t.length;++e)t[e]<<=n;else if('>>='===i)for(let e=0;e<t.length;++e)t[e]>>=n;else console.error(`Invalid operator ${i}. Line ${e.line}`)}else if(s instanceof Fe&&a instanceof Fe){const t=s.data,n=a.data;if(t.length!==n.length)return void console.error(`Vector length mismatch. Line ${e.line}`);if('+='===i)for(let e=0;e<t.length;++e)t[e]+=n[e];else if('-='===i)for(let e=0;e<t.length;++e)t[e]-=n[e];else if('*='===i)for(let e=0;e<t.length;++e)t[e]*=n[e];else if('/='===i)for(let e=0;e<t.length;++e)t[e]/=n[e];else if('%='===i)for(let e=0;e<t.length;++e)t[e]%=n[e];else if('&='===i)for(let e=0;e<t.length;++e)t[e]&=n[e];else if('|='===i)for(let e=0;e<t.length;++e)t[e]|=n[e];else if('^='===i)for(let e=0;e<t.length;++e)t[e]^=n[e];else if('<<='===i)for(let e=0;e<t.length;++e)t[e]<<=n[e];else if('>>='===i)for(let e=0;e<t.length;++e)t[e]>>=n[e];else console.error(`Invalid operator ${i}. Line ${e.line}`)}else{if(!(s instanceof Oe&&a instanceof Oe))return void console.error(`Invalid type for ${e.operator} operator. Line ${e.line}`);'+='===i?s.value+=a.value:'-='===i?s.value-=a.value:'*='===i?s.value*=a.value:'/='===i?s.value/=a.value:'%='===i?s.value%=a.value:'&='===i?s.value&=a.value:'|='===i?s.value|=a.value:'^='===i?s.value^=a.value:'<<='===i?s.value<<=a.value:'>>='===i?s.value>>=a.value:console.error(`Invalid operator ${i}. Line ${e.line}`)}n instanceof Ue&&n.setDataValue(this,s,r,t)}}_function(e,t){const n=new ot(e);t.functions.set(e.name,n)}_const(e,t){let n=null;null!==e.value&&(n=this.evalExpression(e.value,t)),t.createVariable(e.name,n,e)}_let(e,t){let n=null;if(null!==e.value){if(n=this.evalExpression(e.value,t),null===n)return void console.error(`Invalid value for variable ${e.name}. Line ${e.line}`);e.value instanceof we||(n=n.clone())}else{const s=e.type.name;if('f32'===s||'i32'===s||'u32'===s||'bool'===s||'f16'===s||'vec2'===s||'vec3'===s||'vec4'===s||'vec2f'===s||'vec3f'===s||'vec4f'===s||'vec2i'===s||'vec3i'===s||'vec4i'===s||'vec2u'===s||'vec3u'===s||'vec4u'===s||'vec2h'===s||'vec3h'===s||'vec4h'===s||'vec2b'===s||'vec3b'===s||'vec4b'===s||'mat2x2'===s||'mat2x3'===s||'mat2x4'===s||'mat3x2'===s||'mat3x3'===s||'mat3x4'===s||'mat4x2'===s||'mat4x3'===s||'mat4x4'===s||'mat2x2f'===s||'mat2x3f'===s||'mat2x4f'===s||'mat3x2f'===s||'mat3x3f'===s||'mat3x4f'===s||'mat4x2f'===s||'mat4x3f'===s||'mat4x4f'===s||'mat2x2h'===s||'mat2x3h'===s||'mat2x4h'===s||'mat3x2h'===s||'mat3x3h'===s||'mat3x4h'===s||'mat4x2h'===s||'mat4x3h'===s||'mat4x4h'===s||'array'===s){const s=new pe(e.type,[]);n=this._evalCreate(s,t)}}t.createVariable(e.name,n,e)}_var(e,t){let n=null;if(null!==e.value){if(n=this.evalExpression(e.value,t),null===n)return void console.error(`Invalid value for variable ${e.name}. Line ${e.line}`);e.value instanceof we||(n=n.clone())}else{if(null===e.type)return void console.error(`Variable ${e.name} has no type. Line ${e.line}`);const s=e.type.name;if('f32'===s||'i32'===s||'u32'===s||'bool'===s||'f16'===s||'vec2'===s||'vec3'===s||'vec4'===s||'vec2f'===s||'vec3f'===s||'vec4f'===s||'vec2i'===s||'vec3i'===s||'vec4i'===s||'vec2u'===s||'vec3u'===s||'vec4u'===s||'vec2h'===s||'vec3h'===s||'vec4h'===s||'vec2b'===s||'vec3b'===s||'vec4b'===s||'mat2x2'===s||'mat2x3'===s||'mat2x4'===s||'mat3x2'===s||'mat3x3'===s||'mat3x4'===s||'mat4x2'===s||'mat4x3'===s||'mat4x4'===s||'mat2x2f'===s||'mat2x3f'===s||'mat2x4f'===s||'mat3x2f'===s||'mat3x3f'===s||'mat3x4f'===s||'mat4x2f'===s||'mat4x3f'===s||'mat4x4f'===s||'mat2x2h'===s||'mat2x3h'===s||'mat2x4h'===s||'mat3x2h'===s||'mat3x3h'===s||'mat3x4h'===s||'mat4x2h'===s||'mat4x3h'===s||'mat4x4h'===s||e.type instanceof ce||e.type instanceof ie||e.type instanceof oe){const s=new pe(e.type,[]);n=this._evalCreate(s,t)}}t.createVariable(e.name,n,e)}_switch(e,t){t=t.clone();const n=this.evalExpression(e.condition,t);if(!(n instanceof Oe))return console.error(`Invalid if condition. Line ${e.line}`),null;let s=null;for(const r of e.cases)if(r instanceof Se)for(const a of r.selectors){if(a instanceof Te){s=r;continue}const i=this.evalExpression(a,t);if(!(i instanceof Oe))return console.error(`Invalid case selector. Line ${e.line}`),null;if(i.value===n.value)return this._execStatements(r.body,t)}else r instanceof Ae&&(s=r);return s?this._execStatements(s.body,t):null}_if(e,t){t=t.clone();const n=this.evalExpression(e.condition,t);if(!(n instanceof Oe))return console.error(`Invalid if condition. Line ${e.line}`),null;if(n.value)return this._execStatements(e.body,t);for(const n of e.elseif){const s=this.evalExpression(n.condition,t);if(!(s instanceof Oe))return console.error(`Invalid if condition. Line ${e.line}`),null;if(s.value)return this._execStatements(n.body,t)}return e.else?this._execStatements(e.else,t):null}_getScalarValue(e){return e instanceof Oe?e.value:(console.error('Expected scalar value.',e),0)}_for(e,t){for(t=t.clone(),this.execStatement(e.init,t);this._getScalarValue(this.evalExpression(e.condition,t));){const n=this._execStatements(e.body,t);if(n===pt._breakObj)break;if(null!==n&&n!==pt._continueObj)return n;this.execStatement(e.increment,t)}return null}_loop(e,t){for(t=t.clone();;){const n=this._execStatements(e.body,t);if(n===pt._breakObj)break;if(n===pt._continueObj){if(e.continuing){if(this._execStatements(e.continuing.body,t)===pt._breakObj)break}}else if(null!==n)return n}return null}_while(e,t){for(t=t.clone();this._getScalarValue(this.evalExpression(e.condition,t));){const n=this._execStatements(e.body,t);if(n===pt._breakObj)break;if(n!==pt._continueObj&&null!==n)return n}return null}_evalBitcast(e,t){const n=this.evalExpression(e.value,t),s=e.type;if(n instanceof Oe){const e=tt(n.value,n.typeInfo.name,s.name);return new Oe(e,this.getTypeInfo(s))}if(n instanceof Fe){const t=n.typeInfo.getTypeName();let r='';if(t.endsWith('f'))r='f32';else if(t.endsWith('i'))r='i32';else if(t.endsWith('u'))r='u32';else if(t.endsWith('b'))r='bool';else{if(!t.endsWith('h'))return console.error(`Unknown vector type ${t}. Line ${e.line}`),null;r='f16'}const a=s.getTypeName();let i='';if(a.endsWith('f'))i='f32';else if(a.endsWith('i'))i='i32';else if(a.endsWith('u'))i='u32';else if(a.endsWith('b'))i='bool';else{if(!a.endsWith('h'))return console.error(`Unknown vector type ${i}. Line ${e.line}`),null;i='f16'}const o=function(e,t,n){if(t===n)return e;const s=new Array(e.length);for(let r=0;r<e.length;r++)s[r]=tt(e[r],t,n);return s}(Array.from(n.data),r,i);return new Fe(o,this.getTypeInfo(s))}return console.error(`TODO: bitcast for ${n.typeInfo.name}. Line ${e.line}`),null}_evalConst(e,t){return t.getVariableValue(e.name).clone().getSubData(this,e.postfix,t)}_evalCreate(e,t){var r;if(e instanceof pe){if(null===e.type)return Ne.void;switch(e.type.getTypeName()){case'bool':case'i32':case'u32':case'f32':case'f16':return this._callConstructorValue(e,t);case'vec2':case'vec3':case'vec4':case'vec2f':case'vec3f':case'vec4f':case'vec2h':case'vec3h':case'vec4h':case'vec2i':case'vec3i':case'vec4i':case'vec2u':case'vec3u':case'vec4u':case'vec2b':case'vec3b':case'vec4b':return this._callConstructorVec(e,t);case'mat2x2':case'mat2x2f':case'mat2x2h':case'mat2x3':case'mat2x3f':case'mat2x3h':case'mat2x4':case'mat2x4f':case'mat2x4h':case'mat3x2':case'mat3x2f':case'mat3x2h':case'mat3x3':case'mat3x3f':case'mat3x3h':case'mat3x4':case'mat3x4f':case'mat3x4h':case'mat4x2':case'mat4x2f':case'mat4x2h':case'mat4x3':case'mat4x3f':case'mat4x3h':case'mat4x4':case'mat4x4f':case'mat4x4h':return this._callConstructorMatrix(e,t)}}const a=e instanceof pe?e.type.name:e.name,i=e instanceof pe?this.getTypeInfo(e.type):this.getTypeInfo(e.name);if(null===i)return console.error(`Unknown type ${a}. Line ${e.line}`),null;if(0===i.size)return null;const o=new Ue(new ArrayBuffer(i.size),i,0);if(i instanceof n){if(e.args)for(let n=0;n<e.args.length;++n){const s=i.members[n],r=e.args[n],a=this.evalExpression(r,t);o.setData(this,a,s.type,s.offset,t)}}else if(i instanceof s){let n=0;if(e.args)for(let s=0;s<e.args.length;++s){const a=e.args[s],l=this.evalExpression(a,t);null===i.format&&('x32'===(null===(r=l.typeInfo)||void 0===r?void 0:r.name)?i.format=this.getTypeInfo('i32'):i.format=l.typeInfo),o.setData(this,l,i.format,n,t),n+=i.stride}}else console.error(`Unknown type \"${a}\". Line ${e.line}`);return e instanceof pe?o.getSubData(this,e.postfix,t):o}_evalLiteral(e,t){const n=this.getTypeInfo(e.type),s=n.name;if('x32'===s||'u32'===s||'f32'===s||'f16'===s||'i32'===s||'bool'===s){return new Oe(e.scalarValue,n)}return'vec2'===s||'vec3'===s||'vec4'===s||'vec2f'===s||'vec3f'===s||'vec4f'===s||'vec2h'===s||'vec3h'===s||'vec4h'===s||'vec2i'===s||'vec3i'===s||'vec4i'===s||'vec2u'===s||'vec3u'===s||'vec4u'===s?this._callConstructorVec(e,t):'mat2x2'===s||'mat2x3'===s||'mat2x4'===s||'mat3x2'===s||'mat3x3'===s||'mat3x4'===s||'mat4x2'===s||'mat4x3'===s||'mat4x4'===s||'mat2x2f'===s||'mat2x3f'===s||'mat2x4f'===s||'mat3x2f'===s||'mat3x3f'===s||'mat3x4f'===s||'mat4x2f'===s||'mat4x3f'===s||'mat4x4f'===s||'mat2x2h'===s||'mat2x3h'===s||'mat2x4h'===s||'mat3x2h'===s||'mat3x3h'===s||'mat3x4h'===s||'mat4x2h'===s||'mat4x3h'===s||'mat4x4h'===s?this._callConstructorMatrix(e,t):e.value}_evalVariable(e,t){const n=t.getVariableValue(e.name);return null===n?n:n.getSubData(this,e.postfix,t)}_maxFormatTypeInfo(e){let t=e[0];if('f32'===t.name)return t;for(let n=1;n<e.length;++n){const s=pt._priority.get(t.name);pt._priority.get(e[n].name)<s&&(t=e[n])}return'x32'===t.name?this.getTypeInfo('i32'):t}_evalUnaryOp(e,t){const n=this.evalExpression(e.right,t);if('&'===e.operator)return new Ve(n);if('*'===e.operator)return n instanceof Ve?n.reference.getSubData(this,e.postfix,t):(console.error(`Invalid dereference. Line ${e.line}`),null);const s=n instanceof Oe?n.value:n instanceof Fe?Array.from(n.data):null;switch(e.operator){case'+':{if(Re(s)){const e=s.map(((e,t)=>+e));return new Fe(e,n.typeInfo)}const e=s,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Oe(+e,t)}case'-':{if(Re(s)){const e=s.map(((e,t)=>-e));return new Fe(e,n.typeInfo)}const e=s,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Oe(-e,t)}case'!':{if(Re(s)){const e=s.map(((e,t)=>e?0:1));return new Fe(e,n.typeInfo)}const e=s,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Oe(e?0:1,t)}case'~':{if(Re(s)){const e=s.map(((e,t)=>~e));return new Fe(e,n.typeInfo)}const e=s,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Oe(~e,t)}}return console.error(`Invalid unary operator ${e.operator}. Line ${e.line}`),null}_evalBinaryOp(e,t){const n=this.evalExpression(e.left,t),s=this.evalExpression(e.right,t),r=n instanceof Oe?n.value:n instanceof Fe||n instanceof Me?Array.from(n.data):null,a=s instanceof Oe?s.value:s instanceof Fe||s instanceof Me?Array.from(s.data):null;switch(e.operator){case'+':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e+s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t+e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e+t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t+i,o)}case'-':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e-s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t-e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e-t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t-i,o)}case'*':{if(Re(r)&&Re(a)){const t=r,i=a;if(n instanceof Me&&s instanceof Me){const r=function(e,t,n,s){if(void 0===ft[t.name]||void 0===ft[s.name])return null;const r=ft[t.name][0],a=ft[t.name][1],i=ft[s.name][0];if(r!==ft[s.name][1])return null;const o=new Array(i*a);for(let t=0;t<a;t++)for(let s=0;s<i;s++){let l=0;for(let i=0;i<r;i++)l+=e[i*a+t]*n[s*r+i];o[t*i+s]=l}return o}(t,n.typeInfo,i,s.typeInfo);if(null===r)return console.error(`Matrix multiplication failed. Line ${e.line}.`),null;const a=ft[s.typeInfo.name][0],o=ft[n.typeInfo.name][1],l=this.getTypeInfo(`mat${a}x${o}f`);return new Me(r,l)}if(n instanceof Me&&s instanceof Fe){const r=function(e,t,n,s){if(void 0===ft[t.name]||void 0===ht[s.name])return null;const r=ft[t.name][0],a=ft[t.name][1];if(r!==n.length)return null;const i=new Array(a);for(let t=0;t<a;t++){let s=0;for(let i=0;i<r;i++)s+=e[i*a+t]*n[i];i[t]=s}return i}(t,n.typeInfo,i,s.typeInfo);return null===r?(console.error(`Matrix vector multiplication failed. Line ${e.line}.`),null):new Fe(r,s.typeInfo)}if(n instanceof Fe&&s instanceof Me){const r=function(e,t,n,s){if(void 0===ht[t.name]||void 0===ft[s.name])return null;const r=ft[s.name][0],a=ft[s.name][1];if(a!==e.length)return null;const i=[];for(let t=0;t<r;t++){let s=0;for(let i=0;i<a;i++)s+=e[i]*n[i*r+t];i[t]=s}return i}(t,n.typeInfo,i,s.typeInfo);return null===r?(console.error(`Matrix vector multiplication failed. Line ${e.line}.`),null):new Fe(r,n.typeInfo)}{if(t.length!==i.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const s=t.map(((e,t)=>e*i[t]));return new Fe(s,n.typeInfo)}}if(Re(r)){const e=a,t=r.map(((t,n)=>t*e));return n instanceof Me?new Me(t,n.typeInfo):new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e*t));return s instanceof Me?new Me(t,s.typeInfo):new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t*i,o)}case'%':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e%s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t%e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e%t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t%i,o)}case'/':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e/s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t/e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e/t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t/i,o)}case'&':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e&s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t&e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e&t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t&i,o)}case'|':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e|s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t|e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e|t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t|i,o)}case'^':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e^s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t^e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e^t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t^i,o)}case'<<':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e<<s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t<<e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e<<t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t<<i,o)}case'>>':{if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e>>s[t]));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t>>e));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e>>t));return new Fe(t,s.typeInfo)}const t=r,i=a,o=this._maxFormatTypeInfo([n.typeInfo,s.typeInfo]);return new Oe(t>>i,o)}case'>':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e>s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t>e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e>t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r>a?1:0,this.getTypeInfo('bool'));case'<':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e<s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t<e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e<t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r<a?1:0,this.getTypeInfo('bool'));case'==':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e===s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t==e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e==t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r===a?1:0,this.getTypeInfo('bool'));case'!=':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e!==s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t!==e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e!==t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r!==a?1:0,this.getTypeInfo('bool'));case'>=':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e>=s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t>=e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e>=t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r>=a?1:0,this.getTypeInfo('bool'));case'<=':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e<=s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t<=e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e<=t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r<=a?1:0,this.getTypeInfo('bool'));case'&&':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e&&s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t&&e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e&&t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r&&a?1:0,this.getTypeInfo('bool'));case'||':if(Re(r)&&Re(a)){const t=r,s=a;if(t.length!==s.length)return console.error(`Vector length mismatch. Line ${e.line}.`),null;const i=t.map(((e,t)=>e||s[t]?1:0));return new Fe(i,n.typeInfo)}if(Re(r)){const e=a,t=r.map(((t,n)=>t||e?1:0));return new Fe(t,n.typeInfo)}if(Re(a)){const e=r,t=a.map(((t,n)=>e||t?1:0));return new Fe(t,s.typeInfo)}return new Oe(r||a?1:0,this.getTypeInfo('bool'))}return console.error(`Unknown operator ${e.operator}. Line ${e.line}`),null}_evalCall(e,t){if(null!==e.cachedReturnValue)return e.cachedReturnValue;const n=t.clone();n.currentFunctionName=e.name;const s=t.getFunction(e.name);if(!s){if(e.isBuiltin)return this._callBuiltinFunction(e,n);return this.getTypeInfo(e.name)?this._evalCreate(e,t):(console.error(`Unknown function \"${e.name}\". Line ${e.line}`),null)}for(let t=0;t<s.node.args.length;++t){const r=s.node.args[t],a=this.evalExpression(e.args[t],n);n.createVariable(r.name,a,r)}return this._execStatements(s.node.body,n)}_callBuiltinFunction(e,t){switch(e.name){case'all':return this.builtins.All(e,t);case'any':return this.builtins.Any(e,t);case'select':return this.builtins.Select(e,t);case'arrayLength':return this.builtins.ArrayLength(e,t);case'abs':return this.builtins.Abs(e,t);case'acos':return this.builtins.Acos(e,t);case'acosh':return this.builtins.Acosh(e,t);case'asin':return this.builtins.Asin(e,t);case'asinh':return this.builtins.Asinh(e,t);case'atan':return this.builtins.Atan(e,t);case'atanh':return this.builtins.Atanh(e,t);case'atan2':return this.builtins.Atan2(e,t);case'ceil':return this.builtins.Ceil(e,t);case'clamp':return this.builtins.Clamp(e,t);case'cos':return this.builtins.Cos(e,t);case'cosh':return this.builtins.Cosh(e,t);case'countLeadingZeros':return this.builtins.CountLeadingZeros(e,t);case'countOneBits':return this.builtins.CountOneBits(e,t);case'countTrailingZeros':return this.builtins.CountTrailingZeros(e,t);case'cross':return this.builtins.Cross(e,t);case'degrees':return this.builtins.Degrees(e,t);case'determinant':return this.builtins.Determinant(e,t);case'distance':return this.builtins.Distance(e,t);case'dot':return this.builtins.Dot(e,t);case'dot4U8Packed':return this.builtins.Dot4U8Packed(e,t);case'dot4I8Packed':return this.builtins.Dot4I8Packed(e,t);case'exp':return this.builtins.Exp(e,t);case'exp2':return this.builtins.Exp2(e,t);case'extractBits':return this.builtins.ExtractBits(e,t);case'faceForward':return this.builtins.FaceForward(e,t);case'firstLeadingBit':return this.builtins.FirstLeadingBit(e,t);case'firstTrailingBit':return this.builtins.FirstTrailingBit(e,t);case'floor':return this.builtins.Floor(e,t);case'fma':return this.builtins.Fma(e,t);case'fract':return this.builtins.Fract(e,t);case'frexp':return this.builtins.Frexp(e,t);case'insertBits':return this.builtins.InsertBits(e,t);case'inverseSqrt':return this.builtins.InverseSqrt(e,t);case'ldexp':return this.builtins.Ldexp(e,t);case'length':return this.builtins.Length(e,t);case'log':return this.builtins.Log(e,t);case'log2':return this.builtins.Log2(e,t);case'max':return this.builtins.Max(e,t);case'min':return this.builtins.Min(e,t);case'mix':return this.builtins.Mix(e,t);case'modf':return this.builtins.Modf(e,t);case'normalize':return this.builtins.Normalize(e,t);case'pow':return this.builtins.Pow(e,t);case'quantizeToF16':return this.builtins.QuantizeToF16(e,t);case'radians':return this.builtins.Radians(e,t);case'reflect':return this.builtins.Reflect(e,t);case'refract':return this.builtins.Refract(e,t);case'reverseBits':return this.builtins.ReverseBits(e,t);case'round':return this.builtins.Round(e,t);case'saturate':return this.builtins.Saturate(e,t);case'sign':return this.builtins.Sign(e,t);case'sin':return this.builtins.Sin(e,t);case'sinh':return this.builtins.Sinh(e,t);case'smoothStep':return this.builtins.SmoothStep(e,t);case'sqrt':return this.builtins.Sqrt(e,t);case'step':return this.builtins.Step(e,t);case'tan':return this.builtins.Tan(e,t);case'tanh':return this.builtins.Tanh(e,t);case'transpose':return this.builtins.Transpose(e,t);case'trunc':return this.builtins.Trunc(e,t);case'dpdx':return this.builtins.Dpdx(e,t);case'dpdxCoarse':return this.builtins.DpdxCoarse(e,t);case'dpdxFine':return this.builtins.DpdxFine(e,t);case'dpdy':return this.builtins.Dpdy(e,t);case'dpdyCoarse':return this.builtins.DpdyCoarse(e,t);case'dpdyFine':return this.builtins.DpdyFine(e,t);case'fwidth':return this.builtins.Fwidth(e,t);case'fwidthCoarse':return this.builtins.FwidthCoarse(e,t);case'fwidthFine':return this.builtins.FwidthFine(e,t);case'textureDimensions':return this.builtins.TextureDimensions(e,t);case'textureGather':return this.builtins.TextureGather(e,t);case'textureGatherCompare':return this.builtins.TextureGatherCompare(e,t);case'textureLoad':return this.builtins.TextureLoad(e,t);case'textureNumLayers':return this.builtins.TextureNumLayers(e,t);case'textureNumLevels':return this.builtins.TextureNumLevels(e,t);case'textureNumSamples':return this.builtins.TextureNumSamples(e,t);case'textureSample':return this.builtins.TextureSample(e,t);case'textureSampleBias':return this.builtins.TextureSampleBias(e,t);case'textureSampleCompare':return this.builtins.TextureSampleCompare(e,t);case'textureSampleCompareLevel':return this.builtins.TextureSampleCompareLevel(e,t);case'textureSampleGrad':return this.builtins.TextureSampleGrad(e,t);case'textureSampleLevel':return this.builtins.TextureSampleLevel(e,t);case'textureSampleBaseClampToEdge':return this.builtins.TextureSampleBaseClampToEdge(e,t);case'textureStore':return this.builtins.TextureStore(e,t);case'atomicLoad':return this.builtins.AtomicLoad(e,t);case'atomicStore':return this.builtins.AtomicStore(e,t);case'atomicAdd':return this.builtins.AtomicAdd(e,t);case'atomicSub':return this.builtins.AtomicSub(e,t);case'atomicMax':return this.builtins.AtomicMax(e,t);case'atomicMin':return this.builtins.AtomicMin(e,t);case'atomicAnd':return this.builtins.AtomicAnd(e,t);case'atomicOr':return this.builtins.AtomicOr(e,t);case'atomicXor':return this.builtins.AtomicXor(e,t);case'atomicExchange':return this.builtins.AtomicExchange(e,t);case'atomicCompareExchangeWeak':return this.builtins.AtomicCompareExchangeWeak(e,t);case'pack4x8snorm':return this.builtins.Pack4x8snorm(e,t);case'pack4x8unorm':return this.builtins.Pack4x8unorm(e,t);case'pack4xI8':return this.builtins.Pack4xI8(e,t);case'pack4xU8':return this.builtins.Pack4xU8(e,t);case'pack4x8Clamp':return this.builtins.Pack4x8Clamp(e,t);case'pack4xU8Clamp':return this.builtins.Pack4xU8Clamp(e,t);case'pack2x16snorm':return this.builtins.Pack2x16snorm(e,t);case'pack2x16unorm':return this.builtins.Pack2x16unorm(e,t);case'pack2x16float':return this.builtins.Pack2x16float(e,t);case'unpack4x8snorm':return this.builtins.Unpack4x8snorm(e,t);case'unpack4x8unorm':return this.builtins.Unpack4x8unorm(e,t);case'unpack4xI8':return this.builtins.Unpack4xI8(e,t);case'unpack4xU8':return this.builtins.Unpack4xU8(e,t);case'unpack2x16snorm':return this.builtins.Unpack2x16snorm(e,t);case'unpack2x16unorm':return this.builtins.Unpack2x16unorm(e,t);case'unpack2x16float':return this.builtins.Unpack2x16float(e,t);case'storageBarrier':return this.builtins.StorageBarrier(e,t);case'textureBarrier':return this.builtins.TextureBarrier(e,t);case'workgroupBarrier':return this.builtins.WorkgroupBarrier(e,t);case'workgroupUniformLoad':return this.builtins.WorkgroupUniformLoad(e,t);case'subgroupAdd':return this.builtins.SubgroupAdd(e,t);case'subgroupExclusiveAdd':return this.builtins.SubgroupExclusiveAdd(e,t);case'subgroupInclusiveAdd':return this.builtins.SubgroupInclusiveAdd(e,t);case'subgroupAll':return this.builtins.SubgroupAll(e,t);case'subgroupAnd':return this.builtins.SubgroupAnd(e,t);case'subgroupAny':return this.builtins.SubgroupAny(e,t);case'subgroupBallot':return this.builtins.SubgroupBallot(e,t);case'subgroupBroadcast':return this.builtins.SubgroupBroadcast(e,t);case'subgroupBroadcastFirst':return this.builtins.SubgroupBroadcastFirst(e,t);case'subgroupElect':return this.builtins.SubgroupElect(e,t);case'subgroupMax':return this.builtins.SubgroupMax(e,t);case'subgroupMin':return this.builtins.SubgroupMin(e,t);case'subgroupMul':return this.builtins.SubgroupMul(e,t);case'subgroupExclusiveMul':return this.builtins.SubgroupExclusiveMul(e,t);case'subgroupInclusiveMul':return this.builtins.SubgroupInclusiveMul(e,t);case'subgroupOr':return this.builtins.SubgroupOr(e,t);case'subgroupShuffle':return this.builtins.SubgroupShuffle(e,t);case'subgroupShuffleDown':return this.builtins.SubgroupShuffleDown(e,t);case'subgroupShuffleUp':return this.builtins.SubgroupShuffleUp(e,t);case'subgroupShuffleXor':return this.builtins.SubgroupShuffleXor(e,t);case'subgroupXor':return this.builtins.SubgroupXor(e,t);case'quadBroadcast':return this.builtins.QuadBroadcast(e,t);case'quadSwapDiagonal':return this.builtins.QuadSwapDiagonal(e,t);case'quadSwapX':return this.builtins.QuadSwapX(e,t);case'quadSwapY':return this.builtins.QuadSwapY(e,t)}const n=t.getFunction(e.name);if(n){const s=t.clone();for(let t=0;t<n.node.args.length;++t){const r=n.node.args[t],a=this.evalExpression(e.args[t],s);s.setVariable(r.name,a,r)}return this._execStatements(n.node.body,s)}return null}_callConstructorValue(e,t){if(!e.args||0===e.args.length)return new Oe(0,this.getTypeInfo(e.type));const n=this.evalExpression(e.args[0],t);return n.typeInfo=this.getTypeInfo(e.type),n.getSubData(this,e.postfix,t).clone()}_callConstructorVec(e,t){const n=this.getTypeInfo(e.type),s=e.type.getTypeName(),r=ht[s];if(void 0===r)return console.error(`Invalid vec constructor ${s}. Line ${e.line}`),null;const a=[];if(e instanceof ge)if(e.isVector){const t=e.vectorValue;for(const e of t)a.push(e)}else a.push(e.scalarValue);else if(e.args)for(const n of e.args){const e=this.evalExpression(n,t);if(e instanceof Fe){const t=e.data;for(let e=0;e<t.length;++e){let n=t[e];a.push(n)}}else if(e instanceof Oe){let t=e.value;a.push(t)}}if(e.type instanceof oe&&null===e.type.format&&(e.type.format=oe.f32),0===a.length){const s=new Array(r).fill(0);return new Fe(s,n).getSubData(this,e.postfix,t)}if(1===a.length)for(;a.length<r;)a.push(a[0]);if(a.length<r)return console.error(`Invalid vec constructor. Line ${e.line}`),null;return new Fe(a.length>r?a.slice(0,r):a,n).getSubData(this,e.postfix,t)}_callConstructorMatrix(e,t){const n=this.getTypeInfo(e.type),s=e.type.getTypeName(),r=ft[s];if(void 0===r)return console.error(`Invalid matrix constructor ${s}. Line ${e.line}`),null;const i=[];if(e instanceof ge)if(e.isVector){const t=e.vectorValue;for(const e of t)i.push(e)}else i.push(e.scalarValue);else if(e.args)for(const n of e.args){const e=this.evalExpression(n,t);e instanceof Fe?i.push(...e.data):e instanceof Oe?i.push(e.value):e instanceof Me&&i.push(...e.data)}if(n instanceof a&&null===n.format&&(n.format=this.getTypeInfo('f32')),0===i.length){const s=new Array(r[2]).fill(0);return new Me(s,n).getSubData(this,e.postfix,t)}return i.length!==r[2]?(console.error(`Invalid matrix constructor. Line ${e.line}`),null):new Me(i,n).getSubData(this,e.postfix,t)}}pt._breakObj=new De(new e('BREAK',null),null),pt._continueObj=new De(new e('CONTINUE',null),null),pt._priority=new Map([['f32',0],['f16',1],['u32',2],['i32',3],['x32',3]]);class dt{constructor(){this.constants=new Map,this.aliases=new Map,this.structs=new Map}}class mt{constructor(){this._tokens=[],this._current=0,this._currentLine=1,this._deferArrayCountEval=[],this._currentLoop=[],this._context=new dt,this._exec=new pt,this._forwardTypeCount=0}parse(e){this._initialize(e),this._deferArrayCountEval.length=0;const t=[];for(;!this._isAtEnd();){const e=this._global_decl_or_directive();if(!e)break;t.push(e)}if(this._deferArrayCountEval.length>0){for(const e of this._deferArrayCountEval){const t=e.arrayType,n=e.countNode;if(n instanceof me){const e=n.name,s=this._context.constants.get(e);if(s)try{const e=s.constEvaluate(this._exec);t.count=e}catch(e){}}}this._deferArrayCountEval.length=0}if(this._forwardTypeCount>0)for(const e of t)e.search((e=>{e instanceof Le||e instanceof le?e.type=this._forwardType(e.type):e instanceof ce?e.format=this._forwardType(e.format):e instanceof B||e instanceof M||e instanceof U?e.type=this._forwardType(e.type):e instanceof C?e.returnType=this._forwardType(e.returnType):e instanceof Ee&&(e.type=this._forwardType(e.type))}));return t}_forwardType(e){if(e instanceof ae){const t=this._getType(e.name);if(t)return t}else e instanceof le?e.type=this._forwardType(e.type):e instanceof ce&&(e.format=this._forwardType(e.format));return e}_initialize(e){if(e)if('string'==typeof e){const t=new ze(e);this._tokens=t.scanTokens()}else this._tokens=e;else this._tokens=[];this._current=0}_updateNode(e,t){return e.line=null!=t?t:this._currentLine,e}_error(e,t){return{token:e,message:t,toString:()=>`${t}`}}_isAtEnd(){return this._current>=this._tokens.length||this._peek().type==qe.eof}_match(e){if(e instanceof We)return!!this._check(e)&&(this._advance(),!0);for(let t=0,n=e.length;t<n;++t){const n=e[t];if(this._check(n))return this._advance(),!0}return!1}_consume(e,t){if(this._check(e))return this._advance();throw this._error(this._peek(),`${t}. Line:${this._currentLine}`)}_check(e){if(this._isAtEnd())return!1;const t=this._peek();if(e instanceof Array){const n=t.type;let s=!1;for(const t of e){if(n===t)return!0;t===qe.tokens.name&&(s=!0)}if(s){const e=qe.tokens.name.rule.exec(t.lexeme);if(e&&0==e.index&&e[0]==t.lexeme)return!0}return!1}if(t.type===e)return!0;if(e===qe.tokens.name){const e=qe.tokens.name.rule.exec(t.lexeme);return e&&0==e.index&&e[0]==t.lexeme}return!1}_advance(){var e,t;return this._currentLine=null!==(t=null===(e=this._peek())||void 0===e?void 0:e.line)&&void 0!==t?t:-1,this._isAtEnd()||this._current++,this._previous()}_peek(){return this._tokens[this._current]}_previous(){return this._tokens[this._current-1]}_global_decl_or_directive(){for(;this._match(qe.tokens.semicolon)&&!this._isAtEnd(););if(this._match(qe.keywords.alias)){const e=this._type_alias();return this._consume(qe.tokens.semicolon,'Expected \\';\\''),this._exec.reflection.updateAST([e]),e}if(this._match(qe.keywords.diagnostic)){const e=this._diagnostic();return this._consume(qe.tokens.semicolon,'Expected \\';\\''),this._exec.reflection.updateAST([e]),e}if(this._match(qe.keywords.requires)){const e=this._requires_directive();return this._consume(qe.tokens.semicolon,'Expected \\';\\''),this._exec.reflection.updateAST([e]),e}if(this._match(qe.keywords.enable)){const e=this._enable_directive();return this._consume(qe.tokens.semicolon,'Expected \\';\\''),this._exec.reflection.updateAST([e]),e}const e=this._attribute();if(this._check(qe.keywords.var)){const t=this._global_variable_decl();return null!=t&&(t.attributes=e),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),this._exec.reflection.updateAST([t]),t}if(this._check(qe.keywords.override)){const t=this._override_variable_decl();return null!=t&&(t.attributes=e),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),this._exec.reflection.updateAST([t]),t}if(this._check(qe.keywords.let)){const t=this._global_let_decl();return null!=t&&(t.attributes=e),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),this._exec.reflection.updateAST([t]),t}if(this._check(qe.keywords.const)){const t=this._global_const_decl();return null!=t&&(t.attributes=e),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),this._exec.reflection.updateAST([t]),t}if(this._check(qe.keywords.struct)){const t=this._struct_decl();return null!=t&&(t.attributes=e),this._exec.reflection.updateAST([t]),t}if(this._check(qe.keywords.fn)){const t=this._function_decl();return null!=t&&(t.attributes=e),this._exec.reflection.updateAST([t]),t}return null}_function_decl(){if(!this._match(qe.keywords.fn))return null;const e=this._currentLine,t=this._consume(qe.tokens.ident,'Expected function name.').toString();this._consume(qe.tokens.paren_left,'Expected \\'(\\' for function arguments.');const n=[];if(!this._check(qe.tokens.paren_right))do{if(this._check(qe.tokens.paren_right))break;const e=this._attribute(),t=this._consume(qe.tokens.name,'Expected argument name.').toString();this._consume(qe.tokens.colon,'Expected \\':\\' for argument type.');const s=this._attribute(),r=this._type_decl();null!=r&&(r.attributes=s,n.push(this._updateNode(new Ee(t,r,e))))}while(this._match(qe.tokens.comma));this._consume(qe.tokens.paren_right,'Expected \\')\\' after function arguments.');let s=null;if(this._match(qe.tokens.arrow)){const e=this._attribute();s=this._type_decl(),null!=s&&(s.attributes=e)}const r=this._compound_statement(),a=this._currentLine;return this._updateNode(new C(t,n,s,r,e,a),e)}_compound_statement(){const e=[];for(this._consume(qe.tokens.brace_left,'Expected \\'{\\' for block.');!this._check(qe.tokens.brace_right);){const t=this._statement();null!==t&&e.push(t)}return this._consume(qe.tokens.brace_right,'Expected \\'}\\' for block.'),e}_statement(){for(;this._match(qe.tokens.semicolon)&&!this._isAtEnd(););if(this._check(qe.tokens.attr)&&this._attribute(),this._check(qe.keywords.if))return this._if_statement();if(this._check(qe.keywords.switch))return this._switch_statement();if(this._check(qe.keywords.loop))return this._loop_statement();if(this._check(qe.keywords.for))return this._for_statement();if(this._check(qe.keywords.while))return this._while_statement();if(this._check(qe.keywords.continuing))return this._continuing_statement();if(this._check(qe.keywords.static_assert))return this._static_assert_statement();if(this._check(qe.tokens.brace_left))return this._compound_statement();let e=null;if(this._check(qe.keywords.return))e=this._return_statement();else if(this._check([qe.keywords.var,qe.keywords.let,qe.keywords.const]))e=this._variable_statement();else if(this._match(qe.keywords.discard))e=this._updateNode(new te);else if(this._match(qe.keywords.break)){const t=this._updateNode(new ne);if(this._currentLoop.length>0){const e=this._currentLoop[this._currentLoop.length-1];t.loopId=e.id}e=t,this._check(qe.keywords.if)&&(this._advance(),t.condition=this._optional_paren_expression())}else if(this._match(qe.keywords.continue)){const t=this._updateNode(new se);if(!(this._currentLoop.length>0))throw this._error(this._peek(),`Continue statement must be inside a loop. Line: ${t.line}`);{const e=this._currentLoop[this._currentLoop.length-1];t.loopId=e.id}e=t}else e=this._increment_decrement_statement()||this._func_call_statement()||this._assignment_statement();return null!=e&&this._consume(qe.tokens.semicolon,'Expected \\';\\' after statement.'),e}_static_assert_statement(){if(!this._match(qe.keywords.static_assert))return null;const e=this._currentLine,t=this._optional_paren_expression();return this._updateNode(new D(t),e)}_while_statement(){if(!this._match(qe.keywords.while))return null;const e=this._updateNode(new N(null,null));return this._currentLoop.push(e),e.condition=this._optional_paren_expression(),this._check(qe.tokens.attr)&&this._attribute(),e.body=this._compound_statement(),this._currentLoop.pop(),e}_continuing_statement(){const e=this._currentLoop.length>0?this._currentLoop[this._currentLoop.length-1].id:-1;if(!this._match(qe.keywords.continuing))return null;const t=this._currentLine,n=this._compound_statement();return this._updateNode(new V(n,e),t)}_for_statement(){if(!this._match(qe.keywords.for))return null;this._consume(qe.tokens.paren_left,'Expected \\'(\\'.');const e=this._updateNode(new O(null,null,null,null));return this._currentLoop.push(e),e.init=this._check(qe.tokens.semicolon)?null:this._for_init(),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),e.condition=this._check(qe.tokens.semicolon)?null:this._short_circuit_or_expression(),this._consume(qe.tokens.semicolon,'Expected \\';\\'.'),e.increment=this._check(qe.tokens.paren_right)?null:this._for_increment(),this._consume(qe.tokens.paren_right,'Expected \\')\\'.'),this._check(qe.tokens.attr)&&this._attribute(),e.body=this._compound_statement(),this._currentLoop.pop(),e}_for_init(){return this._variable_statement()||this._func_call_statement()||this._assignment_statement()}_for_increment(){return this._func_call_statement()||this._increment_decrement_statement()||this._assignment_statement()}_variable_statement(){if(this._check(qe.keywords.var)){const e=this._variable_decl();if(null===e)throw this._error(this._peek(),'Variable declaration expected.');let t=null;return this._match(qe.tokens.equal)&&(t=this._short_circuit_or_expression()),this._updateNode(new B(e.name,e.type,e.storage,e.access,t),e.line)}if(this._match(qe.keywords.let)){const e=this._currentLine,t=this._consume(qe.tokens.name,'Expected name for let.').toString();let n=null;if(this._match(qe.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e)}this._consume(qe.tokens.equal,'Expected \\'=\\' for let.');const s=this._short_circuit_or_expression();return this._updateNode(new M(t,n,null,null,s),e)}if(this._match(qe.keywords.const)){const e=this._currentLine,t=this._consume(qe.tokens.name,'Expected name for const.').toString();let n=null;if(this._match(qe.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e)}this._consume(qe.tokens.equal,'Expected \\'=\\' for const.');const s=this._short_circuit_or_expression();return null===n&&s instanceof ge&&(n=s.type),this._updateNode(new U(t,n,null,null,s),e)}return null}_increment_decrement_statement(){const e=this._current,t=this._unary_expression();if(null==t)return null;if(!this._check(qe.increment_operators))return this._current=e,null;const n=this._consume(qe.increment_operators,'Expected increment operator');return this._updateNode(new z(n.type===qe.tokens.plus_plus?P.increment:P.decrement,t))}_assignment_statement(){let e=null;const t=this._currentLine;if(this._check(qe.tokens.brace_right))return null;let n=this._match(qe.tokens.underscore);if(n||(e=this._unary_expression()),!n&&null==e)return null;const s=this._consume(qe.assignment_operators,'Expected assignment operator.'),r=this._short_circuit_or_expression();return this._updateNode(new R(W.parse(s.lexeme),e,r),t)}_func_call_statement(){if(!this._check(qe.tokens.ident))return null;const e=this._currentLine,t=this._current,n=this._consume(qe.tokens.ident,'Expected function name.'),s=this._argument_expression_list();return null===s?(this._current=t,null):this._updateNode(new G(n.lexeme,s),e)}_loop_statement(){if(!this._match(qe.keywords.loop))return null;this._check(qe.tokens.attr)&&this._attribute(),this._consume(qe.tokens.brace_left,'Expected \\'{\\' for loop.');const e=this._updateNode(new X([],null));this._currentLoop.push(e);let t=this._statement();for(;null!==t;){if(Array.isArray(t))for(let n of t)e.body.push(n);else e.body.push(t);if(t instanceof V){e.continuing=t;break}t=this._statement()}return this._currentLoop.pop(),this._consume(qe.tokens.brace_right,'Expected \\'}\\' for loop.'),e}_switch_statement(){if(!this._match(qe.keywords.switch))return null;const e=this._updateNode(new j(null,[]));if(this._currentLoop.push(e),e.condition=this._optional_paren_expression(),this._check(qe.tokens.attr)&&this._attribute(),this._consume(qe.tokens.brace_left,'Expected \\'{\\' for switch.'),e.cases=this._switch_body(),null==e.cases||0==e.cases.length)throw this._error(this._previous(),'Expected \\'case\\' or \\'default\\'.');return this._consume(qe.tokens.brace_right,'Expected \\'}\\' for switch.'),this._currentLoop.pop(),e}_switch_body(){const e=[];let t=!1;for(;this._check([qe.keywords.default,qe.keywords.case]);){if(this._match(qe.keywords.case)){const n=this._case_selectors();for(const e of n)if(e instanceof Te){if(t)throw this._error(this._previous(),'Multiple default cases in switch statement.');t=!0;break}this._match(qe.tokens.colon),this._check(qe.tokens.attr)&&this._attribute(),this._consume(qe.tokens.brace_left,'Exected \\'{\\' for switch case.');const s=this._case_body();this._consume(qe.tokens.brace_right,'Exected \\'}\\' for switch case.'),e.push(this._updateNode(new Se(n,s)))}if(this._match(qe.keywords.default)){if(t)throw this._error(this._previous(),'Multiple default cases in switch statement.');this._match(qe.tokens.colon),this._check(qe.tokens.attr)&&this._attribute(),this._consume(qe.tokens.brace_left,'Exected \\'{\\' for switch default.');const n=this._case_body();this._consume(qe.tokens.brace_right,'Exected \\'}\\' for switch default.'),e.push(this._updateNode(new Ae(n)))}}return e}_case_selectors(){const e=[];for(this._match(qe.keywords.default)?e.push(this._updateNode(new Te)):e.push(this._shift_expression());this._match(qe.tokens.comma);)this._match(qe.keywords.default)?e.push(this._updateNode(new Te)):e.push(this._shift_expression());return e}_case_body(){if(this._match(qe.keywords.fallthrough))return this._consume(qe.tokens.semicolon,'Expected \\';\\''),[];let e=this._statement();if(null==e)return[];e instanceof Array||(e=[e]);const t=this._case_body();return 0==t.length?e:[...e,t[0]]}_if_statement(){if(!this._match(qe.keywords.if))return null;const e=this._currentLine,t=this._optional_paren_expression();this._check(qe.tokens.attr)&&this._attribute();const n=this._compound_statement();let s=[];this._match_elseif()&&(this._check(qe.tokens.attr)&&this._attribute(),s=this._elseif_statement(s));let r=null;return this._match(qe.keywords.else)&&(this._check(qe.tokens.attr)&&this._attribute(),r=this._compound_statement()),this._updateNode(new Z(t,n,s,r),e)}_match_elseif(){return this._tokens[this._current].type===qe.keywords.else&&this._tokens[this._current+1].type===qe.keywords.if&&(this._advance(),this._advance(),!0)}_elseif_statement(e=[]){const t=this._optional_paren_expression(),n=this._compound_statement();return e.push(this._updateNode(new $e(t,n))),this._match_elseif()&&(this._check(qe.tokens.attr)&&this._attribute(),this._elseif_statement(e)),e}_return_statement(){if(!this._match(qe.keywords.return))return null;const e=this._short_circuit_or_expression();return this._updateNode(new Q(e))}_short_circuit_or_expression(){let e=this._short_circuit_and_expr();for(;this._match(qe.tokens.or_or);)e=this._updateNode(new ke(this._previous().toString(),e,this._short_circuit_and_expr()));return e}_short_circuit_and_expr(){let e=this._inclusive_or_expression();for(;this._match(qe.tokens.and_and);)e=this._updateNode(new ke(this._previous().toString(),e,this._inclusive_or_expression()));return e}_inclusive_or_expression(){let e=this._exclusive_or_expression();for(;this._match(qe.tokens.or);)e=this._updateNode(new ke(this._previous().toString(),e,this._exclusive_or_expression()));return e}_exclusive_or_expression(){let e=this._and_expression();for(;this._match(qe.tokens.xor);)e=this._updateNode(new ke(this._previous().toString(),e,this._and_expression()));return e}_and_expression(){let e=this._equality_expression();for(;this._match(qe.tokens.and);)e=this._updateNode(new ke(this._previous().toString(),e,this._equality_expression()));return e}_equality_expression(){const e=this._relational_expression();return this._match([qe.tokens.equal_equal,qe.tokens.not_equal])?this._updateNode(new ke(this._previous().toString(),e,this._relational_expression())):e}_relational_expression(){let e=this._shift_expression();for(;this._match([qe.tokens.less_than,qe.tokens.greater_than,qe.tokens.less_than_equal,qe.tokens.greater_than_equal]);)e=this._updateNode(new ke(this._previous().toString(),e,this._shift_expression()));return e}_shift_expression(){let e=this._additive_expression();for(;this._match([qe.tokens.shift_left,qe.tokens.shift_right]);)e=this._updateNode(new ke(this._previous().toString(),e,this._additive_expression()));return e}_additive_expression(){let e=this._multiplicative_expression();for(;this._match([qe.tokens.plus,qe.tokens.minus]);)e=this._updateNode(new ke(this._previous().toString(),e,this._multiplicative_expression()));return e}_multiplicative_expression(){let e=this._unary_expression();for(;this._match([qe.tokens.star,qe.tokens.forward_slash,qe.tokens.modulo]);)e=this._updateNode(new ke(this._previous().toString(),e,this._unary_expression()));return e}_unary_expression(){return this._match([qe.tokens.minus,qe.tokens.bang,qe.tokens.tilde,qe.tokens.star,qe.tokens.and])?this._updateNode(new we(this._previous().toString(),this._unary_expression())):this._singular_expression()}_singular_expression(){const e=this._primary_expression(),t=this._postfix_expression();return t&&(e.postfix=t),e}_postfix_expression(){if(this._match(qe.tokens.bracket_left)){const e=this._short_circuit_or_expression();this._consume(qe.tokens.bracket_right,'Expected \\']\\'.');const t=this._updateNode(new be(e)),n=this._postfix_expression();return n&&(t.postfix=n),t}if(this._match(qe.tokens.period)){const e=this._consume(qe.tokens.name,'Expected member name.'),t=this._postfix_expression(),n=this._updateNode(new fe(e.lexeme));return t&&(n.postfix=t),n}return null}_getStruct(e){if(this._context.aliases.has(e)){return this._context.aliases.get(e).type}if(this._context.structs.has(e)){return this._context.structs.get(e)}return null}_getType(e){const t=this._getStruct(e);if(null!==t)return t;switch(e){case'void':return re.void;case'bool':return re.bool;case'i32':return re.i32;case'u32':return re.u32;case'f32':return re.f32;case'f16':return re.f16;case'vec2f':return oe.vec2f;case'vec3f':return oe.vec3f;case'vec4f':return oe.vec4f;case'vec2i':return oe.vec2i;case'vec3i':return oe.vec3i;case'vec4i':return oe.vec4i;case'vec2u':return oe.vec2u;case'vec3u':return oe.vec3u;case'vec4u':return oe.vec4u;case'vec2h':return oe.vec2h;case'vec3h':return oe.vec3h;case'vec4h':return oe.vec4h;case'mat2x2f':return oe.mat2x2f;case'mat2x3f':return oe.mat2x3f;case'mat2x4f':return oe.mat2x4f;case'mat3x2f':return oe.mat3x2f;case'mat3x3f':return oe.mat3x3f;case'mat3x4f':return oe.mat3x4f;case'mat4x2f':return oe.mat4x2f;case'mat4x3f':return oe.mat4x3f;case'mat4x4f':return oe.mat4x4f;case'mat2x2h':return oe.mat2x2h;case'mat2x3h':return oe.mat2x3h;case'mat2x4h':return oe.mat2x4h;case'mat3x2h':return oe.mat3x2h;case'mat3x3h':return oe.mat3x3h;case'mat3x4h':return oe.mat3x4h;case'mat4x2h':return oe.mat4x2h;case'mat4x3h':return oe.mat4x3h;case'mat4x4h':return oe.mat4x4h;case'mat2x2i':return oe.mat2x2i;case'mat2x3i':return oe.mat2x3i;case'mat2x4i':return oe.mat2x4i;case'mat3x2i':return oe.mat3x2i;case'mat3x3i':return oe.mat3x3i;case'mat3x4i':return oe.mat3x4i;case'mat4x2i':return oe.mat4x2i;case'mat4x3i':return oe.mat4x3i;case'mat4x4i':return oe.mat4x4i;case'mat2x2u':return oe.mat2x2u;case'mat2x3u':return oe.mat2x3u;case'mat2x4u':return oe.mat2x4u;case'mat3x2u':return oe.mat3x2u;case'mat3x3u':return oe.mat3x3u;case'mat3x4u':return oe.mat3x4u;case'mat4x2u':return oe.mat4x2u;case'mat4x3u':return oe.mat4x3u;case'mat4x4u':return oe.mat4x4u}return null}_validateTypeRange(e,t){if('i32'===t.name){if(e<-2147483648||e>2147483647)throw this._error(this._previous(),`Value out of range for i32: ${e}. Line: ${this._currentLine}.`)}else if('u32'===t.name&&(e<0||e>4294967295))throw this._error(this._previous(),`Value out of range for u32: ${e}. Line: ${this._currentLine}.`)}_primary_expression(){if(this._match(qe.tokens.ident)){const e=this._previous().toString();if(this._check(qe.tokens.paren_left)){const t=this._argument_expression_list(),n=this._getType(e);return null!==n?this._updateNode(new pe(n,t)):this._updateNode(new de(e,t))}if(this._context.constants.has(e)){const t=this._context.constants.get(e);return this._updateNode(new _e(e,t.value))}return this._updateNode(new me(e))}if(this._match(qe.tokens.int_literal)){const e=this._previous().toString();let t=e.endsWith('i')||e.endsWith('i')?re.i32:e.endsWith('u')||e.endsWith('U')?re.u32:re.x32;const n=parseInt(e);return this._validateTypeRange(n,t),this._updateNode(new ge(new Oe(n,this._exec.getTypeInfo(t)),t))}if(this._match(qe.tokens.uint_literal)){const e=parseInt(this._previous().toString());return this._validateTypeRange(e,re.u32),this._updateNode(new ge(new Oe(e,this._exec.getTypeInfo(re.u32)),re.u32))}if(this._match([qe.tokens.decimal_float_literal,qe.tokens.hex_float_literal])){let e=this._previous().toString(),t=e.endsWith('h');t&&(e=e.substring(0,e.length-1));const n=parseFloat(e);this._validateTypeRange(n,t?re.f16:re.f32);const s=t?re.f16:re.f32;return this._updateNode(new ge(new Oe(n,this._exec.getTypeInfo(s)),s))}if(this._match([qe.keywords.true,qe.keywords.false])){let e=this._previous().toString()===qe.keywords.true.rule;return this._updateNode(new ge(new Oe(e?1:0,this._exec.getTypeInfo(re.bool)),re.bool))}if(this._check(qe.tokens.paren_left))return this._paren_expression();if(this._match(qe.keywords.bitcast)){this._consume(qe.tokens.less_than,'Expected \\'<\\'.');const e=this._type_decl();this._consume(qe.tokens.greater_than,'Expected \\'>\\'.');const t=this._paren_expression();return this._updateNode(new xe(e,t))}const e=this._type_decl(),t=this._argument_expression_list();return this._updateNode(new pe(e,t))}_argument_expression_list(){if(!this._match(qe.tokens.paren_left))return null;const e=[];do{if(this._check(qe.tokens.paren_right))break;const t=this._short_circuit_or_expression();e.push(t)}while(this._match(qe.tokens.comma));return this._consume(qe.tokens.paren_right,'Expected \\')\\' for agument list'),e}_optional_paren_expression(){this._match(qe.tokens.paren_left);const e=this._short_circuit_or_expression();return this._match(qe.tokens.paren_right),e}_paren_expression(){this._consume(qe.tokens.paren_left,'Expected \\'(\\'.');const e=this._short_circuit_or_expression();return this._consume(qe.tokens.paren_right,'Expected \\')\\'.'),e}_struct_decl(){if(!this._match(qe.keywords.struct))return null;const e=this._currentLine,t=this._consume(qe.tokens.ident,'Expected name for struct.').toString();this._consume(qe.tokens.brace_left,'Expected \\'{\\' for struct body.');const n=[];for(;!this._check(qe.tokens.brace_right);){const e=this._attribute(),t=this._consume(qe.tokens.name,'Expected variable name.').toString();this._consume(qe.tokens.colon,'Expected \\':\\' for struct member type.');const s=this._attribute(),r=this._type_decl();null!=r&&(r.attributes=s),this._check(qe.tokens.brace_right)?this._match(qe.tokens.comma):this._consume(qe.tokens.comma,'Expected \\',\\' for struct member.'),n.push(this._updateNode(new Le(t,r,e)))}this._consume(qe.tokens.brace_right,'Expected \\'}\\' after struct body.');const s=this._currentLine,r=this._updateNode(new ie(t,n,e,s),e);return this._context.structs.set(t,r),r}_global_variable_decl(){const e=this._variable_decl();if(!e)return null;if(this._match(qe.tokens.equal)){const t=this._const_expression();e.value=t}if(null!==e.type&&e.value instanceof ge){if('x32'!==e.value.type.name){if(e.type.getTypeName()!==e.value.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${e.value.type.name} to ${e.type.name}. Line:${this._currentLine}`)}e.value.isScalar&&this._validateTypeRange(e.value.scalarValue,e.type),e.value.type=e.type}else null===e.type&&e.value instanceof ge&&(e.type='x32'===e.value.type.name?re.i32:e.value.type,e.value.isScalar&&this._validateTypeRange(e.value.scalarValue,e.type));return e}_override_variable_decl(){const e=this._override_decl();return e&&this._match(qe.tokens.equal)&&(e.value=this._const_expression()),e}_global_const_decl(){var e;if(!this._match(qe.keywords.const))return null;const t=this._consume(qe.tokens.name,'Expected variable name'),n=this._currentLine;let s=null;if(this._match(qe.tokens.colon)){const e=this._attribute();s=this._type_decl(),null!=s&&(s.attributes=e)}let r=null;this._consume(qe.tokens.equal,'const declarations require an assignment');const i=this._short_circuit_or_expression();try{let e=[re.f32],n=i.constEvaluate(this._exec,e);n instanceof Oe&&this._validateTypeRange(n.value,e[0]),e[0]instanceof oe&&null===e[0].format&&n.typeInfo instanceof a&&null!==n.typeInfo.format&&('f16'===n.typeInfo.format.name?e[0].format=re.f16:'f32'===n.typeInfo.format.name?e[0].format=re.f32:'i32'===n.typeInfo.format.name?e[0].format=re.i32:'u32'===n.typeInfo.format.name?e[0].format=re.u32:'bool'===n.typeInfo.format.name?e[0].format=re.bool:console.error(`TODO: impelement template format type ${n.typeInfo.format.name}`)),r=this._updateNode(new ge(n,e[0])),this._exec.context.setVariable(t.toString(),n)}catch(e){r=i}if(null!==s&&r instanceof ge){if('x32'!==r.type.name){if(s.getTypeName()!==r.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${r.type.name} to ${s.name}. Line:${this._currentLine}`)}r.type=s,r.isScalar&&this._validateTypeRange(r.scalarValue,r.type)}else null===s&&r instanceof ge&&(s=null!==(e=null==r?void 0:r.type)&&void 0!==e?e:re.f32,s===re.x32&&(s=re.i32));const o=this._updateNode(new U(t.toString(),s,'','',r),n);return this._context.constants.set(o.name,o),o}_global_let_decl(){if(!this._match(qe.keywords.let))return null;const e=this._currentLine,t=this._consume(qe.tokens.name,'Expected variable name');let n=null;if(this._match(qe.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e)}let s=null;if(this._match(qe.tokens.equal)&&(s=this._const_expression()),null!==n&&s instanceof ge){if('x32'!==s.type.name){if(n.getTypeName()!==s.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${s.type.name} to ${n.name}. Line:${this._currentLine}`)}s.type=n}else null===n&&s instanceof ge&&(n='x32'===s.type.name?re.i32:s.type);return s instanceof ge&&s.isScalar&&this._validateTypeRange(s.scalarValue,n),this._updateNode(new M(t.toString(),n,'','',s),e)}_const_expression(){return this._short_circuit_or_expression()}_variable_decl(){if(!this._match(qe.keywords.var))return null;const e=this._currentLine;let t='',n='';this._match(qe.tokens.less_than)&&(t=this._consume(qe.storage_class,'Expected storage_class.').toString(),this._match(qe.tokens.comma)&&(n=this._consume(qe.access_mode,'Expected access_mode.').toString()),this._consume(qe.tokens.greater_than,'Expected \\'>\\'.'));const s=this._consume(qe.tokens.name,'Expected variable name');let r=null;if(this._match(qe.tokens.colon)){const e=this._attribute();r=this._type_decl(),null!=r&&(r.attributes=e)}return this._updateNode(new B(s.toString(),r,t,n,null),e)}_override_decl(){if(!this._match(qe.keywords.override))return null;const e=this._consume(qe.tokens.name,'Expected variable name');let t=null;if(this._match(qe.tokens.colon)){const e=this._attribute();t=this._type_decl(),null!=t&&(t.attributes=e)}return this._updateNode(new F(e.toString(),t,null))}_diagnostic(){this._consume(qe.tokens.paren_left,'Expected \\'(\\'');const e=this._consume(qe.tokens.ident,'Expected severity control name.');this._consume(qe.tokens.comma,'Expected \\',\\'');let t=this._consume(qe.tokens.ident,'Expected diagnostic rule name.').toString();if(this._match(qe.tokens.period)){t+=`.${this._consume(qe.tokens.ident,'Expected diagnostic message.').toString()}`}return this._consume(qe.tokens.paren_right,'Expected \\')\\''),this._updateNode(new J(e.toString(),t))}_enable_directive(){const e=this._consume(qe.tokens.ident,'identity expected.');return this._updateNode(new Y(e.toString()))}_requires_directive(){const e=[this._consume(qe.tokens.ident,'identity expected.').toString()];for(;this._match(qe.tokens.comma);){const t=this._consume(qe.tokens.ident,'identity expected.');e.push(t.toString())}return this._updateNode(new K(e))}_type_alias(){const e=this._consume(qe.tokens.ident,'identity expected.');this._consume(qe.tokens.equal,'Expected \\'=\\' for type alias.');let t=this._type_decl();if(null===t)throw this._error(this._peek(),'Expected Type for Alias.');this._context.aliases.has(t.name)&&(t=this._context.aliases.get(t.name).type);const n=this._updateNode(new ee(e.toString(),t));return this._context.aliases.set(n.name,n),n}_type_decl(){if(this._check([qe.tokens.ident,...qe.texel_format,qe.keywords.bool,qe.keywords.f32,qe.keywords.i32,qe.keywords.u32])){const e=this._advance().toString();if(this._context.structs.has(e))return this._context.structs.get(e);if(this._context.aliases.has(e))return this._context.aliases.get(e).type;if(!this._getType(e)){const t=this._updateNode(new ae(e));return this._forwardTypeCount++,t}return this._updateNode(new re(e))}let e=this._texture_sampler_types();if(e)return e;if(this._check(qe.template_types)){let e=this._advance().toString(),t=null,n=null;this._match(qe.tokens.less_than)&&(t=this._type_decl(),n=null,this._match(qe.tokens.comma)&&(n=this._consume(qe.access_mode,'Expected access_mode for pointer').toString()),this._consume(qe.tokens.greater_than,'Expected \\'>\\' for type.'));return this._updateNode(new oe(e,t,n))}if(this._match(qe.keywords.ptr)){let e=this._previous().toString();this._consume(qe.tokens.less_than,'Expected \\'<\\' for pointer.');const t=this._consume(qe.storage_class,'Expected storage_class for pointer');this._consume(qe.tokens.comma,'Expected \\',\\' for pointer.');const n=this._type_decl();let s=null;this._match(qe.tokens.comma)&&(s=this._consume(qe.access_mode,'Expected access_mode for pointer').toString()),this._consume(qe.tokens.greater_than,'Expected \\'>\\' for pointer.');return this._updateNode(new le(e,t.toString(),n,s))}const t=this._attribute();if(this._match(qe.keywords.array)){let e=null,n=-1;const s=this._previous();let r=null;if(this._match(qe.tokens.less_than)){e=this._type_decl(),this._context.aliases.has(e.name)&&(e=this._context.aliases.get(e.name).type);let t='';if(this._match(qe.tokens.comma)){r=this._shift_expression();try{t=r.constEvaluate(this._exec).toString(),r=null}catch(e){t='1'}}this._consume(qe.tokens.greater_than,'Expected \\'>\\' for array.'),n=t?parseInt(t):0}const a=this._updateNode(new ce(s.toString(),t,e,n));return r&&this._deferArrayCountEval.push({arrayType:a,countNode:r}),a}return null}_texture_sampler_types(){if(this._match(qe.sampler_type))return this._updateNode(new ue(this._previous().toString(),null,null));if(this._match(qe.depth_texture_type))return this._updateNode(new ue(this._previous().toString(),null,null));if(this._match(qe.sampled_texture_type)||this._match(qe.multisampled_texture_type)){const e=this._previous();this._consume(qe.tokens.less_than,'Expected \\'<\\' for sampler type.');const t=this._type_decl();return this._consume(qe.tokens.greater_than,'Expected \\'>\\' for sampler type.'),this._updateNode(new ue(e.toString(),t,null))}if(this._match(qe.storage_texture_type)){const e=this._previous();this._consume(qe.tokens.less_than,'Expected \\'<\\' for sampler type.');const t=this._consume(qe.texel_format,'Invalid texel format.').toString();this._consume(qe.tokens.comma,'Expected \\',\\' after texel format.');const n=this._consume(qe.access_mode,'Expected access mode for storage texture type.').toString();return this._consume(qe.tokens.greater_than,'Expected \\'>\\' for sampler type.'),this._updateNode(new ue(e.toString(),t,n))}return null}_attribute(){let e=[];for(;this._match(qe.tokens.attr);){const t=this._consume(qe.attribute_name,'Expected attribute name'),n=this._updateNode(new Ce(t.toString(),null));if(this._match(qe.tokens.paren_left)){if(n.value=this._consume(qe.literal_or_ident,'Expected attribute value').toString(),this._check(qe.tokens.comma)){this._advance();do{const e=this._consume(qe.literal_or_ident,'Expected attribute value').toString();n.value instanceof Array||(n.value=[n.value]),n.value.push(e)}while(this._match(qe.tokens.comma))}this._consume(qe.tokens.paren_right,'Expected \\')\\'')}e.push(n)}return 0==e.length?null:e}}class _t extends rt{constructor(e){super(),e&&this.update(e)}update(e){const t=(new mt).parse(e);this.updateAST(t)}}class gt{get line(){return-1}}class xt extends gt{constructor(e){super(),this.node=e}get line(){return this.node.line}}class yt extends gt{constructor(e,t){super(),this.node=e,this.statement=t}get line(){return this.statement.line}}class bt extends gt{constructor(e){super(),this.id=e}}class vt extends gt{constructor(e){super(),this.id=e}}class wt extends gt{constructor(e,t){super(),this.id=e,this.node=t}get line(){return this.node.line}}class kt extends gt{constructor(e,t,n){super(),this.id=e,this.condition=t,this.node=n}get line(){return this.node.line}}class It extends gt{constructor(e,t,n){super(),this.lineNo=-1,this.condition=e,this.position=t,this.lineNo=n}get line(){var e,t;return null!==(t=null===(e=this.condition)||void 0===e?void 0:e.line)&&void 0!==t?t:this.lineNo}}class Tt extends gt{constructor(e){super(),this.statements=[],this.statements=e}get line(){return this.statements.length>0?this.statements[0].line:-1}}class St{constructor(e,t){this.parent=null,this.commands=[],this.current=0,this.parentCallExpr=null,this.context=e,this.parent=null!=t?t:null}get isAtEnd(){return this.current>=this.commands.length}getNextCommand(){if(this.current>=this.commands.length)return null;const e=this.commands[this.current];return this.current++,e}getCurrentCommand(){return this.current>=this.commands.length?null:this.commands[this.current]}}class At{constructor(){this.states=[]}get isEmpty(){return 0==this.states.length}get last(){var e;return null!==(e=this.states[this.states.length-1])&&void 0!==e?e:null}pop(){this.states.pop()}}class Et{constructor(e,t){this._runTimer=null,this.breakpoints=new Set,this.runStateCallback=null,this._code=e;const n=(new mt).parse(e);this._exec=new pt(n),this.runStateCallback=null!=t?t:null}getVariableValue(e){var t,n;const s=null!==(n=null===(t=this.context.getVariable(e))||void 0===t?void 0:t.value)&&void 0!==n?n:null;return null===s?null:s instanceof Oe?s.value:s instanceof Fe||s instanceof Me?Array.from(s.data):(console.error(`Unsupported return variable type ${s.typeInfo.name}`),null)}reset(){this._exec=new pt(this._exec.ast),this.startDebug()}startDebug(){this._execStack=new At;const e=this._createState(this._exec.ast,this._exec.context);this._execStack.states.push(e)}get context(){const e=this.currentState;return null===e?this._exec.context:e.context}get currentState(){for(;;){if(this._execStack.isEmpty)return null;let e=this._execStack.last;if(null===e)return null;if(e.isAtEnd){if(this._execStack.pop(),this._execStack.isEmpty)return null;e=this._execStack.last}return e}}get currentCommand(){for(;;){if(this._execStack.isEmpty)return null;let e=this._execStack.last;if(null===e)return null;if(e.isAtEnd){if(this._execStack.pop(),this._execStack.isEmpty)return null;e=this._execStack.last}const t=e.getCurrentCommand();if(null!==t)return t}}toggleBreakpoint(e){this.breakpoints.has(e)?this.breakpoints.delete(e):this.breakpoints.add(e)}clearBreakpoints(){this.breakpoints.clear()}get isRunning(){return null!==this._runTimer}run(){this.isRunning||(this._runTimer=setInterval((()=>{const e=this.currentCommand;if(e&&this.breakpoints.has(e.line))return clearInterval(this._runTimer),this._runTimer=null,void(null!==this.runStateCallback&&this.runStateCallback());this.stepNext(!0)||(clearInterval(this._runTimer),this._runTimer=null,null!==this.runStateCallback&&this.runStateCallback())}),0),null!==this.runStateCallback&&this.runStateCallback())}pause(){null!==this._runTimer&&(clearInterval(this._runTimer),this._runTimer=null,null!==this.runStateCallback&&this.runStateCallback())}_setOverrides(e,t){for(const n in e){const s=e[n],r=this._exec.reflection.getOverrideInfo(n);null!==r?(null===r.type&&(r.type=this._exec.getTypeInfo('u32')),'u32'===r.type.name||'i32'===r.type.name||'f32'===r.type.name||'f16'===r.type.name?t.setVariable(n,new Oe(s,r.type)):'bool'===r.type.name?t.setVariable(n,new Oe(s?1:0,r.type)):'vec2'===r.type.name||'vec3'===r.type.name||'vec4'===r.type.name||'vec2f'===r.type.name||'vec3f'===r.type.name||'vec4f'===r.type.name||'vec2i'===r.type.name||'vec3i'===r.type.name||'vec4i'===r.type.name||'vec2u'===r.type.name||'vec3u'===r.type.name||'vec4u'===r.type.name||'vec2h'===r.type.name||'vec3h'===r.type.name||'vec4h'===r.type.name?t.setVariable(n,new Fe(s,r.type)):console.error(`Invalid constant type for ${n}`)):console.error(`Override ${n} does not exist in the shader.`)}}debugWorkgroup(e,t,n,s,r){this._execStack=new At;const a=this._exec.context;a.currentFunctionName=e,this._dispatchId=t,(r=null!=r?r:{}).constants&&this._setOverrides(r.constants,a),this._exec._execStatements(this._exec.ast,a);const i=a.getFunction(e);if(!i)return console.error(`Function ${e} not found`),!1;if('number'==typeof n)n=[n,1,1];else{if(0===n.length)return console.error('Invalid dispatch count'),!1;1===n.length?n=[n[0],1,1]:2===n.length?n=[n[0],n[1],1]:n.length>3&&(n=[n[0],n[1],n[2]])}const o=n[2],l=n[1],c=n[0],u=this._exec.typeInfo.vec3u;a.setVariable('@num_workgroups',new Fe(n,u));for(const e in s)for(const t in s[e]){const n=s[e][t];a.variables.forEach((s=>{var r;const a=s.node;if(null==a?void 0:a.attributes){let i=null,o=null;for(const e of a.attributes)'binding'===e.name?i=e.value:'group'===e.name&&(o=e.value);if(t==i&&e==o)if(void 0!==n.texture&&void 0!==n.descriptor){const e=new Pe(n.texture,this._exec.getTypeInfo(a.type),n.descriptor,null!==(r=n.texture.view)&&void 0!==r?r:null);s.value=e}else void 0!==n.uniform?s.value=new Ue(n.uniform,this._exec.getTypeInfo(a.type)):s.value=new Ue(n,this._exec.getTypeInfo(a.type))}}))}let h=!1;for(let e=0;e<o&&!h;++e)for(let t=0;t<l&&!h;++t)for(let n=0;n<c&&!h;++n)if(a.setVariable('@workgroup_id',new Fe([n,t,e],u)),this._dispatchWorkgroup(i,[n,t,e],a)){h=!0;break}return h}_shouldExecuteNextCommand(){const e=this.currentCommand;if(null===e)return!1;if(e instanceof It){if(null===e.condition)return!0}else if(e instanceof bt||e instanceof vt)return!0;return!1}stepInto(){this.isRunning||this.stepNext(!0)}stepOver(){this.isRunning||this.stepNext(!1)}stepOut(){const e=this.currentState;if(null===e)return;const t=e.parent;this.isRunning&&(clearInterval(this._runTimer),this._runTimer=null),this._runTimer=setInterval((()=>{const e=this.currentCommand;if(e&&this.breakpoints.has(e.line))return clearInterval(this._runTimer),this._runTimer=null,void(null!==this.runStateCallback&&this.runStateCallback());this.stepNext(!0)||(clearInterval(this._runTimer),this._runTimer=null,null!==this.runStateCallback&&this.runStateCallback());this.currentState===t&&(clearInterval(this._runTimer),this._runTimer=null,null!==this.runStateCallback&&this.runStateCallback())}),0),null!==this.runStateCallback&&this.runStateCallback()}stepNext(e=!0){if(!this._execStack){this._execStack=new At;const e=this._createState(this._exec.ast,this._exec.context);this._execStack.states.push(e)}for(;;){if(this._execStack.isEmpty)return!1;let t=this._execStack.last;if(null===t)return!1;if(t.isAtEnd){if(this._execStack.pop(),this._execStack.isEmpty)return!1;t=this._execStack.last}const n=t.getNextCommand();if(null!==n){if(e&&n instanceof yt){const e=n.node,s=t.context.getFunction(e.name);if(!s)continue;const r=this._createState(s.node.body,t.context.clone(),t);for(let t=0;t<s.node.args.length;++t){const n=s.node.args[t],a=this._exec.evalExpression(e.args[t],r.context);r.context.createVariable(n.name,a,n)}if(r.parentCallExpr=e,this._execStack.states.push(r),r.context.currentFunctionName=s.name,this._shouldExecuteNextCommand())continue;return!0}if(n instanceof xt){const s=n.node;if(e&&s instanceof G){const e=t.context.getFunction(s.name);if(e){const n=this._createState(e.node.body,t.context.clone(),t);for(let t=0;t<e.node.args.length;++t){const r=e.node.args[t],a=this._exec.evalExpression(s.args[t],n.context);n.context.createVariable(r.name,a,r)}if(this._execStack.states.push(n),n.context.currentFunctionName=e.name,this._shouldExecuteNextCommand())continue;return!0}}const r=this._exec.execStatement(s,t.context);if(null!=r&&!(r instanceof Ne)){let e=t;for(;e;){if(e.parentCallExpr){e.parentCallExpr.setCachedReturnValue(r);break}e=e.parent}if(null===e&&console.error('Could not find CallExpr to store return value in'),this._shouldExecuteNextCommand())continue;return!0}}else{if(n instanceof bt)continue;if(n instanceof vt)continue;if(n instanceof wt){const e=n.id;for(;!this._execStack.isEmpty;){t=this._execStack.last;for(let n=t.commands.length-1;n>=0;--n){const s=t.commands[n];if(s instanceof bt&&s.id===e)return t.current=n+1,!0}this._execStack.pop()}return console.error('Continue statement used outside of a loop'),!1}if(n instanceof kt){const e=n.id;if(n.condition){const e=this._exec.evalExpression(n.condition,t.context);if(!(e instanceof Oe))return console.error('Condition must be a scalar'),!1;if(!e.value){if(this._shouldExecuteNextCommand())continue;return!0}}for(;!this._execStack.isEmpty;){t=this._execStack.last;for(let n=t.commands.length-1;n>=0;--n){const s=t.commands[n];if(s instanceof vt&&s.id===e)return t.current=n+1,!0}this._execStack.pop()}return console.error('Break statement used outside of a loop'),!1}if(n instanceof It){if(n.condition){const e=this._exec.evalExpression(n.condition,t.context);if(!(e instanceof Oe))return console.error('Condition must be a scalar'),!1;if(e.value){if(this._shouldExecuteNextCommand())continue;return!0}}if(t.current=n.position,this._shouldExecuteNextCommand())continue;return!0}if(n instanceof Tt){const e=this._createState(n.statements,t.context.clone(),t);this._execStack.states.push(e);continue}}if(t.isAtEnd&&(this._execStack.pop(),this._execStack.isEmpty))return!1;if(!this._shouldExecuteNextCommand())return!0}}}_dispatchWorkgroup(e,t,n){const s=[1,1,1];for(const t of e.node.attributes)if('workgroup_size'===t.name)if(Array.isArray(t.value)){if(t.value.length>0){const e=n.getVariableValue(t.value[0]);s[0]=e instanceof Oe?e.value:parseInt(t.value[0])}if(t.value.length>1){const e=n.getVariableValue(t.value[1]);s[1]=e instanceof Oe?e.value:parseInt(t.value[1])}if(t.value.length>2){const e=n.getVariableValue(t.value[2]);s[2]=e instanceof Oe?e.value:parseInt(t.value[2])}}else{const e=n.getVariableValue(t.value);e instanceof Oe?s[0]=e.value:e instanceof Fe?(s[0]=e.data[0],s[1]=e.data.length>1?e.data[1]:1,s[2]=e.data.length>2?e.data[2]:1):s[0]=parseInt(t.value)}const r=this._exec.typeInfo.vec3u,a=this._exec.typeInfo.u32;n.setVariable('@workgroup_size',new Fe(s,r));const i=s[0],o=s[1],l=s[2];let c=!1;for(let e=0,u=0;e<l&&!c;++e)for(let l=0;l<o&&!c;++l)for(let o=0;o<i&&!c;++o,++u){const i=[o,l,e],h=[o+t[0]*s[0],l+t[1]*s[1],e+t[2]*s[2]];if(n.setVariable('@local_invocation_id',new Fe(i,r)),n.setVariable('@global_invocation_id',new Fe(h,r)),n.setVariable('@local_invocation_index',new Oe(u,a)),h[0]===this._dispatchId[0]&&h[1]===this._dispatchId[1]&&h[2]===this._dispatchId[2]){c=!0;break}}return c&&this._dispatchExec(e,n),c}_dispatchExec(e,t){for(const n of e.node.args)for(const e of n.attributes)if('builtin'===e.name){const s=`@${e.value}`,r=t.getVariable(s);null!==r&&t.variables.set(n.name,r)}const n=this._createState(e.node.body,t);this._execStack.states.push(n)}_createState(e,t,n){const s=new St(t,null!=n?n:null);for(const t of e)if(t instanceof M||t instanceof B||t instanceof U||t instanceof R){const e=[];this._collectFunctionCalls(t.value,e);for(const n of e)s.commands.push(new yt(n,t));s.commands.push(new xt(t))}else if(t instanceof G){const e=[];for(const n of t.args)this._collectFunctionCalls(n,e);for(const n of e)s.commands.push(new yt(n,t));s.commands.push(new xt(t))}else if(t instanceof Q){const e=[];this._collectFunctionCalls(t.value,e);for(const n of e)s.commands.push(new yt(n,t));s.commands.push(new xt(t))}else if(t instanceof z)s.commands.push(new xt(t));else{if(t instanceof C){const e=new ot(t);s.context.functions.set(t.name,e);continue}if(t instanceof Z){const e=[];this._collectFunctionCalls(t.condition,e);for(const n of e)s.commands.push(new yt(n,t));let n=new It(t.condition,0,t.line);s.commands.push(n),t.body.length>0&&s.commands.push(new Tt(t.body));const r=new It(null,0,t.line);s.commands.push(r);for(const e of t.elseif){n.position=s.commands.length;const a=[];this._collectFunctionCalls(e.condition,a);for(const e of a)s.commands.push(new yt(e,t));n=new It(e.condition,0,e.line),s.commands.push(n),e.body.length>0&&s.commands.push(new Tt(e.body)),s.commands.push(r)}n.position=s.commands.length,t.else&&s.commands.push(new Tt(t.else)),r.position=s.commands.length}else if(t instanceof j){const e=[];this._collectFunctionCalls(t.condition,e);for(const n of e)s.commands.push(new yt(n,t));let n=null;for(const e of t.cases){if(e instanceof Ae){n=e;break}if(e instanceof Se)for(const t of e.selectors)if(t instanceof Te){n=e;break}}const r=[];for(const e of t.cases){if(e===n)continue;if(!(e instanceof Se))continue;let a=null;for(const n of e.selectors){let e=new ke('==',t.condition,n);a&&(e=new ke('||',a,e)),a=e}const i=new It(a,0,e.line);s.commands.push(i),e.body.length>0&&s.commands.push(new Tt(e.body));const o=new It(null,0,e.line);r.push(o),s.commands.push(o),i.position=s.commands.length}n&&s.commands.push(new Tt(n.body)),s.commands.push(new vt(t.id));const a=s.commands.length;for(let e=0;e<r.length;++e)r[e].position=a}else if(t instanceof N){const e=[];s.commands.push(new bt(t.id)),this._collectFunctionCalls(t.condition,e);for(const n of e)s.commands.push(new yt(n,t));const n=new It(t.condition,0,t.line);s.commands.push(n);let r=t.line;t.body.length>0&&(s.commands.push(new Tt(t.body)),r=t.body[t.body.length-1].line),s.commands.push(new It(t.condition,0,r)),s.commands.push(new vt(t.id)),n.position=s.commands.length}else if(t instanceof O){t.init&&s.commands.push(new xt(t.init));let e=s.commands.length;null===t.increment&&s.commands.push(new bt(t.id));let n=null;if(t.condition){const e=[];this._collectFunctionCalls(t.condition,e);for(const n of e)s.commands.push(new yt(n,t));n=new It(t.condition,0,t.line),s.commands.push(n)}let r=t.line;t.body.length>0&&(s.commands.push(new Tt(t.body)),r=t.body[t.body.length-1].line),t.increment&&(s.commands.push(new bt(t.id)),s.commands.push(new xt(t.increment))),s.commands.push(new It(null,e,r)),s.commands.push(new vt(t.id)),n.position=s.commands.length}else if(t instanceof X){let e=s.commands.length;t.continuing||s.commands.push(new bt(t.id));let n=t.line;t.body.length>0&&(s.commands.push(new Tt(t.body)),n=t.body[t.body.length-1].line),s.commands.push(new It(null,e,n)),s.commands.push(new vt(t.id))}else t instanceof V?(s.commands.push(new bt(t.loopId)),s.commands.push(new Tt(t.body))):t instanceof se?s.commands.push(new wt(t.loopId,t)):t instanceof ne?s.commands.push(new kt(t.loopId,t.condition,t)):t instanceof D?s.commands.push(new xt(t)):t instanceof ie||console.error(`TODO: statement type ${t.constructor.name}`)}return s}_collectFunctionCalls(e,t){if(e instanceof de){if(e.args)for(const n of e.args)this._collectFunctionCalls(n,t);e.isBuiltin||t.push(e)}else if(e instanceof ke)this._collectFunctionCalls(e.left,t),this._collectFunctionCalls(e.right,t);else if(e instanceof we)this._collectFunctionCalls(e.right,t);else if(e instanceof pe){if(e.args)for(const n of e.args)this._collectFunctionCalls(n,t)}else e instanceof xe?this._collectFunctionCalls(e.value,t):e instanceof be?this._collectFunctionCalls(e.index,t):ge||console.error(`TODO: expression type ${e.constructor.name}`)}}export{ee as Alias,l as AliasInfo,Ee as Argument,f as ArgumentInfo,be as ArrayIndex,s as ArrayInfo,ce as ArrayType,R as Assign,W as AssignOperator,Ce as Attribute,ke as BinaryOperator,xe as BitcastExpr,ne as Break,G as Call,de as CallExpr,Se as Case,U as Const,_e as ConstExpr,se as Continue,V as Continuing,pe as CreateExpr,De as Data,Ae as Default,Te as DefaultSelector,J as Diagnostic,te as Discard,$e as ElseIf,Y as Enable,d as EntryFunctions,he as Expression,O as For,ae as ForwardType,C as Function,p as FunctionInfo,Z as If,z as Increment,P as IncrementOperator,c as InputInfo,M as Let,ge as LiteralExpr,X as Loop,Me as MatrixData,Le as Member,t as MemberInfo,S as Node,ve as Operator,u as OutputInfo,F as Override,h as OverrideInfo,Ve as PointerData,r as PointerInfo,le as PointerType,K as Requires,i as ResourceType,Q as Return,ue as SamplerType,Oe as ScalarData,L as Statement,D as StaticAssert,fe as StringExpr,ie as Struct,n as StructInfo,j as Switch,Ie as SwitchCase,a as TemplateInfo,oe as TemplateType,Pe as TextureData,He as Token,H as TokenClass,We as TokenType,qe as TokenTypes,re as Type,e as TypeInfo,ye as TypecastExpr,Ue as TypedData,we as UnaryOperator,B as Var,me as VariableExpr,o as VariableInfo,Fe as VectorData,Ne as VoidData,Et as WgslDebug,pt as WgslExec,mt as WgslParser,_t as WgslReflect,ze as WgslScanner,N as While,E as _BlockEnd,A as _BlockStart};\n//# sourceMappingURL=wgsl_reflect.module.js.map\n",
|
|
17
|
+
"import {\n makeBindGroupLayoutDescriptors,\n makeShaderDataDefinitions,\n} from \"webgpu-utils\";\nimport type { ShaderDescriptor } from \"../shaders/ShaderDescriptor\";\nimport { assert } from \"./assert\";\n\n// convenience functions to wrap verbose webgpu apis - not part of public api\n\nexport async function initGpu(\n canvas: HTMLCanvasElement,\n onUncapturedError?: (e: GPUUncapturedErrorEvent) => void,\n) {\n const adapter = await navigator.gpu.requestAdapter();\n if (!adapter) {\n throw new Error(\"WebGPU not supported\");\n }\n\n const device = await adapter.requestDevice();\n device.lost.then((info) => {\n console.error(\"GPU Device lost\", info);\n });\n if (onUncapturedError) {\n device.onuncapturederror = onUncapturedError;\n }\n\n const context = canvas.getContext(\"webgpu\");\n\n assert(device, \"WebGPU not supported\");\n assert(context, \"WebGPU not supported\");\n\n const presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n\n context.configure({\n device,\n format: presentationFormat,\n });\n\n return {\n device,\n context,\n presentationFormat,\n };\n}\n\nexport function getGpuPipelineDescriptor(\n shaderDescriptor: ShaderDescriptor,\n module: GPUShaderModule,\n presentationFormat: GPUTextureFormat,\n blend?: GPUBlendState,\n): Omit<GPURenderPipelineDescriptor, \"layout\"> {\n const pipelineDescriptor: Omit<GPURenderPipelineDescriptor, \"layout\"> = {\n label: `${shaderDescriptor.label} pipeline`,\n vertex: {\n module,\n entryPoint: shaderDescriptor.vertexEntrypoint,\n },\n fragment: {\n module,\n entryPoint: shaderDescriptor.fragmentEntrypoint,\n targets: [\n {\n format: presentationFormat,\n blend,\n },\n ],\n },\n primitive: {\n topology: \"triangle-strip\",\n },\n };\n\n return pipelineDescriptor;\n}\n\nexport function setVertexInstanceBufferLayout(\n pipeline: Omit<GPURenderPipelineDescriptor, \"layout\">,\n bufferLayout: GPUVertexBufferLayout,\n): Omit<GPURenderPipelineDescriptor, \"layout\"> {\n pipeline.vertex.buffers = [bufferLayout];\n return pipeline;\n}\n\nexport function attachVertexInstanceBuffer(\n renderPass: GPURenderPassEncoder,\n instanceBuffer: GPUBuffer,\n) {\n renderPass.setVertexBuffer(0, instanceBuffer);\n}\n\nexport function createGpuPipeline(\n device: GPUDevice,\n shaderDescriptor: ShaderDescriptor,\n pipelineDescriptor: Omit<GPURenderPipelineDescriptor, \"layout\">,\n): GPURenderPipeline {\n const defs = makeShaderDataDefinitions(shaderDescriptor.code);\n const descriptors = makeBindGroupLayoutDescriptors(defs, pipelineDescriptor);\n\n return device.createRenderPipeline({\n ...pipelineDescriptor,\n layout: device.createPipelineLayout({\n bindGroupLayouts: descriptors.map((d, i) =>\n device.createBindGroupLayout({\n label: `${shaderDescriptor.label} bind group layout ${i}`,\n ...d,\n }),\n ),\n }),\n });\n}\n",
|
|
18
|
+
"import { type StructInfo, WgslReflect } from \"wgsl_reflect\";\nimport type { ShaderDescriptor } from \"./ShaderDescriptor\";\n\nexport function codeWithLineNumbers(code: string) {\n return code\n .split(\"\\n\")\n .map((line, index) => `${index + 1}: ${line}`)\n .join(\"\\n\");\n}\n\nexport function combineShaderCode(\n label: string,\n base: string,\n mod: string,\n): ShaderDescriptor {\n let baseAst: WgslReflect;\n let modAst: WgslReflect;\n\n try {\n baseAst = new WgslReflect(base);\n } catch (e) {\n console.error(codeWithLineNumbers(base));\n throw e;\n }\n try {\n modAst = new WgslReflect(mod);\n } catch (e) {\n console.error(codeWithLineNumbers(mod));\n throw e;\n }\n\n if (modAst.structs.length > 1) {\n throw new Error(\n \"Shader has more than one struct. Only one struct is supported for now.\",\n );\n }\n\n const hasInstanceStruct = modAst.structs.length;\n const hasFragmentEntrypoint = modAst.entry.fragment.length > 0;\n const hasVertexEntrypoint = modAst.entry.vertex.length > 0;\n\n const fragmentEntrypoint = hasFragmentEntrypoint\n ? modAst.entry.fragment[0]?.name\n : baseAst.entry.fragment[0]?.name;\n const vertexEntrypoint = hasVertexEntrypoint\n ? modAst.entry.vertex[0]?.name\n : baseAst.entry.vertex[0]?.name;\n\n if (hasInstanceStruct) {\n base = injectInstanceData(mod, base);\n }\n\n return {\n label,\n code: `${base}\\n//==========\\n\\n${mod.trim()}`,\n vertexEntrypoint,\n fragmentEntrypoint,\n };\n}\n\nfunction injectInstanceData(instanceStruct: string, code: string) {\n const codeAst = new WgslReflect(code);\n const snippetAst = new WgslReflect(instanceStruct);\n\n const baseInstanceStruct = codeAst.structs.find((s) =>\n s.name.endsWith(\"InstanceData\"),\n );\n if (!baseInstanceStruct) {\n throw new Error(\n `No base instance struct found in code. Looking for a struct named ending in \"InstanceData\". Code:\\n${code}`,\n );\n }\n\n const baseFragmentStruct = codeAst.structs.find((s) =>\n s.name.endsWith(\"VertexOutput\"),\n );\n if (!baseFragmentStruct) {\n throw new Error(\n `No base fragment struct found in code. Looking for a struct named ending in \"VertexOutput\". Code:\\n${code}`,\n );\n }\n\n const struct = snippetAst.structs[0];\n const slug = struct.name.toLowerCase();\n\n const passthroughSnippet = struct.members\n .map((m) => `output.${slug}_${m.name} = instance.${slug}_${m.name};`)\n .join(\"\\n\");\n\n const prefixedMembersSnippet = struct.members.map(\n (m) =>\n `${slug}_${m.name}: ${m.type.name}${m.format ? `<${m.format.name}>` : \"\"}`,\n );\n\n let startingVertexLocation = findStartingLocation(baseInstanceStruct);\n\n const instanceInputSnippet = prefixedMembersSnippet\n .map((snippet) => `@location(${startingVertexLocation++}) ${snippet},`)\n .join(\"\\n \");\n\n let startingFragmentLocation = findStartingLocation(baseFragmentStruct);\n\n const vertexOutputSnippet = prefixedMembersSnippet\n .map(\n (snippet) =>\n `@location(${startingFragmentLocation++}) @interpolate(flat) ${snippet},`,\n )\n .join(\"\\n \");\n\n return code\n .replace(/\\/\\/ @INSTANCE_DATA SNIPPET/, instanceInputSnippet)\n .replace(/\\/\\/ @PASSTHROUGH_SNIPPET/, passthroughSnippet)\n .replace(/\\/\\/ @VERTEX_OUTPUT SNIPPET/, vertexOutputSnippet);\n}\n\nfunction findStartingLocation(struct: StructInfo) {\n let startingLocation = 0;\n for (const member of struct.members) {\n const locationAttr = (member.attributes || []).find(\n (attr) => attr.name === \"location\",\n );\n if (locationAttr) {\n const location = Number.parseInt(locationAttr.value as string);\n startingLocation = Math.max(startingLocation, location);\n }\n }\n return startingLocation + 1;\n}\n\nexport function struct2BufferLayout(\n struct: StructInfo,\n stepMode: GPUVertexStepMode = \"instance\",\n): GPUVertexBufferLayout {\n const hasBuiltin = struct.members.some((m) =>\n m.attributes?.some((a) => a.name === \"builtin\"),\n );\n if (hasBuiltin) {\n throw new Error(\n \"Can't generate buffer layout from struct with builtin attributes - they count towards size\",\n );\n }\n\n const unprocessedMembers = struct.members.filter(\n (m) => !m.attributes || !m.attributes.some((a) => a.name === \"location\"),\n );\n for (const member of unprocessedMembers) {\n console.error(\n `Unprocessed member in struct ${struct.name}: ${member.name}`,\n );\n }\n\n const membersWithAttributes = struct.members.filter((m) =>\n m.attributes?.some((a) => a.name === \"location\"),\n );\n\n return {\n arrayStride: struct.size,\n attributes: membersWithAttributes.map((m) => {\n const location = m.attributes!.find((a) => a.name === \"location\")?.value;\n if (!location) {\n throw new Error(`Location attribute not found for member: ${m.name}`);\n }\n if (Array.isArray(location)) {\n throw new Error(`Location attribute is an array for member: ${m.name}`);\n }\n\n const shaderLocation = Number.parseInt(location);\n if (Number.isNaN(shaderLocation)) {\n throw new Error(\n `Invalid location attribute: ${location} for member: ${m.name}`,\n );\n }\n\n return {\n shaderLocation,\n offset: m.offset,\n\n format: getGpuFormat(m.type.name),\n } satisfies GPUVertexAttribute;\n }),\n stepMode,\n } satisfies GPUVertexBufferLayout;\n}\n\nexport function validateFragmentShader(shaderCode: string) {\n const ast = new WgslReflect(shaderCode);\n const exampleSnippet = `\n@fragment\nfn myFragmentShader(vertex: VertexOutput) -> @location(0) vec4<f32> {\n let DEFAULT_COLOR = default_fragment_shader(vertex, nearestSampler);\n return DEFAULT_COLOR;\n}\n`;\n\n if (!ast.entry.fragment.length) {\n throw new Error(`Shader code must have @fragment, e.g. ${exampleSnippet}`);\n }\n}\n\nexport function getGpuFormat(typeName: string): GPUVertexFormat {\n // Remove <f32> or <u32> from type names\n const baseType = typeName.replace(/<[fu]32>/, \"\");\n\n const formatMap: Record<string, GPUVertexFormat> = {\n vec2: \"float32x2\",\n vec2f: \"float32x2\",\n vec3: \"float32x3\",\n vec3f: \"float32x3\",\n vec4: \"float32x4\",\n vec4f: \"float32x4\",\n mat3x3: \"float32x3\",\n u32: \"uint32\",\n f32: \"float32\",\n };\n\n const format = formatMap[baseType.toLowerCase()];\n if (!format) {\n throw new Error(`Unsupported type: ${typeName}`);\n }\n return format;\n}\n",
|
|
19
|
+
"export const pixelArtSampler: GPUSamplerDescriptor = {\n magFilter: \"nearest\",\n minFilter: \"nearest\",\n addressModeU: \"clamp-to-edge\",\n addressModeV: \"clamp-to-edge\",\n};\n\nexport const smoothSampler: GPUSamplerDescriptor = {\n magFilter: \"linear\",\n minFilter: \"linear\",\n addressModeU: \"clamp-to-edge\",\n addressModeV: \"clamp-to-edge\",\n};\n",
|
|
20
|
+
"export default /*wgsl*/ `\nstruct InstanceData {\n // location 0-2 are the model matrix for this instanced quad\n @location(0) model0: vec4<f32>,\n @location(1) model1: vec4<f32>,\n @location(2) model2: vec4<f32>,\n // location 3 is the tint - the color will be multiplied by the texture color to determine the pixel color\n @location(3) engine_tint: vec4<f32>,\n // location 4 are the uv offset and scale used to sample the texture atlas. these are in normalized texel coordinates.\n @location(4) uvOffsetAndScale: vec4<f32>,\n // location 5 is the crop offset from center and scale. These are ratios applied to the unit quad.\n @location(5) cropOffsetAndScale: vec4<f32>,\n // location 6 is the atlas index\n @location(6) atlasIndex: u32,\n // @INSTANCE_DATA SNIPPET\n}\n\nstruct VertexInput {\n @builtin(vertex_index) VertexIndex: u32,\n @builtin(instance_index) InstanceIndex: u32,\n instance: InstanceData\n}\n\nstruct VertexOutput {\n @builtin(position) engine_clip_position : vec4<f32>,\n // uv coordinates are stored as two vec2s:\n // [0,1] = atlas uv coords\n // [2,3] = uv scale\n @location(0) engine_uv: vec4<f32>,\n @location(1) @interpolate(flat) engine_tint: vec4<f32>,\n @location(2) @interpolate(flat) engine_atlasIndex: u32,\n // @VERTEX_OUTPUT SNIPPET\n}\n\nstruct EngineUniform {\n viewProjection: mat3x3<f32>,\n resolution: vec2f,\n};\n\n// we can't divide by 2 in the projection matrix because\n// it will affect the positioning as well as the geometry scale\n// so we need to divide by 2 for the initial position scale.\n// for eg a 10x10 quad in the top left of a 100x100 logical canvas with a 200x200 natural size\n// will be passed in as\n// position=[-45, 45]\n// scale=[10,10]\n// so the top left corner will be: (-0.5 * 10 - 45) * 2 / 100 = -1\n// if the top left vertex was -1, it would be: (-1 * 10 - 45) * 2 / 100 = -1.1\nconst enginePosLookup = array(vec2f(-0.5, 0.5), vec2f(-0.5, -0.5), vec2f(0.5, 0.5), vec2f(0.5, -0.5));\nconst engineUvLookup = array(vec2f(0, 0), vec2f(0, 1), vec2f(1, 0), vec2f(1, 1));\n\n@group(0) @binding(0) var<uniform> engineUniform: EngineUniform;\n@group(0) @binding(1) var linearSampler: sampler;\n@group(0) @binding(2) var nearestSampler: sampler;\n\n@group(1) @binding(0) var textureArray: texture_2d_array<f32>;\n\n@vertex\nfn engine_vs(\n @builtin(vertex_index) VertexIndex: u32,\n @builtin(instance_index) InstanceIndex: u32,\n instance: InstanceData\n) -> VertexOutput {\n var output = default_vertex_shader(VertexIndex, InstanceIndex,instance);\n return output;\n}\n\n@fragment\nfn engine_fs(vertex: VertexOutput) -> @location(0) vec4<f32> {\n return default_fragment_shader(vertex, nearestSampler);\n}\n\nfn default_vertex_shader(\n VertexIndex: u32,\n InstanceIndex: u32,\n instance: InstanceData\n) -> VertexOutput {\n var output : VertexOutput;\n output.engine_tint = instance.engine_tint;\n\n // reconstruct the model matrix from the instance data\n // bc we can't pass a mat3x3 as instance data\n let modelMatrix = mat3x3(instance.model0.xyz, instance.model1.xyz, instance.model2.xyz);\n\n // transform the vertex position\n let localPosition = enginePosLookup[VertexIndex];\n let cropOffset = instance.cropOffsetAndScale.xy;\n let cropScale = instance.cropOffsetAndScale.zw;\n let croppedPosition = localPosition * cropScale + cropOffset;\n let worldPosition = modelMatrix * vec3f(croppedPosition, 1.0);\n let clipPosition = engineUniform.viewProjection * worldPosition;\n output.engine_clip_position = vec4f(clipPosition, 1.0);\n\n // set the uv coordinates in the texture atlas.\n let original_uv = engineUvLookup[VertexIndex];\n // uvOffsetAndScale is a vec4 with the following values:\n // [0,1] = uv offset\n // [2,3] = uv scale\n let atlas_uv = original_uv * instance.uvOffsetAndScale.zw * cropScale + instance.uvOffsetAndScale.xy;\n // we also pack the original uv coordinates in the w and z components\n // since these can be useful in the fragment shader\n output.engine_uv = vec4f(atlas_uv, original_uv);\n output.engine_atlasIndex = u32(instance.atlasIndex);\n // @PASSTHROUGH_SNIPPET\n\n return output;\n}\n\nfn default_fragment_shader(vertex: VertexOutput, samp: sampler) -> vec4<f32> {\n let atlas_uv = vertex.engine_uv.xy;\n let original_uv = vertex.engine_uv.zw;\n\n // Force both samplers to be referenced without assignment\n // This prevents WGSLReflect from optimizing them away\n var nope: bool = false;\n if (nope) {\n _ = linearSampler;\n _ = nearestSampler;\n }\n\n let color = textureSample(textureArray, samp, atlas_uv, vertex.engine_atlasIndex);\n\n if (vertex.engine_atlasIndex == 1000u) {\n // rectangle - return a solid color\n return vec4f(1,1,1,1) * vertex.engine_tint;\n } else if (vertex.engine_atlasIndex == 1001u) {\n // circle:\n // edge width is 4 logical pixels\n let edgeWidth = 4. / max(engineUniform.resolution.x, engineUniform.resolution.y);\n // distance from center of the quad ranging from [0,1]\n let centerDistance = 2 * distance(vec2f(0.5, 0.5), original_uv);\n // alpha is 1 before edgeWidth and 0 after edgeWidth\n let alpha = 1. - smoothstep(1. - edgeWidth, 1. + edgeWidth, centerDistance);\n return vec4f(vertex.engine_tint.rgb, alpha * vertex.engine_tint.a);\n } else {\n // texture:\n return color * vertex.engine_tint;\n }\n}\n`;\n",
|
|
21
|
+
"import {\n makeShaderDataDefinitions,\n makeStructuredView,\n type StructuredView,\n} from \"webgpu-utils\";\nimport { WgslReflect } from \"wgsl_reflect\";\nimport type { SceneNode } from \"../scene/SceneNode\";\nimport type { AssetManager } from \"../textures/AssetManager\";\nimport { assert } from \"../utils/assert\";\nimport {\n attachVertexInstanceBuffer,\n createGpuPipeline,\n getGpuPipelineDescriptor,\n setVertexInstanceBufferLayout,\n} from \"../utils/boilerplate\";\nimport type { EngineUniform } from \"./EngineUniform\";\nimport type { IShader } from \"./IShader\";\nimport {\n codeWithLineNumbers,\n combineShaderCode,\n struct2BufferLayout,\n} from \"./parser\";\nimport { pixelArtSampler, smoothSampler } from \"./samplers\";\nimport quadWgsl from \"./wgsl/quad.wgsl\";\n\nexport type QuadShaderOpts = {\n assetManager?: AssetManager;\n blendMode?: GPUBlendState;\n};\n\nexport class QuadShader implements IShader {\n label: string;\n code: string;\n\n #uniformValues: StructuredView;\n #instanceData: InstanceData;\n #instanceIndex = 0;\n #instanceCount;\n\n #device: GPUDevice;\n #pipeline: GPURenderPipeline;\n #bindGroups: GPUBindGroup[] = [];\n #uniformBuffer: GPUBuffer;\n\n startFrame(device: GPUDevice, uniform: EngineUniform) {\n this.#instanceIndex = 0;\n\n this.#uniformValues.set(uniform);\n this.#uniformValues.set({\n viewProjection: uniform.viewProjectionMatrix,\n resolution: [uniform.resolution.width, uniform.resolution.height],\n });\n\n // Write view projection matrix to uniform buffer\n device.queue.writeBuffer(\n this.#uniformBuffer,\n 0,\n this.#uniformValues.arrayBuffer,\n );\n }\n\n processBatch(renderPass: GPURenderPassEncoder, nodes: SceneNode[]) {\n renderPass.setPipeline(this.#pipeline);\n const batchStartInstanceIndex = this.#instanceIndex;\n\n // Count for the number of instances in the buffer...\n let instanceCount = 0;\n\n if (nodes.length > this.#instanceCount) {\n throw new Error(\n `ToodleInstanceCap: ${nodes.length} instances enqueued, max is ${this.#instanceCount} for ${this.label} shader`,\n );\n }\n\n for (let i = 0; i < nodes.length; i++) {\n if (!this.#instanceData) {\n continue;\n }\n const instance = nodes[i];\n assert(instance.renderComponent, \"instance has no render component\");\n const floatOffset =\n ((batchStartInstanceIndex + instanceCount) *\n this.#instanceData.bufferLayout.arrayStride) /\n Float32Array.BYTES_PER_ELEMENT;\n\n instanceCount += instance.renderComponent.writeInstance(\n instance,\n this.#instanceData.cpuBuffer,\n floatOffset,\n );\n }\n\n if (this.#instanceData) {\n const byteOffset =\n batchStartInstanceIndex * this.#instanceData.bufferLayout.arrayStride;\n const byteLength =\n instanceCount * this.#instanceData.bufferLayout.arrayStride;\n\n this.#device.queue.writeBuffer(\n this.#instanceData.gpuBuffer,\n byteOffset,\n this.#instanceData.cpuBuffer,\n byteOffset / Float32Array.BYTES_PER_ELEMENT,\n byteLength / Float32Array.BYTES_PER_ELEMENT,\n );\n\n attachVertexInstanceBuffer(renderPass, this.#instanceData.gpuBuffer);\n\n for (let i = 0; i < this.#bindGroups.length; i++) {\n renderPass.setBindGroup(i, this.#bindGroups[i]);\n }\n }\n\n this.#instanceIndex += instanceCount;\n\n renderPass.draw(4, instanceCount, 0, batchStartInstanceIndex);\n return 1;\n }\n\n endFrame() {}\n\n constructor(\n label: string,\n assetManager: AssetManager,\n device: GPUDevice,\n presentationFormat: GPUTextureFormat,\n userCode: string,\n instanceCount: number,\n blendMode?: GPUBlendState,\n ) {\n this.label = label;\n\n // Combine user code with base quad shader code\n const shaderDescriptor = combineShaderCode(label, quadWgsl, userCode);\n\n // Create shader module from combined code\n let module: GPUShaderModule;\n try {\n module = device.createShaderModule({\n label,\n code: shaderDescriptor.code,\n });\n } catch (e) {\n console.error(codeWithLineNumbers(shaderDescriptor.code));\n throw e;\n }\n\n // Store combined code for debugging\n this.code = shaderDescriptor.code;\n\n // Create blend state\n const blend = blendMode ?? {\n color: {\n srcFactor: \"src-alpha\",\n dstFactor: \"one-minus-src-alpha\",\n operation: \"add\",\n },\n alpha: {\n srcFactor: \"one\",\n dstFactor: \"one-minus-src-alpha\",\n operation: \"add\",\n },\n };\n\n // Create instance data from shader code\n const ast = new WgslReflect(shaderDescriptor.code);\n const instanceStruct = ast.structs.find((s) =>\n s.name.endsWith(\"InstanceData\"),\n );\n if (!instanceStruct) {\n console.error(codeWithLineNumbers(shaderDescriptor.code));\n throw new Error(\n \"Quad shader has no instance struct. The wgsl is required to contain a struct ending in InstanceData.\",\n );\n }\n const bufferLayout = struct2BufferLayout(instanceStruct);\n this.#instanceData = {\n bufferLayout,\n cpuBuffer: new Float32Array(\n (bufferLayout.arrayStride * instanceCount) /\n Float32Array.BYTES_PER_ELEMENT,\n ),\n gpuBuffer: device.createBuffer({\n size: bufferLayout.arrayStride * instanceCount,\n usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n label: `${label} instance data`,\n }),\n };\n\n // Create pipeline descriptor\n const pipelineDescriptor = getGpuPipelineDescriptor(\n shaderDescriptor,\n module,\n presentationFormat,\n blend,\n );\n\n // Set vertex instance buffer layout\n setVertexInstanceBufferLayout(\n pipelineDescriptor,\n this.#instanceData.bufferLayout,\n );\n\n // Create pipeline\n this.#pipeline = createGpuPipeline(\n device,\n shaderDescriptor,\n pipelineDescriptor,\n );\n\n // Reference texture atlas\n const textureAtlas = assetManager.textureAtlas;\n\n // Store device\n this.#device = device;\n\n // Create uniform buffer for engine uniforms (mat3x3 viewProjection)\n const defs = makeShaderDataDefinitions(this.code);\n this.#uniformValues = makeStructuredView(defs.uniforms.engineUniform);\n this.#uniformBuffer = device.createBuffer({\n label: `${label} engine uniform buffer`,\n size: this.#uniformValues.arrayBuffer.byteLength,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n\n // Create bind groups\n this.#bindGroups = setQuadBindGroups(\n label,\n device,\n this.#pipeline,\n textureAtlas,\n this.#uniformBuffer,\n );\n\n this.#instanceCount = instanceCount;\n }\n}\n\nfunction setQuadBindGroups(\n label: string,\n device: GPUDevice,\n pipeline: GPURenderPipeline,\n textureAtlas: GPUTexture,\n buffer: GPUBuffer,\n) {\n const bindGroup = device.createBindGroup({\n label: `${label} engine bind group`,\n layout: pipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer,\n },\n },\n {\n binding: 1,\n resource: device.createSampler(smoothSampler),\n },\n {\n binding: 2,\n resource: device.createSampler(pixelArtSampler),\n },\n ],\n });\n\n const atlasBindGroup = device.createBindGroup({\n label: `${label} atlas bind group`,\n layout: pipeline.getBindGroupLayout(1),\n entries: [\n {\n binding: 0,\n resource: textureAtlas.createView({\n dimension: \"2d-array\",\n arrayLayerCount: textureAtlas.depthOrArrayLayers,\n }),\n },\n ],\n });\n\n return [bindGroup, atlasBindGroup];\n}\n\ntype InstanceData = {\n cpuBuffer: Float32Array<ArrayBuffer>;\n gpuBuffer: GPUBuffer;\n bufferLayout: GPUVertexBufferLayout;\n};\n",
|
|
22
|
+
"const warnings: Map<string, boolean> = new Map<string, boolean>();\n/**\n * Useful for warning in a function run every frame if you only want to warn once\n *\n * @param key a unique key to tag the warning\n * @param msg message to console.warn\n */\nexport function warnOnce(key: string, msg?: string) {\n if (warnings.has(key)) {\n return;\n }\n warnings.set(key, true);\n console.warn(msg ?? key);\n}\n",
|
|
23
|
+
"// MsdfFont has the cpu data for a font\n\n// The kerning map stores a spare map of character ID pairs with an associated\n// X offset that should be applied to the character spacing when the second\n// character ID is rendered after the first.\nimport { warnOnce } from \"../utils/error\";\n\nexport type KerningMap = Map<number, Map<number, number>>;\n\nexport interface MsdfChar {\n id: number;\n index: number;\n char: string;\n width: number;\n height: number;\n xoffset: number;\n yoffset: number;\n xadvance: number;\n chnl: number;\n x: number;\n y: number;\n page: number;\n charIndex: number;\n}\n\nexport class MsdfFont {\n /** the name of the font */\n name: string;\n /** the set of available characters in the font texture */\n charset: string[];\n charCount: number;\n lineHeight: number;\n\n /** a binary buffer of character data for loading into the gpu */\n charBuffer: Float32Array;\n\n #kernings: KerningMap;\n #chars: Map<number, MsdfChar>;\n #fallbackCharCode?: number;\n\n constructor(\n public id: string,\n public json: MsdfFontJson,\n public imageBitmap: ImageBitmap,\n ) {\n const charArray = Object.values(json.chars);\n this.charCount = charArray.length;\n this.lineHeight = json.common.lineHeight;\n this.charset = json.info.charset;\n this.name = json.info.face;\n\n this.#kernings = new Map();\n if (json.kernings) {\n for (const kearning of json.kernings) {\n let charKerning = this.#kernings.get(kearning.first);\n if (!charKerning) {\n charKerning = new Map<number, number>();\n this.#kernings.set(kearning.first, charKerning);\n }\n charKerning.set(kearning.second, kearning.amount);\n }\n }\n\n this.#chars = new Map<number, MsdfChar>();\n const charCount = Object.values(json.chars).length;\n this.charBuffer = new Float32Array(charCount * 8);\n let offset = 0;\n const u = 1 / json.common.scaleW;\n const v = 1 / json.common.scaleH;\n\n for (const [i, char] of json.chars.entries()) {\n this.#chars.set(char.id, char);\n this.#chars.get(char.id)!.charIndex = i;\n this.charBuffer[offset] = char.x * u; // texOffset.x\n this.charBuffer[offset + 1] = char.y * v; // texOffset.y\n this.charBuffer[offset + 2] = char.width * u; // texExtent.x\n this.charBuffer[offset + 3] = char.height * v; // texExtent.y\n this.charBuffer[offset + 4] = char.width; // size.x\n this.charBuffer[offset + 5] = char.height; // size.y\n this.charBuffer[offset + 6] = char.xoffset; // offset.x\n this.charBuffer[offset + 7] = -char.yoffset; // offset.y\n offset += 8;\n }\n }\n\n getChar(charCode: number): MsdfChar {\n const char = this.#chars.get(charCode)!;\n if (!char) {\n const fallbackCharacter = this.#chars.get(\n this.#fallbackCharCode ?? this.#chars.keys().toArray()[0],\n )!;\n warnOnce(\n `unknown_char_${this.name}`,\n `Couldn't find character ${charCode} in characters for font ${this.name} -- defaulting to first available character \"${fallbackCharacter.char}\"`,\n );\n return fallbackCharacter;\n }\n return char;\n }\n\n // Gets the distance in pixels a line should advance for a given character code. If the upcoming\n // character code is given any kerning between the two characters will be taken into account.\n getXAdvance(charCode: number, nextCharCode = -1): number {\n const char = this.getChar(charCode);\n if (nextCharCode >= 0) {\n const kerning = this.#kernings.get(charCode);\n if (kerning) {\n return char.xadvance + (kerning.get(nextCharCode) ?? 0);\n }\n }\n return char.xadvance;\n }\n\n static async create(id: string, fontJsonUrl: URL): Promise<MsdfFont> {\n const response = await fetch(fontJsonUrl);\n const json = (await response.json()) as MsdfFontJson;\n\n const i = fontJsonUrl.href.lastIndexOf(\"/\");\n const baseUrl = i !== -1 ? fontJsonUrl.href.substring(0, i + 1) : undefined;\n\n if (json.pages.length < 1) {\n throw new Error(\n `Can't create an msdf font without a reference to the page url in the json`,\n );\n }\n if (json.pages.length > 1) {\n throw new Error(`Can't create an msdf font with more than one page`);\n }\n\n const textureUrl = baseUrl + json.pages[0];\n const textureResponse = await fetch(textureUrl);\n const bitmap = await createImageBitmap(await textureResponse.blob());\n\n return new MsdfFont(id, json, bitmap);\n }\n\n set fallbackCharacter(character: string) {\n const charCode: number = character.charCodeAt(0);\n if (this.#chars.has(charCode)) {\n this.#fallbackCharCode = charCode;\n } else {\n const fallbackCode = this.#chars.keys().toArray()[0];\n console.warn(\n `${character} character does not exist in font ${this.name} defaulting to \"${this.#chars.get(fallbackCode)?.char}\".`,\n );\n this.#fallbackCharCode = fallbackCode;\n }\n }\n}\n\ntype MsdfFontJson = {\n pages: string[];\n chars: MsdfChar[];\n info: {\n face: string;\n size: string;\n bold: number;\n italic: number;\n charset: string[];\n unicode: number;\n stretchH: number;\n smooth: number;\n aa: number;\n padding: number[];\n spacing: number[];\n };\n common: {\n lineHeight: number;\n base: number;\n scaleW: number;\n scaleH: number;\n pages: number;\n packed: number;\n alphaChnl: number;\n redChnl: number;\n greenChnl: number;\n blueChnl: number;\n };\n distanceField: { fieldType: string; distanceRange: number };\n kernings: Kerning[];\n};\n\ntype Kerning = { first: number; second: number; amount: number };\n\nexport enum WhitespaceKeyCodes {\n HorizontalTab = 9,\n Newline = 10,\n CarriageReturn = 13,\n Space = 32,\n}\n",
|
|
24
|
+
"import type { Size } from \"../coreTypes/Size\";\nimport { type MsdfChar, type MsdfFont, WhitespaceKeyCodes } from \"./MsdfFont\";\nimport type { TextFormatting, WordWrapOptions } from \"./TextFormatting\";\n\n// shaping is responsible for cpu-side text shaping:\n// - measuring a text block\n// - calculating the glyph quads for the text block\n// - applying word wrap, shrink-to-fit, justification and other formatting options\n// - returning the text measurements and glyph quads\nconst TAB_SPACES = 4;\n\nexport interface MsdfTextMeasurements {\n /** The width of the text block in em units. */\n width: number;\n /** The height of the text block in em units. */\n height: number;\n /** The width of each line in em units. */\n lineWidths: number[];\n /** The number of lines in the text block. */\n lineCount: number;\n /** The number of characters printed in the text block. */\n printedCharCount: number;\n\n /** All words in the text block */\n words: Word[];\n}\n\nexport type Glyph = {\n char: MsdfChar;\n offset: [number, number];\n line: number;\n};\n\nexport type Word = {\n glyphs: Glyph[];\n width: number;\n startX: number;\n startY: number;\n};\n\nexport function shapeText(\n font: MsdfFont,\n text: string,\n blockSize: Size,\n fontSize: number,\n formatting: TextFormatting,\n textArray: Float32Array,\n initialFloatOffset = 0,\n debug = false,\n) {\n let offset = initialFloatOffset;\n\n const measurements = measureText(font, text, formatting.wordWrap);\n const alignment = formatting.align || \"left\";\n const em2px = fontSize / font.lineHeight;\n // currently there is a code path that sets blockSize.width to measurements.width (em)\n // if blockSize is not explicitly set (px)\n const hackHasExplicitBlock = blockSize.width !== measurements.width;\n\n let debugData: any[] | null = null;\n if (debug) {\n debugData = [];\n }\n\n for (const word of measurements.words) {\n for (const glyph of word.glyphs) {\n let lineOffset = 0;\n if (alignment === \"center\") {\n lineOffset =\n measurements.width * -0.5 -\n (measurements.width - measurements.lineWidths[glyph.line]) * -0.5;\n } else if (alignment === \"right\") {\n const blockSizeEm = blockSize.width / em2px;\n\n const delta = measurements.width - measurements.lineWidths[glyph.line];\n\n lineOffset =\n (hackHasExplicitBlock ? blockSizeEm / 2 : measurements.width / 2) -\n measurements.width +\n delta;\n } else if (alignment === \"left\") {\n const blockSizeEm = blockSize.width / em2px;\n\n lineOffset = hackHasExplicitBlock\n ? -blockSizeEm / 2\n : -measurements.width / 2;\n }\n\n if (debug && debugData) {\n debugData.push({\n line: glyph.line,\n word: word.glyphs.map((g) => g.char.char).join(\"\"),\n glyph: glyph.char.char,\n startX: word.startX,\n glyphX: glyph.offset[0],\n advance: glyph.char.xadvance,\n lineOffset,\n startY: word.startY,\n glyphY: glyph.offset[1],\n });\n }\n textArray[offset] = word.startX + glyph.offset[0] + lineOffset;\n textArray[offset + 1] = word.startY + glyph.offset[1];\n textArray[offset + 2] = glyph.char.charIndex;\n\n offset += 4;\n }\n }\n\n if (debug && debugData) {\n console.table(debugData);\n }\n}\n\n/**\n * Measure the text and return measurements for block + each glyph.\n * @param font - The font to use.\n * @param text - The text to measure\n * @param wordWrap - Maximum word length before word wrapping\n * @returns The measurements of the text in em units.\n */\nexport function measureText(\n font: MsdfFont,\n text: string,\n wordWrap?: WordWrapOptions,\n): MsdfTextMeasurements {\n let maxWidth = 0;\n const lineWidths: number[] = [];\n\n let textOffsetX = 0;\n let textOffsetY = 0;\n let line = 0;\n let printedCharCount = 0;\n let nextCharCode = text.charCodeAt(0);\n let word: Word = { glyphs: [], width: 0, startX: 0, startY: 0 };\n\n const words: Word[] = [];\n\n for (let i = 0; i < text.length; i++) {\n const isLastLetter = i === text.length - 1;\n\n const charCode = nextCharCode;\n nextCharCode = i < text.length - 1 ? text.charCodeAt(i + 1) : -1;\n\n switch (charCode) {\n case WhitespaceKeyCodes.HorizontalTab:\n insertSpaces(TAB_SPACES);\n break;\n case WhitespaceKeyCodes.Newline:\n flushLine();\n flushWord();\n break;\n case WhitespaceKeyCodes.CarriageReturn:\n break;\n case WhitespaceKeyCodes.Space:\n insertSpaces(1);\n break;\n default: {\n const advance = font.getXAdvance(charCode, nextCharCode);\n if (\n wordWrap &&\n wordWrap.breakOn === \"character\" &&\n textOffsetX + advance > wordWrap.emWidth\n ) {\n if (word.startX === 0) {\n flushWord();\n } else {\n lineWidths.push(textOffsetX - word.width);\n line++;\n maxWidth = Math.max(maxWidth, textOffsetX);\n textOffsetX = word.width;\n textOffsetY -= font.lineHeight;\n word.startX = 0;\n word.startY = textOffsetY;\n word.glyphs.forEach((g) => {\n g.line = line;\n });\n }\n }\n word.glyphs.push({\n char: font.getChar(charCode),\n offset: [word.width, 0],\n line,\n });\n\n if (isLastLetter) {\n flushWord();\n }\n\n word.width += advance;\n textOffsetX += advance;\n }\n }\n }\n\n lineWidths.push(textOffsetX);\n maxWidth = Math.max(maxWidth, textOffsetX);\n\n const lineCount = lineWidths.length;\n\n return {\n width: maxWidth,\n height: lineCount * font.lineHeight,\n lineWidths,\n lineCount,\n printedCharCount,\n words,\n };\n\n function flushWord() {\n printedCharCount += word.glyphs.length;\n words.push(word);\n word = {\n glyphs: [],\n width: 0,\n startX: textOffsetX,\n startY: textOffsetY,\n };\n }\n\n function flushLine() {\n lineWidths.push(textOffsetX);\n line++;\n maxWidth = Math.max(maxWidth, textOffsetX);\n textOffsetX = 0;\n textOffsetY -= font.lineHeight;\n }\n\n function insertSpaces(spaces: number) {\n if (spaces < 1) spaces = 1;\n textOffsetX += font.getXAdvance(WhitespaceKeyCodes.Space) * spaces;\n if (wordWrap?.breakOn === \"word\" && textOffsetX >= wordWrap.emWidth) {\n flushLine();\n }\n flushWord();\n }\n}\nexport function findLargestFontSize(\n font: MsdfFont,\n text: string,\n size: Size,\n formatting: TextFormatting,\n): number | undefined {\n if (!formatting.fontSize) {\n throw new Error(\"fontSize is required for shrinkToFit\");\n }\n if (!formatting.shrinkToFit) {\n throw new Error(\"shrinkToFit is required for findLargestFontSize\");\n }\n // Binary search to find largest font size that fits\n const minSize = formatting.shrinkToFit.minFontSize;\n const maxSize = formatting.shrinkToFit.maxFontSize ?? formatting.fontSize;\n const maxLines = formatting.shrinkToFit.maxLines ?? Number.POSITIVE_INFINITY;\n\n const threshold = 0.5;\n let low = minSize;\n let high = maxSize;\n\n while (high - low > threshold) {\n // Stop when we get close enough\n const testSize = (low + high) / 2;\n const testMeasure = measureText(font, text, formatting.wordWrap);\n\n const padding = formatting.shrinkToFit.padding ?? 0;\n\n const scaledWidth = testMeasure.width * (testSize / font.lineHeight);\n const scaledHeight = testMeasure.height * (testSize / font.lineHeight);\n const fitsWidth = scaledWidth <= size.width - size.width * padding;\n const fitsHeight = scaledHeight <= size.height - size.height * padding;\n const fitsLines = testMeasure.lineCount <= maxLines;\n\n if (fitsWidth && fitsHeight && fitsLines) {\n low = testSize;\n } else {\n high = testSize;\n }\n }\n\n return low;\n}\n",
|
|
25
|
+
"import type { Color } from \"../coreTypes/Color\";\nimport { type NodeOptions, SceneNode } from \"../scene/SceneNode\";\nimport type { MsdfFont } from \"./MsdfFont\";\nimport { measureText } from \"./shaping\";\nimport type { TextFormatting } from \"./TextFormatting\";\nimport type { TextShader } from \"./TextShader\";\n\nexport const DEFAULT_FONT_SIZE = 14;\n\nexport class TextNode extends SceneNode {\n #text: string;\n #formatting: TextFormatting;\n #font: MsdfFont;\n\n constructor(shader: TextShader, text: string, opts: TextOptions = {}) {\n const { width, height } = measureText(shader.font, text, opts.wordWrap);\n\n if (text.length > shader.maxCharCount) {\n throw new Error(\n `Text: ${text} exceeds ${shader.maxCharCount} characters. Try using fewer characters or increase the limit in Toodle.attach.`,\n );\n }\n\n const em2px = shader.font.lineHeight / (opts.fontSize ?? DEFAULT_FONT_SIZE);\n\n if (!opts.shrinkToFit && !opts.idealSize) {\n opts.idealSize = { width: width / em2px, height: height / em2px };\n }\n\n super({\n ...opts,\n render: {\n shader,\n writeInstance: (_node, _array, _offset) => {\n throw new Error(\n \"not implemented - needs access to text uniform buffer, dimensions and a model matrix\",\n );\n },\n },\n });\n\n this.#font = shader.font;\n this.#text = text;\n this.#formatting = opts;\n }\n\n get text() {\n return this.#text;\n }\n\n get formatting() {\n return this.#formatting;\n }\n\n get font() {\n return this.#font;\n }\n\n set text(text: string) {\n if (!text) {\n throw new Error(\"text cannot be empty\");\n }\n this.#text = text;\n this.setDirty();\n }\n\n get tint() {\n return this.#formatting.color || { r: 1, g: 1, b: 1, a: 1 };\n }\n\n set tint(tint: Color) {\n this.#formatting.color = tint;\n this.setDirty();\n }\n\n set formatting(formatting: TextFormatting) {\n this.#formatting = formatting;\n this.setDirty();\n }\n}\n\nexport type TextOptions = Omit<NodeOptions, \"render\"> & TextFormatting;\n",
|
|
26
|
+
"export default /*wgsl*/ `\n// Adapted from: https://webgpu.github.io/webgpu-samples/?sample=textRenderingMsdf\n\n// Quad vertex positions for a character\nconst pos = array(\n vec2f(0, -1),\n vec2f(1, -1),\n vec2f(0, 0),\n vec2f(1, 0),\n);\n\n// Debug colors for visualization\nconst debugColors = array(\n vec4f(1, 0, 0, 1),\n vec4f(0, 1, 0, 1),\n vec4f(0, 0, 1, 1),\n vec4f(1, 1, 1, 1),\n);\n\n// Vertex input from GPU\nstruct VertexInput {\n @builtin(vertex_index) vertex: u32,\n @builtin(instance_index) instance: u32,\n};\n\n// Output from vertex shader to fragment shader\nstruct VertexOutput {\n @builtin(position) position: vec4f,\n @location(0) texcoord: vec2f,\n @location(1) debugColor: vec4f,\n @location(2) @interpolate(flat) instanceIndex: u32,\n};\n\n// Metadata for a single character glyph\nstruct Char {\n texOffset: vec2f, // Offset to top-left in MSDF texture (pixels)\n texExtent: vec2f, // Size in texture (pixels)\n size: vec2f, // Glyph size in ems\n offset: vec2f, // Position offset in ems\n};\n\n// Metadata for a text block\nstruct TextBlockDescriptor {\n transform: mat3x3f, // Text transform matrix (model matrix)\n color: vec4f, // Text color\n fontSize: f32, // Font size\n blockWidth: f32, // Total width of text block\n blockHeight: f32, // Total height of text block\n bufferPosition: f32 // Index and length in textBuffer\n};\n\n// Font bindings\n@group(0) @binding(0) var fontTexture: texture_2d<f32>;\n@group(0) @binding(1) var fontSampler: sampler;\n@group(0) @binding(2) var<storage> chars: array<Char>;\n@group(0) @binding(3) var<uniform> fontData: vec4f; // Contains line height (x)\n\n// Text bindings\n@group(1) @binding(0) var<storage> texts: array<TextBlockDescriptor>;\n@group(1) @binding(1) var<storage> textBuffer: array<vec4f>; // Each vec4: xy = glyph pos, z = char index\n\n// Global uniforms\n@group(2) @binding(0) var<uniform> viewProjectionMatrix: mat3x3f;\n\n// Vertex shader\n@vertex\nfn vertexMain(input: VertexInput) -> VertexOutput {\n // Because the instance index is used for character indexing, we are\n // overloading the vertex index to store the instance of the text metadata.\n //\n // I.e...\n // Vertex 0-4 = Instance 0, Vertex 0-4\n // Vertex 4-8 = Instance 1, Vertex 0-4\n // Vertex 8-12 = Instance 2, Vertex 0-4\n let vertexIndex = input.vertex % 4;\n let textIndex = input.vertex / 4;\n\n let text = texts[textIndex];\n let textElement = textBuffer[u32(text.bufferPosition) + input.instance];\n let char = chars[u32(textElement.z)];\n\n let lineHeight = fontData.x;\n let textWidth = text.blockWidth;\n let textHeight = text.blockHeight;\n\n // Center text vertically; origin is mid-height\n let offset = vec2f(0, -textHeight / 2);\n\n // Glyph position in ems (quad pos * size + per-char offset)\n let emPos = pos[vertexIndex] * char.size + char.offset + textElement.xy - offset;\n let charPos = emPos * (text.fontSize / lineHeight);\n\n var output: VertexOutput;\n let transformedPosition = viewProjectionMatrix * text.transform * vec3f(charPos, 1);\n\n output.position = vec4f(transformedPosition, 1);\n output.texcoord = pos[vertexIndex] * vec2f(1, -1);\n output.texcoord *= char.texExtent;\n output.texcoord += char.texOffset;\n output.debugColor = debugColors[vertexIndex];\n output.instanceIndex = textIndex;\n return output;\n\n // To debug - hardcode quad in bottom right quarter of the screen:\n // output.position = vec4f(pos[input.vertex], 0, 1);\n}\n\n// Signed distance function sampling for MSDF font rendering\nfn sampleMsdf(texcoord: vec2f) -> f32 {\n let c = textureSample(fontTexture, fontSampler, texcoord);\n return max(min(c.r, c.g), min(max(c.r, c.g), c.b));\n}\n\n// Fragment shader\n// Anti-aliasing technique by Paul Houx\n// more details here:\n// https://github.com/Chlumsky/msdfgen/issues/22#issuecomment-234958005\n@fragment\nfn fragmentMain(input: VertexOutput) -> @location(0) vec4f {\n let text = texts[input.instanceIndex];\n\n // pxRange (AKA distanceRange) comes from the msdfgen tool.\n let pxRange = 4.0;\n let texSize = vec2f(textureDimensions(fontTexture, 0));\n\n let dx = texSize.x * length(vec2f(dpdxFine(input.texcoord.x), dpdyFine(input.texcoord.x)));\n let dy = texSize.y * length(vec2f(dpdxFine(input.texcoord.y), dpdyFine(input.texcoord.y)));\n\n let toPixels = pxRange * inverseSqrt(dx * dx + dy * dy);\n let sigDist = sampleMsdf(input.texcoord) - 0.5;\n let pxDist = sigDist * toPixels;\n\n let edgeWidth = 0.5;\n let alpha = smoothstep(-edgeWidth, edgeWidth, pxDist);\n\n if (alpha < 0.001) {\n discard;\n }\n\n let msdfColor = vec4f(text.color.rgb, text.color.a * alpha);\n return msdfColor;\n\n // Debug options:\n // return text.color;\n // return input.debugColor;\n // return vec4f(1, 0, 1, 1); // hardcoded magenta\n // return textureSample(fontTexture, fontSampler, input.texcoord);\n}\n`;\n",
|
|
27
|
+
"import type { MsdfFont } from \"./MsdfFont\";\nimport msdfShader from \"./text.wgsl\";\n\n/**\n * A webgpu pipeline for rendering blocks of text with a given font.\n */\nexport class FontPipeline {\n constructor(\n public pipeline: GPURenderPipeline,\n public font: MsdfFont,\n public fontBindGroup: GPUBindGroup,\n public maxCharCount: number,\n ) {}\n\n static async create(\n device: GPUDevice,\n font: MsdfFont,\n colorFormat: GPUTextureFormat,\n maxCharCount: number,\n ): Promise<FontPipeline> {\n const pipeline = await pipelinePromise(device, colorFormat, font.name);\n const texture = device.createTexture({\n label: `MSDF font ${font.name}`,\n size: [font.imageBitmap.width, font.imageBitmap.height, 1],\n format: \"rgba8unorm\",\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n });\n device.queue.copyExternalImageToTexture(\n { source: font.imageBitmap },\n { texture },\n [font.imageBitmap.width, font.imageBitmap.height],\n );\n\n const charsGpuBuffer = device.createBuffer({\n label: `MSDF font ${font.name} character layout buffer`,\n size: font.charCount * Float32Array.BYTES_PER_ELEMENT * 8,\n usage: GPUBufferUsage.STORAGE,\n mappedAtCreation: true,\n });\n\n const charsArray = new Float32Array(charsGpuBuffer.getMappedRange());\n // todo: don't double copy this\n charsArray.set(font.charBuffer, 0);\n charsGpuBuffer.unmap();\n\n const fontDataBuffer = device.createBuffer({\n label: `MSDF font ${font.name} metadata buffer`,\n size: Float32Array.BYTES_PER_ELEMENT * 4,\n usage: GPUBufferUsage.UNIFORM,\n mappedAtCreation: true,\n });\n const fontDataArray = new Float32Array(fontDataBuffer.getMappedRange());\n fontDataArray[0] = font.lineHeight;\n fontDataBuffer.unmap();\n\n // create a texture view\n const fontBindGroup = device.createBindGroup({\n layout: pipeline.getBindGroupLayout(0),\n entries: [\n // msdf texture\n {\n binding: 0,\n resource: texture.createView(),\n },\n // msdf texture sampler\n {\n binding: 1,\n resource: device.createSampler(sampler),\n },\n // buffer of character uv and offset data\n {\n binding: 2,\n resource: {\n buffer: charsGpuBuffer,\n },\n },\n // buffer of font metadata, e.g. line height\n {\n binding: 3,\n resource: {\n buffer: fontDataBuffer,\n },\n },\n ],\n });\n return new FontPipeline(pipeline, font, fontBindGroup, maxCharCount);\n }\n}\n\nexport function pipelinePromise(\n device: GPUDevice,\n colorFormat: GPUTextureFormat,\n label: string,\n) {\n const shader = device.createShaderModule({\n label: `${label} shader`,\n code: msdfShader,\n });\n\n return device.createRenderPipelineAsync({\n label: `${label} pipeline`,\n layout: device.createPipelineLayout({\n bindGroupLayouts: [\n device.createBindGroupLayout(fontBindGroupLayout),\n device.createBindGroupLayout(textUniformBindGroupLayout),\n device.createBindGroupLayout(engineUniformBindGroupLayout),\n ],\n }),\n vertex: {\n module: shader,\n entryPoint: \"vertexMain\",\n },\n fragment: {\n module: shader,\n entryPoint: \"fragmentMain\",\n targets: [\n {\n format: colorFormat,\n blend: {\n color: {\n srcFactor: \"src-alpha\",\n dstFactor: \"one-minus-src-alpha\",\n },\n alpha: {\n srcFactor: \"one\",\n dstFactor: \"one\",\n },\n },\n },\n ],\n },\n primitive: {\n topology: \"triangle-strip\",\n stripIndexFormat: \"uint32\",\n },\n });\n}\n\nif (typeof GPUShaderStage === \"undefined\") {\n // polyfill GPUShaderStage so that toodle can be imported in non-browser environments\n // eg for automated testing\n globalThis.GPUShaderStage = {\n VERTEX: 1,\n FRAGMENT: 2,\n COMPUTE: 4,\n };\n}\n\nconst fontBindGroupLayout: GPUBindGroupLayoutDescriptor = {\n label: \"MSDF font group layout\",\n entries: [\n {\n binding: 0,\n visibility: GPUShaderStage.FRAGMENT,\n texture: {},\n },\n {\n binding: 1,\n visibility: GPUShaderStage.FRAGMENT,\n sampler: {},\n },\n {\n binding: 2,\n visibility: GPUShaderStage.VERTEX,\n buffer: { type: \"read-only-storage\" },\n },\n {\n binding: 3,\n visibility: GPUShaderStage.VERTEX,\n buffer: {},\n },\n ],\n};\n\nconst engineUniformBindGroupLayout: GPUBindGroupLayoutDescriptor = {\n label: \"Uniform bind group\",\n entries: [\n {\n binding: 0,\n visibility: GPUShaderStage.VERTEX,\n buffer: {},\n },\n ],\n};\n\nconst sampler: GPUSamplerDescriptor = {\n label: \"MSDF text sampler\",\n minFilter: \"linear\",\n magFilter: \"linear\",\n mipmapFilter: \"linear\",\n maxAnisotropy: 16,\n};\n\nconst textUniformBindGroupLayout: GPUBindGroupLayoutDescriptor = {\n label: \"MSDF text block uniform\",\n entries: [\n {\n // text data - matrix, color, font size, characters\n binding: 0,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: { type: \"read-only-storage\" },\n },\n {\n binding: 1,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: { type: \"read-only-storage\" },\n },\n ],\n};\n",
|
|
28
|
+
"import { WgslReflect } from \"wgsl_reflect\";\nimport type { SceneNode } from \"../scene/SceneNode\";\nimport type { EngineUniform } from \"../shaders/EngineUniform\";\nimport type { IShader } from \"../shaders/IShader\";\nimport type { FontPipeline } from \"./FontPipeline\";\nimport type { MsdfFont } from \"./MsdfFont\";\nimport { findLargestFontSize, measureText, shapeText } from \"./shaping\";\nimport { DEFAULT_FONT_SIZE, TextNode } from \"./TextNode\";\nimport msdfShader from \"./text.wgsl\";\n\nconst deets = new WgslReflect(msdfShader);\nconst struct = deets.structs.find((s) => s.name === \"TextBlockDescriptor\");\nif (!struct) {\n throw new Error(\"FormattedText struct not found\");\n}\nconst textDescriptorInstanceSize = struct.size;\n\nexport class TextShader implements IShader {\n #device: GPUDevice;\n #pipeline: GPURenderPipeline;\n #bindGroups: GPUBindGroup[] = [];\n #font: MsdfFont;\n #maxCharCount: number;\n #engineUniformsBuffer: GPUBuffer;\n #descriptorBuffer: GPUBuffer;\n #textBlockBuffer: GPUBuffer;\n #cpuDescriptorBuffer: Float32Array;\n #cpuTextBlockBuffer: Float32Array;\n #instanceIndex = 0;\n #textBlockOffset = 0;\n\n constructor(\n device: GPUDevice,\n pipeline: FontPipeline,\n font: MsdfFont,\n colorFormat: GPUTextureFormat,\n instanceCount: number,\n ) {\n this.#device = device;\n this.#font = font;\n this.#pipeline = pipeline.pipeline;\n this.#maxCharCount = pipeline.maxCharCount;\n\n this.#descriptorBuffer = device.createBuffer({\n label: \"msdf text descriptor buffer\",\n size: textDescriptorInstanceSize * instanceCount,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n });\n\n this.#cpuDescriptorBuffer = new Float32Array(\n (instanceCount * textDescriptorInstanceSize) /\n Float32Array.BYTES_PER_ELEMENT,\n );\n\n this.#cpuTextBlockBuffer = new Float32Array(\n instanceCount * this.maxCharCount * 4,\n );\n\n this.#engineUniformsBuffer = device.createBuffer({\n label: \"msdf view projection matrix\",\n size: Float32Array.BYTES_PER_ELEMENT * 12,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n\n this.#textBlockBuffer = device.createBuffer({\n label: \"msdf text buffer\",\n size:\n instanceCount * this.maxCharCount * 4 * Float32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n });\n\n // create uniform bind groups\n this.#bindGroups.push(pipeline.fontBindGroup);\n\n this.#bindGroups.push(\n device.createBindGroup({\n label: \"msdf text bind group\",\n layout: pipeline.pipeline.getBindGroupLayout(1),\n entries: [\n {\n binding: 0,\n resource: { buffer: this.#descriptorBuffer },\n },\n {\n binding: 1,\n resource: { buffer: this.#textBlockBuffer },\n },\n ],\n }),\n );\n\n const engineUniformsBindGroup = device.createBindGroup({\n label: \"msdf text uniforms bind group\",\n layout: pipeline.pipeline.getBindGroupLayout(2),\n entries: [\n {\n binding: 0,\n resource: { buffer: this.#engineUniformsBuffer },\n },\n ],\n });\n this.#bindGroups.push(engineUniformsBindGroup);\n }\n\n startFrame(device: GPUDevice, uniform: EngineUniform): void {\n device.queue.writeBuffer(\n this.#engineUniformsBuffer,\n 0,\n uniform.viewProjectionMatrix as Float32Array,\n );\n this.#instanceIndex = 0;\n this.#textBlockOffset = 0;\n }\n\n processBatch(renderPass: GPURenderPassEncoder, nodes: SceneNode[]): number {\n if (nodes.length === 0) return 0;\n\n renderPass.setPipeline(this.#pipeline);\n for (let i = 0; i < this.#bindGroups.length; i++) {\n renderPass.setBindGroup(i, this.#bindGroups[i]);\n }\n\n for (const node of nodes) {\n if (!(node instanceof TextNode)) {\n console.error(node);\n throw new Error(\n `Tried to use TextShader on something that isn't a TextNode: ${node}`,\n );\n }\n const text = node.text;\n const formatting = node.formatting;\n const measurements = measureText(this.#font, text, formatting.wordWrap);\n\n const textBlockSize = 4 * text.length;\n\n // Calculate the buffer offset to get the current TextBlockDescriptor\n const textDescriptorOffset =\n (this.#instanceIndex * textDescriptorInstanceSize) /\n Float32Array.BYTES_PER_ELEMENT;\n\n // Shape text and pack to the buffer...\n this.#cpuDescriptorBuffer.set(node.matrix, textDescriptorOffset);\n\n // Color\n this.#cpuDescriptorBuffer.set(\n [node.tint.r, node.tint.g, node.tint.b, node.tint.a],\n textDescriptorOffset + 12,\n );\n\n // Font Size\n const size = node.size ?? measurements;\n const fontSize = formatting.shrinkToFit\n ? findLargestFontSize(this.#font, text, size, formatting)\n : formatting.fontSize;\n const actualFontSize = fontSize || DEFAULT_FONT_SIZE;\n this.#cpuDescriptorBuffer[textDescriptorOffset + 16] = actualFontSize;\n\n // Alignment and dimensions\n this.#cpuDescriptorBuffer[textDescriptorOffset + 17] =\n formatting.align === \"center\" ? 0 : measurements.width;\n this.#cpuDescriptorBuffer[textDescriptorOffset + 18] =\n measurements.height;\n\n // Text block buffer offset\n // the shader at text.wgsl.ts is expecting an index into the text block buffer,\n // which is an array<vec4f> hence the division by 4\n this.#cpuDescriptorBuffer[textDescriptorOffset + 19] =\n this.#textBlockOffset / 4;\n\n shapeText(\n this.#font,\n text,\n size,\n actualFontSize,\n formatting,\n this.#cpuTextBlockBuffer,\n this.#textBlockOffset,\n );\n\n // Write instance data\n this.#device.queue.writeBuffer(\n this.#descriptorBuffer,\n textDescriptorOffset * Float32Array.BYTES_PER_ELEMENT,\n this.#cpuDescriptorBuffer,\n textDescriptorOffset,\n textDescriptorInstanceSize / Float32Array.BYTES_PER_ELEMENT,\n );\n\n this.#device.queue.writeBuffer(\n this.#textBlockBuffer,\n this.#textBlockOffset * Float32Array.BYTES_PER_ELEMENT,\n this.#cpuTextBlockBuffer,\n this.#textBlockOffset,\n textBlockSize,\n );\n\n this.#textBlockOffset += textBlockSize;\n\n // Draw text\n renderPass.draw(\n 4,\n measurements.printedCharCount,\n 4 * this.#instanceIndex,\n 0,\n );\n this.#instanceIndex++;\n }\n\n return nodes.length;\n }\n\n endFrame(): void {\n // No cleanup needed\n }\n\n get font() {\n return this.#font;\n }\n\n get maxCharCount() {\n return this.#maxCharCount;\n }\n}\n",
|
|
29
|
+
"/**\n * A simple pool for creating and reusing objects to avoid allocation between frames\n *\n * @example\n *\n * const pool = new Pool(() => new SomeObject(), 10);\n *\n * function animate() {\n * const obj = pool.get();\n * console.log(obj);\n * pool.free();\n * requestAnimationFrame(animate);\n * }\n *\n * requestAnimationFrame(animate);\n */\nexport class Pool<T> {\n #items: T[] = [];\n #create: () => T;\n #index = 0;\n\n constructor(create: () => T, initialSize = 0) {\n this.#create = create;\n if (initialSize > 0) {\n this.#items = Array.from({ length: initialSize })\n .fill(null)\n .map(() => this.#create());\n }\n }\n\n get() {\n if (this.#index >= this.#items.length) {\n this.#items.push(this.#create());\n }\n\n return this.#items[this.#index++];\n }\n\n free() {\n this.#index = 0;\n }\n}\n",
|
|
30
|
+
"export default /*wgsl*/ `\n// ==============================\n// === BOUNDING BOX PASS =======\n// ==============================\n\n// Input texture from which to compute the non-transparent bounding box\n@group(0) @binding(0)\nvar input_texture: texture_2d<f32>;\n\n// Atomic bounding box storage structure\nstruct bounding_box_atomic {\n min_x: atomic<u32>,\n min_y: atomic<u32>,\n max_x: atomic<u32>,\n max_y: atomic<u32>,\n};\n\n// Storage buffer to hold atomic bounding box updates\n@group(0) @binding(1)\nvar<storage, read_write> bounds: bounding_box_atomic;\n\n// Compute shader to find the bounding box of non-transparent pixels\n@compute @workgroup_size(8, 8)\nfn find_bounds(@builtin(global_invocation_id) gid: vec3<u32>) {\n let size = textureDimensions(input_texture).xy;\n if (gid.x >= size.x || gid.y >= size.y) {\n return;\n }\n\n let pixel = textureLoad(input_texture, vec2<i32>(gid.xy), 0);\n if (pixel.a > 0.0) {\n atomicMin(&bounds.min_x, gid.x);\n atomicMin(&bounds.min_y, gid.y);\n atomicMax(&bounds.max_x, gid.x);\n atomicMax(&bounds.max_y, gid.y);\n }\n}\n\n// ==============================\n// === CROP + OUTPUT PASS ======\n// ==============================\n\n// Input texture from which cropped data is read\n@group(0) @binding(0)\nvar input_texture_crop: texture_2d<f32>;\n\n// Output texture where cropped image is written\n@group(0) @binding(1)\nvar output_texture: texture_storage_2d<rgba8unorm, write>;\n\n// Bounding box passed in as a uniform (not atomic anymore)\nstruct bounding_box_uniform {\n min_x: u32,\n min_y: u32,\n max_x: u32,\n max_y: u32,\n};\n\n@group(0) @binding(2)\nvar<uniform> bounds_uniform: bounding_box_uniform;\n\n// Struct to store both original and cropped texture dimensions\nstruct image_dimensions {\n original_width: u32,\n original_height: u32,\n cropped_width: u32,\n cropped_height: u32,\n};\n\n// Storage buffer to output the result dimensions\n@group(0) @binding(3)\nvar<storage, read_write> dimensions_out: image_dimensions;\n\n// Compute shader to crop the input texture to the bounding box and output it\n@compute @workgroup_size(8, 8)\nfn crop_and_output(@builtin(global_invocation_id) gid: vec3<u32>) {\n let size = textureDimensions(input_texture_crop).xy;\n\n let crop_width = bounds_uniform.max_x - bounds_uniform.min_x + 1u;\n let crop_height = bounds_uniform.max_y - bounds_uniform.min_y + 1u;\n\n if (gid.x >= crop_width || gid.y >= crop_height) {\n return;\n }\n\n let src_coord = vec2<i32>(\n i32(bounds_uniform.min_x + gid.x),\n i32(bounds_uniform.min_y + gid.y)\n );\n\n let dst_coord = vec2<i32>(i32(gid.x), i32(gid.y));\n let pixel = textureLoad(input_texture_crop, src_coord, 0);\n textureStore(output_texture, dst_coord, pixel);\n\n // Output dimensions from workgroup (0,0) only\n if (gid.x == 0u && gid.y == 0u) {\n dimensions_out.original_width = size.x;\n dimensions_out.original_height = size.y;\n dimensions_out.cropped_width = crop_width;\n dimensions_out.cropped_height = crop_height;\n }\n}\n\n// ==============================\n// === MISSING TEXTURE FILL ====\n// ==============================\n\n// Output texture to draw a fallback checkerboard\n@group(0) @binding(0)\nvar checker_texture: texture_storage_2d<rgba8unorm, write>;\n\n// Compute shader to fill a texture with a purple & green checkerboard\n@compute @workgroup_size(8, 8)\nfn missing_texture(@builtin(global_invocation_id) id: vec3<u32>) {\n let size = textureDimensions(checker_texture);\n if (id.x >= size.x || id.y >= size.y) {\n return;\n }\n\n let checker_size = 25u;\n let on_color = ((id.x / checker_size + id.y / checker_size) % 2u) == 0u;\n\n let color = select(\n vec4<f32>(0.5, 0.0, 0.5, 1.0), // Purple\n vec4<f32>(0.0, 1.0, 0.0, 1.0), // Green\n on_color\n );\n\n textureStore(checker_texture, vec2<i32>(id.xy), color);\n}\n`;\n",
|
|
31
|
+
"import computeShader from \"./pixel-scraping.wgsl\";\nimport type { TextureWithMetadata } from \"./types\";\n\n// Constants\nconst BOUNDING_BOX_SIZE = 4 * Uint32Array.BYTES_PER_ELEMENT;\nconst WORKGROUP_SIZE = 8;\nconst MAX_BOUND = 0xffffffff;\nconst MIN_BOUND = 0x00000000;\nconst BYTES_PER_PIXEL = 4;\n\n/**\n * The data returned by the compute shader that represents the opaque pixels in a texture.\n * Texel coordinates start at 0,0 in the top-left corner of the texture.\n */\ntype OpaqueRect = {\n /** The leftmost texel coordinate of the bounding box. */\n texelX: number;\n /** The topmost texel coordinate of the bounding box. */\n texelY: number;\n /** The width of the bounding box in texels. */\n texelWidth: number;\n /** The height of the bounding box in texels. */\n texelHeight: number;\n};\n\n/**\n * A GPU-based texture processor that uses compute shaders to:\n * 1. Find the non-transparent bounding box in a texture.\n * 2. Crop the texture to that bounding box.\n * 3. Create a fallback texture if no non-transparent pixels are found.\n */\nexport class TextureComputeShader {\n #device: GPUDevice;\n #boundingBuffer: GPUBuffer;\n #cropPipeline: GPUComputePipeline;\n #boundPipeline: GPUComputePipeline;\n #missingTexturePipeline: GPUComputePipeline;\n\n constructor(\n device: GPUDevice,\n cropPipeline: GPUComputePipeline,\n boundPipeline: GPUComputePipeline,\n missingTexturePipeline: GPUComputePipeline,\n ) {\n this.#device = device;\n this.#boundPipeline = boundPipeline;\n this.#cropPipeline = cropPipeline;\n this.#missingTexturePipeline = missingTexturePipeline;\n\n // Buffer to store the computed bounding box [minX, minY, maxX, maxY]\n this.#boundingBuffer = this.#device.createBuffer({\n size: BOUNDING_BOX_SIZE,\n usage:\n GPUBufferUsage.STORAGE |\n GPUBufferUsage.COPY_SRC |\n GPUBufferUsage.COPY_DST,\n });\n }\n\n /**\n * Factory method to initialize pipelines and return an instance of TextureComputeShader.\n */\n static create(device: GPUDevice) {\n const pipelines = createPipelines(device, \"TextureComputeShader\");\n return new TextureComputeShader(\n device,\n pipelines.cropPipeline,\n pipelines.boundPipeline,\n pipelines.missingTexturePipeline,\n );\n }\n\n /**\n * Main entry point to process a texture.\n * Returns a cropped ImageBitmap and metadata.\n */\n async processTexture(\n textureWrapper: TextureWithMetadata,\n ): Promise<TextureWithMetadata> {\n const boundsBindGroup = this.#boundsBindGroup(textureWrapper.texture);\n\n const commandEncoder = this.#device.createCommandEncoder();\n const passEncoder = commandEncoder.beginComputePass();\n\n const dispatchX = Math.ceil(textureWrapper.texture.width / WORKGROUP_SIZE);\n const dispatchY = Math.ceil(textureWrapper.texture.height / WORKGROUP_SIZE);\n\n // Initialize bounding box with max/min values\n const boundsInit = new Uint32Array([\n MAX_BOUND,\n MAX_BOUND,\n MIN_BOUND,\n MIN_BOUND,\n ]);\n this.#device.queue.writeBuffer(\n this.#boundingBuffer,\n 0,\n boundsInit.buffer,\n 0,\n BOUNDING_BOX_SIZE,\n );\n\n // Run bounds detection compute shader\n passEncoder.setPipeline(this.#boundPipeline);\n passEncoder.setBindGroup(0, boundsBindGroup);\n passEncoder.dispatchWorkgroups(dispatchX, dispatchY);\n passEncoder.end();\n this.#device.queue.submit([commandEncoder.finish()]);\n\n const { texelX, texelY, texelWidth, texelHeight, computeBuffer } =\n await this.#getBoundingBox();\n\n // If no non-transparent pixels were found\n if (texelX === MAX_BOUND || texelY === MAX_BOUND) {\n return await this.#createMissingTexture(textureWrapper.texture);\n }\n\n // Crop the texture to the computed bounds\n const croppedTexture = await this.#cropTexture(\n texelWidth,\n texelHeight,\n computeBuffer,\n textureWrapper.texture,\n );\n\n const leftCrop = texelX;\n const rightCrop = textureWrapper.originalSize.width - texelX - texelWidth;\n const topCrop = texelY;\n const bottomCrop =\n textureWrapper.originalSize.height - texelY - texelHeight;\n\n textureWrapper = {\n texture: croppedTexture,\n cropOffset: { x: leftCrop - rightCrop, y: bottomCrop - topCrop },\n originalSize: textureWrapper.originalSize,\n };\n\n return textureWrapper;\n }\n\n /**\n * Reads the GPU buffer containing the bounding box.\n */\n async #getBoundingBox(): Promise<\n OpaqueRect & { computeBuffer: Uint32Array }\n > {\n const readBuffer = this.#device.createBuffer({\n label: \"AABB Compute Buffer\",\n size: BOUNDING_BOX_SIZE,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n const copyEncoder = this.#device.createCommandEncoder();\n copyEncoder.copyBufferToBuffer(\n this.#boundingBuffer,\n 0,\n readBuffer,\n 0,\n BOUNDING_BOX_SIZE,\n );\n this.#device.queue.submit([copyEncoder.finish()]);\n\n await readBuffer.mapAsync(GPUMapMode.READ);\n const computeBuffer = new Uint32Array(readBuffer.getMappedRange().slice(0));\n readBuffer.unmap();\n\n const [minX, minY, maxX, maxY] = computeBuffer;\n return {\n texelX: minX,\n texelY: minY,\n texelWidth: maxX - minX + 1,\n texelHeight: maxY - minY + 1,\n\n computeBuffer,\n };\n }\n\n /**\n * Crops the original texture to the specified bounds using a compute shader.\n */\n async #cropTexture(\n croppedWidth: number,\n croppedHeight: number,\n computeBuffer: Uint32Array,\n inputTexture: GPUTexture,\n ) {\n const boundsUniform = this.#device.createBuffer({\n label: \"Cropping Bounds Uniform Buffer\",\n size: BOUNDING_BOX_SIZE,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n this.#device.queue.writeBuffer(boundsUniform, 0, computeBuffer);\n\n const outputTexture = this.#device.createTexture({\n label: \"Cropped Texture\",\n size: [croppedWidth, croppedHeight],\n format: \"rgba8unorm\",\n usage:\n GPUTextureUsage.STORAGE_BINDING |\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_SRC,\n });\n\n const dimensionsOutBuffer = this.#device.createBuffer({\n label: \"Cropping Dimensions Output Buffer\",\n size: BOUNDING_BOX_SIZE,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,\n });\n\n const bindGroup = this.#croppingBindGroup(\n inputTexture,\n outputTexture,\n boundsUniform,\n dimensionsOutBuffer,\n );\n\n const encoder = this.#device.createCommandEncoder();\n const pass = encoder.beginComputePass();\n pass.setPipeline(this.#cropPipeline);\n pass.setBindGroup(0, bindGroup);\n pass.dispatchWorkgroups(\n Math.ceil(croppedWidth / WORKGROUP_SIZE),\n Math.ceil(croppedHeight / WORKGROUP_SIZE),\n );\n pass.end();\n this.#device.queue.submit([encoder.finish()]);\n\n return outputTexture;\n }\n\n /**\n * Creates a fallback placeholder texture if the input is fully transparent.\n */\n async #createMissingTexture(\n inputTexture: GPUTexture,\n ): Promise<TextureWithMetadata> {\n const placeholder = this.#device.createTexture({\n label: \"Missing Placeholder Texture\",\n size: [inputTexture.width, inputTexture.height],\n format: \"rgba8unorm\",\n usage:\n GPUTextureUsage.COPY_SRC |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.STORAGE_BINDING |\n GPUTextureUsage.TEXTURE_BINDING,\n });\n\n const encoder = this.#device.createCommandEncoder();\n const pass = encoder.beginComputePass();\n pass.setPipeline(this.#missingTexturePipeline);\n pass.setBindGroup(0, this.#missingTextureBindGroup(placeholder));\n pass.dispatchWorkgroups(placeholder.width / 8, placeholder.height / 8);\n pass.end();\n this.#device.queue.submit([encoder.finish()]);\n\n return {\n texture: placeholder,\n cropOffset: { x: 0, y: 0 },\n originalSize: { width: inputTexture.width, height: inputTexture.height },\n };\n }\n\n /**\n * Converts a GPUTexture to an ImageBitmap for display or further use.\n */\n async #textureToBitmap(\n texture: GPUTexture,\n width: number,\n height: number,\n ): Promise<ImageBitmap> {\n const paddedBytesPerRow = Math.ceil((width * BYTES_PER_PIXEL) / 256) * 256;\n const bufferSize = paddedBytesPerRow * height;\n\n const readBuffer = this.#device.createBuffer({\n size: bufferSize,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n const encoder = this.#device.createCommandEncoder();\n encoder.copyTextureToBuffer(\n { texture },\n { buffer: readBuffer, bytesPerRow: paddedBytesPerRow },\n { width, height, depthOrArrayLayers: 1 },\n );\n this.#device.queue.submit([encoder.finish()]);\n\n await readBuffer.mapAsync(GPUMapMode.READ);\n const raw = readBuffer.getMappedRange();\n const rawArray = new Uint8Array(raw);\n\n const pixelData = new Uint8ClampedArray(width * height * 4);\n for (let y = 0; y < height; y++) {\n const src = y * paddedBytesPerRow;\n const dst = y * width * 4;\n pixelData.set(rawArray.subarray(src, src + width * 4), dst);\n }\n readBuffer.unmap();\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext(\"2d\")!;\n ctx.putImageData(new ImageData(pixelData, width, height), 0, 0);\n\n return await createImageBitmap(canvas);\n }\n\n // Bind group helpers\n\n #boundsBindGroup(inputTexture: GPUTexture): GPUBindGroup {\n return this.#device.createBindGroup({\n layout: this.#boundPipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: inputTexture.createView() },\n { binding: 1, resource: { buffer: this.#boundingBuffer } },\n ],\n });\n }\n\n #croppingBindGroup(\n inputTexture: GPUTexture,\n outputTexture: GPUTexture,\n boundsUniform: GPUBuffer,\n dimensionsOutBuffer: GPUBuffer,\n ): GPUBindGroup {\n return this.#device.createBindGroup({\n layout: this.#cropPipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: inputTexture.createView() },\n { binding: 1, resource: outputTexture.createView() },\n { binding: 2, resource: { buffer: boundsUniform } },\n { binding: 3, resource: { buffer: dimensionsOutBuffer } },\n ],\n });\n }\n\n #missingTextureBindGroup(outputTexture: GPUTexture): GPUBindGroup {\n return this.#device.createBindGroup({\n layout: this.#missingTexturePipeline.getBindGroupLayout(0),\n entries: [{ binding: 0, resource: outputTexture.createView() }],\n });\n }\n}\n\n/**\n * Creates compute pipelines for bounding box detection, cropping, and fallback texture generation.\n */\nfunction createPipelines(device: GPUDevice, label: string) {\n const shader = device.createShaderModule({\n label: `${label} Shader`,\n code: computeShader,\n });\n\n const findBoundsBindGroupLayout = device.createBindGroupLayout({\n label: \"Bounds Detection Layout\",\n entries: [\n {\n binding: 0,\n visibility: GPUShaderStage.COMPUTE,\n texture: { sampleType: \"float\", viewDimension: \"2d\" },\n },\n {\n binding: 1,\n visibility: GPUShaderStage.COMPUTE,\n buffer: { type: \"storage\" },\n },\n ],\n });\n\n const cropBindGroupLayout = device.createBindGroupLayout({\n label: \"Cropping Layout\",\n entries: [\n { binding: 0, visibility: GPUShaderStage.COMPUTE, texture: {} },\n {\n binding: 1,\n visibility: GPUShaderStage.COMPUTE,\n storageTexture: {\n access: \"write-only\",\n format: \"rgba8unorm\",\n viewDimension: \"2d\",\n },\n },\n {\n binding: 2,\n visibility: GPUShaderStage.COMPUTE,\n buffer: { type: \"uniform\" },\n },\n {\n binding: 3,\n visibility: GPUShaderStage.COMPUTE,\n buffer: { type: \"storage\" },\n },\n ],\n });\n\n const missingTextureBindGroupLayout = device.createBindGroupLayout({\n label: \"Missing Texture Layout\",\n entries: [\n {\n binding: 0,\n visibility: GPUShaderStage.COMPUTE,\n storageTexture: {\n access: \"write-only\",\n format: \"rgba8unorm\",\n viewDimension: \"2d\",\n },\n },\n ],\n });\n\n return {\n boundPipeline: device.createComputePipeline({\n label: `${label} - Find Bounds Pipeline`,\n layout: device.createPipelineLayout({\n bindGroupLayouts: [findBoundsBindGroupLayout],\n }),\n compute: { module: shader, entryPoint: \"find_bounds\" },\n }),\n cropPipeline: device.createComputePipeline({\n label: `${label} - Crop Pipeline`,\n layout: device.createPipelineLayout({\n bindGroupLayouts: [cropBindGroupLayout],\n }),\n compute: { module: shader, entryPoint: \"crop_and_output\" },\n }),\n missingTexturePipeline: device.createComputePipeline({\n label: `${label} - Missing Texture Pipeline`,\n layout: device.createPipelineLayout({\n bindGroupLayouts: [missingTextureBindGroupLayout],\n }),\n compute: { module: shader, entryPoint: \"missing_texture\" },\n }),\n };\n}\n",
|
|
32
|
+
"import { unzipSync } from \"fflate\";\nimport type {\n CpuTextureAtlas,\n TextureRegion,\n TextureWithMetadata,\n} from \"./types\";\n\nexport async function getBitmapFromUrl(url: URL): Promise<ImageBitmap> {\n try {\n const response = await fetch(url);\n const blob = await response.blob();\n return await createImageBitmap(blob);\n } catch (e) {\n console.error(`Failed to load texture from ${url.href}`, e);\n throw e;\n }\n}\n\n/**\n * Converts an image Blob to ImageData.\n *\n * @param blob - The Blob containing the image.\n * @returns A Promise resolving to the image as ImageData.\n */\nasync function blobToImageData(blob: Blob) {\n const imageBitmap: ImageBitmap = await createImageBitmap(blob);\n\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n\n if (!ctx) {\n throw new Error(\"Failed to get 2D context from canvas\");\n }\n\n canvas.width = imageBitmap.width;\n canvas.height = imageBitmap.height;\n\n ctx.drawImage(imageBitmap, 0, 0);\n\n const imageData: ImageData = ctx.getImageData(\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n\n imageBitmap.close();\n\n return imageData;\n}\n\n/**\n * Creates a checkerboard pattern ImageData in black and purple.\n *\n * @param width - Width of the image.\n * @param height - Height of the image.\n * @param tileSize - Size of each checker tile (default is 8).\n * @returns The generated ImageData object.\n */\nfunction createCheckerboardImageData(\n width: number,\n height: number,\n tileSize = 8,\n): ImageData {\n const data = new Uint8ClampedArray(width * height * 4);\n\n const purple = [128, 0, 128, 255]; // #800080\n const black = [0, 0, 0, 255]; // #000000\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const usePurple =\n (Math.floor(x / tileSize) + Math.floor(y / tileSize)) % 2 === 0;\n const color = usePurple ? purple : black;\n const idx = (y * width + x) * 4;\n\n data.set(color, idx);\n }\n }\n\n return new ImageData(data, width, height);\n}\n\nexport async function loadZip(\n zipUrl: URL,\n): Promise<{ path: string; bitmap: ImageBitmap }[]> {\n console.time(\"fetch zip\");\n const zip = await fetch(zipUrl);\n const zipBlob = await zip.blob();\n const zipUint8Array = await zipBlob.arrayBuffer();\n console.timeEnd(\"fetch zip\");\n\n console.time(\"unzip\");\n const files = unzipSync(new Uint8Array(zipUint8Array));\n console.timeEnd(\"unzip\");\n\n console.time(\"create bitmaps\");\n const validFiles = Object.entries(files).filter(\n ([path]) => !path.match(\"__MACOS\") && path.endsWith(\".png\"),\n );\n\n return await Promise.all(\n validFiles.map(async ([path, file]) => {\n const bitmap = await createImageBitmap(new Blob([file]));\n return { path, bitmap };\n }),\n );\n}\n\nexport async function packBitmapsToAtlas(\n images: Map<string, TextureWithMetadata>,\n textureSize: number,\n device: GPUDevice,\n): Promise<CpuTextureAtlas[]> {\n const cpuTextureAtlases: CpuTextureAtlas[] = [];\n const packed: PackedTexture[] = [];\n const spaces: Rectangle[] = [\n { x: 0, y: 0, width: textureSize, height: textureSize },\n ];\n\n let atlasRegionMap = new Map<string, TextureRegion>();\n\n for (const [id, { texture, cropOffset: offset, originalSize }] of images) {\n // Find best fitting space using guillotine method\n let bestSpace = -1;\n let bestScore = Number.POSITIVE_INFINITY;\n\n for (let i = 0; i < spaces.length; i++) {\n const space = spaces[i];\n if (texture.width <= space.width && texture.height <= space.height) {\n // Score based on how well it fits (smaller score is better)\n const score = Math.abs(\n space.width * space.height - texture.width * texture.height,\n );\n if (score < bestScore) {\n bestScore = score;\n bestSpace = i;\n }\n }\n }\n\n if (bestSpace === -1) {\n const tex = await createTextureAtlasTexture(device, packed, textureSize);\n cpuTextureAtlases.push({\n texture: tex,\n textureRegions: atlasRegionMap,\n width: tex.width,\n height: tex.height,\n });\n\n atlasRegionMap = new Map<string, TextureRegion>();\n packed.length = 0;\n\n spaces.length = 0;\n spaces.push({\n x: 0,\n y: 0,\n width: textureSize,\n height: textureSize,\n });\n bestSpace = 0;\n }\n\n const space = spaces[bestSpace];\n\n // Pack the image\n packed.push(<PackedTexture>{\n texture: await textureToBitmap(\n device,\n texture,\n texture.width,\n texture.height,\n ),\n x: space.x,\n y: space.y,\n width: texture.width,\n height: texture.height,\n });\n\n texture.destroy();\n\n // Split remaining space into two new spaces\n spaces.splice(bestSpace, 1);\n\n if (space.width - texture.width > 0) {\n spaces.push({\n x: space.x + texture.width,\n y: space.y,\n width: space.width - texture.width,\n height: texture.height,\n });\n }\n\n if (space.height - texture.height > 0) {\n spaces.push({\n x: space.x,\n y: space.y + texture.height,\n width: space.width,\n height: space.height - texture.height,\n });\n }\n\n // Create atlas coords\n atlasRegionMap.set(id, {\n uvOffset: {\n x: space.x / textureSize,\n y: space.y / textureSize,\n },\n uvScale: {\n width: originalSize.width / textureSize,\n height: originalSize.height / textureSize,\n },\n uvScaleCropped: {\n width: texture.width / textureSize,\n height: texture.height / textureSize,\n },\n cropOffset: offset,\n originalSize,\n });\n }\n const tex = await createTextureAtlasTexture(device, packed, textureSize);\n\n cpuTextureAtlases.push({\n texture: tex,\n textureRegions: atlasRegionMap,\n width: tex.width,\n height: tex.height,\n });\n\n return cpuTextureAtlases;\n}\n\nasync function createTextureAtlasTexture(\n device: GPUDevice,\n packed: PackedTexture[],\n atlasSize: number,\n) {\n const encoder: GPUCommandEncoder = device.createCommandEncoder();\n const atlasTexture: GPUTexture = device.createTexture({\n label: \"Texture Atlas Texture Holder\",\n size: [atlasSize, atlasSize, 1],\n format: \"rgba8unorm\",\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.COPY_SRC |\n GPUTextureUsage.RENDER_ATTACHMENT,\n });\n\n for (const texture of packed) {\n device.queue.copyExternalImageToTexture(\n {\n source: texture.texture,\n },\n {\n texture: atlasTexture,\n origin: [texture.x, texture.y, 0],\n },\n [texture.width, texture.height, 1],\n );\n }\n device.queue.submit([encoder.finish()]);\n const atlasBitmap: ImageBitmap = await textureToBitmap(\n device,\n atlasTexture,\n atlasTexture.width,\n atlasTexture.height,\n );\n atlasTexture.destroy();\n return atlasBitmap;\n}\n\n/**\n * Converts a WebGPU GPUTexture into an ImageBitmap.\n *\n * @param {GPUDevice} device - The WebGPU device used to create GPU resources.\n * @param {GPUTexture} texture - The GPUTexture to convert. Must be in `rgba8unorm` format.\n * @param {number} width - The width of the texture in pixels.\n * @param {number} height - The height of the texture in pixels.\n * @returns {Promise<ImageBitmap>} A promise that resolves to an ImageBitmap containing the texture's contents.\n *\n * @example\n * const bitmap = await textureToBitmap(device, queue, myTexture, 256, 256);\n * const canvas = document.createElement(\"canvas\");\n * const ctx = canvas.getContext(\"2d\");\n * ctx.drawImage(bitmap, 0, 0);\n */\nasync function textureToBitmap(\n device: GPUDevice,\n texture: GPUTexture,\n width: number,\n height: number,\n): Promise<ImageBitmap> {\n const bytesPerPixel = 4;\n const bytesPerRow = Math.ceil((width * bytesPerPixel) / 256) * 256;\n const bufferSize = bytesPerRow * height;\n\n const readBuffer = device.createBuffer({\n size: bufferSize,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n const commandEncoder = device.createCommandEncoder();\n commandEncoder.copyTextureToBuffer(\n { texture: texture },\n {\n buffer: readBuffer,\n bytesPerRow: bytesPerRow,\n rowsPerImage: height,\n },\n {\n width: width,\n height: height,\n depthOrArrayLayers: 1,\n },\n );\n\n const commands = commandEncoder.finish();\n device.queue.submit([commands]);\n\n await readBuffer.mapAsync(GPUMapMode.READ);\n const arrayBuffer = readBuffer.getMappedRange();\n const data = new Uint8ClampedArray(arrayBuffer);\n\n const imageData = new Uint8ClampedArray(width * height * 4);\n for (let y = 0; y < height; y++) {\n const rowStart = y * bytesPerRow;\n const rowEnd = rowStart + width * 4;\n imageData.set(data.subarray(rowStart, rowEnd), y * width * 4);\n }\n\n const image = new ImageData(imageData, width, height);\n const bitmap = await createImageBitmap(image);\n\n readBuffer.unmap();\n return bitmap;\n}\n\ntype PackedTexture = {\n texture: ImageBitmap;\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\ntype Rectangle = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n",
|
|
33
|
+
"import type { Size } from \"../coreTypes/Size\";\nimport type { Vec2 } from \"../coreTypes/Vec2\";\nimport type { Limits } from \"../limits\";\nimport { JumboQuadNode } from \"../scene/JumboQuadNode\";\nimport { QuadNode } from \"../scene/QuadNode\";\nimport type { SceneNode } from \"../scene/SceneNode\";\nimport { FontPipeline } from \"../text/FontPipeline\";\nimport { MsdfFont } from \"../text/MsdfFont\";\nimport { TextShader } from \"../text/TextShader\";\nimport { assert } from \"../utils/mod\";\nimport { TextureComputeShader } from \"./TextureComputeShader\";\nimport type {\n AtlasBundleOpts,\n AtlasCoords,\n CpuTextureAtlas,\n PixiRegion,\n TextureBundleOpts,\n TextureRegion,\n TextureWithMetadata,\n} from \"./types\";\nimport { getBitmapFromUrl, packBitmapsToAtlas } from \"./util\";\n\nexport type TextureId = string;\nexport type BundleId = string;\nexport type FontId = string;\n\ntype Bundle = {\n atlases: CpuTextureAtlas[];\n isLoaded: boolean;\n atlasIndices: number[];\n};\n\nexport class AssetManager {\n readonly textureAtlas: GPUTexture;\n #device: GPUDevice;\n #presentationFormat: GPUTextureFormat;\n #bundles: Map<BundleId, Bundle> = new Map();\n #textures: Map<string, AtlasCoords[]> = new Map();\n #fonts: Map<string, TextShader> = new Map();\n #cropComputeShader: TextureComputeShader;\n #limits: Limits;\n #availableIndices: Set<number> = new Set();\n\n constructor(\n device: GPUDevice,\n presentationFormat: GPUTextureFormat,\n limits: Limits,\n format: \"rgba8unorm\" | \"rg8unorm\" = \"rgba8unorm\",\n ) {\n this.#device = device;\n this.#presentationFormat = presentationFormat;\n this.#limits = limits;\n this.textureAtlas = device.createTexture({\n label: \"Asset Manager Atlas Texture\",\n size: [\n this.#limits.textureSize,\n this.#limits.textureSize,\n this.#limits.textureArrayLayers,\n ],\n format,\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n });\n this.#cropComputeShader = TextureComputeShader.create(device);\n this.#availableIndices = new Set(\n Array.from({ length: limits.textureArrayLayers }, (_, i) => i),\n );\n }\n\n /**\n * True dimensions of a loaded texture, prior to any transparent pixel cropping.\n *\n * @param id - The id of the texture to get the size of\n * @returns The size of the texture\n */\n getSize(id: TextureId): Size {\n const coords = this.extra.getAtlasCoords(id);\n const originalScale = coords[0].uvScale;\n return {\n width: originalScale.width * this.textureAtlas.width,\n height: originalScale.height * this.textureAtlas.height,\n };\n }\n\n /**\n * Dimensions of a loaded texture, cropped to a minimal bounding box.\n *\n * @param id - The id of the texture to get the size of\n * @returns The size of the texture\n */\n getCroppedSize(id: TextureId): Size {\n const scaledUvs = this.extra.getAtlasCoords(id)[0].uvScaleCropped;\n if (scaledUvs) {\n return {\n width: scaledUvs.width * this.textureAtlas.width,\n height: scaledUvs.height * this.textureAtlas.height,\n };\n }\n return this.getSize(id);\n }\n\n /**\n * Whether the texture has been cropped for extra transparency.\n *\n * @param id - The id of the texture to be checked\n * @returns Whether the image has been cropped (i.e. if it has uvScaledCropped)\n */\n isCropped(id: TextureId): boolean {\n if (!this.#textures.has(id)) {\n throw new Error(\n `Texture ${id} not found in atlas. Have you called toodle.loadTextures with this id or toodle.loadBundle with a bundle that contains it?`,\n );\n }\n\n return this.#textures.get(id)![0].uvScaleCropped === undefined;\n }\n\n /**\n * A read-only map of all currently loaded textures.\n */\n get textures() {\n return this.#textures;\n }\n\n /**\n * A read-only array of all currently loaded texture ids.\n */\n get textureIds() {\n return Array.from(this.#textures.keys());\n }\n\n /**\n * Debug method to load a set of textures from a record of URLS.\n *\n * @param textures Collection of strings and URLs representing the texture name and target file\n * @param options LoadingOptions used to modify the loading process\n *\n * Note: this will consume one texture atlas per texture.\n * For more efficient loading of multiple textures, consider {@link loadBundle}\n *\n * @example\n *\n * await toodle.assets.loadTextures({\n * \"myImage\": new URL(\"assets/image.png\", \"https://mywebsite.com\"),\n * });\n *\n * @deprecated use {@link registerBundle} instead. or {@link loadTexture} for debugging\n */\n async loadTextures(opts: TextureBundleOpts[\"textures\"]): Promise<void> {\n await Promise.all(\n Object.entries(opts).map(([id, url]) => this.loadTexture(id, url, opts)),\n );\n }\n\n /**\n * Debug method to load a single texture.\n *\n * @param id ID used to name the texture\n * @param url URL or ImageBitmap target for the image\n * @param options LoadingOptions used to modify the loading process\n *\n * Note: this will consume one texture atlas per texture.\n * For more efficient loading of multiple textures, consider {@link loadBundle}\n */\n async loadTexture(\n id: TextureId,\n url: URL | ImageBitmap,\n options?: Partial<TextureBundleOpts>,\n ) {\n const bitmap =\n url instanceof ImageBitmap ? url : await getBitmapFromUrl(url);\n\n let textureWrapper: TextureWithMetadata = this.#wrapBitmapToTexture(\n bitmap,\n id,\n );\n const atlasIndex = this.extra.nextAvailableAtlasIndex();\n\n if (options?.cropTransparentPixels) {\n textureWrapper =\n await this.#cropComputeShader.processTexture(textureWrapper);\n }\n\n this.#copyTextureToAtlas(textureWrapper.texture, atlasIndex);\n\n const coords: AtlasCoords = {\n uvOffset: { x: 0, y: 0 },\n cropOffset: textureWrapper.cropOffset,\n uvScale: {\n width: textureWrapper.texture.width / this.textureAtlas.width,\n height: textureWrapper.texture.height / this.textureAtlas.height,\n },\n originalSize: textureWrapper.originalSize,\n uvScaleCropped: {\n width: textureWrapper.texture.width / this.textureAtlas.width,\n height: textureWrapper.texture.height / this.textureAtlas.height,\n },\n atlasIndex,\n };\n\n this.#textures.set(id, [coords]);\n this.#availableIndices.delete(atlasIndex);\n\n textureWrapper.texture.destroy();\n return { id, coords };\n }\n\n /**\n * Register a bundle of textures.\n *\n * @param bundleId ID used to name the bundle\n * @param bundle Collection of strings and URLs representing the texture name and target file\n * @param options LoadingOptions used to modify the loading process\n *\n * See: https://toodle.gg/f849595b3ed13fc956fc1459a5cb5f0228f9d259/examples/texture-bundles.html\n */\n async registerBundle(\n bundleId: BundleId,\n opts: TextureBundleOpts | AtlasBundleOpts,\n ): Promise<BundleId> {\n if (\"textures\" in opts) {\n await this.#registerBundleFromTextures(bundleId, opts);\n } else {\n await this.#registerBundleFromAtlases(bundleId, opts);\n }\n\n if (opts.autoLoad) {\n await this.loadBundle(bundleId);\n }\n return bundleId;\n }\n\n /**\n * Load a bundle of textures to the gpu\n *\n * See: https://toodle.gg/f849595b3ed13fc956fc1459a5cb5f0228f9d259/examples/texture-bundles.html\n */\n async loadBundle(bundleId: BundleId) {\n const bundle = this.#bundles.get(bundleId);\n if (!bundle) {\n throw new Error(`Bundle ${bundleId} not found`);\n }\n\n if (bundle.isLoaded) {\n console.warn(`Bundle ${bundleId} is already loaded.`);\n return;\n }\n\n for (const atlas of bundle.atlases) {\n const atlasIndex = await this.extra.loadAtlas(atlas);\n bundle.atlasIndices.push(atlasIndex);\n }\n\n bundle.isLoaded = true;\n }\n\n /**\n * Unload a bundle of textures from the gpu - this marks the gpu-side texture atlas\n * as available for future texture loading.\n *\n * @param bundleId - The id of the bundle to unload\n */\n async unloadBundle(bundleId: BundleId) {\n const bundle = this.#bundles.get(bundleId);\n if (!bundle) {\n throw new Error(`Bundle ${bundleId} not found`);\n }\n\n if (!bundle.isLoaded) {\n console.warn(`Bundle ${bundleId} is not loaded.`);\n return;\n }\n\n await Promise.all(\n bundle.atlasIndices.map((atlasIndex) =>\n this.extra.unloadAtlas(atlasIndex),\n ),\n );\n\n bundle.isLoaded = false;\n bundle.atlasIndices = [];\n }\n\n /**\n * Load a font to the gpu\n *\n * @param id - The id of the font to load\n * @param url - The url of the font to load\n * @param fallbackCharacter - The character to use as a fallback if the font does not contain a character to be rendererd\n */\n async loadFont(id: string, url: URL, fallbackCharacter = \"_\") {\n const font = await MsdfFont.create(id, url);\n font.fallbackCharacter = fallbackCharacter;\n const fontPipeline = await FontPipeline.create(\n this.#device,\n font,\n this.#presentationFormat,\n this.#limits.maxTextLength,\n );\n\n const textShader = new TextShader(\n this.#device,\n fontPipeline,\n font,\n this.#presentationFormat,\n this.#limits.instanceCount,\n );\n this.#fonts.set(id, textShader);\n return id;\n }\n\n getFont(id: string) {\n if (!this.#fonts.has(id)) {\n throw new Error(\n `Font ${id} not found in atlas. Have you called toodle.loadFont with this id?`,\n );\n }\n return this.#fonts.get(id)!;\n }\n\n validateTextureReference(node: SceneNode | QuadNode) {\n if (\n !(node instanceof QuadNode) ||\n node.isPrimitive ||\n node instanceof JumboQuadNode\n )\n return;\n\n const coords: AtlasCoords[] | undefined = this.#textures.get(\n node.textureId,\n );\n if (!coords || !coords.length) {\n throw new Error(\n `Node ${node.id} references an invalid texture ${node.textureId}.`,\n );\n }\n\n if (\n coords.find((coord) => coord.atlasIndex === node.atlasCoords.atlasIndex)\n )\n return;\n\n node.extra.setAtlasCoords(coords[0]);\n }\n\n /**\n * Sets a designated texture ID to the corresponding `AtlasRegion` built from a `TextureRegion` and `numerical atlas index.\n * @param id - `String` representing the texture name. I.e. \"PlayerSprite\"\n * @param textureRegion - `TextureRegion` corresponding the uv and texture offsets\n * @param atlasIndex - `number` of the atlas that the texture will live in.\n * @private\n */\n #addTexture(id: string, textureRegion: TextureRegion, atlasIndex: number) {\n this.#textures.set(id, [\n {\n ...textureRegion,\n atlasIndex,\n },\n ]);\n }\n\n /**\n *\n * @param bitmap - `ImageBitmap` to be processed into a `GPUTexture` for storage and manipulation\n * @param name - Used to name the new `GPUTexture` via labeling.\n * @private\n */\n #createTextureFromImageBitmap(bitmap: ImageBitmap, name: string): GPUTexture {\n const texture = this.#device.createTexture({\n label: `${name} Intermediary Texture`,\n size: [bitmap.width, bitmap.height],\n format: \"rgba8unorm\",\n usage:\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.COPY_SRC |\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.RENDER_ATTACHMENT,\n });\n\n this.#device.queue.copyExternalImageToTexture(\n {\n source: bitmap,\n },\n {\n texture,\n },\n [bitmap.width, bitmap.height],\n );\n return texture;\n }\n\n async #registerBundleFromTextures(\n bundleId: BundleId,\n opts: TextureBundleOpts,\n ) {\n const images = new Map<string, TextureWithMetadata>();\n\n let networkLoadTime = 0;\n await Promise.all(\n Object.entries(opts.textures).map(async ([id, url]) => {\n const now = performance.now();\n const bitmap = await getBitmapFromUrl(url);\n networkLoadTime += performance.now() - now;\n let textureWrapper: TextureWithMetadata = this.#wrapBitmapToTexture(\n bitmap,\n id,\n );\n\n if (opts.cropTransparentPixels) {\n textureWrapper =\n await this.#cropComputeShader.processTexture(textureWrapper);\n }\n images.set(id, textureWrapper);\n }),\n );\n\n const atlases = await packBitmapsToAtlas(\n images,\n this.#limits.textureSize,\n this.#device,\n );\n\n this.#bundles.set(bundleId, {\n atlases,\n atlasIndices: [],\n isLoaded: false,\n });\n }\n\n async #registerBundleFromAtlases(bundleId: BundleId, opts: AtlasBundleOpts) {\n const atlases: CpuTextureAtlas[] = [];\n\n for (const atlas of opts.atlases) {\n const jsonUrl =\n atlas.json ??\n new URL(\n atlas.png!.toString().replace(\".png\", \".json\"),\n atlas.png!.origin,\n );\n const pngUrl =\n atlas.png ??\n new URL(\n atlas.json!.toString().replace(\".json\", \".png\"),\n atlas.json!.origin,\n );\n\n const atlasDef = await (await fetch(jsonUrl)).json();\n const bitmap = !opts.rg8\n ? await getBitmapFromUrl(pngUrl)\n : await createImageBitmap(new ImageData(1, 1)); // placeholder bitmap if using rg8\n\n let rg8Bytes: Uint8Array<ArrayBuffer> | undefined;\n if (opts.rg8) {\n const rg8url = new URL(\n pngUrl.toString().replace(\".png\", \".rg8.gz\"),\n pngUrl.origin,\n );\n const rgBytes = await fetch(rg8url).then(async (r) => {\n const enc = (r.headers.get(\"content-encoding\") || \"\").toLowerCase();\n // If server/CDN already set Content-Encoding, Fetch returns decompressed bytes.\n if (\n enc.includes(\"gzip\") ||\n enc.includes(\"br\") ||\n enc.includes(\"deflate\")\n ) {\n return new Uint8Array(await r.arrayBuffer());\n }\n\n assert(r.body, \"Response body of rg8 file is null\");\n const ds = new DecompressionStream(\"gzip\");\n const ab = await new Response(r.body.pipeThrough(ds)).arrayBuffer();\n return new Uint8Array(ab);\n });\n rg8Bytes = rgBytes;\n }\n\n const cpuTextureAtlas: CpuTextureAtlas = {\n texture: bitmap,\n rg8Bytes,\n textureRegions: new Map(),\n width: opts.rg8 ? this.#limits.textureSize : bitmap.width,\n height: opts.rg8 ? this.#limits.textureSize : bitmap.height,\n };\n\n for (const [assetId, frame] of Object.entries(atlasDef.frames) as [\n string,\n PixiRegion,\n ][]) {\n const leftCrop = frame.spriteSourceSize.x;\n const rightCrop =\n frame.sourceSize.w -\n frame.spriteSourceSize.x -\n frame.spriteSourceSize.w;\n const topCrop = frame.spriteSourceSize.y;\n const bottomCrop =\n frame.sourceSize.h -\n frame.spriteSourceSize.y -\n frame.spriteSourceSize.h;\n\n cpuTextureAtlas.textureRegions.set(assetId, {\n cropOffset: {\n x: leftCrop - rightCrop,\n y: bottomCrop - topCrop,\n },\n originalSize: {\n width: frame.sourceSize.w,\n height: frame.sourceSize.h,\n },\n uvOffset: {\n x: frame.frame.x / cpuTextureAtlas.width,\n y: frame.frame.y / cpuTextureAtlas.height,\n },\n uvScale: {\n width: frame.sourceSize.w / cpuTextureAtlas.width,\n height: frame.sourceSize.h / cpuTextureAtlas.height,\n },\n uvScaleCropped: {\n width: frame.frame.w / cpuTextureAtlas.width,\n height: frame.frame.h / cpuTextureAtlas.height,\n },\n });\n }\n\n atlases.push(cpuTextureAtlas);\n }\n\n this.#bundles.set(bundleId, {\n atlases,\n atlasIndices: [],\n isLoaded: false,\n });\n }\n\n /**\n * Advanced and niche features\n */\n extra = {\n // Get an array of all currently registered bundle ids.\n getRegisteredBundleIds: (): string[] => {\n return this.#bundles ? Array.from(this.#bundles.keys()) : [];\n },\n\n // Get an array of all currently loaded bundle ids.\n getLoadedBundleIds: (): string[] => {\n return Array.from(this.#bundles.entries())\n .filter(([, value]) => value.isLoaded)\n .map(([key]) => key);\n },\n\n /**\n * Set the atlas coordinates for a texture.\n *\n * This should not be necessary for most use cases. This allows for UV precision\n *\n * @param id - The id of the texture to set the atlas coordinates for\n * @param coords - The atlas coordinates to set\n */\n setAtlasCoords: (id: TextureId, coords: AtlasCoords) => {\n const oldCoords: AtlasCoords[] | undefined = this.#textures.get(id);\n if (!oldCoords) return;\n const indexToModify = oldCoords.findIndex(\n (coord) => coord.atlasIndex === coords.atlasIndex,\n );\n if (indexToModify === -1) return;\n oldCoords[indexToModify] = coords;\n this.#textures.set(id, oldCoords);\n },\n\n /**\n * Get the atlas coordinates for a texture.\n *\n * @param id - The id of the texture to get the atlas coordinates for\n * @returns An array of the atlas coordinates for the texture\n */\n getAtlasCoords: (id: TextureId): AtlasCoords[] => {\n if (!this.#textures.has(id)) {\n throw new Error(\n `Texture ${id} not found in atlas. Have you called toodle.loadBundle with a bundle that contains this id (or toodle.loadTextures with this id as a key)?`,\n );\n }\n return this.#textures.get(id) ?? [];\n },\n\n /**\n * Get the texture default offset\n *\n * @param id - The id of the texture to get the atlas coordinates for\n * @returns Point of the texture's associated X,Y offset\n */\n getTextureOffset: (id: TextureId): Vec2 => {\n const texture: AtlasCoords[] | undefined = this.#textures.get(id);\n if (!texture) {\n throw new Error(\n `Texture ${id} not found in atlas. Have you called toodle.loadTextures with this id or toodle.loadBundle with a bundle that contains it?`,\n );\n }\n return texture[0].cropOffset;\n },\n\n /**\n * Get diagnostics on texture atlas usage\n *\n * @returns Usage stats for texture atlases\n */\n getAtlasUsage: () => {\n return {\n /**\n * The number of texture atlases that are currently unused\n * and available to load textures into.\n */\n available: this.#availableIndices.size,\n /**\n * The number of texture atlases that are currently in use.\n */\n used: this.#limits.textureArrayLayers - this.#availableIndices.size,\n /**\n * The total number of texture atlases that can be loaded.\n */\n total: this.#limits.textureArrayLayers,\n };\n },\n\n /**\n * Consume the next available atlas index.\n *\n */\n nextAvailableAtlasIndex: () => {\n for (let i = 0; i < this.#limits.textureArrayLayers; i++) {\n if (this.#availableIndices.has(i)) {\n this.#availableIndices.delete(i);\n return i;\n }\n }\n throw new Error(\"Texture atlas is full - too many textures loaded.\");\n },\n\n /**\n * Load a texture atlas from a CpuTextureAtlas.\n *\n * @param atlas - The texture atlas to load\n * @returns The index of the atlas\n */\n loadAtlas: async (atlas: CpuTextureAtlas) => {\n const atlasIndex = this.extra.nextAvailableAtlasIndex();\n\n if (atlas.rg8Bytes) {\n const { width: w, height: h } = {\n width: this.textureAtlas.width,\n height: this.textureAtlas.height,\n };\n\n // WebGPU requires 256-byte bytesPerRow\n const rowBytes = w * 2;\n assert(rowBytes % 256 === 0, \"rowBytes must be a multiple of 256\");\n\n this.#device.queue.writeTexture(\n { texture: this.textureAtlas, origin: { x: 0, y: 0, z: atlasIndex } },\n atlas.rg8Bytes,\n { bytesPerRow: rowBytes, rowsPerImage: h },\n { width: w, height: h, depthOrArrayLayers: 1 },\n );\n } else {\n this.#device.queue.copyExternalImageToTexture(\n {\n source: atlas.texture,\n },\n {\n texture: this.textureAtlas,\n origin: [0, 0, atlasIndex],\n },\n [atlas.texture.width, atlas.texture.height, 1],\n );\n }\n\n for (const [id, region] of atlas.textureRegions) {\n const existing = this.#textures.get(id);\n if (existing) {\n existing.push({ ...region, atlasIndex });\n } else this.#addTexture(id, region, atlasIndex);\n }\n return atlasIndex;\n },\n\n /**\n * Unload an atlas from the texture atlas.\n *\n * @param atlasIndex - The index of the atlas to unload\n */\n unloadAtlas: async (atlasIndex: number) => {\n this.#availableIndices.add(atlasIndex);\n for (const [id, coords] of this.#textures.entries()) {\n const indexToModify = coords.findIndex(\n (coord) => coord.atlasIndex === atlasIndex,\n );\n if (indexToModify !== -1) {\n coords.splice(indexToModify, 1);\n }\n if (!coords.length) {\n this.#textures.delete(id);\n }\n }\n },\n };\n\n #wrapBitmapToTexture(\n bitmap: ImageBitmap,\n name = \"Unknown\",\n ): TextureWithMetadata {\n const texture: GPUTexture = this.#createTextureFromImageBitmap(\n bitmap,\n name,\n );\n return {\n texture,\n cropOffset: { x: 0, y: 0 },\n originalSize: { width: texture.width, height: texture.height },\n };\n }\n\n #copyTextureToAtlas(texture: GPUTexture, atlasIndex: number) {\n const copyEncoder: GPUCommandEncoder = this.#device.createCommandEncoder();\n copyEncoder.copyTextureToTexture(\n {\n texture: texture,\n mipLevel: 0,\n origin: [0, 0, 0],\n },\n {\n texture: this.textureAtlas,\n mipLevel: 0,\n origin: [0, 0, atlasIndex],\n },\n [texture.width, texture.height, 1],\n );\n\n this.#device.queue.submit([copyEncoder.finish()]);\n }\n /**\n * Destroy the texture atlas. This should free up ~4gb of gpu memory (and make all draw calls fail)\n */\n destroy() {\n this.textureAtlas.destroy();\n }\n}\n",
|
|
34
|
+
"import { type Mat3, mat3 } from \"wgpu-matrix\";\nimport type { Color } from \"./coreTypes/Color\";\nimport type { Point } from \"./coreTypes/Point\";\nimport type { Size } from \"./coreTypes/Size\";\nimport type { Limits, LimitsOptions } from \"./limits\";\nimport { DEFAULT_LIMITS } from \"./limits\";\nimport {\n convertScreenToWorld,\n convertWorldToScreen,\n createProjectionMatrix,\n} from \"./math/matrix\";\nimport { Batcher } from \"./scene/Batcher\";\nimport { Camera } from \"./scene/Camera\";\nimport { JumboQuadNode, type JumboQuadOptions } from \"./scene/JumboQuadNode\";\nimport { QuadNode, type QuadOptions } from \"./scene/QuadNode\";\nimport { type NodeOptions, SceneNode } from \"./scene/SceneNode\";\nimport type { Resolution } from \"./screen/resolution\";\nimport type { EngineUniform } from \"./shaders/EngineUniform\";\nimport type { IShader } from \"./shaders/IShader\";\nimport type { PostProcess } from \"./shaders/postprocess/mod\";\nimport { QuadShader, type QuadShaderOpts } from \"./shaders/QuadShader\";\nimport { TextNode, type TextOptions } from \"./text/TextNode\";\nimport { AssetManager, type TextureId } from \"./textures/AssetManager\";\nimport { initGpu } from \"./utils/boilerplate\";\nimport { assert, Pool } from \"./utils/mod\";\n\nexport class Toodle {\n /**\n * Asset manager. Use toodle.assets.loadTexture to load texture assets.\n */\n assets: AssetManager;\n\n /**\n * diagnostics can be used as a rough gauge for performance.\n * besides frames, these stats are reset at the beginning of each frame.\n */\n diagnostics = {\n /** number of instanced draw calls issued last frame. lower is better */\n drawCalls: 0,\n /** number of pipeline switches last frame. lower is better. to reduce pipeline switches, use fewer z-indexes or fewer custom shaders */\n pipelineSwitches: 0,\n /** number of frames rendered */\n frames: 0,\n /** number of instances enqueued last frame */\n instancesEnqueued: 0,\n };\n\n /** sometimes for debugging you might want to access the GPU device, this should not be necessary in normal operation */\n debug: { device: GPUDevice; presentationFormat: GPUTextureFormat };\n\n /**\n * Camera. This applies a 2d perspective projection matrix to any nodes drawn with toodle.draw\n */\n camera = new Camera();\n\n /**\n * clearColor is the color that will be used to clear the screen at the beginning of each frame\n * you can also think of this as the background color of the canvas\n */\n clearColor: Color = { r: 1, g: 1, b: 1, a: 1 };\n\n #resolution: Resolution;\n #resizeObserver: ResizeObserver;\n #engineUniform: EngineUniform;\n #projectionMatrix: Mat3 = mat3.identity();\n #batcher = new Batcher();\n #limits: Limits;\n #device: GPUDevice;\n #context: GPUCanvasContext;\n #presentationFormat: GPUTextureFormat;\n #postprocess: PostProcess | null = null;\n #renderPass?: GPURenderPassEncoder;\n #encoder?: GPUCommandEncoder;\n #pingpong!: [GPUTexture, GPUTexture];\n #defaultFilter: GPUFilterMode;\n #matrixPool: Pool<Mat3>;\n #atlasSize: Size;\n\n /**\n * it's unlikely that you want to use the constructor directly.\n * see {@link Toodle.attach} for creating a Toodle instance that draws to a canvas.\n */\n constructor(\n device: GPUDevice,\n context: GPUCanvasContext,\n presentationFormat: GPUTextureFormat,\n canvas: HTMLCanvasElement,\n resolution: Resolution,\n options: ToodleOptions,\n ) {\n this.#limits = {\n ...DEFAULT_LIMITS,\n ...options.limits,\n };\n this.#matrixPool = new Pool<Mat3>(\n () => mat3.identity(),\n this.#limits.instanceCount,\n );\n this.#device = device;\n this.#context = context;\n this.#presentationFormat = presentationFormat;\n this.#defaultFilter = options.filter ?? \"linear\";\n this.assets = new AssetManager(device, presentationFormat, this.#limits);\n this.#atlasSize = {\n width: this.assets.textureAtlas.width,\n height: this.assets.textureAtlas.height,\n };\n this.debug = { device, presentationFormat };\n this.#engineUniform = {\n resolution,\n camera: this.camera,\n viewProjectionMatrix: mat3.identity(),\n };\n this.#resolution = resolution;\n\n this.#createPingPongTextures(resolution);\n this.resize(this.#resolution);\n\n this.#resizeObserver = this.#createResizeObserver(canvas);\n }\n\n /**\n * Screen shader is an optional slot for post-processing effects.\n * Note that this will do the main render pass to an offscreen texture, which may impact performance.\n */\n get postprocess() {\n return this.#postprocess;\n }\n\n set postprocess(value: PostProcess | null) {\n this.#postprocess = value;\n const hasChanged =\n this.#resolution.width !==\n this.#pingpong[0].width / window.devicePixelRatio ||\n this.#resolution.height !==\n this.#pingpong[0].height / window.devicePixelRatio;\n if (value != null && hasChanged) {\n this.#createPingPongTextures(this.#resolution);\n }\n }\n\n /**\n * call resize when the canvas is resized.\n * this will update the projection matrix and the resolution.\n *\n * @param resolution - the resolution of the canvas in logical pixels.\n * this should be `canvas.clientWidth x canvas.clientHeight` and NOT `canvas.width * canvas.height`\n *\n * @example\n *\n * const canvas = document.querySelector(\"canvas\")!\n *\n * const observer = new ResizeObserver((entries) => {\n * if (entries.length === 0) return\n * toodle.resize({ width: canvas.clientWidth, height: canvas.clientHeight })\n * })\n *\n * observer.observe(canvas)\n */\n resize(resolution: Resolution) {\n createProjectionMatrix(resolution, this.#projectionMatrix);\n\n const hasChanged =\n resolution.width !== this.#resolution.width ||\n resolution.height !== this.#resolution.height;\n if (this.postprocess && hasChanged) {\n this.#pingpong[0].destroy();\n this.#pingpong[1].destroy();\n }\n this.#resolution = resolution;\n }\n\n #createPingPongTextures(resolution: Resolution) {\n if (this.#pingpong?.length) {\n this.#pingpong[0].destroy();\n this.#pingpong[1].destroy();\n }\n\n this.#pingpong = [\n this.#device.createTexture({\n size: {\n width: resolution.width * window.devicePixelRatio,\n height: resolution.height * window.devicePixelRatio,\n },\n format: this.#presentationFormat,\n usage:\n GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT,\n }),\n this.#device.createTexture({\n size: {\n width: resolution.width * window.devicePixelRatio,\n height: resolution.height * window.devicePixelRatio,\n },\n format: this.#presentationFormat,\n usage:\n GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT,\n }),\n ];\n }\n\n #createResizeObserver(canvas: HTMLCanvasElement) {\n // see https://webgpufundamentals.org/webgpu/lessons/webgpu-resizing-the-canvas.html\n // for explanation of incorporating devicePixelRatio\n const resizeObserver = new ResizeObserver((entries) => {\n if (!entries || !entries.length) return;\n for (const entry of entries) {\n const width =\n entry.devicePixelContentBoxSize?.[0].inlineSize ||\n entry.contentBoxSize[0].inlineSize * devicePixelRatio;\n const height =\n entry.devicePixelContentBoxSize?.[0].blockSize ||\n entry.contentBoxSize[0].blockSize * devicePixelRatio;\n\n // uncomment these lines to debug issues with high dpi monitors\n // and OS zoom\n //\n // const rect = entry.target.getBoundingClientRect();\n // console.table({\n // width,\n // clientWidth: canvas.clientWidth,\n // contentBoxInlineSize: entry.contentBoxSize[0].inlineSize,\n // rectWidth: rect.width,\n // height,\n // clientHeight: canvas.clientHeight,\n // contentBoxBlockSize: entry.contentBoxSize[0].blockSize,\n // rectHeight: rect.height,\n // });\n\n if (canvas.width !== width || canvas.height !== height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n }\n this.resize({ width: canvas.clientWidth, height: canvas.clientHeight });\n }\n });\n try {\n resizeObserver.observe(canvas, { box: \"device-pixel-content-box\" });\n } catch {\n resizeObserver.observe(canvas);\n }\n return resizeObserver;\n }\n\n /**\n * The resolution of the canvas in css or logical pixels.\n *\n * @example\n *\n * // devicePixelRatio is 1, resolution is 200x200\n * <canvas width=\"200\" height=\"200\" style=\"width: 200px; height: 200px;\"></canvas>\n * // devicePixelRatio is 2, resolution is 100x100\n * <canvas width=\"200\" height=\"200\" style=\"width: 100px; height: 100px;\"></canvas>\n */\n get resolution() {\n return this.#resolution;\n }\n\n /**\n * Returns the currently configured Toodle engine limits\n *\n * See: https://toodle.gg/f849595b3ed13fc956fc1459a5cb5f0228f9d259/limits.html\n *\n * @example\n *\n * const instanceLimit: number = toodle.limits.instanceCount;\n */\n get limits(): Limits {\n return this.#limits;\n }\n\n get batcher(): Batcher {\n return this.#batcher;\n }\n\n /**\n * The maximum number of pixels that can be loaded into texture atlases for this toodle instance.\n */\n get maxPixels() {\n return (\n this.#limits.textureSize *\n this.#limits.textureSize *\n this.#limits.textureArrayLayers\n );\n }\n\n /**\n * The maximum amount of GPU memory that will be used by the Toodle instance.\n * This is a rough estimate and may not be exact. This will be allocated up front when calling Toodle.attach, and freed when calling toodle.destroy.\n */\n get maxGpuMemory() {\n return (\n this.#limits.instanceCount *\n this.#limits.instanceBufferSize *\n this.#limits.shaderCount\n );\n }\n\n /**\n * call startFrame before drawing anything.\n * this will create a new encoder and render pass.\n *\n * @example\n *\n * toodle.startFrame();\n * // draw stuff\n * toodle.endFrame();\n */\n startFrame(options?: StartFrameOptions) {\n this.#encoder = this.#device.createCommandEncoder();\n const target = this.postprocess\n ? this.#pingpong[0]\n : this.#context.getCurrentTexture();\n this.#renderPass = this.#encoder.beginRenderPass({\n label: `toodle frame ${this.diagnostics.frames}`,\n colorAttachments: [\n {\n view: target.createView(),\n clearValue: this.clearColor,\n loadOp: options?.loadOp ?? \"clear\",\n storeOp: \"store\",\n },\n ],\n });\n\n this.diagnostics.drawCalls =\n this.diagnostics.pipelineSwitches =\n this.diagnostics.instancesEnqueued =\n 0;\n }\n\n /**\n * call draw in between start frame and end frame to enqueue an instanced draw call.\n *\n * @example\n *\n * toodle.assets.loadTexture(\"myImage\", \"assets/image.png\");\n * const quad = toodle.Quad(\"myImage\");\n *\n * toodle.startFrame();\n * toodle.draw(quad);\n * toodle.endFrame();\n */\n draw(node: SceneNode) {\n if (node instanceof QuadNode) {\n node.assetManager.validateTextureReference(node);\n } else {\n this.assets.validateTextureReference(node);\n }\n this.#batcher.enqueue(node);\n }\n\n /**\n * call end frame to run through enqueued draw calls and submit them to the GPU.\n *\n * @example\n *\n * toodle.startFrame();\n * // draw stuff\n * toodle.endFrame();\n */\n endFrame() {\n try {\n assert(\n this.#renderPass,\n \"no render pass found. have you called startFrame?\",\n );\n assert(this.#encoder, \"no encoder found. have you called startFrame?\");\n\n mat3.mul(\n this.#projectionMatrix,\n this.camera.matrix,\n this.#engineUniform.viewProjectionMatrix,\n );\n this.#engineUniform.resolution = this.#resolution;\n for (const pipeline of this.#batcher.pipelines) {\n pipeline.shader.startFrame(this.#device, this.#engineUniform);\n }\n\n this.diagnostics.instancesEnqueued = this.#batcher.nodes.length;\n if (this.#batcher.nodes.length > this.#limits.instanceCount) {\n const err = new Error(\n `ToodleInstanceCap: ${this.batcher.nodes.length} instances enqueued, max is ${this.limits.instanceCount}`,\n );\n err.name = \"ToodleInstanceCap\";\n throw err;\n }\n\n for (const layer of this.#batcher.layers) {\n for (const pipeline of layer.pipelines) {\n this.diagnostics.pipelineSwitches++;\n this.diagnostics.drawCalls += pipeline.shader.processBatch(\n this.#renderPass,\n pipeline.nodes,\n );\n }\n }\n\n for (const pipeline of this.#batcher.pipelines) {\n pipeline.shader.endFrame();\n }\n this.#renderPass.end();\n\n if (this.postprocess) {\n this.postprocess.process(\n this.#device.queue,\n this.#encoder,\n this.#pingpong,\n this.#context.getCurrentTexture(),\n );\n }\n this.#device.queue.submit([this.#encoder.finish()]);\n } finally {\n this.#batcher.flush();\n this.#matrixPool.free();\n this.diagnostics.frames++;\n }\n }\n\n /**\n * Convert a point from one coordinate space to another.\n *\n * @param point - The point to convert.\n * @param options - The options for the conversion.\n * @returns The converted point.\n */\n convertSpace(\n point: Point,\n options: { from: \"screen\" | \"world\"; to: \"world\" | \"screen\" },\n ): Point {\n if (options.from === \"screen\" && options.to === \"world\") {\n return convertScreenToWorld(\n point,\n this.camera,\n this.#projectionMatrix,\n this.#resolution,\n );\n }\n\n if (options.from === \"world\" && options.to === \"screen\") {\n return convertWorldToScreen(\n point,\n this.camera,\n this.#projectionMatrix,\n this.#resolution,\n );\n }\n\n if (options.from === options.to) {\n return point;\n }\n\n throw new Error(\n `Unknown conversion from: ${options.from} to: ${options.to}`,\n );\n }\n\n /**\n * The number of frames rendered since this Toodle instance was created.\n */\n get frameCount() {\n return this.diagnostics.frames;\n }\n\n /**\n * Create a custom shader for quad instances. In some engines, this might be called a material.\n *\n * @param label Debug name of the shader\n * @param instanceCount - The maximum number of instances that will be processed by the shader. Note that a worst-case buffer of this many instances will be immediately allocated.\n * @param userCode - The WGSL code to be used for the shader.\n * @param blendMode - The blend mode to be used for the shader.\n *\n * @example\n *\n *\n */\n QuadShader(\n label: string,\n instanceCount: number,\n userCode: string,\n shaderOpts?: QuadShaderOpts,\n ) {\n return new QuadShader(\n label,\n shaderOpts?.assetManager ?? this.assets,\n this.#device,\n this.#presentationFormat,\n userCode,\n instanceCount,\n shaderOpts?.blendMode,\n );\n }\n\n /**\n * Create a new quad node.\n *\n * @param assetId - The ID of the asset to use for the quad. This must have been loaded with toodle.assets.loadBundle.\n *\n * @param options - QuadOptions for Quad creation\n * @param options\n * @example\n *\n * await toodle.assets.loadTextures({\n * \"myImage\": new URL(\"assets/image.png\"),\n * });\n * const quad = toodle.Quad(\"myImage\");\n *\n * toodle.startFrame();\n * toodle.draw(quad);\n * toodle.endFrame();\n */\n Quad(assetId: TextureId, options: QuadOptions = {}) {\n const assetManager = options.assetManager ?? this.assets;\n options.idealSize ??= assetManager.getSize(assetId);\n options.shader ??= this.#defaultQuadShader();\n options.atlasCoords ??= assetManager.extra.getAtlasCoords(assetId)[0];\n options.textureId ??= assetId;\n options.cropOffset ??= assetManager.extra.getTextureOffset(assetId);\n options.assetManager = assetManager;\n\n options.atlasSize = this.#atlasSize;\n options.region ??= {\n x: 0,\n y: 0,\n width: options.atlasCoords.uvScale.width * this.#atlasSize.width,\n height: options.atlasCoords.uvScale.height * this.#atlasSize.height,\n };\n\n options.assetManager = assetManager;\n const quad = new QuadNode(options, this.#matrixPool);\n return quad;\n }\n\n /**\n * Create a jumbo quad node. This contains multiple tiles for a single texture.\n *\n * @param assetId - The ID of the asset to use for the jumbo quad. This must have been loaded with toodle.assets.loadTextures.\n *\n * @param options - QuadOptions for Quad creation\n *\n */\n JumboQuad(assetId: TextureId, options: JumboQuadOptions) {\n options.shader ??= this.#defaultQuadShader();\n options.textureId ??= assetId;\n options.cropOffset ??= {\n x: 0,\n y: 0,\n };\n options.tiles ??= [];\n\n // this holds the size of the full texture based on all of its tiles\n const originalSize = {\n width: 0,\n height: 0,\n };\n\n for (const tile of options.tiles) {\n if (!tile.size) {\n tile.size = this.assets.getSize(tile.textureId);\n }\n\n if (!tile.atlasCoords) {\n tile.atlasCoords = this.assets.extra.getAtlasCoords(tile.textureId)[0];\n }\n\n if (tile.offset.x + tile.size!.width > originalSize.width) {\n originalSize.width = tile.offset.x + tile.size!.width;\n }\n\n if (tile.offset.y + tile.size!.height > originalSize.height) {\n originalSize.height = tile.offset.y + tile.size!.height;\n }\n }\n\n options.region ??= {\n x: 0,\n y: 0,\n width: originalSize.width,\n height: originalSize.height,\n };\n\n options.idealSize ??= {\n width: originalSize.width,\n height: originalSize.height,\n };\n\n options.atlasSize = this.#atlasSize;\n\n options.assetManager = this.assets;\n\n return new JumboQuadNode(options, this.#matrixPool);\n }\n\n /**\n * Create a new container node.\n *\n * @example\n *\n * const node = toodle.Node();\n * const child = node.add(toodle.Node());\n * node.position = [100, 100];\n * console.log(child.matrix);\n */\n Node(nodeOpts?: NodeOptions) {\n return new SceneNode(nodeOpts);\n }\n\n Text(fontId: string, text: string, textOpts?: TextOptions) {\n const shader = this.assets.getFont(fontId);\n\n return new TextNode(shader, text, textOpts);\n }\n\n shapes = {\n Rect: (options: QuadOptions = {}) => {\n options.idealSize ??= { width: 1, height: 1 };\n options.shader ??= this.#defaultQuadShader();\n options.atlasCoords ??= {\n atlasIndex: 1000,\n uvOffset: { x: 0, y: 0 },\n uvScale: { width: 0, height: 0 },\n cropOffset: { x: 0, y: 0 },\n originalSize: { width: 1, height: 1 },\n };\n options.assetManager = this.assets;\n\n const quad = new QuadNode(options, this.#matrixPool);\n\n if (options?.position) {\n quad.position = options.position;\n }\n\n if (options?.rotation) {\n quad.rotation = options.rotation;\n }\n\n if (options?.scale) {\n quad.scale = options.scale;\n }\n\n return quad;\n },\n\n Circle: (options: QuadOptions = {}) => {\n options.idealSize ??= { width: 1, height: 1 };\n options.shader ??= this.#defaultQuadShader();\n options.atlasCoords ??= {\n atlasIndex: 1001,\n uvOffset: { x: 0, y: 0 },\n uvScale: { width: 0, height: 0 },\n cropOffset: { x: 0, y: 0 },\n originalSize: { width: 1, height: 1 },\n };\n options.assetManager = this.assets;\n const quad = new QuadNode(options, this.#matrixPool);\n\n if (options?.position) {\n quad.position = options.position;\n }\n\n if (options?.rotation) {\n quad.rotation = options.rotation;\n }\n\n if (options?.scale) {\n quad.scale = options.scale;\n }\n\n return quad;\n },\n\n Line: (options: LineOptions) => {\n const center = {\n x: (options.start.x + options.end.x) / 2,\n y: (options.start.y + options.end.y) / 2,\n };\n const angle = Math.atan2(\n options.end.y - options.start.y,\n options.end.x - options.start.x,\n );\n const length = Math.sqrt(\n (options.end.x - options.start.x) ** 2 +\n (options.end.y - options.start.y) ** 2,\n );\n\n const line = new QuadNode(\n {\n color: options.color,\n atlasCoords: {\n atlasIndex: 1000,\n uvOffset: { x: 0, y: 0 },\n uvScale: { width: 0, height: 0 },\n cropOffset: { x: 0, y: 0 },\n originalSize: { width: 1, height: 1 },\n },\n shader: options.shader ?? this.#defaultQuadShader(),\n idealSize: { width: 1, height: 1 },\n layer: options.layer,\n key: options.key,\n rotationRadians: angle,\n assetManager: this.assets,\n scale: {\n x: length,\n y: options.thickness ?? 1,\n },\n position: center,\n },\n this.#matrixPool,\n );\n\n return line;\n },\n };\n\n #quadShader: QuadShader | null = null;\n\n #defaultQuadShader() {\n if (this.#quadShader) {\n return this.#quadShader;\n }\n\n const shader = this.QuadShader(\n \"default quad shader\",\n this.#limits.instanceCount,\n /*wgsl*/ `\n @fragment\n fn frag(vertex: VertexOutput) -> @location(0) vec4f {\n let color = default_fragment_shader(vertex, ${\n this.#defaultFilter === \"nearest\"\n ? \"nearestSampler\"\n : \"linearSampler\"\n });\n return color;\n }\n `,\n );\n\n this.#quadShader = shader;\n return shader;\n }\n\n /**\n * Attach toodle to a canvas.\n *\n * @param canvas - The canvas to attach toodle to.\n * @param options - ToodleOptions for the creation of the toodle instance\n * @returns A promise that resolves to a Toodle instance.\n *\n * @example\n *\n * const canvas = document.createElement(\"canvas\");\n *\n * const toodle = await Toodle.attach(canvas);\n */\n static async attach(canvas: HTMLCanvasElement, options?: ToodleOptions) {\n canvas.width = canvas.clientWidth * devicePixelRatio;\n canvas.height = canvas.clientHeight * devicePixelRatio;\n const { device, context, presentationFormat } = await initGpu(canvas);\n return new Toodle(\n device,\n context,\n presentationFormat,\n canvas,\n {\n width: canvas.clientWidth,\n height: canvas.clientHeight,\n },\n options || {},\n );\n }\n\n /**\n * Destroy the toodle instance and release its gpu and cpu resources.\n *\n * Note that calling any methods on the instance after this result in undefined behavior.\n */\n destroy() {\n this.#resizeObserver.disconnect();\n this.#device.destroy();\n this.assets.destroy();\n }\n\n /**\n * Advanced and niche features\n */\n extra = {\n /**\n * Get the GPU device used by this Toodle instance.\n */\n device: (): GPUDevice => {\n return this.#device;\n },\n };\n}\n\nexport type StartFrameOptions = {\n /**\n * The load operation to use for the render pass.\n *\n * **clear**: clear the current texture to the clear color. necessary if you're using toodle without another renderer.\n *\n * **load**: blend the render pass with the current canvas contents. useful if you're using toodle alongside another renderer like painter or pixi.js\n *\n * @default \"clear\"\n *\n */\n loadOp?: \"load\" | \"clear\";\n};\n\nexport type ToodleOptions = {\n /**\n * The filter mode to use for the default quad shader.\n * see: https://webgpufundamentals.org/webgpu/lessons/webgpu-textures.html#a-mag-filter\n *\n * **nearest**: nearest neighbor sampling. makes pixel art look sharp and vector art look jaggy.\n *\n * **linear**: linear sampling. makes vector art look smooth and pixel art look blurry.\n *\n * @default \"linear\"\n */\n filter?: \"nearest\" | \"linear\";\n limits?: LimitsOptions;\n};\n\nexport type LineOptions = {\n /**\n * The start position of the line.\n */\n start: Point;\n /**\n * The end position of the line.\n */\n end: Point;\n /**\n * The color of the line.\n */\n color: Color;\n /**\n * The thickness of the line.\n */\n thickness?: number;\n /**\n * The shader to use for the line.\n */\n shader?: IShader;\n /**\n * The layer to draw the line on.\n */\n layer?: number;\n /**\n * A unique identifier for the line.\n */\n key?: string;\n};\n",
|
|
35
|
+
"/**\n * Named colors from the web for easier prototyping than using hex codes or rgba values.\n *\n * https://www.w3schools.com/colors/colors_names.asp\n */\nexport const web = Object.freeze({\n aliceBlue: { r: 0.941176, g: 0.972549, b: 1, a: 1 },\n antiqueWhite: { r: 0.980392, g: 0.921569, b: 0.843137, a: 1 },\n aqua: { r: 0, g: 1, b: 1, a: 1 },\n aquamarine: { r: 0.498039, g: 1, b: 0.831373, a: 1 },\n azure: { r: 0.941176, g: 1, b: 1, a: 1 },\n beige: { r: 0.960784, g: 0.960784, b: 0.862745, a: 1 },\n bisque: { r: 1, g: 0.894118, b: 0.768627, a: 1 },\n black: { r: 0, g: 0, b: 0, a: 1 },\n blanchedAlmond: { r: 1, g: 0.921569, b: 0.803922, a: 1 },\n blue: { r: 0, g: 0, b: 1, a: 1 },\n blueViolet: { r: 0.541176, g: 0.168627, b: 0.886275, a: 1 },\n brown: { r: 0.647059, g: 0.164706, b: 0.164706, a: 1 },\n burlywood: { r: 0.870588, g: 0.721569, b: 0.529412, a: 1 },\n cadetBlue: { r: 0.372549, g: 0.619608, b: 0.627451, a: 1 },\n chartreuse: { r: 0.498039, g: 1, b: 0, a: 1 },\n chocolate: { r: 0.823529, g: 0.411765, b: 0.117647, a: 1 },\n coral: { r: 1, g: 0.498039, b: 0.313726, a: 1 },\n cornflowerBlue: { r: 0.392157, g: 0.584314, b: 0.929412, a: 1 },\n cornsilk: { r: 1, g: 0.972549, b: 0.862745, a: 1 },\n crimson: { r: 0.862745, g: 0.0784314, b: 0.235294, a: 1 },\n cyan: { r: 0, g: 1, b: 1, a: 1 },\n darkBlue: { r: 0, g: 0, b: 0.545098, a: 1 },\n darkCyan: { r: 0, g: 0.545098, b: 0.545098, a: 1 },\n darkGoldenrod: { r: 0.721569, g: 0.52549, b: 0.0431373, a: 1 },\n darkGray: { r: 0.662745, g: 0.662745, b: 0.662745, a: 1 },\n darkGreen: { r: 0, g: 0.392157, b: 0, a: 1 },\n darkKhaki: { r: 0.741176, g: 0.717647, b: 0.419608, a: 1 },\n darkMagenta: { r: 0.545098, g: 0, b: 0.545098, a: 1 },\n darkOliveGreen: { r: 0.333333, g: 0.419608, b: 0.184314, a: 1 },\n darkOrange: { r: 1, g: 0.54902, b: 0, a: 1 },\n darkOrchid: { r: 0.6, g: 0.196078, b: 0.8, a: 1 },\n darkRed: { r: 0.545098, g: 0, b: 0, a: 1 },\n darkSalmon: { r: 0.913725, g: 0.588235, b: 0.478431, a: 1 },\n darkSeaGreen: { r: 0.560784, g: 0.737255, b: 0.560784, a: 1 },\n darkSlateBlue: { r: 0.282353, g: 0.239216, b: 0.545098, a: 1 },\n darkSlateGray: { r: 0.184314, g: 0.309804, b: 0.309804, a: 1 },\n darkTurquoise: { r: 0, g: 0.807843, b: 0.819608, a: 1 },\n darkViolet: { r: 0.580392, g: 0, b: 0.827451, a: 1 },\n deepPink: { r: 1, g: 0.0784314, b: 0.576471, a: 1 },\n deepSkyBlue: { r: 0, g: 0.74902, b: 1, a: 1 },\n dimGray: { r: 0.411765, g: 0.411765, b: 0.411765, a: 1 },\n dodgerBlue: { r: 0.117647, g: 0.564706, b: 1, a: 1 },\n firebrick: { r: 0.698039, g: 0.133333, b: 0.133333, a: 1 },\n floralWhite: { r: 1, g: 0.980392, b: 0.941176, a: 1 },\n forestGreen: { r: 0.133333, g: 0.545098, b: 0.133333, a: 1 },\n fuchsia: { r: 1, g: 0, b: 1, a: 1 },\n gainsboro: { r: 0.862745, g: 0.862745, b: 0.862745, a: 1 },\n ghostWhite: { r: 0.972549, g: 0.972549, b: 1, a: 1 },\n gold: { r: 1, g: 0.843137, b: 0, a: 1 },\n goldenrod: { r: 0.854902, g: 0.647059, b: 0.12549, a: 1 },\n gray: { r: 0.745098, g: 0.745098, b: 0.745098, a: 1 },\n green: { r: 0, g: 1, b: 0, a: 1 },\n greenYellow: { r: 0.678431, g: 1, b: 0.184314, a: 1 },\n honeydew: { r: 0.941176, g: 1, b: 0.941176, a: 1 },\n hotPink: { r: 1, g: 0.411765, b: 0.705882, a: 1 },\n indigo: { r: 0.294118, g: 0, b: 0.509804, a: 1 },\n ivory: { r: 1, g: 1, b: 0.941176, a: 1 },\n khaki: { r: 0.941176, g: 0.901961, b: 0.54902, a: 1 },\n lavender: { r: 0.901961, g: 0.901961, b: 0.980392, a: 1 },\n lavenderBlush: { r: 1, g: 0.941176, b: 0.960784, a: 1 },\n lawnGreen: { r: 0.486275, g: 0.988235, b: 0, a: 1 },\n lemonChiffon: { r: 1, g: 0.980392, b: 0.803922, a: 1 },\n lightBlue: { r: 0.678431, g: 0.847059, b: 0.901961, a: 1 },\n lightCoral: { r: 0.941176, g: 0.501961, b: 0.501961, a: 1 },\n lightCyan: { r: 0.878431, g: 1, b: 1, a: 1 },\n lightGoldenrod: { r: 0.980392, g: 0.980392, b: 0.823529, a: 1 },\n lightGray: { r: 0.827451, g: 0.827451, b: 0.827451, a: 1 },\n lightGreen: { r: 0.564706, g: 0.933333, b: 0.564706, a: 1 },\n lightPink: { r: 1, g: 0.713726, b: 0.756863, a: 1 },\n lightSalmon: { r: 1, g: 0.627451, b: 0.478431, a: 1 },\n lightSeaGreen: { r: 0.12549, g: 0.698039, b: 0.666667, a: 1 },\n lightSkyBlue: { r: 0.529412, g: 0.807843, b: 0.980392, a: 1 },\n lightSlateGray: { r: 0.466667, g: 0.533333, b: 0.6, a: 1 },\n lightSteelBlue: { r: 0.690196, g: 0.768627, b: 0.870588, a: 1 },\n lightYellow: { r: 1, g: 1, b: 0.878431, a: 1 },\n lime: { r: 0, g: 1, b: 0, a: 1 },\n limeGreen: { r: 0.196078, g: 0.803922, b: 0.196078, a: 1 },\n linen: { r: 0.980392, g: 0.941176, b: 0.901961, a: 1 },\n magenta: { r: 1, g: 0, b: 1, a: 1 },\n maroon: { r: 0.690196, g: 0.188235, b: 0.376471, a: 1 },\n mediumAquamarine: { r: 0.4, g: 0.803922, b: 0.666667, a: 1 },\n mediumBlue: { r: 0, g: 0, b: 0.803922, a: 1 },\n mediumOrchid: { r: 0.729412, g: 0.333333, b: 0.827451, a: 1 },\n mediumPurple: { r: 0.576471, g: 0.439216, b: 0.858824, a: 1 },\n mediumSeaGreen: { r: 0.235294, g: 0.701961, b: 0.443137, a: 1 },\n mediumSlateBlue: { r: 0.482353, g: 0.407843, b: 0.933333, a: 1 },\n mediumSpringGreen: { r: 0, g: 0.980392, b: 0.603922, a: 1 },\n mediumTurquoise: { r: 0.282353, g: 0.819608, b: 0.8, a: 1 },\n mediumVioletRed: { r: 0.780392, g: 0.0823529, b: 0.521569, a: 1 },\n midnightBlue: { r: 0.0980392, g: 0.0980392, b: 0.439216, a: 1 },\n mintCream: { r: 0.960784, g: 1, b: 0.980392, a: 1 },\n mistyRose: { r: 1, g: 0.894118, b: 0.882353, a: 1 },\n moccasin: { r: 1, g: 0.894118, b: 0.709804, a: 1 },\n navyBlue: { r: 0, g: 0, b: 0.501961, a: 1 },\n oldLace: { r: 0.992157, g: 0.960784, b: 0.901961, a: 1 },\n olive: { r: 0.501961, g: 0.501961, b: 0, a: 1 },\n oliveDrab: { r: 0.419608, g: 0.556863, b: 0.137255, a: 1 },\n orange: { r: 1, g: 0.647059, b: 0, a: 1 },\n orangeRed: { r: 1, g: 0.270588, b: 0, a: 1 },\n orchid: { r: 0.854902, g: 0.439216, b: 0.839216, a: 1 },\n paleGoldenrod: { r: 0.933333, g: 0.909804, b: 0.666667, a: 1 },\n paleGreen: { r: 0.596078, g: 0.984314, b: 0.596078, a: 1 },\n paleTurquoise: { r: 0.686275, g: 0.933333, b: 0.933333, a: 1 },\n paleVioletRed: { r: 0.858824, g: 0.439216, b: 0.576471, a: 1 },\n papayaWhip: { r: 1, g: 0.937255, b: 0.835294, a: 1 },\n peachPuff: { r: 1, g: 0.854902, b: 0.72549, a: 1 },\n peru: { r: 0.803922, g: 0.521569, b: 0.247059, a: 1 },\n pink: { r: 1, g: 0.752941, b: 0.796078, a: 1 },\n plum: { r: 0.866667, g: 0.627451, b: 0.866667, a: 1 },\n powderBlue: { r: 0.690196, g: 0.878431, b: 0.901961, a: 1 },\n purple: { r: 0.627451, g: 0.12549, b: 0.941176, a: 1 },\n rebeccaPurple: { r: 0.4, g: 0.2, b: 0.6, a: 1 },\n red: { r: 1, g: 0, b: 0, a: 1 },\n rosyBrown: { r: 0.737255, g: 0.560784, b: 0.560784, a: 1 },\n royalBlue: { r: 0.254902, g: 0.411765, b: 0.882353, a: 1 },\n saddleBrown: { r: 0.545098, g: 0.270588, b: 0.0745098, a: 1 },\n salmon: { r: 0.980392, g: 0.501961, b: 0.447059, a: 1 },\n sandyBrown: { r: 0.956863, g: 0.643137, b: 0.376471, a: 1 },\n seaGreen: { r: 0.180392, g: 0.545098, b: 0.341176, a: 1 },\n seashell: { r: 1, g: 0.960784, b: 0.933333, a: 1 },\n sienna: { r: 0.627451, g: 0.321569, b: 0.176471, a: 1 },\n silver: { r: 0.752941, g: 0.752941, b: 0.752941, a: 1 },\n skyBlue: { r: 0.529412, g: 0.807843, b: 0.921569, a: 1 },\n slateBlue: { r: 0.415686, g: 0.352941, b: 0.803922, a: 1 },\n slateGray: { r: 0.439216, g: 0.501961, b: 0.564706, a: 1 },\n snow: { r: 1, g: 0.980392, b: 0.980392, a: 1 },\n springGreen: { r: 0, g: 1, b: 0.498039, a: 1 },\n steelBlue: { r: 0.27451, g: 0.509804, b: 0.705882, a: 1 },\n tan: { r: 0.823529, g: 0.705882, b: 0.54902, a: 1 },\n teal: { r: 0, g: 0.501961, b: 0.501961, a: 1 },\n thistle: { r: 0.847059, g: 0.74902, b: 0.847059, a: 1 },\n tomato: { r: 1, g: 0.388235, b: 0.278431, a: 1 },\n transparent: { r: 1, g: 1, b: 1, a: 0 },\n turquoise: { r: 0.25098, g: 0.878431, b: 0.815686, a: 1 },\n violet: { r: 0.933333, g: 0.509804, b: 0.933333, a: 1 },\n webGray: { r: 0.501961, g: 0.501961, b: 0.501961, a: 1 },\n webGreen: { r: 0, g: 0.501961, b: 0, a: 1 },\n webMaroon: { r: 0.501961, g: 0, b: 0, a: 1 },\n webPurple: { r: 0.501961, g: 0, b: 0.501961, a: 1 },\n wheat: { r: 0.960784, g: 0.870588, b: 0.701961, a: 1 },\n white: { r: 1, g: 1, b: 1, a: 1 },\n whiteSmoke: { r: 0.960784, g: 0.960784, b: 0.960784, a: 1 },\n yellow: { r: 1, g: 1, b: 0, a: 1 },\n yellowGreen: { r: 0.603922, g: 0.803922, b: 0.196078, a: 1 },\n});\n",
|
|
36
|
+
"export type PostProcess = {\n /**\n * A post-processor modifies the current render before it is presented to the screen.\n *\n * @param encoder - a GPUCommandEncoder used to create render passes\n * @param pingpong - a pair of GPUTextures used for ping-pong rendering\n * @param screen - the final screen GPUTexture to render to\n */\n process(\n queue: GPUQueue,\n encoder: GPUCommandEncoder,\n pingpong: [GPUTexture, GPUTexture],\n screen: GPUTexture,\n ): void;\n};\n\nexport const PostProcessDefaults = {\n sampler(device: GPUDevice): GPUSampler {\n return device.createSampler({\n label: \"toodle post process sampler\",\n magFilter: \"linear\",\n minFilter: \"linear\",\n mipmapFilter: \"linear\",\n addressModeU: \"clamp-to-edge\",\n addressModeV: \"clamp-to-edge\",\n });\n },\n\n vertexBufferLayout(device: GPUDevice): GPUVertexBufferLayout {\n return {\n arrayStride: 4 * 4,\n attributes: [{ shaderLocation: 0, offset: 0, format: \"float32x2\" }],\n };\n },\n\n vertexShader(device: GPUDevice): GPUShaderModule {\n return device.createShaderModule({\n label: \"toodle post process vertex shader\",\n code: `\n struct VertexOut {\n @builtin(position) position: vec4<f32>,\n @location(0) uv: vec2<f32>,\n };\n\n const enginePosLookup = array(vec2f(-1, 1), vec2f(-1, -1), vec2f(1, 1), vec2f(1, -1));\n const engineUvLookup = array(vec2f(0, 0), vec2f(0, 1), vec2f(1, 0), vec2f(1, 1));\n\n @vertex\n fn vs_main(@builtin(vertex_index) vertexIndex: u32) -> VertexOut {\n var out: VertexOut;\n out.position = vec4(enginePosLookup[vertexIndex], 0.0, 1.0);\n out.uv = engineUvLookup[vertexIndex];\n return out;\n }\n `,\n });\n },\n\n pipelineDescriptor(device: GPUDevice): GPURenderPipelineDescriptor {\n return {\n label: \"toodle post process pipeline descriptor\",\n layout: \"auto\",\n\n primitive: { topology: \"triangle-strip\" },\n vertex: {\n buffers: [PostProcessDefaults.vertexBufferLayout(device)],\n module: PostProcessDefaults.vertexShader(device),\n },\n };\n },\n} as const;\n"
|
|
37
|
+
],
|
|
38
|
+
"mappings": "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GAAE,GAAG,QAAM,IAAI,GAAG,QAAO,GAAG,MAAK,IAAI,GAAE,GAAG,QAAM,IAAI,GAAG,QAAO,GAAG,MAAK,IAAI,GAAE,GAAG,QAAM,IAAI,GAAG,QAAO,GAAG,MAAK,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,GAAG,KAAI,IAAI,GAAE,GAAG,UAAQ,IAAI,GAAG,UAAS,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AQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI,GAAE,IAAG,UAAQ,IAAI,IAAG,UAAS,IAAG,KAAI,IAAI;AAAA;AAAE,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,EAAC,GAAE,KAAK,UAAQ,IAAE,KAAK,OAAK,IAAE,KAAK,SAAO;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAU;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,EAAC,GAAE,KAAK,aAAW,IAAE,KAAK,SAAO,IAAE,KAAK,QAAM;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,MAAY,OAAO,GAAE;AAAA,IAAC,OAAM;AAAA;AAAG;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,EAAC,GAAE,KAAK,SAAO,IAAE,KAAK,SAAO;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAU;AAAA;AAAC,MAAM,YAAW,GAAC;AAAA,EAAC,WAAW,GAAE;AAAA,IAAC,MAAM,GAAE,KAAK,UAAQ;AAAA;AAAK;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,QAAM;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAa,QAAQ,GAAE;AAAA,IAAC,OAAO,KAAK;AAAA;AAAA,EAAM,mBAAmB,GAAE;AAAA,IAAC,OAAO,KAAK;AAAA;AAAM;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,OAAK,IAAE,KAAK,OAAK;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAa,MAAM,CAAC,IAAE;AAAA,IAAC,IAAG,GAAE,IAAI,GAAE,KAAK;AAAA,MAAK,WAAU,MAAK,KAAK;AAAA,QAAK,GAAE,OAAO,EAAC;AAAA;AAAA,EAAE,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,OAAI,GAAE,KAAG,KAAK,OAAM,GAAE,eAAe,MAAK,GAAE,OAAO;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,oBAAkB,MAAK,KAAK,OAAK,IAAE,KAAK,OAAK;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAW,oBAAoB,CAAC,IAAE;AAAA,IAAC,KAAK,oBAAkB;AAAA;AAAA,MAAM,SAAS,GAAE;AAAA,IAAC,OAAO,GAAE,IAAI,KAAK,IAAI;AAAA;AAAA,EAAE,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,GAAE,eAAe,MAAK,GAAE,OAAO;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE;AAAA,IAAC,WAAU,MAAK,KAAK;AAAA,MAAK,GAAE,OAAO,EAAC;AAAA,IAAE,GAAE,IAAI;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,OAAK;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAU,MAAM,CAAC,IAAE;AAAA,IAAC,GAAE,IAAI,GAAE,KAAK,WAAS,KAAK,QAAQ,OAAO,EAAC;AAAA;AAAA,EAAE,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,GAAE,eAAe,MAAK,GAAE,OAAO;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,OAAK,IAAE,KAAK,cAAY;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAY,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,IAAG,KAAK,aAAY;AAAA,MAAC,MAAM,KAAE,GAAE,eAAe,KAAK,aAAY,GAAE,OAAO;AAAA,MAAE,OAAc,OAAP,QAAU,KAAK,UAAQ,GAAE,WAAW,IAAE,KAAK,SAAQ,GAAE,OAAO,IAAE;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,MAAM,CAAC,IAAE;AAAA,IAAC,KAAK,YAAY,OAAO,EAAC;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,QAAM,IAAE,KAAK,OAAK;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAc,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAgB,OAAJ,cAAQ,GAAE,KAAG,KAAK,OAAM,KAAK;AAAA;AAAA,MAAU,QAAQ,GAAE;AAAA,IAAC,OAAO,KAAK,iBAAiB;AAAA;AAAA,MAAO,QAAQ,GAAE;AAAA,IAAC,OAAO,KAAK,iBAAiB,OAAI,KAAK,iBAAiB;AAAA;AAAA,MAAO,WAAW,GAAE;AAAA,IAAC,OAAO,KAAK,iBAAiB,MAAG,KAAK,MAAM,SAAO,QAAQ,MAAM,sBAAsB,GAAE;AAAA;AAAA,MAAO,WAAW,GAAE;AAAA,IAAC,OAAO,KAAK,iBAAiB,OAAI,KAAK,iBAAiB,MAAG,KAAK,MAAM,QAAM,QAAQ,MAAM,kCAAkC,GAAE,IAAI,aAAa,CAAC;AAAA;AAAG;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,OAAK,IAAE,KAAK,QAAM;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAc,MAAM,CAAC,IAAE;AAAA,IAAC,KAAK,MAAM,OAAO,EAAC;AAAA;AAAE;AAAiN,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,QAAM;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE;AAAA,IAAC,KAAK,MAAM,OAAO,EAAC;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,GAAE;AAAA,IAAC,MAAM;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,WAAS,IAAE,KAAK,QAAM;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAU,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,GAAE,eAAe,MAAK,GAAE,OAAO;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE;AAAA,IAAC,KAAK,MAAM,OAAO,EAAC;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,WAAS,IAAE,KAAK,OAAK,IAAE,KAAK,QAAM;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAW,gBAAgB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,GAAE,SAAO,GAAE,OAAK,KAAU,GAAE,SAAV,SAAwB,GAAE,SAAV,QAAe,IAAG,MAAY,GAAE,SAAV,SAAwB,GAAE,SAAV,QAAe,IAAG,MAAI,IAAG;AAAA;AAAA,EAAI,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,GAAE,eAAe,MAAK,GAAE,OAAO;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE;AAAA,IAAC,KAAK,KAAK,OAAO,EAAC,GAAE,KAAK,MAAM,OAAO,EAAC;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,GAAC;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,OAAK;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE;AAAA,IAAC,GAAE,IAAI,GAAE,KAAK,YAAY,KAAK,MAAK,EAAC;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,GAAE;AAAA,IAAC,MAAM;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAU;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,EAAC,GAAE,KAAK,YAAU;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAO,MAAM,CAAC,IAAE;AAAA,IAAC,KAAK,YAAY,KAAK,MAAK,EAAC;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,MAAM,EAAC;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAU,MAAM,CAAC,IAAE;AAAA,IAAC,KAAK,YAAY,KAAK,MAAK,EAAC;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,GAAC;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,OAAK,IAAE,KAAK,OAAK,IAAE,KAAK,aAAW;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAW;AAAA;AAAC,MAAM,YAAW,GAAC;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,YAAU,IAAE,KAAK,OAAK;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAS,MAAM,CAAC,IAAE;AAAA,IAAC,KAAK,UAAU,OAAO,EAAC,GAAE,KAAK,YAAY,KAAK,MAAK,EAAC;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,GAAC;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,OAAK,IAAE,KAAK,OAAK,IAAE,KAAK,aAAW;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAS;AAAA;AAAC,MAAM,YAAW,GAAC;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,GAAE,KAAK,OAAK,IAAE,KAAK,QAAM;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAM;AAAA;AAAY;AAAA;AAAC,MAAM,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,KAAK,SAAO,MAAK,KAAK,WAAS,IAAE,KAAK,SAAO,IAAE,KAAK,KAAG,IAAG;AAAA;AAAA,EAAM,KAAK,GAAE;AAAA,IAAC,MAAK,8BAA8B,KAAK,YAAY;AAAA;AAAA,EAAO,YAAY,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,QAAQ,MAAM,qCAAqC,KAAK,YAAY,MAAM;AAAA;AAAA,EAAE,UAAU,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qCAAqC,KAAK,YAAY,MAAM,GAAE;AAAA;AAAA,EAAK,QAAQ,GAAE;AAAA,IAAC,OAAM,IAAI,KAAK,SAAS,YAAY;AAAA;AAAK;AAAC,IAAG,MAAI;AAAA;AAAE,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,GAAE;AAAA,IAAC,MAAM,IAAI,GAAE,QAAO,IAAI,GAAE,IAAI;AAAA;AAAA,EAAE,QAAQ,GAAE;AAAA,IAAC,OAAM;AAAA;AAAO;AAAC,IAAG,OAAK,IAAI;AAAA;AAAG,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,MAAM,IAAI,GAAE,WAAU,GAAE,UAAS,IAAI,GAAE,IAAI,GAAE,KAAK,YAAU;AAAA;AAAA,EAAE,KAAK,GAAE;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,YAAY,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,KAAK,UAAU,aAAa,IAAE,IAAE,IAAE,EAAC;AAAA;AAAA,EAAE,UAAU,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,OAAO,KAAE,KAAK,UAAU,WAAW,IAAE,IAAE,EAAC,IAAE;AAAA;AAAA,EAAK,QAAQ,GAAE;AAAA,IAAC,OAAM,IAAI,KAAK,UAAU,SAAS;AAAA;AAAI;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,KAAE,MAAK;AAAA,IAAC,MAAM,IAAE,EAAC,GAAE,cAAa,cAAY,cAAa,eAAa,cAAa,eAAa,KAAK,OAAK,KAAU,KAAK,SAAS,SAAtB,QAA2B,KAAE,KAAK,MAAM,EAAC,KAAG,IAAE,KAAK,OAAK,IAAI,aAAa,CAAC,EAAC,CAAC,IAAE,KAAK,OAAK,MAAG,IAAE,IAAI,YAAY,CAAC,EAAC,CAAC,IAAE,IAAI,WAAW,CAAC,EAAC,CAAC,IAAU,KAAK,SAAS,SAAtB,SAAqC,KAAK,SAAS,SAAvB,SAA4B,KAAK,OAAK,IAAI,WAAW,CAAC,EAAC,CAAC,IAAU,KAAK,SAAS,SAAtB,QAA2B,KAAK,OAAK,IAAI,YAAY,CAAC,EAAC,CAAC,IAAU,KAAK,SAAS,SAAtB,SAAoC,KAAK,SAAS,SAAtB,QAA2B,KAAK,OAAK,IAAI,aAAa,CAAC,EAAC,CAAC,IAAE,QAAQ,MAAM,6BAA4B,EAAC;AAAA;AAAA,EAAE,KAAK,GAAE;AAAA,IAAC,IAAG,KAAK,gBAAgB;AAAA,MAAa,OAAO,IAAI,IAAG,IAAI,aAAa,KAAK,IAAI,GAAE,KAAK,UAAS,IAAI;AAAA,IAAE,IAAG,KAAK,gBAAgB;AAAA,MAAW,OAAO,IAAI,IAAG,IAAI,WAAW,KAAK,IAAI,GAAE,KAAK,UAAS,IAAI;AAAA,IAAE,IAAG,KAAK,gBAAgB;AAAA,MAAY,OAAO,IAAI,IAAG,IAAI,YAAY,KAAK,IAAI,GAAE,KAAK,UAAS,IAAI;AAAA,IAAE,MAAK;AAAA;AAAA,MAAoC,KAAK,GAAE;AAAA,IAAC,OAAO,KAAK,KAAK;AAAA;AAAA,MAAO,KAAK,CAAC,IAAE;AAAA,IAAC,KAAK,KAAK,KAAG;AAAA;AAAA,EAAE,YAAY,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,IAAG;AAAA,MAAE,OAAO,KAAK,QAAQ,MAAM,sDAAqD,EAAC;AAAA,IAAE,IAAG,EAAE,cAAa;AAAA,MAAI,OAAO,KAAK,QAAQ,MAAM,+BAA8B,EAAC;AAAA,IAAE,IAAI,KAAE,GAAE,KAAK;AAAA,IAAW,KAAK,SAAS,SAAtB,SAAoC,KAAK,SAAS,SAAtB,QAA2B,KAAE,KAAK,MAAM,EAAC,IAAW,KAAK,SAAS,SAAvB,WAA8B,KAAE,KAAE,IAAE,IAAG,KAAK,KAAK,KAAG;AAAA;AAAA,EAAE,UAAU,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,OAAO,MAAG,QAAQ,MAAM,oDAAmD,EAAC,GAAE,QAAM;AAAA;AAAA,EAAK,QAAQ,GAAE;AAAA,IAAC,OAAM,GAAG,KAAK;AAAA;AAAQ;AAAC,SAAS,GAAE,CAAC,IAAE,IAAE,IAAE;AAAA,EAAC,MAAM,KAAE,GAAE;AAAA,EAAO,OAAW,OAAJ,IAAc,OAAR,QAAU,IAAI,IAAG,IAAI,aAAa,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,IAAU,OAAR,SAAoB,OAAT,SAAW,IAAI,IAAG,IAAI,WAAW,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,IAAU,OAAR,QAAU,IAAI,IAAG,IAAI,YAAY,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,IAAU,OAAR,QAAU,IAAI,IAAG,IAAI,aAAa,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,KAAG,QAAQ,MAAM,8BAA8B,IAAG,GAAE,QAAU,OAAJ,IAAc,OAAR,QAAU,IAAI,IAAG,IAAI,aAAa,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,IAAU,OAAR,SAAoB,OAAT,SAAW,IAAI,IAAG,IAAI,WAAW,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,IAAU,OAAR,QAAU,IAAI,IAAG,IAAI,YAAY,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,IAAU,OAAR,QAAU,IAAI,IAAG,IAAI,aAAa,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,KAAG,QAAQ,MAAM,8BAA8B,IAAG,GAAE,QAAU,OAAJ,IAAc,OAAR,QAAU,IAAI,IAAG,IAAI,aAAa,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,IAAU,OAAR,SAAoB,OAAT,SAAW,IAAI,IAAG,IAAI,WAAW,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,IAAU,OAAR,QAAU,IAAI,IAAG,IAAI,YAAY,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,IAAU,OAAR,QAAU,IAAI,IAAG,IAAI,aAAa,EAAC,GAAE,GAAE,YAAY,OAAO,CAAC,KAAG,QAAQ,MAAM,8BAA8B,IAAG,GAAE,SAAO,QAAQ,MAAM,mCAAmC,GAAE,QAAQ,GAAE;AAAA;AAAA;AAAM,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,KAAE,MAAK;AAAA,IAAC,IAAG,MAAM,IAAE,EAAC,GAAE,cAAa,gBAAc,cAAa,eAAa,cAAa;AAAA,MAAW,KAAK,OAAK;AAAA,IAAM;AAAA,MAAC,MAAM,KAAE,KAAK,SAAS;AAAA,MAAe,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAK,OAAK,IAAI,aAAa,EAAC,IAAY,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAK,OAAK,IAAI,WAAW,EAAC,IAAY,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAK,OAAK,IAAI,YAAY,EAAC,IAAY,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAK,OAAK,IAAI,aAAa,EAAC,IAAY,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAK,OAAK,IAAI,WAAW,EAAC,IAAW,OAAT,UAAqB,OAAT,UAAqB,OAAT,SAAW,KAAK,OAAK,IAAI,aAAa,EAAC,IAAE,QAAQ,MAAM,4BAA4B,IAAG;AAAA;AAAA;AAAA,EAAG,KAAK,GAAE;AAAA,IAAC,IAAG,KAAK,gBAAgB;AAAA,MAAa,OAAO,IAAI,IAAG,IAAI,aAAa,KAAK,IAAI,GAAE,KAAK,UAAS,IAAI;AAAA,IAAE,IAAG,KAAK,gBAAgB;AAAA,MAAW,OAAO,IAAI,IAAG,IAAI,WAAW,KAAK,IAAI,GAAE,KAAK,UAAS,IAAI;AAAA,IAAE,IAAG,KAAK,gBAAgB;AAAA,MAAY,OAAO,IAAI,IAAG,IAAI,YAAY,KAAK,IAAI,GAAE,KAAK,UAAS,IAAI;AAAA,IAAE,MAAK;AAAA;AAAA,EAAgC,YAAY,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,cAAa,MAAG,QAAQ,MAAM,0BAA0B,IAAE,cAAa,MAAG,KAAK,OAAK,GAAE,OAAK,QAAQ,MAAM,+BAA8B,EAAC;AAAA;AAAA,EAAE,UAAU,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,IAAU,OAAP;AAAA,MAAS,OAAO;AAAA,IAAK,IAAI,KAAE,GAAE,YAAY,KAAK;AAAA,IAAE,IAAG,KAAK,oBAAoB;AAAA,MAAE,KAAE,KAAK,SAAS,UAAQ;AAAA,IAAM;AAAA,MAAC,MAAM,KAAE,KAAK,SAAS;AAAA,MAAe,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAE,GAAE,YAAY,KAAK,IAAY,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAE,GAAE,YAAY,KAAK,IAAY,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAE,GAAE,YAAY,MAAM,IAAY,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAE,GAAE,YAAY,KAAK,IAAY,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAE,GAAE,YAAY,KAAK,IAAE,QAAQ,MAAM,4BAA4B,IAAG;AAAA;AAAA,IAAE,IAAI,KAAE;AAAA,IAAK,MAAY,OAAP,QAAiB,OAAP,QAAU;AAAA,MAAC,IAAG,cAAa,KAAG;AAAA,QAAC,MAAM,KAAE,GAAE;AAAA,QAAM,IAAI,KAAE;AAAA,QAAG,IAAG,cAAa,KAAG;AAAA,UAAC,IAAG,EAAE,GAAE,iBAAiB;AAAA,YAAI,OAAO,QAAQ,MAAM,mCAAmC,GAAE,OAAO,GAAE;AAAA,UAAK,KAAE,GAAE,MAAM;AAAA,QAAK,EAAK;AAAA,UAAC,MAAM,KAAE,GAAE,eAAe,IAAE,EAAC;AAAA,UAAE,IAAG,EAAE,cAAa;AAAA,YAAI,OAAO,QAAQ,MAAM,kCAAiC,EAAC,GAAE;AAAA,UAAK,KAAE,GAAE;AAAA;AAAA,QAAM,IAAG,KAAE,KAAG,MAAG,GAAE,KAAK;AAAA,UAAO,OAAO,QAAQ,MAAM,kCAAiC,EAAC,GAAE;AAAA,QAAK,IAAG,GAAE,gBAAgB,cAAa;AAAA,UAAC,MAAM,KAAE,IAAI,aAAa,GAAE,KAAK,QAAO,GAAE,KAAK,aAAW,IAAE,IAAE,CAAC;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,EAAC;AAAA,QAAC;AAAA,QAAC,IAAG,GAAE,gBAAgB,YAAW;AAAA,UAAC,MAAM,KAAE,IAAI,WAAW,GAAE,KAAK,QAAO,GAAE,KAAK,aAAW,IAAE,IAAE,CAAC;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,EAAC;AAAA,QAAC;AAAA,QAAC,IAAG,GAAE,gBAAgB,aAAY;AAAA,UAAC,MAAM,KAAE,IAAI,YAAY,GAAE,KAAK,QAAO,GAAE,KAAK,aAAW,IAAE,IAAE,CAAC;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,EAAC;AAAA,QAAC;AAAA,QAAC,MAAK;AAAA,MAA+B;AAAA,MAAC,IAAG,EAAE,cAAa;AAAA,QAAI,OAAO,QAAQ,MAAM,+BAA8B,EAAC,GAAE;AAAA,MAAK;AAAA,QAAC,MAAM,KAAE,GAAE,MAAM,YAAY;AAAA,QAAE,IAAO,GAAE,WAAN,GAAa;AAAA,UAAC,IAAI,KAAE;AAAA,UAAE,IAAS,OAAN,OAAe,OAAN;AAAA,YAAQ,KAAE;AAAA,UAAO,SAAS,OAAN,OAAe,OAAN;AAAA,YAAQ,KAAE;AAAA,UAAO,SAAS,OAAN,OAAe,OAAN;AAAA,YAAQ,KAAE;AAAA,UAAM;AAAA,YAAC,IAAS,OAAN,OAAe,OAAN;AAAA,cAAQ,OAAO,QAAQ,MAAM,8BAA8B,IAAG,GAAE;AAAA,YAAK,KAAE;AAAA;AAAA,UAAE,IAAG,KAAK,gBAAgB,cAAa;AAAA,YAAC,IAAI,KAAE,IAAI,aAAa,KAAK,KAAK,QAAO,KAAK,KAAK,aAAW,IAAE,IAAE,CAAC;AAAA,YAAE,OAAO,IAAI,IAAG,IAAE,IAAE,IAAI;AAAA,UAAC;AAAA,UAAC,IAAG,KAAK,gBAAgB,YAAW;AAAA,YAAC,IAAI,KAAE,IAAI,WAAW,KAAK,KAAK,QAAO,KAAK,KAAK,aAAW,IAAE,IAAE,CAAC;AAAA,YAAE,OAAO,IAAI,IAAG,IAAE,IAAE,IAAI;AAAA,UAAC;AAAA,UAAC,IAAG,KAAK,gBAAgB,aAAY;AAAA,YAAC,IAAI,KAAE,IAAI,YAAY,KAAK,KAAK,QAAO,KAAK,KAAK,aAAW,IAAE,IAAE,CAAC;AAAA,YAAE,OAAO,IAAI,IAAG,IAAE,IAAE,IAAI;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,CAAC;AAAA,QAAE,WAAU,MAAK;AAAA,UAAQ,OAAN,OAAe,OAAN,MAAQ,GAAE,KAAK,KAAK,KAAK,EAAE,IAAQ,OAAN,OAAe,OAAN,MAAQ,GAAE,KAAK,KAAK,KAAK,EAAE,IAAQ,OAAN,OAAe,OAAN,MAAQ,GAAE,KAAK,KAAK,KAAK,EAAE,IAAQ,OAAN,OAAe,OAAN,MAAQ,GAAE,KAAK,KAAK,KAAK,EAAE,IAAE,QAAQ,MAAM,gCAAgC,IAAG;AAAA,QAAE,KAAE,IAAG,IAAE,IAAE,GAAE,IAAI;AAAA,MAAC;AAAA,MAAC,KAAE,GAAE;AAAA,IAAO;AAAA,IAAC,OAAO;AAAA;AAAA,EAAE,QAAQ,GAAE;AAAA,IAAC,IAAI,KAAE,GAAG,KAAK,KAAK;AAAA,IAAK,SAAQ,KAAE,EAAE,KAAE,KAAK,KAAK,QAAO,EAAE;AAAA,MAAE,MAAG,KAAK,KAAK,KAAK;AAAA,IAAK,OAAO;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,KAAE,MAAK;AAAA,IAAC,MAAM,IAAE,EAAC,GAAE,cAAa,eAAa,KAAK,OAAK,KAAE,KAAK,OAAK,IAAI,aAAa,EAAC;AAAA;AAAA,EAAE,KAAK,GAAE;AAAA,IAAC,OAAO,IAAI,IAAG,IAAI,aAAa,KAAK,IAAI,GAAE,KAAK,UAAS,IAAI;AAAA;AAAA,EAAE,YAAY,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,cAAa,MAAG,QAAQ,MAAM,0BAA0B,IAAE,cAAa,MAAG,KAAK,OAAK,GAAE,OAAK,QAAQ,MAAM,+BAA8B,EAAC;AAAA;AAAA,EAAE,UAAU,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,IAAU,OAAP;AAAA,MAAS,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,SAAS;AAAA,IAAK,IAAG,GAAE,YAAY,KAAK,GAAE,KAAK,oBAAoB;AAAA,MAAE,KAAK,SAAS;AAAA,IAAY,SAAG,GAAE,SAAS,GAAG;AAAA,MAAE,GAAE,YAAY,KAAK;AAAA,IAAO,SAAG,GAAE,SAAS,GAAG;AAAA,MAAE,GAAE,YAAY,KAAK;AAAA,IAAO,SAAG,GAAE,SAAS,GAAG;AAAA,MAAE,GAAE,YAAY,KAAK;AAAA,IAAM;AAAA,MAAC,IAAG,CAAC,GAAE,SAAS,GAAG;AAAA,QAAE,OAAO,QAAQ,MAAM,8BAA8B,IAAG,GAAE;AAAA,MAAK,GAAE,YAAY,KAAK;AAAA;AAAA,IAAE,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAM,IAAI,KAAE;AAAA,MAAG,IAAG,cAAa,KAAG;AAAA,QAAC,IAAG,EAAE,GAAE,iBAAiB;AAAA,UAAI,OAAO,QAAQ,MAAM,qCAAqC,GAAE,OAAO,GAAE;AAAA,QAAK,KAAE,GAAE,MAAM;AAAA,MAAK,EAAK;AAAA,QAAC,MAAM,KAAE,GAAE,eAAe,IAAE,EAAC;AAAA,QAAE,IAAG,EAAE,cAAa;AAAA,UAAI,OAAO,QAAQ,MAAM,oCAAmC,EAAC,GAAE;AAAA,QAAK,KAAE,GAAE;AAAA;AAAA,MAAM,IAAG,KAAE,KAAG,MAAG,KAAK,KAAK;AAAA,QAAO,OAAO,QAAQ,MAAM,oCAAmC,EAAC,GAAE;AAAA,MAAK,MAAM,KAAE,GAAE,SAAS,GAAG,IAAE,MAAI;AAAA,MAAI,IAAI;AAAA,MAAE,IAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA0B,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA0B,OAAX,YAA0B,OAAZ,aAA2B,OAAZ;AAAA,QAAc,KAAE,IAAI,IAAG,IAAI,aAAa,KAAK,KAAK,QAAO,KAAK,KAAK,aAAW,IAAE,KAAE,GAAE,CAAC,GAAE,GAAE,YAAY,OAAO,IAAG,CAAC;AAAA,MAAO,SAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA0B,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA0B,OAAX,YAA0B,OAAZ,aAA2B,OAAZ;AAAA,QAAc,KAAE,IAAI,IAAG,IAAI,aAAa,KAAK,KAAK,QAAO,KAAK,KAAK,aAAW,IAAE,KAAE,GAAE,CAAC,GAAE,GAAE,YAAY,OAAO,IAAG,CAAC;AAAA,MAAM;AAAA,QAAC,IAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA0B,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA0B,OAAX,YAA0B,OAAZ,aAA2B,OAAZ;AAAA,UAAc,OAAO,QAAQ,MAAM,8BAA8B,IAAG,GAAE;AAAA,QAAK,KAAE,IAAI,IAAG,IAAI,aAAa,KAAK,KAAK,QAAO,KAAK,KAAK,aAAW,IAAE,KAAE,GAAE,CAAC,GAAE,GAAE,YAAY,OAAO,IAAG,CAAC;AAAA;AAAA,MAAE,OAAO,GAAE,UAAQ,GAAE,WAAW,IAAE,GAAE,SAAQ,EAAC,IAAE;AAAA,IAAC;AAAA,IAAC,OAAO,QAAQ,MAAM,iCAAgC,EAAC,GAAE;AAAA;AAAA,EAAK,QAAQ,GAAE;AAAA,IAAC,IAAI,KAAE,GAAG,KAAK,KAAK;AAAA,IAAK,SAAQ,KAAE,EAAE,KAAE,KAAK,KAAK,QAAO,EAAE;AAAA,MAAE,MAAG,KAAK,KAAK,KAAK;AAAA,IAAK,OAAO;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,KAAE,GAAE,KAAE,MAAK;AAAA,IAAC,MAAM,IAAE,EAAC,GAAE,KAAK,SAAO,cAAa,cAAY,KAAE,GAAE,QAAO,KAAK,SAAO;AAAA;AAAA,EAAE,KAAK,GAAE;AAAA,IAAC,MAAM,KAAE,IAAI,WAAW,IAAI,WAAW,KAAK,QAAO,KAAK,QAAO,KAAK,SAAS,IAAI,CAAC;AAAA,IAAE,OAAO,IAAI,IAAG,GAAE,QAAO,KAAK,UAAS,GAAE,IAAI;AAAA;AAAA,EAAE,YAAY,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,IAAU,OAAP;AAAA,MAAS,OAAO,KAAK,QAAQ,IAAI,0BAA0B;AAAA,IAAE,IAAI,KAAE,KAAK,QAAO,KAAE,KAAK;AAAA,IAAS,MAAK,MAAG;AAAA,MAAC,IAAG,cAAa;AAAA,QAAG,IAAG,cAAa,IAAE;AAAA,UAAC,MAAM,KAAE,GAAE;AAAA,UAAM,IAAG,cAAa,KAAG;AAAA,YAAC,IAAG,EAAE,GAAE,iBAAiB;AAAA,cAAI,OAAO,KAAK,QAAQ,MAAM,oCAAoC,GAAE,OAAO;AAAA,YAAE,MAAG,GAAE,MAAM,QAAM,GAAE;AAAA,UAAM,EAAK;AAAA,YAAC,MAAM,KAAE,GAAE,eAAe,IAAE,EAAC;AAAA,YAAE,IAAG,EAAE,cAAa;AAAA,cAAI,OAAO,KAAK,QAAQ,MAAM,oCAAmC,EAAC;AAAA,YAAE,MAAG,GAAE,QAAM,GAAE;AAAA;AAAA,UAAO,KAAE,GAAE;AAAA,QAAM,EAAM;AAAA,kBAAQ,MAAM,sBAAsB,GAAE,YAAY,mBAAmB;AAAA,MAAM;AAAA,QAAC,IAAG,EAAE,cAAa;AAAA,UAAI,OAAO,KAAK,QAAQ,MAAM,sCAAqC,EAAC;AAAA,QAAE;AAAA,UAAC,MAAM,KAAE,GAAE;AAAA,UAAM,IAAG,cAAa,IAAE;AAAA,YAAC,IAAI,KAAE;AAAA,YAAG,WAAU,MAAK,GAAE;AAAA,cAAQ,IAAG,GAAE,SAAO,IAAE;AAAA,gBAAC,MAAG,GAAE,QAAO,KAAE,GAAE,MAAK,KAAE;AAAA,gBAAG;AAAA,cAAK;AAAA,YAAC,IAAG,CAAC;AAAA,cAAE,OAAO,KAAK,QAAQ,MAAM,wBAAwB,cAAa;AAAA,UAAC,EAAM,SAAG,cAAa,IAAE;AAAA,YAAC,MAAM,KAAE,GAAE,YAAY;AAAA,YAAE,IAAI,KAAE;AAAA,YAAE,IAAS,OAAN,OAAe,OAAN;AAAA,cAAQ,KAAE;AAAA,YAAO,SAAS,OAAN,OAAe,OAAN;AAAA,cAAQ,KAAE;AAAA,YAAO,SAAS,OAAN,OAAe,OAAN;AAAA,cAAQ,KAAE;AAAA,YAAM;AAAA,cAAC,IAAS,OAAN,OAAe,OAAN;AAAA,gBAAQ,OAAO,KAAK,QAAQ,MAAM,gCAAgC,IAAG;AAAA,cAAE,KAAE;AAAA;AAAA,YAAE,IAAG,EAAE,cAAa;AAAA,cAAI,OAAO,KAAK,QAAQ,MAAM,+BAA8B,EAAC;AAAA,YAAE,MAAM,KAAE,GAAE;AAAA,YAAM,OAAgB,OAAV,UAAY,MAAK,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC,EAAE,MAAG,MAAa,OAAV,UAAY,MAAK,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC,EAAE,MAAG,MAAa,OAAV,UAAY,MAAK,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC,EAAE,MAAG,MAAa,OAAV,UAAY,MAAK,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,EAAE,MAAG,MAAa,OAAV,UAAY,MAAK,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,EAAE,MAAG,MAAa,OAAV,UAAY,MAAK,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,EAAE,MAAG,MAAa,OAAV,UAAY,MAAK,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,EAAE,MAAG,MAAa,OAAV,UAAY,MAAK,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,EAAE,MAAG,MAAa,OAAV,UAAY,MAAK,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,EAAE,MAAG,MAAG,KAAK,QAAQ,MAAM,sBAAsB,oBAAmB;AAAA,UAAC;AAAA,QAAC;AAAA;AAAA,MAAE,KAAE,GAAE;AAAA,IAAO;AAAA,IAAC,KAAK,QAAQ,IAAE,IAAE,IAAE,IAAE,EAAC;AAAA;AAAA,EAAE,OAAO,CAAC,IAAE,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,YAAY;AAAA,IAAE,IAAW,OAAR,SAAmB,OAAR;AAAA,MAAU,IAAW,OAAR,SAA2B,OAAhB,iBAA2B,OAAR;AAAA,QAAU,IAAW,OAAR,SAA2B,OAAhB;AAAA,UAAkB,IAAY,OAAT;AAAA,YAAW,IAAa,OAAV,WAAuB,OAAV;AAAA,cAAY,IAAa,OAAV,WAAuB,OAAV;AAAA,gBAAY,IAAa,OAAV,WAAuB,OAAV;AAAA,kBAAY,IAAa,OAAV;AAAA,oBAAY,IAAa,OAAV;AAAA,sBAAY,IAAa,OAAV;AAAA,wBAAY,IAAa,OAAV;AAAA,0BAAY,IAAa,OAAV;AAAA,4BAAY,IAAa,OAAV;AAAA,8BAAY,IAAa,OAAV;AAAA,gCAAY,IAAa,OAAV;AAAA,kCAAY,IAAa,OAAV;AAAA,oCAAY,IAAe,OAAZ,aAA2B,OAAZ;AAAA,sCAAc,IAAe,OAAZ,aAA2B,OAAZ;AAAA,wCAAc,IAAe,OAAZ,aAA2B,OAAZ;AAAA,0CAAc,IAAe,OAAZ,aAA2B,OAAZ;AAAA,4CAAc,IAAe,OAAZ,aAA2B,OAAZ;AAAA,8CAAc,IAAe,OAAZ,aAA2B,OAAZ;AAAA,gDAAc,IAAe,OAAZ,aAA2B,OAAZ;AAAA,kDAAc,IAAe,OAAZ,aAA2B,OAAZ;AAAA,oDAAc,IAAe,OAAZ,aAA2B,OAAZ;AAAA,sDAAc,IAAG,cAAa,KAAG;AAAA,wDAAC,IAAG,OAAI,GAAE,UAAS;AAAA,0DAAC,OAAO,KAAK,IAAI,WAAW,KAAK,QAAO,IAAE,GAAE,OAAO,UAAU,EAAE,IAAI,IAAI,WAAW,GAAE,MAAM,CAAC;AAAA,wDAAC;AAAA,wDAAC,QAAQ,MAAM,+BAA8B,IAAE,GAAE,SAAS,YAAY,CAAC;AAAA,sDAAC,EAAM;AAAA,gEAAQ,MAAM,yBAAyB,IAAG;AAAA,oDAAM;AAAA,sDAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,EAAE;AAAA,sDAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,MAAI,GAAE,KAAK,KAAI,GAAE,MAAI,GAAE,KAAK,KAAI,GAAE,MAAI,GAAE,KAAK,KAAI,GAAE,MAAI,GAAE,KAAK,KAAI,GAAE,MAAI,GAAE,KAAK,KAAI,GAAE,MAAI,GAAE,KAAK,QAAM,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,MAAI,GAAE,KAAI,GAAE,MAAI,GAAE,KAAI,GAAE,MAAI,GAAE,KAAI,GAAE,MAAI,GAAE,KAAI,GAAE,MAAI,GAAE,KAAI,GAAE,MAAI,GAAE;AAAA;AAAA,kDAAS;AAAA,oDAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,EAAE;AAAA,oDAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,MAAI,GAAE,KAAK,KAAI,GAAE,MAAI,GAAE,KAAK,QAAM,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,MAAI,GAAE,KAAI,GAAE,MAAI,GAAE;AAAA;AAAA,gDAAS;AAAA,kDAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC;AAAA,kDAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,8CAAQ;AAAA,gDAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,EAAE;AAAA,gDAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,MAAI,GAAE,KAAK,KAAI,GAAE,MAAI,GAAE,KAAK,QAAM,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,MAAI,GAAE,KAAI,GAAE,MAAI,GAAE;AAAA;AAAA,4CAAS;AAAA,8CAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC;AAAA,8CAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,0CAAQ;AAAA,4CAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC;AAAA,4CAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,wCAAQ;AAAA,0CAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC;AAAA,0CAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,sCAAQ;AAAA,wCAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC;AAAA,wCAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,oCAAQ;AAAA,sCAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC;AAAA,sCAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,kCAAQ;AAAA,oCAAC,MAAM,KAAE,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC;AAAA,oCAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,gCAAQ;AAAA,kCAAC,MAAM,KAAE,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC;AAAA,kCAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,8BAAQ;AAAA,gCAAC,MAAM,KAAE,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC;AAAA,gCAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,4BAAQ;AAAA,8BAAC,MAAM,KAAE,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC;AAAA,8BAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,0BAAQ;AAAA,4BAAC,MAAM,KAAE,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC;AAAA,4BAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,wBAAQ;AAAA,0BAAC,MAAM,KAAE,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC;AAAA,0BAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,sBAAQ;AAAA,wBAAC,MAAM,KAAE,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC;AAAA,wBAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,oBAAQ;AAAA,sBAAC,MAAM,KAAE,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC;AAAA,sBAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,kBAAQ;AAAA,oBAAC,MAAM,KAAE,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC;AAAA,oBAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,gBAAQ;AAAA,kBAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC;AAAA,kBAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,cAAQ;AAAA,gBAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC;AAAA,gBAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,YAAQ;AAAA,cAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC;AAAA,cAAE,cAAa,OAAI,GAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAG,GAAE,KAAK,OAAK,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE;AAAA;AAAA,UAAS;AAAA,0BAAa,QAAK,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,EAAE,KAAG,GAAE;AAAA,QAAY;AAAA,wBAAa,QAAK,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,EAAE,KAAG,GAAE;AAAA,MAAY;AAAA,sBAAa,QAAK,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,EAAE,KAAG,GAAE;AAAA,IAAY;AAAA,oBAAa,QAAK,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC,EAAE,KAAG,GAAE;AAAA;AAAA,EAAO,UAAU,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,IAAI,IAAE,IAAE;AAAA,IAAE,IAAU,OAAP;AAAA,MAAS,OAAO;AAAA,IAAK,IAAI,KAAE,KAAK,QAAO,KAAE,KAAK;AAAA,IAAS,MAAK,MAAG;AAAA,MAAC,IAAG,cAAa,KAAG;AAAA,QAAC,MAAM,KAAE,GAAE,OAAM,KAAE,cAAa,MAAG,GAAE,eAAe,IAAE,EAAC,IAAE;AAAA,QAAE,IAAI,KAAE;AAAA,QAAE,IAAG,cAAa,MAAG,KAAE,GAAE,QAAgB,OAAO,MAAjB,WAAmB,KAAE,KAAE,QAAQ,MAAM,oCAAmC,EAAC,GAAE,cAAa;AAAA,UAAE,MAAG,KAAE,GAAE,QAAO,KAAE,GAAE;AAAA,QAAW;AAAA,UAAC,MAAM,KAAE,GAAE,YAAY;AAAA,UAAa,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAAe,MAAG,KAAG,IAAE,KAAE,GAAE,YAAY,OAAO,KAAG,QAAQ,MAAM,sBAAsB,GAAE,YAAY,mBAAmB;AAAA;AAAA,MAAE,EAAK;AAAA,QAAC,IAAG,EAAE,cAAa;AAAA,UAAI,OAAO,QAAQ,MAAM,sCAAqC,EAAC,GAAE;AAAA,QAAK;AAAA,UAAC,MAAM,KAAE,GAAE;AAAA,UAAM,IAAG,cAAa,IAAE;AAAA,YAAC,IAAI,KAAE;AAAA,YAAG,WAAU,MAAK,GAAE;AAAA,cAAQ,IAAG,GAAE,SAAO,IAAE;AAAA,gBAAC,MAAG,GAAE,QAAO,KAAE,GAAE,MAAK,KAAE;AAAA,gBAAG;AAAA,cAAK;AAAA,YAAC,IAAG,CAAC;AAAA,cAAE,OAAO,QAAQ,MAAM,wBAAwB,cAAa,GAAE;AAAA,UAAI,EAAM,SAAG,cAAa,IAAE;AAAA,YAAC,MAAM,KAAE,GAAE,YAAY;AAAA,YAAE,IAAa,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAsB,OAAT,UAAqB,OAAT,UAAqB,OAAT,QAAW;AAAA,cAAC,IAAG,GAAE,SAAO,KAAG,GAAE,SAAO,GAAE;AAAA,gBAAC,IAAI,KAAE;AAAA,gBAAI,MAAM,KAAE,CAAC;AAAA,gBAAE,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE,IAAE;AAAA,kBAAC,MAAM,KAAE,GAAE,IAAG,YAAY;AAAA,kBAAE,IAAI,KAAE;AAAA,kBAAE,IAAS,OAAN,OAAe,OAAN;AAAA,oBAAQ,KAAE;AAAA,kBAAO,SAAS,OAAN,OAAe,OAAN;AAAA,oBAAQ,KAAE;AAAA,kBAAO,SAAS,OAAN,OAAe,OAAN;AAAA,oBAAQ,KAAE;AAAA,kBAAM;AAAA,oBAAC,IAAS,OAAN,OAAe,OAAN;AAAA,sBAAQ,OAAO,QAAQ,MAAM,kBAAkB,IAAG,GAAE;AAAA,oBAAK,KAAE;AAAA;AAAA,kBAAE,IAAO,GAAE,WAAN,GAAa;AAAA,oBAAC,IAAG,GAAE,SAAS,GAAG;AAAA,sBAAE,OAAO,KAAK,OAAO,aAAW,KAAE,IAAE,KAAE,KAAG,QAAQ,IAAI,0BAA0B,GAAE,QAAM,IAAI,IAAG,IAAI,aAAa,KAAK,QAAO,KAAE,IAAE,IAAE,CAAC,GAAE,GAAE,YAAY,KAAK,GAAE,IAAI;AAAA,oBAAE,IAAG,GAAE,SAAS,GAAG;AAAA,sBAAE,OAAO,IAAI,IAAG,IAAI,aAAa,KAAK,QAAO,KAAE,IAAE,IAAE,CAAC,GAAE,GAAE,YAAY,KAAK,GAAE,IAAI;AAAA,oBAAE,IAAG,GAAE,SAAS,GAAG;AAAA,sBAAE,OAAO,IAAI,IAAG,IAAI,WAAW,KAAK,QAAO,KAAE,IAAE,IAAE,CAAC,GAAE,GAAE,YAAY,KAAK,GAAE,IAAI;AAAA,oBAAE,IAAG,GAAE,SAAS,GAAG;AAAA,sBAAE,OAAO,IAAI,IAAG,IAAI,WAAW,KAAK,QAAO,KAAE,IAAE,IAAE,CAAC,GAAE,GAAE,YAAY,MAAM,GAAE,IAAI;AAAA,oBAAE,IAAG,GAAE,SAAS,GAAG;AAAA,sBAAE,OAAO,IAAI,IAAG,IAAI,YAAY,KAAK,QAAO,KAAE,IAAE,IAAE,CAAC,GAAE,GAAE,YAAY,KAAK,GAAE,IAAI;AAAA,kBAAC;AAAA,kBAAC,IAAa,OAAV;AAAA,oBAAY,GAAE,KAAK,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC,EAAE,GAAE;AAAA,kBAAO,SAAa,OAAV,SAAY;AAAA,oBAAC,IAAG,KAAE,MAAI,KAAK,OAAO;AAAA,sBAAW,OAAO,QAAQ,IAAI,0BAA0B,GAAE;AAAA,oBAAK,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC;AAAA,oBAAE,GAAE,KAAK,GAAE,GAAE;AAAA,kBAAC,EAAM,SAAa,OAAV;AAAA,oBAAY,GAAE,KAAK,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC,EAAE,GAAE;AAAA,kBAAO,SAAa,OAAV;AAAA,oBAAY,KAAE,KAAI,GAAE,KAAK,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,EAAE,GAAE;AAAA,kBAAO,SAAa,OAAV;AAAA,oBAAY,KAAE,KAAI,GAAE,KAAK,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,EAAE,GAAE;AAAA,kBAAO,SAAa,OAAV;AAAA,oBAAY,KAAE,KAAI,GAAE,KAAK,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,EAAE,GAAE;AAAA,kBAAO,SAAa,OAAV,SAAY;AAAA,oBAAC,KAAE;AAAA,oBAAI,MAAM,KAAE,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC;AAAA,oBAAE,GAAE,KAAK,GAAE,GAAE;AAAA,kBAAC,EAAK;AAAA,oBAAU,OAAV,WAAa,KAAE,KAAI,GAAE,KAAK,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,EAAE,GAAE,KAAa,OAAV,YAAc,KAAE,KAAI,GAAE,KAAK,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,EAAE,GAAE;AAAA,gBAAE;AAAA,gBAAC,OAAW,GAAE,WAAN,IAAa,KAAE,GAAE,YAAY,OAAO,IAAG,IAAM,GAAE,WAAN,IAAa,KAAE,GAAE,YAAY,OAAO,IAAG,IAAM,GAAE,WAAN,IAAa,KAAE,GAAE,YAAY,OAAO,IAAG,IAAE,QAAQ,MAAM,uCAAuC,GAAE,QAAQ,GAAE,IAAI,IAAG,IAAE,IAAE,IAAI;AAAA,cAAC;AAAA,cAAC,OAAO,QAAQ,MAAM,gCAAgC,IAAG,GAAE;AAAA,YAAI;AAAA,YAAC,OAAO,QAAQ,MAAM,sBAAsB,oBAAmB,GAAE;AAAA,UAAI;AAAA,QAAC;AAAA;AAAA,MAAE,KAAE,GAAE;AAAA,IAAO;AAAA,IAAC,MAAM,KAAE,GAAE,YAAY;AAAA,IAAE,OAAc,OAAR,QAAU,IAAI,IAAG,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAU,OAAR,QAAU,IAAI,IAAG,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAU,OAAR,QAAU,IAAI,IAAG,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAY,OAAV,UAAY,IAAI,IAAG,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAY,OAAV,UAAY,IAAI,IAAG,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAY,OAAV,UAAY,IAAI,IAAG,IAAI,aAAa,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAY,OAAV,UAAY,IAAI,IAAG,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAY,OAAV,UAAY,IAAI,IAAG,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAY,OAAV,UAAY,IAAI,IAAG,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAY,OAAV,UAAY,IAAI,IAAG,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAY,OAAV,UAAY,IAAI,IAAG,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAY,OAAV,UAAY,IAAI,IAAG,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,GAAE,IAAE,IAAI,IAAE,cAAa,MAAc,GAAE,SAAb,aAAmC,KAAE,GAAE,YAAZ,QAA8B,OAAJ,YAAW,YAAE,GAAE,UAAlD,QAAwD,IAAI,IAAG,IAAI,YAAY,KAAK,QAAO,IAAE,CAAC,EAAE,IAAG,GAAE,QAAO,IAAI,MAAmB,KAAE,GAAE,YAAZ,QAA8B,OAAJ,YAAW,YAAE,GAAE,UAAlD,QAAwD,IAAI,IAAG,IAAI,WAAW,KAAK,QAAO,IAAE,CAAC,EAAE,IAAG,GAAE,QAAO,IAAI,KAAG,QAAQ,MAAM,wCAA+C,KAAE,GAAE,YAAZ,QAA8B,OAAJ,YAAW,YAAE,GAAE,MAAM,GAAE,QAAM,IAAI,IAAG,KAAK,QAAO,IAAE,IAAE,IAAI;AAAA;AAAA,EAAE,QAAQ,GAAE;AAAA,IAAC,IAAI,KAAE;AAAA,IAAG,IAAG,KAAK,oBAAoB;AAAA,MAAE,IAAW,KAAK,SAAS,OAAO,SAA7B,OAAkC;AAAA,QAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,KAAK,MAAM;AAAA,QAAE,KAAE,IAAI,GAAE;AAAA,QAAK,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,UAAE,MAAG,KAAK,GAAE;AAAA,MAAI,EAAM,SAAW,KAAK,SAAS,OAAO,SAA7B,OAAkC;AAAA,QAAC,MAAM,KAAE,IAAI,WAAW,KAAK,QAAO,KAAK,MAAM;AAAA,QAAE,KAAE,IAAI,GAAE;AAAA,QAAK,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,UAAE,MAAG,KAAK,GAAE;AAAA,MAAI,EAAM,SAAW,KAAK,SAAS,OAAO,SAA7B,OAAkC;AAAA,QAAC,MAAM,KAAE,IAAI,YAAY,KAAK,QAAO,KAAK,MAAM;AAAA,QAAE,KAAE,IAAI,GAAE;AAAA,QAAK,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,UAAE,MAAG,KAAK,GAAE;AAAA,MAAI,EAAM,SAAa,KAAK,SAAS,OAAO,SAA/B,SAAoC;AAAA,QAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,KAAK,MAAM;AAAA,QAAE,KAAE,IAAI,GAAE,OAAO,GAAE;AAAA,QAAM,SAAQ,KAAE,EAAE,KAAE,GAAE,SAAO,GAAE,EAAE;AAAA,UAAE,MAAG,MAAM,GAAE,IAAE,QAAO,GAAE,IAAE,KAAE;AAAA,MAAK,EAAM,SAAa,KAAK,SAAS,OAAO,SAA/B,SAAoC;AAAA,QAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,KAAK,MAAM;AAAA,QAAE,KAAE,IAAI,GAAE,OAAO,GAAE,OAAO,GAAE;AAAA,QAAM,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,MAAG;AAAA,UAAE,MAAG,MAAM,GAAE,QAAO,GAAE,KAAE,OAAO,GAAE,KAAE;AAAA,MAAK,EAAM,SAAa,KAAK,SAAS,OAAO,SAA/B,SAAoC;AAAA,QAAC,MAAM,KAAE,IAAI,aAAa,KAAK,QAAO,KAAK,MAAM;AAAA,QAAE,KAAE,IAAI,GAAE,OAAO,GAAE,OAAO,GAAE,OAAO,GAAE;AAAA,QAAM,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,MAAG;AAAA,UAAE,MAAG,MAAM,GAAE,QAAO,GAAE,KAAE,OAAO,GAAE,KAAE,OAAO,GAAE,KAAE;AAAA,MAAK,EAAM;AAAA,aAAE;AAAA,IAAa;AAAA,WAAK,oBAAoB,KAAE,MAAG,UAAQ,KAAE;AAAA,IAAQ,OAAO;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,IAAE,IAAI,GAAE,KAAK,OAAK,IAAE,KAAK,aAAW,IAAE,KAAK,OAAK;AAAA;AAAA,EAAE,KAAK,GAAE;AAAA,IAAC,OAAO,IAAI,IAAG,KAAK,MAAK,KAAK,UAAS,KAAK,YAAW,KAAK,IAAI;AAAA;AAAA,MAAM,KAAK,GAAE;AAAA,IAAC,IAAI,IAAE;AAAA,IAAE,MAAM,KAAE,KAAK,WAAW;AAAA,IAAK,OAAO,cAAa,SAAO,GAAE,SAAO,KAAU,KAAE,GAAE,QAAZ,QAA0B,OAAJ,YAAM,KAAE,IAAE,cAAa,WAAgB,KAAE,GAAE,WAAZ,QAA6B,OAAJ,YAAM,KAAE;AAAA;AAAA,MAAM,MAAM,GAAE;AAAA,IAAC,IAAI,IAAE;AAAA,IAAE,MAAM,KAAE,KAAK,WAAW;AAAA,IAAK,OAAO,cAAa,SAAO,GAAE,SAAO,KAAU,KAAE,GAAE,QAAZ,QAA0B,OAAJ,YAAM,KAAE,IAAE,cAAa,WAAgB,KAAE,GAAE,YAAZ,QAA8B,OAAJ,YAAM,KAAE;AAAA;AAAA,MAAM,kBAAkB,GAAE;AAAA,IAAC,IAAI,IAAE;AAAA,IAAE,MAAM,KAAE,KAAK,WAAW;AAAA,IAAK,OAAO,cAAa,SAAO,GAAE,SAAO,KAAU,KAAE,GAAE,QAAZ,QAA0B,OAAJ,YAAM,KAAE,IAAE,cAAa,WAAgB,KAAE,GAAE,wBAAZ,QAA0C,OAAJ,YAAM,KAAE;AAAA;AAAA,MAAM,MAAM,GAAE;AAAA,IAAC,IAAI;AAAA,IAAE,OAAO,KAAK,eAAoB,KAAE,KAAK,WAAW,YAA1B,QAA4C,OAAJ,YAAM,KAAE;AAAA;AAAA,MAAiB,WAAW,GAAE;AAAA,IAAC,IAAI;AAAA,IAAE,OAAO,KAAK,eAAoB,KAAE,KAAK,WAAW,iBAA1B,QAAiD,OAAJ,YAAM,KAAE;AAAA;AAAA,MAAM,aAAa,GAAE;AAAA,IAAC,IAAI;AAAA,IAAE,OAAO,KAAK,eAAoB,KAAE,KAAK,WAAW,mBAA1B,QAAmD,OAAJ,YAAM,KAAE;AAAA;AAAA,MAAM,SAAS,GAAE;AAAA,IAAC,IAAI;AAAA,IAAE,OAAO,KAAK,eAAoB,KAAE,KAAK,WAAW,eAA1B,QAA+C,OAAJ,YAAM,KAAE;AAAA;AAAA,EAAK,eAAe,CAAC,IAAE;AAAA,IAAC,IAAG,MAAG,KAAK;AAAA,MAAc,OAAM,CAAC,GAAE,GAAE,CAAC;AAAA,IAAE,MAAM,KAAE,CAAC,KAAK,OAAM,KAAK,QAAO,KAAK,kBAAkB;AAAA,IAAE,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,MAAE,GAAE,MAAG,KAAK,IAAI,GAAE,GAAE,OAAI,EAAC;AAAA,IAAE,OAAO;AAAA;AAAA,MAAM,aAAa,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,QAAO,KAAE,GAAE;AAAA,IAAG,OAAO,KAAE,GAAE,iBAAe,IAAE,GAAE,gBAAc;AAAA;AAAA,MAAM,WAAW,GAAE;AAAA,IAAC,OAAO,KAAK,QAAM,KAAK;AAAA;AAAA,MAAkB,cAAc,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,QAAO,KAAE,GAAE;AAAA,IAAG,OAAM,CAAC,CAAC,MAAG,GAAE;AAAA;AAAA,EAAe,UAAU,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,QAAO,KAAE,GAAE,KAAG,KAAE,KAAK;AAAA,IAAM,IAAG,CAAC,MAAG,MAAG,KAAG,CAAC;AAAA,MAAE,OAAM;AAAA,IAAG,MAAM,KAAE,KAAK,QAAO,KAAE,KAAK,oBAAmB,KAAE,KAAK;AAAA,IAAU,OAAO,KAAE,GAAE,cAAmB,OAAP,OAAS,IAAE,KAAE,GAAE,eAAa,GAAE,gBAAc;AAAA;AAAA,EAAE,QAAQ,CAAC,IAAE,IAAE,KAAE,GAAE,KAAE,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,eAAc,KAAE,KAAK,aAAY,KAAE,KAAK,QAAO,KAAE,KAAK,KAAK;AAAA,IAAG,OAAO,GAAE,IAAI,WAAW,EAAC,GAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,KAAK,MAAM;AAAA;AAAA,EAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,eAAc,KAAE,KAAK,aAAY,KAAE,KAAK,QAAO,KAAE,KAAK,KAAK;AAAA,KAAI,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAA,MAAC,MAAM,KAAE,MAAG,OAAI,OAAI,OAAI,MAAG,KAAE,KAAE,KAAE;AAAA,MAAE,QAAO;AAAA,aAAO;AAAA,UAAU,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAU,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAS,OAAO,KAAK,GAAE,IAAE,IAAE,SAAQ,GAAE,EAAC;AAAA,aAAM;AAAA,UAAS,OAAO,KAAK,GAAE,IAAE,IAAE,SAAQ,GAAE,EAAC;AAAA,aAAM;AAAA,UAAW,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAW,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAU,OAAO,KAAK,GAAE,IAAE,IAAE,SAAQ,GAAE,EAAC;AAAA,aAAM;AAAA,UAAU,OAAO,KAAK,GAAE,IAAE,IAAE,SAAQ,GAAE,EAAC;AAAA,aAAM;AAAA,aAAsB;AAAA,aAAiB;AAAA,aAAsB;AAAA,UAAa,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAa,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAY,OAAO,KAAK,GAAE,IAAE,IAAE,SAAQ,GAAE,EAAC;AAAA,aAAM;AAAA,UAAY,OAAO,KAAK,GAAE,IAAE,IAAE,SAAQ,GAAE,EAAC;AAAA,aAAM;AAAA,UAAU,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAU,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAW,OAAO,KAAK,GAAE,IAAE,IAAE,WAAU,GAAE,EAAC;AAAA,aAAM;AAAA,UAAW,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAW,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAY,OAAO,KAAK,GAAE,IAAE,IAAE,WAAU,GAAE,EAAC;AAAA,aAAM;AAAA,UAAa,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAa,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAc,OAAO,KAAK,GAAE,IAAE,IAAE,WAAU,GAAE,EAAC;AAAA,aAAM;AAAA,UAAU,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAU,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,aAAmB;AAAA,aAAkB;AAAA,aAA2B;AAAA,aAAmB;AAAA,aAA4B;AAAA,UAAW,OAAO,KAAK,GAAE,IAAE,IAAE,WAAU,GAAE,EAAC;AAAA,aAAM;AAAA,UAAW,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAW,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAY,OAAO,KAAK,GAAE,IAAE,IAAE,WAAU,GAAE,EAAC;AAAA,aAAM;AAAA,UAAa,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAa,OAAO,KAAK,GAAE,IAAE,IAAE,UAAS,GAAE,EAAC;AAAA,aAAM;AAAA,UAAc,OAAO,KAAK,GAAE,IAAE,IAAE,WAAU,GAAE,EAAC;AAAA,aAAM;AAAA,UAAgB,QAAQ,MAAM,+CAA+C;AAAA;AAAA,OAAI,IAAI,WAAW,EAAC,GAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,KAAK,QAAO,EAAC;AAAA;AAAE;AAAA,CAAE,QAAG;AAAA,EAAC,GAAE,GAAE,QAAM,KAAG,SAAQ,GAAE,GAAE,UAAQ,KAAG,WAAU,GAAE,GAAE,WAAS,KAAG;AAAA,GAAa,OAAI,KAAE,CAAC,EAAE;AAAA;AAAE,MAAM,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,KAAK,OAAK,IAAE,KAAK,OAAK,IAAE,KAAK,OAAK;AAAA;AAAA,EAAE,QAAQ,GAAE;AAAA,IAAC,OAAO,KAAK;AAAA;AAAK;AAAA;AAAC,MAAM,IAAE;AAAC;AAAC,KAAE,KAAG,IAAG,OAAK,IAAI,IAAG,IAAG,GAAE,UAAS,EAAE,GAAE,IAAG,MAAI,IAAI,IAAG,OAAM,GAAE,OAAM,EAAE,GAAE,IAAG,WAAS,EAAC,KAAI,IAAI,IAAG,OAAM,GAAE,UAAS,KAAK,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,UAAS,MAAM,GAAE,IAAG,IAAI,IAAG,MAAK,GAAE,UAAS,IAAI,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,UAAS,MAAM,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,UAAS,KAAK,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,UAAS,KAAK,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,UAAS,QAAQ,GAAE,IAAG,IAAI,IAAG,MAAK,GAAE,UAAS,IAAI,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,UAAS,KAAK,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,UAAS,KAAK,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,UAAS,KAAK,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,UAAS,UAAU,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,UAAS,YAAY,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,UAAS,SAAS,GAAE,IAAG,IAAI,IAAG,MAAK,GAAE,UAAS,IAAI,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,UAAS,KAAK,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,UAAS,KAAK,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,UAAS,QAAQ,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,UAAS,OAAO,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,UAAS,KAAK,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,UAAS,MAAM,EAAC,GAAE,IAAG,WAAS,EAAC,OAAM,IAAI,IAAG,SAAQ,GAAE,SAAQ,OAAO,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,SAAQ,MAAM,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,SAAQ,KAAK,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,SAAQ,KAAK,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,SAAQ,KAAK,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,oBAAmB,IAAI,IAAG,sBAAqB,GAAE,SAAQ,oBAAoB,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,kBAAiB,IAAI,IAAG,oBAAmB,GAAE,SAAQ,kBAAkB,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,cAAa,IAAI,IAAG,gBAAe,GAAE,SAAQ,cAAc,GAAE,oBAAmB,IAAI,IAAG,sBAAqB,GAAE,SAAQ,oBAAoB,GAAE,yBAAwB,IAAI,IAAG,2BAA0B,GAAE,SAAQ,yBAAyB,GAAE,oBAAmB,IAAI,IAAG,sBAAqB,GAAE,SAAQ,oBAAoB,GAAE,oBAAmB,IAAI,IAAG,sBAAqB,GAAE,SAAQ,oBAAoB,GAAE,0BAAyB,IAAI,IAAG,4BAA2B,GAAE,SAAQ,0BAA0B,GAAE,oBAAmB,IAAI,IAAG,sBAAqB,GAAE,SAAQ,oBAAoB,GAAE,kBAAiB,IAAI,IAAG,oBAAmB,GAAE,SAAQ,kBAAkB,GAAE,wBAAuB,IAAI,IAAG,0BAAyB,GAAE,SAAQ,wBAAwB,GAAE,oBAAmB,IAAI,IAAG,sBAAqB,GAAE,SAAQ,oBAAoB,GAAE,0BAAyB,IAAI,IAAG,4BAA2B,GAAE,SAAQ,0BAA0B,GAAE,+BAA8B,IAAI,IAAG,iCAAgC,GAAE,SAAQ,+BAA+B,GAAE,kBAAiB,IAAI,IAAG,oBAAmB,GAAE,SAAQ,kBAAkB,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,SAAQ,KAAK,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,SAAQ,MAAM,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,SAAQ,MAAM,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,SAAQ,MAAM,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,SAAQ,OAAO,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,SAAQ,OAAO,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,SAAQ,MAAM,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,SAAQ,MAAM,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,SAAQ,aAAa,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,SAAQ,OAAO,GAAE,IAAG,IAAI,IAAG,MAAK,GAAE,SAAQ,IAAI,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,SAAQ,KAAK,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,IAAG,IAAI,IAAG,MAAK,GAAE,SAAQ,IAAI,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,SAAQ,KAAK,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,SAAQ,OAAO,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,SAAQ,MAAM,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,SAAQ,OAAO,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,SAAQ,MAAM,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,SAAQ,MAAM,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,SAAQ,OAAO,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,SAAQ,MAAM,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,SAAQ,KAAK,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,SAAQ,WAAW,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,SAAQ,OAAO,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,SAAQ,QAAQ,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,SAAQ,SAAS,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,SAAQ,WAAW,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,iBAAgB,IAAI,IAAG,mBAAkB,GAAE,SAAQ,iBAAiB,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,SAAQ,WAAW,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,SAAQ,WAAW,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,iBAAgB,IAAI,IAAG,mBAAkB,GAAE,SAAQ,iBAAiB,GAAE,cAAa,IAAI,IAAG,gBAAe,GAAE,SAAQ,cAAc,GAAE,cAAa,IAAI,IAAG,gBAAe,GAAE,SAAQ,cAAc,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,SAAQ,UAAU,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,SAAQ,WAAW,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,SAAQ,aAAa,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,SAAQ,YAAY,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,SAAQ,aAAa,GAAE,eAAc,IAAI,IAAG,iBAAgB,GAAE,SAAQ,eAAe,EAAC,GAAE,IAAG,SAAO,EAAC,uBAAsB,IAAI,IAAG,yBAAwB,GAAE,OAAM,kHAAkH,GAAE,mBAAkB,IAAI,IAAG,qBAAoB,GAAE,OAAM,iIAAiI,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,OAAM,sCAAsC,GAAE,cAAa,IAAI,IAAG,gBAAe,GAAE,OAAM,iCAAiC,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,OAAM,0DAA0D,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,OAAM,wBAAwB,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,OAAM,GAAG,GAAE,SAAQ,IAAI,IAAG,WAAU,GAAE,OAAM,IAAI,GAAE,OAAM,IAAI,IAAG,UAAS,GAAE,OAAM,IAAI,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,OAAM,GAAG,GAAE,eAAc,IAAI,IAAG,iBAAgB,GAAE,OAAM,GAAG,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,OAAM,GAAG,GAAE,cAAa,IAAI,IAAG,gBAAe,GAAE,OAAM,GAAG,GAAE,eAAc,IAAI,IAAG,iBAAgB,GAAE,OAAM,GAAG,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,OAAM,GAAG,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,OAAM,GAAG,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,OAAM,GAAG,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,OAAM,GAAG,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,OAAM,GAAG,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,OAAM,IAAI,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,OAAM,IAAI,GAAE,cAAa,IAAI,IAAG,gBAAe,GAAE,OAAM,GAAG,GAAE,oBAAmB,IAAI,IAAG,sBAAqB,GAAE,OAAM,IAAI,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,OAAM,IAAI,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,OAAM,GAAG,GAAE,iBAAgB,IAAI,IAAG,mBAAkB,GAAE,OAAM,IAAI,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,OAAM,IAAI,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,OAAM,GAAG,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,OAAM,GAAG,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,OAAM,IAAI,GAAE,QAAO,IAAI,IAAG,UAAS,GAAE,OAAM,GAAG,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,OAAM,GAAG,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,OAAM,IAAI,GAAE,IAAG,IAAI,IAAG,MAAK,GAAE,OAAM,GAAG,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,OAAM,IAAI,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,OAAM,GAAG,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,OAAM,GAAG,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,OAAM,GAAG,GAAE,MAAK,IAAI,IAAG,QAAO,GAAE,OAAM,GAAG,GAAE,OAAM,IAAI,IAAG,SAAQ,GAAE,OAAM,GAAG,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,OAAM,GAAG,GAAE,KAAI,IAAI,IAAG,OAAM,GAAE,OAAM,GAAG,GAAE,YAAW,IAAI,IAAG,cAAa,GAAE,OAAM,IAAI,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,OAAM,IAAI,GAAE,aAAY,IAAI,IAAG,eAAc,GAAE,OAAM,IAAI,GAAE,gBAAe,IAAI,IAAG,kBAAiB,GAAE,OAAM,IAAI,GAAE,cAAa,IAAI,IAAG,gBAAe,GAAE,OAAM,IAAI,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,OAAM,IAAI,GAAE,UAAS,IAAI,IAAG,YAAW,GAAE,OAAM,IAAI,GAAE,WAAU,IAAI,IAAG,aAAY,GAAE,OAAM,IAAI,GAAE,mBAAkB,IAAI,IAAG,qBAAoB,GAAE,OAAM,KAAK,GAAE,kBAAiB,IAAI,IAAG,oBAAmB,GAAE,OAAM,KAAK,EAAC,GAAE,IAAG,eAAa,EAAC,KAAI,GAAE,OAAO,MAAK,KAAI,GAAE,OAAO,YAAW,KAAI,GAAE,OAAO,aAAY,KAAI,GAAE,OAAO,OAAM,KAAI,GAAE,OAAO,OAAM,KAAI,GAAE,OAAO,YAAW,KAAI,GAAE,OAAO,aAAY,KAAI,GAAE,OAAO,UAAS,GAAE,IAAG,gBAAc,EAAC,KAAI,GAAE,OAAO,KAAI,MAAK,GAAE,OAAO,SAAQ,MAAK,GAAE,OAAO,OAAM,KAAI,GAAE,OAAO,eAAc,KAAI,GAAE,OAAO,MAAK,KAAI,GAAE,OAAO,cAAa,KAAI,GAAE,OAAO,eAAc,KAAI,GAAE,OAAO,OAAM,MAAK,GAAE,OAAO,aAAY,MAAK,GAAE,OAAO,WAAU,KAAI,GAAE,OAAO,cAAa,MAAK,GAAE,OAAO,oBAAmB,MAAK,GAAE,OAAO,aAAY,KAAI,GAAE,OAAO,WAAU,MAAK,GAAE,OAAO,iBAAgB,MAAK,GAAE,OAAO,YAAW,KAAI,GAAE,OAAO,QAAO,KAAI,GAAE,OAAO,OAAM,MAAK,GAAE,OAAO,aAAY,KAAI,GAAE,OAAO,QAAO,KAAI,GAAE,OAAO,MAAK,MAAK,GAAE,OAAO,WAAU,KAAI,GAAE,OAAO,IAAG,MAAK,GAAE,OAAO,OAAM,KAAI,GAAE,OAAO,MAAK,KAAI,GAAE,OAAO,OAAM,GAAE,GAAE,OAAO,YAAW,KAAI,GAAE,OAAO,KAAI,MAAK,GAAE,OAAO,YAAW,MAAK,GAAE,OAAO,aAAY,MAAK,GAAE,OAAO,aAAY,MAAK,GAAE,OAAO,gBAAe,MAAK,GAAE,OAAO,cAAa,MAAK,GAAE,OAAO,WAAU,MAAK,GAAE,OAAO,UAAS,MAAK,GAAE,OAAO,WAAU,OAAM,GAAE,OAAO,mBAAkB,OAAM,GAAE,OAAO,iBAAgB,GAAE,IAAG,cAAY,EAAC,uBAAsB,GAAE,OAAO,uBAAsB,mBAAkB,GAAE,OAAO,mBAAkB,aAAY,GAAE,OAAO,aAAY,cAAa,GAAE,OAAO,cAAa,OAAM,GAAE,OAAO,MAAK,GAAE,IAAG,gBAAc,CAAC,GAAE,SAAS,UAAS,GAAE,SAAS,SAAQ,GAAE,SAAS,WAAU,GAAE,SAAS,SAAQ,GAAE,SAAS,OAAO,GAAE,IAAG,cAAY,CAAC,GAAE,SAAS,MAAK,GAAE,SAAS,OAAM,GAAE,SAAS,UAAU,GAAE,IAAG,eAAa,CAAC,GAAE,SAAS,SAAQ,GAAE,SAAS,kBAAkB,GAAE,IAAG,uBAAqB,CAAC,GAAE,SAAS,YAAW,GAAE,SAAS,YAAW,GAAE,SAAS,kBAAiB,GAAE,SAAS,YAAW,GAAE,SAAS,cAAa,GAAE,SAAS,kBAAkB,GAAE,IAAG,4BAA0B,CAAC,GAAE,SAAS,uBAAuB,GAAE,IAAG,uBAAqB,CAAC,GAAE,SAAS,oBAAmB,GAAE,SAAS,oBAAmB,GAAE,SAAS,0BAAyB,GAAE,SAAS,kBAAkB,GAAE,IAAG,qBAAmB,CAAC,GAAE,SAAS,kBAAiB,GAAE,SAAS,wBAAuB,GAAE,SAAS,oBAAmB,GAAE,SAAS,0BAAyB,GAAE,SAAS,6BAA6B,GAAE,IAAG,wBAAsB,CAAC,GAAE,SAAS,gBAAgB,GAAE,IAAG,mBAAiB,CAAC,GAAG,GAAE,sBAAqB,GAAG,GAAE,2BAA0B,GAAG,GAAE,sBAAqB,GAAG,GAAE,oBAAmB,GAAG,GAAE,qBAAqB,GAAE,IAAG,eAAa,CAAC,GAAE,SAAS,SAAQ,GAAE,SAAS,SAAQ,GAAE,SAAS,QAAO,GAAE,SAAS,QAAO,GAAE,SAAS,SAAQ,GAAE,SAAS,SAAQ,GAAE,SAAS,UAAS,GAAE,SAAS,UAAS,GAAE,SAAS,UAAS,GAAE,SAAS,SAAQ,GAAE,SAAS,SAAQ,GAAE,SAAS,SAAQ,GAAE,SAAS,SAAQ,GAAE,SAAS,UAAS,GAAE,SAAS,UAAS,GAAE,SAAS,UAAS,GAAE,SAAS,WAAU,GAAE,SAAS,YAAW,GAAE,SAAS,iBAAgB,GAAE,SAAS,YAAW,GAAE,SAAS,WAAU,GAAE,SAAS,WAAU,GAAE,SAAS,YAAW,GAAE,SAAS,iBAAgB,GAAE,SAAS,cAAa,GAAE,SAAS,cAAa,GAAE,SAAS,UAAS,GAAE,SAAS,UAAS,GAAE,SAAS,WAAU,GAAE,SAAS,YAAW,GAAE,SAAS,YAAW,GAAE,SAAS,aAAY,GAAE,SAAS,YAAW,GAAE,SAAS,YAAW,GAAE,SAAS,WAAW,GAAE,IAAG,gBAAc,CAAC,GAAE,OAAO,aAAY,GAAE,OAAO,cAAa,GAAE,OAAO,uBAAsB,GAAE,OAAO,mBAAkB,GAAE,SAAS,MAAK,GAAE,SAAS,KAAK,GAAE,IAAG,mBAAiB,CAAC,GAAE,OAAO,OAAM,GAAE,OAAO,aAAY,GAAE,OAAO,cAAa,GAAE,OAAO,uBAAsB,GAAE,OAAO,mBAAkB,GAAE,OAAO,IAAI,GAAE,IAAG,2BAAyB,CAAC,GAAE,OAAO,aAAY,GAAE,OAAO,cAAa,GAAE,OAAO,KAAK,GAAE,IAAG,iBAAe,CAAC,GAAE,SAAS,MAAK,GAAE,SAAS,MAAK,GAAE,SAAS,MAAK,GAAE,SAAS,QAAO,GAAE,SAAS,QAAO,GAAE,SAAS,QAAO,GAAE,SAAS,QAAO,GAAE,SAAS,QAAO,GAAE,SAAS,QAAO,GAAE,SAAS,QAAO,GAAE,SAAS,QAAO,GAAE,SAAS,QAAO,GAAE,SAAS,QAAO,GAAE,SAAS,SAAQ,GAAG,GAAE,gBAAgB,GAAE,IAAG,iBAAe,CAAC,GAAE,OAAO,OAAM,GAAE,SAAS,OAAM,GAAE,SAAS,UAAU,GAAE,IAAG,uBAAqB,CAAC,GAAE,OAAO,OAAM,GAAE,OAAO,YAAW,GAAE,OAAO,aAAY,GAAE,OAAO,aAAY,GAAE,OAAO,gBAAe,GAAE,OAAO,cAAa,GAAE,OAAO,WAAU,GAAE,OAAO,UAAS,GAAE,OAAO,WAAU,GAAE,OAAO,mBAAkB,GAAE,OAAO,gBAAgB,GAAE,IAAG,sBAAoB,CAAC,GAAE,OAAO,WAAU,GAAE,OAAO,WAAW;AAAA;AAAE,MAAM,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,KAAK,OAAK,IAAE,KAAK,SAAO,IAAE,KAAK,OAAK,IAAE,KAAK,QAAM,IAAE,KAAK,MAAI;AAAA;AAAA,EAAE,QAAQ,GAAE;AAAA,IAAC,OAAO,KAAK;AAAA;AAAA,EAAO,cAAc,GAAE;AAAA,IAAC,OAAU,IAAG,eAAe,QAAQ,KAAK,IAAI,KAAvC;AAAA;AAAA,EAAyC,WAAW,GAAE;AAAA,IAAC,OAAO,KAAK,QAAM,IAAG,SAAS;AAAA;AAAA,EAAM,qBAAqB,GAAE;AAAA,IAAC,OAAO,KAAK,YAAY,KAAG,KAAK,eAAe;AAAA;AAAE;AAAA;AAAC,MAAM,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,KAAK,UAAQ,CAAC,GAAE,KAAK,SAAO,GAAE,KAAK,WAAS,GAAE,KAAK,QAAM,GAAE,KAAK,UAAc,MAAN,OAAQ,KAAE;AAAA;AAAA,EAAG,UAAU,GAAE;AAAA,IAAC,MAAK,CAAC,KAAK,SAAS;AAAA,MAAG,IAAG,KAAK,SAAO,KAAK,UAAS,CAAC,KAAK,UAAU;AAAA,QAAE,MAAK,0BAA0B,KAAK;AAAA,IAAQ,OAAO,KAAK,QAAQ,KAAK,IAAI,IAAG,IAAG,KAAI,IAAG,KAAK,OAAM,KAAK,UAAS,KAAK,QAAQ,CAAC,GAAE,KAAK;AAAA;AAAA,EAAQ,SAAS,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,SAAS;AAAA,IAAE,IAAS,MAAN;AAAA;AAAA,MAAQ,OAAO,KAAK,SAAQ;AAAA,IAAG,IAAG,KAAK,cAAc,EAAC;AAAA,MAAE,OAAM;AAAA,IAAG,IAAQ,MAAL,KAAO;AAAA,MAAC,IAAQ,KAAK,WAAW,KAArB,KAAuB;AAAA,QAAC,MAAW,MAAN;AAAA,KAAS;AAAA,UAAC,IAAG,KAAK,SAAS;AAAA,YAAE,OAAM;AAAA,UAAG,KAAE,KAAK,SAAS;AAAA,QAAC;AAAA,QAAC,OAAO,KAAK,SAAQ;AAAA,MAAE;AAAA,MAAC,IAAQ,KAAK,WAAW,KAArB,KAAuB;AAAA,QAAC,KAAK,SAAS;AAAA,QAAE,IAAI,KAAE;AAAA,QAAE,MAAK,KAAE,KAAG;AAAA,UAAC,IAAG,KAAK,SAAS;AAAA,YAAE,OAAM;AAAA,UAAG,IAAG,KAAE,KAAK,SAAS,GAAQ,MAAN;AAAA;AAAA,YAAQ,KAAK;AAAA,UAAa,SAAQ,MAAL,KAAO;AAAA,YAAC,IAAQ,KAAK,WAAW,KAArB,QAAyB,KAAK,SAAS,GAAE,MAAO,MAAH;AAAA,cAAM,OAAM;AAAA,UAAE,EAAK;AAAA,YAAK,MAAL,OAAa,KAAK,WAAW,KAArB,QAAyB,KAAK,SAAS,GAAE;AAAA,QAAI;AAAA,QAAC,OAAM;AAAA,MAAE;AAAA,IAAC;AAAA,IAAC,MAAM,KAAE,IAAG,aAAa;AAAA,IAAG,IAAG;AAAA,MAAE,OAAO,KAAK,UAAU,EAAC,GAAE;AAAA,IAAG,IAAI,KAAE,IAAG;AAAA,IAAK,MAAM,KAAE,KAAK,SAAS,EAAC,GAAE,KAAQ,OAAN;AAAA,IAAQ,IAAG,KAAK,gBAAgB,EAAC,GAAE;AAAA,MAAC,IAAI,KAAE,KAAK,WAAW;AAAA,MAAE,MAAK,KAAK,gBAAgB,EAAC;AAAA,QAAG,MAAG,KAAK,SAAS,GAAE,KAAE,KAAK,WAAW;AAAA,IAAC;AAAA,IAAC,IAAG,IAAE;AAAA,MAAC,MAAM,KAAE,IAAG,SAAS;AAAA,MAAG,IAAG;AAAA,QAAE,OAAO,KAAK,UAAU,EAAC,GAAE;AAAA,IAAE;AAAA,IAAC,IAAG,MAAG;AAAA,MAAE,OAAO,KAAK,UAAU,IAAG,OAAO,KAAK,GAAE;AAAA,IAAG,UAAO;AAAA,MAAC,IAAI,KAAE,KAAK,UAAU,EAAC;AAAA,MAAE,MAAM,KAAE,KAAK,WAAW;AAAA,MAAE,IAAQ,MAAL,OAAQ,KAAK,QAAQ,SAAO,GAAE;AAAA,QAAC,IAAQ,MAAL;AAAA,UAAO,OAAO,KAAK,YAAW,MAAG,IAAE,KAAK,UAAU,IAAG,OAAO,WAAW,GAAE;AAAA,QAAG,IAAQ,MAAL;AAAA,UAAO,OAAO,KAAK,YAAW,MAAG,IAAE,KAAK,UAAU,IAAG,OAAO,WAAW,GAAE;AAAA,QAAG,MAAM,KAAE,KAAK,QAAQ,SAAO;AAAA,QAAE,KAAQ,IAAG,iBAAiB,QAAQ,KAAK,QAAQ,IAAG,IAAI,KAApD,MAAuD,KAAK,QAAQ,IAAG,QAAM,IAAG,OAAO,gBAAmB,MAAL;AAAA,UAAO,OAAO,KAAK,UAAU,EAAC,GAAE;AAAA,MAAE;AAAA,MAAC,IAAQ,MAAL,QAAc,MAAL,OAAa,MAAL,MAAQ;AAAA,QAAC,IAAI,KAAE,OAAG,KAAE,KAAK,QAAQ,SAAO;AAAA,QAAE,SAAQ,KAAE,EAAE,KAAE,KAAG,MAAG,KAAQ,IAAG,qBAAqB,QAAQ,KAAK,QAAQ,IAAG,IAAI,MAAzD,IAA2D,EAAE,IAAE,EAAE;AAAA,UAAE,IAAG,KAAK,QAAQ,IAAG,SAAO,IAAG,OAAO,WAAU;AAAA,YAAC,KAAE,KAAG,KAAK,QAAQ,KAAE,GAAG,sBAAsB,MAAI,KAAE;AAAA,YAAI;AAAA,UAAK;AAAA,QAAC,IAAG;AAAA,UAAE,OAAO,KAAK,UAAU,EAAC,GAAE;AAAA,MAAE;AAAA,MAAC,IAAG,OAAI,IAAG,MAAK;AAAA,QAAC,IAAI,KAAE,IAAE,KAAE;AAAA,QAAE,MAAM,KAAE;AAAA,QAAE,SAAQ,KAAE,EAAE,KAAE,IAAE,EAAE;AAAA,UAAE,IAAG,MAAG,KAAK,WAAW,EAAC,GAAE,KAAE,KAAK,UAAU,EAAC,GAAE,OAAI,IAAG,MAAK;AAAA,YAAC,KAAE;AAAA,YAAE;AAAA,UAAK;AAAA,QAAC,IAAG,OAAI,IAAG;AAAA,UAAK,OAAO,OAAI,IAAG,SAAO,KAAK,YAAW,KAAK,UAAU,EAAC,GAAE;AAAA,QAAI,KAAE,IAAE,KAAK,YAAU,KAAE;AAAA,MAAC;AAAA,MAAC,IAAG,KAAE,IAAE,KAAK,SAAS;AAAA,QAAE;AAAA,MAAM,MAAG,KAAK,SAAS;AAAA,IAAC;AAAA,IAAC,OAAO,OAAI,IAAG,SAAO,KAAK,UAAU,EAAC,GAAE;AAAA;AAAA,EAAI,SAAS,CAAC,IAAE;AAAA,IAAC,WAAU,MAAK,IAAG,aAAY;AAAA,MAAC,MAAM,KAAE,IAAG,YAAY;AAAA,MAAG,IAAG,KAAK,OAAO,IAAE,GAAE,IAAI;AAAA,QAAE,OAAO;AAAA,IAAC;AAAA,IAAC,MAAM,KAAE,IAAG,cAAc;AAAA,IAAG,OAAO,MAAG,IAAG;AAAA;AAAA,EAAK,MAAM,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,KAAK,EAAC;AAAA,IAAE,OAAO,MAAM,GAAE,SAAL,KAAY,GAAE,MAAI;AAAA;AAAA,EAAE,QAAQ,GAAE;AAAA,IAAC,OAAO,KAAK,YAAU,KAAK,QAAQ;AAAA;AAAA,EAAO,QAAQ,CAAC,IAAE;AAAA,IAAC,OAAM,CAAC,KAAK,WAAW,EAAC,KAAG,CAAC,KAAK,cAAc,EAAC,KAAS,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAe,OAAN,OAAgB,OAAP,OAAgB,OAAN,OAAe,OAAN,OAAgB,OAAP,QAAiB,OAAP;AAAA,KAAiB,OAAP,QAAiB,OAAP,QAAiB,OAAP;AAAA;AAAA,EAAS,UAAU,CAAC,IAAE;AAAA,IAAC,OAAO,MAAG,OAAK,MAAG;AAAA;AAAA,EAAI,eAAe,CAAC,IAAE;AAAA,IAAC,OAAO,KAAK,SAAS,EAAC,KAAG,KAAK,WAAW,EAAC,KAAS,OAAN;AAAA;AAAA,EAAQ,aAAa,CAAC,IAAE;AAAA,IAAC,OAAW,MAAL,OAAc,MAAN,QAAe,MAAN;AAAA;AAAA,EAAQ,QAAQ,CAAC,KAAE,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,QAAQ,KAAK;AAAA,IAAU,OAAO,KAAE,MAAG,GAAE,MAAI,KAAK,YAAU,IAAE;AAAA;AAAA,EAAE,UAAU,CAAC,KAAE,GAAE;AAAA,IAAC,OAAO,KAAE,MAAG,GAAE,KAAK,WAAS,MAAG,KAAK,QAAQ,SAAO,SAAK,KAAK,QAAQ,KAAK,WAAS;AAAA;AAAA,EAAG,SAAS,CAAC,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,QAAQ,UAAU,KAAK,QAAO,KAAK,QAAQ;AAAA,IAAE,KAAK,QAAQ,KAAK,IAAI,IAAG,IAAE,IAAE,KAAK,OAAM,KAAK,QAAO,KAAK,QAAQ,CAAC;AAAA;AAAE;AAAC,SAAS,GAAE,CAAC,IAAE;AAAA,EAAC,OAAO,MAAM,QAAQ,EAAC,MAAU,MAAN,OAAa,YAAE,GAAE,mBAAkB;AAAA;AAAY,IAAM,MAAG,IAAI,aAAa,CAAC;AAA3B,IAA6B,MAAG,IAAI,YAAY,IAAG,MAAM;AAAzD,IAA2D,MAAG,IAAI,YAAY,IAAG,MAAM;AAAvF,IAAyF,MAAG,IAAI,WAAW,CAAC;AAA5G,IAA8G,MAAG,IAAI,aAAa,IAAG,MAAM;AAA3I,IAA6I,MAAG,IAAI,YAAY,IAAG,MAAM;AAAzK,IAA2K,MAAG,IAAI,YAAY,CAAC;AAA/L,IAAiM,MAAG,IAAI,aAAa,IAAG,MAAM;AAA9N,IAAgO,MAAG,IAAI,WAAW,IAAG,MAAM;AAAE,SAAS,GAAE,CAAC,IAAE,IAAE,IAAE;AAAA,EAAC,IAAG,OAAI;AAAA,IAAE,OAAO;AAAA,EAAE,IAAW,OAAR,OAAU;AAAA,IAAC,IAAW,OAAR,SAAmB,OAAR;AAAA,MAAU,OAAO,IAAG,KAAG,IAAE,IAAG;AAAA,IAAG,IAAW,OAAR;AAAA,MAAU,OAAO,IAAG,KAAG,IAAE,IAAG;AAAA,EAAE,EAAM,SAAW,OAAR,SAAmB,OAAR,OAAU;AAAA,IAAC,IAAW,OAAR;AAAA,MAAU,OAAO,IAAG,KAAG,IAAE,IAAG;AAAA,IAAG,IAAW,OAAR;AAAA,MAAU,OAAO,IAAG,KAAG,IAAE,IAAG;AAAA,EAAE,EAAM,SAAW,OAAR,OAAU;AAAA,IAAC,IAAW,OAAR;AAAA,MAAU,OAAO,IAAG,KAAG,IAAE,IAAG;AAAA,IAAG,IAAW,OAAR,SAAmB,OAAR;AAAA,MAAU,OAAO,IAAG,KAAG,IAAE,IAAG;AAAA,EAAE;AAAA,EAAC,OAAO,QAAQ,MAAM,yBAAyB,SAAQ,IAAG,GAAE;AAAA;AAAA;AAAE,MAAM,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,KAAK,YAAU,MAAK,KAAK,QAAM,OAAG,KAAK,OAAK,MAAK,KAAK,OAAK;AAAA;AAAE;AAAA;AAAC,MAAM,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,KAAK,QAAM,IAAE,KAAK,OAAK;AAAA;AAAE;AAAA;AAAC,MAAM,IAAE;AAAA,EAAC,WAAW,GAAE;AAAA,IAAC,KAAK,WAAS,CAAC,GAAE,KAAK,UAAQ,CAAC,GAAE,KAAK,WAAS,CAAC,GAAE,KAAK,WAAS,CAAC,GAAE,KAAK,UAAQ,CAAC,GAAE,KAAK,YAAU,CAAC,GAAE,KAAK,UAAQ,CAAC,GAAE,KAAK,QAAM,IAAI,IAAE,KAAK,YAAU,CAAC,GAAE,KAAK,SAAO,IAAI,KAAI,KAAK,aAAW,IAAI;AAAA;AAAA,EAAI,iBAAiB,CAAC,IAAE;AAAA,IAAC,OAA4B,GAAE,QAAxB,wBAAoD,GAAE,QAAxB,wBAA0D,GAAE,QAA9B,8BAA0D,GAAE,QAAxB;AAAA;AAAA,EAA6B,SAAS,CAAC,IAAE;AAAA,IAAC,WAAU,MAAK;AAAA,MAAE,cAAa,MAAG,KAAK,WAAW,IAAI,GAAE,MAAK,IAAI,IAAG,EAAC,CAAC;AAAA,IAAE,WAAU,MAAK;AAAA,MAAE,IAAG,cAAa,KAAG;AAAA,QAAC,MAAM,KAAE,KAAK,YAAY,IAAE,IAAI;AAAA,QAAE,cAAa,MAAG,KAAK,QAAQ,KAAK,EAAC;AAAA,MAAC;AAAA,IAAC,WAAU,MAAK;AAAA,MAAE,IAAG,cAAa;AAAA,QAAG,KAAK,QAAQ,KAAK,KAAK,cAAc,EAAC,CAAC;AAAA,MAAO,SAAG,cAAa,IAAE;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,KAAK,iBAAiB,GAAE,YAAW,MAAK,CAAC,GAAE,KAAQ,GAAE,QAAR,OAAa,KAAK,YAAY,GAAE,MAAK,GAAE,UAAU,IAAE;AAAA,QAAK,KAAK,UAAU,KAAK,IAAI,GAAE,GAAE,MAAK,IAAE,GAAE,YAAW,EAAC,CAAC;AAAA,MAAC,EAAM,SAAG,KAAK,cAAc,EAAC,GAAE;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,KAAK,iBAAiB,GAAE,YAAW,SAAQ,CAAC,GAAE,KAAE,KAAK,iBAAiB,GAAE,YAAW,WAAU,CAAC,GAAE,KAAE,KAAK,YAAY,GAAE,MAAK,GAAE,UAAU,GAAE,KAAE,IAAI,GAAE,GAAE,MAAK,IAAE,IAAE,IAAE,GAAE,YAAW,GAAE,SAAQ,GAAE,MAAM;AAAA,QAAE,GAAE,WAAS,GAAE,SAAO,SAAQ,KAAK,SAAS,KAAK,EAAC;AAAA,MAAC,EAAM,SAAG,KAAK,cAAc,EAAC,GAAE;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,KAAK,iBAAiB,GAAE,YAAW,SAAQ,CAAC,GAAE,KAAE,KAAK,iBAAiB,GAAE,YAAW,WAAU,CAAC,GAAE,KAAE,KAAK,YAAY,GAAE,MAAK,GAAE,UAAU,GAAE,KAAE,KAAK,kBAAkB,EAAC,GAAE,KAAE,IAAI,GAAE,GAAE,MAAK,IAAE,IAAE,IAAE,GAAE,YAAW,KAAE,GAAE,iBAAe,GAAE,SAAQ,GAAE,MAAM;AAAA,QAAE,GAAE,WAAS,GAAE,SAAO,SAAQ,KAAK,QAAQ,KAAK,EAAC;AAAA,MAAC,EAAM,SAAG,KAAK,cAAc,EAAC,GAAE;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,KAAK,iBAAiB,GAAE,YAAW,SAAQ,CAAC,GAAE,KAAE,KAAK,iBAAiB,GAAE,YAAW,WAAU,CAAC,GAAE,KAAE,KAAK,YAAY,GAAE,MAAK,GAAE,UAAU,GAAE,KAAE,KAAK,kBAAkB,EAAC,GAAE,KAAE,IAAI,GAAE,GAAE,MAAK,IAAE,IAAE,IAAE,GAAE,YAAW,KAAE,GAAE,iBAAe,GAAE,SAAQ,GAAE,MAAM;AAAA,QAAE,GAAE,WAAS,GAAE,SAAO,SAAQ,KAAE,KAAK,QAAQ,KAAK,EAAC,IAAE,KAAK,SAAS,KAAK,EAAC;AAAA,MAAC,EAAM,SAAG,KAAK,cAAc,EAAC,GAAE;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,KAAK,iBAAiB,GAAE,YAAW,SAAQ,CAAC,GAAE,KAAE,KAAK,iBAAiB,GAAE,YAAW,WAAU,CAAC,GAAE,KAAE,KAAK,YAAY,GAAE,MAAK,GAAE,UAAU,GAAE,KAAE,IAAI,GAAE,GAAE,MAAK,IAAE,IAAE,IAAE,GAAE,YAAW,GAAE,SAAQ,GAAE,MAAM;AAAA,QAAE,KAAK,SAAS,KAAK,EAAC;AAAA,MAAC;AAAA;AAAA,IAAM,WAAU,MAAK;AAAA,MAAE,IAAG,cAAa,IAAE;AAAA,QAAC,MAAM,KAAE,KAAK,cAAc,IAAE,QAAQ,GAAE,KAAE,KAAK,cAAc,IAAE,UAAU,GAAE,KAAE,KAAK,cAAc,IAAE,SAAS,GAAE,KAAE,MAAG,MAAG,IAAE,KAAE,IAAI,GAAE,GAAE,MAAW,MAAN,OAAa,YAAE,GAAE,MAAK,GAAE,UAAU;AAAA,QAAE,GAAE,aAAW,GAAE,YAAW,GAAE,YAAU,GAAE,WAAU,GAAE,UAAQ,GAAE,SAAQ,KAAK,UAAU,KAAK,EAAC,GAAE,KAAK,WAAW,IAAI,GAAE,IAAI,EAAE,OAAK,IAAE,OAAI,KAAK,WAAW,IAAI,GAAE,IAAI,EAAE,QAAM,MAAG,GAAE,QAAM,MAAG,GAAE,YAAU,KAAK,eAAe,IAAE,CAAC,CAAC,EAAC,GAAE,GAAE,SAAO,KAAK,WAAW,GAAE,IAAI,GAAE,GAAE,UAAQ,KAAK,YAAY,GAAE,UAAU,GAAE,KAAK,MAAM,GAAE,MAAM,KAAK,EAAC,IAAG,GAAE,YAAU,GAAE,KAAK,IAAK,QAAG,IAAI,GAAE,GAAE,MAAK,KAAK,YAAY,GAAE,MAAK,GAAE,UAAU,GAAE,GAAE,UAAU,CAAE,GAAE,GAAE,aAAW,GAAE,aAAW,KAAK,YAAY,GAAE,YAAW,GAAE,UAAU,IAAE;AAAA,MAAI;AAAA;AAAA,IAAM,WAAU,MAAK,KAAK,WAAW,OAAO;AAAA,MAAE,GAAE,SAAO,GAAE,KAAK,QAAM,GAAE,OAAM,KAAK,UAAU,GAAE,MAAK,GAAE,KAAK,KAAK;AAAA,IAAG,WAAU,MAAK,KAAK,WAAW,OAAO;AAAA,MAAE,GAAE,KAAK,OAAQ,QAAG;AAAA,QAAC,IAAI,IAAE,IAAE;AAAA,QAAE,IAAG,cAAa,KAAG;AAAA,UAAC,IAAG,GAAE;AAAA,YAAM,IAAG,IAAG,GAAE,KAAK;AAAA,cAAE,WAAU,MAAK,GAAE;AAAA,gBAAM,WAAU,MAAK,KAAK;AAAA,kBAAU,OAAI,GAAE,UAAe,KAAE,GAAE,UAAZ,QAA4B,OAAJ,aAAO,GAAE,UAAU,KAAK,EAAC;AAAA,YAAQ;AAAA,yBAAU,MAAK,KAAK;AAAA,gBAAU,GAAE,UAAQ,GAAE,UAAe,KAAE,GAAE,UAAZ,QAA4B,OAAJ,aAAO,GAAE,UAAU,KAAK,EAAC;AAAA,QAAE,EAAM,SAAG,cAAa;AAAA,UAAG,WAAU,MAAK,KAAK;AAAA,YAAU,GAAE,SAAO,GAAE,UAAe,KAAE,GAAE,UAAZ,QAA4B,OAAJ,aAAO,GAAE,UAAU,KAAK,EAAC;AAAA,OAAI;AAAA,IAAE,WAAU,MAAK,KAAK;AAAA,MAAS,KAAK,kBAAkB,GAAE,IAAI;AAAA,IAAE,WAAU,MAAK,KAAK;AAAA,MAAQ,KAAK,kBAAkB,GAAE,IAAI;AAAA;AAAA,EAAE,aAAa,CAAC,IAAE;AAAA,IAAC,WAAU,MAAK,KAAK;AAAA,MAAQ,IAAG,GAAE,QAAM;AAAA,QAAE,OAAO;AAAA,IAAE,OAAO;AAAA;AAAA,EAAK,eAAe,CAAC,IAAE;AAAA,IAAC,WAAU,MAAK,KAAK;AAAA,MAAU,IAAG,GAAE,QAAM;AAAA,QAAE,OAAO;AAAA,IAAE,OAAO;AAAA;AAAA,EAAK,iBAAiB,CAAC,IAAE;AAAA,IAAC,IAAG;AAAA,MAAE,IAAG,GAAE,UAAS;AAAA,QAAC,IAAG,GAAE,QAAM,MAAG,GAAE;AAAA,UAAQ,WAAU,MAAK,GAAE;AAAA,YAAQ,KAAK,kBAAkB,GAAE,IAAI;AAAA,MAAC,EAAM,SAAG,GAAE;AAAA,QAAQ,KAAK,kBAAkB,GAAE,MAAM;AAAA,MAAO,SAAG,GAAE;AAAA,QAAW,GAAE,UAAQ,KAAK,kBAAkB,GAAE,MAAM;AAAA,MAAM;AAAA,QAAC,MAAM,KAAE,KAAK,UAAU,GAAE,IAAI;AAAA,QAAE,MAAG,KAAK,kBAAkB,EAAC;AAAA;AAAA;AAAA,EAAG,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI;AAAA,IAAE,WAAU,MAAK,GAAE,OAAM;AAAA,MAAC,MAAM,MAAU,KAAE,KAAK,WAAW,IAAI,GAAE,IAAI,OAApC,QAAiD,OAAJ,YAAW,YAAE,GAAE;AAAA,MAAK,MAAG,GAAE,IAAI,EAAC;AAAA,IAAC;AAAA;AAAA,EAAE,YAAY,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,IAAG,IAAE;AAAA,MAAC,WAAU,MAAK,KAAK,MAAM;AAAA,QAAQ,IAAG,GAAE,SAAO;AAAA,UAAE,WAAU,MAAK,GAAE;AAAA,YAAU,IAAG,GAAE,SAAO,MAAG,GAAE,WAAS;AAAA,cAAE,OAAO;AAAA;AAAA,MAAE,WAAU,MAAK,KAAK,MAAM;AAAA,QAAO,IAAG,GAAE,SAAO;AAAA,UAAE,WAAU,MAAK,GAAE;AAAA,YAAU,IAAG,GAAE,SAAO,MAAG,GAAE,WAAS;AAAA,cAAE,OAAO;AAAA;AAAA,MAAE,WAAU,MAAK,KAAK,MAAM;AAAA,QAAS,IAAG,GAAE,SAAO;AAAA,UAAE,WAAU,MAAK,GAAE;AAAA,YAAU,IAAG,GAAE,SAAO,MAAG,GAAE,WAAS;AAAA,cAAE,OAAO;AAAA;AAAA,IAAC;AAAA,IAAC,WAAU,MAAK,KAAK;AAAA,MAAS,IAAG,GAAE,SAAO,MAAG,GAAE,WAAS;AAAA,QAAE,OAAO;AAAA,IAAE,WAAU,MAAK,KAAK;AAAA,MAAQ,IAAG,GAAE,SAAO,MAAG,GAAE,WAAS;AAAA,QAAE,OAAO;AAAA,IAAE,WAAU,MAAK,KAAK;AAAA,MAAS,IAAG,GAAE,SAAO,MAAG,GAAE,WAAS;AAAA,QAAE,OAAO;AAAA,IAAE,WAAU,MAAK,KAAK;AAAA,MAAS,IAAG,GAAE,SAAO,MAAG,GAAE,WAAS;AAAA,QAAE,OAAO;AAAA,IAAE,OAAO;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE;AAAA,IAAC,WAAU,MAAK,KAAK;AAAA,MAAS,IAAG,GAAE,QAAM;AAAA,QAAE,OAAO;AAAA,IAAE,WAAU,MAAK,KAAK;AAAA,MAAQ,IAAG,GAAE,QAAM;AAAA,QAAE,OAAO;AAAA,IAAE,WAAU,MAAK,KAAK;AAAA,MAAS,IAAG,GAAE,QAAM;AAAA,QAAE,OAAO;AAAA,IAAE,WAAU,MAAK,KAAK;AAAA,MAAS,IAAG,GAAE,QAAM;AAAA,QAAE,OAAO;AAAA,IAAE,OAAO;AAAA;AAAA,EAAK,mBAAmB,CAAC,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,YAAY,IAAE,IAAI;AAAA,IAAE,KAAK,kBAAkB,EAAC;AAAA;AAAA,EAAE,cAAc,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,CAAC,GAAE,KAAE,MAAK,KAAE,CAAC;AAAA,IAAE,OAAO,GAAE,OAAQ,QAAG;AAAA,MAAC,IAAG,cAAa;AAAA,QAAE,GAAE,KAAK,CAAC,CAAC;AAAA,MAAO,SAAG,cAAa;AAAA,QAAE,GAAE,IAAI;AAAA,MAAO,SAAG,cAAa,IAAE;AAAA,QAAC,MAAM,KAAE;AAAA,QAAE,MAAU,GAAE,SAAT,QAAe,KAAK,oBAAoB,GAAE,IAAI,GAAE,GAAE,SAAO,MAAI,GAAE,GAAE,SAAO,GAAG,GAAE,QAAM;AAAA,MAAE,EAAM,SAAG,cAAa,KAAG;AAAA,QAAC,MAAM,KAAE;AAAA,QAAE,MAAU,GAAE,SAAT,QAAe,KAAK,oBAAoB,GAAE,IAAI;AAAA,MAAC,EAAM,SAAG,cAAa,IAAE;AAAA,QAAC,MAAM,KAAE;AAAA,QAAE,MAAU,GAAE,SAAT,QAAe,KAAK,oBAAoB,GAAE,IAAI,GAAE,GAAE,SAAO,MAAI,GAAE,GAAE,SAAO,GAAG,GAAE,QAAM;AAAA,MAAE,EAAM,SAAG,cAAa,KAAG;AAAA,QAAC,MAAM,KAAE;AAAA,QAAE,IAAG,GAAE,SAAO,GAAE;AAAA,UAAC,IAAG,GAAE,GAAE,SAAO,GAAG,GAAE;AAAA,YAAM;AAAA,QAAM;AAAA,QAAC,MAAM,KAAE,GAAE,cAAc,GAAE,IAAI;AAAA,QAAE,MAAG,GAAE,KAAK,EAAC;AAAA,MAAC,EAAM,SAAG,cAAa,KAAG;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,GAAE,WAAW,IAAI,GAAE,IAAI;AAAA,QAAE,OAAI,OAAI,GAAE,QAAM,OAAI,GAAE,MAAM,IAAI,GAAE,IAAI,GAAS,GAAE,cAAT,SAAqB,GAAE,YAAU,GAAE,eAAe,GAAE,MAAK,EAAC,IAAG,GAAE,KAAK,GAAG,GAAE,SAAS;AAAA,MAAE,EAAM,SAAG,cAAa,IAAE;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,GAAE,WAAW,IAAI,GAAE,IAAI;AAAA,QAAE,OAAI,OAAI,GAAE,QAAM,OAAI,GAAE,MAAM,IAAI,GAAE,IAAI,GAAS,GAAE,cAAT,SAAqB,GAAE,YAAU,GAAE,eAAe,GAAE,MAAK,EAAC,IAAG,GAAE,KAAK,GAAG,GAAE,SAAS;AAAA,MAAE;AAAA,KAAG,GAAE,CAAC,GAAG,IAAI,IAAI,GAAE,IAAK,QAAG,CAAC,GAAE,MAAK,EAAC,CAAE,CAAC,EAAE,OAAO,CAAC;AAAA;AAAA,EAAE,aAAa,GAAE;AAAA,IAAC,MAAM,KAAE,CAAC;AAAA,IAAE,SAAS,EAAC,CAAC,IAAE,IAAE;AAAA,MAAC,MAAG,GAAE,WAAS,GAAE,SAAO,KAAE,IAAY,GAAE,QAAN,cAAW,GAAE,MAAG,CAAC,IAAG,MAAG,GAAE,IAAG,WAAS,GAAE,IAAG,SAAO,KAAE;AAAA;AAAA,IAAG,WAAU,MAAK,KAAK,UAAS;AAAA,MAAC,GAAE,GAAE,OAAM,GAAE,OAAO;AAAA,MAAE,GAAE,GAAE,OAAO,GAAE,WAAS;AAAA,IAAC;AAAA,IAAC,WAAU,MAAK,KAAK,SAAQ;AAAA,MAAC,GAAE,GAAE,OAAM,GAAE,OAAO;AAAA,MAAE,GAAE,GAAE,OAAO,GAAE,WAAS;AAAA,IAAC;AAAA,IAAC,WAAU,MAAK,KAAK,UAAS;AAAA,MAAC,GAAE,GAAE,OAAM,GAAE,OAAO;AAAA,MAAE,GAAE,GAAE,OAAO,GAAE,WAAS;AAAA,IAAC;AAAA,IAAC,WAAU,MAAK,KAAK,UAAS;AAAA,MAAC,GAAE,GAAE,OAAM,GAAE,OAAO;AAAA,MAAE,GAAE,GAAE,OAAO,GAAE,WAAS;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,KAAO,WAAE;AAAA,IAAC,IAAY,OAAJ,cAAQ,KAAE,CAAC,IAAG,cAAa;AAAA,MAAG,KAAK,kBAAkB,IAAE,EAAC;AAAA,IAAM;AAAA,MAAC,MAAM,KAAE,KAAK,eAAe,EAAC;AAAA,MAAS,OAAP,QAAU,GAAE,KAAK,EAAC;AAAA;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,iBAAiB,CAAC,IAAE,IAAE;AAAA,IAAC,WAAU,MAAK,GAAE;AAAA,MAAQ,IAAG,GAAE,gBAAgB;AAAA,QAAG,KAAK,kBAAkB,GAAE,MAAK,EAAC;AAAA,MAAM;AAAA,QAAC,MAAM,KAAE,KAAK,cAAc,IAAE,UAAU,KAAG,KAAK,cAAc,IAAE,SAAS;AAAA,QAAE,IAAU,OAAP,MAAS;AAAA,UAAC,MAAM,KAAE,KAAK,YAAY,GAAE,MAAK,GAAE,KAAK,UAAU,GAAE,KAAE,KAAK,UAAU,GAAE,KAAK,GAAE,KAAE,IAAI,GAAE,GAAE,MAAK,IAAE,GAAE,MAAK,EAAC;AAAA,UAAE,GAAE,KAAK,EAAC;AAAA,QAAC;AAAA;AAAA;AAAA,EAAG,cAAc,CAAC,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,cAAc,IAAE,UAAU,KAAG,KAAK,cAAc,IAAE,SAAS;AAAA,IAAE,IAAU,OAAP,MAAS;AAAA,MAAC,MAAM,KAAE,KAAK,YAAY,IAAE,GAAE,UAAU,GAAE,KAAE,KAAK,UAAU,GAAE,KAAK;AAAA,MAAE,OAAO,IAAI,GAAE,IAAG,IAAE,GAAE,MAAK,EAAC;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE,KAAO,WAAE;AAAA,IAAU,OAAJ,cAAQ,KAAE,CAAC;AAAA,IAAG,WAAU,MAAK;AAAA,MAAE,IAAG,GAAE,gBAAgB;AAAA,QAAG,KAAK,iBAAiB,GAAE,MAAK,EAAC;AAAA,MAAM;AAAA,QAAC,MAAM,KAAE,KAAK,cAAc,EAAC;AAAA,QAAS,OAAP,QAAU,GAAE,KAAK,EAAC;AAAA;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,gBAAgB,CAAC,IAAE,IAAE;AAAA,IAAC,WAAU,MAAK,GAAE;AAAA,MAAQ,IAAG,GAAE,gBAAgB;AAAA,QAAG,KAAK,iBAAiB,GAAE,MAAK,EAAC;AAAA,MAAM;AAAA,QAAC,MAAM,KAAE,KAAK,cAAc,EAAC;AAAA,QAAS,OAAP,QAAU,GAAE,KAAK,EAAC;AAAA;AAAA;AAAA,EAAG,aAAa,CAAC,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,cAAc,IAAE,UAAU,KAAG,KAAK,cAAc,IAAE,SAAS;AAAA,IAAE,IAAU,OAAP,MAAS;AAAA,MAAC,MAAM,KAAE,KAAK,cAAc,IAAE,eAAe,GAAE,KAAE,KAAK,YAAY,GAAE,MAAK,GAAE,UAAU,GAAE,KAAE,KAAK,UAAU,GAAE,KAAK,GAAE,KAAE,IAAI,GAAE,GAAE,MAAK,IAAE,GAAE,MAAK,EAAC;AAAA,MAAE,OAAc,OAAP,SAAW,GAAE,gBAAc,KAAK,aAAa,GAAE,KAAK,IAAG;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,YAAY,CAAC,IAAE;AAAA,IAAC,OAAO,cAAa,UAAQ,KAAE,GAAE,KAAI;AAAA;AAAA,EAAE,SAAS,CAAC,IAAE;AAAA,IAAC,cAAa,UAAQ,KAAE,GAAE;AAAA,IAAI,MAAM,KAAE,SAAS,EAAC;AAAA,IAAE,OAAO,MAAM,EAAC,IAAE,KAAE;AAAA;AAAA,EAAE,SAAS,CAAC,IAAE;AAAA,IAAC,WAAU,MAAK,KAAK;AAAA,MAAQ,IAAG,GAAE,QAAM;AAAA,QAAE,OAAO,GAAE;AAAA,IAAK,OAAO;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE;AAAA,IAAC,OAAO,IAAI,GAAE,GAAE,MAAK,KAAK,YAAY,GAAE,MAAK,IAAI,CAAC;AAAA;AAAA,EAAE,iBAAiB,CAAC,IAAE;AAAA,IAAC,WAAU,MAAK,KAAK;AAAA,MAAQ,IAAG,GAAE,QAAM;AAAA,QAAE,OAAO;AAAA,IAAE,WAAU,MAAK,KAAK;AAAA,MAAQ,IAAG,GAAE,QAAM;AAAA,QAAE,OAAO,GAAE;AAAA,IAAK,OAAO;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,KAAE,MAAK;AAAA,IAAC,IAAG,KAAK,OAAO,IAAI,EAAC;AAAA,MAAE,OAAO,KAAK,OAAO,IAAI,EAAC;AAAA,IAAE,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE,OAAK,KAAK,YAAY,GAAE,MAAK,GAAE,UAAU,IAAE,MAAK,KAAE,IAAI,GAAE,GAAE,MAAK,IAAE,EAAC;AAAA,MAAE,OAAO,KAAK,OAAO,IAAI,IAAE,EAAC,GAAE,KAAK,gBAAgB,EAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,IAAE,KAAE,GAAE,SAAO,KAAK,YAAY,GAAE,QAAO,GAAE,UAAU,IAAE,MAAK,KAAE,IAAI,GAAE,GAAE,MAAK,EAAC;AAAA,MAAE,OAAO,GAAE,SAAO,IAAE,GAAE,QAAM,GAAE,OAAM,KAAK,OAAO,IAAI,IAAE,EAAC,GAAE,KAAK,gBAAgB,EAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,IAAE,KAAE,IAAI,GAAE,GAAE,MAAK,EAAC;AAAA,MAAE,GAAE,YAAU,GAAE,WAAU,GAAE,UAAQ,GAAE;AAAA,MAAQ,WAAU,MAAK,GAAE,SAAQ;AAAA,QAAC,MAAM,KAAE,KAAK,YAAY,GAAE,MAAK,GAAE,UAAU;AAAA,QAAE,GAAE,QAAQ,KAAK,IAAI,GAAE,GAAE,MAAK,IAAE,GAAE,UAAU,CAAC;AAAA,MAAC;AAAA,MAAC,OAAO,KAAK,OAAO,IAAI,IAAE,EAAC,GAAE,KAAK,gBAAgB,EAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,IAAE,KAAE,GAAE,kBAAkB,KAAG,KAAE,GAAE,SAAO,KAAE,KAAK,YAAY,GAAE,QAAO,IAAI,IAAE,IAAI,GAAE,GAAE,QAAO,IAAI,IAAE,MAAK,KAAE,IAAI,GAAE,GAAE,MAAK,IAAE,IAAE,GAAE,MAAM;AAAA,MAAE,OAAO,KAAK,OAAO,IAAI,IAAE,EAAC,GAAE,KAAK,gBAAgB,EAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,IAAE,KAAE,GAAE,SAAO,KAAK,YAAY,GAAE,QAAO,IAAI,IAAE,MAAK,KAAE,IAAI,GAAE,GAAE,MAAK,IAAE,IAAE,GAAE,MAAM;AAAA,MAAE,OAAO,KAAK,OAAO,IAAI,IAAE,EAAC,GAAE,KAAK,gBAAgB,EAAC,GAAE;AAAA,IAAC;AAAA,IAAC,MAAM,KAAE,IAAI,GAAE,GAAE,MAAK,EAAC;AAAA,IAAE,OAAO,KAAK,OAAO,IAAI,IAAE,EAAC,GAAE,KAAK,gBAAgB,EAAC,GAAE;AAAA;AAAA,EAAE,eAAe,CAAC,IAAE;AAAA,IAAC,IAAI,IAAE,IAAE;AAAA,IAAE,MAAM,KAAE,KAAK,aAAa,EAAC;AAAA,IAAE,IAAG,GAAE,QAAa,KAAQ,MAAN,OAAa,YAAE,GAAE,UAA3B,QAA2C,OAAJ,YAAM,KAAE,GAAE,cAAa,MAAG,GAAE,QAAO;AAAA,MAAC,MAAM,KAAE,KAAK,aAAa,GAAE,MAAM;AAAA,MAAE,GAAE,SAAO,KAAK,KAAY,KAAQ,MAAN,OAAa,YAAE,GAAE,UAA3B,QAA2C,OAAJ,YAAM,KAAE,IAAU,KAAQ,MAAN,OAAa,YAAE,GAAE,WAA3B,QAA4C,OAAJ,YAAM,KAAE,CAAC,GAAE,KAAK,gBAAgB,GAAE,MAAM;AAAA,IAAC;AAAA,IAAC,cAAa,MAAG,KAAK,gBAAgB,GAAE,MAAM,GAAE,cAAa,MAAG,KAAK,kBAAkB,EAAC;AAAA;AAAA,EAAE,iBAAiB,CAAC,IAAE;AAAA,IAAC,IAAI;AAAA,IAAE,IAAI,KAAE,GAAE,KAAE,GAAE,KAAE,GAAE,KAAE;AAAA,IAAE,SAAQ,KAAE,GAAE,KAAE,GAAE,QAAQ,OAAO,KAAE,IAAE,EAAE,IAAE;AAAA,MAAC,MAAM,KAAE,GAAE,QAAQ,KAAG,KAAE,KAAK,aAAa,EAAC;AAAA,MAAE,IAAG,CAAC;AAAA,QAAE;AAAA,OAAiB,KAAE,KAAK,UAAU,GAAE,KAAK,IAAI,OAApC,QAAiD,OAAJ,aAAO,GAAE;AAAA,MAAK,QAAU,OAAJ,IAAc,MAAJ,OAAE;AAAA,MAAO,KAAE,KAAK,SAAS,IAAE,KAAE,EAAC,GAAE,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,IAAI,IAAE,EAAC,GAAE,GAAE,SAAO,IAAE,GAAE,OAAK,IAAE,KAAK,gBAAgB,GAAE,IAAI;AAAA,IAAC;AAAA,IAAC,GAAE,OAAK,KAAK,SAAS,IAAE,KAAE,EAAC,GAAE,GAAE,QAAM;AAAA;AAAA,EAAE,YAAY,CAAC,IAAE;AAAA,IAAC,IAAI,IAAE;AAAA,IAAE,IAAS,MAAN;AAAA,MAAQ,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,iBAAiB,GAAE,YAAW,QAAO,CAAC,GAAE,KAAE,KAAK,iBAAiB,GAAE,YAAW,SAAQ,CAAC;AAAA,IAAE,IAAG,cAAa,OAAI,KAAE,GAAE,OAAM,cAAa,IAAE;AAAA,MAAC,MAAM,KAAE,KAAK,UAAU,GAAE,IAAI;AAAA,MAAS,OAAP,SAAW,KAAE;AAAA,IAAE;AAAA,IAAC;AAAA,MAAC,MAAM,KAAE,IAAG,UAAU,GAAE;AAAA,MAAM,IAAY,OAAJ,WAAM;AAAA,QAAC,MAAM,OAAmB,KAAE,GAAE,YAAZ,QAA8B,OAAJ,YAAW,YAAE,GAAE,UAAlD,QAAwD,IAAE;AAAA,QAAE,OAAO,IAAI,IAAG,KAAK,IAAI,IAAE,GAAE,QAAM,EAAC,GAAE,KAAK,IAAI,IAAE,GAAE,OAAK,EAAC,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,IAAC;AAAA,MAAC,MAAM,KAAE,IAAG,UAAU,GAAE,KAAK,UAAU,GAAE,GAAE,KAAK,SAAO,CAAC;AAAA,MAAG,IAAG,IAAE;AAAA,QAAC,MAAM,KAAQ,GAAE,KAAK,GAAE,KAAK,SAAO,OAA3B,MAA8B,IAAE;AAAA,QAAE,OAAO,IAAI,IAAG,KAAK,IAAI,IAAE,GAAE,QAAM,EAAC,GAAE,KAAK,IAAI,IAAE,GAAE,OAAK,EAAC,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,IAAC,IAAG,cAAa,IAAE;AAAA,MAAC,IAAI,KAAE,IAAE,KAAE,GAAE,KAAE;AAAA,MAAE,MAAM,KAAE,KAAK,aAAa,GAAE,MAAM;AAAA,MAAS,OAAP,SAAW,KAAE,GAAE,MAAK,KAAE,GAAE;AAAA,MAAO,OAAO,KAAE,GAAE,QAAM,KAAK,kBAAyB,KAAQ,MAAN,OAAa,YAAE,GAAE,gBAA3B,QAAiD,OAAJ,YAAM,KAAE,MAAK,UAAS,KAAK,SAAS,IAAE,EAAC,CAAC,GAAE,OAAI,KAAE,KAAG,IAAI,IAAG,KAAK,IAAI,IAAE,EAAC,GAAE,KAAK,IAAI,IAAE,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,IAAG,cAAa,IAAE;AAAA,MAAC,IAAI,KAAE,GAAE,KAAE,GAAE,KAAE,GAAE,KAAE,GAAE,KAAE;AAAA,MAAE,WAAU,MAAK,GAAE,SAAQ;AAAA,QAAC,MAAM,KAAE,KAAK,aAAa,GAAE,IAAI;AAAA,QAAS,OAAP,SAAW,KAAE,KAAK,IAAI,GAAE,OAAM,EAAC,GAAE,KAAE,KAAK,SAAS,GAAE,OAAM,KAAE,EAAC,GAAE,KAAE,GAAE,MAAK,KAAE;AAAA,MAAE;AAAA,MAAC,OAAO,KAAE,KAAK,SAAS,IAAE,KAAE,EAAC,GAAE,IAAI,IAAG,KAAK,IAAI,IAAE,EAAC,GAAE,KAAK,IAAI,IAAE,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE;AAAA,IAAC,OAAO,cAAa,MAAc,GAAE,WAAb;AAAA;AAAA,EAAqB,aAAa,CAAC,IAAE;AAAA,IAAC,OAAO,cAAa,MAAc,GAAE,WAAb;AAAA;AAAA,EAAqB,aAAa,CAAC,IAAE;AAAA,IAAC,OAAO,cAAa,MAAU,GAAE,SAAT,QAAmB,IAAG,cAAc,QAAQ,GAAE,KAAK,IAAI,KAAxC;AAAA;AAAA,EAA0C,aAAa,CAAC,IAAE;AAAA,IAAC,OAAO,cAAa,MAAU,GAAE,SAAT,QAAmB,IAAG,cAAc,QAAQ,GAAE,KAAK,IAAI,KAAxC;AAAA;AAAA,EAA0C,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE;AAAA,IAAE,IAAG,CAAC,MAAG,CAAC,GAAE;AAAA,MAAW,OAAO;AAAA,IAAK,MAAM,KAAE,GAAE;AAAA,IAAW,SAAQ,MAAK;AAAA,MAAE,IAAG,GAAE,QAAM;AAAA,QAAE,OAAO;AAAA,IAAE,OAAO;AAAA;AAAA,EAAK,gBAAgB,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,IAAU,OAAP;AAAA,MAAS,OAAO;AAAA,IAAE,SAAQ,MAAK;AAAA,MAAE,IAAG,GAAE,QAAM,IAAE;AAAA,QAAC,IAAI,KAAS,OAAP,QAAiB,GAAE,UAAT,OAAe,GAAE,QAAM;AAAA,QAAE,OAAO,cAAa,UAAQ,KAAE,GAAE,KAAc,OAAO,MAAjB,WAAmB,KAAY,OAAO,MAAjB,WAAmB,SAAS,EAAC,IAAE;AAAA,MAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAE,QAAQ,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,KAAK,KAAK,KAAE,EAAC,IAAE;AAAA;AAAE;AAAC,IAAG,YAAU,EAAC,KAAI,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,KAAI,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,KAAI,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,KAAI,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,QAAO,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,MAAK,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,MAAK,EAAC,OAAM,IAAG,MAAK,GAAE,GAAE,MAAK,EAAC,OAAM,IAAG,MAAK,GAAE,GAAE,QAAO,EAAC,OAAM,GAAE,MAAK,GAAE,GAAE,QAAO,EAAC,OAAM,GAAE,MAAK,GAAE,GAAE,QAAO,EAAC,OAAM,GAAE,MAAK,GAAE,GAAE,QAAO,EAAC,OAAM,IAAG,MAAK,GAAE,GAAE,QAAO,EAAC,OAAM,IAAG,MAAK,GAAE,GAAE,QAAO,EAAC,OAAM,IAAG,MAAK,GAAE,GAAE,QAAO,EAAC,OAAM,IAAG,MAAK,GAAE,GAAE,QAAO,EAAC,OAAM,IAAG,MAAK,GAAE,GAAE,QAAO,EAAC,OAAM,IAAG,MAAK,GAAE,EAAC,GAAE,IAAG,gBAAc,IAAG,iBAAiB,IAAK,QAAG,GAAE,IAAK,GAAE,IAAG,gBAAc,IAAG,aAAa,IAAK,QAAG,GAAE,IAAK;AAAE,IAAI,MAAG;AAAA;AAAE,MAAM,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,KAAK,KAAG,OAAK,KAAK,OAAK,IAAE,KAAK,QAAM,IAAE,KAAK,OAAK;AAAA;AAAA,EAAE,KAAK,GAAE;AAAA,IAAC,OAAO,IAAI,IAAG,KAAK,MAAK,KAAK,OAAM,KAAK,IAAI;AAAA;AAAE;AAAA;AAAC,MAAM,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,KAAK,KAAG,OAAK,KAAK,OAAK,GAAE,MAAK,KAAK,OAAK;AAAA;AAAA,EAAE,KAAK,GAAE;AAAA,IAAC,OAAO,IAAI,IAAG,KAAK,IAAI;AAAA;AAAE;AAAA;AAAC,MAAM,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,KAAK,SAAO,MAAK,KAAK,YAAU,IAAI,KAAI,KAAK,YAAU,IAAI,KAAI,KAAK,sBAAoB,IAAG,KAAK,KAAG,OAAK,OAAI,KAAK,SAAO,IAAE,KAAK,sBAAoB,GAAE;AAAA;AAAA,EAAqB,WAAW,CAAC,IAAE;AAAA,IAAC,IAAI;AAAA,IAAE,OAAO,KAAK,UAAU,IAAI,EAAC,KAAU,KAAE,KAAK,UAAU,IAAI,EAAC,OAA9B,QAA2C,OAAJ,YAAM,KAAE,OAAK,KAAK,SAAO,KAAK,OAAO,YAAY,EAAC,IAAE;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE;AAAA,IAAC,IAAI;AAAA,IAAE,OAAO,KAAK,UAAU,IAAI,EAAC,KAAU,KAAE,KAAK,UAAU,IAAI,EAAC,OAA9B,QAA2C,OAAJ,YAAM,KAAE,OAAK,KAAK,SAAO,KAAK,OAAO,YAAY,EAAC,IAAE;AAAA;AAAA,EAAK,cAAc,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,KAAK,UAAU,IAAI,IAAE,IAAI,IAAG,IAAE,IAAQ,MAAN,OAAQ,KAAE,IAAI,CAAC;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,YAAY,EAAC;AAAA,IAAS,OAAP,OAAS,GAAE,QAAM,KAAE,KAAK,eAAe,IAAE,IAAE,EAAC;AAAA;AAAA,EAAE,gBAAgB,CAAC,IAAE;AAAA,IAAC,IAAI;AAAA,IAAE,MAAM,KAAE,KAAK,YAAY,EAAC;AAAA,IAAE,QAAe,KAAQ,MAAN,OAAa,YAAE,GAAE,WAA3B,QAA4C,OAAJ,YAAM,KAAE;AAAA;AAAA,EAAK,KAAK,GAAE;AAAA,IAAC,OAAO,IAAI,IAAG,IAAI;AAAA;AAAE;AAAA;AAAC,MAAM,IAAE;AAAA,EAAC,cAAc,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,eAAe,CAAC,IAAE,IAAE;AAAA,IAAC,OAAM;AAAA;AAAG;AAAA;AAAC,MAAM,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,KAAK,OAAK;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE;AAAA,IAAC,OAAO,KAAK,KAAK,YAAY,EAAC;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAI,KAAE;AAAA,IAAG,IAAG,cAAa;AAAA,MAAG,OAAO,GAAE,KAAK,QAAS,QAAG;AAAA,QAAC,OAAI,KAAE;AAAA,OAAK,GAAE,IAAI,IAAG,KAAE,IAAE,GAAE,KAAK,YAAY,MAAM,CAAC;AAAA,IAAE,MAAM,IAAI,MAAM,yCAAyC,GAAE,MAAM;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE,KAAK,KAAM,QAAG,EAAE;AAAA,MAAE,OAAO,IAAI,IAAG,KAAE,IAAE,GAAE,KAAK,YAAY,MAAM,CAAC;AAAA,IAAC;AAAA,IAAC,MAAM,IAAI,MAAM,yCAAyC,GAAE,MAAM;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,EAAE,cAAa;AAAA,MAAI,MAAM,IAAI,MAAM,2CAA2C,GAAE,MAAM;AAAA,IAAE,OAAO,GAAE,QAAM,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,IAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,eAAe,IAAE,EAAC;AAAA,IAAE,IAAG,cAAa,OAAQ,GAAE,SAAS,SAAf,GAAoB;AAAA,MAAC,MAAM,KAAE,GAAE,UAAS,KAAE,GAAE,OAAO,aAAW,GAAE;AAAA,MAAO,OAAO,IAAI,IAAG,IAAE,KAAK,YAAY,KAAK,CAAC;AAAA,IAAC;AAAA,IAAC,OAAO,IAAI,IAAG,GAAE,SAAS,MAAK,KAAK,YAAY,KAAK,CAAC;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,IAAI,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,KAAK,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,MAAM,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,MAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,KAAK,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,MAAM,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,MAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,KAAK,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,MAAM,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,MAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAK,MAAM,IAAE,GAAE,KAAK,GAAE,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE,IAAE,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,MAAM,GAAE,OAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,KAAK,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,OAAO,KAAK,IAAI,KAAK,IAAI,IAAE,EAAC,GAAE,EAAC;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAK,OAAO,IAAE,GAAE,KAAK,KAAG,GAAE,KAAK,GAAE,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,OAAO,GAAE,OAAM,GAAE,OAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,IAAI,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,iBAAiB,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,MAAM,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,MAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,aAAa,CAAC,IAAE;AAAA,IAAC,IAAI,KAAE;AAAA,IAAE,MAAS,OAAJ;AAAA,MAAO,IAAE,MAAG,MAAI,OAAI;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,cAAc,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,cAAc,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,mBAAmB,CAAC,IAAE;AAAA,IAAC,IAAO,OAAJ;AAAA,MAAM,OAAO;AAAA,IAAG,IAAI,KAAE;AAAA,IAAE,MAAK,EAAE,IAAE;AAAA,MAAI,OAAI,GAAE;AAAA,IAAI,OAAO;AAAA;AAAA,EAAE,kBAAkB,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,oBAAoB,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,oBAAoB,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa,KAAG;AAAA,MAAC,IAAO,GAAE,KAAK,WAAX,KAAuB,GAAE,KAAK,WAAX;AAAA,QAAkB,OAAO,QAAQ,MAAM,oCAAoC,GAAE,MAAM,GAAE;AAAA,MAAK,MAAM,KAAE,GAAE,MAAK,KAAE,GAAE;AAAA,MAAK,OAAO,IAAI,IAAG,CAAC,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,IAAG,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,EAAE,GAAE,GAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,OAAO,QAAQ,MAAM,0CAA0C,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,OAAO,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,MAAI,KAAK;AAAA,IAAG,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAE,EAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,OAAO,IAAI,IAAG,GAAE,QAAM,IAAE,KAAK,YAAY,KAAK,CAAC;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE,MAAK,KAAE,GAAE,SAAS,YAAY,GAAE,KAAE,GAAE,SAAS,GAAG,IAAE,KAAK,YAAY,KAAK,IAAE,KAAK,YAAY,KAAK;AAAA,MAAE,IAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ;AAAA,QAAc,OAAO,IAAI,IAAG,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,IAAG,EAAC;AAAA,MAAE,IAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ;AAAA,QAAc,OAAO,IAAI,IAAG,GAAE,MAAI,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE,MAAI,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE,MAAI,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,KAAI,EAAC;AAAA,MAAE,IAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ;AAAA,QAAc,QAAQ,MAAM,yBAAyB,IAAG;AAAA,MAAO,SAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ;AAAA,QAAc,QAAQ,MAAM,yBAAyB,IAAG;AAAA,MAAM;AAAA,QAAC,IAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ;AAAA,UAAc,OAAO,IAAI,IAAG,GAAE,MAAI,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE,MAAI,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE,MAAI,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,KAAI,EAAC;AAAA,QAAa,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA0B,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA0B,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,YAAc,QAAQ,MAAM,yBAAyB,IAAG,IAAa,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAAe,QAAQ,MAAM,yBAAyB,IAAG;AAAA;AAAA,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,+CAA+C,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,QAAQ,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa,KAAG;AAAA,MAAC,IAAI,KAAE;AAAA,MAAE,SAAQ,KAAE,EAAE,KAAE,GAAE,KAAK,QAAO,EAAE;AAAA,QAAE,OAAI,GAAE,KAAK,MAAG,GAAE,KAAK,QAAK,GAAE,KAAK,MAAG,GAAE,KAAK;AAAA,MAAI,OAAO,IAAI,IAAG,KAAK,KAAK,EAAC,GAAE,KAAK,YAAY,KAAK,CAAC;AAAA,IAAC;AAAA,IAAC,MAAM,KAAE,IAAE,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,QAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE;AAAA,IAAE,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,MAAE,MAAG,GAAE,MAAG,GAAE;AAAA,IAAG,OAAO;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,OAAO,cAAa,OAAI,cAAa,MAAG,IAAI,IAAG,KAAK,KAAK,GAAE,MAAK,GAAE,IAAI,GAAE,KAAK,YAAY,KAAK,CAAC,KAAG,QAAQ,MAAM,wCAAwC,GAAE,MAAM,GAAE;AAAA;AAAA,EAAM,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,4BAA4B,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,4BAA4B,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,IAAI,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,IAAI,GAAE,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAW,GAAE,SAAS,SAAnB,SAAiC,GAAE,SAAS,SAAnB;AAAA,MAAwB,OAAO,QAAQ,MAAM,sDAAsD,GAAE,MAAM,GAAE;AAAA,IAAK,IAAW,GAAE,SAAS,SAAnB,SAAiC,GAAE,SAAS,SAAnB;AAAA,MAAwB,OAAO,QAAQ,MAAM,qDAAqD,GAAE,MAAM,GAAE;AAAA,IAAK,MAAM,KAAE,GAAE,OAAM,KAAE,GAAE;AAAA,IAAM,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,MAAG,MAAG,KAAG,MAAG,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,IAAW,GAAE,SAAS,SAAnB,SAAiC,GAAE,SAAS,SAAnB;AAAA,MAAwB,OAAO,QAAQ,MAAM,+CAA+C,GAAE,MAAM,GAAE;AAAA,IAAK,MAAM,KAAE,GAAE;AAAA,IAAM,OAAO,IAAI,IAAG,MAAG,MAAG,KAAG,MAAG,GAAE,KAAK,YAAY,KAAK,CAAC;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa,OAAI,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,KAAK,GAAE,MAAK,GAAE,IAAI;AAAA,MAAE,OAAO,IAAI,IAAG,KAAE,IAAE,MAAM,KAAK,GAAE,IAAI,IAAE,GAAE,KAAK,IAAK,QAAG,CAAC,EAAE,GAAE,GAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,OAAO,QAAQ,MAAM,gDAAgD,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,gBAAgB,CAAC,IAAE;AAAA,IAAC,OAAW,OAAJ,IAAM,KAAG,KAAG,KAAK,MAAM,EAAC;AAAA;AAAA,EAAE,eAAe,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,iBAAiB,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,iBAAiB,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,iBAAiB,CAAC,IAAE;AAAA,IAAC,OAAW,OAAJ,IAAM,KAAG,KAAK,KAAK,KAAE,CAAC,EAAC;AAAA;AAAA,EAAE,gBAAgB,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,kBAAkB,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,kBAAkB,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,MAAM,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,MAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,GAAE,KAAK,WAAS,GAAE,KAAK,UAAQ,GAAE,KAAK,WAAS,GAAE,KAAK,UAAQ,QAAQ,MAAM,kDAAkD,GAAE,MAAM,GAAE,QAAM,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,KAAK,MAAG,GAAE,KAAK,GAAG,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,GAAE,QAAM,GAAE,QAAM,GAAE,OAAM,GAAE,QAAQ;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAE,KAAK,MAAM,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,GAAE,QAAM,KAAK,MAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAW,GAAE,SAAS,SAAnB,SAAiC,GAAE,SAAS,SAAnB;AAAA,MAAwB,OAAO,QAAQ,MAAM,qDAAqD,GAAE,MAAM,GAAE;AAAA,IAAK,MAAM,KAAE,GAAE,OAAM,MAAG,KAAG,GAAE,SAAO,KAAG,IAAE,KAAE,CAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAE,KAAE,GAAE,KAAK,OAAI,KAAE,EAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE,GAAE,OAAM,KAAE,GAAE;AAAA,IAAM,OAAO,IAAI,IAAG,KAAE,KAAE,MAAG,KAAE,IAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,IAAE,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,IAAE,KAAK,KAAK,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,MAAM,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,KAAG;AAAA,MAAC,IAAI,KAAE;AAAA,MAAE,OAAO,GAAE,KAAK,QAAS,QAAG;AAAA,QAAC,MAAG,KAAE;AAAA,OAAG,GAAE,IAAI,IAAG,KAAK,KAAK,EAAC,GAAE,KAAK,YAAY,KAAK,CAAC;AAAA,IAAC;AAAA,IAAC,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,IAAI,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,KAAK,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAK,IAAI,IAAE,GAAE,KAAK,GAAE,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE,IAAE,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,OAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAK,IAAI,IAAE,GAAE,KAAK,GAAE,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE,IAAE,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,OAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,GAAE,KAAK,OAAI,IAAE,GAAE,KAAK,OAAI,GAAE,KAAK,MAAG,GAAE,KAAK,GAAG,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE,IAAE,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,GAAE,SAAO,IAAE,GAAE,SAAO,GAAE,QAAM,GAAE,OAAM,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,KAAK,GAAG,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,GAAE,QAAM,GAAE,OAAM,GAAE,QAAQ;AAAA;AAAA,EAAE,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,OAAO,IAAE,EAAC,EAAE;AAAA,MAAM,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAE,EAAE,GAAE,GAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,OAAO,QAAQ,MAAM,+CAA+C,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAK,IAAI,IAAE,GAAE,KAAK,GAAE,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE,IAAE,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,OAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,EAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,OAAO,IAAI,IAAG,GAAE,OAAM,GAAE,QAAQ;AAAA;AAAA,EAAE,OAAO,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAE,KAAK,KAAG,GAAI,GAAE,GAAE,QAAQ;AAAA,IAAE,OAAO,IAAI,IAAG,GAAE,QAAM,KAAK,KAAG,KAAI,KAAK,YAAY,KAAK,CAAC;AAAA;AAAA,EAAE,OAAO,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,KAAK,GAAE,MAAK,GAAE,IAAI;AAAA,MAAE,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAE,IAAE,KAAE,GAAE,KAAK,GAAG,GAAE,GAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,OAAO,QAAQ,MAAM,4CAA4C,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,OAAO,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa,OAAI,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,KAAK,GAAE,MAAK,GAAE,IAAI;AAAA,MAAE,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI;AAAA,QAAC,MAAM,KAAE,IAAE,GAAE,QAAM,GAAE,SAAO,IAAE,KAAE;AAAA,QAAG,IAAG,KAAE;AAAA,UAAE,OAAO;AAAA,QAAE,MAAM,KAAE,KAAK,KAAK,EAAC;AAAA,QAAE,OAAO,GAAE,QAAM,MAAG,GAAE,QAAM,KAAE,MAAG,GAAE,KAAK;AAAA,OAAI,GAAE,GAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,OAAO,QAAQ,MAAM,kEAAkE,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,2BAA2B,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,MAAM,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,MAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,QAAQ,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,IAAI,KAAK,IAAI,IAAE,CAAC,GAAE,CAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,KAAK,IAAI,GAAE,OAAM,CAAC,GAAE,CAAC,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,KAAK,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,IAAI,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,KAAK,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,IAAI,KAAK,KAAK,KAAE,OAAI,KAAE,KAAG,CAAC,GAAE,CAAC;AAAA,IAAE,OAAO,KAAE,MAAG,IAAE,IAAE;AAAA;AAAA,EAAG,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAK,YAAY,GAAE,KAAK,KAAG,GAAE,KAAK,KAAG,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,YAAY,GAAE,OAAM,GAAE,OAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,KAAK,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa,OAAI,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,KAAK,MAAG,IAAE,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,GAAE,QAAM,GAAE,QAAM,IAAE,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,IAAI,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,IAAI,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,KAAK,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,KAAK,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,iBAAiB,CAAC,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,YAAY;AAAA,IAAE,OAAkB,OAAZ,aAA2B,OAAZ,YAAc,KAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,aAA2B,OAAZ,YAAc,KAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,IAAc,OAAZ,YAAc,KAAK,YAAY,SAAS,KAAe,OAAZ,aAA2B,OAAZ,aAAe,QAAQ,MAAM,uBAAuB,IAAG,GAAE;AAAA;AAAA,EAAG,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,EAAE,cAAa;AAAA,MAAI,OAAO,QAAQ,MAAM,+CAA+C,GAAE,MAAM,GAAE;AAAA,IAAK,MAAM,KAAE,KAAK,kBAAkB,GAAE,QAAQ;AAAA,IAAE,IAAc,GAAE,SAAS,SAAtB,YAAwC,GAAE,SAAS,SAAvB,aAAyC,GAAE,SAAS,SAAvB,WAA4B;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAK,OAAO,IAAI,IAAG,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,EAAE,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,IAAc,GAAE,SAAS,SAAtB,YAAwC,GAAE,SAAS,SAAvB,aAAyC,GAAE,SAAS,SAAvB,WAA4B;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAK,OAAO,IAAI,IAAG,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,EAAE,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,IAAc,GAAE,SAAS,SAAtB,YAAwC,GAAE,SAAS,SAAvB,aAAyC,GAAE,SAAS,SAAvB,WAA4B;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAK,OAAO,IAAI,IAAG,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAG,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,IAAc,GAAE,SAAS,SAAtB,YAAwC,GAAE,SAAS,SAAvB,aAAyC,GAAE,SAAS,SAAvB,WAA4B;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAK,OAAO,IAAI,IAAG,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,EAAE,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,IAAc,GAAE,SAAS,SAAtB,YAAwC,GAAE,SAAS,SAAvB,aAAyC,GAAE,SAAS,SAAvB,WAA4B;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAK,OAAO,IAAI,IAAG,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,EAAE,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,IAAc,GAAE,SAAS,SAAtB,YAAwC,GAAE,SAAS,SAAvB,aAAyC,GAAE,SAAS,SAAvB,WAA4B;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAK,OAAO,IAAI,IAAG,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,GAAG,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,IAAc,GAAE,SAAS,SAAtB,YAAwC,GAAE,SAAS,SAAvB,aAAyC,GAAE,SAAS,SAAvB,WAA4B;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAK,OAAO,IAAI,IAAG,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,EAAE,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,IAAc,GAAE,SAAS,SAAtB,YAAwC,GAAE,SAAS,SAAvB,aAAyC,GAAE,SAAS,SAAvB,WAA4B;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAK,OAAO,IAAI,IAAG,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAG,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,IAAc,GAAE,SAAS,SAAtB,YAAwC,GAAE,SAAS,SAAvB,aAAyC,GAAE,SAAS,SAAvB,WAA4B;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAK,OAAO,IAAI,IAAG,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,GAAG,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,OAAO,QAAQ,MAAM,uBAAuB,GAAE,SAAS,MAAM,GAAE;AAAA;AAAA,EAAK,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,IAAI,IAAG,GAAE,KAAK,IAAK,QAAG,KAAK,MAAM,EAAC,CAAE,GAAE,GAAE,QAAQ;AAAA,IAAE,MAAM,KAAE;AAAA,IAAE,OAAO,IAAI,IAAG,KAAK,MAAM,GAAE,KAAK,GAAE,GAAE,QAAQ;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,oBAAoB,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,0BAA0B,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,QAAQ,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,gBAAgB,GAAE;AAAA;AAAA,EAAK,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,YAAY,GAAE;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,kBAAkB,GAAE;AAAA;AAAA,EAAK,QAAQ,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,gBAAgB,GAAE;AAAA;AAAA,EAAK,MAAM,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,cAAc,GAAE;AAAA;AAAA,EAAK,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,oBAAoB,GAAE;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,kBAAkB,GAAE;AAAA;AAAA,EAAK,iBAAiB,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,KAAK,IAAG,KAAE,GAAE,KAAK,SAAO,IAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,EAAE,QAAM;AAAA,IAAE,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE,MAAK,KAAE,GAAE,iBAAiB,EAAC;AAAA,MAAE,IAAG,cAAa,KAAG;AAAA,QAAC,IAAG,KAAE,KAAG,MAAG,GAAE;AAAA,UAAc,OAAO,QAAQ,MAAM,iDAAiD,GAAE,MAAM,GAAE;AAAA,QAAK,MAAM,KAAE,GAAE,gBAAgB,EAAC,GAAE,KAAE,GAAE;AAAA,QAAU,OAAa,OAAP,OAAS,IAAI,IAAG,GAAE,IAAG,KAAK,YAAY,KAAK,CAAC,IAAS,OAAP,OAAS,IAAI,IAAG,IAAE,KAAK,YAAY,OAAO,CAAC,IAAS,OAAP,OAAS,IAAI,IAAG,GAAE,MAAM,GAAE,CAAC,GAAE,KAAK,YAAY,OAAO,CAAC,KAAG,QAAQ,MAAM,6BAA6B,sBAAqB,GAAE,MAAM,GAAE;AAAA,MAAK;AAAA,MAAC,OAAO,QAAQ,MAAM,WAAW,sBAAqB,GAAE,MAAM,GAAE;AAAA,IAAI;AAAA,IAAC,OAAO,QAAQ,MAAM,wDAAwD,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE;AAAA;AAAA,EAAK,oBAAoB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,4BAA4B,GAAE;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,KAAK,IAAG,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAE,GAAE,KAAK,SAAO,IAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,EAAE,QAAM;AAAA,IAAE,IAAG,EAAE,cAAa,QAAS,GAAE,KAAK,WAAX;AAAA,MAAkB,OAAO,QAAQ,MAAM,6CAA6C,GAAE,MAAM,GAAE;AAAA,IAAK,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE,MAAK,KAAE,GAAE,iBAAiB,EAAC;AAAA,MAAE,IAAG,cAAa,KAAG;AAAA,QAAC,MAAM,KAAE,KAAK,MAAM,GAAE,KAAK,EAAE,GAAE,KAAE,KAAK,MAAM,GAAE,KAAK,EAAE;AAAA,QAAE,IAAG,KAAE,KAAG,MAAG,GAAE,SAAO,KAAE,KAAG,MAAG,GAAE;AAAA,UAAO,OAAO,QAAQ,MAAM,WAAW,0BAAyB,GAAE,MAAM,GAAE;AAAA,QAAK,MAAM,KAAE,GAAE,SAAS,IAAE,IAAE,GAAE,EAAC;AAAA,QAAE,OAAc,OAAP,QAAU,QAAQ,MAAM,gDAAgD,GAAE,MAAM,GAAE,QAAM,IAAI,IAAG,IAAE,KAAK,YAAY,OAAO,CAAC;AAAA,MAAC;AAAA,MAAC,OAAO,QAAQ,MAAM,WAAW,sBAAqB,GAAE,MAAM,GAAE;AAAA,IAAI;AAAA,IAAC,OAAO,QAAQ,MAAM,kDAAkD,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,gBAAgB,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,KAAK;AAAA,IAAG,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE,MAAK,KAAE,GAAE,iBAAiB,EAAC;AAAA,MAAE,OAAO,cAAa,MAAG,IAAI,IAAG,GAAE,oBAAmB,KAAK,YAAY,KAAK,CAAC,KAAG,QAAQ,MAAM,WAAW,sBAAqB,GAAE,MAAM,GAAE;AAAA,IAAK;AAAA,IAAC,OAAO,QAAQ,MAAM,uDAAuD,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,gBAAgB,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,KAAK;AAAA,IAAG,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE,MAAK,KAAE,GAAE,iBAAiB,EAAC;AAAA,MAAE,OAAO,cAAa,MAAG,IAAI,IAAG,GAAE,eAAc,KAAK,YAAY,KAAK,CAAC,KAAG,QAAQ,MAAM,WAAW,sBAAqB,GAAE,MAAM,GAAE;AAAA,IAAK;AAAA,IAAC,OAAO,QAAQ,MAAM,uDAAuD,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,iBAAiB,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,KAAK;AAAA,IAAG,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE,MAAK,KAAE,GAAE,iBAAiB,EAAC;AAAA,MAAE,OAAO,cAAa,MAAG,IAAI,IAAG,GAAE,aAAY,KAAK,YAAY,KAAK,CAAC,KAAG,QAAQ,MAAM,WAAW,sBAAqB,GAAE,MAAM,GAAE;AAAA,IAAK;AAAA,IAAC,OAAO,QAAQ,MAAM,wDAAwD,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE;AAAA;AAAA,EAAK,iBAAiB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,yBAAyB,GAAE;AAAA;AAAA,EAAK,oBAAoB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,4BAA4B,GAAE;AAAA;AAAA,EAAK,yBAAyB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,iCAAiC,GAAE;AAAA;AAAA,EAAK,iBAAiB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,yBAAyB,GAAE;AAAA;AAAA,EAAK,kBAAkB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,0BAA0B,GAAE;AAAA;AAAA,EAAK,4BAA4B,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,oCAAoC,GAAE;AAAA;AAAA,EAAK,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,KAAK,IAAG,KAAE,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,GAAE,KAAM,GAAE,KAAK,WAAX,IAAkB,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,EAAE,QAAM,GAAE,KAAM,GAAE,KAAK,WAAX,IAAkB,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,EAAE,OAAK,KAAK,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC,EAAE;AAAA,IAAK,IAAO,GAAE,WAAN;AAAA,MAAa,OAAO,QAAQ,MAAM,iDAAiD,GAAE,MAAM,GAAE;AAAA,IAAK,IAAG,EAAE,cAAa,QAAS,GAAE,KAAK,WAAX;AAAA,MAAkB,OAAO,QAAQ,MAAM,8CAA8C,GAAE,MAAM,GAAE;AAAA,IAAK,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE,MAAK,KAAE,GAAE,iBAAiB,EAAC;AAAA,MAAE,IAAG,cAAa,KAAG;AAAA,QAAC,MAAM,KAAE,GAAE,gBAAgB,CAAC,GAAE,KAAE,KAAK,MAAM,GAAE,KAAK,EAAE,GAAE,KAAE,KAAK,MAAM,GAAE,KAAK,EAAE;AAAA,QAAE,OAAO,KAAE,KAAG,MAAG,GAAE,MAAI,KAAE,KAAG,MAAG,GAAE,MAAI,QAAQ,MAAM,WAAW,0BAAyB,GAAE,MAAM,GAAE,SAAO,GAAE,SAAS,IAAE,IAAE,GAAE,IAAE,MAAM,KAAK,EAAC,CAAC,GAAE;AAAA,MAAK;AAAA,MAAC,OAAO,QAAQ,MAAM,WAAW,sBAAqB,GAAE,MAAM,GAAE;AAAA,IAAI;AAAA,IAAC,OAAO,QAAQ,MAAM,mDAAmD,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,gBAAgB,IAAE,EAAC;AAAA,IAAE,OAAO,GAAE,YAAY,EAAC,EAAE,MAAM,WAAW,KAAK,MAAK,GAAE,SAAQ,EAAC;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,gBAAgB,IAAE,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,MAAM,KAAE,KAAK,KAAK,eAAe,IAAE,EAAC,GAAE,KAAE,GAAE,MAAM,WAAW,KAAK,MAAK,GAAE,SAAQ,EAAC;AAAA,IAAE,OAAO,cAAa,OAAI,cAAa,QAAK,GAAE,QAAM,GAAE,QAAO,GAAE,iBAAiB,OAAI,GAAE,MAAM,aAAa,KAAK,MAAK,IAAE,GAAE,SAAQ,EAAC,GAAE;AAAA;AAAA,EAAK,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,gBAAgB,IAAE,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,MAAM,KAAE,KAAK,KAAK,eAAe,IAAE,EAAC,GAAE,KAAE,GAAE,MAAM,WAAW,KAAK,MAAK,GAAE,SAAQ,EAAC,GAAE,KAAE,IAAI,IAAG,GAAE,OAAM,GAAE,QAAQ;AAAA,IAAE,OAAO,cAAa,OAAI,cAAa,QAAK,GAAE,SAAO,GAAE,QAAO,GAAE,iBAAiB,OAAI,GAAE,MAAM,aAAa,KAAK,MAAK,IAAE,GAAE,SAAQ,EAAC,GAAE;AAAA;AAAA,EAAE,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,gBAAgB,IAAE,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,MAAM,KAAE,KAAK,KAAK,eAAe,IAAE,EAAC,GAAE,KAAE,GAAE,MAAM,WAAW,KAAK,MAAK,GAAE,SAAQ,EAAC,GAAE,KAAE,IAAI,IAAG,GAAE,OAAM,GAAE,QAAQ;AAAA,IAAE,OAAO,cAAa,OAAI,cAAa,QAAK,GAAE,SAAO,GAAE,QAAO,GAAE,iBAAiB,OAAI,GAAE,MAAM,aAAa,KAAK,MAAK,IAAE,GAAE,SAAQ,EAAC,GAAE;AAAA;AAAA,EAAE,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,gBAAgB,IAAE,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,MAAM,KAAE,KAAK,KAAK,eAAe,IAAE,EAAC,GAAE,KAAE,GAAE,MAAM,WAAW,KAAK,MAAK,GAAE,SAAQ,EAAC,GAAE,KAAE,IAAI,IAAG,GAAE,OAAM,GAAE,QAAQ;AAAA,IAAE,OAAO,cAAa,OAAI,cAAa,QAAK,GAAE,QAAM,KAAK,IAAI,GAAE,OAAM,GAAE,KAAK,IAAG,GAAE,iBAAiB,OAAI,GAAE,MAAM,aAAa,KAAK,MAAK,IAAE,GAAE,SAAQ,EAAC,GAAE;AAAA;AAAA,EAAE,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,gBAAgB,IAAE,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,MAAM,KAAE,KAAK,KAAK,eAAe,IAAE,EAAC,GAAE,KAAE,GAAE,MAAM,WAAW,KAAK,MAAK,GAAE,SAAQ,EAAC,GAAE,KAAE,IAAI,IAAG,GAAE,OAAM,GAAE,QAAQ;AAAA,IAAE,OAAO,cAAa,OAAI,cAAa,QAAK,GAAE,QAAM,KAAK,IAAI,GAAE,OAAM,GAAE,KAAK,IAAG,GAAE,iBAAiB,OAAI,GAAE,MAAM,aAAa,KAAK,MAAK,IAAE,GAAE,SAAQ,EAAC,GAAE;AAAA;AAAA,EAAE,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,gBAAgB,IAAE,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,MAAM,KAAE,KAAK,KAAK,eAAe,IAAE,EAAC,GAAE,KAAE,GAAE,MAAM,WAAW,KAAK,MAAK,GAAE,SAAQ,EAAC,GAAE,KAAE,IAAI,IAAG,GAAE,OAAM,GAAE,QAAQ;AAAA,IAAE,OAAO,cAAa,OAAI,cAAa,QAAK,GAAE,QAAM,GAAE,QAAM,GAAE,QAAO,GAAE,iBAAiB,OAAI,GAAE,MAAM,aAAa,KAAK,MAAK,IAAE,GAAE,SAAQ,EAAC,GAAE;AAAA;AAAA,EAAE,QAAQ,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,gBAAgB,IAAE,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,MAAM,KAAE,KAAK,KAAK,eAAe,IAAE,EAAC,GAAE,KAAE,GAAE,MAAM,WAAW,KAAK,MAAK,GAAE,SAAQ,EAAC,GAAE,KAAE,IAAI,IAAG,GAAE,OAAM,GAAE,QAAQ;AAAA,IAAE,OAAO,cAAa,OAAI,cAAa,QAAK,GAAE,QAAM,GAAE,QAAM,GAAE,QAAO,GAAE,iBAAiB,OAAI,GAAE,MAAM,aAAa,KAAK,MAAK,IAAE,GAAE,SAAQ,EAAC,GAAE;AAAA;AAAA,EAAE,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,gBAAgB,IAAE,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,MAAM,KAAE,KAAK,KAAK,eAAe,IAAE,EAAC,GAAE,KAAE,GAAE,MAAM,WAAW,KAAK,MAAK,GAAE,SAAQ,EAAC,GAAE,KAAE,IAAI,IAAG,GAAE,OAAM,GAAE,QAAQ;AAAA,IAAE,OAAO,cAAa,OAAI,cAAa,QAAK,GAAE,QAAM,GAAE,QAAM,GAAE,QAAO,GAAE,iBAAiB,OAAI,GAAE,MAAM,aAAa,KAAK,MAAK,IAAE,GAAE,SAAQ,EAAC,GAAE;AAAA;AAAA,EAAE,cAAc,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,cAAa,QAAK,KAAE,GAAE;AAAA,IAAO,MAAM,KAAE,KAAK,KAAK,gBAAgB,IAAE,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,IAAI,KAAE,GAAE,KAAK;AAAA,IAAG,MAAM,KAAE,KAAK,KAAK,eAAe,IAAE,EAAC,GAAE,KAAE,GAAE,MAAM,WAAW,KAAK,MAAK,GAAE,SAAQ,EAAC,GAAE,KAAE,IAAI,IAAG,GAAE,OAAM,GAAE,QAAQ;AAAA,IAAE,OAAO,cAAa,OAAI,cAAa,QAAK,GAAE,QAAM,GAAE,QAAO,GAAE,iBAAiB,OAAI,GAAE,MAAM,aAAa,KAAK,MAAK,IAAE,GAAE,SAAQ,EAAC,GAAE;AAAA;AAAA,EAAE,yBAAyB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,iCAAiC,GAAE;AAAA;AAAA,EAAK,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,oBAAoB,GAAE;AAAA;AAAA,EAAK,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,oBAAoB,GAAE;AAAA;AAAA,EAAK,QAAQ,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,gBAAgB,GAAE;AAAA;AAAA,EAAK,QAAQ,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,gBAAgB,GAAE;AAAA;AAAA,EAAK,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,oBAAoB,GAAE;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE;AAAA;AAAA,EAAK,cAAc,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,sBAAsB,GAAE;AAAA;AAAA,EAAK,cAAc,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,sBAAsB,GAAE;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,kBAAkB,GAAE;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,kBAAkB,GAAE;AAAA;AAAA,EAAK,eAAe,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,uBAAuB,GAAE;AAAA;AAAA,EAAK,eAAe,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,uBAAuB,GAAE;AAAA;AAAA,EAAK,eAAe,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,uBAAuB,GAAE;AAAA;AAAA,EAAK,cAAc,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,cAAc,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,gBAAgB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,oBAAoB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,mBAAmB,GAAE;AAAA;AAAA,EAAK,oBAAoB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,4BAA4B,GAAE;AAAA;AAAA,EAAK,oBAAoB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,4BAA4B,GAAE;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,mBAAmB,GAAE;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,mBAAmB,GAAE;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,mBAAmB,GAAE;AAAA;AAAA,EAAK,cAAc,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,sBAAsB,GAAE;AAAA;AAAA,EAAK,iBAAiB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,yBAAyB,GAAE;AAAA;AAAA,EAAK,sBAAsB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,8BAA8B,GAAE;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,mBAAmB,GAAE;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,mBAAmB,GAAE;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,mBAAmB,GAAE;AAAA;AAAA,EAAK,oBAAoB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,4BAA4B,GAAE;AAAA;AAAA,EAAK,oBAAoB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,4BAA4B,GAAE;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,kBAAkB,GAAE;AAAA;AAAA,EAAK,eAAe,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,uBAAuB,GAAE;AAAA;AAAA,EAAK,mBAAmB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,2BAA2B,GAAE;AAAA;AAAA,EAAK,iBAAiB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,yBAAyB,GAAE;AAAA;AAAA,EAAK,kBAAkB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,0BAA0B,GAAE;AAAA;AAAA,EAAK,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,mBAAmB,GAAE;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE;AAAA;AAAA,EAAK,gBAAgB,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,wBAAwB,GAAE;AAAA;AAAA,EAAK,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,iBAAiB,GAAE;AAAA;AAAA,EAAK,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,QAAQ,MAAM,iBAAiB,GAAE;AAAA;AAAK;AAAC,IAAM,MAAG,EAAC,MAAK,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,MAAK,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,MAAK,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC;AAAtJ,IAAwJ,MAAG,EAAC,QAAO,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,QAAO,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,QAAO,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,QAAO,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,QAAO,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,QAAO,CAAC,GAAE,GAAE,EAAE,GAAE,SAAQ,CAAC,GAAE,GAAE,EAAE,GAAE,SAAQ,CAAC,GAAE,GAAE,EAAE,GAAE,QAAO,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,GAAE,CAAC,GAAE,QAAO,CAAC,GAAE,GAAE,EAAE,GAAE,SAAQ,CAAC,GAAE,GAAE,EAAE,GAAE,SAAQ,CAAC,GAAE,GAAE,EAAE,GAAE,QAAO,CAAC,GAAE,GAAE,EAAE,GAAE,SAAQ,CAAC,GAAE,GAAE,EAAE,GAAE,SAAQ,CAAC,GAAE,GAAE,EAAE,EAAC;AAAA;AAAE,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI;AAAA,IAAE,MAAM,GAAE,KAAK,MAAU,MAAN,OAAQ,KAAE,CAAC,GAAE,KAAK,aAAW,IAAI,KAAG,KAAK,WAAW,UAAU,KAAK,GAAG,GAAE,KAAK,WAAgB,KAAQ,MAAN,OAAa,YAAE,GAAE,MAAM,OAAjC,QAA8C,OAAJ,YAAM,KAAE,IAAI,KAAG,KAAK,WAAS,IAAI,IAAG,IAAI,GAAE,KAAK,WAAS,EAAC,MAAK,KAAK,YAAY,IAAG,IAAI,GAAE,KAAI,KAAK,YAAY,IAAG,GAAG,GAAE,KAAI,KAAK,YAAY,IAAG,GAAG,GAAE,KAAI,KAAK,YAAY,IAAG,GAAG,GAAE,KAAI,KAAK,YAAY,IAAG,GAAG,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,OAAM,KAAK,YAAY,IAAG,KAAK,GAAE,SAAQ,KAAK,YAAY,IAAG,OAAO,GAAE,SAAQ,KAAK,YAAY,IAAG,OAAO,GAAE,SAAQ,KAAK,YAAY,IAAG,OAAO,GAAE,SAAQ,KAAK,YAAY,IAAG,OAAO,GAAE,SAAQ,KAAK,YAAY,IAAG,OAAO,GAAE,SAAQ,KAAK,YAAY,IAAG,OAAO,GAAE,SAAQ,KAAK,YAAY,IAAG,OAAO,GAAE,SAAQ,KAAK,YAAY,IAAG,OAAO,GAAE,SAAQ,KAAK,YAAY,IAAG,OAAO,EAAC;AAAA;AAAA,EAAE,gBAAgB,CAAC,IAAE;AAAA,IAAC,IAAI,IAAE;AAAA,IAAE,MAAM,MAAU,MAAU,KAAE,KAAK,QAAQ,YAAY,EAAC,OAApC,QAAiD,OAAJ,YAAW,YAAE,GAAE,WAAtE,QAAuF,OAAJ,YAAM,KAAE;AAAA,IAAK,IAAU,OAAP;AAAA,MAAS,OAAO;AAAA,IAAK,IAAG,cAAa;AAAA,MAAG,OAAO,GAAE;AAAA,IAAM,IAAG,cAAa;AAAA,MAAG,OAAO,MAAM,KAAK,GAAE,IAAI;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,OAAO,MAAM,KAAK,GAAE,IAAI;AAAA,IAAE,IAAG,cAAa,OAAI,GAAE,oBAAoB,IAAE;AAAA,MAAC,IAAW,GAAE,SAAS,OAAO,SAA1B;AAAA,QAA+B,OAAO,MAAM,KAAK,IAAI,YAAY,GAAE,QAAO,GAAE,QAAO,GAAE,SAAS,KAAK,CAAC;AAAA,MAAE,IAAW,GAAE,SAAS,OAAO,SAA1B;AAAA,QAA+B,OAAO,MAAM,KAAK,IAAI,WAAW,GAAE,QAAO,GAAE,QAAO,GAAE,SAAS,KAAK,CAAC;AAAA,MAAE,IAAW,GAAE,SAAS,OAAO,SAA1B;AAAA,QAA+B,OAAO,MAAM,KAAK,IAAI,aAAa,GAAE,QAAO,GAAE,QAAO,GAAE,SAAS,KAAK,CAAC;AAAA,IAAC;AAAA,IAAC,OAAO,QAAQ,MAAM,oCAAoC,GAAE,SAAS,MAAM,GAAE;AAAA;AAAA,EAAK,OAAO,CAAC,IAAE;AAAA,KAAE,KAAQ,MAAN,OAAQ,KAAE,CAAC,GAAG,aAAW,KAAK,cAAc,GAAE,WAAU,KAAK,OAAO,GAAE,KAAK,gBAAgB,KAAK,KAAI,KAAK,OAAO;AAAA;AAAA,EAAE,kBAAkB,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,QAAQ,MAAM;AAAA,KAAG,KAAQ,MAAN,OAAQ,KAAE,CAAC,GAAG,aAAW,KAAK,cAAc,GAAE,WAAU,EAAC,GAAE,KAAK,gBAAgB,KAAK,KAAI,EAAC;AAAA,IAAE,MAAM,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,IAAG,CAAC;AAAA,MAAE,OAAO,KAAK,QAAQ,MAAM,YAAY,cAAa;AAAA,IAAE,IAAa,OAAO,MAAjB;AAAA,MAAmB,KAAE,CAAC,IAAE,GAAE,CAAC;AAAA,IAAM;AAAA,MAAC,IAAO,GAAE,WAAN;AAAA,QAAa,OAAO,KAAK,QAAQ,MAAM,wBAAwB;AAAA,MAAM,GAAE,WAAN,IAAa,KAAE,CAAC,GAAE,IAAG,GAAE,CAAC,IAAM,GAAE,WAAN,IAAa,KAAE,CAAC,GAAE,IAAG,GAAE,IAAG,CAAC,IAAE,GAAE,SAAO,MAAI,KAAE,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,EAAE;AAAA;AAAA,IAAG,MAAM,KAAE,GAAE,IAAG,KAAE,GAAE,IAAG,KAAE,GAAE,IAAG,KAAE,KAAK,YAAY,OAAO;AAAA,IAAE,GAAE,YAAY,mBAAkB,IAAI,IAAG,IAAE,EAAC,CAAC;AAAA,IAAE,WAAU,MAAK;AAAA,MAAE,WAAU,MAAK,GAAE,KAAG;AAAA,QAAC,MAAM,KAAE,GAAE,IAAG;AAAA,QAAG,GAAE,UAAU,QAAS,QAAG;AAAA,UAAC,IAAI;AAAA,UAAE,MAAM,KAAE,GAAE;AAAA,UAAK,IAAS,MAAN,OAAa,YAAE,GAAE,YAAW;AAAA,YAAC,IAAI,KAAE,MAAK,KAAE;AAAA,YAAK,WAAU,MAAK,GAAE;AAAA,cAAuB,GAAE,SAAd,YAAmB,KAAE,GAAE,QAAgB,GAAE,SAAZ,YAAmB,KAAE,GAAE;AAAA,YAAO,IAAG,MAAG,MAAG,MAAG;AAAA,cAAE,IAAY,GAAE,YAAN,aAAwB,GAAE,eAAN,WAAiB;AAAA,gBAAC,MAAM,KAAE,IAAI,IAAG,GAAE,SAAQ,KAAK,YAAY,GAAE,IAAI,GAAE,GAAE,aAAmB,KAAE,GAAE,QAAQ,UAApB,QAAoC,OAAJ,YAAM,KAAE,IAAI;AAAA,gBAAE,GAAE,QAAM;AAAA,cAAC,EAAM;AAAA,gBAAS,GAAE,YAAN,YAAc,GAAE,QAAM,IAAI,IAAG,GAAE,SAAQ,KAAK,YAAY,GAAE,IAAI,CAAC,IAAE,GAAE,QAAM,IAAI,IAAG,IAAE,KAAK,YAAY,GAAE,IAAI,CAAC;AAAA,UAAC;AAAA,SAAG;AAAA,MAAC;AAAA,IAAC,SAAQ,KAAE,EAAE,KAAE,IAAE,EAAE;AAAA,MAAE,SAAQ,KAAE,EAAE,KAAE,IAAE,EAAE;AAAA,QAAE,SAAQ,KAAE,EAAE,KAAE,IAAE,EAAE;AAAA,UAAE,GAAE,YAAY,iBAAgB,IAAI,IAAG,CAAC,IAAE,IAAE,EAAC,GAAE,KAAK,YAAY,OAAO,CAAC,CAAC,GAAE,KAAK,mBAAmB,IAAE,CAAC,IAAE,IAAE,EAAC,GAAE,EAAC;AAAA;AAAA,EAAE,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,IAAG,cAAa;AAAA,MAAE,OAAO,KAAK,eAAe,GAAE,OAAM,EAAC;AAAA,IAAE,IAAG,cAAa,KAAG;AAAA,MAAC,IAAG,GAAE,WAAU;AAAA,QAAC,MAAM,KAAE,KAAK,eAAe,GAAE,WAAU,EAAC;AAAA,QAAE,IAAG,EAAE,cAAa;AAAA,UAAI,MAAM,IAAI,MAAM,4BAA4B;AAAA,QAAE,IAAG,CAAC,GAAE;AAAA,UAAM,OAAO;AAAA,MAAI;AAAA,MAAC,OAAO,IAAG;AAAA,IAAS;AAAA,IAAC,IAAG,cAAa;AAAA,MAAG,OAAO,IAAG;AAAA,IAAa,IAAG,cAAa;AAAA,MAAE,KAAK,KAAK,IAAE,EAAC;AAAA,IAAO,SAAG,cAAa;AAAA,MAAE,KAAK,KAAK,IAAE,EAAC;AAAA,IAAO,SAAG,cAAa;AAAA,MAAE,KAAK,OAAO,IAAE,EAAC;AAAA,IAAO,SAAG,cAAa;AAAA,MAAE,KAAK,UAAU,IAAE,EAAC;AAAA,IAAM;AAAA,MAAC,IAAG,cAAa;AAAA,QAAE,OAAO,KAAK,IAAI,IAAE,EAAC;AAAA,MAAE,IAAG,cAAa;AAAA,QAAE,OAAO,KAAK,QAAQ,IAAE,EAAC;AAAA,MAAE,IAAG,cAAa;AAAA,QAAE,OAAO,KAAK,KAAK,IAAE,EAAC;AAAA,MAAE,IAAG,cAAa;AAAA,QAAE,OAAO,KAAK,OAAO,IAAE,EAAC;AAAA,MAAE,IAAG,cAAa;AAAA,QAAE,OAAO,KAAK,MAAM,IAAE,EAAC;AAAA,MAAE,IAAG,cAAa,IAAE;AAAA,QAAC,MAAM,KAAE,GAAE,MAAM;AAAA,QAAE,OAAO,GAAE,sBAAoB,GAAE,qBAAoB,KAAK,gBAAgB,GAAE,MAAK,EAAC;AAAA,MAAC;AAAA,MAAC,IAAG,cAAa;AAAA,QAAE,KAAK,QAAQ,IAAE,EAAC;AAAA,MAAO,SAAG,cAAa;AAAA,QAAE,KAAK,WAAW,IAAE,EAAC;AAAA,MAAM;AAAA,QAAC,IAAG,cAAa;AAAA,UAAG,OAAO;AAAA,QAAK,IAAG,cAAa,IAAE;AAAA,UAAC,MAAM,KAAE,GAAE;AAAA,UAAY,GAAE,YAAY,EAAC,MAAtB,QAAyB,GAAE,YAAY,IAAE,IAAI,IAAG,GAAE,KAAK,YAAY,KAAK,CAAC,CAAC;AAAA,QAAC,EAAM,SAAG,cAAa;AAAA,UAAE,KAAK,MAAM,IAAE,EAAC;AAAA,QAAM;AAAA,UAAC,IAAG,cAAa;AAAA,YAAE,OAAO;AAAA,UAAK,IAAG,cAAa;AAAA,YAAG,OAAO;AAAA,UAAK,QAAQ,MAAM,2BAA0B,IAAE,QAAQ,GAAE,MAAM;AAAA;AAAA;AAAA;AAAA,IAAI,OAAO;AAAA;AAAA,EAAK,cAAc,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,cAAa,MAAG,KAAK,cAAc,IAAE,EAAC,IAAE,cAAa,MAAG,KAAK,aAAa,IAAE,EAAC,IAAE,cAAa,MAAG,KAAK,cAAc,IAAE,EAAC,IAAE,cAAa,MAAG,KAAK,UAAU,IAAE,EAAC,IAAE,cAAa,MAAG,KAAK,YAAY,IAAE,EAAC,IAAE,cAAa,MAAG,KAAK,WAAW,IAAE,EAAC,IAAE,cAAa,MAAG,KAAK,aAAa,IAAE,EAAC,IAAE,cAAa,MAAG,KAAK,aAAa,IAAE,EAAC,KAAG,QAAQ,MAAM,2BAA0B,IAAE,QAAQ,GAAE,MAAM,GAAE;AAAA;AAAA,EAAM,WAAW,CAAC,IAAE;AAAA,IAAC,IAAI;AAAA,IAAE,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,WAAW,YAAY,EAAC;AAAA,MAAE,IAAU,OAAP;AAAA,QAAS,OAAO;AAAA,IAAC;AAAA,IAAC,IAAI,MAAU,KAAE,KAAK,SAAS,SAAxB,QAAsC,OAAJ,YAAM,KAAE;AAAA,IAAK,OAAc,OAAP,SAAW,KAAE,KAAK,WAAW,kBAAkB,EAAC,IAAG;AAAA;AAAA,EAAE,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,WAAU,MAAK,IAAE;AAAA,MAAC,MAAM,KAAE,GAAE,KAAG,KAAE,KAAK,WAAW,gBAAgB,EAAC;AAAA,MAAS,OAAP,QAAiB,GAAE,SAAT,SAAgB,GAAE,OAAK,KAAK,YAAY,KAAK,IAAW,GAAE,KAAK,SAAf,SAA6B,GAAE,KAAK,SAAf,SAA6B,GAAE,KAAK,SAAf,SAA6B,GAAE,KAAK,SAAf,QAAoB,GAAE,YAAY,IAAE,IAAI,IAAG,IAAE,GAAE,IAAI,CAAC,IAAW,GAAE,KAAK,SAAhB,SAAqB,GAAE,YAAY,IAAE,IAAI,IAAG,KAAE,IAAE,GAAE,GAAE,IAAI,CAAC,IAAW,GAAE,KAAK,SAAhB,UAA+B,GAAE,KAAK,SAAhB,UAA+B,GAAE,KAAK,SAAhB,UAAgC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,WAAiC,GAAE,KAAK,SAAjB,UAAsB,GAAE,YAAY,IAAE,IAAI,IAAG,IAAE,GAAE,IAAI,CAAC,IAAE,QAAQ,MAAM,6BAA6B,IAAG,KAAG,QAAQ,MAAM,YAAY,kCAAiC;AAAA,IAAC;AAAA;AAAA,EAAE,kBAAkB,CAAC,IAAE,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,CAAC,GAAE,GAAE,CAAC;AAAA,IAAE,WAAU,MAAK,GAAE,KAAK;AAAA,MAAW,IAAsB,GAAE,SAArB,kBAA0B;AAAA,QAAC,IAAG,GAAE,MAAM,SAAO,GAAE;AAAA,UAAC,MAAM,KAAE,GAAE,iBAAiB,GAAE,MAAM,EAAE;AAAA,UAAE,GAAE,KAAG,cAAa,MAAG,GAAE,QAAM,SAAS,GAAE,MAAM,EAAE;AAAA,QAAC;AAAA,QAAC,IAAG,GAAE,MAAM,SAAO,GAAE;AAAA,UAAC,MAAM,KAAE,GAAE,iBAAiB,GAAE,MAAM,EAAE;AAAA,UAAE,GAAE,KAAG,cAAa,MAAG,GAAE,QAAM,SAAS,GAAE,MAAM,EAAE;AAAA,QAAC;AAAA,QAAC,IAAG,GAAE,MAAM,SAAO,GAAE;AAAA,UAAC,MAAM,KAAE,GAAE,iBAAiB,GAAE,MAAM,EAAE;AAAA,UAAE,GAAE,KAAG,cAAa,MAAG,GAAE,QAAM,SAAS,GAAE,MAAM,EAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC,MAAM,KAAE,KAAK,YAAY,OAAO,GAAE,KAAE,KAAK,YAAY,KAAK;AAAA,IAAE,GAAE,YAAY,mBAAkB,IAAI,IAAG,IAAE,EAAC,CAAC;AAAA,IAAE,MAAM,KAAE,GAAE,IAAG,KAAE,GAAE,IAAG,KAAE,GAAE;AAAA,IAAG,SAAQ,KAAE,GAAE,KAAE,EAAE,KAAE,IAAE,EAAE;AAAA,MAAE,SAAQ,KAAE,EAAE,KAAE,IAAE,EAAE;AAAA,QAAE,SAAQ,KAAE,EAAE,KAAE,IAAE,EAAE,IAAE,EAAE,IAAE;AAAA,UAAC,MAAM,KAAE,CAAC,IAAE,IAAE,EAAC,GAAE,KAAE,CAAC,KAAE,GAAE,KAAG,GAAE,IAAG,KAAE,GAAE,KAAG,GAAE,IAAG,KAAE,GAAE,KAAG,GAAE,EAAE;AAAA,UAAE,GAAE,YAAY,wBAAuB,IAAI,IAAG,IAAE,EAAC,CAAC,GAAE,GAAE,YAAY,yBAAwB,IAAI,IAAG,IAAE,EAAC,CAAC,GAAE,GAAE,YAAY,2BAA0B,IAAI,IAAG,IAAE,EAAC,CAAC,GAAE,KAAK,cAAc,IAAE,EAAC;AAAA,QAAC;AAAA;AAAA,EAAE,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,WAAU,MAAK,GAAE,KAAK;AAAA,MAAK,WAAU,MAAK,GAAE;AAAA,QAAW,IAAe,GAAE,SAAd,WAAmB;AAAA,UAAC,MAAM,KAAE,IAAI,GAAE,SAAQ,KAAE,GAAE,YAAY,EAAC;AAAA,UAAW,OAAJ,aAAO,GAAE,UAAU,IAAI,GAAE,MAAK,EAAC;AAAA,QAAC;AAAA,IAAC,KAAK,gBAAgB,GAAE,KAAK,MAAK,EAAC;AAAA;AAAA,EAAE,eAAe,CAAC,IAAE,IAAE;AAAA,IAAC,MAAK,cAAa;AAAA,MAAI,KAAE,GAAE;AAAA,IAAM,OAAO,cAAa,MAAG,GAAE,QAAM,QAAQ,MAAM,yBAAwB,IAAE,QAAO,GAAE,IAAI,GAAE;AAAA;AAAA,EAAM,eAAe,CAAC,IAAE,IAAE;AAAA,IAAC,WAAU,MAAK,IAAE;AAAA,MAAC,IAAG,cAAa,OAAM;AAAA,QAAC,MAAM,KAAE,GAAE,MAAM,GAAE,KAAE,KAAK,gBAAgB,IAAE,EAAC;AAAA,QAAE,IAAG;AAAA,UAAE,OAAO;AAAA,QAAE;AAAA,MAAQ;AAAA,MAAC,MAAM,KAAE,KAAK,cAAc,IAAE,EAAC;AAAA,MAAE,IAAG;AAAA,QAAE,OAAO;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,MAAM;AAAA,IAAE,GAAE,sBAAoB,GAAE;AAAA,IAAK,MAAM,KAAE,GAAE,YAAY,GAAE,IAAI;AAAA,IAAE,IAAG,IAAE;AAAA,MAAC,SAAQ,KAAE,EAAE,KAAE,GAAE,KAAK,KAAK,QAAO,EAAE,IAAE;AAAA,QAAC,MAAM,KAAE,GAAE,KAAK,KAAK,KAAG,KAAE,KAAK,eAAe,GAAE,KAAK,KAAG,EAAC;AAAA,QAAE,GAAE,YAAY,GAAE,MAAK,IAAE,EAAC;AAAA,MAAC;AAAA,MAAC,KAAK,gBAAgB,GAAE,KAAK,MAAK,EAAC;AAAA,IAAC,EAAM,SAAG,GAAE;AAAA,MAAU,KAAK,qBAAqB,IAAE,EAAC;AAAA,IAAM;AAAA,MAAC,KAAK,YAAY,GAAE,IAAI,KAAG,KAAK,YAAY,IAAE,EAAC;AAAA;AAAA;AAAA,EAAG,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,gBAAgB,GAAE,UAAS,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,IAAE,KAAS,GAAE,aAAT,OAAkB,GAAE,iBAAiB,MAAG,GAAE,MAAM,UAAQ,QAAQ,MAAM,YAAY,4BAA2B,GAAE,MAAM,IAAS,GAAE,aAAT,OAAkB,GAAE,iBAAiB,MAAG,GAAE,MAAM,UAAQ,QAAQ,MAAM,YAAY,4BAA2B,GAAE,MAAM,IAAE,QAAQ,MAAM,8BAA8B,GAAE,kBAAkB,GAAE,MAAM,IAAE,QAAQ,MAAM,YAAY,sBAAqB,GAAE,MAAM;AAAA;AAAA,EAAE,gBAAgB,CAAC,IAAE,IAAE;AAAA,IAAC,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,gBAAgB,IAAE,EAAC,GAAE,KAAE,GAAE,YAAY,EAAC;AAAA,MAAE,OAAc,OAAP,QAAU,QAAQ,MAAM,YAAY,sBAAqB,GAAE,MAAM,GAAE,QAAM,GAAE,MAAM,WAAW,MAAK,GAAE,SAAQ,EAAC;AAAA,IAAC;AAAA,IAAC,IAAG,cAAa,KAAG;AAAA,MAAC,IAAS,GAAE,aAAR,KAAiB;AAAA,QAAC,MAAM,KAAE,KAAK,iBAAiB,GAAE,OAAM,EAAC;AAAA,QAAE,OAAO,cAAa,MAAG,GAAE,UAAU,WAAW,MAAK,GAAE,SAAQ,EAAC,KAAG,QAAQ,MAAM,YAAY,GAAE,gCAAgC,GAAE,MAAM,GAAE;AAAA,MAAK;AAAA,MAAC,IAAS,GAAE,aAAR,KAAiB;AAAA,QAAC,MAAM,KAAE,KAAK,iBAAiB,GAAE,OAAM,EAAC;AAAA,QAAE,OAAO,IAAI,IAAG,EAAC;AAAA,MAAC;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,OAAO,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE,MAAK,KAAE,SAAQ,KAAE;AAAA,IAAK,IAAG,GAAE,oBAAoB,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,iBAAiB,GAAE,UAAS,EAAC,GAAE,KAAE,KAAK,eAAe,GAAE,OAAM,EAAC,GAAE,KAAE,GAAE;AAAA,MAAS,IAAS,OAAN,KAAQ;AAAA,QAAC,IAAG,cAAa,OAAI,cAAa,OAAI,cAAa,KAAG;AAAA,UAAC,IAAG,cAAa,OAAI,cAAa,OAAI,cAAa,OAAI,GAAE,KAAK,WAAS,GAAE,KAAK;AAAA,YAAO,OAAO,KAAK,GAAE,KAAK,IAAI,GAAE,IAAI;AAAA,UAAE,QAAQ,MAAM,4BAA4B,GAAE,MAAM;AAAA,QAAC,EAAM,SAAG,cAAa,OAAI,cAAa,OAAI,GAAE,OAAO,aAAW,GAAE,UAAQ,GAAE,OAAO,aAAW,GAAE;AAAA,UAAO,OAAO,MAAK,GAAE,OAAO,aAAW,KAAG,IAAE,IAAI,YAAY,GAAE,QAAO,GAAE,QAAO,GAAE,SAAS,OAAK,CAAC,EAAE,IAAI,IAAI,YAAY,GAAE,QAAO,GAAE,QAAO,GAAE,SAAS,OAAK,CAAC,CAAC,IAAE,IAAI,WAAW,GAAE,QAAO,GAAE,QAAO,GAAE,SAAS,IAAI,EAAE,IAAI,IAAI,WAAW,GAAE,QAAO,GAAE,QAAO,GAAE,SAAS,IAAI,CAAC;AAAA,QAAG,OAAO,QAAQ,MAAM,4BAA4B,GAAE,MAAM,GAAE;AAAA,MAAI;AAAA,MAAC,IAAU,OAAP;AAAA,QAAS,OAAO,cAAa,OAAI,cAAa,OAAI,cAAa,MAAG,cAAa,OAAI,cAAa,OAAI,cAAa,MAAG,KAAK,GAAE,KAAK,IAAI,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,GAAE,KAAK,MAAG,EAAE,CAAC,IAAE,KAAK,QAAQ,MAAM,6BAA6B,GAAE,MAAM,IAAE,KAAK,QAAQ,MAAM,4BAA4B,GAAE,MAAM;AAAA,MAAE,IAAU,OAAP;AAAA,QAAS,QAAO,cAAa,OAAI,cAAa,OAAI,cAAa,SAAM,cAAa,OAAI,cAAa,OAAI,cAAa,OAAI,KAAK,GAAE,KAAK,IAAI,GAAE,KAAK,IAAK,CAAC,IAAE,OAAI,GAAE,KAAK,MAAG,EAAE,CAAC,IAAE,KAAK,QAAQ,MAAM,4BAA4B,GAAE,MAAM;AAAA,IAAC;AAAA,IAAC,IAAG,GAAE,oBAAoB,KAAG;AAAA,MAAC,IAAS,GAAE,SAAS,aAAjB,KAA0B;AAAA,QAAC,KAAE,KAAK,gBAAgB,GAAE,SAAS,OAAM,EAAC;AAAA,QAAE,MAAM,KAAE,GAAE,YAAY,EAAC;AAAA,QAAE,IAAG,EAAE,MAAG,GAAE,iBAAiB;AAAA,UAAI,OAAO,KAAK,QAAQ,MAAM,YAAY,6BAA4B,GAAE,MAAM;AAAA,QAAE,KAAE,GAAE,MAAM;AAAA,QAAU,IAAI,KAAE,GAAE,SAAS;AAAA,QAAQ,IAAG,CAAC,IAAE;AAAA,UAAC,IAAI,KAAE,GAAE,SAAS;AAAA,UAAM,MAAK,cAAa,OAAI;AAAA,YAAC,IAAG,GAAE,SAAQ;AAAA,cAAC,KAAE,GAAE;AAAA,cAAQ;AAAA,YAAK;AAAA,YAAC,KAAE,GAAE;AAAA,UAAK;AAAA,QAAC;AAAA,QAAC,OAAI,KAAE,GAAE,WAAW,MAAK,IAAE,EAAC;AAAA,MAAE;AAAA,IAAC,EAAK;AAAA,MAAC,KAAE,GAAE,SAAS,SAAQ,KAAE,KAAK,gBAAgB,GAAE,UAAS,EAAC;AAAA,MAAE,MAAM,KAAE,GAAE,YAAY,EAAC;AAAA,MAAE,IAAU,OAAP;AAAA,QAAS,OAAO,KAAK,QAAQ,MAAM,YAAY,sBAAqB,GAAE,MAAM;AAAA,MAAE,KAAE,GAAE;AAAA;AAAA,IAAM,IAAG,cAAa,QAAK,KAAE,GAAE,YAAkB,OAAP;AAAA,MAAS,OAAO,KAAK,QAAQ,MAAM,YAAY,sBAAqB,GAAE,MAAM;AAAA,IAAE,MAAM,KAAE,KAAK,eAAe,GAAE,OAAM,EAAC,GAAE,KAAE,GAAE;AAAA,IAAS,IAAS,OAAN;AAAA,MAAQ,IAAG,cAAa;AAAA,QAAG,GAAE,aAAa,MAAK,IAAE,IAAE,EAAC;AAAA,MAAO,SAAG,IAAE;AAAA,QAAC,IAAG,EAAE,cAAa,OAAI,cAAa;AAAA,UAAI,OAAO,KAAK,QAAQ,MAAM,YAAY,sCAAqC,GAAE,MAAM;AAAA,QAAE,IAAG,cAAa,KAAG;AAAA,UAAC,MAAM,KAAE,KAAK,eAAe,GAAE,OAAM,EAAC,EAAE;AAAA,UAAM,IAAG,cAAa,KAAG;AAAA,YAAC,IAAG,EAAE,cAAa;AAAA,cAAI,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,YAAE,GAAE,KAAK,MAAG,GAAE;AAAA,UAAK,EAAK;AAAA,YAAC,IAAG,EAAE,cAAa;AAAA,cAAI,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,YAAE;AAAA,cAAC,MAAM,KAAE,KAAK,eAAe,GAAE,OAAM,EAAC,EAAE;AAAA,cAAM,IAAG,KAAE;AAAA,gBAAE,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,cAAE,IAAG,EAAE,cAAa;AAAA,gBAAI,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,cAAE;AAAA,gBAAC,MAAM,KAAE,GAAE,SAAS,YAAY;AAAA,gBAAE,IAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,WAAc;AAAA,kBAAC,IAAG,EAAE,KAAE,KAAO,GAAE,KAAK,WAAX;AAAA,oBAAmB,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,kBAAE,GAAE,KAAK,IAAE,MAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK;AAAA,gBAAE,EAAM,SAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,WAAc;AAAA,kBAAC,IAAG,EAAE,KAAE,KAAO,GAAE,KAAK,WAAX;AAAA,oBAAmB,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,kBAAE,GAAE,KAAK,IAAE,MAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK;AAAA,gBAAE,EAAM,SAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,WAAc;AAAA,kBAAC,IAAG,EAAE,KAAE,KAAO,GAAE,KAAK,WAAX;AAAA,oBAAmB,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,kBAAE,GAAE,KAAK,IAAE,MAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK;AAAA,gBAAE,EAAM,SAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,WAAc;AAAA,kBAAC,IAAG,EAAE,KAAE,KAAO,GAAE,KAAK,WAAX;AAAA,oBAAmB,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,kBAAE,GAAE,KAAK,IAAE,MAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK;AAAA,gBAAE,EAAM,SAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,WAAc;AAAA,kBAAC,IAAG,EAAE,KAAE,KAAO,GAAE,KAAK,WAAX;AAAA,oBAAmB,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,kBAAE,GAAE,KAAK,IAAE,MAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK;AAAA,gBAAE,EAAM,SAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,WAAc;AAAA,kBAAC,IAAG,EAAE,KAAE,KAAO,GAAE,KAAK,WAAX;AAAA,oBAAmB,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,kBAAE,GAAE,KAAK,IAAE,MAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK;AAAA,gBAAE,EAAM,SAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,WAAc;AAAA,kBAAC,IAAG,EAAE,KAAE,KAAO,GAAE,KAAK,WAAX;AAAA,oBAAmB,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,kBAAE,GAAE,KAAK,IAAE,MAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK;AAAA,gBAAE,EAAM,SAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,WAAc;AAAA,kBAAC,IAAG,EAAE,KAAE,KAAO,GAAE,KAAK,WAAX;AAAA,oBAAmB,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,kBAAE,GAAE,KAAK,IAAE,MAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK;AAAA,gBAAE,EAAK;AAAA,kBAAC,IAAc,OAAX,YAA0B,OAAZ,aAA2B,OAAZ;AAAA,oBAAc,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,kBAAE,IAAG,EAAE,KAAE,KAAO,GAAE,KAAK,WAAX;AAAA,oBAAmB,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,kBAAE,GAAE,KAAK,IAAE,MAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK,IAAG,GAAE,KAAK,IAAE,KAAE,KAAG,GAAE,KAAK;AAAA;AAAA,cAAG;AAAA,YAAC;AAAA;AAAA,QAAE,EAAM,SAAG,cAAa,KAAG;AAAA,UAAC,MAAM,KAAE,GAAE;AAAA,UAAM,IAAG,EAAE,cAAa;AAAA,YAAI,OAAO,KAAK,QAAQ,MAAM,yBAAyB,gBAAe,4BAA2B,GAAE,MAAM;AAAA,UAAE,IAAG,cAAa,KAAG;AAAA,YAAC,IAAG,GAAE,SAAO;AAAA,cAAE,OAAO,KAAK,QAAQ,MAAM,yBAAyB,mBAAkB,YAAW,GAAE,MAAM;AAAA,YAAE,IAAS,OAAN;AAAA,cAAQ,GAAE,KAAK,KAAG,GAAE;AAAA,YAAW,SAAS,OAAN,KAAQ;AAAA,cAAC,IAAG,GAAE,KAAK,SAAO;AAAA,gBAAE,OAAO,KAAK,QAAQ,MAAM,yBAAyB,mBAAkB,YAAW,GAAE,MAAM;AAAA,cAAE,GAAE,KAAK,KAAG,GAAE;AAAA,YAAK,EAAM,SAAS,OAAN,KAAQ;AAAA,cAAC,IAAG,GAAE,KAAK,SAAO;AAAA,gBAAE,OAAO,KAAK,QAAQ,MAAM,yBAAyB,mBAAkB,YAAW,GAAE,MAAM;AAAA,cAAE,GAAE,KAAK,KAAG,GAAE;AAAA,YAAK,EAAM,SAAS,OAAN,KAAQ;AAAA,cAAC,IAAG,GAAE,KAAK,SAAO;AAAA,gBAAE,OAAO,KAAK,QAAQ,MAAM,yBAAyB,mBAAkB,YAAW,GAAE,MAAM;AAAA,cAAE,GAAE,KAAK,KAAG,GAAE;AAAA,YAAK;AAAA,UAAC,EAAK;AAAA,YAAC,IAAG,EAAE,cAAa;AAAA,cAAI,OAAO,KAAK,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,YAAE,IAAG,GAAE,WAAS,GAAE,KAAK;AAAA,cAAO,OAAO,KAAK,QAAQ,MAAM,yBAAyB,mBAAkB,YAAW,GAAE,MAAM;AAAA,YAAE,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE,IAAE;AAAA,cAAC,MAAM,KAAE,GAAE;AAAA,cAAG,IAAS,OAAN,OAAe,OAAN;AAAA,gBAAQ,GAAE,KAAK,KAAG,GAAE,KAAK;AAAA,cAAQ,SAAS,OAAN,OAAe,OAAN,KAAQ;AAAA,gBAAC,IAAG,GAAE,KAAK,SAAO;AAAA,kBAAE,OAAO,KAAK,QAAQ,MAAM,yBAAyB,mBAAkB,YAAW,GAAE,MAAM;AAAA,gBAAE,GAAE,KAAK,KAAG,GAAE,KAAK;AAAA,cAAE,EAAM,SAAS,OAAN,OAAe,OAAN,KAAQ;AAAA,gBAAC,IAAG,GAAE,KAAK,SAAO;AAAA,kBAAE,OAAO,KAAK,QAAQ,MAAM,yBAAyB,mBAAkB,YAAW,GAAE,MAAM;AAAA,gBAAE,GAAE,KAAK,KAAG,GAAE,KAAK;AAAA,cAAE,EAAK;AAAA,gBAAC,IAAS,OAAN,OAAe,OAAN;AAAA,kBAAQ,OAAO,KAAK,QAAQ,MAAM,yBAAyB,mBAAkB,YAAW,GAAE,MAAM;AAAA,gBAAE,IAAG,GAAE,KAAK,SAAO;AAAA,kBAAE,OAAO,KAAK,QAAQ,MAAM,yBAAyB,mBAAkB,YAAW,GAAE,MAAM;AAAA,gBAAE,GAAE,KAAK,KAAG,GAAE,KAAK;AAAA;AAAA,YAAG;AAAA;AAAA,QAAE;AAAA,MAAC,EAAM;AAAA,sBAAa,OAAI,cAAa,MAAG,GAAE,QAAM,GAAE,QAAM,cAAa,OAAI,cAAa,OAAI,cAAa,OAAI,cAAa,MAAG,GAAE,KAAK,IAAI,GAAE,IAAI,IAAE,QAAQ,MAAM,yBAAyB,YAAW,GAAE,MAAM;AAAA,IAAM;AAAA,MAAC,MAAM,KAAE,GAAE,WAAW,MAAK,IAAE,EAAC;AAAA,MAAE,IAAG,cAAa,OAAI,cAAa,KAAG;AAAA,QAAC,MAAM,KAAE,GAAE,MAAK,KAAE,GAAE;AAAA,QAAM,IAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI;AAAA,QAAO,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI;AAAA,QAAO,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI;AAAA,QAAO,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI;AAAA,QAAO,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI;AAAA,QAAO,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI;AAAA,QAAO,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI;AAAA,QAAO,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI;AAAA,QAAO,SAAW,OAAR;AAAA,UAAU,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,QAAK;AAAA,QAAO,SAAW,OAAR;AAAA,UAAU,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,QAAK;AAAA,QAAO;AAAA,kBAAQ,MAAM,oBAAoB,YAAW,GAAE,MAAM;AAAA,MAAC,EAAM,SAAG,cAAa,OAAI,cAAa,KAAG;AAAA,QAAC,MAAM,KAAE,GAAE,MAAK,KAAE,GAAE;AAAA,QAAK,IAAG,GAAE,WAAS,GAAE;AAAA,UAAO,OAAO,KAAK,QAAQ,MAAM,gCAAgC,GAAE,MAAM;AAAA,QAAE,IAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI,GAAE;AAAA,QAAQ,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI,GAAE;AAAA,QAAQ,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI,GAAE;AAAA,QAAQ,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI,GAAE;AAAA,QAAQ,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI,GAAE;AAAA,QAAQ,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI,GAAE;AAAA,QAAQ,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI,GAAE;AAAA,QAAQ,SAAU,OAAP;AAAA,UAAS,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,OAAI,GAAE;AAAA,QAAQ,SAAW,OAAR;AAAA,UAAU,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,QAAK,GAAE;AAAA,QAAQ,SAAW,OAAR;AAAA,UAAU,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE;AAAA,YAAE,GAAE,QAAK,GAAE;AAAA,QAAQ;AAAA,kBAAQ,MAAM,oBAAoB,YAAW,GAAE,MAAM;AAAA,MAAC,EAAK;AAAA,QAAC,IAAG,EAAE,cAAa,OAAI,cAAa;AAAA,UAAI,OAAO,KAAK,QAAQ,MAAM,oBAAoB,GAAE,2BAA2B,GAAE,MAAM;AAAA,QAAS,OAAP,OAAS,GAAE,SAAO,GAAE,QAAa,OAAP,OAAS,GAAE,SAAO,GAAE,QAAa,OAAP,OAAS,GAAE,SAAO,GAAE,QAAa,OAAP,OAAS,GAAE,SAAO,GAAE,QAAa,OAAP,OAAS,GAAE,SAAO,GAAE,QAAa,OAAP,OAAS,GAAE,SAAO,GAAE,QAAa,OAAP,OAAS,GAAE,SAAO,GAAE,QAAa,OAAP,OAAS,GAAE,SAAO,GAAE,QAAc,OAAR,QAAU,GAAE,UAAQ,GAAE,QAAc,OAAR,QAAU,GAAE,UAAQ,GAAE,QAAM,QAAQ,MAAM,oBAAoB,YAAW,GAAE,MAAM;AAAA;AAAA,MAAE,cAAa,OAAI,GAAE,aAAa,MAAK,IAAE,IAAE,EAAC;AAAA;AAAA;AAAA,EAAG,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,IAAI,IAAG,EAAC;AAAA,IAAE,GAAE,UAAU,IAAI,GAAE,MAAK,EAAC;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE;AAAA,IAAY,GAAE,UAAT,SAAiB,KAAE,KAAK,eAAe,GAAE,OAAM,EAAC,IAAG,GAAE,eAAe,GAAE,MAAK,IAAE,EAAC;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE;AAAA,IAAK,IAAU,GAAE,UAAT,MAAe;AAAA,MAAC,IAAG,KAAE,KAAK,eAAe,GAAE,OAAM,EAAC,GAAS,OAAP;AAAA,QAAS,OAAO,KAAK,QAAQ,MAAM,8BAA8B,GAAE,cAAc,GAAE,MAAM;AAAA,MAAE,GAAE,iBAAiB,QAAK,KAAE,GAAE,MAAM;AAAA,IAAE,EAAK;AAAA,MAAC,MAAM,KAAE,GAAE,KAAK;AAAA,MAAK,IAAW,OAAR,SAAmB,OAAR,SAAmB,OAAR,SAAoB,OAAT,UAAoB,OAAR,SAAoB,OAAT,UAAqB,OAAT,UAAqB,OAAT,UAAsB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAwB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAAyB,OAAV,SAAY;AAAA,QAAC,MAAM,KAAE,IAAI,IAAG,GAAE,MAAK,CAAC,CAAC;AAAA,QAAE,KAAE,KAAK,YAAY,IAAE,EAAC;AAAA,MAAC;AAAA;AAAA,IAAE,GAAE,eAAe,GAAE,MAAK,IAAE,EAAC;AAAA;AAAA,EAAE,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI,KAAE;AAAA,IAAK,IAAU,GAAE,UAAT,MAAe;AAAA,MAAC,IAAG,KAAE,KAAK,eAAe,GAAE,OAAM,EAAC,GAAS,OAAP;AAAA,QAAS,OAAO,KAAK,QAAQ,MAAM,8BAA8B,GAAE,cAAc,GAAE,MAAM;AAAA,MAAE,GAAE,iBAAiB,QAAK,KAAE,GAAE,MAAM;AAAA,IAAE,EAAK;AAAA,MAAC,IAAU,GAAE,SAAT;AAAA,QAAc,OAAO,KAAK,QAAQ,MAAM,YAAY,GAAE,0BAA0B,GAAE,MAAM;AAAA,MAAE,MAAM,KAAE,GAAE,KAAK;AAAA,MAAK,IAAW,OAAR,SAAmB,OAAR,SAAmB,OAAR,SAAoB,OAAT,UAAoB,OAAR,SAAoB,OAAT,UAAqB,OAAT,UAAqB,OAAT,UAAsB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAwB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAAe,GAAE,gBAAgB,OAAI,GAAE,gBAAgB,OAAI,GAAE,gBAAgB,KAAG;AAAA,QAAC,MAAM,KAAE,IAAI,IAAG,GAAE,MAAK,CAAC,CAAC;AAAA,QAAE,KAAE,KAAK,YAAY,IAAE,EAAC;AAAA,MAAC;AAAA;AAAA,IAAE,GAAE,eAAe,GAAE,MAAK,IAAE,EAAC;AAAA;AAAA,EAAE,OAAO,CAAC,IAAE,IAAE;AAAA,IAAC,KAAE,GAAE,MAAM;AAAA,IAAE,MAAM,KAAE,KAAK,eAAe,GAAE,WAAU,EAAC;AAAA,IAAE,IAAG,EAAE,cAAa;AAAA,MAAI,OAAO,QAAQ,MAAM,8BAA8B,GAAE,MAAM,GAAE;AAAA,IAAK,IAAI,KAAE;AAAA,IAAK,WAAU,MAAK,GAAE;AAAA,MAAM,IAAG,cAAa;AAAA,QAAG,WAAU,MAAK,GAAE,WAAU;AAAA,UAAC,IAAG,cAAa,KAAG;AAAA,YAAC,KAAE;AAAA,YAAE;AAAA,UAAQ;AAAA,UAAC,MAAM,KAAE,KAAK,eAAe,IAAE,EAAC;AAAA,UAAE,IAAG,EAAE,cAAa;AAAA,YAAI,OAAO,QAAQ,MAAM,+BAA+B,GAAE,MAAM,GAAE;AAAA,UAAK,IAAG,GAAE,UAAQ,GAAE;AAAA,YAAM,OAAO,KAAK,gBAAgB,GAAE,MAAK,EAAC;AAAA,QAAC;AAAA,MAAM;AAAA,sBAAa,QAAK,KAAE;AAAA,IAAG,OAAO,KAAE,KAAK,gBAAgB,GAAE,MAAK,EAAC,IAAE;AAAA;AAAA,EAAK,GAAG,CAAC,IAAE,IAAE;AAAA,IAAC,KAAE,GAAE,MAAM;AAAA,IAAE,MAAM,KAAE,KAAK,eAAe,GAAE,WAAU,EAAC;AAAA,IAAE,IAAG,EAAE,cAAa;AAAA,MAAI,OAAO,QAAQ,MAAM,8BAA8B,GAAE,MAAM,GAAE;AAAA,IAAK,IAAG,GAAE;AAAA,MAAM,OAAO,KAAK,gBAAgB,GAAE,MAAK,EAAC;AAAA,IAAE,WAAU,MAAK,GAAE,QAAO;AAAA,MAAC,MAAM,KAAE,KAAK,eAAe,GAAE,WAAU,EAAC;AAAA,MAAE,IAAG,EAAE,cAAa;AAAA,QAAI,OAAO,QAAQ,MAAM,8BAA8B,GAAE,MAAM,GAAE;AAAA,MAAK,IAAG,GAAE;AAAA,QAAM,OAAO,KAAK,gBAAgB,GAAE,MAAK,EAAC;AAAA,IAAC;AAAA,IAAC,OAAO,GAAE,OAAK,KAAK,gBAAgB,GAAE,MAAK,EAAC,IAAE;AAAA;AAAA,EAAK,eAAe,CAAC,IAAE;AAAA,IAAC,OAAO,cAAa,MAAG,GAAE,SAAO,QAAQ,MAAM,0BAAyB,EAAC,GAAE;AAAA;AAAA,EAAG,IAAI,CAAC,IAAE,IAAE;AAAA,IAAC,KAAI,KAAE,GAAE,MAAM,GAAE,KAAK,cAAc,GAAE,MAAK,EAAC,EAAE,KAAK,gBAAgB,KAAK,eAAe,GAAE,WAAU,EAAC,CAAC,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,gBAAgB,GAAE,MAAK,EAAC;AAAA,MAAE,IAAG,OAAI,IAAG;AAAA,QAAU;AAAA,MAAM,IAAU,OAAP,QAAU,OAAI,IAAG;AAAA,QAAa,OAAO;AAAA,MAAE,KAAK,cAAc,GAAE,WAAU,EAAC;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,KAAK,CAAC,IAAE,IAAE;AAAA,IAAC,KAAI,KAAE,GAAE,MAAM,MAAI;AAAA,MAAC,MAAM,KAAE,KAAK,gBAAgB,GAAE,MAAK,EAAC;AAAA,MAAE,IAAG,OAAI,IAAG;AAAA,QAAU;AAAA,MAAM,IAAG,OAAI,IAAG,cAAa;AAAA,QAAC,IAAG,GAAE,YAAW;AAAA,UAAC,IAAG,KAAK,gBAAgB,GAAE,WAAW,MAAK,EAAC,MAAI,IAAG;AAAA,YAAU;AAAA,QAAK;AAAA,MAAC,EAAM,SAAU,OAAP;AAAA,QAAS,OAAO;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,MAAM,CAAC,IAAE,IAAE;AAAA,IAAC,KAAI,KAAE,GAAE,MAAM,EAAE,KAAK,gBAAgB,KAAK,eAAe,GAAE,WAAU,EAAC,CAAC,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,gBAAgB,GAAE,MAAK,EAAC;AAAA,MAAE,IAAG,OAAI,IAAG;AAAA,QAAU;AAAA,MAAM,IAAG,OAAI,IAAG,gBAAqB,OAAP;AAAA,QAAS,OAAO;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,eAAe,GAAE,OAAM,EAAC,GAAE,KAAE,GAAE;AAAA,IAAK,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,IAAG,GAAE,OAAM,GAAE,SAAS,MAAK,GAAE,IAAI;AAAA,MAAE,OAAO,IAAI,IAAG,IAAE,KAAK,YAAY,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,GAAE,SAAS,YAAY;AAAA,MAAE,IAAI,KAAE;AAAA,MAAG,IAAG,GAAE,SAAS,GAAG;AAAA,QAAE,KAAE;AAAA,MAAW,SAAG,GAAE,SAAS,GAAG;AAAA,QAAE,KAAE;AAAA,MAAW,SAAG,GAAE,SAAS,GAAG;AAAA,QAAE,KAAE;AAAA,MAAW,SAAG,GAAE,SAAS,GAAG;AAAA,QAAE,KAAE;AAAA,MAAW;AAAA,QAAC,IAAG,CAAC,GAAE,SAAS,GAAG;AAAA,UAAE,OAAO,QAAQ,MAAM,uBAAuB,YAAW,GAAE,MAAM,GAAE;AAAA,QAAK,KAAE;AAAA;AAAA,MAAM,MAAM,KAAE,GAAE,YAAY;AAAA,MAAE,IAAI,KAAE;AAAA,MAAG,IAAG,GAAE,SAAS,GAAG;AAAA,QAAE,KAAE;AAAA,MAAW,SAAG,GAAE,SAAS,GAAG;AAAA,QAAE,KAAE;AAAA,MAAW,SAAG,GAAE,SAAS,GAAG;AAAA,QAAE,KAAE;AAAA,MAAW,SAAG,GAAE,SAAS,GAAG;AAAA,QAAE,KAAE;AAAA,MAAW;AAAA,QAAC,IAAG,CAAC,GAAE,SAAS,GAAG;AAAA,UAAE,OAAO,QAAQ,MAAM,uBAAuB,YAAW,GAAE,MAAM,GAAE;AAAA,QAAK,KAAE;AAAA;AAAA,MAAM,MAAM,KAAE,QAAQ,CAAC,IAAE,IAAE,IAAE;AAAA,QAAC,IAAG,OAAI;AAAA,UAAE,OAAO;AAAA,QAAE,MAAM,KAAE,IAAI,MAAM,GAAE,MAAM;AAAA,QAAE,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO;AAAA,UAAI,GAAE,MAAG,IAAG,GAAE,KAAG,IAAE,EAAC;AAAA,QAAE,OAAO;AAAA,QAAG,MAAM,KAAK,GAAE,IAAI,GAAE,IAAE,EAAC;AAAA,MAAE,OAAO,IAAI,IAAG,IAAE,KAAK,YAAY,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,OAAO,QAAQ,MAAM,qBAAqB,GAAE,SAAS,cAAc,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,GAAE,iBAAiB,GAAE,IAAI,EAAE,MAAM,EAAE,WAAW,MAAK,GAAE,SAAQ,EAAC;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,IAAI;AAAA,IAAE,IAAG,cAAa,KAAG;AAAA,MAAC,IAAU,GAAE,SAAT;AAAA,QAAc,OAAO,IAAG;AAAA,MAAK,QAAO,GAAE,KAAK,YAAY;AAAA,aAAO;AAAA,aAAW;AAAA,aAAU;AAAA,aAAU;AAAA,aAAU;AAAA,UAAM,OAAO,KAAK,sBAAsB,IAAE,EAAC;AAAA,aAAM;AAAA,aAAW;AAAA,aAAW;AAAA,aAAW;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,aAAY;AAAA,UAAQ,OAAO,KAAK,oBAAoB,IAAE,EAAC;AAAA,aAAM;AAAA,aAAa;AAAA,aAAc;AAAA,aAAc;AAAA,aAAa;AAAA,aAAc;AAAA,aAAc;AAAA,aAAa;AAAA,aAAc;AAAA,aAAc;AAAA,aAAa;AAAA,aAAc;AAAA,aAAc;AAAA,aAAa;AAAA,aAAc;AAAA,aAAc;AAAA,aAAa;AAAA,aAAc;AAAA,aAAc;AAAA,aAAa;AAAA,aAAc;AAAA,aAAc;AAAA,aAAa;AAAA,aAAc;AAAA,aAAc;AAAA,aAAa;AAAA,aAAc;AAAA,UAAU,OAAO,KAAK,uBAAuB,IAAE,EAAC;AAAA;AAAA,IAAE;AAAA,IAAC,MAAM,KAAE,cAAa,MAAG,GAAE,KAAK,OAAK,GAAE,MAAK,KAAE,cAAa,MAAG,KAAK,YAAY,GAAE,IAAI,IAAE,KAAK,YAAY,GAAE,IAAI;AAAA,IAAE,IAAU,OAAP;AAAA,MAAS,OAAO,QAAQ,MAAM,gBAAgB,YAAW,GAAE,MAAM,GAAE;AAAA,IAAK,IAAO,GAAE,SAAN;AAAA,MAAW,OAAO;AAAA,IAAK,MAAM,KAAE,IAAI,IAAG,IAAI,YAAY,GAAE,IAAI,GAAE,IAAE,CAAC;AAAA,IAAE,IAAG,cAAa,IAAE;AAAA,MAAC,IAAG,GAAE;AAAA,QAAK,SAAQ,KAAE,EAAE,KAAE,GAAE,KAAK,QAAO,EAAE,IAAE;AAAA,UAAC,MAAM,KAAE,GAAE,QAAQ,KAAG,KAAE,GAAE,KAAK,KAAG,KAAE,KAAK,eAAe,IAAE,EAAC;AAAA,UAAE,GAAE,QAAQ,MAAK,IAAE,GAAE,MAAK,GAAE,QAAO,EAAC;AAAA,QAAC;AAAA,IAAC,EAAM,SAAG,cAAa,IAAE;AAAA,MAAC,IAAI,KAAE;AAAA,MAAE,IAAG,GAAE;AAAA,QAAK,SAAQ,KAAE,EAAE,KAAE,GAAE,KAAK,QAAO,EAAE,IAAE;AAAA,UAAC,MAAM,KAAE,GAAE,KAAK,KAAG,KAAE,KAAK,eAAe,IAAE,EAAC;AAAA,UAAS,GAAE,WAAT,WAAmC,KAAE,GAAE,cAAZ,QAAgC,OAAJ,YAAW,YAAE,GAAE,UAApD,QAA0D,GAAE,SAAO,KAAK,YAAY,KAAK,IAAE,GAAE,SAAO,GAAE,WAAU,GAAE,QAAQ,MAAK,IAAE,GAAE,QAAO,IAAE,EAAC,GAAE,MAAG,GAAE;AAAA,QAAM;AAAA,IAAC,EAAM;AAAA,cAAQ,MAAM,iBAAiB,aAAY,GAAE,MAAM;AAAA,IAAE,OAAO,cAAa,MAAG,GAAE,WAAW,MAAK,GAAE,SAAQ,EAAC,IAAE;AAAA;AAAA,EAAE,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,YAAY,GAAE,IAAI,GAAE,KAAE,GAAE;AAAA,IAAK,IAAW,OAAR,SAAmB,OAAR,SAAmB,OAAR,SAAmB,OAAR,SAAmB,OAAR,SAAoB,OAAT,QAAW;AAAA,MAAC,OAAO,IAAI,IAAG,GAAE,aAAY,EAAC;AAAA,IAAC;AAAA,IAAC,OAAe,OAAT,UAAqB,OAAT,UAAqB,OAAT,UAAsB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,WAAuB,OAAV,UAAY,KAAK,oBAAoB,IAAE,EAAC,IAAa,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAAyB,OAAX,YAA0B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,aAA2B,OAAZ,YAAc,KAAK,uBAAuB,IAAE,EAAC,IAAE,GAAE;AAAA;AAAA,EAAM,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,GAAE,iBAAiB,GAAE,IAAI;AAAA,IAAE,OAAc,OAAP,OAAS,KAAE,GAAE,WAAW,MAAK,GAAE,SAAQ,EAAC;AAAA;AAAA,EAAE,kBAAkB,CAAC,IAAE;AAAA,IAAC,IAAI,KAAE,GAAE;AAAA,IAAG,IAAW,GAAE,SAAV;AAAA,MAAe,OAAO;AAAA,IAAE,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE,IAAE;AAAA,MAAC,MAAM,KAAE,IAAG,UAAU,IAAI,GAAE,IAAI;AAAA,MAAE,IAAG,UAAU,IAAI,GAAE,IAAG,IAAI,IAAE,OAAI,KAAE,GAAE;AAAA,IAAG;AAAA,IAAC,OAAc,GAAE,SAAV,QAAe,KAAK,YAAY,KAAK,IAAE;AAAA;AAAA,EAAE,YAAY,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,eAAe,GAAE,OAAM,EAAC;AAAA,IAAE,IAAS,GAAE,aAAR;AAAA,MAAiB,OAAO,IAAI,IAAG,EAAC;AAAA,IAAE,IAAS,GAAE,aAAR;AAAA,MAAiB,OAAO,cAAa,MAAG,GAAE,UAAU,WAAW,MAAK,GAAE,SAAQ,EAAC,KAAG,QAAQ,MAAM,6BAA6B,GAAE,MAAM,GAAE;AAAA,IAAM,MAAM,KAAE,cAAa,MAAG,GAAE,QAAM,cAAa,MAAG,MAAM,KAAK,GAAE,IAAI,IAAE;AAAA,IAAK,QAAO,GAAE;AAAA,WAAc,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,CAAC,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,CAAC,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,CAAC,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,CAAC,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,KAAE,IAAE,GAAE,EAAC;AAAA,MAAC;AAAA,WAAK,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,CAAC,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,CAAC,IAAE,EAAC;AAAA,MAAC;AAAA;AAAA,IAAE,OAAO,QAAQ,MAAM,0BAA0B,GAAE,kBAAkB,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,aAAa,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,eAAe,GAAE,MAAK,EAAC,GAAE,KAAE,KAAK,eAAe,GAAE,OAAM,EAAC,GAAE,KAAE,cAAa,MAAG,GAAE,QAAM,cAAa,OAAI,cAAa,MAAG,MAAM,KAAK,GAAE,IAAI,IAAE,MAAK,KAAE,cAAa,MAAG,GAAE,QAAM,cAAa,OAAI,cAAa,MAAG,MAAM,KAAK,GAAE,IAAI,IAAE;AAAA,IAAK,QAAO,GAAE;AAAA,WAAc,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,GAAG;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,KAAE,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,GAAG;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,KAAE,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,cAAa,OAAI,cAAa,KAAG;AAAA,YAAC,MAAM,KAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,cAAC,IAAY,IAAG,GAAE,UAAT,aAAyB,IAAG,GAAE,UAAT;AAAA,gBAAe,OAAO;AAAA,cAAK,MAAM,KAAE,IAAG,GAAE,MAAM,IAAG,KAAE,IAAG,GAAE,MAAM,IAAG,KAAE,IAAG,GAAE,MAAM;AAAA,cAAG,IAAG,OAAI,IAAG,GAAE,MAAM;AAAA,gBAAG,OAAO;AAAA,cAAK,MAAM,KAAE,IAAI,MAAM,KAAE,EAAC;AAAA,cAAE,SAAQ,KAAE,EAAE,KAAE,IAAE;AAAA,gBAAI,SAAQ,KAAE,EAAE,KAAE,IAAE,MAAI;AAAA,kBAAC,IAAI,KAAE;AAAA,kBAAE,SAAQ,KAAE,EAAE,KAAE,IAAE;AAAA,oBAAI,MAAG,GAAE,KAAE,KAAE,MAAG,GAAE,KAAE,KAAE;AAAA,kBAAG,GAAE,KAAE,KAAE,MAAG;AAAA,gBAAC;AAAA,cAAC,OAAO;AAAA,cAAG,IAAE,GAAE,UAAS,IAAE,GAAE,QAAQ;AAAA,YAAE,IAAU,OAAP;AAAA,cAAS,OAAO,QAAQ,MAAM,sCAAsC,GAAE,OAAO,GAAE;AAAA,YAAK,MAAM,KAAE,IAAG,GAAE,SAAS,MAAM,IAAG,KAAE,IAAG,GAAE,SAAS,MAAM,IAAG,KAAE,KAAK,YAAY,MAAM,MAAK,KAAI;AAAA,YAAE,OAAO,IAAI,IAAG,IAAE,EAAC;AAAA,UAAC;AAAA,UAAC,IAAG,cAAa,OAAI,cAAa,KAAG;AAAA,YAAC,MAAM,KAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,cAAC,IAAY,IAAG,GAAE,UAAT,aAAyB,IAAG,GAAE,UAAT;AAAA,gBAAe,OAAO;AAAA,cAAK,MAAM,KAAE,IAAG,GAAE,MAAM,IAAG,KAAE,IAAG,GAAE,MAAM;AAAA,cAAG,IAAG,OAAI,GAAE;AAAA,gBAAO,OAAO;AAAA,cAAK,MAAM,KAAE,IAAI,MAAM,EAAC;AAAA,cAAE,SAAQ,KAAE,EAAE,KAAE,IAAE,MAAI;AAAA,gBAAC,IAAI,KAAE;AAAA,gBAAE,SAAQ,KAAE,EAAE,KAAE,IAAE;AAAA,kBAAI,MAAG,GAAE,KAAE,KAAE,MAAG,GAAE;AAAA,gBAAG,GAAE,MAAG;AAAA,cAAC;AAAA,cAAC,OAAO;AAAA,cAAG,IAAE,GAAE,UAAS,IAAE,GAAE,QAAQ;AAAA,YAAE,OAAc,OAAP,QAAU,QAAQ,MAAM,6CAA6C,GAAE,OAAO,GAAE,QAAM,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,UAAC;AAAA,UAAC,IAAG,cAAa,OAAI,cAAa,KAAG;AAAA,YAAC,MAAM,KAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAE;AAAA,cAAC,IAAY,IAAG,GAAE,UAAT,aAAyB,IAAG,GAAE,UAAT;AAAA,gBAAe,OAAO;AAAA,cAAK,MAAM,KAAE,IAAG,GAAE,MAAM,IAAG,KAAE,IAAG,GAAE,MAAM;AAAA,cAAG,IAAG,OAAI,GAAE;AAAA,gBAAO,OAAO;AAAA,cAAK,MAAM,KAAE,CAAC;AAAA,cAAE,SAAQ,KAAE,EAAE,KAAE,IAAE,MAAI;AAAA,gBAAC,IAAI,KAAE;AAAA,gBAAE,SAAQ,KAAE,EAAE,KAAE,IAAE;AAAA,kBAAI,MAAG,GAAE,MAAG,GAAE,KAAE,KAAE;AAAA,gBAAG,GAAE,MAAG;AAAA,cAAC;AAAA,cAAC,OAAO;AAAA,cAAG,IAAE,GAAE,UAAS,IAAE,GAAE,QAAQ;AAAA,YAAE,OAAc,OAAP,QAAU,QAAQ,MAAM,6CAA6C,GAAE,OAAO,GAAE,QAAM,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,UAAC;AAAA,UAAC;AAAA,YAAC,IAAG,GAAE,WAAS,GAAE;AAAA,cAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,YAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,GAAG;AAAA,YAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,UAAC;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,cAAa,MAAG,IAAI,IAAG,IAAE,GAAE,QAAQ,IAAE,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,cAAa,MAAG,IAAI,IAAG,IAAE,GAAE,QAAQ,IAAE,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,KAAE,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,GAAG;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,KAAE,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,GAAG;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,KAAE,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,GAAG;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,KAAE,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,GAAG;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,KAAE,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,KAAI;AAAA,QAAC,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,GAAG;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,KAAE,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,MAAK;AAAA,QAAC,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,GAAE,GAAG;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,MAAG,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK,MAAK;AAAA,QAAC,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,GAAE,GAAG;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,EAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,MAAM,KAAE,IAAE,KAAE,IAAE,KAAE,KAAK,mBAAmB,CAAC,GAAE,UAAS,GAAE,QAAQ,CAAC;AAAA,QAAE,OAAO,IAAI,IAAG,MAAG,IAAE,EAAC;AAAA,MAAC;AAAA,WAAK;AAAA,QAAI,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,MAAG,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,OAAO,IAAI,IAAG,KAAE,KAAE,IAAE,GAAE,KAAK,YAAY,MAAM,CAAC;AAAA,WAAM;AAAA,QAAI,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,GAAE,MAAG,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,KAAE,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,OAAO,IAAI,IAAG,KAAE,KAAE,IAAE,GAAE,KAAK,YAAY,MAAM,CAAC;AAAA,WAAM;AAAA,QAAK,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,OAAI,GAAE,MAAG,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,OAAO,IAAI,IAAG,OAAI,KAAE,IAAE,GAAE,KAAK,YAAY,MAAM,CAAC;AAAA,WAAM;AAAA,QAAK,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,OAAI,GAAE,MAAG,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,OAAI,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,OAAI,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,OAAO,IAAI,IAAG,OAAI,KAAE,IAAE,GAAE,KAAK,YAAY,MAAM,CAAC;AAAA,WAAM;AAAA,QAAK,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,GAAE,MAAG,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,OAAO,IAAI,IAAG,MAAG,KAAE,IAAE,GAAE,KAAK,YAAY,MAAM,CAAC;AAAA,WAAM;AAAA,QAAK,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,GAAE,MAAG,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,OAAO,IAAI,IAAG,MAAG,KAAE,IAAE,GAAE,KAAK,YAAY,MAAM,CAAC;AAAA,WAAM;AAAA,QAAK,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,GAAE,MAAG,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,OAAO,IAAI,IAAG,MAAG,KAAE,IAAE,GAAE,KAAK,YAAY,MAAM,CAAC;AAAA,WAAM;AAAA,QAAK,IAAG,IAAG,EAAC,KAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE;AAAA,UAAE,IAAG,GAAE,WAAS,GAAE;AAAA,YAAO,OAAO,QAAQ,MAAM,gCAAgC,GAAE,OAAO,GAAE;AAAA,UAAK,MAAM,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,GAAE,MAAG,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,IAAG,IAAG,EAAC,GAAE;AAAA,UAAC,MAAM,KAAE,IAAE,KAAE,GAAE,IAAK,CAAC,IAAE,OAAI,MAAG,KAAE,IAAE,CAAE;AAAA,UAAE,OAAO,IAAI,IAAG,IAAE,GAAE,QAAQ;AAAA,QAAC;AAAA,QAAC,OAAO,IAAI,IAAG,MAAG,KAAE,IAAE,GAAE,KAAK,YAAY,MAAM,CAAC;AAAA;AAAA,IAAE,OAAO,QAAQ,MAAM,oBAAoB,GAAE,kBAAkB,GAAE,MAAM,GAAE;AAAA;AAAA,EAAK,SAAS,CAAC,IAAE,IAAE;AAAA,IAAC,IAAU,GAAE,sBAAT;AAAA,MAA2B,OAAO,GAAE;AAAA,IAAkB,MAAM,KAAE,GAAE,MAAM;AAAA,IAAE,GAAE,sBAAoB,GAAE;AAAA,IAAK,MAAM,KAAE,GAAE,YAAY,GAAE,IAAI;AAAA,IAAE,IAAG,CAAC,IAAE;AAAA,MAAC,IAAG,GAAE;AAAA,QAAU,OAAO,KAAK,qBAAqB,IAAE,EAAC;AAAA,MAAE,OAAO,KAAK,YAAY,GAAE,IAAI,IAAE,KAAK,YAAY,IAAE,EAAC,KAAG,QAAQ,MAAM,qBAAqB,GAAE,eAAe,GAAE,MAAM,GAAE;AAAA,IAAK;AAAA,IAAC,SAAQ,KAAE,EAAE,KAAE,GAAE,KAAK,KAAK,QAAO,EAAE,IAAE;AAAA,MAAC,MAAM,KAAE,GAAE,KAAK,KAAK,KAAG,KAAE,KAAK,eAAe,GAAE,KAAK,KAAG,EAAC;AAAA,MAAE,GAAE,eAAe,GAAE,MAAK,IAAE,EAAC;AAAA,IAAC;AAAA,IAAC,OAAO,KAAK,gBAAgB,GAAE,KAAK,MAAK,EAAC;AAAA;AAAA,EAAE,oBAAoB,CAAC,IAAE,IAAE;AAAA,IAAC,QAAO,GAAE;AAAA,WAAU;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAS,OAAO,KAAK,SAAS,OAAO,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAoB,OAAO,KAAK,SAAS,kBAAkB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAe,OAAO,KAAK,SAAS,aAAa,IAAE,EAAC;AAAA,WAAM;AAAA,QAAqB,OAAO,KAAK,SAAS,mBAAmB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAU,OAAO,KAAK,SAAS,QAAQ,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAW,OAAO,KAAK,SAAS,SAAS,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAe,OAAO,KAAK,SAAS,aAAa,IAAE,EAAC;AAAA,WAAM;AAAA,QAAe,OAAO,KAAK,SAAS,aAAa,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAkB,OAAO,KAAK,SAAS,gBAAgB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAmB,OAAO,KAAK,SAAS,iBAAiB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAa,OAAO,KAAK,SAAS,WAAW,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAS,OAAO,KAAK,SAAS,OAAO,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAY,OAAO,KAAK,SAAS,UAAU,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAgB,OAAO,KAAK,SAAS,cAAc,IAAE,EAAC;AAAA,WAAM;AAAA,QAAU,OAAO,KAAK,SAAS,QAAQ,IAAE,EAAC;AAAA,WAAM;AAAA,QAAU,OAAO,KAAK,SAAS,QAAQ,IAAE,EAAC;AAAA,WAAM;AAAA,QAAU,OAAO,KAAK,SAAS,QAAQ,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAW,OAAO,KAAK,SAAS,SAAS,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAa,OAAO,KAAK,SAAS,WAAW,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAM,OAAO,KAAK,SAAS,IAAI,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAY,OAAO,KAAK,SAAS,UAAU,IAAE,EAAC;AAAA,WAAM;AAAA,QAAQ,OAAO,KAAK,SAAS,MAAM,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAa,OAAO,KAAK,SAAS,WAAW,IAAE,EAAC;AAAA,WAAM;AAAA,QAAW,OAAO,KAAK,SAAS,SAAS,IAAE,EAAC;AAAA,WAAM;AAAA,QAAO,OAAO,KAAK,SAAS,KAAK,IAAE,EAAC;AAAA,WAAM;AAAA,QAAa,OAAO,KAAK,SAAS,WAAW,IAAE,EAAC;AAAA,WAAM;AAAA,QAAW,OAAO,KAAK,SAAS,SAAS,IAAE,EAAC;AAAA,WAAM;AAAA,QAAS,OAAO,KAAK,SAAS,OAAO,IAAE,EAAC;AAAA,WAAM;AAAA,QAAe,OAAO,KAAK,SAAS,aAAa,IAAE,EAAC;AAAA,WAAM;AAAA,QAAa,OAAO,KAAK,SAAS,WAAW,IAAE,EAAC;AAAA,WAAM;AAAA,QAAoB,OAAO,KAAK,SAAS,kBAAkB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAgB,OAAO,KAAK,SAAS,cAAc,IAAE,EAAC;AAAA,WAAM;AAAA,QAAuB,OAAO,KAAK,SAAS,qBAAqB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAmB,OAAO,KAAK,SAAS,iBAAiB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAmB,OAAO,KAAK,SAAS,iBAAiB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAoB,OAAO,KAAK,SAAS,kBAAkB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAgB,OAAO,KAAK,SAAS,cAAc,IAAE,EAAC;AAAA,WAAM;AAAA,QAAoB,OAAO,KAAK,SAAS,kBAAkB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAuB,OAAO,KAAK,SAAS,qBAAqB,IAAE,EAAC;AAAA,WAAM;AAAA,QAA4B,OAAO,KAAK,SAAS,0BAA0B,IAAE,EAAC;AAAA,WAAM;AAAA,QAAoB,OAAO,KAAK,SAAS,kBAAkB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAqB,OAAO,KAAK,SAAS,mBAAmB,IAAE,EAAC;AAAA,WAAM;AAAA,QAA+B,OAAO,KAAK,SAAS,6BAA6B,IAAE,EAAC;AAAA,WAAM;AAAA,QAAe,OAAO,KAAK,SAAS,aAAa,IAAE,EAAC;AAAA,WAAM;AAAA,QAAa,OAAO,KAAK,SAAS,WAAW,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAY,OAAO,KAAK,SAAS,UAAU,IAAE,EAAC;AAAA,WAAM;AAAA,QAAY,OAAO,KAAK,SAAS,UAAU,IAAE,EAAC;AAAA,WAAM;AAAA,QAAY,OAAO,KAAK,SAAS,UAAU,IAAE,EAAC;AAAA,WAAM;AAAA,QAAY,OAAO,KAAK,SAAS,UAAU,IAAE,EAAC;AAAA,WAAM;AAAA,QAAY,OAAO,KAAK,SAAS,UAAU,IAAE,EAAC;AAAA,WAAM;AAAA,QAAW,OAAO,KAAK,SAAS,SAAS,IAAE,EAAC;AAAA,WAAM;AAAA,QAAY,OAAO,KAAK,SAAS,UAAU,IAAE,EAAC;AAAA,WAAM;AAAA,QAAiB,OAAO,KAAK,SAAS,eAAe,IAAE,EAAC;AAAA,WAAM;AAAA,QAA4B,OAAO,KAAK,SAAS,0BAA0B,IAAE,EAAC;AAAA,WAAM;AAAA,QAAe,OAAO,KAAK,SAAS,aAAa,IAAE,EAAC;AAAA,WAAM;AAAA,QAAe,OAAO,KAAK,SAAS,aAAa,IAAE,EAAC;AAAA,WAAM;AAAA,QAAW,OAAO,KAAK,SAAS,SAAS,IAAE,EAAC;AAAA,WAAM;AAAA,QAAW,OAAO,KAAK,SAAS,SAAS,IAAE,EAAC;AAAA,WAAM;AAAA,QAAe,OAAO,KAAK,SAAS,aAAa,IAAE,EAAC;AAAA,WAAM;AAAA,QAAgB,OAAO,KAAK,SAAS,cAAc,IAAE,EAAC;AAAA,WAAM;AAAA,QAAgB,OAAO,KAAK,SAAS,cAAc,IAAE,EAAC;AAAA,WAAM;AAAA,QAAgB,OAAO,KAAK,SAAS,cAAc,IAAE,EAAC;AAAA,WAAM;AAAA,QAAgB,OAAO,KAAK,SAAS,cAAc,IAAE,EAAC;AAAA,WAAM;AAAA,QAAiB,OAAO,KAAK,SAAS,eAAe,IAAE,EAAC;AAAA,WAAM;AAAA,QAAiB,OAAO,KAAK,SAAS,eAAe,IAAE,EAAC;AAAA,WAAM;AAAA,QAAa,OAAO,KAAK,SAAS,WAAW,IAAE,EAAC;AAAA,WAAM;AAAA,QAAa,OAAO,KAAK,SAAS,WAAW,IAAE,EAAC;AAAA,WAAM;AAAA,QAAkB,OAAO,KAAK,SAAS,gBAAgB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAkB,OAAO,KAAK,SAAS,gBAAgB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAkB,OAAO,KAAK,SAAS,gBAAgB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAiB,OAAO,KAAK,SAAS,eAAe,IAAE,EAAC;AAAA,WAAM;AAAA,QAAiB,OAAO,KAAK,SAAS,eAAe,IAAE,EAAC;AAAA,WAAM;AAAA,QAAmB,OAAO,KAAK,SAAS,iBAAiB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAuB,OAAO,KAAK,SAAS,qBAAqB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAuB,OAAO,KAAK,SAAS,qBAAqB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAuB,OAAO,KAAK,SAAS,qBAAqB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAiB,OAAO,KAAK,SAAS,eAAe,IAAE,EAAC;AAAA,WAAM;AAAA,QAAoB,OAAO,KAAK,SAAS,kBAAkB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAyB,OAAO,KAAK,SAAS,uBAAuB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAgB,OAAO,KAAK,SAAS,cAAc,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAuB,OAAO,KAAK,SAAS,qBAAqB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAuB,OAAO,KAAK,SAAS,qBAAqB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAa,OAAO,KAAK,SAAS,WAAW,IAAE,EAAC;AAAA,WAAM;AAAA,QAAkB,OAAO,KAAK,SAAS,gBAAgB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAsB,OAAO,KAAK,SAAS,oBAAoB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAoB,OAAO,KAAK,SAAS,kBAAkB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAqB,OAAO,KAAK,SAAS,mBAAmB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAc,OAAO,KAAK,SAAS,YAAY,IAAE,EAAC;AAAA,WAAM;AAAA,QAAgB,OAAO,KAAK,SAAS,cAAc,IAAE,EAAC;AAAA,WAAM;AAAA,QAAmB,OAAO,KAAK,SAAS,iBAAiB,IAAE,EAAC;AAAA,WAAM;AAAA,QAAY,OAAO,KAAK,SAAS,UAAU,IAAE,EAAC;AAAA,WAAM;AAAA,QAAY,OAAO,KAAK,SAAS,UAAU,IAAE,EAAC;AAAA;AAAA,IAAE,MAAM,KAAE,GAAE,YAAY,GAAE,IAAI;AAAA,IAAE,IAAG,IAAE;AAAA,MAAC,MAAM,KAAE,GAAE,MAAM;AAAA,MAAE,SAAQ,KAAE,EAAE,KAAE,GAAE,KAAK,KAAK,QAAO,EAAE,IAAE;AAAA,QAAC,MAAM,KAAE,GAAE,KAAK,KAAK,KAAG,KAAE,KAAK,eAAe,GAAE,KAAK,KAAG,EAAC;AAAA,QAAE,GAAE,YAAY,GAAE,MAAK,IAAE,EAAC;AAAA,MAAC;AAAA,MAAC,OAAO,KAAK,gBAAgB,GAAE,KAAK,MAAK,EAAC;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,qBAAqB,CAAC,IAAE,IAAE;AAAA,IAAC,IAAG,CAAC,GAAE,QAAU,GAAE,KAAK,WAAX;AAAA,MAAkB,OAAO,IAAI,IAAG,GAAE,KAAK,YAAY,GAAE,IAAI,CAAC;AAAA,IAAE,MAAM,KAAE,KAAK,eAAe,GAAE,KAAK,IAAG,EAAC;AAAA,IAAE,OAAO,GAAE,WAAS,KAAK,YAAY,GAAE,IAAI,GAAE,GAAE,WAAW,MAAK,GAAE,SAAQ,EAAC,EAAE,MAAM;AAAA;AAAA,EAAE,mBAAmB,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,YAAY,GAAE,IAAI,GAAE,KAAE,GAAE,KAAK,YAAY,GAAE,KAAE,IAAG;AAAA,IAAG,IAAY,OAAJ;AAAA,MAAM,OAAO,QAAQ,MAAM,2BAA2B,YAAW,GAAE,MAAM,GAAE;AAAA,IAAK,MAAM,KAAE,CAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,IAAG,GAAE,UAAS;AAAA,QAAC,MAAM,KAAE,GAAE;AAAA,QAAY,WAAU,MAAK;AAAA,UAAE,GAAE,KAAK,EAAC;AAAA,MAAC,EAAM;AAAA,WAAE,KAAK,GAAE,WAAW;AAAA,IAAO,SAAG,GAAE;AAAA,MAAK,WAAU,MAAK,GAAE,MAAK;AAAA,QAAC,MAAM,KAAE,KAAK,eAAe,IAAE,EAAC;AAAA,QAAE,IAAG,cAAa,KAAG;AAAA,UAAC,MAAM,KAAE,GAAE;AAAA,UAAK,SAAQ,KAAE,EAAE,KAAE,GAAE,QAAO,EAAE,IAAE;AAAA,YAAC,IAAI,KAAE,GAAE;AAAA,YAAG,GAAE,KAAK,EAAC;AAAA,UAAC;AAAA,QAAC,EAAM,SAAG,cAAa,KAAG;AAAA,UAAC,IAAI,KAAE,GAAE;AAAA,UAAM,GAAE,KAAK,EAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC,IAAG,GAAE,gBAAgB,OAAW,GAAE,KAAK,WAAd,SAAuB,GAAE,KAAK,SAAO,IAAG,MAAS,GAAE,WAAN,GAAa;AAAA,MAAC,MAAM,KAAE,IAAI,MAAM,EAAC,EAAE,KAAK,CAAC;AAAA,MAAE,OAAO,IAAI,IAAG,IAAE,EAAC,EAAE,WAAW,MAAK,GAAE,SAAQ,EAAC;AAAA,IAAC;AAAA,IAAC,IAAO,GAAE,WAAN;AAAA,MAAa,MAAK,GAAE,SAAO;AAAA,QAAG,GAAE,KAAK,GAAE,EAAE;AAAA,IAAE,IAAG,GAAE,SAAO;AAAA,MAAE,OAAO,QAAQ,MAAM,iCAAiC,GAAE,MAAM,GAAE;AAAA,IAAK,OAAO,IAAI,IAAG,GAAE,SAAO,KAAE,GAAE,MAAM,GAAE,EAAC,IAAE,IAAE,EAAC,EAAE,WAAW,MAAK,GAAE,SAAQ,EAAC;AAAA;AAAA,EAAE,sBAAsB,CAAC,IAAE,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,YAAY,GAAE,IAAI,GAAE,KAAE,GAAE,KAAK,YAAY,GAAE,KAAE,IAAG;AAAA,IAAG,IAAY,OAAJ;AAAA,MAAM,OAAO,QAAQ,MAAM,8BAA8B,YAAW,GAAE,MAAM,GAAE;AAAA,IAAK,MAAM,KAAE,CAAC;AAAA,IAAE,IAAG,cAAa;AAAA,MAAG,IAAG,GAAE,UAAS;AAAA,QAAC,MAAM,KAAE,GAAE;AAAA,QAAY,WAAU,MAAK;AAAA,UAAE,GAAE,KAAK,EAAC;AAAA,MAAC,EAAM;AAAA,WAAE,KAAK,GAAE,WAAW;AAAA,IAAO,SAAG,GAAE;AAAA,MAAK,WAAU,MAAK,GAAE,MAAK;AAAA,QAAC,MAAM,KAAE,KAAK,eAAe,IAAE,EAAC;AAAA,QAAE,cAAa,MAAG,GAAE,KAAK,GAAG,GAAE,IAAI,IAAE,cAAa,MAAG,GAAE,KAAK,GAAE,KAAK,IAAE,cAAa,OAAI,GAAE,KAAK,GAAG,GAAE,IAAI;AAAA,MAAC;AAAA,IAAC,IAAG,cAAa,MAAU,GAAE,WAAT,SAAkB,GAAE,SAAO,KAAK,YAAY,KAAK,IAAO,GAAE,WAAN,GAAa;AAAA,MAAC,MAAM,KAAE,IAAI,MAAM,GAAE,EAAE,EAAE,KAAK,CAAC;AAAA,MAAE,OAAO,IAAI,IAAG,IAAE,EAAC,EAAE,WAAW,MAAK,GAAE,SAAQ,EAAC;AAAA,IAAC;AAAA,IAAC,OAAO,GAAE,WAAS,GAAE,MAAI,QAAQ,MAAM,oCAAoC,GAAE,MAAM,GAAE,QAAM,IAAI,IAAG,IAAE,EAAC,EAAE,WAAW,MAAK,GAAE,SAAQ,EAAC;AAAA;AAAE;AAAC,IAAG,YAAU,IAAI,IAAG,IAAI,GAAE,SAAQ,IAAI,GAAE,IAAI,GAAE,IAAG,eAAa,IAAI,IAAG,IAAI,GAAE,YAAW,IAAI,GAAE,IAAI,GAAE,IAAG,YAAU,IAAI,IAAI,CAAC,CAAC,OAAM,CAAC,GAAE,CAAC,OAAM,CAAC,GAAE,CAAC,OAAM,CAAC,GAAE,CAAC,OAAM,CAAC,GAAE,CAAC,OAAM,CAAC,CAAC,CAAC;AAAA;AAAE,MAAM,IAAE;AAAA,EAAC,WAAW,GAAE;AAAA,IAAC,KAAK,YAAU,IAAI,KAAI,KAAK,UAAQ,IAAI,KAAI,KAAK,UAAQ,IAAI;AAAA;AAAI;AAAA;AAAC,MAAM,IAAE;AAAA,EAAC,WAAW,GAAE;AAAA,IAAC,KAAK,UAAQ,CAAC,GAAE,KAAK,WAAS,GAAE,KAAK,eAAa,GAAE,KAAK,uBAAqB,CAAC,GAAE,KAAK,eAAa,CAAC,GAAE,KAAK,WAAS,IAAI,KAAG,KAAK,QAAM,IAAI,KAAG,KAAK,oBAAkB;AAAA;AAAA,EAAE,KAAK,CAAC,IAAE;AAAA,IAAC,KAAK,YAAY,EAAC,GAAE,KAAK,qBAAqB,SAAO;AAAA,IAAE,MAAM,KAAE,CAAC;AAAA,IAAE,MAAK,CAAC,KAAK,SAAS,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,0BAA0B;AAAA,MAAE,IAAG,CAAC;AAAA,QAAE;AAAA,MAAM,GAAE,KAAK,EAAC;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,qBAAqB,SAAO,GAAE;AAAA,MAAC,WAAU,MAAK,KAAK,sBAAqB;AAAA,QAAC,QAAU,WAAJ,IAAkB,WAAJ,OAAE;AAAA,QAAY,IAAG,cAAa,KAAG;AAAA,UAAC,MAAM,KAAE,GAAE,MAAK,KAAE,KAAK,SAAS,UAAU,IAAI,EAAC;AAAA,UAAE,IAAG;AAAA,YAAE,IAAG;AAAA,cAAC,MAAM,KAAE,GAAE,cAAc,KAAK,KAAK;AAAA,cAAE,GAAE,QAAM;AAAA,cAAE,OAAM,IAAE;AAAA,QAAE;AAAA,MAAC;AAAA,MAAC,KAAK,qBAAqB,SAAO;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,oBAAkB;AAAA,MAAE,WAAU,MAAK;AAAA,QAAE,GAAE,OAAQ,QAAG;AAAA,UAAC,cAAa,OAAI,cAAa,MAAG,GAAE,OAAK,KAAK,aAAa,GAAE,IAAI,IAAE,cAAa,MAAG,GAAE,SAAO,KAAK,aAAa,GAAE,MAAM,IAAE,cAAa,MAAG,cAAa,MAAG,cAAa,KAAE,GAAE,OAAK,KAAK,aAAa,GAAE,IAAI,IAAE,cAAa,KAAE,GAAE,aAAW,KAAK,aAAa,GAAE,UAAU,IAAE,cAAa,QAAK,GAAE,OAAK,KAAK,aAAa,GAAE,IAAI;AAAA,SAAI;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,YAAY,CAAC,IAAE;AAAA,IAAC,IAAG,cAAa,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,SAAS,GAAE,IAAI;AAAA,MAAE,IAAG;AAAA,QAAE,OAAO;AAAA,IAAC,EAAM;AAAA,oBAAa,MAAG,GAAE,OAAK,KAAK,aAAa,GAAE,IAAI,IAAE,cAAa,QAAK,GAAE,SAAO,KAAK,aAAa,GAAE,MAAM;AAAA,IAAG,OAAO;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE;AAAA,IAAC,IAAG;AAAA,MAAE,IAAa,OAAO,MAAjB,UAAmB;AAAA,QAAC,MAAM,KAAE,IAAI,IAAG,EAAC;AAAA,QAAE,KAAK,UAAQ,GAAE,WAAW;AAAA,MAAC,EAAM;AAAA,aAAK,UAAQ;AAAA,IAAO;AAAA,WAAK,UAAQ,CAAC;AAAA,IAAE,KAAK,WAAS;AAAA;AAAA,EAAE,WAAW,CAAC,IAAE,IAAE;AAAA,IAAC,OAAO,GAAE,OAAW,MAAN,OAAQ,KAAE,KAAK,cAAa;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE,IAAE;AAAA,IAAC,OAAM,EAAC,OAAM,IAAE,SAAQ,IAAE,UAAS,MAAI,GAAG,KAAG;AAAA;AAAA,EAAE,QAAQ,GAAE;AAAA,IAAC,OAAO,KAAK,YAAU,KAAK,QAAQ,UAAQ,KAAK,MAAM,EAAE,QAAM,IAAG;AAAA;AAAA,EAAI,MAAM,CAAC,IAAE;AAAA,IAAC,IAAG,cAAa;AAAA,MAAG,OAAM,CAAC,CAAC,KAAK,OAAO,EAAC,MAAI,KAAK,SAAS,GAAE;AAAA,IAAI,SAAQ,KAAE,GAAE,KAAE,GAAE,OAAO,KAAE,IAAE,EAAE,IAAE;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAG,IAAG,KAAK,OAAO,EAAC;AAAA,QAAE,OAAO,KAAK,SAAS,GAAE;AAAA,IAAE;AAAA,IAAC,OAAM;AAAA;AAAA,EAAG,QAAQ,CAAC,IAAE,IAAE;AAAA,IAAC,IAAG,KAAK,OAAO,EAAC;AAAA,MAAE,OAAO,KAAK,SAAS;AAAA,IAAE,MAAM,KAAK,OAAO,KAAK,MAAM,GAAE,GAAG,YAAW,KAAK,cAAc;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE;AAAA,IAAC,IAAG,KAAK,SAAS;AAAA,MAAE,OAAM;AAAA,IAAG,MAAM,KAAE,KAAK,MAAM;AAAA,IAAE,IAAG,cAAa,OAAM;AAAA,MAAC,MAAM,KAAE,GAAE;AAAA,MAAK,IAAI,KAAE;AAAA,MAAG,WAAU,MAAK,IAAE;AAAA,QAAC,IAAG,OAAI;AAAA,UAAE,OAAM;AAAA,QAAG,OAAI,IAAG,OAAO,SAAO,KAAE;AAAA,MAAG;AAAA,MAAC,IAAG,IAAE;AAAA,QAAC,MAAM,KAAE,IAAG,OAAO,KAAK,KAAK,KAAK,GAAE,MAAM;AAAA,QAAE,IAAG,MAAM,GAAE,SAAL,KAAY,GAAE,MAAI,GAAE;AAAA,UAAO,OAAM;AAAA,MAAE;AAAA,MAAC,OAAM;AAAA,IAAE;AAAA,IAAC,IAAG,GAAE,SAAO;AAAA,MAAE,OAAM;AAAA,IAAG,IAAG,OAAI,IAAG,OAAO,MAAK;AAAA,MAAC,MAAM,KAAE,IAAG,OAAO,KAAK,KAAK,KAAK,GAAE,MAAM;AAAA,MAAE,OAAO,MAAM,GAAE,SAAL,KAAY,GAAE,MAAI,GAAE;AAAA,IAAM;AAAA,IAAC,OAAM;AAAA;AAAA,EAAG,QAAQ,GAAE;AAAA,IAAC,IAAI,IAAE;AAAA,IAAE,OAAO,KAAK,gBAAqB,MAAU,KAAE,KAAK,MAAM,OAArB,QAAkC,OAAJ,YAAW,YAAE,GAAE,UAAvD,QAAuE,OAAJ,YAAM,KAAE,IAAG,KAAK,SAAS,KAAG,KAAK,YAAW,KAAK,UAAU;AAAA;AAAA,EAAE,KAAK,GAAE;AAAA,IAAC,OAAO,KAAK,QAAQ,KAAK;AAAA;AAAA,EAAU,SAAS,GAAE;AAAA,IAAC,OAAO,KAAK,QAAQ,KAAK,WAAS;AAAA;AAAA,EAAG,yBAAyB,GAAE;AAAA,IAAC,MAAK,KAAK,OAAO,IAAG,OAAO,SAAS,KAAG,CAAC,KAAK,SAAS;AAAA;AAAA,IAAI,IAAG,KAAK,OAAO,IAAG,SAAS,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,YAAY;AAAA,MAAE,OAAO,KAAK,SAAS,IAAG,OAAO,WAAU,cAAgB,GAAE,KAAK,MAAM,WAAW,UAAU,CAAC,EAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,UAAU,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,YAAY;AAAA,MAAE,OAAO,KAAK,SAAS,IAAG,OAAO,WAAU,cAAgB,GAAE,KAAK,MAAM,WAAW,UAAU,CAAC,EAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,QAAQ,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,oBAAoB;AAAA,MAAE,OAAO,KAAK,SAAS,IAAG,OAAO,WAAU,cAAgB,GAAE,KAAK,MAAM,WAAW,UAAU,CAAC,EAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,MAAM,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,kBAAkB;AAAA,MAAE,OAAO,KAAK,SAAS,IAAG,OAAO,WAAU,cAAgB,GAAE,KAAK,MAAM,WAAW,UAAU,CAAC,EAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,MAAM,KAAE,KAAK,WAAW;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,SAAS,GAAG,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,sBAAsB;AAAA,MAAE,OAAa,MAAN,SAAU,GAAE,aAAW,KAAG,KAAK,SAAS,IAAG,OAAO,WAAU,eAAiB,GAAE,KAAK,MAAM,WAAW,UAAU,CAAC,EAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,QAAQ,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,wBAAwB;AAAA,MAAE,OAAa,MAAN,SAAU,GAAE,aAAW,KAAG,KAAK,SAAS,IAAG,OAAO,WAAU,eAAiB,GAAE,KAAK,MAAM,WAAW,UAAU,CAAC,EAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,GAAG,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,iBAAiB;AAAA,MAAE,OAAa,MAAN,SAAU,GAAE,aAAW,KAAG,KAAK,SAAS,IAAG,OAAO,WAAU,eAAiB,GAAE,KAAK,MAAM,WAAW,UAAU,CAAC,EAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,mBAAmB;AAAA,MAAE,OAAa,MAAN,SAAU,GAAE,aAAW,KAAG,KAAK,SAAS,IAAG,OAAO,WAAU,eAAiB,GAAE,KAAK,MAAM,WAAW,UAAU,CAAC,EAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,MAAM,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,aAAa;AAAA,MAAE,OAAa,MAAN,SAAU,GAAE,aAAW,KAAG,KAAK,MAAM,WAAW,UAAU,CAAC,EAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,EAAE,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,eAAe;AAAA,MAAE,OAAa,MAAN,SAAU,GAAE,aAAW,KAAG,KAAK,MAAM,WAAW,UAAU,CAAC,EAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,cAAc,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,EAAE;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,cAAa,KAAE,KAAK,SAAS,IAAG,OAAO,OAAM,yBAAyB,EAAE,SAAS;AAAA,IAAE,KAAK,SAAS,IAAG,OAAO,YAAW,sCAAwC;AAAA,IAAE,MAAM,KAAE,CAAC;AAAA,IAAE,IAAG,CAAC,KAAK,OAAO,IAAG,OAAO,WAAW;AAAA,MAAE,GAAE;AAAA,QAAC,IAAG,KAAK,OAAO,IAAG,OAAO,WAAW;AAAA,UAAE;AAAA,QAAM,MAAM,KAAE,KAAK,WAAW,GAAE,KAAE,KAAK,SAAS,IAAG,OAAO,MAAK,yBAAyB,EAAE,SAAS;AAAA,QAAE,KAAK,SAAS,IAAG,OAAO,OAAM,iCAAmC;AAAA,QAAE,MAAM,KAAE,KAAK,WAAW,GAAE,KAAE,KAAK,WAAW;AAAA,QAAQ,MAAN,SAAU,GAAE,aAAW,IAAE,GAAE,KAAK,KAAK,YAAY,IAAI,IAAG,IAAE,IAAE,EAAC,CAAC,CAAC;AAAA,MAAE,SAAO,KAAK,OAAO,IAAG,OAAO,KAAK;AAAA,IAAG,KAAK,SAAS,IAAG,OAAO,aAAY,wCAA0C;AAAA,IAAE,IAAI,KAAE;AAAA,IAAK,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,WAAW;AAAA,MAAE,KAAE,KAAK,WAAW,GAAQ,MAAN,SAAU,GAAE,aAAW;AAAA,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,oBAAoB,GAAE,KAAE,KAAK;AAAA,IAAa,OAAO,KAAK,YAAY,IAAI,GAAE,IAAE,IAAE,IAAE,IAAE,IAAE,EAAC,GAAE,EAAC;AAAA;AAAA,EAAE,mBAAmB,GAAE;AAAA,IAAC,MAAM,KAAE,CAAC;AAAA,IAAE,KAAI,KAAK,SAAS,IAAG,OAAO,YAAW,yBAA2B,EAAE,CAAC,KAAK,OAAO,IAAG,OAAO,WAAW,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,WAAW;AAAA,MAAS,OAAP,QAAU,GAAE,KAAK,EAAC;AAAA,IAAC;AAAA,IAAC,OAAO,KAAK,SAAS,IAAG,OAAO,aAAY,yBAA2B,GAAE;AAAA;AAAA,EAAE,UAAU,GAAE;AAAA,IAAC,MAAK,KAAK,OAAO,IAAG,OAAO,SAAS,KAAG,CAAC,KAAK,SAAS;AAAA;AAAA,IAAI,IAAG,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW,GAAE,KAAK,OAAO,IAAG,SAAS,EAAE;AAAA,MAAE,OAAO,KAAK,cAAc;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,SAAS,MAAM;AAAA,MAAE,OAAO,KAAK,kBAAkB;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,SAAS,IAAI;AAAA,MAAE,OAAO,KAAK,gBAAgB;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,SAAS,GAAG;AAAA,MAAE,OAAO,KAAK,eAAe;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,SAAS,KAAK;AAAA,MAAE,OAAO,KAAK,iBAAiB;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,SAAS,UAAU;AAAA,MAAE,OAAO,KAAK,sBAAsB;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,SAAS,aAAa;AAAA,MAAE,OAAO,KAAK,yBAAyB;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,OAAO,UAAU;AAAA,MAAE,OAAO,KAAK,oBAAoB;AAAA,IAAE,IAAI,KAAE;AAAA,IAAK,IAAG,KAAK,OAAO,IAAG,SAAS,MAAM;AAAA,MAAE,KAAE,KAAK,kBAAkB;AAAA,IAAO,SAAG,KAAK,OAAO,CAAC,IAAG,SAAS,KAAI,IAAG,SAAS,KAAI,IAAG,SAAS,KAAK,CAAC;AAAA,MAAE,KAAE,KAAK,oBAAoB;AAAA,IAAO,SAAG,KAAK,OAAO,IAAG,SAAS,OAAO;AAAA,MAAE,KAAE,KAAK,YAAY,IAAI,GAAE;AAAA,IAAO,SAAG,KAAK,OAAO,IAAG,SAAS,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,YAAY,IAAI,GAAE;AAAA,MAAE,IAAG,KAAK,aAAa,SAAO,GAAE;AAAA,QAAC,MAAM,KAAE,KAAK,aAAa,KAAK,aAAa,SAAO;AAAA,QAAG,GAAE,SAAO,GAAE;AAAA,MAAE;AAAA,MAAC,KAAE,IAAE,KAAK,OAAO,IAAG,SAAS,EAAE,MAAI,KAAK,SAAS,GAAE,GAAE,YAAU,KAAK,2BAA2B;AAAA,IAAE,EAAM,SAAG,KAAK,OAAO,IAAG,SAAS,QAAQ,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,YAAY,IAAI,GAAE;AAAA,MAAE,IAAG,EAAE,KAAK,aAAa,SAAO;AAAA,QAAG,MAAM,KAAK,OAAO,KAAK,MAAM,GAAE,mDAAmD,GAAE,MAAM;AAAA,MAAE;AAAA,QAAC,MAAM,KAAE,KAAK,aAAa,KAAK,aAAa,SAAO;AAAA,QAAG,GAAE,SAAO,GAAE;AAAA,MAAE;AAAA,MAAC,KAAE;AAAA,IAAC,EAAM;AAAA,WAAE,KAAK,+BAA+B,KAAG,KAAK,qBAAqB,KAAG,KAAK,sBAAsB;AAAA,IAAE,OAAa,MAAN,QAAS,KAAK,SAAS,IAAG,OAAO,WAAU,+BAAiC,GAAE;AAAA;AAAA,EAAE,wBAAwB,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,aAAa;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,cAAa,KAAE,KAAK,2BAA2B;AAAA,IAAE,OAAO,KAAK,YAAY,IAAI,GAAE,EAAC,GAAE,EAAC;AAAA;AAAA,EAAE,gBAAgB,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,KAAK;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,YAAY,IAAI,GAAE,MAAK,IAAI,CAAC;AAAA,IAAE,OAAO,KAAK,aAAa,KAAK,EAAC,GAAE,GAAE,YAAU,KAAK,2BAA2B,GAAE,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW,GAAE,GAAE,OAAK,KAAK,oBAAoB,GAAE,KAAK,aAAa,IAAI,GAAE;AAAA;AAAA,EAAE,qBAAqB,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,aAAa,SAAO,IAAE,KAAK,aAAa,KAAK,aAAa,SAAO,GAAG,KAAG;AAAA,IAAG,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,UAAU;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,cAAa,KAAE,KAAK,oBAAoB;AAAA,IAAE,OAAO,KAAK,YAAY,IAAI,GAAE,IAAE,EAAC,GAAE,EAAC;AAAA;AAAA,EAAE,cAAc,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,GAAG;AAAA,MAAE,OAAO;AAAA,IAAK,KAAK,SAAS,IAAG,OAAO,YAAW,eAAiB;AAAA,IAAE,MAAM,KAAE,KAAK,YAAY,IAAI,GAAE,MAAK,MAAK,MAAK,IAAI,CAAC;AAAA,IAAE,OAAO,KAAK,aAAa,KAAK,EAAC,GAAE,GAAE,OAAK,KAAK,OAAO,IAAG,OAAO,SAAS,IAAE,OAAK,KAAK,UAAU,GAAE,KAAK,SAAS,IAAG,OAAO,WAAU,eAAiB,GAAE,GAAE,YAAU,KAAK,OAAO,IAAG,OAAO,SAAS,IAAE,OAAK,KAAK,6BAA6B,GAAE,KAAK,SAAS,IAAG,OAAO,WAAU,eAAiB,GAAE,GAAE,YAAU,KAAK,OAAO,IAAG,OAAO,WAAW,IAAE,OAAK,KAAK,eAAe,GAAE,KAAK,SAAS,IAAG,OAAO,aAAY,eAAiB,GAAE,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW,GAAE,GAAE,OAAK,KAAK,oBAAoB,GAAE,KAAK,aAAa,IAAI,GAAE;AAAA;AAAA,EAAE,SAAS,GAAE;AAAA,IAAC,OAAO,KAAK,oBAAoB,KAAG,KAAK,qBAAqB,KAAG,KAAK,sBAAsB;AAAA;AAAA,EAAE,cAAc,GAAE;AAAA,IAAC,OAAO,KAAK,qBAAqB,KAAG,KAAK,+BAA+B,KAAG,KAAK,sBAAsB;AAAA;AAAA,EAAE,mBAAmB,GAAE;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,GAAG,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,eAAe;AAAA,MAAE,IAAU,OAAP;AAAA,QAAS,MAAM,KAAK,OAAO,KAAK,MAAM,GAAE,gCAAgC;AAAA,MAAE,IAAI,KAAE;AAAA,MAAK,OAAO,KAAK,OAAO,IAAG,OAAO,KAAK,MAAI,KAAE,KAAK,6BAA6B,IAAG,KAAK,YAAY,IAAI,GAAE,GAAE,MAAK,GAAE,MAAK,GAAE,SAAQ,GAAE,QAAO,EAAC,GAAE,GAAE,IAAI;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,GAAG,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,cAAa,KAAE,KAAK,SAAS,IAAG,OAAO,MAAK,wBAAwB,EAAE,SAAS;AAAA,MAAE,IAAI,KAAE;AAAA,MAAK,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,QAAC,MAAM,KAAE,KAAK,WAAW;AAAA,QAAE,KAAE,KAAK,WAAW,GAAQ,MAAN,SAAU,GAAE,aAAW;AAAA,MAAE;AAAA,MAAC,KAAK,SAAS,IAAG,OAAO,OAAM,uBAAyB;AAAA,MAAE,MAAM,KAAE,KAAK,6BAA6B;AAAA,MAAE,OAAO,KAAK,YAAY,IAAI,GAAE,IAAE,IAAE,MAAK,MAAK,EAAC,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,cAAa,KAAE,KAAK,SAAS,IAAG,OAAO,MAAK,0BAA0B,EAAE,SAAS;AAAA,MAAE,IAAI,KAAE;AAAA,MAAK,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,QAAC,MAAM,KAAE,KAAK,WAAW;AAAA,QAAE,KAAE,KAAK,WAAW,GAAQ,MAAN,SAAU,GAAE,aAAW;AAAA,MAAE;AAAA,MAAC,KAAK,SAAS,IAAG,OAAO,OAAM,yBAA2B;AAAA,MAAE,MAAM,KAAE,KAAK,6BAA6B;AAAA,MAAE,OAAc,OAAP,QAAU,cAAa,QAAK,KAAE,GAAE,OAAM,KAAK,YAAY,IAAI,GAAE,IAAE,IAAE,MAAK,MAAK,EAAC,GAAE,EAAC;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,8BAA8B,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,UAAS,KAAE,KAAK,kBAAkB;AAAA,IAAE,IAAS,MAAN;AAAA,MAAQ,OAAO;AAAA,IAAK,IAAG,CAAC,KAAK,OAAO,IAAG,mBAAmB;AAAA,MAAE,OAAO,KAAK,WAAS,IAAE;AAAA,IAAK,MAAM,KAAE,KAAK,SAAS,IAAG,qBAAoB,6BAA6B;AAAA,IAAE,OAAO,KAAK,YAAY,IAAI,GAAE,GAAE,SAAO,IAAG,OAAO,YAAU,GAAE,YAAU,GAAE,WAAU,EAAC,CAAC;AAAA;AAAA,EAAE,qBAAqB,GAAE;AAAA,IAAC,IAAI,KAAE;AAAA,IAAK,MAAM,KAAE,KAAK;AAAA,IAAa,IAAG,KAAK,OAAO,IAAG,OAAO,WAAW;AAAA,MAAE,OAAO;AAAA,IAAK,IAAI,KAAE,KAAK,OAAO,IAAG,OAAO,UAAU;AAAA,IAAE,IAAG,OAAI,KAAE,KAAK,kBAAkB,IAAG,CAAC,MAAS,MAAN;AAAA,MAAQ,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,SAAS,IAAG,sBAAqB,+BAA+B,GAAE,KAAE,KAAK,6BAA6B;AAAA,IAAE,OAAO,KAAK,YAAY,IAAI,GAAE,GAAE,MAAM,GAAE,MAAM,GAAE,IAAE,EAAC,GAAE,EAAC;AAAA;AAAA,EAAE,oBAAoB,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,OAAO,KAAK;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,cAAa,KAAE,KAAK,UAAS,KAAE,KAAK,SAAS,IAAG,OAAO,OAAM,yBAAyB,GAAE,KAAE,KAAK,0BAA0B;AAAA,IAAE,OAAc,OAAP,QAAU,KAAK,WAAS,IAAE,QAAM,KAAK,YAAY,IAAI,GAAE,GAAE,QAAO,EAAC,GAAE,EAAC;AAAA;AAAA,EAAE,eAAe,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,IAAI;AAAA,MAAE,OAAO;AAAA,IAAK,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW,GAAE,KAAK,SAAS,IAAG,OAAO,YAAW,wBAA0B;AAAA,IAAE,MAAM,KAAE,KAAK,YAAY,IAAI,GAAE,CAAC,GAAE,IAAI,CAAC;AAAA,IAAE,KAAK,aAAa,KAAK,EAAC;AAAA,IAAE,IAAI,KAAE,KAAK,WAAW;AAAA,IAAE,MAAY,OAAP,QAAU;AAAA,MAAC,IAAG,MAAM,QAAQ,EAAC;AAAA,QAAE,SAAQ,MAAK;AAAA,UAAE,GAAE,KAAK,KAAK,EAAC;AAAA,MAAO;AAAA,WAAE,KAAK,KAAK,EAAC;AAAA,MAAE,IAAG,cAAa,IAAE;AAAA,QAAC,GAAE,aAAW;AAAA,QAAE;AAAA,MAAK;AAAA,MAAC,KAAE,KAAK,WAAW;AAAA,IAAC;AAAA,IAAC,OAAO,KAAK,aAAa,IAAI,GAAE,KAAK,SAAS,IAAG,OAAO,aAAY,wBAA0B,GAAE;AAAA;AAAA,EAAE,iBAAiB,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,MAAM;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,YAAY,IAAI,GAAE,MAAK,CAAC,CAAC,CAAC;AAAA,IAAE,IAAG,KAAK,aAAa,KAAK,EAAC,GAAE,GAAE,YAAU,KAAK,2BAA2B,GAAE,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW,GAAE,KAAK,SAAS,IAAG,OAAO,YAAW,0BAA4B,GAAE,GAAE,QAAM,KAAK,aAAa,GAAQ,GAAE,SAAR,QAAkB,GAAE,MAAM,UAAX;AAAA,MAAkB,MAAM,KAAK,OAAO,KAAK,UAAU,GAAE,+BAAmC;AAAA,IAAE,OAAO,KAAK,SAAS,IAAG,OAAO,aAAY,0BAA4B,GAAE,KAAK,aAAa,IAAI,GAAE;AAAA;AAAA,EAAE,YAAY,GAAE;AAAA,IAAC,MAAM,KAAE,CAAC;AAAA,IAAE,IAAI,KAAE;AAAA,IAAG,MAAK,KAAK,OAAO,CAAC,IAAG,SAAS,SAAQ,IAAG,SAAS,IAAI,CAAC,KAAG;AAAA,MAAC,IAAG,KAAK,OAAO,IAAG,SAAS,IAAI,GAAE;AAAA,QAAC,MAAM,KAAE,KAAK,gBAAgB;AAAA,QAAE,WAAU,MAAK;AAAA,UAAE,IAAG,cAAa,KAAG;AAAA,YAAC,IAAG;AAAA,cAAE,MAAM,KAAK,OAAO,KAAK,UAAU,GAAE,6CAA6C;AAAA,YAAE,KAAE;AAAA,YAAG;AAAA,UAAK;AAAA,QAAC,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW,GAAE,KAAK,SAAS,IAAG,OAAO,YAAW,8BAAgC;AAAA,QAAE,MAAM,KAAE,KAAK,WAAW;AAAA,QAAE,KAAK,SAAS,IAAG,OAAO,aAAY,8BAAgC,GAAE,GAAE,KAAK,KAAK,YAAY,IAAI,IAAG,IAAE,EAAC,CAAC,CAAC;AAAA,MAAC;AAAA,MAAC,IAAG,KAAK,OAAO,IAAG,SAAS,OAAO,GAAE;AAAA,QAAC,IAAG;AAAA,UAAE,MAAM,KAAK,OAAO,KAAK,UAAU,GAAE,6CAA6C;AAAA,QAAE,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW,GAAE,KAAK,SAAS,IAAG,OAAO,YAAW,iCAAmC;AAAA,QAAE,MAAM,KAAE,KAAK,WAAW;AAAA,QAAE,KAAK,SAAS,IAAG,OAAO,aAAY,iCAAmC,GAAE,GAAE,KAAK,KAAK,YAAY,IAAI,IAAG,EAAC,CAAC,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAE,eAAe,GAAE;AAAA,IAAC,MAAM,KAAE,CAAC;AAAA,IAAE,KAAI,KAAK,OAAO,IAAG,SAAS,OAAO,IAAE,GAAE,KAAK,KAAK,YAAY,IAAI,GAAE,CAAC,IAAE,GAAE,KAAK,KAAK,kBAAkB,CAAC,EAAE,KAAK,OAAO,IAAG,OAAO,KAAK;AAAA,MAAG,KAAK,OAAO,IAAG,SAAS,OAAO,IAAE,GAAE,KAAK,KAAK,YAAY,IAAI,GAAE,CAAC,IAAE,GAAE,KAAK,KAAK,kBAAkB,CAAC;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,UAAU,GAAE;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,WAAW;AAAA,MAAE,OAAO,KAAK,SAAS,IAAG,OAAO,WAAU,cAAgB,GAAE,CAAC;AAAA,IAAE,IAAI,KAAE,KAAK,WAAW;AAAA,IAAE,IAAS,MAAN;AAAA,MAAQ,OAAM,CAAC;AAAA,IAAE,cAAa,UAAQ,KAAE,CAAC,EAAC;AAAA,IAAG,MAAM,KAAE,KAAK,WAAW;AAAA,IAAE,OAAU,GAAE,UAAL,IAAY,KAAE,CAAC,GAAG,IAAE,GAAE,EAAE;AAAA;AAAA,EAAE,aAAa,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,EAAE;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,cAAa,KAAE,KAAK,2BAA2B;AAAA,IAAE,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW;AAAA,IAAE,MAAM,KAAE,KAAK,oBAAoB;AAAA,IAAE,IAAI,KAAE,CAAC;AAAA,IAAE,KAAK,cAAc,MAAI,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW,GAAE,KAAE,KAAK,kBAAkB,EAAC;AAAA,IAAG,IAAI,KAAE;AAAA,IAAK,OAAO,KAAK,OAAO,IAAG,SAAS,IAAI,MAAI,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW,GAAE,KAAE,KAAK,oBAAoB,IAAG,KAAK,YAAY,IAAI,GAAE,IAAE,IAAE,IAAE,EAAC,GAAE,EAAC;AAAA;AAAA,EAAE,aAAa,GAAE;AAAA,IAAC,OAAO,KAAK,QAAQ,KAAK,UAAU,SAAO,IAAG,SAAS,QAAM,KAAK,QAAQ,KAAK,WAAS,GAAG,SAAO,IAAG,SAAS,OAAK,KAAK,SAAS,GAAE,KAAK,SAAS,GAAE;AAAA;AAAA,EAAI,iBAAiB,CAAC,KAAE,CAAC,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,2BAA2B,GAAE,KAAE,KAAK,oBAAoB;AAAA,IAAE,OAAO,GAAE,KAAK,KAAK,YAAY,IAAI,IAAG,IAAE,EAAC,CAAC,CAAC,GAAE,KAAK,cAAc,MAAI,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG,KAAK,WAAW,GAAE,KAAK,kBAAkB,EAAC,IAAG;AAAA;AAAA,EAAE,iBAAiB,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,MAAM;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,6BAA6B;AAAA,IAAE,OAAO,KAAK,YAAY,IAAI,GAAE,EAAC,CAAC;AAAA;AAAA,EAAE,4BAA4B,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,wBAAwB;AAAA,IAAE,MAAK,KAAK,OAAO,IAAG,OAAO,KAAK;AAAA,MAAG,KAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,IAAE,KAAK,wBAAwB,CAAC,CAAC;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,uBAAuB,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,yBAAyB;AAAA,IAAE,MAAK,KAAK,OAAO,IAAG,OAAO,OAAO;AAAA,MAAG,KAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,IAAE,KAAK,yBAAyB,CAAC,CAAC;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,wBAAwB,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,yBAAyB;AAAA,IAAE,MAAK,KAAK,OAAO,IAAG,OAAO,EAAE;AAAA,MAAG,KAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,IAAE,KAAK,yBAAyB,CAAC,CAAC;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,wBAAwB,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,gBAAgB;AAAA,IAAE,MAAK,KAAK,OAAO,IAAG,OAAO,GAAG;AAAA,MAAG,KAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,IAAE,KAAK,gBAAgB,CAAC,CAAC;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,eAAe,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,qBAAqB;AAAA,IAAE,MAAK,KAAK,OAAO,IAAG,OAAO,GAAG;AAAA,MAAG,KAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,IAAE,KAAK,qBAAqB,CAAC,CAAC;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,oBAAoB,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,uBAAuB;AAAA,IAAE,OAAO,KAAK,OAAO,CAAC,IAAG,OAAO,aAAY,IAAG,OAAO,SAAS,CAAC,IAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,IAAE,KAAK,uBAAuB,CAAC,CAAC,IAAE;AAAA;AAAA,EAAE,sBAAsB,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,kBAAkB;AAAA,IAAE,MAAK,KAAK,OAAO,CAAC,IAAG,OAAO,WAAU,IAAG,OAAO,cAAa,IAAG,OAAO,iBAAgB,IAAG,OAAO,kBAAkB,CAAC;AAAA,MAAG,KAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,IAAE,KAAK,kBAAkB,CAAC,CAAC;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,iBAAiB,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,qBAAqB;AAAA,IAAE,MAAK,KAAK,OAAO,CAAC,IAAG,OAAO,YAAW,IAAG,OAAO,WAAW,CAAC;AAAA,MAAG,KAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,IAAE,KAAK,qBAAqB,CAAC,CAAC;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,oBAAoB,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,2BAA2B;AAAA,IAAE,MAAK,KAAK,OAAO,CAAC,IAAG,OAAO,MAAK,IAAG,OAAO,KAAK,CAAC;AAAA,MAAG,KAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,IAAE,KAAK,2BAA2B,CAAC,CAAC;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,0BAA0B,GAAE;AAAA,IAAC,IAAI,KAAE,KAAK,kBAAkB;AAAA,IAAE,MAAK,KAAK,OAAO,CAAC,IAAG,OAAO,MAAK,IAAG,OAAO,eAAc,IAAG,OAAO,MAAM,CAAC;AAAA,MAAG,KAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,IAAE,KAAK,kBAAkB,CAAC,CAAC;AAAA,IAAE,OAAO;AAAA;AAAA,EAAE,iBAAiB,GAAE;AAAA,IAAC,OAAO,KAAK,OAAO,CAAC,IAAG,OAAO,OAAM,IAAG,OAAO,MAAK,IAAG,OAAO,OAAM,IAAG,OAAO,MAAK,IAAG,OAAO,GAAG,CAAC,IAAE,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,KAAK,kBAAkB,CAAC,CAAC,IAAE,KAAK,qBAAqB;AAAA;AAAA,EAAE,oBAAoB,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,oBAAoB,GAAE,KAAE,KAAK,oBAAoB;AAAA,IAAE,OAAO,OAAI,GAAE,UAAQ,KAAG;AAAA;AAAA,EAAE,mBAAmB,GAAE;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,OAAO,YAAY,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,6BAA6B;AAAA,MAAE,KAAK,SAAS,IAAG,OAAO,eAAc,eAAiB;AAAA,MAAE,MAAM,KAAE,KAAK,YAAY,IAAI,IAAG,EAAC,CAAC,GAAE,KAAE,KAAK,oBAAoB;AAAA,MAAE,OAAO,OAAI,GAAE,UAAQ,KAAG;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,OAAO,MAAM,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,SAAS,IAAG,OAAO,MAAK,uBAAuB,GAAE,KAAE,KAAK,oBAAoB,GAAE,KAAE,KAAK,YAAY,IAAI,IAAG,GAAE,MAAM,CAAC;AAAA,MAAE,OAAO,OAAI,GAAE,UAAQ,KAAG;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,UAAU,CAAC,IAAE;AAAA,IAAC,IAAG,KAAK,SAAS,QAAQ,IAAI,EAAC,GAAE;AAAA,MAAC,OAAO,KAAK,SAAS,QAAQ,IAAI,EAAC,EAAE;AAAA,IAAI;AAAA,IAAC,IAAG,KAAK,SAAS,QAAQ,IAAI,EAAC,GAAE;AAAA,MAAC,OAAO,KAAK,SAAS,QAAQ,IAAI,EAAC;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,QAAQ,CAAC,IAAE;AAAA,IAAC,MAAM,KAAE,KAAK,WAAW,EAAC;AAAA,IAAE,IAAU,OAAP;AAAA,MAAS,OAAO;AAAA,IAAE,QAAO;AAAA,WAAO;AAAA,QAAO,OAAO,IAAG;AAAA,WAAS;AAAA,QAAO,OAAO,IAAG;AAAA,WAAS;AAAA,QAAM,OAAO,IAAG;AAAA,WAAQ;AAAA,QAAM,OAAO,IAAG;AAAA,WAAQ;AAAA,QAAM,OAAO,IAAG;AAAA,WAAQ;AAAA,QAAM,OAAO,IAAG;AAAA,WAAQ;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAQ,OAAO,IAAG;AAAA,WAAU;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA,WAAY;AAAA,QAAU,OAAO,IAAG;AAAA;AAAA,IAAQ,OAAO;AAAA;AAAA,EAAK,kBAAkB,CAAC,IAAE,IAAE;AAAA,IAAC,IAAW,GAAE,SAAV,OAAe;AAAA,MAAC,IAAG,KAAE,eAAa,KAAE;AAAA,QAAW,MAAM,KAAK,OAAO,KAAK,UAAU,GAAE,+BAA+B,aAAY,KAAK,eAAe;AAAA,IAAC,EAAM,SAAW,GAAE,SAAV,UAAiB,KAAE,KAAG,KAAE;AAAA,MAAY,MAAM,KAAK,OAAO,KAAK,UAAU,GAAE,+BAA+B,aAAY,KAAK,eAAe;AAAA;AAAA,EAAE,mBAAmB,GAAE;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,UAAU,EAAE,SAAS;AAAA,MAAE,IAAG,KAAK,OAAO,IAAG,OAAO,UAAU,GAAE;AAAA,QAAC,MAAM,KAAE,KAAK,0BAA0B,GAAE,KAAE,KAAK,SAAS,EAAC;AAAA,QAAE,OAAc,OAAP,OAAS,KAAK,YAAY,IAAI,IAAG,IAAE,EAAC,CAAC,IAAE,KAAK,YAAY,IAAI,IAAG,IAAE,EAAC,CAAC;AAAA,MAAC;AAAA,MAAC,IAAG,KAAK,SAAS,UAAU,IAAI,EAAC,GAAE;AAAA,QAAC,MAAM,KAAE,KAAK,SAAS,UAAU,IAAI,EAAC;AAAA,QAAE,OAAO,KAAK,YAAY,IAAI,IAAG,IAAE,GAAE,KAAK,CAAC;AAAA,MAAC;AAAA,MAAC,OAAO,KAAK,YAAY,IAAI,IAAG,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,OAAO,WAAW,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,UAAU,EAAE,SAAS;AAAA,MAAE,IAAI,KAAE,GAAE,SAAS,GAAG,KAAG,GAAE,SAAS,GAAG,IAAE,IAAG,MAAI,GAAE,SAAS,GAAG,KAAG,GAAE,SAAS,GAAG,IAAE,IAAG,MAAI,IAAG;AAAA,MAAI,MAAM,KAAE,SAAS,EAAC;AAAA,MAAE,OAAO,KAAK,mBAAmB,IAAE,EAAC,GAAE,KAAK,YAAY,IAAI,IAAG,IAAI,IAAG,IAAE,KAAK,MAAM,YAAY,EAAC,CAAC,GAAE,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,OAAO,YAAY,GAAE;AAAA,MAAC,MAAM,KAAE,SAAS,KAAK,UAAU,EAAE,SAAS,CAAC;AAAA,MAAE,OAAO,KAAK,mBAAmB,IAAE,IAAG,GAAG,GAAE,KAAK,YAAY,IAAI,IAAG,IAAI,IAAG,IAAE,KAAK,MAAM,YAAY,IAAG,GAAG,CAAC,GAAE,IAAG,GAAG,CAAC;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,CAAC,IAAG,OAAO,uBAAsB,IAAG,OAAO,iBAAiB,CAAC,GAAE;AAAA,MAAC,IAAI,KAAE,KAAK,UAAU,EAAE,SAAS,GAAE,KAAE,GAAE,SAAS,GAAG;AAAA,MAAE,OAAI,KAAE,GAAE,UAAU,GAAE,GAAE,SAAO,CAAC;AAAA,MAAG,MAAM,KAAE,WAAW,EAAC;AAAA,MAAE,KAAK,mBAAmB,IAAE,KAAE,IAAG,MAAI,IAAG,GAAG;AAAA,MAAE,MAAM,KAAE,KAAE,IAAG,MAAI,IAAG;AAAA,MAAI,OAAO,KAAK,YAAY,IAAI,IAAG,IAAI,IAAG,IAAE,KAAK,MAAM,YAAY,EAAC,CAAC,GAAE,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,CAAC,IAAG,SAAS,MAAK,IAAG,SAAS,KAAK,CAAC,GAAE;AAAA,MAAC,IAAI,KAAE,KAAK,UAAU,EAAE,SAAS,MAAI,IAAG,SAAS,KAAK;AAAA,MAAK,OAAO,KAAK,YAAY,IAAI,IAAG,IAAI,IAAG,KAAE,IAAE,GAAE,KAAK,MAAM,YAAY,IAAG,IAAI,CAAC,GAAE,IAAG,IAAI,CAAC;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,OAAO,UAAU;AAAA,MAAE,OAAO,KAAK,kBAAkB;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,SAAS,OAAO,GAAE;AAAA,MAAC,KAAK,SAAS,IAAG,OAAO,WAAU,eAAiB;AAAA,MAAE,MAAM,KAAE,KAAK,WAAW;AAAA,MAAE,KAAK,SAAS,IAAG,OAAO,cAAa,eAAiB;AAAA,MAAE,MAAM,KAAE,KAAK,kBAAkB;AAAA,MAAE,OAAO,KAAK,YAAY,IAAI,IAAG,IAAE,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,MAAM,KAAE,KAAK,WAAW,GAAE,KAAE,KAAK,0BAA0B;AAAA,IAAE,OAAO,KAAK,YAAY,IAAI,IAAG,IAAE,EAAC,CAAC;AAAA;AAAA,EAAE,yBAAyB,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,OAAO,UAAU;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,CAAC;AAAA,IAAE,GAAE;AAAA,MAAC,IAAG,KAAK,OAAO,IAAG,OAAO,WAAW;AAAA,QAAE;AAAA,MAAM,MAAM,KAAE,KAAK,6BAA6B;AAAA,MAAE,GAAE,KAAK,EAAC;AAAA,IAAC,SAAO,KAAK,OAAO,IAAG,OAAO,KAAK;AAAA,IAAG,OAAO,KAAK,SAAS,IAAG,OAAO,aAAY,+BAAiC,GAAE;AAAA;AAAA,EAAE,0BAA0B,GAAE;AAAA,IAAC,KAAK,OAAO,IAAG,OAAO,UAAU;AAAA,IAAE,MAAM,KAAE,KAAK,6BAA6B;AAAA,IAAE,OAAO,KAAK,OAAO,IAAG,OAAO,WAAW,GAAE;AAAA;AAAA,EAAE,iBAAiB,GAAE;AAAA,IAAC,KAAK,SAAS,IAAG,OAAO,YAAW,eAAiB;AAAA,IAAE,MAAM,KAAE,KAAK,6BAA6B;AAAA,IAAE,OAAO,KAAK,SAAS,IAAG,OAAO,aAAY,eAAiB,GAAE;AAAA;AAAA,EAAE,YAAY,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,MAAM;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,cAAa,KAAE,KAAK,SAAS,IAAG,OAAO,OAAM,2BAA2B,EAAE,SAAS;AAAA,IAAE,KAAK,SAAS,IAAG,OAAO,YAAW,+BAAiC;AAAA,IAAE,MAAM,KAAE,CAAC;AAAA,IAAE,MAAK,CAAC,KAAK,OAAO,IAAG,OAAO,WAAW,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,WAAW,GAAE,KAAE,KAAK,SAAS,IAAG,OAAO,MAAK,yBAAyB,EAAE,SAAS;AAAA,MAAE,KAAK,SAAS,IAAG,OAAO,OAAM,sCAAwC;AAAA,MAAE,MAAM,KAAE,KAAK,WAAW,GAAE,KAAE,KAAK,WAAW;AAAA,MAAQ,MAAN,SAAU,GAAE,aAAW,KAAG,KAAK,OAAO,IAAG,OAAO,WAAW,IAAE,KAAK,OAAO,IAAG,OAAO,KAAK,IAAE,KAAK,SAAS,IAAG,OAAO,OAAM,iCAAmC,GAAE,GAAE,KAAK,KAAK,YAAY,IAAI,IAAG,IAAE,IAAE,EAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAK,SAAS,IAAG,OAAO,aAAY,iCAAmC;AAAA,IAAE,MAAM,KAAE,KAAK,cAAa,KAAE,KAAK,YAAY,IAAI,IAAG,IAAE,IAAE,IAAE,EAAC,GAAE,EAAC;AAAA,IAAE,OAAO,KAAK,SAAS,QAAQ,IAAI,IAAE,EAAC,GAAE;AAAA;AAAA,EAAE,qBAAqB,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,eAAe;AAAA,IAAE,IAAG,CAAC;AAAA,MAAE,OAAO;AAAA,IAAK,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,kBAAkB;AAAA,MAAE,GAAE,QAAM;AAAA,IAAC;AAAA,IAAC,IAAU,GAAE,SAAT,QAAe,GAAE,iBAAiB,KAAG;AAAA,MAAC,IAAW,GAAE,MAAM,KAAK,SAArB,OAA0B;AAAA,QAAC,IAAG,GAAE,KAAK,YAAY,MAAI,GAAE,MAAM,KAAK,YAAY;AAAA,UAAE,MAAM,KAAK,OAAO,KAAK,MAAM,GAAE,qBAAqB,GAAE,MAAM,KAAK,WAAW,GAAE,KAAK,cAAc,KAAK,cAAc;AAAA,MAAC;AAAA,MAAC,GAAE,MAAM,YAAU,KAAK,mBAAmB,GAAE,MAAM,aAAY,GAAE,IAAI,GAAE,GAAE,MAAM,OAAK,GAAE;AAAA,IAAI,EAAM;AAAA,MAAO,GAAE,SAAT,QAAe,GAAE,iBAAiB,QAAK,GAAE,OAAa,GAAE,MAAM,KAAK,SAArB,QAA0B,IAAG,MAAI,GAAE,MAAM,MAAK,GAAE,MAAM,YAAU,KAAK,mBAAmB,GAAE,MAAM,aAAY,GAAE,IAAI;AAAA,IAAG,OAAO;AAAA;AAAA,EAAE,uBAAuB,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,eAAe;AAAA,IAAE,OAAO,MAAG,KAAK,OAAO,IAAG,OAAO,KAAK,MAAI,GAAE,QAAM,KAAK,kBAAkB,IAAG;AAAA;AAAA,EAAE,kBAAkB,GAAE;AAAA,IAAC,IAAI;AAAA,IAAE,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,KAAK;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,SAAS,IAAG,OAAO,MAAK,wBAAwB,GAAE,KAAE,KAAK;AAAA,IAAa,IAAI,KAAE;AAAA,IAAK,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,WAAW;AAAA,MAAE,KAAE,KAAK,WAAW,GAAQ,MAAN,SAAU,GAAE,aAAW;AAAA,IAAE;AAAA,IAAC,IAAI,KAAE;AAAA,IAAK,KAAK,SAAS,IAAG,OAAO,OAAM,0CAA0C;AAAA,IAAE,MAAM,KAAE,KAAK,6BAA6B;AAAA,IAAE,IAAG;AAAA,MAAC,IAAI,KAAE,CAAC,IAAG,GAAG,GAAE,KAAE,GAAE,cAAc,KAAK,OAAM,EAAC;AAAA,MAAE,cAAa,OAAI,KAAK,mBAAmB,GAAE,OAAM,GAAE,EAAE,GAAE,GAAE,cAAa,OAAW,GAAE,GAAG,WAAZ,QAAoB,GAAE,oBAAoB,MAAU,GAAE,SAAS,WAAlB,SAAmC,GAAE,SAAS,OAAO,SAA1B,QAA+B,GAAE,GAAG,SAAO,IAAG,MAAY,GAAE,SAAS,OAAO,SAA1B,QAA+B,GAAE,GAAG,SAAO,IAAG,MAAY,GAAE,SAAS,OAAO,SAA1B,QAA+B,GAAE,GAAG,SAAO,IAAG,MAAY,GAAE,SAAS,OAAO,SAA1B,QAA+B,GAAE,GAAG,SAAO,IAAG,MAAa,GAAE,SAAS,OAAO,SAA3B,SAAgC,GAAE,GAAG,SAAO,IAAG,OAAK,QAAQ,MAAM,yCAAyC,GAAE,SAAS,OAAO,MAAM,IAAG,KAAE,KAAK,YAAY,IAAI,IAAG,IAAE,GAAE,EAAE,CAAC,GAAE,KAAK,MAAM,QAAQ,YAAY,GAAE,SAAS,GAAE,EAAC;AAAA,MAAE,OAAM,IAAE;AAAA,MAAC,KAAE;AAAA;AAAA,IAAE,IAAU,OAAP,QAAU,cAAa,KAAG;AAAA,MAAC,IAAW,GAAE,KAAK,SAAf,OAAoB;AAAA,QAAC,IAAG,GAAE,YAAY,MAAI,GAAE,KAAK,YAAY;AAAA,UAAE,MAAM,KAAK,OAAO,KAAK,MAAM,GAAE,qBAAqB,GAAE,KAAK,WAAW,GAAE,cAAc,KAAK,cAAc;AAAA,MAAC;AAAA,MAAC,GAAE,OAAK,IAAE,GAAE,YAAU,KAAK,mBAAmB,GAAE,aAAY,GAAE,IAAI;AAAA,IAAC,EAAM;AAAA,MAAO,OAAP,QAAU,cAAa,QAAK,MAAU,KAAQ,MAAN,OAAa,YAAE,GAAE,UAA3B,QAA2C,OAAJ,YAAM,KAAE,IAAG,KAAI,OAAI,IAAG,QAAM,KAAE,IAAG;AAAA,IAAM,MAAM,KAAE,KAAK,YAAY,IAAI,GAAE,GAAE,SAAS,GAAE,IAAE,IAAG,IAAG,EAAC,GAAE,EAAC;AAAA,IAAE,OAAO,KAAK,SAAS,UAAU,IAAI,GAAE,MAAK,EAAC,GAAE;AAAA;AAAA,EAAE,gBAAgB,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,GAAG;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,cAAa,KAAE,KAAK,SAAS,IAAG,OAAO,MAAK,wBAAwB;AAAA,IAAE,IAAI,KAAE;AAAA,IAAK,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,WAAW;AAAA,MAAE,KAAE,KAAK,WAAW,GAAQ,MAAN,SAAU,GAAE,aAAW;AAAA,IAAE;AAAA,IAAC,IAAI,KAAE;AAAA,IAAK,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,MAAI,KAAE,KAAK,kBAAkB,IAAU,OAAP,QAAU,cAAa,KAAG;AAAA,MAAC,IAAW,GAAE,KAAK,SAAf,OAAoB;AAAA,QAAC,IAAG,GAAE,YAAY,MAAI,GAAE,KAAK,YAAY;AAAA,UAAE,MAAM,KAAK,OAAO,KAAK,MAAM,GAAE,qBAAqB,GAAE,KAAK,WAAW,GAAE,cAAc,KAAK,cAAc;AAAA,MAAC;AAAA,MAAC,GAAE,OAAK;AAAA,IAAC,EAAM;AAAA,MAAO,OAAP,QAAU,cAAa,QAAK,KAAU,GAAE,KAAK,SAAf,QAAoB,IAAG,MAAI,GAAE;AAAA,IAAM,OAAO,cAAa,OAAI,GAAE,YAAU,KAAK,mBAAmB,GAAE,aAAY,EAAC,GAAE,KAAK,YAAY,IAAI,GAAE,GAAE,SAAS,GAAE,IAAE,IAAG,IAAG,EAAC,GAAE,EAAC;AAAA;AAAA,EAAE,iBAAiB,GAAE;AAAA,IAAC,OAAO,KAAK,6BAA6B;AAAA;AAAA,EAAE,cAAc,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,GAAG;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK;AAAA,IAAa,IAAI,KAAE,IAAG,KAAE;AAAA,IAAG,KAAK,OAAO,IAAG,OAAO,SAAS,MAAI,KAAE,KAAK,SAAS,IAAG,eAAc,yBAAyB,EAAE,SAAS,GAAE,KAAK,OAAO,IAAG,OAAO,KAAK,MAAI,KAAE,KAAK,SAAS,IAAG,aAAY,uBAAuB,EAAE,SAAS,IAAG,KAAK,SAAS,IAAG,OAAO,cAAa,eAAiB;AAAA,IAAG,MAAM,KAAE,KAAK,SAAS,IAAG,OAAO,MAAK,wBAAwB;AAAA,IAAE,IAAI,KAAE;AAAA,IAAK,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,WAAW;AAAA,MAAE,KAAE,KAAK,WAAW,GAAQ,MAAN,SAAU,GAAE,aAAW;AAAA,IAAE;AAAA,IAAC,OAAO,KAAK,YAAY,IAAI,GAAE,GAAE,SAAS,GAAE,IAAE,IAAE,IAAE,IAAI,GAAE,EAAC;AAAA;AAAA,EAAE,cAAc,GAAE;AAAA,IAAC,IAAG,CAAC,KAAK,OAAO,IAAG,SAAS,QAAQ;AAAA,MAAE,OAAO;AAAA,IAAK,MAAM,KAAE,KAAK,SAAS,IAAG,OAAO,MAAK,wBAAwB;AAAA,IAAE,IAAI,KAAE;AAAA,IAAK,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,WAAW;AAAA,MAAE,KAAE,KAAK,WAAW,GAAQ,MAAN,SAAU,GAAE,aAAW;AAAA,IAAE;AAAA,IAAC,OAAO,KAAK,YAAY,IAAI,GAAE,GAAE,SAAS,GAAE,IAAE,IAAI,CAAC;AAAA;AAAA,EAAE,WAAW,GAAE;AAAA,IAAC,KAAK,SAAS,IAAG,OAAO,YAAW,cAAgB;AAAA,IAAE,MAAM,KAAE,KAAK,SAAS,IAAG,OAAO,OAAM,iCAAiC;AAAA,IAAE,KAAK,SAAS,IAAG,OAAO,OAAM,cAAgB;AAAA,IAAE,IAAI,KAAE,KAAK,SAAS,IAAG,OAAO,OAAM,gCAAgC,EAAE,SAAS;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,OAAO,MAAM,GAAE;AAAA,MAAC,MAAG,IAAI,KAAK,SAAS,IAAG,OAAO,OAAM,8BAA8B,EAAE,SAAS;AAAA,IAAG;AAAA,IAAC,OAAO,KAAK,SAAS,IAAG,OAAO,aAAY,cAAgB,GAAE,KAAK,YAAY,IAAI,GAAE,GAAE,SAAS,GAAE,EAAC,CAAC;AAAA;AAAA,EAAE,iBAAiB,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,SAAS,IAAG,OAAO,OAAM,oBAAoB;AAAA,IAAE,OAAO,KAAK,YAAY,IAAI,GAAE,GAAE,SAAS,CAAC,CAAC;AAAA;AAAA,EAAE,mBAAmB,GAAE;AAAA,IAAC,MAAM,KAAE,CAAC,KAAK,SAAS,IAAG,OAAO,OAAM,oBAAoB,EAAE,SAAS,CAAC;AAAA,IAAE,MAAK,KAAK,OAAO,IAAG,OAAO,KAAK,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,SAAS,IAAG,OAAO,OAAM,oBAAoB;AAAA,MAAE,GAAE,KAAK,GAAE,SAAS,CAAC;AAAA,IAAC;AAAA,IAAC,OAAO,KAAK,YAAY,IAAI,GAAE,EAAC,CAAC;AAAA;AAAA,EAAE,WAAW,GAAE;AAAA,IAAC,MAAM,KAAE,KAAK,SAAS,IAAG,OAAO,OAAM,oBAAoB;AAAA,IAAE,KAAK,SAAS,IAAG,OAAO,OAAM,8BAAgC;AAAA,IAAE,IAAI,KAAE,KAAK,WAAW;AAAA,IAAE,IAAU,OAAP;AAAA,MAAS,MAAM,KAAK,OAAO,KAAK,MAAM,GAAE,0BAA0B;AAAA,IAAE,KAAK,SAAS,QAAQ,IAAI,GAAE,IAAI,MAAI,KAAE,KAAK,SAAS,QAAQ,IAAI,GAAE,IAAI,EAAE;AAAA,IAAM,MAAM,KAAE,KAAK,YAAY,IAAI,IAAG,GAAE,SAAS,GAAE,EAAC,CAAC;AAAA,IAAE,OAAO,KAAK,SAAS,QAAQ,IAAI,GAAE,MAAK,EAAC,GAAE;AAAA;AAAA,EAAE,UAAU,GAAE;AAAA,IAAC,IAAG,KAAK,OAAO,CAAC,IAAG,OAAO,OAAM,GAAG,IAAG,cAAa,IAAG,SAAS,MAAK,IAAG,SAAS,KAAI,IAAG,SAAS,KAAI,IAAG,SAAS,GAAG,CAAC,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,SAAS,EAAE,SAAS;AAAA,MAAE,IAAG,KAAK,SAAS,QAAQ,IAAI,EAAC;AAAA,QAAE,OAAO,KAAK,SAAS,QAAQ,IAAI,EAAC;AAAA,MAAE,IAAG,KAAK,SAAS,QAAQ,IAAI,EAAC;AAAA,QAAE,OAAO,KAAK,SAAS,QAAQ,IAAI,EAAC,EAAE;AAAA,MAAK,IAAG,CAAC,KAAK,SAAS,EAAC,GAAE;AAAA,QAAC,MAAM,KAAE,KAAK,YAAY,IAAI,IAAG,EAAC,CAAC;AAAA,QAAE,OAAO,KAAK,qBAAoB;AAAA,MAAC;AAAA,MAAC,OAAO,KAAK,YAAY,IAAI,IAAG,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,IAAI,KAAE,KAAK,uBAAuB;AAAA,IAAE,IAAG;AAAA,MAAE,OAAO;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,cAAc,GAAE;AAAA,MAAC,IAAI,KAAE,KAAK,SAAS,EAAE,SAAS,GAAE,KAAE,MAAK,KAAE;AAAA,MAAK,KAAK,OAAO,IAAG,OAAO,SAAS,MAAI,KAAE,KAAK,WAAW,GAAE,KAAE,MAAK,KAAK,OAAO,IAAG,OAAO,KAAK,MAAI,KAAE,KAAK,SAAS,IAAG,aAAY,kCAAkC,EAAE,SAAS,IAAG,KAAK,SAAS,IAAG,OAAO,cAAa,wBAA0B;AAAA,MAAG,OAAO,KAAK,YAAY,IAAI,IAAG,IAAE,IAAE,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,SAAS,GAAG,GAAE;AAAA,MAAC,IAAI,KAAE,KAAK,UAAU,EAAE,SAAS;AAAA,MAAE,KAAK,SAAS,IAAG,OAAO,WAAU,2BAA6B;AAAA,MAAE,MAAM,KAAE,KAAK,SAAS,IAAG,eAAc,oCAAoC;AAAA,MAAE,KAAK,SAAS,IAAG,OAAO,OAAM,2BAA6B;AAAA,MAAE,MAAM,KAAE,KAAK,WAAW;AAAA,MAAE,IAAI,KAAE;AAAA,MAAK,KAAK,OAAO,IAAG,OAAO,KAAK,MAAI,KAAE,KAAK,SAAS,IAAG,aAAY,kCAAkC,EAAE,SAAS,IAAG,KAAK,SAAS,IAAG,OAAO,cAAa,2BAA6B;AAAA,MAAE,OAAO,KAAK,YAAY,IAAI,IAAG,IAAE,GAAE,SAAS,GAAE,IAAE,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,MAAM,KAAE,KAAK,WAAW;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,SAAS,KAAK,GAAE;AAAA,MAAC,IAAI,KAAE,MAAK,KAAE;AAAA,MAAG,MAAM,KAAE,KAAK,UAAU;AAAA,MAAE,IAAI,KAAE;AAAA,MAAK,IAAG,KAAK,OAAO,IAAG,OAAO,SAAS,GAAE;AAAA,QAAC,KAAE,KAAK,WAAW,GAAE,KAAK,SAAS,QAAQ,IAAI,GAAE,IAAI,MAAI,KAAE,KAAK,SAAS,QAAQ,IAAI,GAAE,IAAI,EAAE;AAAA,QAAM,IAAI,KAAE;AAAA,QAAG,IAAG,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,UAAC,KAAE,KAAK,kBAAkB;AAAA,UAAE,IAAG;AAAA,YAAC,KAAE,GAAE,cAAc,KAAK,KAAK,EAAE,SAAS,GAAE,KAAE;AAAA,YAAK,OAAM,IAAE;AAAA,YAAC,KAAE;AAAA;AAAA,QAAI;AAAA,QAAC,KAAK,SAAS,IAAG,OAAO,cAAa,yBAA2B,GAAE,KAAE,KAAE,SAAS,EAAC,IAAE;AAAA,MAAC;AAAA,MAAC,MAAM,KAAE,KAAK,YAAY,IAAI,IAAG,GAAE,SAAS,GAAE,IAAE,IAAE,EAAC,CAAC;AAAA,MAAE,OAAO,MAAG,KAAK,qBAAqB,KAAK,EAAC,WAAU,IAAE,WAAU,GAAC,CAAC,GAAE;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,sBAAsB,GAAE;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,YAAY;AAAA,MAAE,OAAO,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,MAAK,IAAI,CAAC;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,kBAAkB;AAAA,MAAE,OAAO,KAAK,YAAY,IAAI,IAAG,KAAK,UAAU,EAAE,SAAS,GAAE,MAAK,IAAI,CAAC;AAAA,IAAE,IAAG,KAAK,OAAO,IAAG,oBAAoB,KAAG,KAAK,OAAO,IAAG,yBAAyB,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,UAAU;AAAA,MAAE,KAAK,SAAS,IAAG,OAAO,WAAU,gCAAkC;AAAA,MAAE,MAAM,KAAE,KAAK,WAAW;AAAA,MAAE,OAAO,KAAK,SAAS,IAAG,OAAO,cAAa,gCAAkC,GAAE,KAAK,YAAY,IAAI,IAAG,GAAE,SAAS,GAAE,IAAE,IAAI,CAAC;AAAA,IAAC;AAAA,IAAC,IAAG,KAAK,OAAO,IAAG,oBAAoB,GAAE;AAAA,MAAC,MAAM,KAAE,KAAK,UAAU;AAAA,MAAE,KAAK,SAAS,IAAG,OAAO,WAAU,gCAAkC;AAAA,MAAE,MAAM,KAAE,KAAK,SAAS,IAAG,cAAa,uBAAuB,EAAE,SAAS;AAAA,MAAE,KAAK,SAAS,IAAG,OAAO,OAAM,kCAAoC;AAAA,MAAE,MAAM,KAAE,KAAK,SAAS,IAAG,aAAY,gDAAgD,EAAE,SAAS;AAAA,MAAE,OAAO,KAAK,SAAS,IAAG,OAAO,cAAa,gCAAkC,GAAE,KAAK,YAAY,IAAI,IAAG,GAAE,SAAS,GAAE,IAAE,EAAC,CAAC;AAAA,IAAC;AAAA,IAAC,OAAO;AAAA;AAAA,EAAK,UAAU,GAAE;AAAA,IAAC,IAAI,KAAE,CAAC;AAAA,IAAE,MAAK,KAAK,OAAO,IAAG,OAAO,IAAI,KAAG;AAAA,MAAC,MAAM,KAAE,KAAK,SAAS,IAAG,gBAAe,yBAAyB,GAAE,KAAE,KAAK,YAAY,IAAI,IAAG,GAAE,SAAS,GAAE,IAAI,CAAC;AAAA,MAAE,IAAG,KAAK,OAAO,IAAG,OAAO,UAAU,GAAE;AAAA,QAAC,IAAG,GAAE,QAAM,KAAK,SAAS,IAAG,kBAAiB,0BAA0B,EAAE,SAAS,GAAE,KAAK,OAAO,IAAG,OAAO,KAAK,GAAE;AAAA,UAAC,KAAK,SAAS;AAAA,UAAE,GAAE;AAAA,YAAC,MAAM,KAAE,KAAK,SAAS,IAAG,kBAAiB,0BAA0B,EAAE,SAAS;AAAA,YAAE,GAAE,iBAAiB,UAAQ,GAAE,QAAM,CAAC,GAAE,KAAK,IAAG,GAAE,MAAM,KAAK,EAAC;AAAA,UAAC,SAAO,KAAK,OAAO,IAAG,OAAO,KAAK;AAAA,QAAE;AAAA,QAAC,KAAK,SAAS,IAAG,OAAO,aAAY,cAAgB;AAAA,MAAC;AAAA,MAAC,GAAE,KAAK,EAAC;AAAA,IAAC;AAAA,IAAC,OAAU,GAAE,UAAL,IAAY,OAAK;AAAA;AAAE;AAAA;AAAC,MAAM,YAAW,IAAE;AAAA,EAAC,WAAW,CAAC,IAAE;AAAA,IAAC,MAAM,GAAE,MAAG,KAAK,OAAO,EAAC;AAAA;AAAA,EAAE,MAAM,CAAC,IAAE;AAAA,IAAC,MAAM,KAAG,IAAI,MAAI,MAAM,EAAC;AAAA,IAAE,KAAK,UAAU,EAAC;AAAA;AAAE;;;ACS3oiM,eAAsB,OAAO,CAC3B,QACA,mBACA;AAAA,EACA,MAAM,UAAU,MAAM,UAAU,IAAI,eAAe;AAAA,EACnD,IAAI,CAAC,SAAS;AAAA,IACZ,MAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AAAA,EAEA,MAAM,SAAS,MAAM,QAAQ,cAAc;AAAA,EAC3C,OAAO,KAAK,KAAK,CAAC,SAAS;AAAA,IACzB,QAAQ,MAAM,mBAAmB,IAAI;AAAA,GACtC;AAAA,EACD,IAAI,mBAAmB;AAAA,IACrB,OAAO,oBAAoB;AAAA,EAC7B;AAAA,EAEA,MAAM,UAAU,OAAO,WAAW,QAAQ;AAAA,EAE1C,OAAO,QAAQ,sBAAsB;AAAA,EACrC,OAAO,SAAS,sBAAsB;AAAA,EAEtC,MAAM,qBAAqB,UAAU,IAAI,yBAAyB;AAAA,EAElE,QAAQ,UAAU;AAAA,IAChB;AAAA,IACA,QAAQ;AAAA,EACV,CAAC;AAAA,EAED,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAGK,SAAS,wBAAwB,CACtC,kBACA,QACA,oBACA,OAC6C;AAAA,EAC7C,MAAM,qBAAkE;AAAA,IACtE,OAAO,GAAG,iBAAiB;AAAA,IAC3B,QAAQ;AAAA,MACN;AAAA,MACA,YAAY,iBAAiB;AAAA,IAC/B;AAAA,IACA,UAAU;AAAA,MACR;AAAA,MACA,YAAY,iBAAiB;AAAA,MAC7B,SAAS;AAAA,QACP;AAAA,UACE,QAAQ;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,6BAA6B,CAC3C,UACA,cAC6C;AAAA,EAC7C,SAAS,OAAO,UAAU,CAAC,YAAY;AAAA,EACvC,OAAO;AAAA;AAGF,SAAS,0BAA0B,CACxC,YACA,gBACA;AAAA,EACA,WAAW,gBAAgB,GAAG,cAAc;AAAA;AAGvC,SAAS,iBAAiB,CAC/B,QACA,kBACA,oBACmB;AAAA,EACnB,MAAM,OAAO,0BAA0B,iBAAiB,IAAI;AAAA,EAC5D,MAAM,cAAc,+BAA+B,MAAM,kBAAkB;AAAA,EAE3E,OAAO,OAAO,qBAAqB;AAAA,OAC9B;AAAA,IACH,QAAQ,OAAO,qBAAqB;AAAA,MAClC,kBAAkB,YAAY,IAAI,CAAC,IAAG,OACpC,OAAO,sBAAsB;AAAA,QAC3B,OAAO,GAAG,iBAAiB,2BAA2B;AAAA,WACnD;AAAA,MACL,CAAC,CACH;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAAA;;;ACzGI,SAAS,mBAAmB,CAAC,MAAc;AAAA,EAChD,OAAO,KACJ,MAAM;AAAA,CAAI,EACV,IAAI,CAAC,MAAM,UAAU,GAAG,QAAQ,MAAM,MAAM,EAC5C,KAAK;AAAA,CAAI;AAAA;AAGP,SAAS,iBAAiB,CAC/B,OACA,MACA,KACkB;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EAEJ,IAAI;AAAA,IACF,UAAU,IAAI,IAAY,IAAI;AAAA,IAC9B,OAAO,IAAG;AAAA,IACV,QAAQ,MAAM,oBAAoB,IAAI,CAAC;AAAA,IACvC,MAAM;AAAA;AAAA,EAER,IAAI;AAAA,IACF,SAAS,IAAI,IAAY,GAAG;AAAA,IAC5B,OAAO,IAAG;AAAA,IACV,QAAQ,MAAM,oBAAoB,GAAG,CAAC;AAAA,IACtC,MAAM;AAAA;AAAA,EAGR,IAAI,OAAO,QAAQ,SAAS,GAAG;AAAA,IAC7B,MAAM,IAAI,MACR,wEACF;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,OAAO,QAAQ;AAAA,EACzC,MAAM,wBAAwB,OAAO,MAAM,SAAS,SAAS;AAAA,EAC7D,MAAM,sBAAsB,OAAO,MAAM,OAAO,SAAS;AAAA,EAEzD,MAAM,qBAAqB,wBACvB,OAAO,MAAM,SAAS,IAAI,OAC1B,QAAQ,MAAM,SAAS,IAAI;AAAA,EAC/B,MAAM,mBAAmB,sBACrB,OAAO,MAAM,OAAO,IAAI,OACxB,QAAQ,MAAM,OAAO,IAAI;AAAA,EAE7B,IAAI,mBAAmB;AAAA,IACrB,OAAO,mBAAmB,KAAK,IAAI;AAAA,EACrC;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA,MAAM,GAAG;AAAA;AAAA;AAAA,EAAyB,IAAI,KAAK;AAAA,IAC3C;AAAA,IACA;AAAA,EACF;AAAA;AAGF,SAAS,kBAAkB,CAAC,gBAAwB,MAAc;AAAA,EAChE,MAAM,UAAU,IAAI,IAAY,IAAI;AAAA,EACpC,MAAM,aAAa,IAAI,IAAY,cAAc;AAAA,EAEjD,MAAM,qBAAqB,QAAQ,QAAQ,KAAK,CAAC,OAC/C,GAAE,KAAK,SAAS,cAAc,CAChC;AAAA,EACA,IAAI,CAAC,oBAAoB;AAAA,IACvB,MAAM,IAAI,MACR;AAAA,EAAsG,MACxG;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,QAAQ,QAAQ,KAAK,CAAC,OAC/C,GAAE,KAAK,SAAS,cAAc,CAChC;AAAA,EACA,IAAI,CAAC,oBAAoB;AAAA,IACvB,MAAM,IAAI,MACR;AAAA,EAAsG,MACxG;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,WAAW,QAAQ;AAAA,EAClC,MAAM,OAAO,OAAO,KAAK,YAAY;AAAA,EAErC,MAAM,qBAAqB,OAAO,QAC/B,IAAI,CAAC,OAAM,UAAU,QAAQ,GAAE,mBAAmB,QAAQ,GAAE,OAAO,EACnE,KAAK;AAAA,CAAI;AAAA,EAEZ,MAAM,yBAAyB,OAAO,QAAQ,IAC5C,CAAC,OACC,GAAG,QAAQ,GAAE,SAAS,GAAE,KAAK,OAAO,GAAE,SAAS,IAAI,GAAE,OAAO,UAAU,IAC1E;AAAA,EAEA,IAAI,yBAAyB,qBAAqB,kBAAkB;AAAA,EAEpE,MAAM,uBAAuB,uBAC1B,IAAI,CAAC,YAAY,aAAa,6BAA6B,UAAU,EACrE,KAAK;AAAA,GAAM;AAAA,EAEd,IAAI,2BAA2B,qBAAqB,kBAAkB;AAAA,EAEtE,MAAM,sBAAsB,uBACzB,IACC,CAAC,YACC,aAAa,kDAAkD,UACnE,EACC,KAAK;AAAA,GAAM;AAAA,EAEd,OAAO,KACJ,QAAQ,+BAA+B,oBAAoB,EAC3D,QAAQ,6BAA6B,kBAAkB,EACvD,QAAQ,+BAA+B,mBAAmB;AAAA;AAG/D,SAAS,oBAAoB,CAAC,QAAoB;AAAA,EAChD,IAAI,mBAAmB;AAAA,EACvB,WAAW,UAAU,OAAO,SAAS;AAAA,IACnC,MAAM,gBAAgB,OAAO,cAAc,CAAC,GAAG,KAC7C,CAAC,SAAS,KAAK,SAAS,UAC1B;AAAA,IACA,IAAI,cAAc;AAAA,MAChB,MAAM,WAAW,OAAO,SAAS,aAAa,KAAe;AAAA,MAC7D,mBAAmB,KAAK,IAAI,kBAAkB,QAAQ;AAAA,IACxD;AAAA,EACF;AAAA,EACA,OAAO,mBAAmB;AAAA;AAGrB,SAAS,mBAAmB,CACjC,QACA,WAA8B,YACP;AAAA,EACvB,MAAM,aAAa,OAAO,QAAQ,KAAK,CAAC,OACtC,GAAE,YAAY,KAAK,CAAC,OAAM,GAAE,SAAS,SAAS,CAChD;AAAA,EACA,IAAI,YAAY;AAAA,IACd,MAAM,IAAI,MACR,4FACF;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,OAAO,QAAQ,OACxC,CAAC,OAAM,CAAC,GAAE,cAAc,CAAC,GAAE,WAAW,KAAK,CAAC,OAAM,GAAE,SAAS,UAAU,CACzE;AAAA,EACA,WAAW,UAAU,oBAAoB;AAAA,IACvC,QAAQ,MACN,gCAAgC,OAAO,SAAS,OAAO,MACzD;AAAA,EACF;AAAA,EAEA,MAAM,wBAAwB,OAAO,QAAQ,OAAO,CAAC,OACnD,GAAE,YAAY,KAAK,CAAC,OAAM,GAAE,SAAS,UAAU,CACjD;AAAA,EAEA,OAAO;AAAA,IACL,aAAa,OAAO;AAAA,IACpB,YAAY,sBAAsB,IAAI,CAAC,OAAM;AAAA,MAC3C,MAAM,WAAW,GAAE,WAAY,KAAK,CAAC,OAAM,GAAE,SAAS,UAAU,GAAG;AAAA,MACnE,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,MAAM,4CAA4C,GAAE,MAAM;AAAA,MACtE;AAAA,MACA,IAAI,MAAM,QAAQ,QAAQ,GAAG;AAAA,QAC3B,MAAM,IAAI,MAAM,8CAA8C,GAAE,MAAM;AAAA,MACxE;AAAA,MAEA,MAAM,iBAAiB,OAAO,SAAS,QAAQ;AAAA,MAC/C,IAAI,OAAO,MAAM,cAAc,GAAG;AAAA,QAChC,MAAM,IAAI,MACR,+BAA+B,wBAAwB,GAAE,MAC3D;AAAA,MACF;AAAA,MAEA,OAAO;AAAA,QACL;AAAA,QACA,QAAQ,GAAE;AAAA,QAEV,QAAQ,aAAa,GAAE,KAAK,IAAI;AAAA,MAClC;AAAA,KACD;AAAA,IACD;AAAA,EACF;AAAA;AAkBK,SAAS,YAAY,CAAC,UAAmC;AAAA,EAE9D,MAAM,WAAW,SAAS,QAAQ,YAAY,EAAE;AAAA,EAEhD,MAAM,YAA6C;AAAA,IACjD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EAEA,MAAM,SAAS,UAAU,SAAS,YAAY;AAAA,EAC9C,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,MAAM,qBAAqB,UAAU;AAAA,EACjD;AAAA,EACA,OAAO;AAAA;;;AC3NF,IAAM,kBAAwC;AAAA,EACnD,WAAW;AAAA,EACX,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAChB;AAEO,IAAM,gBAAsC;AAAA,EACjD,WAAW;AAAA,EACX,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAChB;;;ACZA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC8BjB,MAAM,WAA8B;AAAA,EACzC;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EAEA;AAAA,EACA;AAAA,EACA,cAA8B,CAAC;AAAA,EAC/B;AAAA,EAEA,UAAU,CAAC,QAAmB,SAAwB;AAAA,IACpD,KAAK,iBAAiB;AAAA,IAEtB,KAAK,eAAe,IAAI,OAAO;AAAA,IAC/B,KAAK,eAAe,IAAI;AAAA,MACtB,gBAAgB,QAAQ;AAAA,MACxB,YAAY,CAAC,QAAQ,WAAW,OAAO,QAAQ,WAAW,MAAM;AAAA,IAClE,CAAC;AAAA,IAGD,OAAO,MAAM,YACX,KAAK,gBACL,GACA,KAAK,eAAe,WACtB;AAAA;AAAA,EAGF,YAAY,CAAC,YAAkC,OAAoB;AAAA,IACjE,WAAW,YAAY,KAAK,SAAS;AAAA,IACrC,MAAM,0BAA0B,KAAK;AAAA,IAGrC,IAAI,gBAAgB;AAAA,IAEpB,IAAI,MAAM,SAAS,KAAK,gBAAgB;AAAA,MACtC,MAAM,IAAI,MACR,sBAAsB,MAAM,qCAAqC,KAAK,sBAAsB,KAAK,cACnG;AAAA,IACF;AAAA,IAEA,SAAS,KAAI,EAAG,KAAI,MAAM,QAAQ,MAAK;AAAA,MACrC,IAAI,CAAC,KAAK,eAAe;AAAA,QACvB;AAAA,MACF;AAAA,MACA,MAAM,WAAW,MAAM;AAAA,MACvB,OAAO,SAAS,iBAAiB,kCAAkC;AAAA,MACnE,MAAM,eACF,0BAA0B,iBAC1B,KAAK,cAAc,aAAa,cAClC,aAAa;AAAA,MAEf,iBAAiB,SAAS,gBAAgB,cACxC,UACA,KAAK,cAAc,WACnB,WACF;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,eAAe;AAAA,MACtB,MAAM,aACJ,0BAA0B,KAAK,cAAc,aAAa;AAAA,MAC5D,MAAM,aACJ,gBAAgB,KAAK,cAAc,aAAa;AAAA,MAElD,KAAK,QAAQ,MAAM,YACjB,KAAK,cAAc,WACnB,YACA,KAAK,cAAc,WACnB,aAAa,aAAa,mBAC1B,aAAa,aAAa,iBAC5B;AAAA,MAEA,2BAA2B,YAAY,KAAK,cAAc,SAAS;AAAA,MAEnE,SAAS,KAAI,EAAG,KAAI,KAAK,YAAY,QAAQ,MAAK;AAAA,QAChD,WAAW,aAAa,IAAG,KAAK,YAAY,GAAE;AAAA,MAChD;AAAA,IACF;AAAA,IAEA,KAAK,kBAAkB;AAAA,IAEvB,WAAW,KAAK,GAAG,eAAe,GAAG,uBAAuB;AAAA,IAC5D,OAAO;AAAA;AAAA,EAGT,QAAQ,GAAG;AAAA,EAEX,WAAW,CACT,OACA,cACA,QACA,oBACA,UACA,eACA,WACA;AAAA,IACA,KAAK,QAAQ;AAAA,IAGb,MAAM,mBAAmB,kBAAkB,OAAO,mBAAU,QAAQ;AAAA,IAGpE,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,SAAS,OAAO,mBAAmB;AAAA,QACjC;AAAA,QACA,MAAM,iBAAiB;AAAA,MACzB,CAAC;AAAA,MACD,OAAO,IAAG;AAAA,MACV,QAAQ,MAAM,oBAAoB,iBAAiB,IAAI,CAAC;AAAA,MACxD,MAAM;AAAA;AAAA,IAIR,KAAK,OAAO,iBAAiB;AAAA,IAG7B,MAAM,QAAQ,aAAa;AAAA,MACzB,OAAO;AAAA,QACL,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AAAA,MACA,OAAO;AAAA,QACL,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IAGA,MAAM,MAAM,IAAI,IAAY,iBAAiB,IAAI;AAAA,IACjD,MAAM,iBAAiB,IAAI,QAAQ,KAAK,CAAC,OACvC,GAAE,KAAK,SAAS,cAAc,CAChC;AAAA,IACA,IAAI,CAAC,gBAAgB;AAAA,MACnB,QAAQ,MAAM,oBAAoB,iBAAiB,IAAI,CAAC;AAAA,MACxD,MAAM,IAAI,MACR,sGACF;AAAA,IACF;AAAA,IACA,MAAM,eAAe,oBAAoB,cAAc;AAAA,IACvD,KAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,WAAW,IAAI,aACZ,aAAa,cAAc,gBAC1B,aAAa,iBACjB;AAAA,MACA,WAAW,OAAO,aAAa;AAAA,QAC7B,MAAM,aAAa,cAAc;AAAA,QACjC,OAAO,eAAe,SAAS,eAAe;AAAA,QAC9C,OAAO,GAAG;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,IAGA,MAAM,qBAAqB,yBACzB,kBACA,QACA,oBACA,KACF;AAAA,IAGA,8BACE,oBACA,KAAK,cAAc,YACrB;AAAA,IAGA,KAAK,YAAY,kBACf,QACA,kBACA,kBACF;AAAA,IAGA,MAAM,eAAe,aAAa;AAAA,IAGlC,KAAK,UAAU;AAAA,IAGf,MAAM,OAAO,0BAA0B,KAAK,IAAI;AAAA,IAChD,KAAK,iBAAiB,mBAAmB,KAAK,SAAS,aAAa;AAAA,IACpE,KAAK,iBAAiB,OAAO,aAAa;AAAA,MACxC,OAAO,GAAG;AAAA,MACV,MAAM,KAAK,eAAe,YAAY;AAAA,MACtC,OAAO,eAAe,UAAU,eAAe;AAAA,IACjD,CAAC;AAAA,IAGD,KAAK,cAAc,kBACjB,OACA,QACA,KAAK,WACL,cACA,KAAK,cACP;AAAA,IAEA,KAAK,iBAAiB;AAAA;AAE1B;AAEA,SAAS,iBAAiB,CACxB,OACA,QACA,UACA,cACA,QACA;AAAA,EACA,MAAM,YAAY,OAAO,gBAAgB;AAAA,IACvC,OAAO,GAAG;AAAA,IACV,QAAQ,SAAS,mBAAmB,CAAC;AAAA,IACrC,SAAS;AAAA,MACP;AAAA,QACE,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,UAAU,OAAO,cAAc,aAAa;AAAA,MAC9C;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,UAAU,OAAO,cAAc,eAAe;AAAA,MAChD;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EAED,MAAM,iBAAiB,OAAO,gBAAgB;AAAA,IAC5C,OAAO,GAAG;AAAA,IACV,QAAQ,SAAS,mBAAmB,CAAC;AAAA,IACrC,SAAS;AAAA,MACP;AAAA,QACE,SAAS;AAAA,QACT,UAAU,aAAa,WAAW;AAAA,UAChC,WAAW;AAAA,UACX,iBAAiB,aAAa;AAAA,QAChC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EAED,OAAO,CAAC,WAAW,cAAc;AAAA;;;ACxRnC,IAAM,WAAiC,IAAI;AAOpC,SAAS,QAAQ,CAAC,KAAa,KAAc;AAAA,EAClD,IAAI,SAAS,IAAI,GAAG,GAAG;AAAA,IACrB;AAAA,EACF;AAAA,EACA,SAAS,IAAI,KAAK,IAAI;AAAA,EACtB,QAAQ,KAAK,OAAO,GAAG;AAAA;;;ACalB,MAAM,SAAS;AAAA,EAgBX;AAAA,EACA;AAAA,EACA;AAAA,EAhBT;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,WAAW,CACF,IACA,MACA,aACP;AAAA,IAHO;AAAA,IACA;AAAA,IACA;AAAA,IAEP,MAAM,YAAY,OAAO,OAAO,KAAK,KAAK;AAAA,IAC1C,KAAK,YAAY,UAAU;AAAA,IAC3B,KAAK,aAAa,KAAK,OAAO;AAAA,IAC9B,KAAK,UAAU,KAAK,KAAK;AAAA,IACzB,KAAK,OAAO,KAAK,KAAK;AAAA,IAEtB,KAAK,YAAY,IAAI;AAAA,IACrB,IAAI,KAAK,UAAU;AAAA,MACjB,WAAW,YAAY,KAAK,UAAU;AAAA,QACpC,IAAI,cAAc,KAAK,UAAU,IAAI,SAAS,KAAK;AAAA,QACnD,IAAI,CAAC,aAAa;AAAA,UAChB,cAAc,IAAI;AAAA,UAClB,KAAK,UAAU,IAAI,SAAS,OAAO,WAAW;AAAA,QAChD;AAAA,QACA,YAAY,IAAI,SAAS,QAAQ,SAAS,MAAM;AAAA,MAClD;AAAA,IACF;AAAA,IAEA,KAAK,SAAS,IAAI;AAAA,IAClB,MAAM,YAAY,OAAO,OAAO,KAAK,KAAK,EAAE;AAAA,IAC5C,KAAK,aAAa,IAAI,aAAa,YAAY,CAAC;AAAA,IAChD,IAAI,SAAS;AAAA,IACb,MAAM,KAAI,IAAI,KAAK,OAAO;AAAA,IAC1B,MAAM,KAAI,IAAI,KAAK,OAAO;AAAA,IAE1B,YAAY,IAAG,SAAS,KAAK,MAAM,QAAQ,GAAG;AAAA,MAC5C,KAAK,OAAO,IAAI,KAAK,IAAI,IAAI;AAAA,MAC7B,KAAK,OAAO,IAAI,KAAK,EAAE,EAAG,YAAY;AAAA,MACtC,KAAK,WAAW,UAAU,KAAK,IAAI;AAAA,MACnC,KAAK,WAAW,SAAS,KAAK,KAAK,IAAI;AAAA,MACvC,KAAK,WAAW,SAAS,KAAK,KAAK,QAAQ;AAAA,MAC3C,KAAK,WAAW,SAAS,KAAK,KAAK,SAAS;AAAA,MAC5C,KAAK,WAAW,SAAS,KAAK,KAAK;AAAA,MACnC,KAAK,WAAW,SAAS,KAAK,KAAK;AAAA,MACnC,KAAK,WAAW,SAAS,KAAK,KAAK;AAAA,MACnC,KAAK,WAAW,SAAS,KAAK,CAAC,KAAK;AAAA,MACpC,UAAU;AAAA,IACZ;AAAA;AAAA,EAGF,OAAO,CAAC,UAA4B;AAAA,IAClC,MAAM,OAAO,KAAK,OAAO,IAAI,QAAQ;AAAA,IACrC,IAAI,CAAC,MAAM;AAAA,MACT,MAAM,oBAAoB,KAAK,OAAO,IACpC,KAAK,qBAAqB,KAAK,OAAO,KAAK,EAAE,QAAQ,EAAE,EACzD;AAAA,MACA,SACE,gBAAgB,KAAK,QACrB,2BAA2B,mCAAmC,KAAK,oDAAoD,kBAAkB,OAC3I;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA;AAAA,EAKT,WAAW,CAAC,UAAkB,eAAe,IAAY;AAAA,IACvD,MAAM,OAAO,KAAK,QAAQ,QAAQ;AAAA,IAClC,IAAI,gBAAgB,GAAG;AAAA,MACrB,MAAM,UAAU,KAAK,UAAU,IAAI,QAAQ;AAAA,MAC3C,IAAI,SAAS;AAAA,QACX,OAAO,KAAK,YAAY,QAAQ,IAAI,YAAY,KAAK;AAAA,MACvD;AAAA,IACF;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,cAGD,OAAM,CAAC,IAAY,aAAqC;AAAA,IACnE,MAAM,WAAW,MAAM,MAAM,WAAW;AAAA,IACxC,MAAM,OAAQ,MAAM,SAAS,KAAK;AAAA,IAElC,MAAM,KAAI,YAAY,KAAK,YAAY,GAAG;AAAA,IAC1C,MAAM,UAAU,OAAM,KAAK,YAAY,KAAK,UAAU,GAAG,KAAI,CAAC,IAAI;AAAA,IAElE,IAAI,KAAK,MAAM,SAAS,GAAG;AAAA,MACzB,MAAM,IAAI,MACR,2EACF;AAAA,IACF;AAAA,IACA,IAAI,KAAK,MAAM,SAAS,GAAG;AAAA,MACzB,MAAM,IAAI,MAAM,mDAAmD;AAAA,IACrE;AAAA,IAEA,MAAM,aAAa,UAAU,KAAK,MAAM;AAAA,IACxC,MAAM,kBAAkB,MAAM,MAAM,UAAU;AAAA,IAC9C,MAAM,SAAS,MAAM,kBAAkB,MAAM,gBAAgB,KAAK,CAAC;AAAA,IAEnE,OAAO,IAAI,SAAS,IAAI,MAAM,MAAM;AAAA;AAAA,MAGlC,iBAAiB,CAAC,WAAmB;AAAA,IACvC,MAAM,WAAmB,UAAU,WAAW,CAAC;AAAA,IAC/C,IAAI,KAAK,OAAO,IAAI,QAAQ,GAAG;AAAA,MAC7B,KAAK,oBAAoB;AAAA,IAC3B,EAAO;AAAA,MACL,MAAM,eAAe,KAAK,OAAO,KAAK,EAAE,QAAQ,EAAE;AAAA,MAClD,QAAQ,KACN,GAAG,8CAA8C,KAAK,uBAAuB,KAAK,OAAO,IAAI,YAAY,GAAG,QAC9G;AAAA,MACA,KAAK,oBAAoB;AAAA;AAAA;AAG/B;;;AC3IA,IAAM,aAAa;AA+BZ,SAAS,SAAS,CACvB,MACA,MACA,WACA,UACA,YACA,WACA,qBAAqB,GACrB,QAAQ,OACR;AAAA,EACA,IAAI,SAAS;AAAA,EAEb,MAAM,eAAe,YAAY,MAAM,MAAM,WAAW,QAAQ;AAAA,EAChE,MAAM,YAAY,WAAW,SAAS;AAAA,EACtC,MAAM,QAAQ,WAAW,KAAK;AAAA,EAG9B,MAAM,uBAAuB,UAAU,UAAU,aAAa;AAAA,EAE9D,IAAI,YAA0B;AAAA,EAC9B,IAAI,OAAO;AAAA,IACT,YAAY,CAAC;AAAA,EACf;AAAA,EAEA,WAAW,QAAQ,aAAa,OAAO;AAAA,IACrC,WAAW,SAAS,KAAK,QAAQ;AAAA,MAC/B,IAAI,aAAa;AAAA,MACjB,IAAI,cAAc,UAAU;AAAA,QAC1B,aACE,aAAa,QAAQ,QACpB,aAAa,QAAQ,aAAa,WAAW,MAAM,SAAS;AAAA,MACjE,EAAO,SAAI,cAAc,SAAS;AAAA,QAChC,MAAM,cAAc,UAAU,QAAQ;AAAA,QAEtC,MAAM,QAAQ,aAAa,QAAQ,aAAa,WAAW,MAAM;AAAA,QAEjE,cACG,uBAAuB,cAAc,IAAI,aAAa,QAAQ,KAC/D,aAAa,QACb;AAAA,MACJ,EAAO,SAAI,cAAc,QAAQ;AAAA,QAC/B,MAAM,cAAc,UAAU,QAAQ;AAAA,QAEtC,aAAa,uBACT,CAAC,cAAc,IACf,CAAC,aAAa,QAAQ;AAAA,MAC5B;AAAA,MAEA,IAAI,SAAS,WAAW;AAAA,QACtB,UAAU,KAAK;AAAA,UACb,MAAM,MAAM;AAAA,UACZ,MAAM,KAAK,OAAO,IAAI,CAAC,OAAM,GAAE,KAAK,IAAI,EAAE,KAAK,EAAE;AAAA,UACjD,OAAO,MAAM,KAAK;AAAA,UAClB,QAAQ,KAAK;AAAA,UACb,QAAQ,MAAM,OAAO;AAAA,UACrB,SAAS,MAAM,KAAK;AAAA,UACpB;AAAA,UACA,QAAQ,KAAK;AAAA,UACb,QAAQ,MAAM,OAAO;AAAA,QACvB,CAAC;AAAA,MACH;AAAA,MACA,UAAU,UAAU,KAAK,SAAS,MAAM,OAAO,KAAK;AAAA,MACpD,UAAU,SAAS,KAAK,KAAK,SAAS,MAAM,OAAO;AAAA,MACnD,UAAU,SAAS,KAAK,MAAM,KAAK;AAAA,MAEnC,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,IAAI,SAAS,WAAW;AAAA,IACtB,QAAQ,MAAM,SAAS;AAAA,EACzB;AAAA;AAUK,SAAS,WAAW,CACzB,MACA,MACA,UACsB;AAAA,EACtB,IAAI,WAAW;AAAA,EACf,MAAM,aAAuB,CAAC;AAAA,EAE9B,IAAI,cAAc;AAAA,EAClB,IAAI,cAAc;AAAA,EAClB,IAAI,OAAO;AAAA,EACX,IAAI,mBAAmB;AAAA,EACvB,IAAI,eAAe,KAAK,WAAW,CAAC;AAAA,EACpC,IAAI,OAAa,EAAE,QAAQ,CAAC,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,EAAE;AAAA,EAE9D,MAAM,QAAgB,CAAC;AAAA,EAEvB,SAAS,KAAI,EAAG,KAAI,KAAK,QAAQ,MAAK;AAAA,IACpC,MAAM,eAAe,OAAM,KAAK,SAAS;AAAA,IAEzC,MAAM,WAAW;AAAA,IACjB,eAAe,KAAI,KAAK,SAAS,IAAI,KAAK,WAAW,KAAI,CAAC,IAAI;AAAA,IAE9D,QAAQ;AAAA;AAAA,QAEJ,aAAa,UAAU;AAAA,QACvB;AAAA;AAAA,QAEA,UAAU;AAAA,QACV,UAAU;AAAA,QACV;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA,aAAa,CAAC;AAAA,QACd;AAAA,eACO;AAAA,QACP,MAAM,UAAU,KAAK,YAAY,UAAU,YAAY;AAAA,QACvD,IACE,YACA,SAAS,YAAY,eACrB,cAAc,UAAU,SAAS,SACjC;AAAA,UACA,IAAI,KAAK,WAAW,GAAG;AAAA,YACrB,UAAU;AAAA,UACZ,EAAO;AAAA,YACL,WAAW,KAAK,cAAc,KAAK,KAAK;AAAA,YACxC;AAAA,YACA,WAAW,KAAK,IAAI,UAAU,WAAW;AAAA,YACzC,cAAc,KAAK;AAAA,YACnB,eAAe,KAAK;AAAA,YACpB,KAAK,SAAS;AAAA,YACd,KAAK,SAAS;AAAA,YACd,KAAK,OAAO,QAAQ,CAAC,OAAM;AAAA,cACzB,GAAE,OAAO;AAAA,aACV;AAAA;AAAA,QAEL;AAAA,QACA,KAAK,OAAO,KAAK;AAAA,UACf,MAAM,KAAK,QAAQ,QAAQ;AAAA,UAC3B,QAAQ,CAAC,KAAK,OAAO,CAAC;AAAA,UACtB;AAAA,QACF,CAAC;AAAA,QAED,IAAI,cAAc;AAAA,UAChB,UAAU;AAAA,QACZ;AAAA,QAEA,KAAK,SAAS;AAAA,QACd,eAAe;AAAA,MACjB;AAAA;AAAA,EAEJ;AAAA,EAEA,WAAW,KAAK,WAAW;AAAA,EAC3B,WAAW,KAAK,IAAI,UAAU,WAAW;AAAA,EAEzC,MAAM,YAAY,WAAW;AAAA,EAE7B,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ,YAAY,KAAK;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,SAAS,SAAS,GAAG;AAAA,IACnB,oBAAoB,KAAK,OAAO;AAAA,IAChC,MAAM,KAAK,IAAI;AAAA,IACf,OAAO;AAAA,MACL,QAAQ,CAAC;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA;AAAA,EAGF,SAAS,SAAS,GAAG;AAAA,IACnB,WAAW,KAAK,WAAW;AAAA,IAC3B;AAAA,IACA,WAAW,KAAK,IAAI,UAAU,WAAW;AAAA,IACzC,cAAc;AAAA,IACd,eAAe,KAAK;AAAA;AAAA,EAGtB,SAAS,YAAY,CAAC,QAAgB;AAAA,IACpC,IAAI,SAAS;AAAA,MAAG,SAAS;AAAA,IACzB,eAAe,KAAK,0BAAoC,IAAI;AAAA,IAC5D,IAAI,UAAU,YAAY,UAAU,eAAe,SAAS,SAAS;AAAA,MACnE,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA;AAAA;AAGP,SAAS,mBAAmB,CACjC,MACA,MACA,MACA,YACoB;AAAA,EACpB,IAAI,CAAC,WAAW,UAAU;AAAA,IACxB,MAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AAAA,EACA,IAAI,CAAC,WAAW,aAAa;AAAA,IAC3B,MAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAAA,EAEA,MAAM,UAAU,WAAW,YAAY;AAAA,EACvC,MAAM,UAAU,WAAW,YAAY,eAAe,WAAW;AAAA,EACjE,MAAM,WAAW,WAAW,YAAY,YAAY,OAAO;AAAA,EAE3D,MAAM,YAAY;AAAA,EAClB,IAAI,MAAM;AAAA,EACV,IAAI,OAAO;AAAA,EAEX,OAAO,OAAO,MAAM,WAAW;AAAA,IAE7B,MAAM,YAAY,MAAM,QAAQ;AAAA,IAChC,MAAM,cAAc,YAAY,MAAM,MAAM,WAAW,QAAQ;AAAA,IAE/D,MAAM,UAAU,WAAW,YAAY,WAAW;AAAA,IAElD,MAAM,cAAc,YAAY,SAAS,WAAW,KAAK;AAAA,IACzD,MAAM,eAAe,YAAY,UAAU,WAAW,KAAK;AAAA,IAC3D,MAAM,YAAY,eAAe,KAAK,QAAQ,KAAK,QAAQ;AAAA,IAC3D,MAAM,aAAa,gBAAgB,KAAK,SAAS,KAAK,SAAS;AAAA,IAC/D,MAAM,YAAY,YAAY,aAAa;AAAA,IAE3C,IAAI,aAAa,cAAc,WAAW;AAAA,MACxC,MAAM;AAAA,IACR,EAAO;AAAA,MACL,OAAO;AAAA;AAAA,EAEX;AAAA,EAEA,OAAO;AAAA;;;AC/QF,IAAM,oBAAoB;AAAA;AAE1B,MAAM,iBAAiB,UAAU;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EAEA,WAAW,CAAC,QAAoB,MAAc,OAAoB,CAAC,GAAG;AAAA,IACpE,QAAQ,OAAO,WAAW,YAAY,OAAO,MAAM,MAAM,KAAK,QAAQ;AAAA,IAEtE,IAAI,KAAK,SAAS,OAAO,cAAc;AAAA,MACrC,MAAM,IAAI,MACR,SAAS,gBAAgB,OAAO,6FAClC;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,OAAO,KAAK,cAAc,KAAK,YAAY;AAAA,IAEzD,IAAI,CAAC,KAAK,eAAe,CAAC,KAAK,WAAW;AAAA,MACxC,KAAK,YAAY,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,MAAM;AAAA,IAClE;AAAA,IAEA,MAAM;AAAA,SACD;AAAA,MACH,QAAQ;AAAA,QACN;AAAA,QACA,eAAe,CAAC,OAAO,QAAQ,YAAY;AAAA,UACzC,MAAM,IAAI,MACR,sFACF;AAAA;AAAA,MAEJ;AAAA,IACF,CAAC;AAAA,IAED,KAAK,QAAQ,OAAO;AAAA,IACpB,KAAK,QAAQ;AAAA,IACb,KAAK,cAAc;AAAA;AAAA,MAGjB,IAAI,GAAG;AAAA,IACT,OAAO,KAAK;AAAA;AAAA,MAGV,UAAU,GAAG;AAAA,IACf,OAAO,KAAK;AAAA;AAAA,MAGV,IAAI,GAAG;AAAA,IACT,OAAO,KAAK;AAAA;AAAA,MAGV,IAAI,CAAC,MAAc;AAAA,IACrB,IAAI,CAAC,MAAM;AAAA,MACT,MAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAAA,IACA,KAAK,QAAQ;AAAA,IACb,KAAK,SAAS;AAAA;AAAA,MAGZ,IAAI,GAAG;AAAA,IACT,OAAO,KAAK,YAAY,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA;AAAA,MAGxD,IAAI,CAAC,MAAa;AAAA,IACpB,KAAK,YAAY,QAAQ;AAAA,IACzB,KAAK,SAAS;AAAA;AAAA,MAGZ,UAAU,CAAC,YAA4B;AAAA,IACzC,KAAK,cAAc;AAAA,IACnB,KAAK,SAAS;AAAA;AAElB;;;AC/EA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMjB,MAAM,aAAa;AAAA,EAEf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAJT,WAAW,CACF,UACA,MACA,eACA,cACP;AAAA,IAJO;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,cAGI,OAAM,CACjB,QACA,MACA,aACA,cACuB;AAAA,IACvB,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,KAAK,IAAI;AAAA,IACrE,MAAM,UAAU,OAAO,cAAc;AAAA,MACnC,OAAO,aAAa,KAAK;AAAA,MACzB,MAAM,CAAC,KAAK,YAAY,OAAO,KAAK,YAAY,QAAQ,CAAC;AAAA,MACzD,QAAQ;AAAA,MACR,OACE,gBAAgB,kBAChB,gBAAgB,WAChB,gBAAgB;AAAA,IACpB,CAAC;AAAA,IACD,OAAO,MAAM,2BACX,EAAE,QAAQ,KAAK,YAAY,GAC3B,EAAE,QAAQ,GACV,CAAC,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM,CAClD;AAAA,IAEA,MAAM,iBAAiB,OAAO,aAAa;AAAA,MACzC,OAAO,aAAa,KAAK;AAAA,MACzB,MAAM,KAAK,YAAY,aAAa,oBAAoB;AAAA,MACxD,OAAO,eAAe;AAAA,MACtB,kBAAkB;AAAA,IACpB,CAAC;AAAA,IAED,MAAM,aAAa,IAAI,aAAa,eAAe,eAAe,CAAC;AAAA,IAEnE,WAAW,IAAI,KAAK,YAAY,CAAC;AAAA,IACjC,eAAe,MAAM;AAAA,IAErB,MAAM,iBAAiB,OAAO,aAAa;AAAA,MACzC,OAAO,aAAa,KAAK;AAAA,MACzB,MAAM,aAAa,oBAAoB;AAAA,MACvC,OAAO,eAAe;AAAA,MACtB,kBAAkB;AAAA,IACpB,CAAC;AAAA,IACD,MAAM,gBAAgB,IAAI,aAAa,eAAe,eAAe,CAAC;AAAA,IACtE,cAAc,KAAK,KAAK;AAAA,IACxB,eAAe,MAAM;AAAA,IAGrB,MAAM,gBAAgB,OAAO,gBAAgB;AAAA,MAC3C,QAAQ,SAAS,mBAAmB,CAAC;AAAA,MACrC,SAAS;AAAA,QAEP;AAAA,UACE,SAAS;AAAA,UACT,UAAU,QAAQ,WAAW;AAAA,QAC/B;AAAA,QAEA;AAAA,UACE,SAAS;AAAA,UACT,UAAU,OAAO,cAAc,OAAO;AAAA,QACxC;AAAA,QAEA;AAAA,UACE,SAAS;AAAA,UACT,UAAU;AAAA,YACR,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,QAEA;AAAA,UACE,SAAS;AAAA,UACT,UAAU;AAAA,YACR,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACD,OAAO,IAAI,aAAa,UAAU,MAAM,eAAe,YAAY;AAAA;AAEvE;AAEO,SAAS,eAAe,CAC7B,QACA,aACA,OACA;AAAA,EACA,MAAM,SAAS,OAAO,mBAAmB;AAAA,IACvC,OAAO,GAAG;AAAA,IACV,MAAM;AAAA,EACR,CAAC;AAAA,EAED,OAAO,OAAO,0BAA0B;AAAA,IACtC,OAAO,GAAG;AAAA,IACV,QAAQ,OAAO,qBAAqB;AAAA,MAClC,kBAAkB;AAAA,QAChB,OAAO,sBAAsB,mBAAmB;AAAA,QAChD,OAAO,sBAAsB,0BAA0B;AAAA,QACvD,OAAO,sBAAsB,4BAA4B;AAAA,MAC3D;AAAA,IACF,CAAC;AAAA,IACD,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,YAAY;AAAA,IACd;AAAA,IACA,UAAU;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,SAAS;AAAA,QACP;AAAA,UACE,QAAQ;AAAA,UACR,OAAO;AAAA,YACL,OAAO;AAAA,cACL,WAAW;AAAA,cACX,WAAW;AAAA,YACb;AAAA,YACA,OAAO;AAAA,cACL,WAAW;AAAA,cACX,WAAW;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,UAAU;AAAA,MACV,kBAAkB;AAAA,IACpB;AAAA,EACF,CAAC;AAAA;AAGH,IAAI,OAAO,mBAAmB,aAAa;AAAA,EAGzC,WAAW,iBAAiB;AAAA,IAC1B,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;AAEA,IAAM,sBAAoD;AAAA,EACxD,OAAO;AAAA,EACP,SAAS;AAAA,IACP;AAAA,MACE,SAAS;AAAA,MACT,YAAY,eAAe;AAAA,MAC3B,SAAS,CAAC;AAAA,IACZ;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY,eAAe;AAAA,MAC3B,SAAS,CAAC;AAAA,IACZ;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY,eAAe;AAAA,MAC3B,QAAQ,EAAE,MAAM,oBAAoB;AAAA,IACtC;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY,eAAe;AAAA,MAC3B,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AACF;AAEA,IAAM,+BAA6D;AAAA,EACjE,OAAO;AAAA,EACP,SAAS;AAAA,IACP;AAAA,MACE,SAAS;AAAA,MACT,YAAY,eAAe;AAAA,MAC3B,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AACF;AAEA,IAAM,UAAgC;AAAA,EACpC,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AAAA,EACX,cAAc;AAAA,EACd,eAAe;AACjB;AAEA,IAAM,6BAA2D;AAAA,EAC/D,OAAO;AAAA,EACP,SAAS;AAAA,IACP;AAAA,MAEE,SAAS;AAAA,MACT,YAAY,eAAe,SAAS,eAAe;AAAA,MACnD,QAAQ,EAAE,MAAM,oBAAoB;AAAA,IACtC;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY,eAAe,SAAS,eAAe;AAAA,MACnD,QAAQ,EAAE,MAAM,oBAAoB;AAAA,IACtC;AAAA,EACF;AACF;;;ACzMA,IAAM,QAAQ,IAAI,IAAY,iBAAU;AACxC,IAAM,SAAS,MAAM,QAAQ,KAAK,CAAC,OAAM,GAAE,SAAS,qBAAqB;AACzE,IAAI,CAAC,QAAQ;AAAA,EACX,MAAM,IAAI,MAAM,gCAAgC;AAClD;AACA,IAAM,6BAA6B,OAAO;AAAA;AAEnC,MAAM,WAA8B;AAAA,EACzC;AAAA,EACA;AAAA,EACA,cAA8B,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EAEnB,WAAW,CACT,QACA,UACA,MACA,aACA,eACA;AAAA,IACA,KAAK,UAAU;AAAA,IACf,KAAK,QAAQ;AAAA,IACb,KAAK,YAAY,SAAS;AAAA,IAC1B,KAAK,gBAAgB,SAAS;AAAA,IAE9B,KAAK,oBAAoB,OAAO,aAAa;AAAA,MAC3C,OAAO;AAAA,MACP,MAAM,6BAA6B;AAAA,MACnC,OAAO,eAAe,UAAU,eAAe;AAAA,IACjD,CAAC;AAAA,IAED,KAAK,uBAAuB,IAAI,aAC7B,gBAAgB,6BACf,aAAa,iBACjB;AAAA,IAEA,KAAK,sBAAsB,IAAI,aAC7B,gBAAgB,KAAK,eAAe,CACtC;AAAA,IAEA,KAAK,wBAAwB,OAAO,aAAa;AAAA,MAC/C,OAAO;AAAA,MACP,MAAM,aAAa,oBAAoB;AAAA,MACvC,OAAO,eAAe,UAAU,eAAe;AAAA,IACjD,CAAC;AAAA,IAED,KAAK,mBAAmB,OAAO,aAAa;AAAA,MAC1C,OAAO;AAAA,MACP,MACE,gBAAgB,KAAK,eAAe,IAAI,aAAa;AAAA,MACvD,OAAO,eAAe,UAAU,eAAe;AAAA,IACjD,CAAC;AAAA,IAGD,KAAK,YAAY,KAAK,SAAS,aAAa;AAAA,IAE5C,KAAK,YAAY,KACf,OAAO,gBAAgB;AAAA,MACrB,OAAO;AAAA,MACP,QAAQ,SAAS,SAAS,mBAAmB,CAAC;AAAA,MAC9C,SAAS;AAAA,QACP;AAAA,UACE,SAAS;AAAA,UACT,UAAU,EAAE,QAAQ,KAAK,kBAAkB;AAAA,QAC7C;AAAA,QACA;AAAA,UACE,SAAS;AAAA,UACT,UAAU,EAAE,QAAQ,KAAK,iBAAiB;AAAA,QAC5C;AAAA,MACF;AAAA,IACF,CAAC,CACH;AAAA,IAEA,MAAM,0BAA0B,OAAO,gBAAgB;AAAA,MACrD,OAAO;AAAA,MACP,QAAQ,SAAS,SAAS,mBAAmB,CAAC;AAAA,MAC9C,SAAS;AAAA,QACP;AAAA,UACE,SAAS;AAAA,UACT,UAAU,EAAE,QAAQ,KAAK,sBAAsB;AAAA,QACjD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACD,KAAK,YAAY,KAAK,uBAAuB;AAAA;AAAA,EAG/C,UAAU,CAAC,QAAmB,SAA8B;AAAA,IAC1D,OAAO,MAAM,YACX,KAAK,uBACL,GACA,QAAQ,oBACV;AAAA,IACA,KAAK,iBAAiB;AAAA,IACtB,KAAK,mBAAmB;AAAA;AAAA,EAG1B,YAAY,CAAC,YAAkC,OAA4B;AAAA,IACzE,IAAI,MAAM,WAAW;AAAA,MAAG,OAAO;AAAA,IAE/B,WAAW,YAAY,KAAK,SAAS;AAAA,IACrC,SAAS,KAAI,EAAG,KAAI,KAAK,YAAY,QAAQ,MAAK;AAAA,MAChD,WAAW,aAAa,IAAG,KAAK,YAAY,GAAE;AAAA,IAChD;AAAA,IAEA,WAAW,QAAQ,OAAO;AAAA,MACxB,IAAI,EAAE,gBAAgB,WAAW;AAAA,QAC/B,QAAQ,MAAM,IAAI;AAAA,QAClB,MAAM,IAAI,MACR,+DAA+D,MACjE;AAAA,MACF;AAAA,MACA,MAAM,OAAO,KAAK;AAAA,MAClB,MAAM,aAAa,KAAK;AAAA,MACxB,MAAM,eAAe,YAAY,KAAK,OAAO,MAAM,WAAW,QAAQ;AAAA,MAEtE,MAAM,gBAAgB,IAAI,KAAK;AAAA,MAG/B,MAAM,uBACH,KAAK,iBAAiB,6BACvB,aAAa;AAAA,MAGf,KAAK,qBAAqB,IAAI,KAAK,QAAQ,oBAAoB;AAAA,MAG/D,KAAK,qBAAqB,IACxB,CAAC,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,CAAC,GACnD,uBAAuB,EACzB;AAAA,MAGA,MAAM,OAAO,KAAK,QAAQ;AAAA,MAC1B,MAAM,WAAW,WAAW,cACxB,oBAAoB,KAAK,OAAO,MAAM,MAAM,UAAU,IACtD,WAAW;AAAA,MACf,MAAM,iBAAiB,YAAY;AAAA,MACnC,KAAK,qBAAqB,uBAAuB,MAAM;AAAA,MAGvD,KAAK,qBAAqB,uBAAuB,MAC/C,WAAW,UAAU,WAAW,IAAI,aAAa;AAAA,MACnD,KAAK,qBAAqB,uBAAuB,MAC/C,aAAa;AAAA,MAKf,KAAK,qBAAqB,uBAAuB,MAC/C,KAAK,mBAAmB;AAAA,MAE1B,UACE,KAAK,OACL,MACA,MACA,gBACA,YACA,KAAK,qBACL,KAAK,gBACP;AAAA,MAGA,KAAK,QAAQ,MAAM,YACjB,KAAK,mBACL,uBAAuB,aAAa,mBACpC,KAAK,sBACL,sBACA,6BAA6B,aAAa,iBAC5C;AAAA,MAEA,KAAK,QAAQ,MAAM,YACjB,KAAK,kBACL,KAAK,mBAAmB,aAAa,mBACrC,KAAK,qBACL,KAAK,kBACL,aACF;AAAA,MAEA,KAAK,oBAAoB;AAAA,MAGzB,WAAW,KACT,GACA,aAAa,kBACb,IAAI,KAAK,gBACT,CACF;AAAA,MACA,KAAK;AAAA,IACP;AAAA,IAEA,OAAO,MAAM;AAAA;AAAA,EAGf,QAAQ,GAAS;AAAA,MAIb,IAAI,GAAG;AAAA,IACT,OAAO,KAAK;AAAA;AAAA,MAGV,YAAY,GAAG;AAAA,IACjB,OAAO,KAAK;AAAA;AAEhB;;;;;;;;;;AC9MO,MAAM,KAAQ;AAAA,EACnB,SAAc,CAAC;AAAA,EACf;AAAA,EACA,SAAS;AAAA,EAET,WAAW,CAAC,QAAiB,cAAc,GAAG;AAAA,IAC5C,KAAK,UAAU;AAAA,IACf,IAAI,cAAc,GAAG;AAAA,MACnB,KAAK,SAAS,MAAM,KAAK,EAAE,QAAQ,YAAY,CAAC,EAC7C,KAAK,IAAI,EACT,IAAI,MAAM,KAAK,QAAQ,CAAC;AAAA,IAC7B;AAAA;AAAA,EAGF,GAAG,GAAG;AAAA,IACJ,IAAI,KAAK,UAAU,KAAK,OAAO,QAAQ;AAAA,MACrC,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC;AAAA,IACjC;AAAA,IAEA,OAAO,KAAK,OAAO,KAAK;AAAA;AAAA,EAG1B,IAAI,GAAG;AAAA,IACL,KAAK,SAAS;AAAA;AAElB;;ACzCA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACIxB,IAAM,oBAAoB,IAAI,YAAY;AAC1C,IAAM,iBAAiB;AACvB,IAAM,YAAY;AAClB,IAAM,YAAY;AAClB,IAAM,kBAAkB;AAAA;AAuBjB,MAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,WAAW,CACT,QACA,cACA,eACA,wBACA;AAAA,IACA,KAAK,UAAU;AAAA,IACf,KAAK,iBAAiB;AAAA,IACtB,KAAK,gBAAgB;AAAA,IACrB,KAAK,0BAA0B;AAAA,IAG/B,KAAK,kBAAkB,KAAK,QAAQ,aAAa;AAAA,MAC/C,MAAM;AAAA,MACN,OACE,eAAe,UACf,eAAe,WACf,eAAe;AAAA,IACnB,CAAC;AAAA;AAAA,SAMI,MAAM,CAAC,QAAmB;AAAA,IAC/B,MAAM,YAAY,gBAAgB,QAAQ,sBAAsB;AAAA,IAChE,OAAO,IAAI,qBACT,QACA,UAAU,cACV,UAAU,eACV,UAAU,sBACZ;AAAA;AAAA,OAOI,eAAc,CAClB,gBAC8B;AAAA,IAC9B,MAAM,kBAAkB,KAAK,iBAAiB,eAAe,OAAO;AAAA,IAEpE,MAAM,iBAAiB,KAAK,QAAQ,qBAAqB;AAAA,IACzD,MAAM,cAAc,eAAe,iBAAiB;AAAA,IAEpD,MAAM,YAAY,KAAK,KAAK,eAAe,QAAQ,QAAQ,cAAc;AAAA,IACzE,MAAM,YAAY,KAAK,KAAK,eAAe,QAAQ,SAAS,cAAc;AAAA,IAG1E,MAAM,aAAa,IAAI,YAAY;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,KAAK,QAAQ,MAAM,YACjB,KAAK,iBACL,GACA,WAAW,QACX,GACA,iBACF;AAAA,IAGA,YAAY,YAAY,KAAK,cAAc;AAAA,IAC3C,YAAY,aAAa,GAAG,eAAe;AAAA,IAC3C,YAAY,mBAAmB,WAAW,SAAS;AAAA,IACnD,YAAY,IAAI;AAAA,IAChB,KAAK,QAAQ,MAAM,OAAO,CAAC,eAAe,OAAO,CAAC,CAAC;AAAA,IAEnD,QAAQ,QAAQ,QAAQ,YAAY,aAAa,kBAC/C,MAAM,KAAK,gBAAgB;AAAA,IAG7B,IAAI,WAAW,aAAa,WAAW,WAAW;AAAA,MAChD,OAAO,MAAM,KAAK,sBAAsB,eAAe,OAAO;AAAA,IAChE;AAAA,IAGA,MAAM,iBAAiB,MAAM,KAAK,aAChC,YACA,aACA,eACA,eAAe,OACjB;AAAA,IAEA,MAAM,WAAW;AAAA,IACjB,MAAM,YAAY,eAAe,aAAa,QAAQ,SAAS;AAAA,IAC/D,MAAM,UAAU;AAAA,IAChB,MAAM,aACJ,eAAe,aAAa,SAAS,SAAS;AAAA,IAEhD,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,YAAY,EAAE,GAAG,WAAW,WAAW,GAAG,aAAa,QAAQ;AAAA,MAC/D,cAAc,eAAe;AAAA,IAC/B;AAAA,IAEA,OAAO;AAAA;AAAA,OAMH,eAAe,GAEnB;AAAA,IACA,MAAM,aAAa,KAAK,QAAQ,aAAa;AAAA,MAC3C,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO,eAAe,WAAW,eAAe;AAAA,IAClD,CAAC;AAAA,IAED,MAAM,cAAc,KAAK,QAAQ,qBAAqB;AAAA,IACtD,YAAY,mBACV,KAAK,iBACL,GACA,YACA,GACA,iBACF;AAAA,IACA,KAAK,QAAQ,MAAM,OAAO,CAAC,YAAY,OAAO,CAAC,CAAC;AAAA,IAEhD,MAAM,WAAW,SAAS,WAAW,IAAI;AAAA,IACzC,MAAM,gBAAgB,IAAI,YAAY,WAAW,eAAe,EAAE,MAAM,CAAC,CAAC;AAAA,IAC1E,WAAW,MAAM;AAAA,IAEjB,OAAO,MAAM,MAAM,MAAM,QAAQ;AAAA,IACjC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY,OAAO,OAAO;AAAA,MAC1B,aAAa,OAAO,OAAO;AAAA,MAE3B;AAAA,IACF;AAAA;AAAA,OAMI,YAAY,CAChB,cACA,eACA,eACA,cACA;AAAA,IACA,MAAM,gBAAgB,KAAK,QAAQ,aAAa;AAAA,MAC9C,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO,eAAe,UAAU,eAAe;AAAA,IACjD,CAAC;AAAA,IACD,KAAK,QAAQ,MAAM,YAAY,eAAe,GAAG,aAAa;AAAA,IAE9D,MAAM,gBAAgB,KAAK,QAAQ,cAAc;AAAA,MAC/C,OAAO;AAAA,MACP,MAAM,CAAC,cAAc,aAAa;AAAA,MAClC,QAAQ;AAAA,MACR,OACE,gBAAgB,kBAChB,gBAAgB,kBAChB,gBAAgB;AAAA,IACpB,CAAC;AAAA,IAED,MAAM,sBAAsB,KAAK,QAAQ,aAAa;AAAA,MACpD,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO,eAAe,UAAU,eAAe;AAAA,IACjD,CAAC;AAAA,IAED,MAAM,YAAY,KAAK,mBACrB,cACA,eACA,eACA,mBACF;AAAA,IAEA,MAAM,UAAU,KAAK,QAAQ,qBAAqB;AAAA,IAClD,MAAM,OAAO,QAAQ,iBAAiB;AAAA,IACtC,KAAK,YAAY,KAAK,aAAa;AAAA,IACnC,KAAK,aAAa,GAAG,SAAS;AAAA,IAC9B,KAAK,mBACH,KAAK,KAAK,eAAe,cAAc,GACvC,KAAK,KAAK,gBAAgB,cAAc,CAC1C;AAAA,IACA,KAAK,IAAI;AAAA,IACT,KAAK,QAAQ,MAAM,OAAO,CAAC,QAAQ,OAAO,CAAC,CAAC;AAAA,IAE5C,OAAO;AAAA;AAAA,OAMH,qBAAqB,CACzB,cAC8B;AAAA,IAC9B,MAAM,cAAc,KAAK,QAAQ,cAAc;AAAA,MAC7C,OAAO;AAAA,MACP,MAAM,CAAC,aAAa,OAAO,aAAa,MAAM;AAAA,MAC9C,QAAQ;AAAA,MACR,OACE,gBAAgB,WAChB,gBAAgB,WAChB,gBAAgB,kBAChB,gBAAgB;AAAA,IACpB,CAAC;AAAA,IAED,MAAM,UAAU,KAAK,QAAQ,qBAAqB;AAAA,IAClD,MAAM,OAAO,QAAQ,iBAAiB;AAAA,IACtC,KAAK,YAAY,KAAK,uBAAuB;AAAA,IAC7C,KAAK,aAAa,GAAG,KAAK,yBAAyB,WAAW,CAAC;AAAA,IAC/D,KAAK,mBAAmB,YAAY,QAAQ,GAAG,YAAY,SAAS,CAAC;AAAA,IACrE,KAAK,IAAI;AAAA,IACT,KAAK,QAAQ,MAAM,OAAO,CAAC,QAAQ,OAAO,CAAC,CAAC;AAAA,IAE5C,OAAO;AAAA,MACL,SAAS;AAAA,MACT,YAAY,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,MACzB,cAAc,EAAE,OAAO,aAAa,OAAO,QAAQ,aAAa,OAAO;AAAA,IACzE;AAAA;AAAA,OAMI,gBAAgB,CACpB,SACA,OACA,QACsB;AAAA,IACtB,MAAM,oBAAoB,KAAK,KAAM,QAAQ,kBAAmB,GAAG,IAAI;AAAA,IACvE,MAAM,aAAa,oBAAoB;AAAA,IAEvC,MAAM,aAAa,KAAK,QAAQ,aAAa;AAAA,MAC3C,MAAM;AAAA,MACN,OAAO,eAAe,WAAW,eAAe;AAAA,IAClD,CAAC;AAAA,IAED,MAAM,UAAU,KAAK,QAAQ,qBAAqB;AAAA,IAClD,QAAQ,oBACN,EAAE,QAAQ,GACV,EAAE,QAAQ,YAAY,aAAa,kBAAkB,GACrD,EAAE,OAAO,QAAQ,oBAAoB,EAAE,CACzC;AAAA,IACA,KAAK,QAAQ,MAAM,OAAO,CAAC,QAAQ,OAAO,CAAC,CAAC;AAAA,IAE5C,MAAM,WAAW,SAAS,WAAW,IAAI;AAAA,IACzC,MAAM,MAAM,WAAW,eAAe;AAAA,IACtC,MAAM,WAAW,IAAI,WAAW,GAAG;AAAA,IAEnC,MAAM,YAAY,IAAI,kBAAkB,QAAQ,SAAS,CAAC;AAAA,IAC1D,SAAS,KAAI,EAAG,KAAI,QAAQ,MAAK;AAAA,MAC/B,MAAM,MAAM,KAAI;AAAA,MAChB,MAAM,MAAM,KAAI,QAAQ;AAAA,MACxB,UAAU,IAAI,SAAS,SAAS,KAAK,MAAM,QAAQ,CAAC,GAAG,GAAG;AAAA,IAC5D;AAAA,IACA,WAAW,MAAM;AAAA,IAEjB,MAAM,SAAS,SAAS,cAAc,QAAQ;AAAA,IAC9C,OAAO,QAAQ;AAAA,IACf,OAAO,SAAS;AAAA,IAChB,MAAM,MAAM,OAAO,WAAW,IAAI;AAAA,IAClC,IAAI,aAAa,IAAI,UAAU,WAAW,OAAO,MAAM,GAAG,GAAG,CAAC;AAAA,IAE9D,OAAO,MAAM,kBAAkB,MAAM;AAAA;AAAA,EAKvC,gBAAgB,CAAC,cAAwC;AAAA,IACvD,OAAO,KAAK,QAAQ,gBAAgB;AAAA,MAClC,QAAQ,KAAK,eAAe,mBAAmB,CAAC;AAAA,MAChD,SAAS;AAAA,QACP,EAAE,SAAS,GAAG,UAAU,aAAa,WAAW,EAAE;AAAA,QAClD,EAAE,SAAS,GAAG,UAAU,EAAE,QAAQ,KAAK,gBAAgB,EAAE;AAAA,MAC3D;AAAA,IACF,CAAC;AAAA;AAAA,EAGH,kBAAkB,CAChB,cACA,eACA,eACA,qBACc;AAAA,IACd,OAAO,KAAK,QAAQ,gBAAgB;AAAA,MAClC,QAAQ,KAAK,cAAc,mBAAmB,CAAC;AAAA,MAC/C,SAAS;AAAA,QACP,EAAE,SAAS,GAAG,UAAU,aAAa,WAAW,EAAE;AAAA,QAClD,EAAE,SAAS,GAAG,UAAU,cAAc,WAAW,EAAE;AAAA,QACnD,EAAE,SAAS,GAAG,UAAU,EAAE,QAAQ,cAAc,EAAE;AAAA,QAClD,EAAE,SAAS,GAAG,UAAU,EAAE,QAAQ,oBAAoB,EAAE;AAAA,MAC1D;AAAA,IACF,CAAC;AAAA;AAAA,EAGH,wBAAwB,CAAC,eAAyC;AAAA,IAChE,OAAO,KAAK,QAAQ,gBAAgB;AAAA,MAClC,QAAQ,KAAK,wBAAwB,mBAAmB,CAAC;AAAA,MACzD,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,cAAc,WAAW,EAAE,CAAC;AAAA,IAChE,CAAC;AAAA;AAEL;AAKA,SAAS,eAAe,CAAC,QAAmB,OAAe;AAAA,EACzD,MAAM,SAAS,OAAO,mBAAmB;AAAA,IACvC,OAAO,GAAG;AAAA,IACV,MAAM;AAAA,EACR,CAAC;AAAA,EAED,MAAM,4BAA4B,OAAO,sBAAsB;AAAA,IAC7D,OAAO;AAAA,IACP,SAAS;AAAA,MACP;AAAA,QACE,SAAS;AAAA,QACT,YAAY,eAAe;AAAA,QAC3B,SAAS,EAAE,YAAY,SAAS,eAAe,KAAK;AAAA,MACtD;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,YAAY,eAAe;AAAA,QAC3B,QAAQ,EAAE,MAAM,UAAU;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EAED,MAAM,sBAAsB,OAAO,sBAAsB;AAAA,IACvD,OAAO;AAAA,IACP,SAAS;AAAA,MACP,EAAE,SAAS,GAAG,YAAY,eAAe,SAAS,SAAS,CAAC,EAAE;AAAA,MAC9D;AAAA,QACE,SAAS;AAAA,QACT,YAAY,eAAe;AAAA,QAC3B,gBAAgB;AAAA,UACd,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,YAAY,eAAe;AAAA,QAC3B,QAAQ,EAAE,MAAM,UAAU;AAAA,MAC5B;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,YAAY,eAAe;AAAA,QAC3B,QAAQ,EAAE,MAAM,UAAU;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EAED,MAAM,gCAAgC,OAAO,sBAAsB;AAAA,IACjE,OAAO;AAAA,IACP,SAAS;AAAA,MACP;AAAA,QACE,SAAS;AAAA,QACT,YAAY,eAAe;AAAA,QAC3B,gBAAgB;AAAA,UACd,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EAED,OAAO;AAAA,IACL,eAAe,OAAO,sBAAsB;AAAA,MAC1C,OAAO,GAAG;AAAA,MACV,QAAQ,OAAO,qBAAqB;AAAA,QAClC,kBAAkB,CAAC,yBAAyB;AAAA,MAC9C,CAAC;AAAA,MACD,SAAS,EAAE,QAAQ,QAAQ,YAAY,cAAc;AAAA,IACvD,CAAC;AAAA,IACD,cAAc,OAAO,sBAAsB;AAAA,MACzC,OAAO,GAAG;AAAA,MACV,QAAQ,OAAO,qBAAqB;AAAA,QAClC,kBAAkB,CAAC,mBAAmB;AAAA,MACxC,CAAC;AAAA,MACD,SAAS,EAAE,QAAQ,QAAQ,YAAY,kBAAkB;AAAA,IAC3D,CAAC;AAAA,IACD,wBAAwB,OAAO,sBAAsB;AAAA,MACnD,OAAO,GAAG;AAAA,MACV,QAAQ,OAAO,qBAAqB;AAAA,QAClC,kBAAkB,CAAC,6BAA6B;AAAA,MAClD,CAAC;AAAA,MACD,SAAS,EAAE,QAAQ,QAAQ,YAAY,kBAAkB;AAAA,IAC3D,CAAC;AAAA,EACH;AAAA;;;ACzaF,eAAsB,gBAAgB,CAAC,KAAgC;AAAA,EACrE,IAAI;AAAA,IACF,MAAM,WAAW,MAAM,MAAM,GAAG;AAAA,IAChC,MAAM,OAAO,MAAM,SAAS,KAAK;AAAA,IACjC,OAAO,MAAM,kBAAkB,IAAI;AAAA,IACnC,OAAO,IAAG;AAAA,IACV,QAAQ,MAAM,+BAA+B,IAAI,QAAQ,EAAC;AAAA,IAC1D,MAAM;AAAA;AAAA;AA+FV,eAAsB,kBAAkB,CACtC,QACA,aACA,QAC4B;AAAA,EAC5B,MAAM,oBAAuC,CAAC;AAAA,EAC9C,MAAM,SAA0B,CAAC;AAAA,EACjC,MAAM,SAAsB;AAAA,IAC1B,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,aAAa,QAAQ,YAAY;AAAA,EACxD;AAAA,EAEA,IAAI,iBAAiB,IAAI;AAAA,EAEzB,YAAY,MAAM,SAAS,YAAY,QAAQ,mBAAmB,QAAQ;AAAA,IAExE,IAAI,YAAY;AAAA,IAChB,IAAI,YAAY,OAAO;AAAA,IAEvB,SAAS,KAAI,EAAG,KAAI,OAAO,QAAQ,MAAK;AAAA,MACtC,MAAM,SAAQ,OAAO;AAAA,MACrB,IAAI,QAAQ,SAAS,OAAM,SAAS,QAAQ,UAAU,OAAM,QAAQ;AAAA,QAElE,MAAM,QAAQ,KAAK,IACjB,OAAM,QAAQ,OAAM,SAAS,QAAQ,QAAQ,QAAQ,MACvD;AAAA,QACA,IAAI,QAAQ,WAAW;AAAA,UACrB,YAAY;AAAA,UACZ,YAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,IAEA,IAAI,cAAc,IAAI;AAAA,MACpB,MAAM,OAAM,MAAM,0BAA0B,QAAQ,QAAQ,WAAW;AAAA,MACvE,kBAAkB,KAAK;AAAA,QACrB,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,OAAO,KAAI;AAAA,QACX,QAAQ,KAAI;AAAA,MACd,CAAC;AAAA,MAED,iBAAiB,IAAI;AAAA,MACrB,OAAO,SAAS;AAAA,MAEhB,OAAO,SAAS;AAAA,MAChB,OAAO,KAAK;AAAA,QACV,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO;AAAA,QACP,QAAQ;AAAA,MACV,CAAC;AAAA,MACD,YAAY;AAAA,IACd;AAAA,IAEA,MAAM,QAAQ,OAAO;AAAA,IAGrB,OAAO,KAAoB;AAAA,MACzB,SAAS,MAAM,gBACb,QACA,SACA,QAAQ,OACR,QAAQ,MACV;AAAA,MACA,GAAG,MAAM;AAAA,MACT,GAAG,MAAM;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAAA,IAED,QAAQ,QAAQ;AAAA,IAGhB,OAAO,OAAO,WAAW,CAAC;AAAA,IAE1B,IAAI,MAAM,QAAQ,QAAQ,QAAQ,GAAG;AAAA,MACnC,OAAO,KAAK;AAAA,QACV,GAAG,MAAM,IAAI,QAAQ;AAAA,QACrB,GAAG,MAAM;AAAA,QACT,OAAO,MAAM,QAAQ,QAAQ;AAAA,QAC7B,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IAEA,IAAI,MAAM,SAAS,QAAQ,SAAS,GAAG;AAAA,MACrC,OAAO,KAAK;AAAA,QACV,GAAG,MAAM;AAAA,QACT,GAAG,MAAM,IAAI,QAAQ;AAAA,QACrB,OAAO,MAAM;AAAA,QACb,QAAQ,MAAM,SAAS,QAAQ;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,IAGA,eAAe,IAAI,IAAI;AAAA,MACrB,UAAU;AAAA,QACR,GAAG,MAAM,IAAI;AAAA,QACb,GAAG,MAAM,IAAI;AAAA,MACf;AAAA,MACA,SAAS;AAAA,QACP,OAAO,aAAa,QAAQ;AAAA,QAC5B,QAAQ,aAAa,SAAS;AAAA,MAChC;AAAA,MACA,gBAAgB;AAAA,QACd,OAAO,QAAQ,QAAQ;AAAA,QACvB,QAAQ,QAAQ,SAAS;AAAA,MAC3B;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,MAAM,MAAM,MAAM,0BAA0B,QAAQ,QAAQ,WAAW;AAAA,EAEvE,kBAAkB,KAAK;AAAA,IACrB,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,OAAO,IAAI;AAAA,IACX,QAAQ,IAAI;AAAA,EACd,CAAC;AAAA,EAED,OAAO;AAAA;AAGT,eAAe,yBAAyB,CACtC,QACA,QACA,WACA;AAAA,EACA,MAAM,UAA6B,OAAO,qBAAqB;AAAA,EAC/D,MAAM,eAA2B,OAAO,cAAc;AAAA,IACpD,OAAO;AAAA,IACP,MAAM,CAAC,WAAW,WAAW,CAAC;AAAA,IAC9B,QAAQ;AAAA,IACR,OACE,gBAAgB,kBAChB,gBAAgB,WAChB,gBAAgB,WAChB,gBAAgB;AAAA,EACpB,CAAC;AAAA,EAED,WAAW,WAAW,QAAQ;AAAA,IAC5B,OAAO,MAAM,2BACX;AAAA,MACE,QAAQ,QAAQ;AAAA,IAClB,GACA;AAAA,MACE,SAAS;AAAA,MACT,QAAQ,CAAC,QAAQ,GAAG,QAAQ,GAAG,CAAC;AAAA,IAClC,GACA,CAAC,QAAQ,OAAO,QAAQ,QAAQ,CAAC,CACnC;AAAA,EACF;AAAA,EACA,OAAO,MAAM,OAAO,CAAC,QAAQ,OAAO,CAAC,CAAC;AAAA,EACtC,MAAM,cAA2B,MAAM,gBACrC,QACA,cACA,aAAa,OACb,aAAa,MACf;AAAA,EACA,aAAa,QAAQ;AAAA,EACrB,OAAO;AAAA;AAkBT,eAAe,eAAe,CAC5B,QACA,SACA,OACA,QACsB;AAAA,EACtB,MAAM,gBAAgB;AAAA,EACtB,MAAM,cAAc,KAAK,KAAM,QAAQ,gBAAiB,GAAG,IAAI;AAAA,EAC/D,MAAM,aAAa,cAAc;AAAA,EAEjC,MAAM,aAAa,OAAO,aAAa;AAAA,IACrC,MAAM;AAAA,IACN,OAAO,eAAe,WAAW,eAAe;AAAA,EAClD,CAAC;AAAA,EAED,MAAM,iBAAiB,OAAO,qBAAqB;AAAA,EACnD,eAAe,oBACb,EAAE,QAAiB,GACnB;AAAA,IACE,QAAQ;AAAA,IACR;AAAA,IACA,cAAc;AAAA,EAChB,GACA;AAAA,IACE;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,EACtB,CACF;AAAA,EAEA,MAAM,WAAW,eAAe,OAAO;AAAA,EACvC,OAAO,MAAM,OAAO,CAAC,QAAQ,CAAC;AAAA,EAE9B,MAAM,WAAW,SAAS,WAAW,IAAI;AAAA,EACzC,MAAM,cAAc,WAAW,eAAe;AAAA,EAC9C,MAAM,OAAO,IAAI,kBAAkB,WAAW;AAAA,EAE9C,MAAM,YAAY,IAAI,kBAAkB,QAAQ,SAAS,CAAC;AAAA,EAC1D,SAAS,KAAI,EAAG,KAAI,QAAQ,MAAK;AAAA,IAC/B,MAAM,WAAW,KAAI;AAAA,IACrB,MAAM,SAAS,WAAW,QAAQ;AAAA,IAClC,UAAU,IAAI,KAAK,SAAS,UAAU,MAAM,GAAG,KAAI,QAAQ,CAAC;AAAA,EAC9D;AAAA,EAEA,MAAM,QAAQ,IAAI,UAAU,WAAW,OAAO,MAAM;AAAA,EACpD,MAAM,SAAS,MAAM,kBAAkB,KAAK;AAAA,EAE5C,WAAW,MAAM;AAAA,EACjB,OAAO;AAAA;;;AC/SF,MAAM,aAAa;AAAA,EACf;AAAA,EACT;AAAA,EACA;AAAA,EACA,WAAkC,IAAI;AAAA,EACtC,YAAwC,IAAI;AAAA,EAC5C,SAAkC,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA,oBAAiC,IAAI;AAAA,EAErC,WAAW,CACT,QACA,oBACA,QACA,SAAoC,cACpC;AAAA,IACA,KAAK,UAAU;AAAA,IACf,KAAK,sBAAsB;AAAA,IAC3B,KAAK,UAAU;AAAA,IACf,KAAK,eAAe,OAAO,cAAc;AAAA,MACvC,OAAO;AAAA,MACP,MAAM;AAAA,QACJ,KAAK,QAAQ;AAAA,QACb,KAAK,QAAQ;AAAA,QACb,KAAK,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,MACA,OACE,gBAAgB,kBAChB,gBAAgB,WAChB,gBAAgB;AAAA,IACpB,CAAC;AAAA,IACD,KAAK,qBAAqB,qBAAqB,OAAO,MAAM;AAAA,IAC5D,KAAK,oBAAoB,IAAI,IAC3B,MAAM,KAAK,EAAE,QAAQ,OAAO,mBAAmB,GAAG,CAAC,IAAG,OAAM,EAAC,CAC/D;AAAA;AAAA,EASF,OAAO,CAAC,IAAqB;AAAA,IAC3B,MAAM,SAAS,KAAK,MAAM,eAAe,EAAE;AAAA,IAC3C,MAAM,gBAAgB,OAAO,GAAG;AAAA,IAChC,OAAO;AAAA,MACL,OAAO,cAAc,QAAQ,KAAK,aAAa;AAAA,MAC/C,QAAQ,cAAc,SAAS,KAAK,aAAa;AAAA,IACnD;AAAA;AAAA,EASF,cAAc,CAAC,IAAqB;AAAA,IAClC,MAAM,YAAY,KAAK,MAAM,eAAe,EAAE,EAAE,GAAG;AAAA,IACnD,IAAI,WAAW;AAAA,MACb,OAAO;AAAA,QACL,OAAO,UAAU,QAAQ,KAAK,aAAa;AAAA,QAC3C,QAAQ,UAAU,SAAS,KAAK,aAAa;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,OAAO,KAAK,QAAQ,EAAE;AAAA;AAAA,EASxB,SAAS,CAAC,IAAwB;AAAA,IAChC,IAAI,CAAC,KAAK,UAAU,IAAI,EAAE,GAAG;AAAA,MAC3B,MAAM,IAAI,MACR,WAAW,8HACb;AAAA,IACF;AAAA,IAEA,OAAO,KAAK,UAAU,IAAI,EAAE,EAAG,GAAG,mBAAmB;AAAA;AAAA,MAMnD,QAAQ,GAAG;AAAA,IACb,OAAO,KAAK;AAAA;AAAA,MAMV,UAAU,GAAG;AAAA,IACf,OAAO,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA;AAAA,OAoBnC,aAAY,CAAC,MAAoD;AAAA,IACrE,MAAM,QAAQ,IACZ,OAAO,QAAQ,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS,KAAK,YAAY,IAAI,KAAK,IAAI,CAAC,CACzE;AAAA;AAAA,OAaI,YAAW,CACf,IACA,KACA,SACA;AAAA,IACA,MAAM,SACJ,eAAe,cAAc,MAAM,MAAM,iBAAiB,GAAG;AAAA,IAE/D,IAAI,iBAAsC,KAAK,qBAC7C,QACA,EACF;AAAA,IACA,MAAM,aAAa,KAAK,MAAM,wBAAwB;AAAA,IAEtD,IAAI,SAAS,uBAAuB;AAAA,MAClC,iBACE,MAAM,KAAK,mBAAmB,eAAe,cAAc;AAAA,IAC/D;AAAA,IAEA,KAAK,oBAAoB,eAAe,SAAS,UAAU;AAAA,IAE3D,MAAM,SAAsB;AAAA,MAC1B,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,MACvB,YAAY,eAAe;AAAA,MAC3B,SAAS;AAAA,QACP,OAAO,eAAe,QAAQ,QAAQ,KAAK,aAAa;AAAA,QACxD,QAAQ,eAAe,QAAQ,SAAS,KAAK,aAAa;AAAA,MAC5D;AAAA,MACA,cAAc,eAAe;AAAA,MAC7B,gBAAgB;AAAA,QACd,OAAO,eAAe,QAAQ,QAAQ,KAAK,aAAa;AAAA,QACxD,QAAQ,eAAe,QAAQ,SAAS,KAAK,aAAa;AAAA,MAC5D;AAAA,MACA;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;AAAA,IAC/B,KAAK,kBAAkB,OAAO,UAAU;AAAA,IAExC,eAAe,QAAQ,QAAQ;AAAA,IAC/B,OAAO,EAAE,IAAI,OAAO;AAAA;AAAA,OAYhB,eAAc,CAClB,UACA,MACmB;AAAA,IACnB,IAAI,cAAc,MAAM;AAAA,MACtB,MAAM,KAAK,4BAA4B,UAAU,IAAI;AAAA,IACvD,EAAO;AAAA,MACL,MAAM,KAAK,2BAA2B,UAAU,IAAI;AAAA;AAAA,IAGtD,IAAI,KAAK,UAAU;AAAA,MACjB,MAAM,KAAK,WAAW,QAAQ;AAAA,IAChC;AAAA,IACA,OAAO;AAAA;AAAA,OAQH,WAAU,CAAC,UAAoB;AAAA,IACnC,MAAM,SAAS,KAAK,SAAS,IAAI,QAAQ;AAAA,IACzC,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,MAAM,UAAU,oBAAoB;AAAA,IAChD;AAAA,IAEA,IAAI,OAAO,UAAU;AAAA,MACnB,QAAQ,KAAK,UAAU,6BAA6B;AAAA,MACpD;AAAA,IACF;AAAA,IAEA,WAAW,SAAS,OAAO,SAAS;AAAA,MAClC,MAAM,aAAa,MAAM,KAAK,MAAM,UAAU,KAAK;AAAA,MACnD,OAAO,aAAa,KAAK,UAAU;AAAA,IACrC;AAAA,IAEA,OAAO,WAAW;AAAA;AAAA,OASd,aAAY,CAAC,UAAoB;AAAA,IACrC,MAAM,SAAS,KAAK,SAAS,IAAI,QAAQ;AAAA,IACzC,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,MAAM,UAAU,oBAAoB;AAAA,IAChD;AAAA,IAEA,IAAI,CAAC,OAAO,UAAU;AAAA,MACpB,QAAQ,KAAK,UAAU,yBAAyB;AAAA,MAChD;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,IACZ,OAAO,aAAa,IAAI,CAAC,eACvB,KAAK,MAAM,YAAY,UAAU,CACnC,CACF;AAAA,IAEA,OAAO,WAAW;AAAA,IAClB,OAAO,eAAe,CAAC;AAAA;AAAA,OAUnB,SAAQ,CAAC,IAAY,KAAU,oBAAoB,KAAK;AAAA,IAC5D,MAAM,OAAO,MAAM,SAAS,OAAO,IAAI,GAAG;AAAA,IAC1C,KAAK,oBAAoB;AAAA,IACzB,MAAM,eAAe,MAAM,aAAa,OACtC,KAAK,SACL,MACA,KAAK,qBACL,KAAK,QAAQ,aACf;AAAA,IAEA,MAAM,aAAa,IAAI,WACrB,KAAK,SACL,cACA,MACA,KAAK,qBACL,KAAK,QAAQ,aACf;AAAA,IACA,KAAK,OAAO,IAAI,IAAI,UAAU;AAAA,IAC9B,OAAO;AAAA;AAAA,EAGT,OAAO,CAAC,IAAY;AAAA,IAClB,IAAI,CAAC,KAAK,OAAO,IAAI,EAAE,GAAG;AAAA,MACxB,MAAM,IAAI,MACR,QAAQ,sEACV;AAAA,IACF;AAAA,IACA,OAAO,KAAK,OAAO,IAAI,EAAE;AAAA;AAAA,EAG3B,wBAAwB,CAAC,MAA4B;AAAA,IACnD,IACE,EAAE,gBAAgB,aAClB,KAAK,eACL,gBAAgB;AAAA,MAEhB;AAAA,IAEF,MAAM,SAAoC,KAAK,UAAU,IACvD,KAAK,SACP;AAAA,IACA,IAAI,CAAC,UAAU,CAAC,OAAO,QAAQ;AAAA,MAC7B,MAAM,IAAI,MACR,QAAQ,KAAK,oCAAoC,KAAK,YACxD;AAAA,IACF;AAAA,IAEA,IACE,OAAO,KAAK,CAAC,UAAU,MAAM,eAAe,KAAK,YAAY,UAAU;AAAA,MAEvE;AAAA,IAEF,KAAK,MAAM,eAAe,OAAO,EAAE;AAAA;AAAA,EAUrC,WAAW,CAAC,IAAY,eAA8B,YAAoB;AAAA,IACxE,KAAK,UAAU,IAAI,IAAI;AAAA,MACrB;AAAA,WACK;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAAA;AAAA,EASH,6BAA6B,CAAC,QAAqB,MAA0B;AAAA,IAC3E,MAAM,UAAU,KAAK,QAAQ,cAAc;AAAA,MACzC,OAAO,GAAG;AAAA,MACV,MAAM,CAAC,OAAO,OAAO,OAAO,MAAM;AAAA,MAClC,QAAQ;AAAA,MACR,OACE,gBAAgB,WAChB,gBAAgB,WAChB,gBAAgB,kBAChB,gBAAgB;AAAA,IACpB,CAAC;AAAA,IAED,KAAK,QAAQ,MAAM,2BACjB;AAAA,MACE,QAAQ;AAAA,IACV,GACA;AAAA,MACE;AAAA,IACF,GACA,CAAC,OAAO,OAAO,OAAO,MAAM,CAC9B;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,2BAA2B,CAC/B,UACA,MACA;AAAA,IACA,MAAM,SAAS,IAAI;AAAA,IAEnB,IAAI,kBAAkB;AAAA,IACtB,MAAM,QAAQ,IACZ,OAAO,QAAQ,KAAK,QAAQ,EAAE,IAAI,QAAQ,IAAI,SAAS;AAAA,MACrD,MAAM,MAAM,YAAY,IAAI;AAAA,MAC5B,MAAM,SAAS,MAAM,iBAAiB,GAAG;AAAA,MACzC,mBAAmB,YAAY,IAAI,IAAI;AAAA,MACvC,IAAI,iBAAsC,KAAK,qBAC7C,QACA,EACF;AAAA,MAEA,IAAI,KAAK,uBAAuB;AAAA,QAC9B,iBACE,MAAM,KAAK,mBAAmB,eAAe,cAAc;AAAA,MAC/D;AAAA,MACA,OAAO,IAAI,IAAI,cAAc;AAAA,KAC9B,CACH;AAAA,IAEA,MAAM,UAAU,MAAM,mBACpB,QACA,KAAK,QAAQ,aACb,KAAK,OACP;AAAA,IAEA,KAAK,SAAS,IAAI,UAAU;AAAA,MAC1B;AAAA,MACA,cAAc,CAAC;AAAA,MACf,UAAU;AAAA,IACZ,CAAC;AAAA;AAAA,OAGG,0BAA0B,CAAC,UAAoB,MAAuB;AAAA,IAC1E,MAAM,UAA6B,CAAC;AAAA,IAEpC,WAAW,SAAS,KAAK,SAAS;AAAA,MAChC,MAAM,UACJ,MAAM,QACN,IAAI,IACF,MAAM,IAAK,SAAS,EAAE,QAAQ,QAAQ,OAAO,GAC7C,MAAM,IAAK,MACb;AAAA,MACF,MAAM,SACJ,MAAM,OACN,IAAI,IACF,MAAM,KAAM,SAAS,EAAE,QAAQ,SAAS,MAAM,GAC9C,MAAM,KAAM,MACd;AAAA,MAEF,MAAM,WAAW,OAAO,MAAM,MAAM,OAAO,GAAG,KAAK;AAAA,MACnD,MAAM,SAAS,CAAC,KAAK,MACjB,MAAM,iBAAiB,MAAM,IAC7B,MAAM,kBAAkB,IAAI,UAAU,GAAG,CAAC,CAAC;AAAA,MAE/C,IAAI;AAAA,MACJ,IAAI,KAAK,KAAK;AAAA,QACZ,MAAM,SAAS,IAAI,IACjB,OAAO,SAAS,EAAE,QAAQ,QAAQ,SAAS,GAC3C,OAAO,MACT;AAAA,QACA,MAAM,UAAU,MAAM,MAAM,MAAM,EAAE,KAAK,OAAO,OAAM;AAAA,UACpD,MAAM,OAAO,GAAE,QAAQ,IAAI,kBAAkB,KAAK,IAAI,YAAY;AAAA,UAElE,IACE,IAAI,SAAS,MAAM,KACnB,IAAI,SAAS,IAAI,KACjB,IAAI,SAAS,SAAS,GACtB;AAAA,YACA,OAAO,IAAI,WAAW,MAAM,GAAE,YAAY,CAAC;AAAA,UAC7C;AAAA,UAEA,OAAO,GAAE,MAAM,mCAAmC;AAAA,UAClD,MAAM,KAAK,IAAI,oBAAoB,MAAM;AAAA,UACzC,MAAM,KAAK,MAAM,IAAI,SAAS,GAAE,KAAK,YAAY,EAAE,CAAC,EAAE,YAAY;AAAA,UAClE,OAAO,IAAI,WAAW,EAAE;AAAA,SACzB;AAAA,QACD,WAAW;AAAA,MACb;AAAA,MAEA,MAAM,kBAAmC;AAAA,QACvC,SAAS;AAAA,QACT;AAAA,QACA,gBAAgB,IAAI;AAAA,QACpB,OAAO,KAAK,MAAM,KAAK,QAAQ,cAAc,OAAO;AAAA,QACpD,QAAQ,KAAK,MAAM,KAAK,QAAQ,cAAc,OAAO;AAAA,MACvD;AAAA,MAEA,YAAY,SAAS,UAAU,OAAO,QAAQ,SAAS,MAAM,GAGxD;AAAA,QACH,MAAM,WAAW,MAAM,iBAAiB;AAAA,QACxC,MAAM,YACJ,MAAM,WAAW,IACjB,MAAM,iBAAiB,IACvB,MAAM,iBAAiB;AAAA,QACzB,MAAM,UAAU,MAAM,iBAAiB;AAAA,QACvC,MAAM,aACJ,MAAM,WAAW,IACjB,MAAM,iBAAiB,IACvB,MAAM,iBAAiB;AAAA,QAEzB,gBAAgB,eAAe,IAAI,SAAS;AAAA,UAC1C,YAAY;AAAA,YACV,GAAG,WAAW;AAAA,YACd,GAAG,aAAa;AAAA,UAClB;AAAA,UACA,cAAc;AAAA,YACZ,OAAO,MAAM,WAAW;AAAA,YACxB,QAAQ,MAAM,WAAW;AAAA,UAC3B;AAAA,UACA,UAAU;AAAA,YACR,GAAG,MAAM,MAAM,IAAI,gBAAgB;AAAA,YACnC,GAAG,MAAM,MAAM,IAAI,gBAAgB;AAAA,UACrC;AAAA,UACA,SAAS;AAAA,YACP,OAAO,MAAM,WAAW,IAAI,gBAAgB;AAAA,YAC5C,QAAQ,MAAM,WAAW,IAAI,gBAAgB;AAAA,UAC/C;AAAA,UACA,gBAAgB;AAAA,YACd,OAAO,MAAM,MAAM,IAAI,gBAAgB;AAAA,YACvC,QAAQ,MAAM,MAAM,IAAI,gBAAgB;AAAA,UAC1C;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MAEA,QAAQ,KAAK,eAAe;AAAA,IAC9B;AAAA,IAEA,KAAK,SAAS,IAAI,UAAU;AAAA,MAC1B;AAAA,MACA,cAAc,CAAC;AAAA,MACf,UAAU;AAAA,IACZ,CAAC;AAAA;AAAA,EAMH,QAAQ;AAAA,IAEN,wBAAwB,MAAgB;AAAA,MACtC,OAAO,KAAK,WAAW,MAAM,KAAK,KAAK,SAAS,KAAK,CAAC,IAAI,CAAC;AAAA;AAAA,IAI7D,oBAAoB,MAAgB;AAAA,MAClC,OAAO,MAAM,KAAK,KAAK,SAAS,QAAQ,CAAC,EACtC,OAAO,IAAI,WAAW,MAAM,QAAQ,EACpC,IAAI,EAAE,SAAS,GAAG;AAAA;AAAA,IAWvB,gBAAgB,CAAC,IAAe,WAAwB;AAAA,MACtD,MAAM,YAAuC,KAAK,UAAU,IAAI,EAAE;AAAA,MAClE,IAAI,CAAC;AAAA,QAAW;AAAA,MAChB,MAAM,gBAAgB,UAAU,UAC9B,CAAC,UAAU,MAAM,eAAe,OAAO,UACzC;AAAA,MACA,IAAI,kBAAkB;AAAA,QAAI;AAAA,MAC1B,UAAU,iBAAiB;AAAA,MAC3B,KAAK,UAAU,IAAI,IAAI,SAAS;AAAA;AAAA,IASlC,gBAAgB,CAAC,OAAiC;AAAA,MAChD,IAAI,CAAC,KAAK,UAAU,IAAI,EAAE,GAAG;AAAA,QAC3B,MAAM,IAAI,MACR,WAAW,8IACb;AAAA,MACF;AAAA,MACA,OAAO,KAAK,UAAU,IAAI,EAAE,KAAK,CAAC;AAAA;AAAA,IASpC,kBAAkB,CAAC,OAAwB;AAAA,MACzC,MAAM,UAAqC,KAAK,UAAU,IAAI,EAAE;AAAA,MAChE,IAAI,CAAC,SAAS;AAAA,QACZ,MAAM,IAAI,MACR,WAAW,8HACb;AAAA,MACF;AAAA,MACA,OAAO,QAAQ,GAAG;AAAA;AAAA,IAQpB,eAAe,MAAM;AAAA,MACnB,OAAO;AAAA,QAKL,WAAW,KAAK,kBAAkB;AAAA,QAIlC,MAAM,KAAK,QAAQ,qBAAqB,KAAK,kBAAkB;AAAA,QAI/D,OAAO,KAAK,QAAQ;AAAA,MACtB;AAAA;AAAA,IAOF,yBAAyB,MAAM;AAAA,MAC7B,SAAS,KAAI,EAAG,KAAI,KAAK,QAAQ,oBAAoB,MAAK;AAAA,QACxD,IAAI,KAAK,kBAAkB,IAAI,EAAC,GAAG;AAAA,UACjC,KAAK,kBAAkB,OAAO,EAAC;AAAA,UAC/B,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,MAAM,IAAI,MAAM,mDAAmD;AAAA;AAAA,IASrE,WAAW,OAAO,UAA2B;AAAA,MAC3C,MAAM,aAAa,KAAK,MAAM,wBAAwB;AAAA,MAEtD,IAAI,MAAM,UAAU;AAAA,QAClB,QAAQ,OAAO,IAAG,QAAQ,OAAM;AAAA,UAC9B,OAAO,KAAK,aAAa;AAAA,UACzB,QAAQ,KAAK,aAAa;AAAA,QAC5B;AAAA,QAGA,MAAM,WAAW,KAAI;AAAA,QACrB,OAAO,WAAW,QAAQ,GAAG,oCAAoC;AAAA,QAEjE,KAAK,QAAQ,MAAM,aACjB,EAAE,SAAS,KAAK,cAAc,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,WAAW,EAAE,GACpE,MAAM,UACN,EAAE,aAAa,UAAU,cAAc,GAAE,GACzC,EAAE,OAAO,IAAG,QAAQ,IAAG,oBAAoB,EAAE,CAC/C;AAAA,MACF,EAAO;AAAA,QACL,KAAK,QAAQ,MAAM,2BACjB;AAAA,UACE,QAAQ,MAAM;AAAA,QAChB,GACA;AAAA,UACE,SAAS,KAAK;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,UAAU;AAAA,QAC3B,GACA,CAAC,MAAM,QAAQ,OAAO,MAAM,QAAQ,QAAQ,CAAC,CAC/C;AAAA;AAAA,MAGF,YAAY,IAAI,WAAW,MAAM,gBAAgB;AAAA,QAC/C,MAAM,WAAW,KAAK,UAAU,IAAI,EAAE;AAAA,QACtC,IAAI,UAAU;AAAA,UACZ,SAAS,KAAK,KAAK,QAAQ,WAAW,CAAC;AAAA,QACzC,EAAO;AAAA,eAAK,YAAY,IAAI,QAAQ,UAAU;AAAA,MAChD;AAAA,MACA,OAAO;AAAA;AAAA,IAQT,aAAa,OAAO,eAAuB;AAAA,MACzC,KAAK,kBAAkB,IAAI,UAAU;AAAA,MACrC,YAAY,IAAI,WAAW,KAAK,UAAU,QAAQ,GAAG;AAAA,QACnD,MAAM,gBAAgB,OAAO,UAC3B,CAAC,UAAU,MAAM,eAAe,UAClC;AAAA,QACA,IAAI,kBAAkB,IAAI;AAAA,UACxB,OAAO,OAAO,eAAe,CAAC;AAAA,QAChC;AAAA,QACA,IAAI,CAAC,OAAO,QAAQ;AAAA,UAClB,KAAK,UAAU,OAAO,EAAE;AAAA,QAC1B;AAAA,MACF;AAAA;AAAA,EAEJ;AAAA,EAEA,oBAAoB,CAClB,QACA,OAAO,WACc;AAAA,IACrB,MAAM,UAAsB,KAAK,8BAC/B,QACA,IACF;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA,YAAY,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,MACzB,cAAc,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO;AAAA,IAC/D;AAAA;AAAA,EAGF,mBAAmB,CAAC,SAAqB,YAAoB;AAAA,IAC3D,MAAM,cAAiC,KAAK,QAAQ,qBAAqB;AAAA,IACzE,YAAY,qBACV;AAAA,MACE;AAAA,MACA,UAAU;AAAA,MACV,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,IAClB,GACA;AAAA,MACE,SAAS,KAAK;AAAA,MACd,UAAU;AAAA,MACV,QAAQ,CAAC,GAAG,GAAG,UAAU;AAAA,IAC3B,GACA,CAAC,QAAQ,OAAO,QAAQ,QAAQ,CAAC,CACnC;AAAA,IAEA,KAAK,QAAQ,MAAM,OAAO,CAAC,YAAY,OAAO,CAAC,CAAC;AAAA;AAAA,EAKlD,OAAO,GAAG;AAAA,IACR,KAAK,aAAa,QAAQ;AAAA;AAE9B;;;AC/sBO,MAAM,OAAO;AAAA,EAIlB;AAAA,EAMA,cAAc;AAAA,IAEZ,WAAW;AAAA,IAEX,kBAAkB;AAAA,IAElB,QAAQ;AAAA,IAER,mBAAmB;AAAA,EACrB;AAAA,EAGA;AAAA,EAKA,SAAS,IAAI;AAAA,EAMb,aAAoB,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAE7C;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAA0B,KAAK,SAAS;AAAA,EACxC,WAAW,IAAI;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAmC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAMA,WAAW,CACT,QACA,SACA,oBACA,QACA,YACA,SACA;AAAA,IACA,KAAK,UAAU;AAAA,SACV;AAAA,SACA,QAAQ;AAAA,IACb;AAAA,IACA,KAAK,cAAc,IAAI,KACrB,MAAM,KAAK,SAAS,GACpB,KAAK,QAAQ,aACf;AAAA,IACA,KAAK,UAAU;AAAA,IACf,KAAK,WAAW;AAAA,IAChB,KAAK,sBAAsB;AAAA,IAC3B,KAAK,iBAAiB,QAAQ,UAAU;AAAA,IACxC,KAAK,SAAS,IAAI,aAAa,QAAQ,oBAAoB,KAAK,OAAO;AAAA,IACvE,KAAK,aAAa;AAAA,MAChB,OAAO,KAAK,OAAO,aAAa;AAAA,MAChC,QAAQ,KAAK,OAAO,aAAa;AAAA,IACnC;AAAA,IACA,KAAK,QAAQ,EAAE,QAAQ,mBAAmB;AAAA,IAC1C,KAAK,iBAAiB;AAAA,MACpB;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,sBAAsB,KAAK,SAAS;AAAA,IACtC;AAAA,IACA,KAAK,cAAc;AAAA,IAEnB,KAAK,wBAAwB,UAAU;AAAA,IACvC,KAAK,OAAO,KAAK,WAAW;AAAA,IAE5B,KAAK,kBAAkB,KAAK,sBAAsB,MAAM;AAAA;AAAA,MAOtD,WAAW,GAAG;AAAA,IAChB,OAAO,KAAK;AAAA;AAAA,MAGV,WAAW,CAAC,OAA2B;AAAA,IACzC,KAAK,eAAe;AAAA,IACpB,MAAM,aACJ,KAAK,YAAY,UACf,KAAK,UAAU,GAAG,QAAQ,OAAO,oBACnC,KAAK,YAAY,WACf,KAAK,UAAU,GAAG,SAAS,OAAO;AAAA,IACtC,IAAI,SAAS,QAAQ,YAAY;AAAA,MAC/B,KAAK,wBAAwB,KAAK,WAAW;AAAA,IAC/C;AAAA;AAAA,EAqBF,MAAM,CAAC,YAAwB;AAAA,IAC7B,uBAAuB,YAAY,KAAK,iBAAiB;AAAA,IAEzD,MAAM,aACJ,WAAW,UAAU,KAAK,YAAY,SACtC,WAAW,WAAW,KAAK,YAAY;AAAA,IACzC,IAAI,KAAK,eAAe,YAAY;AAAA,MAClC,KAAK,UAAU,GAAG,QAAQ;AAAA,MAC1B,KAAK,UAAU,GAAG,QAAQ;AAAA,IAC5B;AAAA,IACA,KAAK,cAAc;AAAA;AAAA,EAGrB,uBAAuB,CAAC,YAAwB;AAAA,IAC9C,IAAI,KAAK,WAAW,QAAQ;AAAA,MAC1B,KAAK,UAAU,GAAG,QAAQ;AAAA,MAC1B,KAAK,UAAU,GAAG,QAAQ;AAAA,IAC5B;AAAA,IAEA,KAAK,YAAY;AAAA,MACf,KAAK,QAAQ,cAAc;AAAA,QACzB,MAAM;AAAA,UACJ,OAAO,WAAW,QAAQ,OAAO;AAAA,UACjC,QAAQ,WAAW,SAAS,OAAO;AAAA,QACrC;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,OACE,gBAAgB,kBAAkB,gBAAgB;AAAA,MACtD,CAAC;AAAA,MACD,KAAK,QAAQ,cAAc;AAAA,QACzB,MAAM;AAAA,UACJ,OAAO,WAAW,QAAQ,OAAO;AAAA,UACjC,QAAQ,WAAW,SAAS,OAAO;AAAA,QACrC;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,OACE,gBAAgB,kBAAkB,gBAAgB;AAAA,MACtD,CAAC;AAAA,IACH;AAAA;AAAA,EAGF,qBAAqB,CAAC,QAA2B;AAAA,IAG/C,MAAM,iBAAiB,IAAI,eAAe,CAAC,YAAY;AAAA,MACrD,IAAI,CAAC,WAAW,CAAC,QAAQ;AAAA,QAAQ;AAAA,MACjC,WAAW,SAAS,SAAS;AAAA,QAC3B,MAAM,QACJ,MAAM,4BAA4B,GAAG,cACrC,MAAM,eAAe,GAAG,aAAa;AAAA,QACvC,MAAM,SACJ,MAAM,4BAA4B,GAAG,aACrC,MAAM,eAAe,GAAG,YAAY;AAAA,QAiBtC,IAAI,OAAO,UAAU,SAAS,OAAO,WAAW,QAAQ;AAAA,UACtD,OAAO,QAAQ,KAAK,IAAI,GAAG,KAAK;AAAA,UAChC,OAAO,SAAS,KAAK,IAAI,GAAG,MAAM;AAAA,QACpC;AAAA,QACA,KAAK,OAAO,EAAE,OAAO,OAAO,aAAa,QAAQ,OAAO,aAAa,CAAC;AAAA,MACxE;AAAA,KACD;AAAA,IACD,IAAI;AAAA,MACF,eAAe,QAAQ,QAAQ,EAAE,KAAK,2BAA2B,CAAC;AAAA,MAClE,MAAM;AAAA,MACN,eAAe,QAAQ,MAAM;AAAA;AAAA,IAE/B,OAAO;AAAA;AAAA,MAaL,UAAU,GAAG;AAAA,IACf,OAAO,KAAK;AAAA;AAAA,MAYV,MAAM,GAAW;AAAA,IACnB,OAAO,KAAK;AAAA;AAAA,MAGV,OAAO,GAAY;AAAA,IACrB,OAAO,KAAK;AAAA;AAAA,MAMV,SAAS,GAAG;AAAA,IACd,OACE,KAAK,QAAQ,cACb,KAAK,QAAQ,cACb,KAAK,QAAQ;AAAA;AAAA,MAQb,YAAY,GAAG;AAAA,IACjB,OACE,KAAK,QAAQ,gBACb,KAAK,QAAQ,qBACb,KAAK,QAAQ;AAAA;AAAA,EAcjB,UAAU,CAAC,SAA6B;AAAA,IACtC,KAAK,WAAW,KAAK,QAAQ,qBAAqB;AAAA,IAClD,MAAM,SAAS,KAAK,cAChB,KAAK,UAAU,KACf,KAAK,SAAS,kBAAkB;AAAA,IACpC,KAAK,cAAc,KAAK,SAAS,gBAAgB;AAAA,MAC/C,OAAO,gBAAgB,KAAK,YAAY;AAAA,MACxC,kBAAkB;AAAA,QAChB;AAAA,UACE,MAAM,OAAO,WAAW;AAAA,UACxB,YAAY,KAAK;AAAA,UACjB,QAAQ,SAAS,UAAU;AAAA,UAC3B,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IAED,KAAK,YAAY,YACf,KAAK,YAAY,mBACjB,KAAK,YAAY,oBACf;AAAA;AAAA,EAeN,IAAI,CAAC,MAAiB;AAAA,IACpB,IAAI,gBAAgB,UAAU;AAAA,MAC5B,KAAK,aAAa,yBAAyB,IAAI;AAAA,IACjD,EAAO;AAAA,MACL,KAAK,OAAO,yBAAyB,IAAI;AAAA;AAAA,IAE3C,KAAK,SAAS,QAAQ,IAAI;AAAA;AAAA,EAY5B,QAAQ,GAAG;AAAA,IACT,IAAI;AAAA,MACF,OACE,KAAK,aACL,mDACF;AAAA,MACA,OAAO,KAAK,UAAU,+CAA+C;AAAA,MAErE,KAAK,IACH,KAAK,mBACL,KAAK,OAAO,QACZ,KAAK,eAAe,oBACtB;AAAA,MACA,KAAK,eAAe,aAAa,KAAK;AAAA,MACtC,WAAW,YAAY,KAAK,SAAS,WAAW;AAAA,QAC9C,SAAS,OAAO,WAAW,KAAK,SAAS,KAAK,cAAc;AAAA,MAC9D;AAAA,MAEA,KAAK,YAAY,oBAAoB,KAAK,SAAS,MAAM;AAAA,MACzD,IAAI,KAAK,SAAS,MAAM,SAAS,KAAK,QAAQ,eAAe;AAAA,QAC3D,MAAM,MAAM,IAAI,MACd,sBAAsB,KAAK,QAAQ,MAAM,qCAAqC,KAAK,OAAO,eAC5F;AAAA,QACA,IAAI,OAAO;AAAA,QACX,MAAM;AAAA,MACR;AAAA,MAEA,WAAW,SAAS,KAAK,SAAS,QAAQ;AAAA,QACxC,WAAW,YAAY,MAAM,WAAW;AAAA,UACtC,KAAK,YAAY;AAAA,UACjB,KAAK,YAAY,aAAa,SAAS,OAAO,aAC5C,KAAK,aACL,SAAS,KACX;AAAA,QACF;AAAA,MACF;AAAA,MAEA,WAAW,YAAY,KAAK,SAAS,WAAW;AAAA,QAC9C,SAAS,OAAO,SAAS;AAAA,MAC3B;AAAA,MACA,KAAK,YAAY,IAAI;AAAA,MAErB,IAAI,KAAK,aAAa;AAAA,QACpB,KAAK,YAAY,QACf,KAAK,QAAQ,OACb,KAAK,UACL,KAAK,WACL,KAAK,SAAS,kBAAkB,CAClC;AAAA,MACF;AAAA,MACA,KAAK,QAAQ,MAAM,OAAO,CAAC,KAAK,SAAS,OAAO,CAAC,CAAC;AAAA,cAClD;AAAA,MACA,KAAK,SAAS,MAAM;AAAA,MACpB,KAAK,YAAY,KAAK;AAAA,MACtB,KAAK,YAAY;AAAA;AAAA;AAAA,EAWrB,YAAY,CACV,OACA,SACO;AAAA,IACP,IAAI,QAAQ,SAAS,YAAY,QAAQ,OAAO,SAAS;AAAA,MACvD,OAAO,qBACL,OACA,KAAK,QACL,KAAK,mBACL,KAAK,WACP;AAAA,IACF;AAAA,IAEA,IAAI,QAAQ,SAAS,WAAW,QAAQ,OAAO,UAAU;AAAA,MACvD,OAAO,qBACL,OACA,KAAK,QACL,KAAK,mBACL,KAAK,WACP;AAAA,IACF;AAAA,IAEA,IAAI,QAAQ,SAAS,QAAQ,IAAI;AAAA,MAC/B,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,IAAI,MACR,4BAA4B,QAAQ,YAAY,QAAQ,IAC1D;AAAA;AAAA,MAME,UAAU,GAAG;AAAA,IACf,OAAO,KAAK,YAAY;AAAA;AAAA,EAe1B,UAAU,CACR,OACA,eACA,UACA,YACA;AAAA,IACA,OAAO,IAAI,WACT,OACA,YAAY,gBAAgB,KAAK,QACjC,KAAK,SACL,KAAK,qBACL,UACA,eACA,YAAY,SACd;AAAA;AAAA,EAqBF,IAAI,CAAC,SAAoB,UAAuB,CAAC,GAAG;AAAA,IAClD,MAAM,eAAe,QAAQ,gBAAgB,KAAK;AAAA,IAClD,QAAQ,cAAc,aAAa,QAAQ,OAAO;AAAA,IAClD,QAAQ,WAAW,KAAK,mBAAmB;AAAA,IAC3C,QAAQ,gBAAgB,aAAa,MAAM,eAAe,OAAO,EAAE;AAAA,IACnE,QAAQ,cAAc;AAAA,IACtB,QAAQ,eAAe,aAAa,MAAM,iBAAiB,OAAO;AAAA,IAClE,QAAQ,eAAe;AAAA,IAEvB,QAAQ,YAAY,KAAK;AAAA,IACzB,QAAQ,WAAW;AAAA,MACjB,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO,QAAQ,YAAY,QAAQ,QAAQ,KAAK,WAAW;AAAA,MAC3D,QAAQ,QAAQ,YAAY,QAAQ,SAAS,KAAK,WAAW;AAAA,IAC/D;AAAA,IAEA,QAAQ,eAAe;AAAA,IACvB,MAAM,OAAO,IAAI,SAAS,SAAS,KAAK,WAAW;AAAA,IACnD,OAAO;AAAA;AAAA,EAWT,SAAS,CAAC,SAAoB,SAA2B;AAAA,IACvD,QAAQ,WAAW,KAAK,mBAAmB;AAAA,IAC3C,QAAQ,cAAc;AAAA,IACtB,QAAQ,eAAe;AAAA,MACrB,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,IACA,QAAQ,UAAU,CAAC;AAAA,IAGnB,MAAM,eAAe;AAAA,MACnB,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,IAEA,WAAW,QAAQ,QAAQ,OAAO;AAAA,MAChC,IAAI,CAAC,KAAK,MAAM;AAAA,QACd,KAAK,OAAO,KAAK,OAAO,QAAQ,KAAK,SAAS;AAAA,MAChD;AAAA,MAEA,IAAI,CAAC,KAAK,aAAa;AAAA,QACrB,KAAK,cAAc,KAAK,OAAO,MAAM,eAAe,KAAK,SAAS,EAAE;AAAA,MACtE;AAAA,MAEA,IAAI,KAAK,OAAO,IAAI,KAAK,KAAM,QAAQ,aAAa,OAAO;AAAA,QACzD,aAAa,QAAQ,KAAK,OAAO,IAAI,KAAK,KAAM;AAAA,MAClD;AAAA,MAEA,IAAI,KAAK,OAAO,IAAI,KAAK,KAAM,SAAS,aAAa,QAAQ;AAAA,QAC3D,aAAa,SAAS,KAAK,OAAO,IAAI,KAAK,KAAM;AAAA,MACnD;AAAA,IACF;AAAA,IAEA,QAAQ,WAAW;AAAA,MACjB,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO,aAAa;AAAA,MACpB,QAAQ,aAAa;AAAA,IACvB;AAAA,IAEA,QAAQ,cAAc;AAAA,MACpB,OAAO,aAAa;AAAA,MACpB,QAAQ,aAAa;AAAA,IACvB;AAAA,IAEA,QAAQ,YAAY,KAAK;AAAA,IAEzB,QAAQ,eAAe,KAAK;AAAA,IAE5B,OAAO,IAAI,cAAc,SAAS,KAAK,WAAW;AAAA;AAAA,EAapD,IAAI,CAAC,UAAwB;AAAA,IAC3B,OAAO,IAAI,UAAU,QAAQ;AAAA;AAAA,EAG/B,IAAI,CAAC,QAAgB,MAAc,UAAwB;AAAA,IACzD,MAAM,SAAS,KAAK,OAAO,QAAQ,MAAM;AAAA,IAEzC,OAAO,IAAI,SAAS,QAAQ,MAAM,QAAQ;AAAA;AAAA,EAG5C,SAAS;AAAA,IACP,MAAM,CAAC,UAAuB,CAAC,MAAM;AAAA,MACnC,QAAQ,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,MAC5C,QAAQ,WAAW,KAAK,mBAAmB;AAAA,MAC3C,QAAQ,gBAAgB;AAAA,QACtB,YAAY;AAAA,QACZ,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,QACvB,SAAS,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,QAC/B,YAAY,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,QACzB,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,MACtC;AAAA,MACA,QAAQ,eAAe,KAAK;AAAA,MAE5B,MAAM,OAAO,IAAI,SAAS,SAAS,KAAK,WAAW;AAAA,MAEnD,IAAI,SAAS,UAAU;AAAA,QACrB,KAAK,WAAW,QAAQ;AAAA,MAC1B;AAAA,MAEA,IAAI,SAAS,UAAU;AAAA,QACrB,KAAK,WAAW,QAAQ;AAAA,MAC1B;AAAA,MAEA,IAAI,SAAS,OAAO;AAAA,QAClB,KAAK,QAAQ,QAAQ;AAAA,MACvB;AAAA,MAEA,OAAO;AAAA;AAAA,IAGT,QAAQ,CAAC,UAAuB,CAAC,MAAM;AAAA,MACrC,QAAQ,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,MAC5C,QAAQ,WAAW,KAAK,mBAAmB;AAAA,MAC3C,QAAQ,gBAAgB;AAAA,QACtB,YAAY;AAAA,QACZ,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,QACvB,SAAS,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,QAC/B,YAAY,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,QACzB,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,MACtC;AAAA,MACA,QAAQ,eAAe,KAAK;AAAA,MAC5B,MAAM,OAAO,IAAI,SAAS,SAAS,KAAK,WAAW;AAAA,MAEnD,IAAI,SAAS,UAAU;AAAA,QACrB,KAAK,WAAW,QAAQ;AAAA,MAC1B;AAAA,MAEA,IAAI,SAAS,UAAU;AAAA,QACrB,KAAK,WAAW,QAAQ;AAAA,MAC1B;AAAA,MAEA,IAAI,SAAS,OAAO;AAAA,QAClB,KAAK,QAAQ,QAAQ;AAAA,MACvB;AAAA,MAEA,OAAO;AAAA;AAAA,IAGT,MAAM,CAAC,YAAyB;AAAA,MAC9B,MAAM,SAAS;AAAA,QACb,IAAI,QAAQ,MAAM,IAAI,QAAQ,IAAI,KAAK;AAAA,QACvC,IAAI,QAAQ,MAAM,IAAI,QAAQ,IAAI,KAAK;AAAA,MACzC;AAAA,MACA,MAAM,QAAQ,KAAK,MACjB,QAAQ,IAAI,IAAI,QAAQ,MAAM,GAC9B,QAAQ,IAAI,IAAI,QAAQ,MAAM,CAChC;AAAA,MACA,MAAM,SAAS,KAAK,MACjB,QAAQ,IAAI,IAAI,QAAQ,MAAM,MAAM,KAClC,QAAQ,IAAI,IAAI,QAAQ,MAAM,MAAM,CACzC;AAAA,MAEA,MAAM,OAAO,IAAI,SACf;AAAA,QACE,OAAO,QAAQ;AAAA,QACf,aAAa;AAAA,UACX,YAAY;AAAA,UACZ,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,UACvB,SAAS,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,UAC/B,YAAY,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,UACzB,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,QACtC;AAAA,QACA,QAAQ,QAAQ,UAAU,KAAK,mBAAmB;AAAA,QAClD,WAAW,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,QACjC,OAAO,QAAQ;AAAA,QACf,KAAK,QAAQ;AAAA,QACb,iBAAiB;AAAA,QACjB,cAAc,KAAK;AAAA,QACnB,OAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG,QAAQ,aAAa;AAAA,QAC1B;AAAA,QACA,UAAU;AAAA,MACZ,GACA,KAAK,WACP;AAAA,MAEA,OAAO;AAAA;AAAA,EAEX;AAAA,EAEA,cAAiC;AAAA,EAEjC,kBAAkB,GAAG;AAAA,IACnB,IAAI,KAAK,aAAa;AAAA,MACpB,OAAO,KAAK;AAAA,IACd;AAAA,IAEA,MAAM,SAAS,KAAK,WAClB,uBACA,KAAK,QAAQ,eACJ;AAAA;AAAA;AAAA,wDAIH,KAAK,mBAAmB,YACpB,mBACA;AAAA;AAAA;AAAA,OAKZ;AAAA,IAEA,KAAK,cAAc;AAAA,IACnB,OAAO;AAAA;AAAA,cAgBI,OAAM,CAAC,QAA2B,SAAyB;AAAA,IACtE,OAAO,QAAQ,OAAO,cAAc;AAAA,IACpC,OAAO,SAAS,OAAO,eAAe;AAAA,IACtC,QAAQ,QAAQ,SAAS,uBAAuB,MAAM,QAAQ,MAAM;AAAA,IACpE,OAAO,IAAI,OACT,QACA,SACA,oBACA,QACA;AAAA,MACE,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,IACjB,GACA,WAAW,CAAC,CACd;AAAA;AAAA,EAQF,OAAO,GAAG;AAAA,IACR,KAAK,gBAAgB,WAAW;AAAA,IAChC,KAAK,QAAQ,QAAQ;AAAA,IACrB,KAAK,OAAO,QAAQ;AAAA;AAAA,EAMtB,QAAQ;AAAA,IAIN,QAAQ,MAAiB;AAAA,MACvB,OAAO,KAAK;AAAA;AAAA,EAEhB;AACF;;;;;;ACnxBO,IAAM,MAAM,OAAO,OAAO;AAAA,EAC/B,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE;AAAA,EAClD,cAAc,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC5D,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC/B,YAAY,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EACnD,OAAO,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EACvC,OAAO,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACrD,QAAQ,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC/C,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAChC,gBAAgB,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACvD,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC/B,YAAY,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC1D,OAAO,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACrD,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,YAAY,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC5C,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,OAAO,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC9C,gBAAgB,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC9D,UAAU,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACjD,SAAS,EAAE,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,EAAE;AAAA,EACxD,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC/B,UAAU,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EAC1C,UAAU,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACjD,eAAe,EAAE,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,EAAE;AAAA,EAC7D,UAAU,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACxD,WAAW,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE;AAAA,EAC3C,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,aAAa,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EACpD,gBAAgB,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC9D,YAAY,EAAE,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,EAAE;AAAA,EAC3C,YAAY,EAAE,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,EAAE;AAAA,EAChD,SAAS,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EACzC,YAAY,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC1D,cAAc,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC5D,eAAe,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC7D,eAAe,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC7D,eAAe,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACtD,YAAY,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EACnD,UAAU,EAAE,GAAG,GAAG,GAAG,WAAW,GAAG,UAAU,GAAG,EAAE;AAAA,EAClD,aAAa,EAAE,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,EAAE;AAAA,EAC5C,SAAS,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACvD,YAAY,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE;AAAA,EACnD,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,aAAa,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACpD,aAAa,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC3D,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAClC,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,YAAY,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE;AAAA,EACnD,MAAM,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE;AAAA,EACtC,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,EAAE;AAAA,EACxD,MAAM,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACpD,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAChC,aAAa,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EACpD,UAAU,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EACjD,SAAS,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAChD,QAAQ,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EAC/C,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EACvC,OAAO,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,EAAE;AAAA,EACpD,UAAU,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACxD,eAAe,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACtD,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE;AAAA,EAClD,cAAc,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACrD,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,YAAY,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC1D,WAAW,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC3C,gBAAgB,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC9D,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,YAAY,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC1D,WAAW,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAClD,aAAa,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACpD,eAAe,EAAE,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC5D,cAAc,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC5D,gBAAgB,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,EAAE;AAAA,EACzD,gBAAgB,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC9D,aAAa,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EAC7C,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC/B,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,OAAO,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACrD,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAClC,QAAQ,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACtD,kBAAkB,EAAE,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC3D,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EAC5C,cAAc,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC5D,cAAc,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC5D,gBAAgB,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC9D,iBAAiB,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC/D,mBAAmB,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC1D,iBAAiB,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,EAAE;AAAA,EAC1D,iBAAiB,EAAE,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,EAAE;AAAA,EAChE,cAAc,EAAE,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,EAAE;AAAA,EAC9D,WAAW,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EAClD,WAAW,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAClD,UAAU,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACjD,UAAU,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EAC1C,SAAS,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACvD,OAAO,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE;AAAA,EAC9C,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,QAAQ,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE;AAAA,EACxC,WAAW,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE;AAAA,EAC3C,QAAQ,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACtD,eAAe,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC7D,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,eAAe,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC7D,eAAe,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC7D,YAAY,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACnD,WAAW,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,SAAS,GAAG,EAAE;AAAA,EACjD,MAAM,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACpD,MAAM,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC7C,MAAM,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACpD,YAAY,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC1D,QAAQ,EAAE,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,EAAE;AAAA,EACrD,eAAe,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,EAAE;AAAA,EAC9C,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC9B,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,aAAa,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,EAAE;AAAA,EAC5D,QAAQ,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACtD,YAAY,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC1D,UAAU,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACxD,UAAU,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACjD,QAAQ,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACtD,QAAQ,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACtD,SAAS,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACvD,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,WAAW,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACzD,MAAM,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC7C,aAAa,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EAC7C,WAAW,EAAE,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACxD,KAAK,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,EAAE;AAAA,EAClD,MAAM,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC7C,SAAS,EAAE,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,EAAE;AAAA,EACtD,QAAQ,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC/C,aAAa,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EACtC,WAAW,EAAE,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACxD,QAAQ,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACtD,SAAS,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACvD,UAAU,EAAE,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE;AAAA,EAC1C,WAAW,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC3C,WAAW,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE;AAAA,EAClD,OAAO,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EACrD,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAChC,YAAY,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAAA,EAC1D,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EACjC,aAAa,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE;AAC7D,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtIM,IAAM,sBAAsB;AAAA,EACjC,OAAO,CAAC,QAA+B;AAAA,IACrC,OAAO,OAAO,cAAc;AAAA,MAC1B,OAAO;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,IAChB,CAAC;AAAA;AAAA,EAGH,kBAAkB,CAAC,QAA0C;AAAA,IAC3D,OAAO;AAAA,MACL,aAAa,IAAI;AAAA,MACjB,YAAY,CAAC,EAAE,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,YAAY,CAAC;AAAA,IACpE;AAAA;AAAA,EAGF,YAAY,CAAC,QAAoC;AAAA,IAC/C,OAAO,OAAO,mBAAmB;AAAA,MAC/B,OAAO;AAAA,MACP,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBR,CAAC;AAAA;AAAA,EAGH,kBAAkB,CAAC,QAAgD;AAAA,IACjE,OAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MAER,WAAW,EAAE,UAAU,iBAAiB;AAAA,MACxC,QAAQ;AAAA,QACN,SAAS,CAAC,oBAAoB,mBAAmB,MAAM,CAAC;AAAA,QACxD,QAAQ,oBAAoB,aAAa,MAAM;AAAA,MACjD;AAAA,IACF;AAAA;AAEJ;",
|
|
39
|
+
"debugId": "E4D2A9C0603A997464756E2164756E21",
|
|
40
|
+
"names": []
|
|
41
|
+
}
|